/
var
/
www
/
html
/
wordpress
/
wp-content
/
plugins
/
elementor
/
modules
/
design-system-sync
/
classes
/
Upload File
HOME
<?php namespace Elementor\Modules\DesignSystemSync\Classes; use Elementor\Controls_Manager; use Elementor\Core\Breakpoints\Manager as Breakpoints_Manager; use Elementor\Core\Kits\Documents\Tabs\Global_Typography; use Elementor\Modules\DesignSystemSync\Controls\V4_Typography_List; use Elementor\Modules\DesignSystemSync\Module; use Elementor\Plugin; if ( ! defined( 'ABSPATH' ) ) { exit; } class Global_Typography_Extension { public function register_hooks() { add_action( 'elementor/kit/global-typography/register_controls', [ $this, 'add_v4_classes_section' ] ); add_filter( 'elementor/globals/typography/items', [ $this, 'add_v4_classes_to_typography_selector' ] ); } public function add_v4_classes_section( Global_Typography $tab ) { if ( ! Plugin::$instance->editor->is_edit_mode() ) { return; } $v4_typography_classes = Classes_Provider::get_typography_classes(); if ( empty( $v4_typography_classes ) ) { return; } $tab->add_control( 'heading_v4_typography_classes', [ 'type' => Controls_Manager::HEADING, 'label' => esc_html__( 'Atomic Classes', 'elementor' ), 'separator' => 'before', ] ); $tab->add_control( 'heading_v4_typography_classes_description', [ 'type' => Controls_Manager::RAW_HTML, 'raw' => esc_html__( 'V4 classes can only be edited when applied on an atom.', 'elementor' ), 'content_classes' => 'elementor-descriptor', ] ); $items = []; foreach ( $v4_typography_classes as $class ) { $label = sanitize_text_field( $class['label'] ?? '' ); if ( empty( $label ) ) { continue; } $items[] = [ 'title' => $label ]; } $tab->add_control( 'v4_typography_classes_display', [ 'type' => V4_Typography_List::TYPE, 'items' => $items, ] ); } public function add_v4_classes_to_typography_selector( array $items ): array { $v4_classes = Classes_Provider::get_typography_classes(); if ( empty( $v4_classes ) ) { return $items; } $v4_items = []; foreach ( $v4_classes as $class ) { $label = sanitize_text_field( $class['label'] ?? '' ); if ( empty( $label ) ) { continue; } $id = Module::get_v3_sync_id( $label ); $props = $class['props'] ?? []; if ( empty( $props ) ) { continue; } $value = $this->convert_v4_props_to_v3_format( $props ); $variants_props = $class['variants_props'] ?? []; foreach ( $variants_props as $breakpoint => $bp_props ) { if ( Breakpoints_Manager::BREAKPOINT_KEY_DESKTOP === $breakpoint ) { continue; } if ( empty( $bp_props ) ) { continue; } $bp_values = $this->convert_v4_props_to_v3_format( $bp_props ); foreach ( $bp_values as $key => $val ) { if ( $this->is_responsive_prop( $key ) ) { $value[ $key . '_' . $breakpoint ] = $val; } } } $v4_items[ $id ] = [ 'id' => $id, 'title' => $label, 'value' => $value, 'group' => 'v4', ]; } return array_merge( $v4_items, $items ); } private function is_responsive_prop( string $v3_key ): bool { return in_array( $v3_key, Sync_Typography_Props::RESPONSIVE_V3_PROPS, true ); } private function convert_v4_props_to_v3_format( array $v4_props ): array { $v3_format = []; foreach ( Sync_Typography_Props::PROP_MAP as $v4_prop => $v3_prop ) { if ( ! isset( $v4_props[ $v4_prop ] ) || empty( $v4_props[ $v4_prop ] ) ) { continue; } $v3_format[ $v3_prop ] = $this->extract_v4_prop_value( $v4_props[ $v4_prop ] ); } if ( ! empty( $v3_format ) ) { $v3_format['typography_typography'] = 'custom'; } return $v3_format; } private function extract_v4_prop_value( $prop ) { if ( ! empty( $prop['value'] ) ) { return $prop['value']; } return $prop; } }