8889841cPK[(module-panels/src/Panel_Types/Nested.phpnu[title, ENT_QUOTES, get_bloginfo( 'charset' ) ); $array['content'] = $this->get_content(); $array['active'] = $this->active(); $array['instanceNumber'] = $this->instance_number; return $array; } } PK[p module-panels/src/Panel.phpnu[ 'WP_Customize_Panel', 'kirki-nested' => '\Kirki\Panel_Types\Nested', ]; /** * Constructor. * * @access public * @since 1.0 * @param string $id The panel ID. * @param array $args The panel args. */ public function __construct( $id, $args = [] ) { $this->id = $id; $this->args = $args; $this->panel_types = apply_filters( 'kirki_panel_types', $this->panel_types ); if ( $this->args ) { add_action( 'customize_register', [ $this, 'add_panel' ] ); } add_action( 'customize_controls_enqueue_scripts', [ $this, 'enqueue_scrips' ] ); } /** * Add the panel using the Customizer API. * * @access public * @since 1.0 * @param object $wp_customize The customizer object. */ public function add_panel( $wp_customize ) { // Figure out the type of this panel. $this->args['type'] = isset( $this->args['type'] ) ? $this->args['type'] : 'default'; if ( isset( $this->args['panel'] ) && ! empty( $this->args['panel'] ) ) { $this->args['type'] = 'kirki-nested'; } $this->args['type'] = false === strpos( $this->args['type'], 'kirki-' ) ? 'kirki-' . $this->args['type'] : $this->args['type']; $this->args['type'] = 'kirki-default' === $this->args['type'] ? 'default' : $this->args['type']; // Get the class we'll be using to create this panel. $panel_classname = $this->panel_types[ $this->args['type'] ]; // Fallback to the default panel type if the custom class doesn't exist. $panel_classname = class_exists( $panel_classname ) ? $panel_classname : 'WP_Customize_Panel'; // Add the panel. $wp_customize->add_panel( new $panel_classname( $wp_customize, $this->id, apply_filters( 'kirki_panel_args', $this->args, $this->id ) ) ); // Run an action after the panel has been added. do_action( 'kirki_panel_added', $this->id, $this->args ); } /** * Removes the panel. * * @access public * @since 1.0 * @return void */ public function remove() { add_action( 'customize_register', [ $this, 'remove_panel' ], 9999 ); } /** * Add the panel using the Customizer API. * * @access public * @since 1.0 * @param object $wp_customize The customizer object. */ public function remove_panel( $wp_customize ) { $wp_customize->remove_panel( $this->id ); } /** * Enqueues any necessary scripts and styles. * * @access public * @since 1.0 */ public function enqueue_scrips() { wp_enqueue_script( 'kirki-panels', URL::get_from_path( __DIR__ . '/script.js' ), [ 'jquery', 'customize-base', 'customize-controls' ], '1.0', false ); } } PK[ module-panels/src/script.jsnu[/** * @see https://wordpress.stackexchange.com/a/256103/17078 */ ( function() { var _panelEmbed, _panelIsContextuallyActive, _panelAttachEvents; wp.customize.bind( 'pane-contents-reflowed', function() { var panels = []; // Reflow Panels. wp.customize.panel.each( function( panel ) { if ( 'kirki-nested' !== panel.params.type || _.isUndefined( panel.params.panel ) ) { return; } panels.push( panel ); } ); panels.sort( wp.customize.utils.prioritySort ).reverse(); jQuery.each( panels, function( i, panel ) { var parentContainer = jQuery( '#sub-accordion-panel-' + panel.params.panel ); parentContainer.children( '.panel-meta' ).after( panel.headContainer ); } ); } ); // Extend Panel. _panelEmbed = wp.customize.Panel.prototype.embed; _panelIsContextuallyActive = wp.customize.Panel.prototype.isContextuallyActive; _panelAttachEvents = wp.customize.Panel.prototype.attachEvents; wp.customize.Panel = wp.customize.Panel.extend( { attachEvents: function() { var panel = this; if ( 'kirki-nested' !== this.params.type || _.isUndefined( this.params.panel ) ) { _panelAttachEvents.call( this ); return; } _panelAttachEvents.call( this ); panel.expanded.bind( function( expanded ) { if ( expanded ) { wp.customize.panel( panel.params.panel ).contentContainer.addClass( 'current-panel-parent' ); } else { wp.customize.panel( panel.params.panel ).contentContainer.removeClass( 'current-panel-parent' ); } } ); panel.container.find( '.customize-panel-back' ).off( 'click keydown' ).on( 'click keydown', function( event ) { if ( wp.customize.utils.isKeydownButNotEnterEvent( event ) ) { return; } event.preventDefault(); // Keep this AFTER the key filter above if ( panel.expanded() ) { wp.customize.panel( panel.params.panel ).expand(); } } ); }, embed: function() { var panel = this, parentContainer; if ( 'kirki-nested' !== this.params.type || _.isUndefined( this.params.panel ) ) { _panelEmbed.call( this ); return; } _panelEmbed.call( this ); parentContainer = jQuery( '#sub-accordion-panel-' + this.params.panel ); parentContainer.append( panel.headContainer ); }, isContextuallyActive: function() { var panel = this, activeCount = 0, children; if ( 'kirki-nested' !== this.params.type ) { return _panelIsContextuallyActive.call( this ); } children = this._children( 'panel', 'section' ); wp.customize.panel.each( function( child ) { if ( ! child.params.panel || child.params.panel !== panel.id ) { return; } children.push( child ); } ); children.sort( wp.customize.utils.prioritySort ); _( children ).each( function( child ) { if ( child.active() && child.isContextuallyActive() ) { activeCount += 1; } } ); return ( 0 !== activeCount ); } } ); }( jQuery ) ); PK[yymodule-panels/composer.jsonnu[{ "name": "kirki-framework/module-panels", "type": "library", "description": "Panels API & Custom Panel Types for the Kirki WordPress Plugin.", "keywords": [ "wordpress", "customizer", "framework" ], "homepage": "https://kirki.org/", "license": "MIT", "authors": [ { "name": "Kirki Framework", "email": "connect@mapsteps.com" } ], "require": { "php": ">=7.0", "kirki-framework/url-getter": "*" }, "autoload": { "psr-4": { "Kirki\\": "src/" } } } PK[; EEmodule-panels/LICENSEnu[MIT License Copyright (c) 2019 Kirki Framework Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. PK[Hcontrol-palette/dist/control.jsnu[wp.customize.controlConstructor["kirki-palette"]=wp.customize.kirkiDynamicControl.extend({}); //# sourceMappingURL=control.js.map PK[xwQQ control-palette/dist/control.cssnu[.customize-control-kirki-palette{position:relative}.customize-control-kirki-palette input[type=radio]{display:none}.customize-control-kirki-palette input[type=radio]:checked+label{border:3px solid rgba(0,0,0,.4)}.customize-control-kirki-palette label{background:none;border-bottom:3px solid transparent;border-top:3px solid transparent;display:flex;margin-bottom:5px;padding:0}.customize-control-kirki-palette label span{border-bottom:1px solid rgba(0,0,0,.1);border-top:1px solid rgba(0,0,0,.1);color:transparent;flex-grow:1;font-size:0;line-height:10px;padding:10px 0;-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;-ms-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.customize-control-kirki-palette label span:first-child{border-left:1px solid rgba(0,0,0,.1)}.customize-control-kirki-palette label span:last-child{border-right:1px solid rgba(0,0,0,.1)}.customize-control-kirki-palette label span:hover{color:#000;flex-grow:3;font-size:10px;line-height:10px;min-width:60px;padding:10px} /*# sourceMappingURL=control.css.map */ PK[ #control-palette/dist/control.js.mapnu[{"mappings":"AAEAA,GAAGC,UAAUC,mBAAmB,iBAAmBF,GAAGC,UAAUE,oBAAoBC,OAAQ","sources":["packages/kirki-framework/control-palette/src/control.js"],"sourcesContent":["import \"./control.scss\";\n\nwp.customize.controlConstructor['kirki-palette'] = wp.customize.kirkiDynamicControl.extend( {} );\n"],"names":["wp","customize","controlConstructor","kirkiDynamicControl","extend"],"version":3,"file":"control.js.map"}PK[_Enu u $control-palette/dist/control.css.mapnu[{"mappings":"AAAA,iCACE,iBCCF,CDCE,mDACE,YCCJ,CDEM,iEACE,+BCAR,CDKE,uCACE,eAAA,CAGA,mCAAA,CADA,gCAAA,CAGA,YAAA,CADA,iBAAA,CAHA,SCCJ,CDKI,4CAYE,sCAAA,CADA,mCAAA,CANA,iBAAA,CAHA,WAAA,CACA,WAAA,CACA,gBAAA,CAHA,cAAA,CAKA,sCAAA,CACA,mCAAA,CACA,kCAAA,CACA,iCAAA,CACA,8BCDN,CDKM,wDACE,oCCHR,CDMM,uDACE,qCCJR,CDOM,kDAME,UAAA,CAJA,WAAA,CAEA,cAAA,CACA,gBAAA,CAFA,cAAA,CAFA,YCAR","sources":["packages/kirki-framework/control-palette/src/control.scss","%3Cinput%20css%20BymBeB%3E"],"sourcesContent":[".customize-control-kirki-palette {\r\n position: relative;\r\n\r\n input[type=\"radio\"] {\r\n display: none;\r\n\r\n &:checked {\r\n + label {\r\n border: 3px solid rgba(0,0,0,.4);\r\n }\r\n }\r\n }\r\n\r\n label {\r\n background: none;\r\n padding: 0;\r\n border-top: 3px solid transparent;\r\n border-bottom: 3px solid transparent;\r\n margin-bottom: 5px;\r\n display: flex;\r\n\r\n span {\r\n padding: 10px 0;\r\n flex-grow: 1;\r\n font-size: 0;\r\n line-height: 10px;\r\n color: rgba(0,0,0,0);\r\n -webkit-transition: all 200ms ease-in-out;\r\n -moz-transition: all 200ms ease-in-out;\r\n -ms-transition: all 200ms ease-in-out;\r\n -o-transition: all 200ms ease-in-out;\r\n transition: all 200ms ease-in-out;\r\n border-top: 1px solid rgba(0,0,0,.1);\r\n border-bottom: 1px solid rgba(0,0,0,.1);\r\n\r\n &:first-child {\r\n border-left: 1px solid rgba(0,0,0,.1);\r\n }\r\n\r\n &:last-child {\r\n border-right: 1px solid rgba(0,0,0,.1);\r\n }\r\n\r\n &:hover {\r\n padding: 10px;\r\n flex-grow: 3;\r\n min-width: 60px;\r\n font-size: 10px;\r\n line-height: 10px;\r\n color: #000;\r\n }\r\n }\r\n }\r\n}\r\n",".customize-control-kirki-palette {\n position: relative;\n}\n.customize-control-kirki-palette input[type=radio] {\n display: none;\n}\n.customize-control-kirki-palette input[type=radio]:checked + label {\n border: 3px solid rgba(0, 0, 0, 0.4);\n}\n.customize-control-kirki-palette label {\n background: none;\n padding: 0;\n border-top: 3px solid transparent;\n border-bottom: 3px solid transparent;\n margin-bottom: 5px;\n display: flex;\n}\n.customize-control-kirki-palette label span {\n padding: 10px 0;\n flex-grow: 1;\n font-size: 0;\n line-height: 10px;\n color: rgba(0, 0, 0, 0);\n -webkit-transition: all 200ms ease-in-out;\n -moz-transition: all 200ms ease-in-out;\n -ms-transition: all 200ms ease-in-out;\n -o-transition: all 200ms ease-in-out;\n transition: all 200ms ease-in-out;\n border-top: 1px solid rgba(0, 0, 0, 0.1);\n border-bottom: 1px solid rgba(0, 0, 0, 0.1);\n}\n.customize-control-kirki-palette label span:first-child {\n border-left: 1px solid rgba(0, 0, 0, 0.1);\n}\n.customize-control-kirki-palette label span:last-child {\n border-right: 1px solid rgba(0, 0, 0, 0.1);\n}\n.customize-control-kirki-palette label span:hover {\n padding: 10px;\n flex-grow: 3;\n min-width: 60px;\n font-size: 10px;\n line-height: 10px;\n color: #000;\n}\n/*# sourceMappingURL=control.css.map */\n"],"names":[],"version":3,"file":"control.css.map"}PK[OHH%control-palette/src/Field/Palette.phpnu[args['settings'] ) { $args = parent::filter_control_args( $args, $wp_customize ); $args['type'] = 'kirki-palette'; } return $args; } } PK[V' 'control-palette/src/Control/Palette.phpnu[ <# if ( ! data.choices ) { return; } #> {{{ data.label }}} <# if ( data.description ) { #> {{{ data.description }}} <# } #>
<# for ( key in data.choices ) { #> checked<# } #>> <# } #>
=7.0", "kirki-framework/url-getter": "*", "kirki-framework/control-radio": "*" }, "autoload": { "psr-4": { "Kirki\\Control\\": "src/Control", "Kirki\\Field\\": "src/Field" } } } PK[ln00control-palette/LICENSEnu[MIT License Copyright (c) 2019 kirki-framework Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. PK[6_ field-dimensions/dist/preview.jsnu[jQuery(document).ready((function(){wp.hooks.addFilter("kirkiPostMessageStylesOutput","kirki",(function(e,t,i,o){var r;return"kirki-dimensions"===o&&(e+=i.element+"{",_.each(t,(function(t,o){i.choice&&o!==i.choice||!1!==(r=kirkiPostMessage.util.processValue(i,t))&&(i.property?(e+=i.property,""===i.property||"top"!==o&&"bottom"!==o&&"left"!==o&&"right"!==o||(e+="-"+o),e+=":"+r+";"):e+=o+":"+r+";")})),e+="}"),e}))})); //# sourceMappingURL=preview.js.map PK[k!]))!field-dimensions/dist/control.cssnu[ /*# sourceMappingURL=control.css.map */ PK[Yy y $field-dimensions/dist/preview.js.mapnu[{"mappings":"AASAA,OAAQC,UAAWC,OAAK,WACvBC,GAAGC,MAAMC,UAAS,+BACa,SAW3B,SACOC,EAAQC,EAAOC,EAAQC,GAChC,IAAIC,QACF,qBAA0BD,IAC3BH,GAAUE,EAAOG,QAAO,IACxBC,EAAEC,KAAMN,GAAK,SAAYO,EAAKC,GACxBP,EAAOQ,QAAUD,IAAQP,EAAOQ,SAKhC,KAFLN,EAAiBO,iBAAiBC,KAAKC,aAAcX,EAAQM,MAKvDN,EAAOY,UACXd,GAAUE,EAAOY,SACf,KAAUZ,EAAOY,UAAQ,QAAgBL,GAAG,WAAiBA,GAAG,SAAeA,GAAG,UAAgBA,IACnGT,GAAM,IAAUS,GAEjBT,GAAM,IAAUI,EAAc,KAE9BJ,GAAUS,EAAG,IAASL,EAAc,QAIvCJ,GAAM,KAEAA","sources":["src/preview.js"],"sourcesContent":["/* global kirkiPostMessage */\n\nimport \"./control.scss\";\n\n/**\n * Hook in the kirkiPostMessageStylesOutput filter.\n *\n * Handles postMessage styles for typography controls.\n */\njQuery( document ).ready( function() {\n\twp.hooks.addFilter(\n\t\t'kirkiPostMessageStylesOutput',\n\t\t'kirki',\n\n\t\t/**\n\t\t * Append styles for this control.\n\t\t *\n\t\t * @param {string} styles - The styles.\n\t\t * @param {Object} value - The control value.\n\t\t * @param {Object} output - The control's \"output\" argument.\n\t\t * @param {string} controlType - The control type.\n\t\t * @returns {string} - Returns the CSS as a string.\n\t\t */\n\t\tfunction( styles, value, output, controlType ) {\n\t\t\tvar processedValue;\n\t\t\tif ( 'kirki-dimensions' === controlType ) {\n\t\t\t\tstyles += output.element + '{';\n\t\t\t\t_.each( value, function( val, key ) {\n\t\t\t\t\tif ( output.choice && key !== output.choice ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tprocessedValue = kirkiPostMessage.util.processValue( output, val );\n\n\t\t\t\t\tif ( false !== processedValue ) {\n\n\t\t\t\t\t\t// Mostly used for padding, margin & position properties.\n\t\t\t\t\t\tif ( output.property ) {\n\t\t\t\t\t\t\tstyles += output.property;\n\t\t\t\t\t\t\tif ( '' !== output.property && ( 'top' === key || 'bottom' === key || 'left' === key || 'right' === key ) ) {\n\t\t\t\t\t\t\t\tstyles += '-' + key;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tstyles += ':' + processedValue + ';';\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tstyles += key + ':' + processedValue + ';';\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\tstyles += '}';\n\t\t\t}\n\t\t\treturn styles;\n\t\t}\n\t);\n} );\n"],"names":["jQuery","document","ready","wp","hooks","addFilter","styles","value","output","controlType","processedValue","element","_","each","val","key","choice","kirkiPostMessage","util","processValue","property"],"version":3,"file":"preview.js.map"}PK[Z``%field-dimensions/dist/control.css.mapnu[{"mappings":"","sources":[],"sourcesContent":[],"names":[],"version":3,"file":"control.css.map"}PK[#*field-dimensions/src/preview.jsnu[/* global kirkiPostMessage */ import "./control.scss"; /** * Hook in the kirkiPostMessageStylesOutput filter. * * Handles postMessage styles for typography controls. */ jQuery( document ).ready( function() { wp.hooks.addFilter( 'kirkiPostMessageStylesOutput', 'kirki', /** * Append styles for this control. * * @param {string} styles - The styles. * @param {Object} value - The control value. * @param {Object} output - The control's "output" argument. * @param {string} controlType - The control type. * @returns {string} - Returns the CSS as a string. */ function( styles, value, output, controlType ) { var processedValue; if ( 'kirki-dimensions' === controlType ) { styles += output.element + '{'; _.each( value, function( val, key ) { if ( output.choice && key !== output.choice ) { return; } processedValue = kirkiPostMessage.util.processValue( output, val ); if ( false !== processedValue ) { // Mostly used for padding, margin & position properties. if ( output.property ) { styles += output.property; if ( '' !== output.property && ( 'top' === key || 'bottom' === key || 'left' === key || 'right' === key ) ) { styles += '-' + key; } styles += ':' + processedValue + ';'; } else { styles += key + ':' + processedValue + ';'; } } } ); styles += '}'; } return styles; } ); } ); PK[(2"#field-dimensions/src/Dimensions.phpnu[ esc_html__( 'Left Top', 'kirki' ), 'left-center' => esc_html__( 'Left Center', 'kirki' ), 'left-bottom' => esc_html__( 'Left Bottom', 'kirki' ), 'right-top' => esc_html__( 'Right Top', 'kirki' ), 'right-center' => esc_html__( 'Right Center', 'kirki' ), 'right-bottom' => esc_html__( 'Right Bottom', 'kirki' ), 'center-top' => esc_html__( 'Center Top', 'kirki' ), 'center-center' => esc_html__( 'Center Center', 'kirki' ), 'center-bottom' => esc_html__( 'Center Bottom', 'kirki' ), 'font-size' => esc_html__( 'Font Size', 'kirki' ), 'font-weight' => esc_html__( 'Font Weight', 'kirki' ), 'line-height' => esc_html__( 'Line Height', 'kirki' ), 'font-style' => esc_html__( 'Font Style', 'kirki' ), 'letter-spacing' => esc_html__( 'Letter Spacing', 'kirki' ), 'word-spacing' => esc_html__( 'Word Spacing', 'kirki' ), 'top' => esc_html__( 'Top', 'kirki' ), 'bottom' => esc_html__( 'Bottom', 'kirki' ), 'left' => esc_html__( 'Left', 'kirki' ), 'right' => esc_html__( 'Right', 'kirki' ), 'center' => esc_html__( 'Center', 'kirki' ), 'size' => esc_html__( 'Size', 'kirki' ), 'spacing' => esc_html__( 'Spacing', 'kirki' ), 'width' => esc_html__( 'Width', 'kirki' ), 'height' => esc_html__( 'Height', 'kirki' ), 'invalid-value' => esc_html__( 'Invalid Value', 'kirki' ), ); /** * Add a hidden field, the label & description. */ new \Kirki\Field\Generic( wp_parse_args( array( 'type' => 'kirki-generic', 'default' => '', 'wrapper_opts' => array( 'gap' => 'small', ), 'sanitize_callback' => isset( $args['sanitize_callback'] ) ? $args['sanitize_callback'] : array( __CLASS__, 'sanitize' ), 'choices' => array( 'type' => 'hidden', 'parent_type' => 'kirki-dimensions', ), ), $args ) ); $args['choices'] = isset( $args['choices'] ) ? $args['choices'] : array(); $args['choices']['labels'] = isset( $args['choices']['labels'] ) ? $args['choices']['labels'] : array(); if ( isset( $args['transport'] ) && 'auto' === $args['transport'] ) { $args['transport'] = 'postMessage'; } $total_items = count( $args['default'] ); $item_count = 0; $width = 100; $break_indexes = array(); // The 'kirki-group-break' only supports 12 group items inside a group. if ( 2 === $total_items ) { $width = 50; } elseif ( 3 === $total_items ) { $width = 33; } elseif ( 4 === $total_items ) { $width = 25; } elseif ( 5 === $total_items ) { array_push( $break_indexes, 3 ); $width = 33; } elseif ( 6 === $total_items ) { array_push( $break_indexes, 3 ); $width = 33; } elseif ( 7 === $total_items || 8 === $total_items ) { array_push( $break_indexes, 4 ); $width = 25; } elseif ( 9 === $total_items ) { array_push( $break_indexes, 3, 6 ); $width = 33; } elseif ( $total_items > 9 ) { array_push( $break_indexes, 4, 8 ); $width = 25; } foreach ( $args['default'] as $choice => $default ) { $item_count++; $label = $choice; $label = isset( $labels[ $choice ] ) ? $labels[ $choice ] : $label; $label = isset( $args['choices']['labels'][ $choice ] ) ? $args['choices']['labels'][ $choice ] : $label; $wrapper_attrs = array( 'data-kirki-parent-control-type' => 'kirki-dimensions', 'data-kirki-parent-control-setting' => $args['settings'], 'class' => '{default_class} kirki-group-item kirki-w' . $width, ); if ( $item_count === 1 ) { $wrapper_attrs['class'] .= ' kirki-group-start'; } if ( in_array( $item_count, $break_indexes, true ) ) { $wrapper_attrs['class'] .= ' kirki-group-break'; } if ( $item_count === $total_items ) { $wrapper_attrs['class'] .= ' kirki-group-end'; } new \Kirki\Field\Dimension( wp_parse_args( array( 'type' => 'kirki-dimension', 'settings' => $args['settings'] . '[' . $choice . ']', 'parent_setting' => $args['settings'], 'label' => $label, 'default' => $default, 'wrapper_attrs' => $wrapper_attrs, 'choices' => array( 'label_position' => 'bottom', ), 'js_vars' => array(), 'css_vars' => array(), 'output' => array(), ), $args ) ); } } /** * Sanitizes dimension controls. * * @static * @access public * @since 1.0 * @param array $value The value. * @return array */ public static function sanitize( $value ) { if ( ! is_array( $value ) ) { return array(); } foreach ( $value as $key => $val ) { $value[ $key ] = sanitize_text_field( $val ); } return $value; } /** * Override parent method. No need to register any setting. * * @access public * @since 0.1 * @param WP_Customize_Manager $wp_customize The customizer instance. * @return void */ public function add_setting( $wp_customize ) {} /** * Override the parent method. No need for a control. * * @access public * @since 0.1 * @param WP_Customize_Manager $wp_customize The customizer instance. * @return void */ public function add_control( $wp_customize ) {} /** * Enqueue scripts & styles. * * @access public * @since 1.0 * @return void */ public function enqueue_scripts() { wp_enqueue_style( 'kirki-field-dimensions', URL::get_from_path( dirname( __DIR__ ) . '/dist/control.css' ), array(), '1.0' ); } /** * Enqueue scripts & styles on customize_preview_init. * * @access public * @since 1.0 * @return void */ public function enqueue_customize_preview_scripts() { wp_enqueue_script( 'kirki-field-dimensions', URL::get_from_path( dirname( __DIR__ ) ) . '/dist/preview.js', array( 'wp-hooks' ), '1.0', true ); } /** * Adds a custom output class for typography fields. * * @access public * @since 1.0 * @param array $classnames The array of classnames. * @return array */ public function output_control_classnames( $classnames ) { $classnames['kirki-dimensions'] = '\Kirki\Field\CSS\Dimensions'; return $classnames; } } PK[j'field-dimensions/src/CSS/Dimensions.phpnu[ '', 'property' => '', 'media_query' => 'global', 'prefix' => '', 'suffix' => '', ] ); if ( ! is_array( $value ) ) { return; } foreach ( array_keys( $value ) as $key ) { $property = ( empty( $output['property'] ) ) ? $key : $output['property'] . '-' . $key; if ( isset( $output['choice'] ) && $output['property'] ) { if ( $key === $output['choice'] ) { $property = $output['property']; } else { continue; } } if ( false !== strpos( $output['property'], '%%' ) ) { $property = str_replace( '%%', $key, $output['property'] ); } $this->styles[ $output['media_query'] ][ $output['element'] ][ $property ] = $output['prefix'] . $this->process_property_value( $property, $value[ $key ] ) . $output['suffix']; } } } PK[TFfield-dimensions/composer.jsonnu[{ "name": "kirki-framework/field-dimensions", "type": "library", "description": "Dimensions field for the Kirki Customizer framework.", "keywords": [ "wordpress", "customizer", "framework" ], "homepage": "https://kirki.org/", "license": "MIT", "authors": [ { "name": "Kirki Framework", "email": "connect@mapsteps.com" } ], "require": { "php": ">=7.0", "kirki-framework/url-getter": "*", "kirki-framework/control-dimension": "*" }, "autoload": { "psr-4": { "Kirki\\Field\\": "src" } } } PK[ln00field-dimensions/LICENSEnu[MIT License Copyright (c) 2019 kirki-framework Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. PK[β@2module-selective-refresh/src/Selective_Refresh.phpnu[selective_refresh ) ) { return $field; } if ( isset( $field['partial_refresh'] ) && ! empty( $field['partial_refresh'] ) ) { // Start going through each item in the array of partial refreshes. foreach ( $field['partial_refresh'] as $partial_refresh => $partial_refresh_args ) { // If we have all we need, create the selective refresh call. if ( isset( $partial_refresh_args['render_callback'] ) && isset( $partial_refresh_args['selector'] ) ) { $partial_refresh_args = wp_parse_args( $partial_refresh_args, [ 'settings' => $field['settings'], ] ); $wp_customize->selective_refresh->add_partial( $partial_refresh, $partial_refresh_args ); // If partial refresh is set, change the transport to auto. $field['transport'] = 'postMessage'; } } } return $field; } } PK[;f0 0 control-image/dist/control.jsnu[wp.customize.controlConstructor["kirki-image"]=wp.customize.kirkiDynamicControl.extend({initKirkiControl:function(e){var i,t,n,a,l,s;i=(e=e||this).setting._value,t=_.isUndefined(e.params.choices)||_.isUndefined(e.params.choices.save_as)?"url":e.params.choices.save_as,n=e.container.find(".placeholder, .thumbnail"),a="array"===t?i.url:i,l=e.container.find(".image-upload-remove-button"),s=e.container.find(".image-default-button"),i="array"===t&&_.isString(i)?{url:i}:i,"id"!==t&&"ID"!==t||""===i||wp.media.attachment(i).fetch().then((function(){setTimeout((function(){var e=wp.media.attachment(i).get("url");n.removeClass().addClass("thumbnail thumbnail-image").html('')}),700)})),("url"===t&&""!==i||"array"===t&&!_.isUndefined(i.url)&&""!==i.url)&&e.container.find("image-default-button").hide(),("url"===t&&""===i||"array"===t&&(_.isUndefined(i.url)||""===i.url))&&l.hide(),i===e.params.default&&e.container.find("image-default-button").hide(),""!==a&&n.removeClass().addClass("thumbnail thumbnail-image").html(''),e.container.on("click",".image-upload-button",(function(i){var r=wp.media({multiple:!1}).open().on("select",(function(){var i=r.state().get("selection").first().toJSON();a=i.url,_.isUndefined(i.sizes)||(a=i.sizes.full.url,_.isUndefined(i.sizes.medium)?_.isUndefined(i.sizes.thumbnail)||(a=i.sizes.thumbnail.url):a=i.sizes.medium.url),"array"===t?e.setting.set({id:i.id,url:_.isUndefined(i.sizes)?i.url:i.sizes.full.url,width:i.width,height:i.height}):"id"===t?e.setting.set(i.id):e.setting.set(_.isUndefined(i.sizes)?i.url:i.sizes.full.url),n.length&&n.removeClass().addClass("thumbnail thumbnail-image").html(''),l.length&&(l.show(),s.hide())}));i.preventDefault()})),e.container.on("click",".image-upload-remove-button",(function(i){i.preventDefault(),e.setting.set(""),n=e.container.find(".placeholder, .thumbnail"),l=e.container.find(".image-upload-remove-button"),s=e.container.find(".image-default-button"),n.length&&n.removeClass().addClass("placeholder").html(wp.i18n.__("No image selected","kirki")),l.length&&(l.hide(),jQuery(s).hasClass("button")&&s.show())})),e.container.on("click",".image-default-button",(function(i){i.preventDefault(),e.setting.set(e.params.default),n=e.container.find(".placeholder, .thumbnail"),l=e.container.find(".image-upload-remove-button"),s=e.container.find(".image-default-button"),n.length&&n.removeClass().addClass("thumbnail thumbnail-image").html(''),l.length&&(l.show(),s.hide())}))}}); //# sourceMappingURL=control.js.map PK[bJ !control-image/dist/control.js.mapnu[{"mappings":"AAAAA,GAAGC,UAAUC,mBAAmB,eAAiBF,GAAGC,UAAUE,oBAAoBC,OAAQ,CAEzFC,iBAAkB,SAAUC,GAC3B,IAAIC,EAAOC,EAAQC,EAASC,EAAcC,EAAcC,EAExDL,GADAD,EAAgBA,GAAWO,MACHC,QAAQC,OAChCP,EAAoBQ,EAAEC,YAAaX,EAAQY,OAAOC,UAAeH,EAAEC,YAAaX,EAAQY,OAAOC,QAAQC,SAA+C,MAAjCd,EAAQY,OAAOC,QAAQC,QAC5IX,EAAgBH,EAAQe,UAAUC,KAAM,4BACxCZ,EAAkB,UAAYF,EAAWD,EAAMgB,IAAMhB,EACrDI,EAAgBL,EAAQe,UAAUC,KAAM,+BACxCV,EAAgBN,EAAQe,UAAUC,KAAM,yBAGxCf,EAAU,UAAYC,GAAUQ,EAAEQ,SAAUjB,GAAY,CAAEgB,IAAKhB,GAAUA,EAGlE,OAASC,GAAU,OAASA,GAAY,KAAOD,GACrDP,GAAGyB,MAAMC,WAAYnB,GAAQoB,QAAQC,MAAM,WAC1CC,YAAY,WACX,IAAIN,EAAMvB,GAAGyB,MAAMC,WAAYnB,GAAQuB,IAAK,OAC5CrB,EAAQsB,cAAcC,SAAU,6BAA8BC,KAAM,aAAeV,EAAM,iBACvF,SAKE,QAAUf,GAAU,KAAOD,GAAa,UAAYC,IAAYQ,EAAEC,YAAaV,EAAMgB,MAAS,KAAOhB,EAAMgB,MACjHjB,EAAQe,UAAUC,KAAM,wBAAyBY,QAI3C,QAAU1B,GAAU,KAAOD,GAAa,UAAYC,IAAYQ,EAAEC,YAAaV,EAAMgB,MAAS,KAAOhB,EAAMgB,OACjHZ,EAAauB,OAIT3B,IAAUD,EAAQY,OAAOiB,SAC7B7B,EAAQe,UAAUC,KAAM,wBAAyBY,OAG7C,KAAOxB,GACXD,EAAQsB,cAAcC,SAAU,6BAA8BC,KAAM,aAAevB,EAAe,eAGnGJ,EAAQe,UAAUe,GAAI,QAAS,wBAAwB,SAAUC,GAChE,IAAIC,EAAQtC,GAAGyB,MAAO,CAAEc,UAAU,IAAUC,OAAOJ,GAAI,UAAU,WAGhE,IACCK,EADmBH,EAAMI,QAAQZ,IAAK,aAAca,QACtBC,SAE/BlC,EAAgB+B,EAAQlB,IAEjBP,EAAEC,YAAawB,EAAQI,SAC7BnC,EAAe+B,EAAQI,MAAMC,KAAKvB,IAC3BP,EAAEC,YAAawB,EAAQI,MAAME,QAEtB/B,EAAEC,YAAawB,EAAQI,MAAMG,aAC1CtC,EAAe+B,EAAQI,MAAMG,UAAUzB,KAFvCb,EAAe+B,EAAQI,MAAME,OAAOxB,KAMjC,UAAYf,EAChBF,EAAQQ,QAAQmC,IAAK,CACpBC,GAAIT,EAAQS,GACZ3B,IAAMP,EAAEC,YAAYwB,EAAQI,OAEzBJ,EAAQlB,IADRkB,EAAQI,MAAMC,KAAKvB,IAEtB4B,MAAOV,EAAQU,MACfC,OAAQX,EAAQW,SAEN,OAAS5C,EACpBF,EAAQQ,QAAQmC,IAAKR,EAAQS,IAE7B5C,EAAQQ,QAAQmC,IAASjC,EAAEC,YAAawB,EAAQI,OAAqCJ,EAAQlB,IAAjCkB,EAAQI,MAAMC,KAAKvB,KAG3Ed,EAAQ4C,QACZ5C,EAAQsB,cAAcC,SAAU,6BAA8BC,KAAM,aAAevB,EAAe,eAE9FC,EAAa0C,SACjB1C,EAAa2C,OACb1C,EAAcsB,WAIhBG,EAAEkB,oBAGHjD,EAAQe,UAAUe,GAAI,QAAS,+BAA+B,SAAUC,GACvEA,EAAEkB,iBAEFjD,EAAQQ,QAAQmC,IAAK,IAErBxC,EAAgBH,EAAQe,UAAUC,KAAM,4BACxCX,EAAgBL,EAAQe,UAAUC,KAAM,+BACxCV,EAAgBN,EAAQe,UAAUC,KAAM,yBAEnCb,EAAQ4C,QACZ5C,EAAQsB,cAAcC,SAAU,eAAgBC,KAAMjC,GAAGwD,KAAKC,GAAI,oBAAqB,UAEnF9C,EAAa0C,SACjB1C,EAAauB,OACRwB,OAAQ9C,GAAgB+C,SAAU,WACtC/C,EAAc0C,WAKjBhD,EAAQe,UAAUe,GAAI,QAAS,yBAAyB,SAAUC,GACjEA,EAAEkB,iBAEFjD,EAAQQ,QAAQmC,IAAK3C,EAAQY,OAAOiB,SAEpC1B,EAAgBH,EAAQe,UAAUC,KAAM,4BACxCX,EAAgBL,EAAQe,UAAUC,KAAM,+BACxCV,EAAgBN,EAAQe,UAAUC,KAAM,yBAEnCb,EAAQ4C,QACZ5C,EAAQsB,cAAcC,SAAU,6BAA8BC,KAAM,aAAe3B,EAAQY,OAAOiB,QAAU,eAExGxB,EAAa0C,SACjB1C,EAAa2C,OACb1C,EAAcsB","sources":["src/control.js"],"sourcesContent":["wp.customize.controlConstructor['kirki-image'] = wp.customize.kirkiDynamicControl.extend( {\n\n\tinitKirkiControl: function( control ) {\n\t\tvar value, saveAs, preview, previewImage, removeButton, defaultButton;\n\t\tcontrol = control || this;\n\t\tvalue = control.setting._value;\n\t\tsaveAs = ( ! _.isUndefined( control.params.choices ) && ! _.isUndefined( control.params.choices.save_as ) ) ? control.params.choices.save_as : 'url';\n\t\tpreview = control.container.find( '.placeholder, .thumbnail' );\n\t\tpreviewImage = ( 'array' === saveAs ) ? value.url : value;\n\t\tremoveButton = control.container.find( '.image-upload-remove-button' );\n\t\tdefaultButton = control.container.find( '.image-default-button' );\n\n\t\t// Make sure value is properly formatted.\n\t\tvalue = ( 'array' === saveAs && _.isString( value ) ) ? { url: value } : value;\n\n\t\t// Tweaks for save_as = id.\n\t\tif ( ( 'id' === saveAs || 'ID' === saveAs ) && '' !== value ) {\n\t\t\twp.media.attachment( value ).fetch().then( function() {\n\t\t\t\tsetTimeout( function() {\n\t\t\t\t\tvar url = wp.media.attachment( value ).get( 'url' );\n\t\t\t\t\tpreview.removeClass().addClass( 'thumbnail thumbnail-image' ).html( '\"\"' );\n\t\t\t\t}, 700 );\n\t\t\t} );\n\t\t}\n\n\t\t// If value is not empty, hide the \"default\" button.\n\t\tif ( ( 'url' === saveAs && '' !== value ) || ( 'array' === saveAs && ! _.isUndefined( value.url ) && '' !== value.url ) ) {\n\t\t\tcontrol.container.find( 'image-default-button' ).hide();\n\t\t}\n\n\t\t// If value is empty, hide the \"remove\" button.\n\t\tif ( ( 'url' === saveAs && '' === value ) || ( 'array' === saveAs && ( _.isUndefined( value.url ) || '' === value.url ) ) ) {\n\t\t\tremoveButton.hide();\n\t\t}\n\n\t\t// If value is default, hide the default button.\n\t\tif ( value === control.params.default ) {\n\t\t\tcontrol.container.find( 'image-default-button' ).hide();\n\t\t}\n\n\t\tif ( '' !== previewImage ) {\n\t\t\tpreview.removeClass().addClass( 'thumbnail thumbnail-image' ).html( '\"\"' );\n\t\t}\n\n\t\tcontrol.container.on( 'click', '.image-upload-button', function( e ) {\n\t\t\tvar image = wp.media( { multiple: false } ).open().on( 'select', function() {\n\n\t\t\t\t// This will return the selected image from the Media Uploader, the result is an object.\n\t\t\t\tvar uploadedImage = image.state().get( 'selection' ).first(),\n\t\t\t\t\tjsonImg = uploadedImage.toJSON();\n\n\t\t\t\tpreviewImage = jsonImg.url;\n\n\t\t\t\tif ( ! _.isUndefined( jsonImg.sizes ) ) {\n\t\t\t\t\tpreviewImage = jsonImg.sizes.full.url;\n\t\t\t\t\tif ( ! _.isUndefined( jsonImg.sizes.medium ) ) {\n\t\t\t\t\t\tpreviewImage = jsonImg.sizes.medium.url;\n\t\t\t\t\t} else if ( ! _.isUndefined( jsonImg.sizes.thumbnail ) ) {\n\t\t\t\t\t\tpreviewImage = jsonImg.sizes.thumbnail.url;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif ( 'array' === saveAs ) {\n\t\t\t\t\tcontrol.setting.set( {\n\t\t\t\t\t\tid: jsonImg.id,\n\t\t\t\t\t\turl: !_.isUndefined(jsonImg.sizes)\n\t\t\t\t\t\t\t? jsonImg.sizes.full.url\n\t\t\t\t\t\t\t: jsonImg.url,\n\t\t\t\t\t\twidth: jsonImg.width,\n\t\t\t\t\t\theight: jsonImg.height,\n\t\t\t\t\t} );\n\t\t\t\t} else if ( 'id' === saveAs ) {\n\t\t\t\t\tcontrol.setting.set( jsonImg.id );\n\t\t\t\t} else {\n\t\t\t\t\tcontrol.setting.set( ( ! _.isUndefined( jsonImg.sizes ) ) ? jsonImg.sizes.full.url : jsonImg.url );\n\t\t\t\t}\n\n\t\t\t\tif ( preview.length ) {\n\t\t\t\t\tpreview.removeClass().addClass( 'thumbnail thumbnail-image' ).html( '\"\"' );\n\t\t\t\t}\n\t\t\t\tif ( removeButton.length ) {\n\t\t\t\t\tremoveButton.show();\n\t\t\t\t\tdefaultButton.hide();\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\te.preventDefault();\n\t\t} );\n\n\t\tcontrol.container.on( 'click', '.image-upload-remove-button', function( e ) {\n\t\t\te.preventDefault();\n\n\t\t\tcontrol.setting.set( '' );\n\n\t\t\tpreview = control.container.find( '.placeholder, .thumbnail' );\n\t\t\tremoveButton = control.container.find( '.image-upload-remove-button' );\n\t\t\tdefaultButton = control.container.find( '.image-default-button' );\n\n\t\t\tif ( preview.length ) {\n\t\t\t\tpreview.removeClass().addClass( 'placeholder' ).html( wp.i18n.__( 'No image selected', 'kirki' ) );\n\t\t\t}\n\t\t\tif ( removeButton.length ) {\n\t\t\t\tremoveButton.hide();\n\t\t\t\tif ( jQuery( defaultButton ).hasClass( 'button' ) ) {\n\t\t\t\t\tdefaultButton.show();\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\n\t\tcontrol.container.on( 'click', '.image-default-button', function( e ) {\n\t\t\te.preventDefault();\n\n\t\t\tcontrol.setting.set( control.params.default );\n\n\t\t\tpreview = control.container.find( '.placeholder, .thumbnail' );\n\t\t\tremoveButton = control.container.find( '.image-upload-remove-button' );\n\t\t\tdefaultButton = control.container.find( '.image-default-button' );\n\n\t\t\tif ( preview.length ) {\n\t\t\t\tpreview.removeClass().addClass( 'thumbnail thumbnail-image' ).html( '\"\"' );\n\t\t\t}\n\t\t\tif ( removeButton.length ) {\n\t\t\t\tremoveButton.show();\n\t\t\t\tdefaultButton.hide();\n\t\t\t}\n\t\t} );\n\t}\n} );\n"],"names":["wp","customize","controlConstructor","kirkiDynamicControl","extend","initKirkiControl","control","value","saveAs","preview","previewImage","removeButton","defaultButton","this","setting","_value","_","isUndefined","params","choices","save_as","container","find","url","isString","media","attachment","fetch","then","setTimeout","get","removeClass","addClass","html","hide","default","on","e","image","multiple","open","jsonImg","state","first","toJSON","sizes","full","medium","thumbnail","set","id","width","height","length","show","preventDefault","i18n","__","jQuery","hasClass"],"version":3,"file":"control.js.map"}PK[^ҥ!control-image/src/Field/Image.phpnu[args['settings'] ) { $args = parent::filter_setting_args( $args, $wp_customize ); // Set the sanitize-callback if none is defined. if ( ! isset( $args['sanitize_callback'] ) || ! $args['sanitize_callback'] ) { $args['sanitize_callback'] = function( $value ) { if ( isset( $this->args['choices']['save_as'] ) && 'array' === $this->args['choices']['save_as'] ) { return [ 'id' => ( isset( $value['id'] ) && '' !== $value['id'] ) ? (int) $value['id'] : '', 'url' => ( isset( $value['url'] ) && '' !== $value['url'] ) ? esc_url_raw( $value['url'] ) : '', 'width' => ( isset( $value['width'] ) && '' !== $value['width'] ) ? (int) $value['width'] : '', 'height' => ( isset( $value['height'] ) && '' !== $value['height'] ) ? (int) $value['height'] : '', ]; } if ( isset( $this->args['choices']['save_as'] ) && 'id' === $this->args['choices']['save_as'] ) { return absint( $value ); } return ( is_string( $value ) ) ? esc_url_raw( $value ) : $value; }; } } return $args; } /** * Filter arguments before creating the control. * * @access public * @since 0.1 * @param array $args The field arguments. * @param WP_Customize_Manager $wp_customize The customizer instance. * @return array */ public function filter_control_args( $args, $wp_customize ) { if ( $args['settings'] === $this->args['settings'] ) { $args = parent::filter_control_args( $args, $wp_customize ); $args['button_labels'] = isset( $args['button_labels'] ) ? $args['button_labels'] : []; $args['button_labels'] = wp_parse_args( $args['button_labels'], [ 'select' => esc_html__( 'Select image', 'kirki' ), 'change' => esc_html__( 'Change image', 'kirki' ), 'default' => esc_html__( 'Default', 'kirki' ), 'remove' => esc_html__( 'Remove', 'kirki' ), 'placeholder' => esc_html__( 'No image selected', 'kirki' ), 'frame_title' => esc_html__( 'Select image', 'kirki' ), 'frame_button' => esc_html__( 'Choose image', 'kirki' ), ] ); $args['choices'] = isset( $args['choices'] ) ? (array) $args['choices'] : []; $args['choices']['save_as'] = isset( $args['choices']['save_as'] ) ? $args['choices']['save_as'] : 'url'; $args['choices']['labels'] = isset( $args['choices']['labels'] ) ? $args['choices']['labels'] : []; $args['choices']['labels'] = wp_parse_args( $args['choices']['labels'], $args['button_labels'] ); // Set the control-type. $args['type'] = 'kirki-image'; } return $args; } /** * Filter for output argument used by the kirki-framework/module-css module. * * @access public * @since 1.0 * @param array $output A single output item. * @param mixed $value The value. * @param array $all_outputs All field output args. * @param array $field The field arguments. * @return array */ public function output_item_args( $output, $value, $all_outputs, $field ) { if ( $field['settings'] === $this->args['settings'] ) { if ( isset( $output['property'] ) && in_array( [ 'background', 'background-image' ], $output['property'], true ) ) { if ( ! isset( $output['value_pattern'] ) || empty( $output['value_pattern'] ) || '$' === $output['value_pattern'] ) { $output['value_pattern'] = 'url("$")'; } } } return $output; } /** * Adds a custom output class for typography fields. * * @access public * @since 1.0 * @param array $classnames The array of classnames. * @return array */ public function output_control_classnames( $classnames ) { $classnames['kirki-image'] = '\Kirki\Field\CSS\Image'; return $classnames; } } PK[xO5%control-image/src/Field/CSS/Image.phpnu[ 'global', 'prefix' => '', 'units' => '', 'suffix' => '', ] ); if ( is_array( $value ) ) { if ( isset( $output['choice'] ) && $output['choice'] ) { $this->styles[ $output['media_query'] ][ $output['element'] ][ $output['property'] ] = $output['prefix'] . $this->process_property_value( $output['property'], $value[ $output['choice'] ] ) . $output['units'] . $output['suffix']; return; } if ( isset( $value['url'] ) ) { $this->styles[ $output['media_query'] ][ $output['element'] ][ $output['property'] ] = $output['prefix'] . $this->process_property_value( $output['property'], $value['url'] ) . $output['units'] . $output['suffix']; return; } return; } $this->styles[ $output['media_query'] ][ $output['element'] ][ $output['property'] ] = $output['prefix'] . $this->process_property_value( $output['property'], $value ) . $output['units'] . $output['suffix']; } } PK[I=! ! #control-image/src/Control/Image.phpnu[
<# url = ( _.isObject( data.value ) && ! _.isUndefined( data.value.url ) ) ? data.value.url : data.value; #> <# if ( data.value.url || '' !== url ) { #>
<# } else { #>
<# } #>
<# if ( data.default && '' !== data.default ) { #> <# } #>
' ); }, 700 ); } ); } // If value is not empty, hide the "default" button. if ( ( 'url' === saveAs && '' !== value ) || ( 'array' === saveAs && ! _.isUndefined( value.url ) && '' !== value.url ) ) { control.container.find( 'image-default-button' ).hide(); } // If value is empty, hide the "remove" button. if ( ( 'url' === saveAs && '' === value ) || ( 'array' === saveAs && ( _.isUndefined( value.url ) || '' === value.url ) ) ) { removeButton.hide(); } // If value is default, hide the default button. if ( value === control.params.default ) { control.container.find( 'image-default-button' ).hide(); } if ( '' !== previewImage ) { preview.removeClass().addClass( 'thumbnail thumbnail-image' ).html( '' ); } control.container.on( 'click', '.image-upload-button', function( e ) { var image = wp.media( { multiple: false } ).open().on( 'select', function() { // This will return the selected image from the Media Uploader, the result is an object. var uploadedImage = image.state().get( 'selection' ).first(), jsonImg = uploadedImage.toJSON(); previewImage = jsonImg.url; if ( ! _.isUndefined( jsonImg.sizes ) ) { previewImage = jsonImg.sizes.full.url; if ( ! _.isUndefined( jsonImg.sizes.medium ) ) { previewImage = jsonImg.sizes.medium.url; } else if ( ! _.isUndefined( jsonImg.sizes.thumbnail ) ) { previewImage = jsonImg.sizes.thumbnail.url; } } if ( 'array' === saveAs ) { control.setting.set( { id: jsonImg.id, url: !_.isUndefined(jsonImg.sizes) ? jsonImg.sizes.full.url : jsonImg.url, width: jsonImg.width, height: jsonImg.height, } ); } else if ( 'id' === saveAs ) { control.setting.set( jsonImg.id ); } else { control.setting.set( ( ! _.isUndefined( jsonImg.sizes ) ) ? jsonImg.sizes.full.url : jsonImg.url ); } if ( preview.length ) { preview.removeClass().addClass( 'thumbnail thumbnail-image' ).html( '' ); } if ( removeButton.length ) { removeButton.show(); defaultButton.hide(); } } ); e.preventDefault(); } ); control.container.on( 'click', '.image-upload-remove-button', function( e ) { e.preventDefault(); control.setting.set( '' ); preview = control.container.find( '.placeholder, .thumbnail' ); removeButton = control.container.find( '.image-upload-remove-button' ); defaultButton = control.container.find( '.image-default-button' ); if ( preview.length ) { preview.removeClass().addClass( 'placeholder' ).html( wp.i18n.__( 'No image selected', 'kirki' ) ); } if ( removeButton.length ) { removeButton.hide(); if ( jQuery( defaultButton ).hasClass( 'button' ) ) { defaultButton.show(); } } } ); control.container.on( 'click', '.image-default-button', function( e ) { e.preventDefault(); control.setting.set( control.params.default ); preview = control.container.find( '.placeholder, .thumbnail' ); removeButton = control.container.find( '.image-upload-remove-button' ); defaultButton = control.container.find( '.image-default-button' ); if ( preview.length ) { preview.removeClass().addClass( 'thumbnail thumbnail-image' ).html( '' ); } if ( removeButton.length ) { removeButton.show(); defaultButton.hide(); } } ); } } ); PK[ 8control-image/composer.jsonnu[{ "name": "kirki-framework/control-image", "type": "library", "description": "Image control for the Kirki Customizer framework.", "keywords": [ "wordpress", "customizer", "framework" ], "homepage": "https://kirki.org", "license": "MIT", "authors": [ { "name": "Kirki Framework", "email": "connect@mapsteps.com" } ], "require": { "php": ">=7.0", "kirki-framework/url-getter": "*", "kirki-framework/control-base": "*" }, "autoload": { "psr-4": { "Kirki\\Control\\": "src/Control", "Kirki\\Field\\": "src/Field" } } } PK[ln00control-image/LICENSEnu[MIT License Copyright (c) 2019 kirki-framework Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. PK[Ȗ'HHcontrol-radio/dist/control.jsnu[wp.customize.controlConstructor["kirki-radio"]=wp.customize.kirkiDynamicControl.extend({}),wp.customize.controlConstructor["kirki-radio-buttonset"]=wp.customize.kirkiDynamicControl.extend({}),wp.customize.controlConstructor["kirki-radio-image"]=wp.customize.kirkiDynamicControl.extend({}); //# sourceMappingURL=control.js.map PK[scontrol-radio/dist/control.cssnu[.customize-control-kirki-radio label{display:list-item;margin-bottom:7px}.customize-control-kirki-radio label .option-description{color:rgba(0,0,0,.35);display:block;font-size:.9em;padding-left:25px}.customize-control-kirki-radio-buttonset .buttonset{display:flex;flex-wrap:wrap}.customize-control-kirki-radio-buttonset .buttonset .switch-label{background:rgba(0,0,0,.1);border:1px rgba(0,0,0,.1);color:#555d66;flex-grow:1;margin:0;padding:.5em 1em;text-align:center}.customize-control-kirki-radio-buttonset .buttonset .switch-input:checked+.switch-label{background-color:#00a0d2;color:hsla(0,0%,100%,.8)}.customize-control-kirki-radio-buttonset .screen-reader-text:focus{clip-path:inset(50%);-webkit-clip-path:inset(50%)}.customize-control-kirki-radio-image>.image{display:flex;flex-wrap:wrap}.customize-control-kirki-radio-image label{display:inline-block;position:relative}.customize-control-kirki-radio-image label .image-label{background:hsla(0,0%,100%,.7);display:none;font-weight:700;height:100%;left:0;position:absolute;top:0;width:100%}.customize-control-kirki-radio-image label .image-label .inner{height:100%;padding:.5em;text-align:center;vertical-align:middle;width:100%}.customize-control-kirki-radio-image label:hover .image-label{display:block}.customize-control-kirki-radio-image input{display:none}.customize-control-kirki-radio-image input img{border:1px solid transparent}.customize-control-kirki-radio-image input:checked+label img{border:1px solid #3498db;-webkit-box-shadow:0 0 5px 2px rgba(0,0,0,.25);box-shadow:0 0 5px 2px rgba(0,0,0,.25)}.customize-control-kirki-radio-image input+label .image-clickable{bottom:0;height:100%;left:0;position:absolute;right:0;top:0;width:100%} /*# sourceMappingURL=control.css.map */ PK[*d!control-radio/dist/control.js.mapnu[{"mappings":"AAEAA,GAAGC,UAAUC,mBAAkB,eAA4BF,GAAGC,UAAUE,oBAAoBC,OAAM,IAClGJ,GAAGC,UAAUC,mBAAkB,yBAA4BF,GAAGC,UAAUE,oBAAoBC,OAAM,IAClGJ,GAAGC,UAAUC,mBAAkB,qBAA4BF,GAAGC,UAAUE,oBAAoBC,OAAM","sources":["src/control.js"],"sourcesContent":["import \"./control.scss\";\n\nwp.customize.controlConstructor['kirki-radio'] = wp.customize.kirkiDynamicControl.extend( {} );\nwp.customize.controlConstructor['kirki-radio-buttonset'] = wp.customize.kirkiDynamicControl.extend( {} );\nwp.customize.controlConstructor['kirki-radio-image'] = wp.customize.kirkiDynamicControl.extend( {} );\n"],"names":["wp","customize","controlConstructor","kirkiDynamicControl","extend"],"version":3,"file":"control.js.map"}PK[M_s"control-radio/dist/control.css.mapnu[{"mappings":"AACE,qCACE,iBAAA,CACA,iBCAJ,CDGE,yDAEE,qBAAA,CADA,aAAA,CAEA,cAAA,CACA,iBCDJ,CCRE,oDACE,YAAA,CACA,cDWJ,CCTI,kEACE,yBAAA,CACA,yBAAA,CACA,aAAA,CAIA,WAAA,CAHA,QAAA,CAEA,gBAAA,CADA,iBDaN,CCNQ,wFACE,wBAAA,CACA,wBDQV,CCFE,mEACE,oBAAA,CACA,4BDIJ,CE9BE,4CACE,YAAA,CACA,cFiCJ,CE9BE,2CAEE,oBAAA,CADA,iBFiCJ,CE7BE,wDAOE,6BAAA,CANA,YAAA,CAOA,eAAA,CAFA,WAAA,CAFA,MAAA,CAFA,iBAAA,CACA,KAAA,CAEA,UFkCJ,CE5BE,+DAEE,WAAA,CAEA,YAAA,CADA,iBAAA,CAEA,qBAAA,CAJA,UFkCJ,CE3BE,8DACE,aF6BJ,CE1BE,2CACE,YF4BJ,CEzBE,+CACE,4BF2BJ,CExBE,6DAGE,wBAAA,CAFA,8CAAA,CACA,sCF2BJ,CEvBE,kEAGE,QAAA,CAIA,WAAA,CAHA,MAAA,CAHA,iBAAA,CAIA,OAAA,CAHA,KAAA,CAIA,UF0BJ","sources":["src/scss/_radio.scss","%3Cinput%20css%20w1CpKN%3E","src/scss/_radio-buttonset.scss","src/scss/_radio-image.scss"],"sourcesContent":[".customize-control-kirki-radio {\n label {\n display: list-item;\n margin-bottom: 7px;\n }\n\n label .option-description {\n display: block;\n color: rgba(0, 0, 0, 0.35);\n font-size: 0.9em;\n padding-left: 25px;\n }\n}\n",".customize-control-kirki-radio label {\n display: list-item;\n margin-bottom: 7px;\n}\n.customize-control-kirki-radio label .option-description {\n display: block;\n color: rgba(0, 0, 0, 0.35);\n font-size: 0.9em;\n padding-left: 25px;\n}\n\n.customize-control-kirki-radio-buttonset .buttonset {\n display: flex;\n flex-wrap: wrap;\n}\n.customize-control-kirki-radio-buttonset .buttonset .switch-label {\n background: rgba(0, 0, 0, 0.1);\n border: 1px rgba(0, 0, 0, 0.1);\n color: #555d66;\n margin: 0;\n text-align: center;\n padding: 0.5em 1em;\n flex-grow: 1;\n}\n.customize-control-kirki-radio-buttonset .buttonset .switch-input:checked + .switch-label {\n background-color: #00a0d2;\n color: rgba(255, 255, 255, 0.8);\n}\n.customize-control-kirki-radio-buttonset .screen-reader-text:focus {\n clip-path: inset(50%);\n -webkit-clip-path: inset(50%);\n}\n\n.customize-control-kirki-radio-image > .image {\n display: flex;\n flex-wrap: wrap;\n}\n.customize-control-kirki-radio-image label {\n position: relative;\n display: inline-block;\n}\n.customize-control-kirki-radio-image label .image-label {\n display: none;\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background: rgba(255, 255, 255, 0.7);\n font-weight: 700;\n}\n.customize-control-kirki-radio-image label .image-label .inner {\n width: 100%;\n height: 100%;\n text-align: center;\n padding: 0.5em;\n vertical-align: middle;\n}\n.customize-control-kirki-radio-image label:hover .image-label {\n display: block;\n}\n.customize-control-kirki-radio-image input {\n display: none;\n}\n.customize-control-kirki-radio-image input img {\n border: 1px solid transparent;\n}\n.customize-control-kirki-radio-image input:checked + label img {\n -webkit-box-shadow: 0 0 5px 2px rgba(0, 0, 0, 0.25);\n box-shadow: 0 0 5px 2px rgba(0, 0, 0, 0.25);\n border: 1px solid #3498db;\n}\n.customize-control-kirki-radio-image input + label .image-clickable {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n width: 100%;\n height: 100%;\n}\n/*# sourceMappingURL=control.css.map */\n",".customize-control-kirki-radio-buttonset {\n .buttonset {\n display: flex;\n flex-wrap: wrap;\n\n .switch-label {\n background: rgba(0,0,0,.1);\n border: 1px rgba(0,0,0,.1);\n color: #555d66;\n margin: 0;\n text-align: center;\n padding: 0.5em 1em;\n flex-grow: 1;\n }\n\n .switch-input {\n &:checked {\n + .switch-label {\n background-color: #00a0d2;\n color: rgba(255, 255, 255, 0.8);\n }\n }\n }\n }\n\n .screen-reader-text:focus {\n clip-path: inset(50%);\n -webkit-clip-path: inset(50%);\n }\n}\n",".customize-control-kirki-radio-image {\n > .image {\n display: flex;\n flex-wrap: wrap;\n }\n\n label {\n position: relative;\n display: inline-block;\n }\n\n label .image-label {\n display: none;\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background: rgba(255, 255, 255, 0.7);\n font-weight: 700;\n }\n\n label .image-label .inner {\n width: 100%;\n height: 100%;\n text-align: center;\n padding: 0.5em;\n vertical-align: middle;\n }\n\n label:hover .image-label {\n display: block;\n }\n\n input {\n display: none;\n }\n\n input img {\n border: 1px solid transparent;\n }\n\n input:checked + label img {\n -webkit-box-shadow: 0 0 5px 2px rgba(0, 0, 0, 0.25);\n box-shadow: 0 0 5px 2px rgba(0, 0, 0, 0.25);\n border: 1px solid #3498db;\n }\n\n input + label .image-clickable {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n width: 100%;\n height: 100%;\n }\n}\n\n"],"names":[],"version":3,"file":"control.css.map"}PK[P!control-radio/src/Field/Radio.phpnu[args['settings'] ) { $args = parent::filter_setting_args( $args, $wp_customize ); // Set the sanitize-callback if none is defined. if ( ! isset( $args['sanitize_callback'] ) || ! $args['sanitize_callback'] ) { $args['sanitize_callback'] = function( $value ) { if ( ! isset( $this->args['choices'][ $value ] ) ) { return ( isset( $this->args['default'] ) ) ? $this->args['default'] : ''; } return $value; }; } } return $args; } /** * Filter arguments before creating the control. * * @access public * @since 0.1 * @param array $args The field arguments. * @param WP_Customize_Manager $wp_customize The customizer instance. * @return array */ public function filter_control_args( $args, $wp_customize ) { if ( $args['settings'] === $this->args['settings'] ) { $args = parent::filter_control_args( $args, $wp_customize ); $args['type'] = 'kirki-radio'; } return $args; } } PK[q1'control-radio/src/Field/Radio_Image.phpnu[args['settings'] ) { $args = parent::filter_control_args( $args, $wp_customize ); $args['type'] = 'kirki-radio-image'; } return $args; } } PK[zȚ+control-radio/src/Field/Radio_Buttonset.phpnu[args['settings'] ) { $args = parent::filter_control_args( $args, $wp_customize ); $args['type'] = 'kirki-radio-buttonset'; } return $args; } } PK[̗w #control-radio/src/Control/Radio.phpnu[ {{{ data.label }}} <# if ( data.description ) { #> {{{ data.description }}} <# } #> <# _.each( data.choices, function( val, key ) { #> <# } ); #> input_attrs as $attr => $value ) { if ( 'style' !== $attr ) { $this->json['inputAttrs'] .= $attr . '="' . esc_attr( $value ) . '" '; continue; } $this->json['labelStyle'] = 'style="' . esc_attr( $value ) . '" '; } } /** * An Underscore (JS) template for this control's content (but not its container). * * Class variables for this control class are available in the `data` JS object; * export custom variables by overriding {@see WP_Customize_Control::to_json()}. * * @see WP_Customize_Control::print_template() * * @access protected * @since 1.0 * @return void */ protected function content_template() { ?>
<# for ( key in data.choices ) { #> <# dataAlt = ( _.isObject( data.choices[ key ] ) && ! _.isUndefined( data.choices[ key ].alt ) ) ? data.choices[ key ].alt : '' #> checked="checked"<# } #> data-alt="{{ dataAlt }}"> <# } #>
<# if ( data.label ) { #>{{{ data.label }}}<# } #> <# if ( data.description ) { #>{{{ data.description }}}<# } #>
<# for ( key in data.choices ) { #> checked="checked" <# } #>> <# } #>
=7.0", "kirki-framework/control-base": "*" }, "autoload": { "psr-4": { "Kirki\\Control\\": "src/Control", "Kirki\\Field\\": "src/Field" } } } PK[_EEcontrol-radio/LICENSEnu[MIT License Copyright (c) 2019 kirki-framework Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. PK[S)field-multicolor/src/Field/Multicolor.phpnu[ 'kirki-generic', 'default' => '', 'wrapper_opts' => [ 'gap' => 'small', ], 'input_attrs' => '', 'choices' => [ 'type' => 'hidden', 'parent_type' => 'kirki-multicolor', ], 'sanitize_callback' => [ __CLASS__, 'sanitize' ], ], $args ); /** * Add a hidden field, the label & description. */ new \Kirki\Field\Generic( $parent_control_args ); $total_colors = count( $args['choices'] ); $loop_index = 0; $use_alpha = $this->filter_preferred_choice_setting( 'alpha', null, $args ) ? true : false; $swatches = $this->filter_preferred_choice_setting( 'swatches', null, $args ); $swatches = empty( $swatches ) ? $this->filter_preferred_choice_setting( 'palettes', null, $args ) : $swatches; $swatches = empty( $swatches ) ? [] : $swatches; if ( empty( $swatches ) ) { $swatches = isset( $args['palettes'] ) && ! empty( $args['palettes'] ) ? $args['palettes'] : []; } foreach ( $args['choices'] as $choice => $choice_label ) { $loop_index++; $classnames = '{default_class} kirki-group-item'; $classnames .= 1 === $loop_index ? ' kirki-group-start' : ( $loop_index === $total_colors ? ' kirki-group-end' : $classnames ); $use_alpha_per_choice = $this->filter_preferred_choice_setting( 'alpha', $choice, $args ) ? true : $use_alpha; $swatches_per_choice = $this->filter_preferred_choice_setting( 'swatches', $choice, $args ); $swatches_per_choice = empty( $swatches_per_choice ) ? $this->filter_preferred_choice_setting( 'palettes', $choice, $args ) : $swatches_per_choice; $swatches_per_choice = empty( $swatches_per_choice ) ? $swatches : $swatches_per_choice; $control_args = wp_parse_args( [ 'settings' => $args['settings'] . '[' . $choice . ']', 'parent_setting' => $args['settings'], 'label' => $choice_label, 'description' => '', 'default' => $this->filter_preferred_choice_setting( 'default', $choice, $args ), 'wrapper_attrs' => [ 'data-kirki-parent-control-type' => 'kirki-multicolor', 'class' => $classnames, ], 'input_attrs' => $this->filter_preferred_choice_setting( 'input_attrs', $choice, $args ), 'choices' => [ 'alpha' => $use_alpha_per_choice, 'label_style' => 'tooltip', 'swatches' => $swatches_per_choice, ], 'css_vars' => [], 'output' => [], ], $args ); foreach ( $control_args['choices'] as $control_choice_id => $control_choice_value ) { if ( isset( $control_args[ $control_choice_id ] ) ) { unset( $control_args[ $control_choice_id ] ); } else { if ( 'swatches' === $control_choice_id || 'palettes' === $control_choice_id ) { if ( isset( $control_args['palettes'] ) ) { unset( $control_args['palettes'] ); } if ( isset( $control_args['swatches'] ) ) { unset( $control_args['swatches'] ); } } } } new \Kirki\Field\ReactColorful( $control_args ); } } /** * Prefer control specific value over field value * * @access public * @since 4.0 * * @param string $setting The argument key inside $args. * @param string $choice The choice key inside $args['choices']. * @param array $args The arguments. * * @return string */ public function filter_preferred_choice_setting( $setting, $choice, $args ) { // Fail early. if ( ! isset( $args[ $setting ] ) ) { return ''; } if ( null === $choice ) { $per_choice_found = false; foreach ( $args['choices'] as $choice_id => $choice_label ) { if ( isset( $args[ $setting ][ $choice_id ] ) ) { $per_choice_found = true; break; } } if ( ! $per_choice_found ) { return $args[ $setting ]; } return ''; } // If a specific field for the choice is set. if ( isset( $args[ $setting ][ $choice ] ) ) { return $args[ $setting ][ $choice ]; } // Unset all other choices. foreach ( $args['choices'] as $id => $set ) { if ( $id !== $choice && isset( $args[ $setting ][ $id ] ) ) { unset( $args[ $setting ][ $id ] ); } elseif ( ! isset( $args[ $setting ][ $id ] ) ) { $args[ $setting ] = ''; } } return $args[ $setting ]; } /** * Filter arguments before creating the setting. * * @access public * @since 0.1 * @param array $args The field arguments. * @param WP_Customize_Manager $wp_customize The customizer instance. * @return array */ public function filter_setting_args( $args, $wp_customize ) { if ( $args['settings'] !== $this->args['settings'] ) { return $args; } // Set the sanitize-callback if none is defined. if ( ! isset( $args['sanitize_callback'] ) || ! $args['sanitize_callback'] ) { $args['sanitize_callback'] = [ __CLASS__, 'sanitize' ]; } return $args; } /** * Sanitizes background controls * * @static * @access public * @since 1.0 * @param array $value The value. * @return array */ public static function sanitize( $value ) { foreach ( $value as $key => $subvalue ) { $value[ $key ] = \Kirki\Field\Color::sanitize( $subvalue ); } return $value; } /** * Override parent method. No need to register any setting. * * @access public * @since 0.1 * @param WP_Customize_Manager $wp_customize The customizer instance. * @return void */ public function add_setting( $wp_customize ) {} /** * Override the parent method. No need for a control. * * @access public * @since 0.1 * @param WP_Customize_Manager $wp_customize The customizer instance. * @return void */ public function add_control( $wp_customize ) {} /** * Adds a custom output class for typography fields. * * @access public * @since 1.0 * @param array $classnames The array of classnames. * @return array */ public function output_control_classnames( $classnames ) { $classnames['kirki-multicolor'] = '\Kirki\Field\CSS\Multicolor'; return $classnames; } } PK[/{B55-field-multicolor/src/Field/CSS/Multicolor.phpnu[ $sub_value ) { // If "element" is not defined, there's no reason to continue. if ( ! isset( $output['element'] ) ) { continue; } // If the "choice" is not the same as the $key in our loop, there's no reason to proceed. if ( isset( $output['choice'] ) && $key !== $output['choice'] ) { continue; } // If "property" is not defined, fallback to the $key. $property = ( ! isset( $output['property'] ) || empty( $output['property'] ) ) ? $key : $output['property']; // If "media_query" is not defined, use "global". if ( ! isset( $output['media_query'] ) || empty( $output['media_query'] ) ) { $output['media_query'] = 'global'; } // If "suffix" is defined, add it to the value. $output['suffix'] = ( isset( $output['suffix'] ) ) ? $output['suffix'] : ''; // Create the styles. $this->styles[ $output['media_query'] ][ $output['element'] ][ $property ] = $sub_value . $output['suffix']; } } } PK[CYfield-multicolor/composer.jsonnu[{ "name": "kirki-framework/field-multicolor", "type": "library", "description": "Multicolor control for the Kirki Customizer framework.", "keywords": [ "wordpress", "customizer", "framework" ], "homepage": "https://kirki.org/", "license": "MIT", "authors": [ { "name": "Kirki Framework", "email": "connect@mapsteps.com" } ], "require": { "php": ">=7.0", "kirki-framework/url-getter": "*", "kirki-framework/control-base": "*", "kirki-framework/control-react-colorful": "*" }, "autoload": { "psr-4": { "Kirki\\Control\\": "src/Control", "Kirki\\Field\\": "src/Field" } } } PK[ln00field-multicolor/LICENSEnu[MIT License Copyright (c) 2019 kirki-framework Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. PK[5+field-fontawesome/src/Field/FontAwesome.phpnu[args['settings'] ) { $args = parent::filter_control_args( $args, $wp_customize ); ob_start(); include 'fontawesome.json'; // phpcs:ignore WPThemeReview.CoreFunctionality.FileInclude $font_awesome_json = ob_get_clean(); $fa_array = (array) json_decode( $font_awesome_json, true ); $args['choices'] = []; foreach ( $fa_array['icons'] as $icon ) { if ( ! isset( $icon['id'] ) || ! isset( $icon['name'] ) ) { continue; } $args['choices'][ $icon['id'] ] = $icon['name']; } } return $args; } } PK[acc,field-fontawesome/src/Field/fontawesome.jsonnu[{ "icons": [ { "name": "Glass", "id": "glass", "unicode": "f000", "created": 1, "filter": [ "martini", "drink", "bar", "alcohol", "liquor" ], "categories": [ "Web Application Icons" ] }, { "name": "Music", "id": "music", "unicode": "f001", "created": 1, "filter": [ "note", "sound" ], "categories": [ "Web Application Icons" ] }, { "name": "Search", "id": "search", "unicode": "f002", "created": 1, "filter": [ "magnify", "zoom", "enlarge", "bigger" ], "categories": [ "Web Application Icons" ] }, { "name": "Envelope Outlined", "id": "envelope-o", "unicode": "f003", "created": 1, "filter": [ "email", "e-mail", "letter", "support", "mail", "message", "notification" ], "categories": [ "Web Application Icons" ] }, { "name": "Heart", "id": "heart", "unicode": "f004", "created": 1, "filter": [ "love", "like", "favorite" ], "categories": [ "Web Application Icons", "Medical Icons" ] }, { "name": "Star", "id": "star", "unicode": "f005", "created": 1, "filter": [ "award", "achievement", "night", "rating", "score", "favorite" ], "categories": [ "Web Application Icons" ] }, { "name": "Star Outlined", "id": "star-o", "unicode": "f006", "created": 1, "filter": [ "award", "achievement", "night", "rating", "score", "favorite" ], "categories": [ "Web Application Icons" ] }, { "name": "User", "id": "user", "unicode": "f007", "created": 1, "filter": [ "person", "man", "head", "profile" ], "categories": [ "Web Application Icons" ] }, { "name": "Film", "id": "film", "unicode": "f008", "created": 1, "filter": [ "movie" ], "categories": [ "Web Application Icons" ] }, { "name": "th-large", "id": "th-large", "unicode": "f009", "created": 1, "filter": [ "blocks", "squares", "boxes", "grid" ], "categories": [ "Text Editor Icons" ] }, { "name": "th", "id": "th", "unicode": "f00a", "created": 1, "filter": [ "blocks", "squares", "boxes", "grid" ], "categories": [ "Text Editor Icons" ] }, { "name": "th-list", "id": "th-list", "unicode": "f00b", "created": 1, "filter": [ "ul", "ol", "checklist", "finished", "completed", "done", "todo" ], "categories": [ "Text Editor Icons" ] }, { "name": "Check", "id": "check", "unicode": "f00c", "created": 1, "filter": [ "checkmark", "done", "todo", "agree", "accept", "confirm", "tick", "ok" ], "categories": [ "Web Application Icons" ] }, { "name": "Times", "id": "times", "unicode": "f00d", "created": 1, "aliases": [ "remove", "close" ], "filter": [ "close", "exit", "x", "cross" ], "categories": [ "Web Application Icons" ] }, { "name": "Search Plus", "id": "search-plus", "unicode": "f00e", "created": 1, "filter": [ "magnify", "zoom", "enlarge", "bigger" ], "categories": [ "Web Application Icons" ] }, { "name": "Search Minus", "id": "search-minus", "unicode": "f010", "created": 1, "filter": [ "magnify", "minify", "zoom", "smaller" ], "categories": [ "Web Application Icons" ] }, { "name": "Power Off", "id": "power-off", "unicode": "f011", "created": 1, "filter": [ "on" ], "categories": [ "Web Application Icons" ] }, { "name": "signal", "id": "signal", "unicode": "f012", "created": 1, "filter": [ "graph", "bars" ], "categories": [ "Web Application Icons" ] }, { "name": "cog", "id": "cog", "unicode": "f013", "created": 1, "filter": [ "settings" ], "aliases": [ "gear" ], "categories": [ "Web Application Icons", "Spinner Icons" ] }, { "name": "Trash Outlined", "id": "trash-o", "unicode": "f014", "created": 1, "filter": [ "garbage", "delete", "remove", "trash", "hide" ], "categories": [ "Web Application Icons" ] }, { "name": "home", "id": "home", "unicode": "f015", "created": 1, "filter": [ "main", "house" ], "categories": [ "Web Application Icons" ] }, { "name": "File Outlined", "id": "file-o", "unicode": "f016", "created": 1, "filter": [ "new", "page", "pdf", "document" ], "categories": [ "Text Editor Icons", "File Type Icons" ] }, { "name": "Clock Outlined", "id": "clock-o", "unicode": "f017", "created": 1, "filter": [ "watch", "timer", "late", "timestamp" ], "categories": [ "Web Application Icons" ] }, { "name": "road", "id": "road", "unicode": "f018", "created": 1, "filter": [ "street" ], "categories": [ "Web Application Icons" ] }, { "name": "Download", "id": "download", "unicode": "f019", "created": 1, "filter": [ "import" ], "categories": [ "Web Application Icons" ] }, { "name": "Arrow Circle Outlined Down", "id": "arrow-circle-o-down", "unicode": "f01a", "created": 1, "filter": [ "download" ], "categories": [ "Directional Icons" ] }, { "name": "Arrow Circle Outlined Up", "id": "arrow-circle-o-up", "unicode": "f01b", "created": 1, "categories": [ "Directional Icons" ] }, { "name": "inbox", "id": "inbox", "unicode": "f01c", "created": 1, "categories": [ "Web Application Icons" ] }, { "name": "Play Circle Outlined", "id": "play-circle-o", "unicode": "f01d", "created": 1, "categories": [ "Video Player Icons" ] }, { "name": "Repeat", "id": "repeat", "unicode": "f01e", "created": 1, "filter": [ "redo", "forward" ], "aliases": [ "rotate-right" ], "categories": [ "Text Editor Icons" ] }, { "name": "refresh", "id": "refresh", "unicode": "f021", "created": 1, "filter": [ "reload", "sync" ], "categories": [ "Web Application Icons", "Spinner Icons" ] }, { "name": "list-alt", "id": "list-alt", "unicode": "f022", "created": 1, "filter": [ "ul", "ol", "checklist", "finished", "completed", "done", "todo" ], "categories": [ "Text Editor Icons" ] }, { "name": "lock", "id": "lock", "unicode": "f023", "created": 1, "filter": [ "protect", "admin", "security" ], "categories": [ "Web Application Icons" ] }, { "name": "flag", "id": "flag", "unicode": "f024", "created": 1, "filter": [ "report", "notification", "notify" ], "categories": [ "Web Application Icons" ] }, { "name": "headphones", "id": "headphones", "unicode": "f025", "created": 1, "filter": [ "sound", "listen", "music", "audio" ], "categories": [ "Web Application Icons" ] }, { "name": "volume-off", "id": "volume-off", "unicode": "f026", "created": 1, "filter": [ "audio", "mute", "sound", "music" ], "categories": [ "Web Application Icons" ] }, { "name": "volume-down", "id": "volume-down", "unicode": "f027", "created": 1, "filter": [ "audio", "lower", "quieter", "sound", "music" ], "categories": [ "Web Application Icons" ] }, { "name": "volume-up", "id": "volume-up", "unicode": "f028", "created": 1, "filter": [ "audio", "higher", "louder", "sound", "music" ], "categories": [ "Web Application Icons" ] }, { "name": "qrcode", "id": "qrcode", "unicode": "f029", "created": 1, "filter": [ "scan" ], "categories": [ "Web Application Icons" ] }, { "name": "barcode", "id": "barcode", "unicode": "f02a", "created": 1, "filter": [ "scan" ], "categories": [ "Web Application Icons" ] }, { "name": "tag", "id": "tag", "unicode": "f02b", "created": 1, "filter": [ "label" ], "categories": [ "Web Application Icons" ] }, { "name": "tags", "id": "tags", "unicode": "f02c", "created": 1, "filter": [ "labels" ], "categories": [ "Web Application Icons" ] }, { "name": "book", "id": "book", "unicode": "f02d", "created": 1, "filter": [ "read", "documentation" ], "categories": [ "Web Application Icons" ] }, { "name": "bookmark", "id": "bookmark", "unicode": "f02e", "created": 1, "filter": [ "save" ], "categories": [ "Web Application Icons" ] }, { "name": "print", "id": "print", "unicode": "f02f", "created": 1, "categories": [ "Web Application Icons" ] }, { "name": "camera", "id": "camera", "unicode": "f030", "created": 1, "filter": [ "photo", "picture", "record" ], "categories": [ "Web Application Icons" ] }, { "name": "font", "id": "font", "unicode": "f031", "created": 1, "filter": [ "text" ], "categories": [ "Text Editor Icons" ] }, { "name": "bold", "id": "bold", "unicode": "f032", "created": 1, "categories": [ "Text Editor Icons" ] }, { "name": "italic", "id": "italic", "unicode": "f033", "created": 1, "filter": [ "italics" ], "categories": [ "Text Editor Icons" ] }, { "name": "text-height", "id": "text-height", "unicode": "f034", "created": 1, "categories": [ "Text Editor Icons" ] }, { "name": "text-width", "id": "text-width", "unicode": "f035", "created": 1, "categories": [ "Text Editor Icons" ] }, { "name": "align-left", "id": "align-left", "unicode": "f036", "created": 1, "filter": [ "text" ], "categories": [ "Text Editor Icons" ] }, { "name": "align-center", "id": "align-center", "unicode": "f037", "created": 1, "filter": [ "middle", "text" ], "categories": [ "Text Editor Icons" ] }, { "name": "align-right", "id": "align-right", "unicode": "f038", "created": 1, "filter": [ "text" ], "categories": [ "Text Editor Icons" ] }, { "name": "align-justify", "id": "align-justify", "unicode": "f039", "created": 1, "filter": [ "text" ], "categories": [ "Text Editor Icons" ] }, { "name": "list", "id": "list", "unicode": "f03a", "created": 1, "filter": [ "ul", "ol", "checklist", "finished", "completed", "done", "todo" ], "categories": [ "Text Editor Icons" ] }, { "name": "Outdent", "id": "outdent", "unicode": "f03b", "created": 1, "aliases": [ "dedent" ], "categories": [ "Text Editor Icons" ] }, { "name": "Indent", "id": "indent", "unicode": "f03c", "created": 1, "categories": [ "Text Editor Icons" ] }, { "name": "Video Camera", "id": "video-camera", "unicode": "f03d", "created": 1, "filter": [ "film", "movie", "record" ], "categories": [ "Web Application Icons" ] }, { "name": "Picture Outlined", "id": "picture-o", "unicode": "f03e", "created": 1, "aliases": [ "photo", "image" ], "categories": [ "Web Application Icons" ] }, { "name": "pencil", "id": "pencil", "unicode": "f040", "created": 1, "filter": [ "write", "edit", "update" ], "categories": [ "Web Application Icons" ] }, { "name": "map-marker", "id": "map-marker", "unicode": "f041", "created": 1, "filter": [ "map", "pin", "location", "coordinates", "localize", "address", "travel", "where", "place" ], "categories": [ "Web Application Icons" ] }, { "name": "adjust", "id": "adjust", "unicode": "f042", "created": 1, "filter": [ "contrast" ], "categories": [ "Web Application Icons" ] }, { "name": "tint", "id": "tint", "unicode": "f043", "created": 1, "filter": [ "raindrop", "waterdrop", "drop", "droplet" ], "categories": [ "Web Application Icons" ] }, { "name": "Pencil Square Outlined", "id": "pencil-square-o", "unicode": "f044", "created": 1, "filter": [ "write", "edit", "update" ], "aliases": [ "edit" ], "categories": [ "Web Application Icons" ] }, { "name": "Share Square Outlined", "id": "share-square-o", "unicode": "f045", "created": 1, "filter": [ "social", "send", "arrow" ], "categories": [ "Web Application Icons" ] }, { "name": "Check Square Outlined", "id": "check-square-o", "unicode": "f046", "created": 1, "filter": [ "todo", "done", "agree", "accept", "confirm", "ok" ], "categories": [ "Web Application Icons", "Form Control Icons" ] }, { "name": "Arrows", "id": "arrows", "unicode": "f047", "created": 1, "filter": [ "move", "reorder", "resize" ], "categories": [ "Web Application Icons", "Directional Icons" ] }, { "name": "step-backward", "id": "step-backward", "unicode": "f048", "created": 1, "filter": [ "rewind", "previous", "beginning", "start", "first" ], "categories": [ "Video Player Icons" ] }, { "name": "fast-backward", "id": "fast-backward", "unicode": "f049", "created": 1, "filter": [ "rewind", "previous", "beginning", "start", "first" ], "categories": [ "Video Player Icons" ] }, { "name": "backward", "id": "backward", "unicode": "f04a", "created": 1, "filter": [ "rewind", "previous" ], "categories": [ "Video Player Icons" ] }, { "name": "play", "id": "play", "unicode": "f04b", "created": 1, "filter": [ "start", "playing", "music", "sound" ], "categories": [ "Video Player Icons" ] }, { "name": "pause", "id": "pause", "unicode": "f04c", "created": 1, "filter": [ "wait" ], "categories": [ "Video Player Icons" ] }, { "name": "stop", "id": "stop", "unicode": "f04d", "created": 1, "filter": [ "block", "box", "square" ], "categories": [ "Video Player Icons" ] }, { "name": "forward", "id": "forward", "unicode": "f04e", "created": 1, "filter": [ "forward", "next" ], "categories": [ "Video Player Icons" ] }, { "name": "fast-forward", "id": "fast-forward", "unicode": "f050", "created": 1, "filter": [ "next", "end", "last" ], "categories": [ "Video Player Icons" ] }, { "name": "step-forward", "id": "step-forward", "unicode": "f051", "created": 1, "filter": [ "next", "end", "last" ], "categories": [ "Video Player Icons" ] }, { "name": "eject", "id": "eject", "unicode": "f052", "created": 1, "categories": [ "Video Player Icons" ] }, { "name": "chevron-left", "id": "chevron-left", "unicode": "f053", "created": 1, "filter": [ "bracket", "previous", "back" ], "categories": [ "Directional Icons" ] }, { "name": "chevron-right", "id": "chevron-right", "unicode": "f054", "created": 1, "filter": [ "bracket", "next", "forward" ], "categories": [ "Directional Icons" ] }, { "name": "Plus Circle", "id": "plus-circle", "unicode": "f055", "created": 1, "filter": [ "add", "new", "create", "expand" ], "categories": [ "Web Application Icons" ] }, { "name": "Minus Circle", "id": "minus-circle", "unicode": "f056", "created": 1, "filter": [ "delete", "remove", "trash", "hide" ], "categories": [ "Web Application Icons" ] }, { "name": "Times Circle", "id": "times-circle", "unicode": "f057", "created": 1, "filter": [ "close", "exit", "x" ], "categories": [ "Web Application Icons" ] }, { "name": "Check Circle", "id": "check-circle", "unicode": "f058", "created": 1, "filter": [ "todo", "done", "agree", "accept", "confirm", "ok" ], "categories": [ "Web Application Icons" ] }, { "name": "Question Circle", "id": "question-circle", "unicode": "f059", "filter": [ "help", "information", "unknown", "support" ], "created": 1, "categories": [ "Web Application Icons" ] }, { "name": "Info Circle", "id": "info-circle", "unicode": "f05a", "created": 1, "filter": [ "help", "information", "more", "details" ], "categories": [ "Web Application Icons" ] }, { "name": "Crosshairs", "id": "crosshairs", "unicode": "f05b", "created": 1, "filter": [ "picker" ], "categories": [ "Web Application Icons" ] }, { "name": "Times Circle Outlined", "id": "times-circle-o", "unicode": "f05c", "created": 1, "filter": [ "close", "exit", "x" ], "categories": [ "Web Application Icons" ] }, { "name": "Check Circle Outlined", "id": "check-circle-o", "unicode": "f05d", "created": 1, "filter": [ "todo", "done", "agree", "accept", "confirm", "ok" ], "categories": [ "Web Application Icons" ] }, { "name": "ban", "id": "ban", "unicode": "f05e", "created": 1, "filter": [ "delete", "remove", "trash", "hide", "block", "stop", "abort", "cancel" ], "categories": [ "Web Application Icons" ] }, { "name": "arrow-left", "id": "arrow-left", "unicode": "f060", "created": 1, "filter": [ "previous", "back" ], "categories": [ "Directional Icons" ] }, { "name": "arrow-right", "id": "arrow-right", "unicode": "f061", "created": 1, "filter": [ "next", "forward" ], "categories": [ "Directional Icons" ] }, { "name": "arrow-up", "id": "arrow-up", "unicode": "f062", "created": 1, "categories": [ "Directional Icons" ] }, { "name": "arrow-down", "id": "arrow-down", "unicode": "f063", "created": 1, "filter": [ "download" ], "categories": [ "Directional Icons" ] }, { "name": "Share", "id": "share", "unicode": "f064", "created": 1, "aliases": [ "mail-forward" ], "categories": [ "Web Application Icons" ] }, { "name": "Expand", "id": "expand", "unicode": "f065", "created": 1, "filter": [ "enlarge", "bigger", "resize" ], "categories": [ "Video Player Icons" ] }, { "name": "Compress", "id": "compress", "unicode": "f066", "created": 1, "filter": [ "collapse", "combine", "contract", "merge", "smaller" ], "categories": [ "Video Player Icons" ] }, { "name": "plus", "id": "plus", "unicode": "f067", "created": 1, "filter": [ "add", "new", "create", "expand" ], "categories": [ "Web Application Icons" ] }, { "name": "minus", "id": "minus", "unicode": "f068", "created": 1, "filter": [ "hide", "minify", "delete", "remove", "trash", "hide", "collapse" ], "categories": [ "Web Application Icons" ] }, { "name": "asterisk", "id": "asterisk", "unicode": "f069", "created": 1, "filter": [ "details" ], "categories": [ "Web Application Icons" ] }, { "name": "Exclamation Circle", "id": "exclamation-circle", "unicode": "f06a", "created": 1, "filter": [ "warning", "error", "problem", "notification", "alert" ], "categories": [ "Web Application Icons" ] }, { "name": "gift", "id": "gift", "unicode": "f06b", "created": 1, "filter": [ "present" ], "categories": [ "Web Application Icons" ] }, { "name": "leaf", "id": "leaf", "unicode": "f06c", "created": 1, "filter": [ "eco", "nature", "plant" ], "categories": [ "Web Application Icons" ] }, { "name": "fire", "id": "fire", "unicode": "f06d", "created": 1, "filter": [ "flame", "hot", "popular" ], "categories": [ "Web Application Icons" ] }, { "name": "Eye", "id": "eye", "unicode": "f06e", "created": 1, "filter": [ "show", "visible", "views" ], "categories": [ "Web Application Icons" ] }, { "name": "Eye Slash", "id": "eye-slash", "unicode": "f070", "created": 1, "filter": [ "toggle", "show", "hide", "visible", "visiblity", "views" ], "categories": [ "Web Application Icons" ] }, { "name": "Exclamation Triangle", "id": "exclamation-triangle", "unicode": "f071", "created": 1, "filter": [ "warning", "error", "problem", "notification", "alert" ], "aliases": [ "warning" ], "categories": [ "Web Application Icons" ] }, { "name": "plane", "id": "plane", "unicode": "f072", "created": 1, "filter": [ "travel", "trip", "location", "destination", "airplane", "fly", "mode" ], "categories": [ "Web Application Icons", "Transportation Icons" ] }, { "name": "calendar", "id": "calendar", "unicode": "f073", "created": 1, "filter": [ "date", "time", "when", "event" ], "categories": [ "Web Application Icons" ] }, { "name": "random", "id": "random", "unicode": "f074", "created": 1, "filter": [ "sort", "shuffle" ], "categories": [ "Web Application Icons", "Video Player Icons" ] }, { "name": "comment", "id": "comment", "unicode": "f075", "created": 1, "filter": [ "speech", "notification", "note", "chat", "bubble", "feedback", "message", "texting", "sms", "conversation" ], "categories": [ "Web Application Icons" ] }, { "name": "magnet", "id": "magnet", "unicode": "f076", "created": 1, "categories": [ "Web Application Icons" ] }, { "name": "chevron-up", "id": "chevron-up", "unicode": "f077", "created": 1, "categories": [ "Directional Icons" ] }, { "name": "chevron-down", "id": "chevron-down", "unicode": "f078", "created": 1, "categories": [ "Directional Icons" ] }, { "name": "retweet", "id": "retweet", "unicode": "f079", "created": 1, "filter": [ "refresh", "reload", "share" ], "categories": [ "Web Application Icons" ] }, { "name": "shopping-cart", "id": "shopping-cart", "unicode": "f07a", "created": 1, "filter": [ "checkout", "buy", "purchase", "payment" ], "categories": [ "Web Application Icons" ] }, { "name": "Folder", "id": "folder", "unicode": "f07b", "created": 1, "categories": [ "Web Application Icons" ] }, { "name": "Folder Open", "id": "folder-open", "unicode": "f07c", "created": 1, "categories": [ "Web Application Icons" ] }, { "name": "Arrows Vertical", "id": "arrows-v", "unicode": "f07d", "created": 1, "filter": [ "resize" ], "categories": [ "Web Application Icons", "Directional Icons" ] }, { "name": "Arrows Horizontal", "id": "arrows-h", "unicode": "f07e", "created": 1, "filter": [ "resize" ], "categories": [ "Web Application Icons", "Directional Icons" ] }, { "name": "Bar Chart", "id": "bar-chart", "unicode": "f080", "created": 1, "aliases": [ "bar-chart-o" ], "filter": [ "graph", "analytics" ], "categories": [ "Web Application Icons", "Chart Icons" ] }, { "name": "Twitter Square", "id": "twitter-square", "unicode": "f081", "created": 1, "filter": [ "tweet", "social network" ], "categories": [ "Brand Icons" ] }, { "name": "Facebook Square", "id": "facebook-square", "unicode": "f082", "created": 1, "filter": [ "social network" ], "categories": [ "Brand Icons" ] }, { "name": "camera-retro", "id": "camera-retro", "unicode": "f083", "created": 1, "filter": [ "photo", "picture", "record" ], "categories": [ "Web Application Icons" ] }, { "name": "key", "id": "key", "unicode": "f084", "created": 1, "filter": [ "unlock", "password" ], "categories": [ "Web Application Icons" ] }, { "name": "cogs", "id": "cogs", "unicode": "f085", "created": 1, "aliases": [ "gears" ], "filter": [ "settings" ], "categories": [ "Web Application Icons" ] }, { "name": "comments", "id": "comments", "unicode": "f086", "created": 1, "filter": [ "speech", "notification", "note", "chat", "bubble", "feedback", "message", "texting", "sms", "conversation" ], "categories": [ "Web Application Icons" ] }, { "name": "Thumbs Up Outlined", "id": "thumbs-o-up", "unicode": "f087", "created": 1, "filter": [ "like", "approve", "favorite", "agree", "hand" ], "categories": [ "Web Application Icons", "Hand Icons" ] }, { "name": "Thumbs Down Outlined", "id": "thumbs-o-down", "unicode": "f088", "created": 1, "filter": [ "dislike", "disapprove", "disagree", "hand" ], "categories": [ "Web Application Icons", "Hand Icons" ] }, { "name": "star-half", "id": "star-half", "unicode": "f089", "created": 1, "filter": [ "award", "achievement", "rating", "score" ], "categories": [ "Web Application Icons" ] }, { "name": "Heart Outlined", "id": "heart-o", "unicode": "f08a", "created": 1, "filter": [ "love", "like", "favorite" ], "categories": [ "Web Application Icons", "Medical Icons" ] }, { "name": "Sign Out", "id": "sign-out", "unicode": "f08b", "created": 1, "filter": [ "log out", "logout", "leave", "exit", "arrow" ], "categories": [ "Web Application Icons" ] }, { "name": "LinkedIn Square", "id": "linkedin-square", "unicode": "f08c", "created": 1, "categories": [ "Brand Icons" ] }, { "name": "Thumb Tack", "id": "thumb-tack", "unicode": "f08d", "created": 1, "filter": [ "marker", "pin", "location", "coordinates" ], "categories": [ "Web Application Icons" ] }, { "name": "External Link", "id": "external-link", "unicode": "f08e", "created": 1, "filter": [ "open", "new" ], "categories": [ "Web Application Icons" ] }, { "name": "Sign In", "id": "sign-in", "unicode": "f090", "created": 1, "filter": [ "enter", "join", "log in", "login", "sign up", "sign in", "signin", "signup", "arrow" ], "categories": [ "Web Application Icons" ] }, { "name": "trophy", "id": "trophy", "unicode": "f091", "created": 1, "filter": [ "award", "achievement", "cup", "winner", "game" ], "categories": [ "Web Application Icons" ] }, { "name": "GitHub Square", "id": "github-square", "unicode": "f092", "created": 1, "url": "github.com/logos", "filter": [ "octocat" ], "categories": [ "Brand Icons" ] }, { "name": "Upload", "id": "upload", "unicode": "f093", "created": 1, "filter": [ "import" ], "categories": [ "Web Application Icons" ] }, { "name": "Lemon Outlined", "id": "lemon-o", "unicode": "f094", "created": 1, "filter": [ "food" ], "categories": [ "Web Application Icons" ] }, { "name": "Phone", "id": "phone", "unicode": "f095", "created": 2, "filter": [ "call", "voice", "number", "support", "earphone", "telephone" ], "categories": [ "Web Application Icons" ] }, { "name": "Square Outlined", "id": "square-o", "unicode": "f096", "created": 2, "filter": [ "block", "square", "box" ], "categories": [ "Web Application Icons", "Form Control Icons" ] }, { "name": "Bookmark Outlined", "id": "bookmark-o", "unicode": "f097", "created": 2, "filter": [ "save" ], "categories": [ "Web Application Icons" ] }, { "name": "Phone Square", "id": "phone-square", "unicode": "f098", "created": 2, "filter": [ "call", "voice", "number", "support", "telephone" ], "categories": [ "Web Application Icons" ] }, { "name": "Twitter", "id": "twitter", "unicode": "f099", "created": 2, "filter": [ "tweet", "social network" ], "categories": [ "Brand Icons" ] }, { "name": "Facebook", "id": "facebook", "unicode": "f09a", "created": 2, "aliases": [ "facebook-f" ], "filter": [ "social network" ], "categories": [ "Brand Icons" ] }, { "name": "GitHub", "id": "github", "unicode": "f09b", "created": 2, "url": "github.com/logos", "filter": [ "octocat" ], "categories": [ "Brand Icons" ] }, { "name": "unlock", "id": "unlock", "unicode": "f09c", "created": 2, "filter": [ "protect", "admin", "password", "lock" ], "categories": [ "Web Application Icons" ] }, { "name": "credit-card", "id": "credit-card", "unicode": "f09d", "created": 2, "filter": [ "money", "buy", "debit", "checkout", "purchase", "payment" ], "categories": [ "Web Application Icons", "Payment Icons" ] }, { "name": "rss", "id": "rss", "unicode": "f09e", "created": 2, "filter": [ "blog" ], "aliases": [ "feed" ], "categories": [ "Web Application Icons" ] }, { "name": "HDD", "id": "hdd-o", "unicode": "f0a0", "created": 2, "filter": [ "harddrive", "hard drive", "storage", "save" ], "categories": [ "Web Application Icons" ] }, { "name": "bullhorn", "id": "bullhorn", "unicode": "f0a1", "created": 2, "filter": [ "announcement", "share", "broadcast", "louder", "megaphone" ], "categories": [ "Web Application Icons" ] }, { "name": "bell", "id": "bell", "unicode": "f0f3", "created": 2, "filter": [ "alert", "reminder", "notification" ], "categories": [ "Web Application Icons" ] }, { "name": "certificate", "id": "certificate", "unicode": "f0a3", "created": 2, "filter": [ "badge", "star" ], "categories": [ "Web Application Icons" ] }, { "name": "Hand Outlined Right", "id": "hand-o-right", "unicode": "f0a4", "created": 2, "filter": [ "point", "right", "next", "forward", "finger" ], "categories": [ "Directional Icons", "Hand Icons" ] }, { "name": "Hand Outlined Left", "id": "hand-o-left", "unicode": "f0a5", "created": 2, "filter": [ "point", "left", "previous", "back", "finger" ], "categories": [ "Directional Icons", "Hand Icons" ] }, { "name": "Hand Outlined Up", "id": "hand-o-up", "unicode": "f0a6", "created": 2, "filter": [ "point", "finger" ], "categories": [ "Directional Icons", "Hand Icons" ] }, { "name": "Hand Outlined Down", "id": "hand-o-down", "unicode": "f0a7", "created": 2, "filter": [ "point", "finger" ], "categories": [ "Directional Icons", "Hand Icons" ] }, { "name": "Arrow Circle Left", "id": "arrow-circle-left", "unicode": "f0a8", "created": 2, "filter": [ "previous", "back" ], "categories": [ "Directional Icons" ] }, { "name": "Arrow Circle Right", "id": "arrow-circle-right", "unicode": "f0a9", "created": 2, "filter": [ "next", "forward" ], "categories": [ "Directional Icons" ] }, { "name": "Arrow Circle Up", "id": "arrow-circle-up", "unicode": "f0aa", "created": 2, "categories": [ "Directional Icons" ] }, { "name": "Arrow Circle Down", "id": "arrow-circle-down", "unicode": "f0ab", "created": 2, "filter": [ "download" ], "categories": [ "Directional Icons" ] }, { "name": "Globe", "id": "globe", "unicode": "f0ac", "created": 2, "filter": [ "world", "planet", "map", "place", "travel", "earth", "global", "translate", "all", "language", "localize", "location", "coordinates", "country" ], "categories": [ "Web Application Icons" ] }, { "name": "Wrench", "id": "wrench", "unicode": "f0ad", "created": 2, "filter": [ "settings", "fix", "update", "spanner" ], "categories": [ "Web Application Icons" ] }, { "name": "Tasks", "id": "tasks", "unicode": "f0ae", "created": 2, "filter": [ "progress", "loading", "downloading", "downloads", "settings" ], "categories": [ "Web Application Icons" ] }, { "name": "Filter", "id": "filter", "unicode": "f0b0", "created": 2, "filter": [ "funnel", "options" ], "categories": [ "Web Application Icons" ] }, { "name": "Briefcase", "id": "briefcase", "unicode": "f0b1", "created": 2, "filter": [ "work", "business", "office", "luggage", "bag" ], "categories": [ "Web Application Icons" ] }, { "name": "Arrows Alt", "id": "arrows-alt", "unicode": "f0b2", "created": 2, "filter": [ "expand", "enlarge", "fullscreen", "bigger", "move", "reorder", "resize", "arrow" ], "categories": [ "Video Player Icons", "Directional Icons" ] }, { "name": "Users", "id": "users", "unicode": "f0c0", "created": 2, "filter": [ "people", "profiles", "persons" ], "aliases": [ "group" ], "categories": [ "Web Application Icons" ] }, { "name": "Link", "id": "link", "unicode": "f0c1", "created": 2, "filter": [ "chain" ], "aliases": [ "chain" ], "categories": [ "Text Editor Icons" ] }, { "name": "Cloud", "id": "cloud", "filter": [ "save" ], "unicode": "f0c2", "created": 2, "categories": [ "Web Application Icons" ] }, { "name": "Flask", "id": "flask", "unicode": "f0c3", "created": 2, "filter": [ "science", "beaker", "experimental", "labs" ], "categories": [ "Web Application Icons" ] }, { "name": "Scissors", "id": "scissors", "unicode": "f0c4", "created": 2, "aliases": [ "cut" ], "categories": [ "Text Editor Icons" ] }, { "name": "Files Outlined", "id": "files-o", "unicode": "f0c5", "created": 2, "filter": [ "duplicate", "clone", "copy" ], "aliases": [ "copy" ], "categories": [ "Text Editor Icons" ] }, { "name": "Paperclip", "id": "paperclip", "unicode": "f0c6", "created": 2, "filter": [ "attachment" ], "categories": [ "Text Editor Icons" ] }, { "name": "Floppy Outlined", "id": "floppy-o", "unicode": "f0c7", "created": 2, "aliases": [ "save" ], "categories": [ "Text Editor Icons" ] }, { "name": "Square", "id": "square", "unicode": "f0c8", "created": 2, "filter": [ "block", "box" ], "categories": [ "Web Application Icons", "Form Control Icons" ] }, { "name": "Bars", "id": "bars", "unicode": "f0c9", "created": 2, "aliases": [ "navicon", "reorder" ], "filter": [ "menu", "drag", "reorder", "settings", "list", "ul", "ol", "checklist", "todo", "list", "hamburger" ], "categories": [ "Web Application Icons" ] }, { "name": "list-ul", "id": "list-ul", "unicode": "f0ca", "created": 2, "filter": [ "ul", "ol", "checklist", "todo", "list" ], "categories": [ "Text Editor Icons" ] }, { "name": "list-ol", "id": "list-ol", "unicode": "f0cb", "created": 2, "filter": [ "ul", "ol", "checklist", "list", "todo", "list", "numbers" ], "categories": [ "Text Editor Icons" ] }, { "name": "Strikethrough", "id": "strikethrough", "unicode": "f0cc", "created": 2, "categories": [ "Text Editor Icons" ] }, { "name": "Underline", "id": "underline", "unicode": "f0cd", "created": 2, "categories": [ "Text Editor Icons" ] }, { "name": "table", "id": "table", "unicode": "f0ce", "created": 2, "filter": [ "data", "excel", "spreadsheet" ], "categories": [ "Text Editor Icons" ] }, { "name": "magic", "id": "magic", "unicode": "f0d0", "created": 2, "filter": [ "wizard", "automatic", "autocomplete" ], "categories": [ "Web Application Icons" ] }, { "name": "truck", "id": "truck", "unicode": "f0d1", "created": 2, "filter": [ "shipping" ], "categories": [ "Web Application Icons", "Transportation Icons" ] }, { "name": "Pinterest", "id": "pinterest", "unicode": "f0d2", "created": 2, "categories": [ "Brand Icons" ] }, { "name": "Pinterest Square", "id": "pinterest-square", "unicode": "f0d3", "created": 2, "categories": [ "Brand Icons" ] }, { "name": "Google Plus Square", "id": "google-plus-square", "unicode": "f0d4", "created": 2, "filter": [ "social network" ], "categories": [ "Brand Icons" ] }, { "name": "Google Plus", "id": "google-plus", "unicode": "f0d5", "created": 2, "filter": [ "social network" ], "categories": [ "Brand Icons" ] }, { "name": "Money", "id": "money", "unicode": "f0d6", "created": 2, "filter": [ "cash", "money", "buy", "checkout", "purchase", "payment" ], "categories": [ "Web Application Icons", "Currency Icons" ] }, { "name": "Caret Down", "id": "caret-down", "unicode": "f0d7", "created": 2, "filter": [ "more", "dropdown", "menu", "triangle down", "arrow" ], "categories": [ "Directional Icons" ] }, { "name": "Caret Up", "id": "caret-up", "unicode": "f0d8", "created": 2, "filter": [ "triangle up", "arrow" ], "categories": [ "Directional Icons" ] }, { "name": "Caret Left", "id": "caret-left", "unicode": "f0d9", "created": 2, "filter": [ "previous", "back", "triangle left", "arrow" ], "categories": [ "Directional Icons" ] }, { "name": "Caret Right", "id": "caret-right", "unicode": "f0da", "created": 2, "filter": [ "next", "forward", "triangle right", "arrow" ], "categories": [ "Directional Icons" ] }, { "name": "Columns", "id": "columns", "unicode": "f0db", "created": 2, "filter": [ "split", "panes" ], "categories": [ "Text Editor Icons" ] }, { "name": "Sort", "id": "sort", "unicode": "f0dc", "created": 2, "filter": [ "order" ], "aliases": [ "unsorted" ], "categories": [ "Web Application Icons" ] }, { "name": "Sort Descending", "id": "sort-desc", "unicode": "f0dd", "created": 2, "filter": [ "dropdown", "more", "menu", "arrow" ], "aliases": [ "sort-down" ], "categories": [ "Web Application Icons" ] }, { "name": "Sort Ascending", "id": "sort-asc", "unicode": "f0de", "created": 2, "aliases": [ "sort-up" ], "filter": [ "arrow" ], "categories": [ "Web Application Icons" ] }, { "name": "Envelope", "id": "envelope", "unicode": "f0e0", "created": 2, "filter": [ "email", "e-mail", "letter", "support", "mail", "message", "notification" ], "categories": [ "Web Application Icons" ] }, { "name": "LinkedIn", "id": "linkedin", "unicode": "f0e1", "created": 2, "categories": [ "Brand Icons" ] }, { "name": "Undo", "id": "undo", "unicode": "f0e2", "created": 2, "filter": [ "back" ], "aliases": [ "rotate-left" ], "categories": [ "Text Editor Icons" ] }, { "name": "Gavel", "id": "gavel", "unicode": "f0e3", "created": 2, "filter": [ "judge", "lawyer", "opinion" ], "aliases": [ "legal" ], "categories": [ "Web Application Icons" ] }, { "name": "Tachometer", "id": "tachometer", "unicode": "f0e4", "created": 2, "filter": [ "speedometer", "fast" ], "aliases": [ "dashboard" ], "categories": [ "Web Application Icons" ] }, { "name": "comment-o", "id": "comment-o", "unicode": "f0e5", "created": 2, "filter": [ "speech", "notification", "note", "chat", "bubble", "feedback", "message", "texting", "sms", "conversation" ], "categories": [ "Web Application Icons" ] }, { "name": "comments-o", "id": "comments-o", "unicode": "f0e6", "created": 2, "filter": [ "speech", "notification", "note", "chat", "bubble", "feedback", "message", "texting", "sms", "conversation" ], "categories": [ "Web Application Icons" ] }, { "name": "Lightning Bolt", "id": "bolt", "unicode": "f0e7", "created": 2, "filter": [ "lightning", "weather" ], "aliases": [ "flash" ], "categories": [ "Web Application Icons" ] }, { "name": "Sitemap", "id": "sitemap", "unicode": "f0e8", "created": 2, "filter": [ "directory", "hierarchy", "organization" ], "categories": [ "Web Application Icons" ] }, { "name": "Umbrella", "id": "umbrella", "unicode": "f0e9", "created": 2, "categories": [ "Web Application Icons" ] }, { "name": "Clipboard", "id": "clipboard", "unicode": "f0ea", "created": 2, "filter": [ "copy" ], "aliases": [ "paste" ], "categories": [ "Text Editor Icons" ] }, { "name": "Lightbulb Outlined", "id": "lightbulb-o", "unicode": "f0eb", "created": 3, "filter": [ "idea", "inspiration" ], "categories": [ "Web Application Icons" ] }, { "name": "Exchange", "id": "exchange", "unicode": "f0ec", "created": 3, "filter": [ "transfer", "arrows", "arrow" ], "categories": [ "Web Application Icons", "Directional Icons" ] }, { "name": "Cloud Download", "id": "cloud-download", "unicode": "f0ed", "created": 3, "filter": [ "import" ], "categories": [ "Web Application Icons" ] }, { "name": "Cloud Upload", "id": "cloud-upload", "unicode": "f0ee", "created": 3, "filter": [ "import" ], "categories": [ "Web Application Icons" ] }, { "name": "user-md", "id": "user-md", "unicode": "f0f0", "created": 2, "filter": [ "doctor", "profile", "medical", "nurse" ], "categories": [ "Medical Icons" ] }, { "name": "Stethoscope", "id": "stethoscope", "unicode": "f0f1", "created": 3, "categories": [ "Medical Icons" ] }, { "name": "Suitcase", "id": "suitcase", "unicode": "f0f2", "created": 3, "filter": [ "trip", "luggage", "travel", "move", "baggage" ], "categories": [ "Web Application Icons" ] }, { "name": "Bell Outlined", "id": "bell-o", "unicode": "f0a2", "created": 3, "filter": [ "alert", "reminder", "notification" ], "categories": [ "Web Application Icons" ] }, { "name": "Coffee", "id": "coffee", "unicode": "f0f4", "created": 3, "filter": [ "morning", "mug", "breakfast", "tea", "drink", "cafe" ], "categories": [ "Web Application Icons" ] }, { "name": "Cutlery", "id": "cutlery", "unicode": "f0f5", "created": 3, "filter": [ "food", "restaurant", "spoon", "knife", "dinner", "eat" ], "categories": [ "Web Application Icons" ] }, { "name": "File Text Outlined", "id": "file-text-o", "unicode": "f0f6", "created": 3, "filter": [ "new", "page", "pdf", "document" ], "categories": [ "Text Editor Icons", "File Type Icons" ] }, { "name": "Building Outlined", "id": "building-o", "unicode": "f0f7", "created": 3, "filter": [ "work", "business", "apartment", "office", "company" ], "categories": [ "Web Application Icons" ] }, { "name": "hospital Outlined", "id": "hospital-o", "unicode": "f0f8", "created": 3, "filter": [ "building" ], "categories": [ "Medical Icons" ] }, { "name": "ambulance", "id": "ambulance", "unicode": "f0f9", "created": 3, "filter": [ "vehicle", "support", "help" ], "categories": [ "Medical Icons", "Transportation Icons" ] }, { "name": "medkit", "id": "medkit", "unicode": "f0fa", "created": 3, "filter": [ "first aid", "firstaid", "help", "support", "health" ], "categories": [ "Medical Icons" ] }, { "name": "fighter-jet", "id": "fighter-jet", "unicode": "f0fb", "created": 3, "filter": [ "fly", "plane", "airplane", "quick", "fast", "travel" ], "categories": [ "Web Application Icons", "Transportation Icons" ] }, { "name": "beer", "id": "beer", "unicode": "f0fc", "created": 3, "filter": [ "alcohol", "stein", "drink", "mug", "bar", "liquor" ], "categories": [ "Web Application Icons" ] }, { "name": "H Square", "id": "h-square", "unicode": "f0fd", "created": 3, "filter": [ "hospital", "hotel" ], "categories": [ "Medical Icons" ] }, { "name": "Plus Square", "id": "plus-square", "unicode": "f0fe", "created": 3, "filter": [ "add", "new", "create", "expand" ], "categories": [ "Medical Icons", "Web Application Icons", "Form Control Icons" ] }, { "name": "Angle Double Left", "id": "angle-double-left", "unicode": "f100", "created": 3, "filter": [ "laquo", "quote", "previous", "back", "arrows" ], "categories": [ "Directional Icons" ] }, { "name": "Angle Double Right", "id": "angle-double-right", "unicode": "f101", "created": 3, "filter": [ "raquo", "quote", "next", "forward", "arrows" ], "categories": [ "Directional Icons" ] }, { "name": "Angle Double Up", "id": "angle-double-up", "unicode": "f102", "created": 3, "filter": [ "arrows" ], "categories": [ "Directional Icons" ] }, { "name": "Angle Double Down", "id": "angle-double-down", "unicode": "f103", "created": 3, "filter": [ "arrows" ], "categories": [ "Directional Icons" ] }, { "name": "angle-left", "id": "angle-left", "unicode": "f104", "created": 3, "filter": [ "previous", "back", "arrow" ], "categories": [ "Directional Icons" ] }, { "name": "angle-right", "id": "angle-right", "unicode": "f105", "created": 3, "filter": [ "next", "forward", "arrow" ], "categories": [ "Directional Icons" ] }, { "name": "angle-up", "id": "angle-up", "unicode": "f106", "created": 3, "filter": [ "arrow" ], "categories": [ "Directional Icons" ] }, { "name": "angle-down", "id": "angle-down", "unicode": "f107", "created": 3, "filter": [ "arrow" ], "categories": [ "Directional Icons" ] }, { "name": "Desktop", "id": "desktop", "unicode": "f108", "created": 3, "filter": [ "monitor", "screen", "desktop", "computer", "demo", "device" ], "categories": [ "Web Application Icons" ] }, { "name": "Laptop", "id": "laptop", "unicode": "f109", "created": 3, "filter": [ "demo", "computer", "device" ], "categories": [ "Web Application Icons" ] }, { "name": "tablet", "id": "tablet", "unicode": "f10a", "created": 3, "filter": [ "ipad", "device" ], "categories": [ "Web Application Icons" ] }, { "name": "Mobile Phone", "id": "mobile", "unicode": "f10b", "created": 3, "filter": [ "cell phone", "cellphone", "text", "call", "iphone", "number", "telephone" ], "aliases": [ "mobile-phone" ], "categories": [ "Web Application Icons" ] }, { "name": "Circle Outlined", "id": "circle-o", "unicode": "f10c", "created": 3, "categories": [ "Web Application Icons", "Form Control Icons" ] }, { "name": "quote-left", "id": "quote-left", "unicode": "f10d", "created": 3, "categories": [ "Web Application Icons" ] }, { "name": "quote-right", "id": "quote-right", "unicode": "f10e", "created": 3, "categories": [ "Web Application Icons" ] }, { "name": "Spinner", "id": "spinner", "unicode": "f110", "created": 3, "filter": [ "loading", "progress" ], "categories": [ "Web Application Icons", "Spinner Icons" ] }, { "name": "Circle", "id": "circle", "unicode": "f111", "created": 3, "filter": [ "dot", "notification" ], "categories": [ "Web Application Icons", "Form Control Icons" ] }, { "name": "Reply", "id": "reply", "unicode": "f112", "created": 3, "aliases": [ "mail-reply" ], "categories": [ "Web Application Icons" ] }, { "name": "GitHub Alt", "id": "github-alt", "unicode": "f113", "created": 3, "url": "github.com/logos", "filter": [ "octocat" ], "categories": [ "Brand Icons" ] }, { "name": "Folder Outlined", "id": "folder-o", "unicode": "f114", "created": 3, "categories": [ "Web Application Icons" ] }, { "name": "Folder Open Outlined", "id": "folder-open-o", "unicode": "f115", "created": 3, "categories": [ "Web Application Icons" ] }, { "name": "Smile Outlined", "id": "smile-o", "unicode": "f118", "created": 3.1, "filter": [ "face", "emoticon", "happy", "approve", "satisfied", "rating" ], "categories": [ "Web Application Icons" ] }, { "name": "Frown Outlined", "id": "frown-o", "unicode": "f119", "created": 3.1, "filter": [ "face", "emoticon", "sad", "disapprove", "rating" ], "categories": [ "Web Application Icons" ] }, { "name": "Meh Outlined", "id": "meh-o", "unicode": "f11a", "created": 3.1, "filter": [ "face", "emoticon", "rating", "neutral" ], "categories": [ "Web Application Icons" ] }, { "name": "Gamepad", "id": "gamepad", "unicode": "f11b", "created": 3.1, "filter": [ "controller" ], "categories": [ "Web Application Icons" ] }, { "name": "Keyboard Outlined", "id": "keyboard-o", "unicode": "f11c", "created": 3.1, "filter": [ "type", "input" ], "categories": [ "Web Application Icons" ] }, { "name": "Flag Outlined", "id": "flag-o", "unicode": "f11d", "created": 3.1, "filter": [ "report", "notification" ], "categories": [ "Web Application Icons" ] }, { "name": "flag-checkered", "id": "flag-checkered", "unicode": "f11e", "created": 3.1, "filter": [ "report", "notification", "notify" ], "categories": [ "Web Application Icons" ] }, { "name": "Terminal", "id": "terminal", "unicode": "f120", "created": 3.1, "filter": [ "command", "prompt", "code" ], "categories": [ "Web Application Icons" ] }, { "name": "Code", "id": "code", "unicode": "f121", "created": 3.1, "filter": [ "html", "brackets" ], "categories": [ "Web Application Icons" ] }, { "name": "reply-all", "id": "reply-all", "unicode": "f122", "created": 3.1, "aliases": [ "mail-reply-all" ], "categories": [ "Web Application Icons" ] }, { "name": "Star Half Outlined", "id": "star-half-o", "unicode": "f123", "created": 3.1, "filter": [ "award", "achievement", "rating", "score" ], "aliases": [ "star-half-empty", "star-half-full" ], "categories": [ "Web Application Icons" ] }, { "name": "location-arrow", "id": "location-arrow", "unicode": "f124", "created": 3.1, "filter": [ "map", "coordinates", "location", "address", "place", "where" ], "categories": [ "Web Application Icons" ] }, { "name": "crop", "id": "crop", "unicode": "f125", "created": 3.1, "categories": [ "Web Application Icons" ] }, { "name": "code-fork", "id": "code-fork", "unicode": "f126", "created": 3.1, "filter": [ "git", "fork", "vcs", "svn", "github", "rebase", "version", "merge" ], "categories": [ "Web Application Icons" ] }, { "name": "Chain Broken", "id": "chain-broken", "unicode": "f127", "created": 3.1, "filter": [ "remove" ], "aliases": [ "unlink" ], "categories": [ "Text Editor Icons" ] }, { "name": "Question", "id": "question", "unicode": "f128", "created": 3.1, "filter": [ "help", "information", "unknown", "support" ], "categories": [ "Web Application Icons" ] }, { "name": "Info", "id": "info", "unicode": "f129", "created": 3.1, "filter": [ "help", "information", "more", "details" ], "categories": [ "Web Application Icons" ] }, { "name": "exclamation", "id": "exclamation", "unicode": "f12a", "created": 3.1, "filter": [ "warning", "error", "problem", "notification", "notify", "alert" ], "categories": [ "Web Application Icons" ] }, { "name": "superscript", "id": "superscript", "unicode": "f12b", "created": 3.1, "filter": [ "exponential" ], "categories": [ "Text Editor Icons" ] }, { "name": "subscript", "id": "subscript", "unicode": "f12c", "created": 3.1, "categories": [ "Text Editor Icons" ] }, { "name": "eraser", "id": "eraser", "unicode": "f12d", "created": 3.1, "filter": [ "remove", "delete" ], "categories": [ "Text Editor Icons", "Web Application Icons" ] }, { "name": "Puzzle Piece", "id": "puzzle-piece", "unicode": "f12e", "created": 3.1, "filter": [ "addon", "add-on", "section" ], "categories": [ "Web Application Icons" ] }, { "name": "microphone", "id": "microphone", "unicode": "f130", "created": 3.1, "filter": [ "record", "voice", "sound" ], "categories": [ "Web Application Icons" ] }, { "name": "Microphone Slash", "id": "microphone-slash", "unicode": "f131", "created": 3.1, "filter": [ "record", "voice", "sound", "mute" ], "categories": [ "Web Application Icons" ] }, { "name": "shield", "id": "shield", "unicode": "f132", "created": 3.1, "filter": [ "award", "achievement", "security", "winner" ], "categories": [ "Web Application Icons" ] }, { "name": "calendar-o", "id": "calendar-o", "unicode": "f133", "created": 3.1, "filter": [ "date", "time", "when", "event" ], "categories": [ "Web Application Icons" ] }, { "name": "fire-extinguisher", "id": "fire-extinguisher", "unicode": "f134", "created": 3.1, "categories": [ "Web Application Icons" ] }, { "name": "rocket", "id": "rocket", "unicode": "f135", "created": 3.1, "filter": [ "app" ], "categories": [ "Web Application Icons", "Transportation Icons" ] }, { "name": "MaxCDN", "id": "maxcdn", "unicode": "f136", "created": 3.1, "categories": [ "Brand Icons" ] }, { "name": "Chevron Circle Left", "id": "chevron-circle-left", "unicode": "f137", "created": 3.1, "filter": [ "previous", "back", "arrow" ], "categories": [ "Directional Icons" ] }, { "name": "Chevron Circle Right", "id": "chevron-circle-right", "unicode": "f138", "created": 3.1, "filter": [ "next", "forward", "arrow" ], "categories": [ "Directional Icons" ] }, { "name": "Chevron Circle Up", "id": "chevron-circle-up", "unicode": "f139", "created": 3.1, "filter": [ "arrow" ], "categories": [ "Directional Icons" ] }, { "name": "Chevron Circle Down", "id": "chevron-circle-down", "unicode": "f13a", "created": 3.1, "filter": [ "more", "dropdown", "menu", "arrow" ], "categories": [ "Directional Icons" ] }, { "name": "HTML 5 Logo", "id": "html5", "unicode": "f13b", "created": 3.1, "code": [ "code", "html5" ], "categories": [ "Brand Icons" ] }, { "name": "CSS 3 Logo", "id": "css3", "unicode": "f13c", "created": 3.1, "filter": [ "code" ], "categories": [ "Brand Icons" ] }, { "name": "Anchor", "id": "anchor", "unicode": "f13d", "created": 3.1, "filter": [ "link" ], "categories": [ "Web Application Icons" ] }, { "name": "Unlock Alt", "id": "unlock-alt", "unicode": "f13e", "created": 3.1, "filter": [ "protect", "admin", "password", "lock" ], "categories": [ "Web Application Icons" ] }, { "name": "Bullseye", "id": "bullseye", "unicode": "f140", "created": 3.1, "filter": [ "target" ], "categories": [ "Web Application Icons" ] }, { "name": "Ellipsis Horizontal", "id": "ellipsis-h", "unicode": "f141", "created": 3.1, "filter": [ "dots" ], "categories": [ "Web Application Icons" ] }, { "name": "Ellipsis Vertical", "id": "ellipsis-v", "unicode": "f142", "created": 3.1, "filter": [ "dots" ], "categories": [ "Web Application Icons" ] }, { "name": "RSS Square", "id": "rss-square", "unicode": "f143", "created": 3.1, "filter": [ "feed", "blog" ], "categories": [ "Web Application Icons" ] }, { "name": "Play Circle", "id": "play-circle", "unicode": "f144", "created": 3.1, "filter": [ "start", "playing" ], "categories": [ "Video Player Icons" ] }, { "name": "Ticket", "id": "ticket", "unicode": "f145", "created": 3.1, "filter": [ "movie", "pass", "support" ], "categories": [ "Web Application Icons" ] }, { "name": "Minus Square", "id": "minus-square", "unicode": "f146", "created": 3.1, "filter": [ "hide", "minify", "delete", "remove", "trash", "hide", "collapse" ], "categories": [ "Web Application Icons", "Form Control Icons" ] }, { "name": "Minus Square Outlined", "id": "minus-square-o", "unicode": "f147", "created": 3.1, "filter": [ "hide", "minify", "delete", "remove", "trash", "hide", "collapse" ], "categories": [ "Web Application Icons", "Form Control Icons" ] }, { "name": "Level Up", "id": "level-up", "unicode": "f148", "created": 3.1, "filter": [ "arrow" ], "categories": [ "Web Application Icons" ] }, { "name": "Level Down", "id": "level-down", "unicode": "f149", "created": 3.1, "filter": [ "arrow" ], "categories": [ "Web Application Icons" ] }, { "name": "Check Square", "id": "check-square", "unicode": "f14a", "created": 3.1, "filter": [ "checkmark", "done", "todo", "agree", "accept", "confirm", "ok" ], "categories": [ "Web Application Icons", "Form Control Icons" ] }, { "name": "Pencil Square", "id": "pencil-square", "unicode": "f14b", "created": 3.1, "filter": [ "write", "edit", "update" ], "categories": [ "Web Application Icons" ] }, { "name": "External Link Square", "id": "external-link-square", "unicode": "f14c", "created": 3.1, "filter": [ "open", "new" ], "categories": [ "Web Application Icons" ] }, { "name": "Share Square", "id": "share-square", "unicode": "f14d", "created": 3.1, "filter": [ "social", "send" ], "categories": [ "Web Application Icons" ] }, { "name": "Compass", "id": "compass", "unicode": "f14e", "created": 3.2, "filter": [ "safari", "directory", "menu", "location" ], "categories": [ "Web Application Icons" ] }, { "name": "Caret Square Outlined Down", "id": "caret-square-o-down", "unicode": "f150", "created": 3.2, "aliases": [ "toggle-down" ], "filter": [ "more", "dropdown", "menu" ], "categories": [ "Web Application Icons", "Directional Icons" ] }, { "name": "Caret Square Outlined Up", "id": "caret-square-o-up", "unicode": "f151", "created": 3.2, "aliases": [ "toggle-up" ], "categories": [ "Web Application Icons", "Directional Icons" ] }, { "name": "Caret Square Outlined Right", "id": "caret-square-o-right", "unicode": "f152", "created": 3.2, "filter": [ "next", "forward" ], "aliases": [ "toggle-right" ], "categories": [ "Web Application Icons", "Directional Icons" ] }, { "name": "Euro (EUR)", "id": "eur", "unicode": "f153", "created": 3.2, "aliases": [ "euro" ], "categories": [ "Currency Icons" ] }, { "name": "GBP", "id": "gbp", "unicode": "f154", "created": 3.2, "categories": [ "Currency Icons" ] }, { "name": "US Dollar", "id": "usd", "unicode": "f155", "created": 3.2, "aliases": [ "dollar" ], "categories": [ "Currency Icons" ] }, { "name": "Indian Rupee (INR)", "id": "inr", "unicode": "f156", "created": 3.2, "aliases": [ "rupee" ], "categories": [ "Currency Icons" ] }, { "name": "Japanese Yen (JPY)", "id": "jpy", "unicode": "f157", "created": 3.2, "aliases": [ "cny", "rmb", "yen" ], "categories": [ "Currency Icons" ] }, { "name": "Russian Ruble (RUB)", "id": "rub", "unicode": "f158", "created": 4, "aliases": [ "ruble", "rouble" ], "categories": [ "Currency Icons" ] }, { "name": "Korean Won (KRW)", "id": "krw", "unicode": "f159", "created": 3.2, "aliases": [ "won" ], "categories": [ "Currency Icons" ] }, { "name": "Bitcoin (BTC)", "id": "btc", "unicode": "f15a", "created": 3.2, "aliases": [ "bitcoin" ], "categories": [ "Currency Icons", "Brand Icons" ] }, { "name": "File", "id": "file", "unicode": "f15b", "created": 3.2, "filter": [ "new", "page", "pdf", "document" ], "categories": [ "Text Editor Icons", "File Type Icons" ] }, { "name": "File Text", "id": "file-text", "unicode": "f15c", "created": 3.2, "filter": [ "new", "page", "pdf", "document" ], "categories": [ "Text Editor Icons", "File Type Icons" ] }, { "name": "Sort Alpha Ascending", "id": "sort-alpha-asc", "unicode": "f15d", "created": 3.2, "categories": [ "Web Application Icons" ] }, { "name": "Sort Alpha Descending", "id": "sort-alpha-desc", "unicode": "f15e", "created": 3.2, "categories": [ "Web Application Icons" ] }, { "name": "Sort Amount Ascending", "id": "sort-amount-asc", "unicode": "f160", "created": 3.2, "categories": [ "Web Application Icons" ] }, { "name": "Sort Amount Descending", "id": "sort-amount-desc", "unicode": "f161", "created": 3.2, "categories": [ "Web Application Icons" ] }, { "name": "Sort Numeric Ascending", "id": "sort-numeric-asc", "unicode": "f162", "created": 3.2, "filter": [ "numbers" ], "categories": [ "Web Application Icons" ] }, { "name": "Sort Numeric Descending", "id": "sort-numeric-desc", "unicode": "f163", "created": 3.2, "filter": [ "numbers" ], "categories": [ "Web Application Icons" ] }, { "name": "thumbs-up", "id": "thumbs-up", "unicode": "f164", "created": 3.2, "filter": [ "like", "favorite", "approve", "agree", "hand" ], "categories": [ "Web Application Icons", "Hand Icons" ] }, { "name": "thumbs-down", "id": "thumbs-down", "unicode": "f165", "created": 3.2, "filter": [ "dislike", "disapprove", "disagree", "hand" ], "categories": [ "Web Application Icons", "Hand Icons" ] }, { "name": "YouTube Square", "id": "youtube-square", "unicode": "f166", "created": 3.2, "filter": [ "video", "film" ], "categories": [ "Brand Icons" ] }, { "name": "YouTube", "id": "youtube", "unicode": "f167", "created": 3.2, "filter": [ "video", "film" ], "categories": [ "Brand Icons" ] }, { "name": "Xing", "id": "xing", "unicode": "f168", "created": 3.2, "categories": [ "Brand Icons" ] }, { "name": "Xing Square", "id": "xing-square", "unicode": "f169", "created": 3.2, "categories": [ "Brand Icons" ] }, { "name": "YouTube Play", "id": "youtube-play", "unicode": "f16a", "created": 3.2, "filter": [ "start", "playing" ], "categories": [ "Brand Icons", "Video Player Icons" ] }, { "name": "Dropbox", "id": "dropbox", "unicode": "f16b", "created": 3.2, "categories": [ "Brand Icons" ] }, { "name": "Stack Overflow", "id": "stack-overflow", "unicode": "f16c", "created": 3.2, "categories": [ "Brand Icons" ] }, { "name": "Instagram", "id": "instagram", "unicode": "f16d", "created": 4.6, "categories": [ "Brand Icons" ] }, { "name": "Flickr", "id": "flickr", "unicode": "f16e", "created": 3.2, "categories": [ "Brand Icons" ] }, { "name": "App.net", "id": "adn", "unicode": "f170", "created": 3.2, "categories": [ "Brand Icons" ] }, { "name": "Bitbucket", "id": "bitbucket", "unicode": "f171", "created": 3.2, "filter": [ "git" ], "categories": [ "Brand Icons" ] }, { "name": "Bitbucket Square", "id": "bitbucket-square", "unicode": "f172", "created": 3.2, "filter": [ "git" ], "categories": [ "Brand Icons" ] }, { "name": "Tumblr", "id": "tumblr", "unicode": "f173", "created": 3.2, "categories": [ "Brand Icons" ] }, { "name": "Tumblr Square", "id": "tumblr-square", "unicode": "f174", "created": 3.2, "categories": [ "Brand Icons" ] }, { "name": "Long Arrow Down", "id": "long-arrow-down", "unicode": "f175", "created": 3.2, "categories": [ "Directional Icons" ] }, { "name": "Long Arrow Up", "id": "long-arrow-up", "unicode": "f176", "created": 3.2, "categories": [ "Directional Icons" ] }, { "name": "Long Arrow Left", "id": "long-arrow-left", "unicode": "f177", "created": 3.2, "filter": [ "previous", "back" ], "categories": [ "Directional Icons" ] }, { "name": "Long Arrow Right", "id": "long-arrow-right", "unicode": "f178", "created": 3.2, "categories": [ "Directional Icons" ] }, { "name": "Apple", "id": "apple", "unicode": "f179", "created": 3.2, "filter": [ "osx", "food" ], "categories": [ "Brand Icons" ] }, { "name": "Windows", "id": "windows", "unicode": "f17a", "created": 3.2, "filter": [ "microsoft" ], "categories": [ "Brand Icons" ] }, { "name": "Android", "id": "android", "unicode": "f17b", "created": 3.2, "filter": [ "robot" ], "categories": [ "Brand Icons" ] }, { "name": "Linux", "id": "linux", "unicode": "f17c", "created": 3.2, "filter": [ "tux" ], "categories": [ "Brand Icons" ] }, { "name": "Dribbble", "id": "dribbble", "unicode": "f17d", "created": 3.2, "categories": [ "Brand Icons" ] }, { "name": "Skype", "id": "skype", "unicode": "f17e", "created": 3.2, "categories": [ "Brand Icons" ] }, { "name": "Foursquare", "id": "foursquare", "unicode": "f180", "created": 3.2, "categories": [ "Brand Icons" ] }, { "name": "Trello", "id": "trello", "unicode": "f181", "created": 3.2, "categories": [ "Brand Icons" ] }, { "name": "Female", "id": "female", "unicode": "f182", "created": 3.2, "filter": [ "woman", "user", "person", "profile" ], "categories": [ "Web Application Icons" ] }, { "name": "Male", "id": "male", "unicode": "f183", "created": 3.2, "filter": [ "man", "user", "person", "profile" ], "categories": [ "Web Application Icons" ] }, { "name": "Gratipay (Gittip)", "id": "gratipay", "unicode": "f184", "created": 3.2, "aliases": [ "gittip" ], "filter": [ "heart", "like", "favorite", "love" ], "categories": [ "Brand Icons" ] }, { "name": "Sun Outlined", "id": "sun-o", "unicode": "f185", "created": 3.2, "filter": [ "weather", "contrast", "lighter", "brighten", "day" ], "categories": [ "Web Application Icons" ] }, { "name": "Moon Outlined", "id": "moon-o", "unicode": "f186", "created": 3.2, "filter": [ "night", "darker", "contrast" ], "categories": [ "Web Application Icons" ] }, { "name": "Archive", "id": "archive", "unicode": "f187", "created": 3.2, "filter": [ "box", "storage" ], "categories": [ "Web Application Icons" ] }, { "name": "Bug", "id": "bug", "unicode": "f188", "created": 3.2, "filter": [ "report", "insect" ], "categories": [ "Web Application Icons" ] }, { "name": "VK", "id": "vk", "unicode": "f189", "created": 3.2, "categories": [ "Brand Icons" ] }, { "name": "Weibo", "id": "weibo", "unicode": "f18a", "created": 3.2, "categories": [ "Brand Icons" ] }, { "name": "Renren", "id": "renren", "unicode": "f18b", "created": 3.2, "categories": [ "Brand Icons" ] }, { "name": "Pagelines", "id": "pagelines", "unicode": "f18c", "created": 4, "filter": [ "leaf", "leaves", "tree", "plant", "eco", "nature" ], "categories": [ "Brand Icons" ] }, { "name": "Stack Exchange", "id": "stack-exchange", "unicode": "f18d", "created": 4, "categories": [ "Brand Icons" ] }, { "name": "Arrow Circle Outlined Right", "id": "arrow-circle-o-right", "unicode": "f18e", "created": 4, "filter": [ "next", "forward" ], "categories": [ "Directional Icons" ] }, { "name": "Arrow Circle Outlined Left", "id": "arrow-circle-o-left", "unicode": "f190", "created": 4, "filter": [ "previous", "back" ], "categories": [ "Directional Icons" ] }, { "name": "Caret Square Outlined Left", "id": "caret-square-o-left", "unicode": "f191", "created": 4, "filter": [ "previous", "back" ], "aliases": [ "toggle-left" ], "categories": [ "Web Application Icons", "Directional Icons" ] }, { "name": "Dot Circle Outlined", "id": "dot-circle-o", "unicode": "f192", "created": 4, "filter": [ "target", "bullseye", "notification" ], "categories": [ "Web Application Icons", "Form Control Icons" ] }, { "name": "Wheelchair", "id": "wheelchair", "unicode": "f193", "created": 4, "filter": [ "handicap", "person" ], "categories": [ "Web Application Icons", "Medical Icons", "Transportation Icons", "Accessibility Icons" ] }, { "name": "Vimeo Square", "id": "vimeo-square", "unicode": "f194", "created": 4, "categories": [ "Brand Icons" ] }, { "name": "Turkish Lira (TRY)", "id": "try", "unicode": "f195", "created": 4, "aliases": [ "turkish-lira" ], "categories": [ "Currency Icons" ] }, { "name": "Plus Square Outlined", "id": "plus-square-o", "unicode": "f196", "created": 4, "filter": [ "add", "new", "create", "expand" ], "categories": [ "Web Application Icons", "Form Control Icons" ] }, { "name": "Space Shuttle", "id": "space-shuttle", "unicode": "f197", "created": 4.1, "filter": null, "categories": [ "Web Application Icons", "Transportation Icons" ] }, { "name": "Slack Logo", "id": "slack", "unicode": "f198", "created": 4.1, "filter": [ "hashtag", "anchor", "hash" ], "categories": [ "Brand Icons" ] }, { "name": "Envelope Square", "id": "envelope-square", "unicode": "f199", "created": 4.1, "filter": [ "email", "e-mail", "letter", "support", "mail", "message", "notification" ], "categories": [ "Web Application Icons" ] }, { "name": "WordPress Logo", "id": "wordpress", "unicode": "f19a", "created": 4.1, "categories": [ "Brand Icons" ] }, { "name": "OpenID", "id": "openid", "unicode": "f19b", "created": 4.1, "categories": [ "Brand Icons" ] }, { "name": "University", "id": "university", "unicode": "f19c", "created": 4.1, "aliases": [ "institution", "bank" ], "categories": [ "Web Application Icons" ] }, { "name": "Graduation Cap", "id": "graduation-cap", "unicode": "f19d", "created": 4.1, "aliases": [ "mortar-board" ], "filter": [ "learning", "school", "student" ], "categories": [ "Web Application Icons" ] }, { "name": "Yahoo Logo", "id": "yahoo", "unicode": "f19e", "created": 4.1, "categories": [ "Brand Icons" ] }, { "name": "Google Logo", "id": "google", "unicode": "f1a0", "created": 4.1, "categories": [ "Brand Icons" ] }, { "name": "reddit Logo", "id": "reddit", "unicode": "f1a1", "created": 4.1, "categories": [ "Brand Icons" ] }, { "name": "reddit Square", "id": "reddit-square", "unicode": "f1a2", "created": 4.1, "categories": [ "Brand Icons" ] }, { "name": "StumbleUpon Circle", "id": "stumbleupon-circle", "unicode": "f1a3", "created": 4.1, "categories": [ "Brand Icons" ] }, { "name": "StumbleUpon Logo", "id": "stumbleupon", "unicode": "f1a4", "created": 4.1, "categories": [ "Brand Icons" ] }, { "name": "Delicious Logo", "id": "delicious", "unicode": "f1a5", "created": 4.1, "categories": [ "Brand Icons" ] }, { "name": "Digg Logo", "id": "digg", "unicode": "f1a6", "created": 4.1, "categories": [ "Brand Icons" ] }, { "name": "Pied Piper PP Logo (Old)", "id": "pied-piper-pp", "unicode": "f1a7", "created": 4.1, "categories": [ "Brand Icons" ] }, { "name": "Pied Piper Alternate Logo", "id": "pied-piper-alt", "unicode": "f1a8", "created": 4.1, "categories": [ "Brand Icons" ] }, { "name": "Drupal Logo", "id": "drupal", "unicode": "f1a9", "created": 4.1, "categories": [ "Brand Icons" ] }, { "name": "Joomla Logo", "id": "joomla", "unicode": "f1aa", "created": 4.1, "categories": [ "Brand Icons" ] }, { "name": "Language", "id": "language", "unicode": "f1ab", "created": 4.1, "categories": [ "Web Application Icons" ] }, { "name": "Fax", "id": "fax", "unicode": "f1ac", "created": 4.1, "categories": [ "Web Application Icons" ] }, { "name": "Building", "id": "building", "unicode": "f1ad", "created": 4.1, "filter": [ "work", "business", "apartment", "office", "company" ], "categories": [ "Web Application Icons" ] }, { "name": "Child", "id": "child", "unicode": "f1ae", "created": 4.1, "categories": [ "Web Application Icons" ] }, { "name": "Paw", "id": "paw", "unicode": "f1b0", "created": 4.1, "filter": [ "pet" ], "categories": [ "Web Application Icons" ] }, { "name": "spoon", "id": "spoon", "unicode": "f1b1", "created": 4.1, "categories": [ "Web Application Icons" ] }, { "name": "Cube", "id": "cube", "unicode": "f1b2", "created": 4.1, "categories": [ "Web Application Icons" ] }, { "name": "Cubes", "id": "cubes", "unicode": "f1b3", "created": 4.1, "categories": [ "Web Application Icons" ] }, { "name": "Behance", "id": "behance", "unicode": "f1b4", "created": 4.1, "categories": [ "Brand Icons" ] }, { "name": "Behance Square", "id": "behance-square", "unicode": "f1b5", "created": 4.1, "categories": [ "Brand Icons" ] }, { "name": "Steam", "id": "steam", "unicode": "f1b6", "created": 4.1, "categories": [ "Brand Icons" ] }, { "name": "Steam Square", "id": "steam-square", "unicode": "f1b7", "created": 4.1, "categories": [ "Brand Icons" ] }, { "name": "Recycle", "id": "recycle", "unicode": "f1b8", "created": 4.1, "categories": [ "Web Application Icons" ] }, { "name": "Car", "id": "car", "unicode": "f1b9", "created": 4.1, "aliases": [ "automobile" ], "filter": [ "vehicle" ], "categories": [ "Web Application Icons", "Transportation Icons" ] }, { "name": "Taxi", "id": "taxi", "unicode": "f1ba", "created": 4.1, "aliases": [ "cab" ], "filter": [ "vehicle" ], "categories": [ "Web Application Icons", "Transportation Icons" ] }, { "name": "Tree", "id": "tree", "unicode": "f1bb", "created": 4.1, "categories": [ "Web Application Icons" ] }, { "name": "Spotify", "id": "spotify", "unicode": "f1bc", "created": 4.1, "categories": [ "Brand Icons" ] }, { "name": "deviantART", "id": "deviantart", "unicode": "f1bd", "created": 4.1, "categories": [ "Brand Icons" ] }, { "name": "SoundCloud", "id": "soundcloud", "unicode": "f1be", "created": 4.1, "categories": [ "Brand Icons" ] }, { "name": "Database", "id": "database", "unicode": "f1c0", "created": 4.1, "categories": [ "Web Application Icons" ] }, { "name": "PDF File Outlined", "id": "file-pdf-o", "unicode": "f1c1", "created": 4.1, "categories": [ "Web Application Icons", "File Type Icons" ] }, { "name": "Word File Outlined", "id": "file-word-o", "unicode": "f1c2", "created": 4.1, "categories": [ "Web Application Icons", "File Type Icons" ] }, { "name": "Excel File Outlined", "id": "file-excel-o", "unicode": "f1c3", "created": 4.1, "categories": [ "Web Application Icons", "File Type Icons" ] }, { "name": "Powerpoint File Outlined", "id": "file-powerpoint-o", "unicode": "f1c4", "created": 4.1, "categories": [ "Web Application Icons", "File Type Icons" ] }, { "name": "Image File Outlined", "id": "file-image-o", "unicode": "f1c5", "created": 4.1, "aliases": [ "file-photo-o", "file-picture-o" ], "categories": [ "Web Application Icons", "File Type Icons" ] }, { "name": "Archive File Outlined", "id": "file-archive-o", "unicode": "f1c6", "created": 4.1, "aliases": [ "file-zip-o" ], "categories": [ "Web Application Icons", "File Type Icons" ] }, { "name": "Audio File Outlined", "id": "file-audio-o", "unicode": "f1c7", "created": 4.1, "aliases": [ "file-sound-o" ], "categories": [ "Web Application Icons", "File Type Icons" ] }, { "name": "Video File Outlined", "id": "file-video-o", "unicode": "f1c8", "created": 4.1, "aliases": [ "file-movie-o" ], "categories": [ "Web Application Icons", "File Type Icons" ] }, { "name": "Code File Outlined", "id": "file-code-o", "unicode": "f1c9", "created": 4.1, "categories": [ "Web Application Icons", "File Type Icons" ] }, { "name": "Vine", "id": "vine", "unicode": "f1ca", "created": 4.1, "categories": [ "Brand Icons" ] }, { "name": "Codepen", "id": "codepen", "unicode": "f1cb", "created": 4.1, "categories": [ "Brand Icons" ] }, { "name": "jsFiddle", "id": "jsfiddle", "unicode": "f1cc", "created": 4.1, "categories": [ "Brand Icons" ] }, { "name": "Life Ring", "id": "life-ring", "unicode": "f1cd", "created": 4.1, "aliases": [ { "life-bouy": "Deprecated - remove in 5.0.0" }, "life-buoy", "life-saver", "support" ], "categories": [ "Web Application Icons" ] }, { "name": "Circle Outlined Notched", "id": "circle-o-notch", "unicode": "f1ce", "created": 4.1, "categories": [ "Web Application Icons", "Spinner Icons" ] }, { "name": "Rebel Alliance", "id": "rebel", "unicode": "f1d0", "created": 4.1, "aliases": [ "ra", "resistance" ], "categories": [ "Brand Icons" ] }, { "name": "Galactic Empire", "id": "empire", "unicode": "f1d1", "created": 4.1, "aliases": [ "ge" ], "categories": [ "Brand Icons" ] }, { "name": "Git Square", "id": "git-square", "unicode": "f1d2", "created": 4.1, "categories": [ "Brand Icons" ] }, { "name": "Git", "id": "git", "unicode": "f1d3", "created": 4.1, "categories": [ "Brand Icons" ] }, { "name": "Hacker News", "id": "hacker-news", "unicode": "f1d4", "created": 4.1, "aliases": [ "y-combinator-square", "yc-square" ], "categories": [ "Brand Icons" ] }, { "name": "Tencent Weibo", "id": "tencent-weibo", "unicode": "f1d5", "created": 4.1, "categories": [ "Brand Icons" ] }, { "name": "QQ", "id": "qq", "unicode": "f1d6", "created": 4.1, "categories": [ "Brand Icons" ] }, { "name": "Weixin (WeChat)", "id": "weixin", "unicode": "f1d7", "created": 4.1, "aliases": [ "wechat" ], "categories": [ "Brand Icons" ] }, { "name": "Paper Plane", "id": "paper-plane", "unicode": "f1d8", "created": 4.1, "aliases": [ "send" ], "categories": [ "Web Application Icons" ] }, { "name": "Paper Plane Outlined", "id": "paper-plane-o", "unicode": "f1d9", "created": 4.1, "aliases": [ "send-o" ], "categories": [ "Web Application Icons" ] }, { "name": "History", "id": "history", "unicode": "f1da", "created": 4.1, "categories": [ "Web Application Icons" ] }, { "name": "Circle Outlined Thin", "id": "circle-thin", "unicode": "f1db", "created": 4.1, "categories": [ "Web Application Icons" ] }, { "name": "header", "id": "header", "unicode": "f1dc", "created": 4.1, "filter": [ "heading" ], "categories": [ "Text Editor Icons" ] }, { "name": "paragraph", "id": "paragraph", "unicode": "f1dd", "created": 4.1, "categories": [ "Text Editor Icons" ] }, { "name": "Sliders", "id": "sliders", "unicode": "f1de", "created": 4.1, "filter": [ "settings" ], "categories": [ "Web Application Icons" ] }, { "name": "Share Alt", "id": "share-alt", "unicode": "f1e0", "created": 4.1, "categories": [ "Web Application Icons", "Brand Icons" ] }, { "name": "Share Alt Square", "id": "share-alt-square", "unicode": "f1e1", "created": 4.1, "categories": [ "Web Application Icons", "Brand Icons" ] }, { "name": "Bomb", "id": "bomb", "unicode": "f1e2", "created": 4.1, "categories": [ "Web Application Icons" ] }, { "name": "Futbol Outlined", "id": "futbol-o", "unicode": "f1e3", "created": 4.2, "aliases": [ "soccer-ball-o" ], "categories": [ "Web Application Icons" ] }, { "name": "TTY", "id": "tty", "unicode": "f1e4", "created": 4.2, "categories": [ "Web Application Icons", "Accessibility Icons" ] }, { "name": "Binoculars", "id": "binoculars", "unicode": "f1e5", "created": 4.2, "categories": [ "Web Application Icons" ] }, { "name": "Plug", "id": "plug", "unicode": "f1e6", "created": 4.2, "filter": [ "power", "connect" ], "categories": [ "Web Application Icons" ] }, { "name": "Slideshare", "id": "slideshare", "unicode": "f1e7", "created": 4.2, "categories": [ "Brand Icons" ] }, { "name": "Twitch", "id": "twitch", "unicode": "f1e8", "created": 4.2, "categories": [ "Brand Icons" ] }, { "name": "Yelp", "id": "yelp", "unicode": "f1e9", "created": 4.2, "categories": [ "Brand Icons" ] }, { "name": "Newspaper Outlined", "id": "newspaper-o", "unicode": "f1ea", "created": 4.2, "filter": [ "press" ], "categories": [ "Web Application Icons" ] }, { "name": "WiFi", "id": "wifi", "unicode": "f1eb", "created": 4.2, "categories": [ "Web Application Icons" ] }, { "name": "Calculator", "id": "calculator", "unicode": "f1ec", "created": 4.2, "categories": [ "Web Application Icons" ] }, { "name": "Paypal", "id": "paypal", "unicode": "f1ed", "created": 4.2, "categories": [ "Brand Icons", "Payment Icons" ] }, { "name": "Google Wallet", "id": "google-wallet", "unicode": "f1ee", "created": 4.2, "categories": [ "Brand Icons", "Payment Icons" ] }, { "name": "Visa Credit Card", "id": "cc-visa", "unicode": "f1f0", "created": 4.2, "categories": [ "Brand Icons", "Payment Icons" ] }, { "name": "MasterCard Credit Card", "id": "cc-mastercard", "unicode": "f1f1", "created": 4.2, "categories": [ "Brand Icons", "Payment Icons" ] }, { "name": "Discover Credit Card", "id": "cc-discover", "unicode": "f1f2", "created": 4.2, "categories": [ "Brand Icons", "Payment Icons" ] }, { "name": "American Express Credit Card", "id": "cc-amex", "unicode": "f1f3", "created": 4.2, "filter": [ "amex" ], "categories": [ "Brand Icons", "Payment Icons" ] }, { "name": "Paypal Credit Card", "id": "cc-paypal", "unicode": "f1f4", "created": 4.2, "categories": [ "Brand Icons", "Payment Icons" ] }, { "name": "Stripe Credit Card", "id": "cc-stripe", "unicode": "f1f5", "created": 4.2, "categories": [ "Brand Icons", "Payment Icons" ] }, { "name": "Bell Slash", "id": "bell-slash", "unicode": "f1f6", "created": 4.2, "categories": [ "Web Application Icons" ] }, { "name": "Bell Slash Outlined", "id": "bell-slash-o", "unicode": "f1f7", "created": 4.2, "categories": [ "Web Application Icons" ] }, { "name": "Trash", "id": "trash", "unicode": "f1f8", "created": 4.2, "filter": [ "garbage", "delete", "remove", "hide" ], "categories": [ "Web Application Icons" ] }, { "name": "Copyright", "id": "copyright", "unicode": "f1f9", "created": 4.2, "categories": [ "Web Application Icons" ] }, { "name": "At", "id": "at", "unicode": "f1fa", "created": 4.2, "filter": [ "email", "e-mail" ], "categories": [ "Web Application Icons" ] }, { "name": "Eyedropper", "id": "eyedropper", "unicode": "f1fb", "created": 4.2, "categories": [ "Web Application Icons" ] }, { "name": "Paint Brush", "id": "paint-brush", "unicode": "f1fc", "created": 4.2, "categories": [ "Web Application Icons" ] }, { "name": "Birthday Cake", "id": "birthday-cake", "unicode": "f1fd", "created": 4.2, "categories": [ "Web Application Icons" ] }, { "name": "Area Chart", "id": "area-chart", "unicode": "f1fe", "created": 4.2, "filter": [ "graph", "analytics" ], "categories": [ "Web Application Icons", "Chart Icons" ] }, { "name": "Pie Chart", "id": "pie-chart", "unicode": "f200", "created": 4.2, "filter": [ "graph", "analytics" ], "categories": [ "Web Application Icons", "Chart Icons" ] }, { "name": "Line Chart", "id": "line-chart", "unicode": "f201", "created": 4.2, "filter": [ "graph", "analytics" ], "categories": [ "Web Application Icons", "Chart Icons" ] }, { "name": "last.fm", "id": "lastfm", "unicode": "f202", "created": 4.2, "categories": [ "Brand Icons" ] }, { "name": "last.fm Square", "id": "lastfm-square", "unicode": "f203", "created": 4.2, "categories": [ "Brand Icons" ] }, { "name": "Toggle Off", "id": "toggle-off", "unicode": "f204", "created": 4.2, "categories": [ "Web Application Icons" ] }, { "name": "Toggle On", "id": "toggle-on", "unicode": "f205", "created": 4.2, "categories": [ "Web Application Icons" ] }, { "name": "Bicycle", "id": "bicycle", "unicode": "f206", "created": 4.2, "filter": [ "vehicle", "bike" ], "categories": [ "Web Application Icons", "Transportation Icons" ] }, { "name": "Bus", "id": "bus", "unicode": "f207", "created": 4.2, "filter": [ "vehicle" ], "categories": [ "Web Application Icons", "Transportation Icons" ] }, { "name": "ioxhost", "id": "ioxhost", "unicode": "f208", "created": 4.2, "url": "ioxhost.co.uk", "categories": [ "Brand Icons" ] }, { "name": "AngelList", "id": "angellist", "unicode": "f209", "created": 4.2, "categories": [ "Brand Icons" ] }, { "name": "Closed Captions", "id": "cc", "unicode": "f20a", "created": 4.2, "categories": [ "Web Application Icons", "Accessibility Icons" ] }, { "name": "Shekel (ILS)", "id": "ils", "unicode": "f20b", "created": 4.2, "aliases": [ "shekel", "sheqel" ], "categories": [ "Currency Icons" ] }, { "name": "meanpath", "id": "meanpath", "unicode": "f20c", "created": 4.2, "url": "meanpath.com", "categories": [ "Brand Icons" ] }, { "name": "BuySellAds", "id": "buysellads", "unicode": "f20d", "created": 4.3, "url": "buysellads.com", "categories": [ "Brand Icons" ] }, { "name": "Connect Develop", "id": "connectdevelop", "unicode": "f20e", "created": 4.3, "url": "connectdevelop.com", "categories": [ "Brand Icons" ] }, { "name": "DashCube", "id": "dashcube", "unicode": "f210", "created": 4.3, "url": "dashcube.com", "categories": [ "Brand Icons" ] }, { "name": "Forumbee", "id": "forumbee", "unicode": "f211", "created": 4.3, "url": "forumbee.com", "categories": [ "Brand Icons" ] }, { "name": "Leanpub", "id": "leanpub", "unicode": "f212", "created": 4.3, "url": "leanpub.com", "categories": [ "Brand Icons" ] }, { "name": "Sellsy", "id": "sellsy", "unicode": "f213", "created": 4.3, "url": "sellsy.com", "categories": [ "Brand Icons" ] }, { "name": "Shirts in Bulk", "id": "shirtsinbulk", "unicode": "f214", "created": 4.3, "url": "shirtsinbulk.com", "categories": [ "Brand Icons" ] }, { "name": "SimplyBuilt", "id": "simplybuilt", "unicode": "f215", "created": 4.3, "url": "simplybuilt.com", "categories": [ "Brand Icons" ] }, { "name": "skyatlas", "id": "skyatlas", "unicode": "f216", "created": 4.3, "url": "skyatlas.com", "categories": [ "Brand Icons" ] }, { "name": "Add to Shopping Cart", "id": "cart-plus", "unicode": "f217", "created": 4.3, "filter": [ "add", "shopping" ], "categories": [ "Web Application Icons" ] }, { "name": "Shopping Cart Arrow Down", "id": "cart-arrow-down", "unicode": "f218", "created": 4.3, "filter": [ "shopping" ], "categories": [ "Web Application Icons" ] }, { "name": "Diamond", "id": "diamond", "unicode": "f219", "created": 4.3, "filter": [ "gem", "gemstone" ], "categories": [ "Web Application Icons" ] }, { "name": "Ship", "id": "ship", "unicode": "f21a", "created": 4.3, "filter": [ "boat", "sea" ], "categories": [ "Web Application Icons", "Transportation Icons" ] }, { "name": "User Secret", "id": "user-secret", "unicode": "f21b", "created": 4.3, "filter": [ "whisper", "spy", "incognito", "privacy" ], "categories": [ "Web Application Icons" ] }, { "name": "Motorcycle", "id": "motorcycle", "unicode": "f21c", "created": 4.3, "filter": [ "vehicle", "bike" ], "categories": [ "Web Application Icons", "Transportation Icons" ] }, { "name": "Street View", "id": "street-view", "unicode": "f21d", "created": 4.3, "filter": [ "map" ], "categories": [ "Web Application Icons" ] }, { "name": "Heartbeat", "id": "heartbeat", "unicode": "f21e", "created": 4.3, "filter": [ "ekg" ], "categories": [ "Web Application Icons", "Medical Icons" ] }, { "name": "Venus", "id": "venus", "unicode": "f221", "created": 4.3, "filter": [ "female" ], "categories": [ "Gender Icons" ] }, { "name": "Mars", "id": "mars", "unicode": "f222", "created": 4.3, "filter": [ "male" ], "categories": [ "Gender Icons" ] }, { "name": "Mercury", "id": "mercury", "unicode": "f223", "created": 4.3, "filter": [ "transgender" ], "categories": [ "Gender Icons" ] }, { "name": "Transgender", "id": "transgender", "unicode": "f224", "created": 4.3, "aliases": [ "intersex" ], "categories": [ "Gender Icons" ] }, { "name": "Transgender Alt", "id": "transgender-alt", "unicode": "f225", "created": 4.3, "categories": [ "Gender Icons" ] }, { "name": "Venus Double", "id": "venus-double", "unicode": "f226", "created": 4.3, "categories": [ "Gender Icons" ] }, { "name": "Mars Double", "id": "mars-double", "unicode": "f227", "created": 4.3, "categories": [ "Gender Icons" ] }, { "name": "Venus Mars", "id": "venus-mars", "unicode": "f228", "created": 4.3, "categories": [ "Gender Icons" ] }, { "name": "Mars Stroke", "id": "mars-stroke", "unicode": "f229", "created": 4.3, "categories": [ "Gender Icons" ] }, { "name": "Mars Stroke Vertical", "id": "mars-stroke-v", "unicode": "f22a", "created": 4.3, "categories": [ "Gender Icons" ] }, { "name": "Mars Stroke Horizontal", "id": "mars-stroke-h", "unicode": "f22b", "created": 4.3, "categories": [ "Gender Icons" ] }, { "name": "Neuter", "id": "neuter", "unicode": "f22c", "created": 4.3, "categories": [ "Gender Icons" ] }, { "name": "Genderless", "id": "genderless", "unicode": "f22d", "created": 4.4, "categories": [ "Gender Icons" ] }, { "name": "Facebook Official", "id": "facebook-official", "unicode": "f230", "created": 4.3, "categories": [ "Brand Icons" ] }, { "name": "Pinterest P", "id": "pinterest-p", "unicode": "f231", "created": 4.3, "categories": [ "Brand Icons" ] }, { "name": "What's App", "id": "whatsapp", "unicode": "f232", "created": 4.3, "categories": [ "Brand Icons" ] }, { "name": "Server", "id": "server", "unicode": "f233", "created": 4.3, "categories": [ "Web Application Icons" ] }, { "name": "Add User", "id": "user-plus", "unicode": "f234", "created": 4.3, "filter": [ "sign up", "signup" ], "categories": [ "Web Application Icons" ] }, { "name": "Remove User", "id": "user-times", "unicode": "f235", "created": 4.3, "categories": [ "Web Application Icons" ] }, { "name": "Bed", "id": "bed", "unicode": "f236", "created": 4.3, "filter": [ "travel" ], "aliases": [ "hotel" ], "categories": [ "Web Application Icons" ] }, { "name": "Viacoin", "id": "viacoin", "unicode": "f237", "created": 4.3, "url": "viacoin.org", "categories": [ "Brand Icons" ] }, { "name": "Train", "id": "train", "unicode": "f238", "created": 4.3, "categories": [ "Transportation Icons" ] }, { "name": "Subway", "id": "subway", "unicode": "f239", "created": 4.3, "categories": [ "Transportation Icons" ] }, { "name": "Medium", "id": "medium", "unicode": "f23a", "created": 4.3, "categories": [ "Brand Icons" ] }, { "name": "Y Combinator", "id": "y-combinator", "unicode": "f23b", "created": 4.4, "aliases": [ "yc" ], "categories": [ "Brand Icons" ] }, { "name": "Optin Monster", "id": "optin-monster", "unicode": "f23c", "created": 4.4, "url": "optinmonster.com", "categories": [ "Brand Icons" ] }, { "name": "OpenCart", "id": "opencart", "unicode": "f23d", "created": 4.4, "url": "opencart.com", "categories": [ "Brand Icons" ] }, { "name": "ExpeditedSSL", "id": "expeditedssl", "unicode": "f23e", "created": 4.4, "categories": [ "Brand Icons" ] }, { "name": "Battery Full", "id": "battery-full", "unicode": "f240", "created": 4.4, "aliases": [ "battery-4", "battery" ], "filter": [ "power" ], "categories": [ "Web Application Icons" ] }, { "name": "Battery 3/4 Full", "id": "battery-three-quarters", "unicode": "f241", "created": 4.4, "aliases": [ "battery-3" ], "filter": [ "power" ], "categories": [ "Web Application Icons" ] }, { "name": "Battery 1/2 Full", "id": "battery-half", "unicode": "f242", "created": 4.4, "aliases": [ "battery-2" ], "filter": [ "power" ], "categories": [ "Web Application Icons" ] }, { "name": "Battery 1/4 Full", "id": "battery-quarter", "unicode": "f243", "created": 4.4, "aliases": [ "battery-1" ], "filter": [ "power" ], "categories": [ "Web Application Icons" ] }, { "name": "Battery Empty", "id": "battery-empty", "unicode": "f244", "created": 4.4, "aliases": [ "battery-0" ], "filter": [ "power" ], "categories": [ "Web Application Icons" ] }, { "name": "Mouse Pointer", "id": "mouse-pointer", "unicode": "f245", "created": 4.4, "categories": [ "Web Application Icons" ] }, { "name": "I Beam Cursor", "id": "i-cursor", "unicode": "f246", "created": 4.4, "categories": [ "Web Application Icons" ] }, { "name": "Object Group", "id": "object-group", "unicode": "f247", "created": 4.4, "categories": [ "Web Application Icons" ] }, { "name": "Object Ungroup", "id": "object-ungroup", "unicode": "f248", "created": 4.4, "categories": [ "Web Application Icons" ] }, { "name": "Sticky Note", "id": "sticky-note", "unicode": "f249", "created": 4.4, "categories": [ "Web Application Icons" ] }, { "name": "Sticky Note Outlined", "id": "sticky-note-o", "unicode": "f24a", "created": 4.4, "categories": [ "Web Application Icons" ] }, { "name": "JCB Credit Card", "id": "cc-jcb", "unicode": "f24b", "created": 4.4, "categories": [ "Brand Icons", "Payment Icons" ] }, { "name": "Diner's Club Credit Card", "id": "cc-diners-club", "unicode": "f24c", "created": 4.4, "categories": [ "Brand Icons", "Payment Icons" ] }, { "name": "Clone", "id": "clone", "unicode": "f24d", "created": 4.4, "filter": [ "copy" ], "categories": [ "Web Application Icons" ] }, { "name": "Balance Scale", "id": "balance-scale", "unicode": "f24e", "created": 4.4, "categories": [ "Web Application Icons" ] }, { "name": "Hourglass Outlined", "id": "hourglass-o", "unicode": "f250", "created": 4.4, "categories": [ "Web Application Icons" ] }, { "name": "Hourglass Start", "id": "hourglass-start", "unicode": "f251", "created": 4.4, "aliases": [ "hourglass-1" ], "categories": [ "Web Application Icons" ] }, { "name": "Hourglass Half", "id": "hourglass-half", "unicode": "f252", "created": 4.4, "aliases": [ "hourglass-2" ], "categories": [ "Web Application Icons" ] }, { "name": "Hourglass End", "id": "hourglass-end", "unicode": "f253", "created": 4.4, "aliases": [ "hourglass-3" ], "categories": [ "Web Application Icons" ] }, { "name": "Hourglass", "id": "hourglass", "unicode": "f254", "created": 4.4, "categories": [ "Web Application Icons" ] }, { "name": "Rock (Hand)", "id": "hand-rock-o", "unicode": "f255", "created": 4.4, "aliases": [ "hand-grab-o" ], "categories": [ "Web Application Icons", "Hand Icons" ] }, { "name": "Paper (Hand)", "id": "hand-paper-o", "unicode": "f256", "created": 4.4, "aliases": [ "hand-stop-o" ], "filter": [ "stop" ], "categories": [ "Web Application Icons", "Hand Icons" ] }, { "name": "Scissors (Hand)", "id": "hand-scissors-o", "unicode": "f257", "created": 4.4, "categories": [ "Web Application Icons", "Hand Icons" ] }, { "name": "Lizard (Hand)", "id": "hand-lizard-o", "unicode": "f258", "created": 4.4, "categories": [ "Web Application Icons", "Hand Icons" ] }, { "name": "Spock (Hand)", "id": "hand-spock-o", "unicode": "f259", "created": 4.4, "categories": [ "Web Application Icons", "Hand Icons" ] }, { "name": "Hand Pointer", "id": "hand-pointer-o", "unicode": "f25a", "created": 4.4, "categories": [ "Web Application Icons", "Hand Icons" ] }, { "name": "Hand Peace", "id": "hand-peace-o", "unicode": "f25b", "created": 4.4, "categories": [ "Web Application Icons", "Hand Icons" ] }, { "name": "Trademark", "id": "trademark", "unicode": "f25c", "created": 4.4, "categories": [ "Web Application Icons" ] }, { "name": "Registered Trademark", "id": "registered", "unicode": "f25d", "created": 4.4, "categories": [ "Web Application Icons" ] }, { "name": "Creative Commons", "id": "creative-commons", "unicode": "f25e", "created": 4.4, "categories": [ "Web Application Icons" ] }, { "name": "GG Currency", "id": "gg", "unicode": "f260", "created": 4.4, "categories": [ "Currency Icons", "Brand Icons" ] }, { "name": "GG Currency Circle", "id": "gg-circle", "unicode": "f261", "created": 4.4, "categories": [ "Currency Icons", "Brand Icons" ] }, { "name": "TripAdvisor", "id": "tripadvisor", "unicode": "f262", "created": 4.4, "categories": [ "Brand Icons" ] }, { "name": "Odnoklassniki", "id": "odnoklassniki", "unicode": "f263", "created": 4.4, "categories": [ "Brand Icons" ] }, { "name": "Odnoklassniki Square", "id": "odnoklassniki-square", "unicode": "f264", "created": 4.4, "categories": [ "Brand Icons" ] }, { "name": "Get Pocket", "id": "get-pocket", "unicode": "f265", "created": 4.4, "categories": [ "Brand Icons" ] }, { "name": "Wikipedia W", "id": "wikipedia-w", "unicode": "f266", "created": 4.4, "categories": [ "Brand Icons" ] }, { "name": "Safari", "id": "safari", "unicode": "f267", "created": 4.4, "filter": [ "browser" ], "categories": [ "Brand Icons" ] }, { "name": "Chrome", "id": "chrome", "unicode": "f268", "created": 4.4, "filter": [ "browser" ], "categories": [ "Brand Icons" ] }, { "name": "Firefox", "id": "firefox", "unicode": "f269", "created": 4.4, "filter": [ "browser" ], "categories": [ "Brand Icons" ] }, { "name": "Opera", "id": "opera", "unicode": "f26a", "created": 4.4, "categories": [ "Brand Icons" ] }, { "name": "Internet-explorer", "id": "internet-explorer", "unicode": "f26b", "created": 4.4, "filter": [ "browser", "ie" ], "categories": [ "Brand Icons" ] }, { "name": "Television", "id": "television", "unicode": "f26c", "created": 4.4, "aliases": [ "tv" ], "filter": [ "display", "computer", "monitor" ], "categories": [ "Web Application Icons" ] }, { "name": "Contao", "id": "contao", "unicode": "f26d", "created": 4.4, "categories": [ "Brand Icons" ] }, { "name": "500px", "id": "500px", "unicode": "f26e", "created": 4.4, "categories": [ "Brand Icons" ] }, { "name": "Amazon", "id": "amazon", "unicode": "f270", "created": 4.4, "categories": [ "Brand Icons" ] }, { "name": "Calendar Plus Outlined", "id": "calendar-plus-o", "unicode": "f271", "created": 4.4, "categories": [ "Web Application Icons" ] }, { "name": "Calendar Minus Outlined", "id": "calendar-minus-o", "unicode": "f272", "created": 4.4, "categories": [ "Web Application Icons" ] }, { "name": "Calendar Times Outlined", "id": "calendar-times-o", "unicode": "f273", "created": 4.4, "categories": [ "Web Application Icons" ] }, { "name": "Calendar Check Outlined", "id": "calendar-check-o", "unicode": "f274", "created": 4.4, "filter": [ "ok" ], "categories": [ "Web Application Icons" ] }, { "name": "Industry", "id": "industry", "unicode": "f275", "created": 4.4, "filter": [ "factory" ], "categories": [ "Web Application Icons" ] }, { "name": "Map Pin", "id": "map-pin", "unicode": "f276", "created": 4.4, "categories": [ "Web Application Icons" ] }, { "name": "Map Signs", "id": "map-signs", "unicode": "f277", "created": 4.4, "categories": [ "Web Application Icons" ] }, { "name": "Map Outlined", "id": "map-o", "unicode": "f278", "created": 4.4, "categories": [ "Web Application Icons" ] }, { "name": "Map", "id": "map", "unicode": "f279", "created": 4.4, "categories": [ "Web Application Icons" ] }, { "name": "Commenting", "id": "commenting", "unicode": "f27a", "created": 4.4, "filter": [ "speech", "notification", "note", "chat", "bubble", "feedback", "message", "texting", "sms", "conversation" ], "categories": [ "Web Application Icons" ] }, { "name": "Commenting Outlined", "id": "commenting-o", "unicode": "f27b", "created": 4.4, "filter": [ "speech", "notification", "note", "chat", "bubble", "feedback", "message", "texting", "sms", "conversation" ], "categories": [ "Web Application Icons" ] }, { "name": "Houzz", "id": "houzz", "unicode": "f27c", "created": 4.4, "categories": [ "Brand Icons" ] }, { "name": "Vimeo", "id": "vimeo", "unicode": "f27d", "created": 4.4, "categories": [ "Brand Icons" ] }, { "name": "Font Awesome Black Tie", "id": "black-tie", "unicode": "f27e", "created": 4.4, "url": "blacktie.io", "categories": [ "Brand Icons" ] }, { "name": "Fonticons", "id": "fonticons", "unicode": "f280", "created": 4.4, "url": "fonticons.com", "categories": [ "Brand Icons" ] }, { "name": "reddit Alien", "id": "reddit-alien", "unicode": "f281", "created": 4.5, "categories": [ "Brand Icons" ] }, { "name": "Edge Browser", "id": "edge", "unicode": "f282", "created": 4.5, "filter": [ "browser", "ie" ], "categories": [ "Brand Icons" ] }, { "name": "Credit Card", "id": "credit-card-alt", "unicode": "f283", "created": 4.5, "filter": [ "money", "buy", "debit", "checkout", "purchase", "payment", "credit card" ], "categories": [ "Payment Icons", "Web Application Icons" ] }, { "name": "Codie Pie", "id": "codiepie", "unicode": "f284", "created": 4.5, "url": "codiepie.com", "categories": [ "Brand Icons" ] }, { "name": "MODX", "id": "modx", "unicode": "f285", "created": 4.5, "categories": [ "Brand Icons" ] }, { "name": "Fort Awesome", "id": "fort-awesome", "unicode": "f286", "created": 4.5, "url": "fortawesome.com", "categories": [ "Brand Icons" ] }, { "name": "USB", "id": "usb", "unicode": "f287", "created": 4.5, "categories": [ "Brand Icons" ] }, { "name": "Product Hunt", "id": "product-hunt", "unicode": "f288", "created": 4.5, "categories": [ "Brand Icons" ] }, { "name": "Mixcloud", "id": "mixcloud", "unicode": "f289", "created": 4.5, "categories": [ "Brand Icons" ] }, { "name": "Scribd", "id": "scribd", "unicode": "f28a", "created": 4.5, "categories": [ "Brand Icons" ] }, { "name": "Pause Circle", "id": "pause-circle", "unicode": "f28b", "created": 4.5, "categories": [ "Video Player Icons" ] }, { "name": "Pause Circle Outlined", "id": "pause-circle-o", "unicode": "f28c", "created": 4.5, "categories": [ "Video Player Icons" ] }, { "name": "Stop Circle", "id": "stop-circle", "unicode": "f28d", "created": 4.5, "categories": [ "Video Player Icons" ] }, { "name": "Stop Circle Outlined", "id": "stop-circle-o", "unicode": "f28e", "created": 4.5, "categories": [ "Video Player Icons" ] }, { "name": "Shopping Bag", "id": "shopping-bag", "unicode": "f290", "created": 4.5, "categories": [ "Web Application Icons" ] }, { "name": "Shopping Basket", "id": "shopping-basket", "unicode": "f291", "created": 4.5, "categories": [ "Web Application Icons" ] }, { "name": "Hashtag", "id": "hashtag", "unicode": "f292", "created": 4.5, "categories": [ "Web Application Icons" ] }, { "name": "Bluetooth", "id": "bluetooth", "unicode": "f293", "created": 4.5, "categories": [ "Web Application Icons", "Brand Icons" ] }, { "name": "Bluetooth", "id": "bluetooth-b", "unicode": "f294", "created": 4.5, "categories": [ "Web Application Icons", "Brand Icons" ] }, { "name": "Percent", "id": "percent", "unicode": "f295", "created": 4.5, "categories": [ "Web Application Icons" ] }, { "name": "GitLab", "id": "gitlab", "unicode": "f296", "created": 4.6, "url": "gitlab.com", "categories": [ "Brand Icons" ] }, { "name": "WPBeginner", "id": "wpbeginner", "unicode": "f297", "created": 4.6, "url": "wpbeginner.com", "categories": [ "Brand Icons" ] }, { "name": "WPForms", "id": "wpforms", "unicode": "f298", "created": 4.6, "url": "wpforms.com", "categories": [ "Brand Icons" ] }, { "name": "Envira Gallery", "id": "envira", "unicode": "f299", "created": 4.6, "url": "enviragallery.com", "filter": [ "leaf" ], "categories": [ "Brand Icons" ] }, { "name": "Universal Access", "id": "universal-access", "unicode": "f29a", "created": 4.6, "categories": [ "Web Application Icons", "Accessibility Icons" ] }, { "name": "Wheelchair Alt", "id": "wheelchair-alt", "unicode": "f29b", "created": 4.6, "filter": [ "handicap", "person" ], "categories": [ "Web Application Icons", "Medical Icons", "Transportation Icons", "Accessibility Icons" ] }, { "name": "Question Circle Outlined", "id": "question-circle-o", "unicode": "f29c", "created": 4.6, "categories": [ "Web Application Icons", "Accessibility Icons" ] }, { "name": "Blind", "id": "blind", "unicode": "f29d", "created": 4.6, "categories": [ "Web Application Icons", "Accessibility Icons" ] }, { "name": "Audio Description", "id": "audio-description", "unicode": "f29e", "created": 4.6, "categories": [ "Web Application Icons", "Accessibility Icons" ] }, { "name": "Volume Control Phone", "id": "volume-control-phone", "unicode": "f2a0", "created": 4.6, "filter": [ "telephone" ], "categories": [ "Web Application Icons", "Accessibility Icons" ] }, { "name": "Braille", "id": "braille", "unicode": "f2a1", "created": 4.6, "categories": [ "Web Application Icons", "Accessibility Icons" ] }, { "name": "Assistive Listening Systems", "id": "assistive-listening-systems", "unicode": "f2a2", "created": 4.6, "categories": [ "Web Application Icons", "Accessibility Icons" ] }, { "name": "American Sign Language Interpreting", "id": "american-sign-language-interpreting", "unicode": "f2a3", "created": 4.6, "aliases": [ "asl-interpreting" ], "categories": [ "Web Application Icons", "Accessibility Icons" ] }, { "name": "Deaf", "id": "deaf", "unicode": "f2a4", "created": 4.6, "aliases": [ "deafness", "hard-of-hearing" ], "categories": [ "Web Application Icons", "Accessibility Icons" ] }, { "name": "Glide", "id": "glide", "unicode": "f2a5", "created": 4.6, "categories": [ "Brand Icons" ] }, { "name": "Glide G", "id": "glide-g", "unicode": "f2a6", "created": 4.6, "categories": [ "Brand Icons" ] }, { "name": "Sign Language", "id": "sign-language", "unicode": "f2a7", "created": 4.6, "aliases": [ "signing" ], "categories": [ "Web Application Icons", "Accessibility Icons" ] }, { "name": "Low Vision", "id": "low-vision", "unicode": "f2a8", "created": 4.6, "categories": [ "Web Application Icons", "Accessibility Icons" ] }, { "name": "Viadeo", "id": "viadeo", "unicode": "f2a9", "created": 4.6, "categories": [ "Brand Icons" ] }, { "name": "Viadeo Square", "id": "viadeo-square", "unicode": "f2aa", "created": 4.6, "categories": [ "Brand Icons" ] }, { "name": "Snapchat", "id": "snapchat", "unicode": "f2ab", "created": 4.6, "categories": [ "Brand Icons" ] }, { "name": "Snapchat Ghost", "id": "snapchat-ghost", "unicode": "f2ac", "created": 4.6, "categories": [ "Brand Icons" ] }, { "name": "Snapchat Square", "id": "snapchat-square", "unicode": "f2ad", "created": 4.6, "categories": [ "Brand Icons" ] }, { "name": "Pied Piper Logo", "id": "pied-piper", "unicode": "f2ae", "created": 4.6, "categories": [ "Brand Icons" ] }, { "name": "First Order", "id": "first-order", "unicode": "f2b0", "created": 4.6, "categories": [ "Brand Icons" ] }, { "name": "Yoast", "id": "yoast", "unicode": "f2b1", "created": 4.6, "url": "yoast.com", "categories": [ "Brand Icons" ] }, { "name": "ThemeIsle", "id": "themeisle", "unicode": "f2b2", "created": 4.6, "url": "themeisle.com", "categories": [ "Brand Icons" ] }, { "name": "Google Plus Official", "id": "google-plus-official", "unicode": "f2b3", "created": 4.6, "aliases": [ "google-plus-circle" ], "categories": [ "Brand Icons" ] }, { "name": "Font Awesome", "id": "font-awesome", "unicode": "f2b4", "created": 4.6, "aliases": [ "fa" ], "categories": [ "Brand Icons" ] }, { "name": "Handshake Outlined", "id": "handshake-o", "unicode": "f2b5", "created": 4.7, "categories": [ "Web Application Icons" ] }, { "name": "Envelope Open", "id": "envelope-open", "unicode": "f2b6", "created": 4.7, "filter": [ "email", "e-mail", "letter", "support", "mail", "message", "notification" ], "categories": [ "Web Application Icons" ] }, { "name": "Envelope Open Outlined", "id": "envelope-open-o", "unicode": "f2b7", "created": 4.7, "filter": [ "email", "e-mail", "letter", "support", "mail", "message", "notification" ], "categories": [ "Web Application Icons" ] }, { "name": "Linode", "id": "linode", "unicode": "f2b8", "created": 4.7, "url": "linode.com", "categories": [ "Brand Icons" ] }, { "name": "Address Book", "id": "address-book", "unicode": "f2b9", "created": 4.7, "categories": [ "Web Application Icons" ] }, { "name": "Address Book Outlined", "id": "address-book-o", "unicode": "f2ba", "created": 4.7, "categories": [ "Web Application Icons" ] }, { "name": "Address Card", "id": "address-card", "unicode": "f2bb", "created": 4.7, "aliases": [ "vcard" ], "categories": [ "Web Application Icons" ] }, { "name": "Address Card Outlined", "id": "address-card-o", "unicode": "f2bc", "created": 4.7, "aliases": [ "vcard-o" ], "categories": [ "Web Application Icons" ] }, { "name": "User Circle", "id": "user-circle", "unicode": "f2bd", "created": 4.7, "categories": [ "Web Application Icons" ] }, { "name": "User Circle Outlined", "id": "user-circle-o", "unicode": "f2be", "created": 4.7, "categories": [ "Web Application Icons" ] }, { "name": "User Outlined", "id": "user-o", "unicode": "f2c0", "created": 4.7, "categories": [ "Web Application Icons" ] }, { "name": "Identification Badge", "id": "id-badge", "unicode": "f2c1", "created": 4.7, "categories": [ "Web Application Icons" ] }, { "name": "Identification Card", "id": "id-card", "unicode": "f2c2", "created": 4.7, "aliases": [ "drivers-license" ], "categories": [ "Web Application Icons" ] }, { "name": "Identification Card Outlined", "id": "id-card-o", "unicode": "f2c3", "created": 4.7, "aliases": [ "drivers-license-o" ], "categories": [ "Web Application Icons" ] }, { "name": "Quora", "id": "quora", "unicode": "f2c4", "created": 4.7, "categories": [ "Brand Icons" ] }, { "name": "Free Code Camp", "id": "free-code-camp", "unicode": "f2c5", "created": 4.7, "categories": [ "Brand Icons" ] }, { "name": "Telegram", "id": "telegram", "unicode": "f2c6", "created": 4.7, "categories": [ "Brand Icons" ] }, { "name": "Thermometer Full", "id": "thermometer-full", "unicode": "f2c7", "created": 4.7, "aliases": [ "thermometer-4", "thermometer" ], "categories": [ "Web Application Icons" ] }, { "name": "Thermometer 3/4 Full", "id": "thermometer-three-quarters", "unicode": "f2c8", "created": 4.7, "aliases": [ "thermometer-3" ], "categories": [ "Web Application Icons" ] }, { "name": "Thermometer 1/2 Full", "id": "thermometer-half", "unicode": "f2c9", "created": 4.7, "aliases": [ "thermometer-2" ], "categories": [ "Web Application Icons" ] }, { "name": "Thermometer 1/4 Full", "id": "thermometer-quarter", "unicode": "f2ca", "created": 4.7, "aliases": [ "thermometer-1" ], "categories": [ "Web Application Icons" ] }, { "name": "Thermometer Empty", "id": "thermometer-empty", "unicode": "f2cb", "created": 4.7, "aliases": [ "thermometer-0" ], "categories": [ "Web Application Icons" ] }, { "name": "Shower", "id": "shower", "unicode": "f2cc", "created": 4.7, "categories": [ "Web Application Icons" ] }, { "name": "Bath", "id": "bath", "unicode": "f2cd", "created": 4.7, "aliases": [ "bathtub", "s15" ], "categories": [ "Web Application Icons" ] }, { "name": "Podcast", "id": "podcast", "unicode": "f2ce", "created": 4.7, "categories": [ "Web Application Icons" ] }, { "name": "Window Maximize", "id": "window-maximize", "unicode": "f2d0", "created": 4.7, "categories": [ "Web Application Icons" ] }, { "name": "Window Minimize", "id": "window-minimize", "unicode": "f2d1", "created": 4.7, "categories": [ "Web Application Icons" ] }, { "name": "Window Restore", "id": "window-restore", "unicode": "f2d2", "created": 4.7, "categories": [ "Web Application Icons" ] }, { "name": "Window Close", "id": "window-close", "unicode": "f2d3", "created": 4.7, "aliases": [ "times-rectangle" ], "categories": [ "Web Application Icons" ] }, { "name": "Window Close Outline", "id": "window-close-o", "unicode": "f2d4", "created": 4.7, "aliases": [ "times-rectangle-o" ], "categories": [ "Web Application Icons" ] }, { "name": "Bandcamp", "id": "bandcamp", "unicode": "f2d5", "created": 4.7, "categories": [ "Brand Icons" ] }, { "name": "Grav", "id": "grav", "unicode": "f2d6", "created": 4.7, "categories": [ "Brand Icons" ] }, { "name": "Etsy", "id": "etsy", "unicode": "f2d7", "created": 4.7, "categories": [ "Brand Icons" ] }, { "name": "IMDB", "id": "imdb", "unicode": "f2d8", "created": 4.7, "categories": [ "Brand Icons" ] }, { "name": "Ravelry", "id": "ravelry", "unicode": "f2d9", "created": 4.7, "categories": [ "Brand Icons" ] }, { "name": "Eercast", "id": "eercast", "unicode": "f2da", "created": 4.7, "url": "eercast.com", "categories": [ "Brand Icons" ] }, { "name": "Microchip", "id": "microchip", "unicode": "f2db", "created": 4.7, "categories": [ "Web Application Icons" ] }, { "name": "Snowflake Outlined", "id": "snowflake-o", "unicode": "f2dc", "created": 4.7, "categories": [ "Web Application Icons" ] }, { "name": "Superpowers", "id": "superpowers", "unicode": "f2dd", "created": 4.7, "url": "superpowers.io", "categories": [ "Brand Icons" ] }, { "name": "WPExplorer", "id": "wpexplorer", "unicode": "f2de", "created": 4.7, "url": "wpexplorer.com", "categories": [ "Brand Icons" ] }, { "name": "Meetup", "id": "meetup", "unicode": "f2e0", "created": 4.7, "categories": [ "Brand Icons" ] } ] } PK[;)gfield-fontawesome/composer.jsonnu[{ "name": "kirki-framework/field-fontawesome", "type": "library", "description": "Font-Awesome field for the Kirki Customizer framework.", "keywords": [ "wordpress", "customizer", "framework" ], "homepage": "https://kirki.org/", "license": "MIT", "authors": [ { "name": "Kirki Framework", "email": "connect@mapsteps.com" } ], "require": { "php": ">=7.0", "kirki-framework/url-getter": "*", "kirki-framework/control-select": "*" }, "autoload": { "psr-4": { "Kirki\\Field\\": "src/Field" } } } PK[_EEfield-fontawesome/LICENSEnu[MIT License Copyright (c) 2019 kirki-framework Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. PK[GҞ8 8 control-slider/dist/control.jsnu[(()=>{"use strict";const t=React,e=function(e){var n=e.control,o=e.customizerSetting,a=e.choices,i="";n.updateComponentState=function(t){"slider"===i?s.current.textContent=t:"input"===i?l.current.value=t:"reset"===i&&(s.current.textContent=t,l.current.value=t)};var r="kirki-control-input-".concat(o.id),c=""!==e.value?e.value:0,l=(0,t.useRef)(null),s=(0,t.useRef)(null);return React.createElement("div",{className:"kirki-control-form",tabIndex:"1"},React.createElement("label",{className:"kirki-control-label",htmlFor:r},React.createElement("span",{className:"customize-control-title"},e.label),React.createElement("span",{className:"customize-control-description description",dangerouslySetInnerHTML:{__html:e.description}})),React.createElement("div",{className:"customize-control-notifications-container",ref:e.setNotificationContainer}),React.createElement("button",{type:"button",className:"kirki-control-reset",onClick:function(t){""!==e.default&&void 0!==e.default?(l.current.value=e.default,s.current.textContent=e.default):""!==e.value?(l.current.value=e.value,s.current.textContent=e.value):(l.current.value=a.min,s.current.textContent=""),i="reset",o.set(l.current.value)}},React.createElement("i",{className:"dashicons dashicons-image-rotate"})),React.createElement("div",{className:"kirki-control-cols"},React.createElement("div",{className:"kirki-control-left-col"},React.createElement("input",{ref:l,type:"range",id:r,defaultValue:c,min:a.min,max:a.max,step:a.step,className:"kirki-control-slider",onChange:function(t){i="range"===t.target.type?"slider":"input";var e=t.target.value;ea.max&&(e=a.max),"input"===i&&(t.target.value=e),o.set(e)}})),React.createElement("div",{className:"kirki-control-right-col"},React.createElement("div",{className:"kirki-control-value",ref:s},c))))};function n(){return n=Object.assign||function(t){for(var e=1;e {\n const { control, customizerSetting, choices } = props;\n\n let trigger = \"\";\n\n control.updateComponentState = (val) => {\n if (\"slider\" === trigger) {\n valueRef.current.textContent = val;\n } else if (\"input\" === trigger) {\n sliderRef.current.value = val;\n } else if (\"reset\" === trigger) {\n valueRef.current.textContent = val;\n sliderRef.current.value = val;\n }\n };\n\n const handleChange = (e) => {\n trigger = \"range\" === e.target.type ? \"slider\" : \"input\";\n\n let value = e.target.value;\n\n if (value < choices.min) value = choices.min;\n\n if (value > choices.max) value = choices.max;\n\n if (\"input\" === trigger) e.target.value = value;\n customizerSetting.set(value);\n };\n\n const handleReset = (e) => {\n if (\"\" !== props.default && \"undefined\" !== typeof props.default) {\n sliderRef.current.value = props.default;\n valueRef.current.textContent = props.default;\n } else {\n if (\"\" !== props.value) {\n sliderRef.current.value = props.value;\n valueRef.current.textContent = props.value;\n } else {\n sliderRef.current.value = choices.min;\n valueRef.current.textContent = \"\";\n }\n }\n\n trigger = \"reset\";\n customizerSetting.set(sliderRef.current.value);\n };\n\n // Preparing for the template.\n const fieldId = `kirki-control-input-${customizerSetting.id}`;\n const value = \"\" !== props.value ? props.value : 0;\n\n const sliderRef = useRef(null);\n const valueRef = useRef(null);\n\n return (\n
\n \n\n
\n\n \n \n \n\n
\n
\n \n
\n
\n
\n {value}\n
\n
\n
\n \n );\n};\n\nexport default KirkiSliderForm;\n","import KirkiSliderForm from './KirkiSliderForm';\r\n\r\n/**\r\n * KirkiSliderControl.\r\n *\r\n * Global objects brought:\r\n * - wp\r\n * - jQuery\r\n * - React\r\n * - ReactDOM\r\n *\r\n * @class\r\n * @augments wp.customize.Control\r\n * @augments wp.customize.Class\r\n */\r\nconst KirkiSliderControl = wp.customize.Control.extend({\r\n\r\n\t/**\r\n\t * Initialize.\r\n\t *\r\n\t * @param {string} id - Control ID.\r\n\t * @param {object} params - Control params.\r\n\t */\r\n\tinitialize: function (id, params) {\r\n\t\tconst control = this;\r\n\r\n\t\t// Bind functions to this control context for passing as React props.\r\n\t\tcontrol.setNotificationContainer = control.setNotificationContainer.bind(control);\r\n\r\n\t\twp.customize.Control.prototype.initialize.call(control, id, params);\r\n\r\n\t\t// The following should be eliminated with .\r\n\t\tfunction onRemoved(removedControl) {\r\n\t\t\tif (control === removedControl) {\r\n\t\t\t\tcontrol.destroy();\r\n\t\t\t\tcontrol.container.remove();\r\n\t\t\t\twp.customize.control.unbind('removed', onRemoved);\r\n\t\t\t}\r\n\t\t}\r\n\t\twp.customize.control.bind('removed', onRemoved);\r\n\t},\r\n\r\n\t/**\r\n\t * Set notification container and render.\r\n\t *\r\n\t * This is called when the React component is mounted.\r\n\t *\r\n\t * @param {Element} element - Notification container.\r\n\t * @returns {void}\r\n\t */\r\n\tsetNotificationContainer: function setNotificationContainer(element) {\r\n\t\tconst control = this;\r\n\r\n\t\tcontrol.notifications.container = jQuery(element);\r\n\t\tcontrol.notifications.render();\r\n\t},\r\n\r\n\t/**\r\n\t * Render the control into the DOM.\r\n\t *\r\n\t * This is called from the Control#embed() method in the parent class.\r\n\t *\r\n\t * @returns {void}\r\n\t */\r\n\trenderContent: function renderContent() {\r\n\t\tconst control = this;\r\n\r\n\t\tReactDOM.render(\r\n\t\t\t,\r\n\t\t\tcontrol.container[0]\r\n\t\t);\r\n\r\n\t\tif (false !== control.params.choices.allowCollapse) {\r\n\t\t\tcontrol.container.addClass('allowCollapse');\r\n\t\t}\r\n\t},\r\n\r\n\t/**\r\n\t * After control has been first rendered, start re-rendering when setting changes.\r\n\t *\r\n\t * React is able to be used here instead of the wp.customize.Element abstraction.\r\n\t *\r\n\t * @returns {void}\r\n\t */\r\n\tready: function ready() {\r\n\t\tconst control = this;\r\n\r\n\t\t/**\r\n\t\t * Update component value's state when customizer setting's value is changed.\r\n\t\t */\r\n\t\tcontrol.setting.bind((val) => {\r\n\t\t\tcontrol.updateComponentState(val);\r\n\t\t});\r\n\t},\r\n\r\n\t/**\r\n\t * This method will be overriden by the rendered component.\r\n\t */\r\n\tupdateComponentState: (val) => { },\r\n\r\n\t/**\r\n\t * Handle removal/de-registration of the control.\r\n\t *\r\n\t * This is essentially the inverse of the Control#embed() method.\r\n\t *\r\n\t * @link https://core.trac.wordpress.org/ticket/31334\r\n\t * @returns {void}\r\n\t */\r\n\tdestroy: function destroy() {\r\n\t\tconst control = this;\r\n\r\n\t\t// Garbage collection: undo mounting that was done in the embed/renderContent method.\r\n\t\tReactDOM.unmountComponentAtNode(control.container[0]);\r\n\r\n\t\t// Call destroy method in parent if it exists (as of #31334).\r\n\t\tif (wp.customize.Control.prototype.destroy) {\r\n\t\t\twp.customize.Control.prototype.destroy.call(control);\r\n\t\t}\r\n\t}\r\n});\r\n\r\nexport default KirkiSliderControl;\r\n","import \"./control.scss\";\r\nimport KirkiSliderControl from './KirkiSliderControl';\r\n\r\n\r\n// Register control type with Customizer.\r\nwp.customize.controlConstructor['kirki-slider'] = KirkiSliderControl;\r\n"],"names":["React","props","control","customizerSetting","choices","trigger","updateComponentState","val","valueRef","current","textContent","sliderRef","value","fieldId","id","useRef","className","tabIndex","htmlFor","label","dangerouslySetInnerHTML","__html","description","ref","setNotificationContainer","type","onClick","e","min","set","defaultValue","max","step","onChange","target","wp","customize","Control","extend","initialize","params","this","bind","prototype","call","onRemoved","removedControl","destroy","container","remove","unbind","element","notifications","jQuery","render","renderContent","ReactDOM","setting","setNotificationCotainer","allowCollapse","addClass","ready","unmountComponentAtNode","controlConstructor","KirkiSliderControl"],"sourceRoot":""}PK[5>#control-slider/dist/control.css.mapnu[{"version":3,"file":"./control.css","mappings":"AAEE,qDACE,kBACA,cAGF,+DACE,mBAGF,oDACE,kBACA,mBAGE,+EACE,UAKN,qDACE,aACA,mBACA,uBACA,QACA,YACA,kBACA,UACA,WACA,YACA,cACA,6BACA,kBACA,eACA,UACA,eACA,mBACA,UAGA,2DACE,UAIJ,6DACE,UACA,yBAGF,uDACE,eACA,WACA,YACA,wBACA,yBAGF,oDACE,aACA,mBACA,8BAGF,wDACE,UACA,mBAGF,yDACE,UACA,iBAGF,qDACE,eACA,kBACA,yBACA,kBACA,kBACA,UAGF,sDACE,kBACA,SACA,UACA,SACA,WACA,WACA,oBACA,yBACA,aACA,wBAGF,4EACE,wBACA,gBACA,WACA,YACA,kBACA,yBACA,eACA,sBACA,gBACA,uGAEA,+FAIF,oKAEE,yBAGF,mFACE,yBAGF,wEACE,WACA,YACA,SACA,kBACA,yBACA,eACA,sBACA,gBACA,oGAEA,+FAIF,4JAEE,yBAGF,mDACE,yBACA,SAGF,gHAEE,S","sources":["webpack://control-range-slider/./src/control.scss"],"sourcesContent":["// Range slider control.\r\n.customize-control-kirki-slider {\r\n .kirki-control-label {\r\n position: relative;\r\n display: block;\r\n }\r\n\r\n .customize-control-description {\r\n padding-right: 30px;\r\n }\r\n\r\n .kirki-control-form {\r\n position: relative;\r\n margin-bottom: 12px;\r\n\r\n &:hover {\r\n .kirki-control-reset {\r\n opacity: 1;\r\n }\r\n }\r\n }\r\n\r\n .kirki-control-reset {\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n right: 0;\r\n bottom: 22px;\r\n position: absolute;\r\n padding: 0;\r\n width: 16px;\r\n height: 16px;\r\n color: #50575e;\r\n background-color: transparent;\r\n border-radius: 50%;\r\n border-width: 0;\r\n opacity: 0;\r\n cursor: pointer;\r\n transition: all 0.3s;\r\n z-index: 3;\r\n\r\n // a11y: support tab focus.\r\n &:focus {\r\n opacity: 1;\r\n }\r\n }\r\n\r\n .kirki-control-reset:hover i {\r\n color: #f00;\r\n transform: rotate(-45deg);\r\n }\r\n\r\n .kirki-control-reset i {\r\n font-size: 12px;\r\n width: auto;\r\n height: auto;\r\n transform: rotate(45deg);\r\n transition: transform 0.3s;\r\n }\r\n\r\n .kirki-control-cols {\r\n display: flex;\r\n align-items: center;\r\n justify-content: space-between;\r\n }\r\n\r\n .kirki-control-left-col {\r\n width: 90%;\r\n padding-right: 13px;\r\n }\r\n\r\n .kirki-control-right-col {\r\n width: 10%;\r\n text-align: right;\r\n }\r\n\r\n .kirki-control-input {\r\n font-size: 12px;\r\n text-align: center;\r\n background-color: #f7f7f7;\r\n border-color: #bbb;\r\n border-radius: 4px;\r\n z-index: 2;\r\n }\r\n\r\n .kirki-control-slider {\r\n position: relative;\r\n top: -1px;\r\n padding: 0;\r\n margin: 0;\r\n width: 100%;\r\n height: 5px;\r\n border-radius: 2.5px;\r\n background-color: #bdc3c7;\r\n outline: none;\r\n -webkit-appearance: none;\r\n }\r\n\r\n .kirki-control-slider::-webkit-slider-thumb {\r\n -webkit-appearance: none;\r\n appearance: none;\r\n width: 16px;\r\n height: 16px;\r\n border-radius: 50%;\r\n background-color: #f0f0f0;\r\n cursor: pointer;\r\n border: 1px solid #999;\r\n box-shadow: none;\r\n -webkit-transition: background-color 0.15s ease-in-out,\r\n box-shadow 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;\r\n transition: background-color 0.15s ease-in-out,\r\n box-shadow 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;\r\n }\r\n\r\n .kirki-control-slider::-webkit-slider-thumb:hover,\r\n .kirki-control-slider::-webkit-slider-thumb:focus {\r\n background-color: #e7e7e7;\r\n }\r\n\r\n .kirki-control-slider:active::-webkit-slider-thumb {\r\n background-color: #e7e7e7;\r\n }\r\n\r\n .kirki-control-slider::-moz-range-thumb {\r\n width: 16px;\r\n height: 16px;\r\n border: 0;\r\n border-radius: 50%;\r\n background-color: #f0f0f0;\r\n cursor: pointer;\r\n border: 1px solid #999;\r\n box-shadow: none;\r\n -moz-transition: background-color 0.15s ease-in-out,\r\n box-shadow 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;\r\n transition: background-color 0.15s ease-in-out,\r\n box-shadow 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;\r\n }\r\n\r\n .kirki-control-slider::-moz-range-thumb:hover,\r\n .kirki-control-slider::-moz-range-thumb:focus {\r\n background-color: #e7e7e7;\r\n }\r\n\r\n ::-moz-range-track {\r\n background-color: #bdc3c7;\r\n border: 0;\r\n }\r\n\r\n input::-moz-focus-inner,\r\n input::-moz-focus-outer {\r\n border: 0;\r\n }\r\n}\r\n"],"names":[],"sourceRoot":""}PK[$*Z688#control-slider/src/Field/Slider.phpnu[args['settings'] ) { $args = parent::filter_setting_args( $args, $wp_customize ); // Set the sanitize_callback if none is defined. if ( ! isset( $args['sanitize_callback'] ) || ! $args['sanitize_callback'] ) { $args['sanitize_callback'] = function ( $value ) { return filter_var( $value, FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION ); }; } } return $args; } /** * Filter arguments before creating the control. * * @param array $args The field arguments. * @param \WP_Customize_Manager $wp_customize The customizer instance. * * @return array $args The maybe-filtered arguments. */ public function filter_control_args( $args, $wp_customize ) { if ( $args['settings'] === $this->args['settings'] ) { $args = parent::filter_control_args( $args, $wp_customize ); $args['type'] = 'kirki-slider'; } return $args; } } PK[ %control-slider/src/Control/Slider.phpnu[json['choices'] = wp_parse_args( $this->json['choices'], [ 'min' => 0, 'max' => 100, 'step' => 1, ] ); if ( isset( $this->json['label'] ) ) { $this->json['label'] = html_entity_decode( $this->json['label'] ); } if ( isset( $this->json['description'] ) ) { $this->json['description'] = html_entity_decode( $this->json['description'] ); } $this->json['choices']['min'] = (float) $this->json['choices']['min']; $this->json['choices']['max'] = (float) $this->json['choices']['max']; $this->json['choices']['step'] = (float) $this->json['choices']['step']; $this->json['value'] = $this->json['value'] < $this->json['choices']['min'] ? $this->json['choices']['min'] : $this->json['value']; $this->json['value'] = $this->json['value'] > $this->json['choices']['max'] ? $this->json['choices']['max'] : $this->json['value']; $this->json['value'] = (float) $this->json['value']; } /** * An Underscore (JS) template for this control's content (but not its container). * * Class variables for this control class are available in the `data` JS object; * export custom variables by overriding WP_Customize_Control::to_json(). * * @see WP_Customize_Control::print_template() * * @since 1.0 */ protected function content_template() {} } PK[Ycontrol-slider/src/control.jsnu[import "./control.scss"; import KirkiSliderControl from './KirkiSliderControl'; // Register control type with Customizer. wp.customize.controlConstructor['kirki-slider'] = KirkiSliderControl; PK[rW %control-slider/src/KirkiSliderForm.jsnu[import { useRef } from "react"; const KirkiSliderForm = (props) => { const { control, customizerSetting, choices } = props; let trigger = ""; control.updateComponentState = (val) => { if ("slider" === trigger) { valueRef.current.textContent = val; } else if ("input" === trigger) { sliderRef.current.value = val; } else if ("reset" === trigger) { valueRef.current.textContent = val; sliderRef.current.value = val; } }; const handleChange = (e) => { trigger = "range" === e.target.type ? "slider" : "input"; let value = e.target.value; if (value < choices.min) value = choices.min; if (value > choices.max) value = choices.max; if ("input" === trigger) e.target.value = value; customizerSetting.set(value); }; const handleReset = (e) => { if ("" !== props.default && "undefined" !== typeof props.default) { sliderRef.current.value = props.default; valueRef.current.textContent = props.default; } else { if ("" !== props.value) { sliderRef.current.value = props.value; valueRef.current.textContent = props.value; } else { sliderRef.current.value = choices.min; valueRef.current.textContent = ""; } } trigger = "reset"; customizerSetting.set(sliderRef.current.value); }; // Preparing for the template. const fieldId = `kirki-control-input-${customizerSetting.id}`; const value = "" !== props.value ? props.value : 0; const sliderRef = useRef(null); const valueRef = useRef(null); return (
{value}
); }; export default KirkiSliderForm; PK[r (control-slider/src/KirkiSliderControl.jsnu[import KirkiSliderForm from './KirkiSliderForm'; /** * KirkiSliderControl. * * Global objects brought: * - wp * - jQuery * - React * - ReactDOM * * @class * @augments wp.customize.Control * @augments wp.customize.Class */ const KirkiSliderControl = wp.customize.Control.extend({ /** * Initialize. * * @param {string} id - Control ID. * @param {object} params - Control params. */ initialize: function (id, params) { const control = this; // Bind functions to this control context for passing as React props. control.setNotificationContainer = control.setNotificationContainer.bind(control); wp.customize.Control.prototype.initialize.call(control, id, params); // The following should be eliminated with . function onRemoved(removedControl) { if (control === removedControl) { control.destroy(); control.container.remove(); wp.customize.control.unbind('removed', onRemoved); } } wp.customize.control.bind('removed', onRemoved); }, /** * Set notification container and render. * * This is called when the React component is mounted. * * @param {Element} element - Notification container. * @returns {void} */ setNotificationContainer: function setNotificationContainer(element) { const control = this; control.notifications.container = jQuery(element); control.notifications.render(); }, /** * Render the control into the DOM. * * This is called from the Control#embed() method in the parent class. * * @returns {void} */ renderContent: function renderContent() { const control = this; ReactDOM.render( , control.container[0] ); if (false !== control.params.choices.allowCollapse) { control.container.addClass('allowCollapse'); } }, /** * After control has been first rendered, start re-rendering when setting changes. * * React is able to be used here instead of the wp.customize.Element abstraction. * * @returns {void} */ ready: function ready() { const control = this; /** * Update component value's state when customizer setting's value is changed. */ control.setting.bind((val) => { control.updateComponentState(val); }); }, /** * This method will be overriden by the rendered component. */ updateComponentState: (val) => { }, /** * Handle removal/de-registration of the control. * * This is essentially the inverse of the Control#embed() method. * * @link https://core.trac.wordpress.org/ticket/31334 * @returns {void} */ destroy: function destroy() { const control = this; // Garbage collection: undo mounting that was done in the embed/renderContent method. ReactDOM.unmountComponentAtNode(control.container[0]); // Call destroy method in parent if it exists (as of #31334). if (wp.customize.Control.prototype.destroy) { wp.customize.Control.prototype.destroy.call(control); } } }); export default KirkiSliderControl; PK[OYYcontrol-slider/composer.jsonnu[{ "name": "kirki-framework/control-range-slider", "description": "Range slider control for the Kirki Customizer Framework", "type": "library", "homepage": "https://kirki.org/", "license": "MIT", "autoload": { "psr-4": { "Kirki\\Control\\": "src/Control", "Kirki\\Field\\": "src/Field" } }, "authors": [ { "name": "Kirki Framework", "email": "connect@mapsteps.com" } ], "require": { "php": ">=7.0", "kirki-framework/control-base": "*" } } PK[Q *module-editor-styles/src/Editor_Styles.phpnu[set_configs(); $this->set_enabled(); $this->set_modules_css(); $this->set_google_fonts(); $this->set_modules_webfonts(); $this->add_hooks(); } /** * Add hooks for Gutenberg editor integration. * * @access protected * @since 3.0.35 */ protected function add_hooks() { if ( ! $this->is_disabled() ) { add_action( 'enqueue_block_editor_assets', [ $this->modules_css, 'enqueue_styles' ], 999 ); add_action( 'after_setup_theme', [ $this, 'add_theme_support' ], 999 ); } } /** * Add theme support for editor styles. * * This checks if theme has declared editor-styles support * already, and if not present, declares it. Hooked late. * * @access public * @since 3.0.35 */ public function add_theme_support() { if ( true !== get_theme_support( 'editor-styles' ) ) { add_theme_support( 'editor-styles' ); } } /** * Helper method to check if feature is disabled. * * Feature can be disabled by KIRKI_NO_OUTPUT constant, * gutenbeg_support argument, and disabled output argument. * * @access public * @param array $args An array of arguments. * @since 3.0.35 * * @return bool $disabled Is gutenberg integration feature disabled? */ private function is_disabled( $args = [] ) { if ( defined( 'KIRKI_NO_OUTPUT' ) && true === KIRKI_NO_OUTPUT ) { return true; } /** * We would prefer to use "KIRKI_GUTENBERG_OUTPUT" instead. * For consistency however, we will use "KIRKI_NO_GUTENBERG_OUTPUT". */ if ( defined( 'KIRKI_NO_GUTENBERG_OUTPUT' ) && true === KIRKI_NO_GUTENBERG_OUTPUT ) { return true; } return false; } /** * Set class property for $configs. * * @access private * @since 3.0.35 */ private function set_configs() { $this->configs = Kirki::$config; return $this->configs; } /** * Set class property for $enabled. * * @access private * @since 3.0.35 */ private function set_enabled() { $this->enabled = ! $this->is_disabled(); } /** * Set class property for $modules_css. * * @access private * @since 3.0.35 */ private function set_modules_css() { $this->modules_css = new \Kirki\Module\CSS(); } /** * Set class property for $google_fonts. * * @access private * @since 3.0.35 */ private function set_google_fonts() { $this->google_fonts = \Kirki\Module\Webfonts\Google::get_instance(); } /** * Set class property for $modules_webfonts. * * @access private * @since 3.0.35 */ private function set_modules_webfonts() { $this->modules_webfonts = new \Kirki\Module\Webfonts(); } } PK[ ^,^"module-editor-styles/composer.jsonnu[{ "name": "kirki-framework/module-editor-styles", "type": "library", "description": "Loading Animation Module for the Kirki WordPress plugin.", "keywords": [ "wordpress", "customizer", "framework" ], "homepage": "https://kirki.org/", "license": "MIT", "authors": [ { "name": "Kirki Framework", "email": "connect@mapsteps.com" } ], "require": { "php": ">=7.0", "kirki-framework/util": "*", "kirki-framework/module-css": "*", "kirki-framework/module-webfonts": "*" }, "autoload": { "psr-4": { "Kirki\\Module\\": "src/" } } } PK[ln00module-editor-styles/LICENSEnu[MIT License Copyright (c) 2019 kirki-framework Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. PK[%q(q(%module-postmessage/src/postMessage.jsnu[/* global kirkiPostMessageFields */ /* eslint max-depth: off */ var kirkiPostMessage = { /** * The fields. * * @since 1.0.0 */ fields: {}, /** * A collection of methods for the ' ); } }, /** * Add a '));var i=jQuery(".kirki-tooltip-inline-styles"),o=jQuery(".wp-full-overlay-sidebar-content");n.forEach((function(t){wp.customize.section(t,(function(t){t.expanded.bind((function(n){n&&(t.contentContainer[0].scrollHeight>o.height()?i.html(".kirki-tooltip-wrapper span.tooltip-content {min-width: 258px;}"):i.empty())}))}))}))}))}(); //# sourceMappingURL=control.js.map PK[V module-tooltips/dist/control.cssnu[.kirki-tooltip-wrapper{position:relative;z-index:5}.kirki-tooltip-wrapper .tooltip-trigger{left:3px;position:relative;text-decoration:none;top:0}.kirki-tooltip-wrapper .tooltip-trigger:hover+.tooltip-content{bottom:32px;opacity:1;visibility:visible;z-index:99999}.kirki-tooltip-wrapper .tooltip-trigger .dashicons{font-size:18px;height:18px;width:18px}.kirki-tooltip-wrapper .tooltip-content{background:#000;border-radius:3px;bottom:29px;color:#fff;font-size:13px;height:fit-content;left:0;line-height:1.4em;min-width:275px;opacity:0;padding:7px;position:absolute;transition:all .2s linear;visibility:hidden;width:100%;z-index:-1}.kirki-tooltip-wrapper .tooltip-content a{color:#00a0d2} /*# sourceMappingURL=control.css.map */ PK[/5``#module-tooltips/dist/control.js.mapnu[{"mappings":"YAE0B,SACjBA,EAAiBC,GACzBC,EAAEC,KAAMC,eAAe,SAAWC,GACjC,GAAKA,EAAQC,KAAOL,EAAQK,KAIvBL,EAAQM,UAAUC,KAAM,oBAAqBC,OAAlD,CAEA,IAAMC,EAASC,SAASC,cACvB,sBAAwBP,EAAQC,GAAK,6BAGtC,GAAOI,EAAP,CACAA,EAAOG,UAAUC,IAAK,yBAGtB,IAIMC,EACL,iCAAmCV,EAAQU,QAAU,UAEhDC,EAAUC,OAAQP,GAGxBO,OATC,8FASiBC,SAAUF,GAC5BC,OAAQF,GAAUG,SAAUF,QAI9BC,OAAQN,UAAWQ,OAAO,WACzB,IAAIC,EAAe,GAEnBC,GAAGC,UAAUrB,QAAQE,MAAM,SAAWF,GAC9BmB,EAAaG,SAAUtB,EAAQuB,YACrCJ,EAAaK,KAAMxB,EAAQuB,WAG5BH,GAAGC,UAAUE,QAASvB,EAAQuB,WAAW,SAAWA,GAElDA,EAAQE,YACRL,GAAGC,UAAUK,SAASC,UAAU3B,UAAYA,EAAQK,GAEpDN,EAAiBC,GAEjBuB,EAAQE,SAASG,MAAM,SAAWH,GAC5BA,GACJ1B,EAAiBC,YAOtBgB,OAAQ,QAASa,OAChBb,OAAQ,wDAGT,IAAMc,EAAkBd,OAAQ,gCAC1Be,EAAkBf,OAAQ,oCAEhCG,EAAaa,SAAS,SAAWC,GAChCb,GAAGC,UAAUE,QAASU,GAAa,SAAWV,GAC7CA,EAAQE,SAASG,MAAM,SAAWH,GAC5BA,IAEHF,EAAQW,iBAAiB,GAAGC,aAC5BJ,EAAgBK,SAEhBN,EAAgBO,KACf,mEAGDP,EAAgBQ","sources":["packages/kirki-framework/module-tooltips/src/control.js"],"sourcesContent":["import './control.scss';\n\n/* global kirkiTooltips */\nfunction kirkiTooltipAdd( control ) {\n\t_.each( kirkiTooltips, function ( tooltip ) {\n\t\tif ( tooltip.id !== control.id ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( control.container.find( '.tooltip-content' ).length ) return;\n\n\t\tconst target = document.querySelector(\n\t\t\t'#customize-control-' + tooltip.id + ' .customize-control-title'\n\t\t);\n\n\t\tif ( ! target ) return;\n\t\ttarget.classList.add( 'kirki-tooltip-wrapper' );\n\n\t\t// Build the tooltip trigger.\n\t\tconst trigger =\n\t\t\t'';\n\n\t\t// Build the tooltip content.\n\t\tconst content =\n\t\t\t'' + tooltip.content + '';\n\n\t\tconst $target = jQuery( target );\n\n\t\t// Append the trigger & content next to the control's title.\n\t\tjQuery( trigger ).appendTo( $target );\n\t\tjQuery( content ).appendTo( $target );\n\t} );\n}\n\njQuery( document ).ready( function () {\n\tlet sectionNames = [];\n\n\twp.customize.control.each( function ( control ) {\n\t\tif ( ! sectionNames.includes( control.section() ) ) {\n\t\t\tsectionNames.push( control.section() );\n\t\t}\n\n\t\twp.customize.section( control.section(), function ( section ) {\n\t\t\tif (\n\t\t\t\tsection.expanded() ||\n\t\t\t\twp.customize.settings.autofocus.control === control.id\n\t\t\t) {\n\t\t\t\tkirkiTooltipAdd( control );\n\t\t\t} else {\n\t\t\t\tsection.expanded.bind( function ( expanded ) {\n\t\t\t\t\tif ( expanded ) {\n\t\t\t\t\t\tkirkiTooltipAdd( control );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\t} );\n\n\tjQuery( 'head' ).append(\n\t\tjQuery( '' )\n\t);\n\n\tconst $tooltipStyleEl = jQuery( '.kirki-tooltip-inline-styles' );\n\tconst $sidebarOverlay = jQuery( '.wp-full-overlay-sidebar-content' );\n\n\tsectionNames.forEach( function ( sectionName ) {\n\t\twp.customize.section( sectionName, function ( section ) {\n\t\t\tsection.expanded.bind( function ( expanded ) {\n\t\t\t\tif ( expanded ) {\n\t\t\t\t\tif (\n\t\t\t\t\t\tsection.contentContainer[0].scrollHeight >\n\t\t\t\t\t\t$sidebarOverlay.height()\n\t\t\t\t\t) {\n\t\t\t\t\t\t$tooltipStyleEl.html(\n\t\t\t\t\t\t\t'.kirki-tooltip-wrapper span.tooltip-content {min-width: 258px;}'\n\t\t\t\t\t\t);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$tooltipStyleEl.empty();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t} );\n} );\n"],"names":["$1a3e97217cc9f59a$var$kirkiTooltipAdd","control","_","each","kirkiTooltips","tooltip","id","container","find","length","target","document","querySelector","classList","add","content","$target","jQuery","appendTo","ready","sectionNames","wp","customize","includes","section","push","expanded","settings","autofocus","bind","append","$tooltipStyleEl","$sidebarOverlay","forEach","sectionName","contentContainer","scrollHeight","height","html","empty"],"version":3,"file":"control.js.map"}PK[< $module-tooltips/dist/control.css.mapnu[{"mappings":"AAAA,uBACC,iBAAA,CACA,SCCD,CDCC,wCAGC,QAAA,CAFA,iBAAA,CAGA,oBAAA,CAFA,KCGF,CDEG,+DACC,WAAA,CACA,SAAA,CACA,kBAAA,CACA,aCAJ,CDIE,mDACC,cAAA,CAEA,WAAA,CADA,UCDH,CDMC,wCAWC,eAAA,CACA,iBAAA,CAVA,WAAA,CAOA,UAAA,CADA,cAAA,CADA,kBAAA,CAJA,MAAA,CAOA,iBAAA,CALA,eAAA,CAQA,SAAA,CATA,WAAA,CAHA,iBAAA,CAeA,yBAAA,CAFA,iBAAA,CARA,UAAA,CASA,UCHF,CDmBE,0CACC,aCjBH","sources":["packages/kirki-framework/module-tooltips/src/control.scss","%3Cinput%20css%20gZwkcc%3E"],"sourcesContent":[".kirki-tooltip-wrapper {\n\tposition: relative;\n\tz-index: 5; // 2 is enough, but.. just to be safe.\n\n\t.tooltip-trigger {\n\t\tposition: relative;\n\t\ttop: 0;\n\t\tleft: 3px;\n\t\ttext-decoration: none;\n\n\t\t&:hover {\n\t\t\t+ .tooltip-content {\n\t\t\t\tbottom: 32px;\n\t\t\t\topacity: 1;\n\t\t\t\tvisibility: visible;\n\t\t\t\tz-index: 99999;\n\t\t\t}\n\t\t}\n\n\t\t.dashicons {\n\t\t\tfont-size: 18px;\n\t\t\twidth: 18px;\n\t\t\theight: 18px;\n\t\t}\n\t}\n\n\t.tooltip-content {\n\t\tposition: absolute;\n\t\tbottom: 29px;\n\t\tleft: 0;\n\t\tpadding: 7px;\n\t\tmin-width: 275px;\n\t\twidth: 100%;\n\t\theight: fit-content;\n\t\tfont-size: 13px;\n\t\tcolor: #fff;\n\t\tline-height: 1.4em;\n\t\tbackground: #000;\n\t\tborder-radius: 3px;\n\t\topacity: 0;\n\t\tvisibility: hidden;\n\t\tz-index: -1;\n\t\ttransition: all 0.2s linear;\n\n\t\t/// We might want to bring it back in the future.\n\t\t// &::before {\n\t\t// \tcontent: '';\n\t\t// \tposition: absolute;\n\t\t// \tbottom: -6px;\n\t\t// \tdisplay: block;\n\t\t// \twidth: 0;\n\t\t// \theight: 0;\n\t\t// \tborder-left: 10px solid transparent;\n\t\t// \tborder-right: 10px solid transparent;\n\t\t// \tborder-top: 10px solid #000;\n\t\t// }\n\n\t\ta {\n\t\t\tcolor: #00a0d2;\n\t\t}\n\t}\n}\n\n/*# sourceMappingURL=tooltip.css.map */\n",".kirki-tooltip-wrapper {\n position: relative;\n z-index: 5;\n}\n.kirki-tooltip-wrapper .tooltip-trigger {\n position: relative;\n top: 0;\n left: 3px;\n text-decoration: none;\n}\n.kirki-tooltip-wrapper .tooltip-trigger:hover + .tooltip-content {\n bottom: 32px;\n opacity: 1;\n visibility: visible;\n z-index: 99999;\n}\n.kirki-tooltip-wrapper .tooltip-trigger .dashicons {\n font-size: 18px;\n width: 18px;\n height: 18px;\n}\n.kirki-tooltip-wrapper .tooltip-content {\n position: absolute;\n bottom: 29px;\n left: 0;\n padding: 7px;\n min-width: 275px;\n width: 100%;\n height: fit-content;\n font-size: 13px;\n color: #fff;\n line-height: 1.4em;\n background: #000;\n border-radius: 3px;\n opacity: 0;\n visibility: hidden;\n z-index: -1;\n transition: all 0.2s linear;\n}\n.kirki-tooltip-wrapper .tooltip-content a {\n color: #00a0d2;\n}\n\n/*# sourceMappingURL=tooltip.css.map */\n/*# sourceMappingURL=control.css.map */\n"],"names":[],"version":3,"file":"control.css.map"}PK[|module-tooltips/src/control.jsnu[import './control.scss'; /* global kirkiTooltips */ function kirkiTooltipAdd( control ) { _.each( kirkiTooltips, function ( tooltip ) { if ( tooltip.id !== control.id ) { return; } if ( control.container.find( '.tooltip-content' ).length ) return; const target = document.querySelector( '#customize-control-' + tooltip.id + ' .customize-control-title' ); if ( ! target ) return; target.classList.add( 'kirki-tooltip-wrapper' ); // Build the tooltip trigger. const trigger = ''; // Build the tooltip content. const content = '' + tooltip.content + ''; const $target = jQuery( target ); // Append the trigger & content next to the control's title. jQuery( trigger ).appendTo( $target ); jQuery( content ).appendTo( $target ); } ); } jQuery( document ).ready( function () { let sectionNames = []; wp.customize.control.each( function ( control ) { if ( ! sectionNames.includes( control.section() ) ) { sectionNames.push( control.section() ); } wp.customize.section( control.section(), function ( section ) { if ( section.expanded() || wp.customize.settings.autofocus.control === control.id ) { kirkiTooltipAdd( control ); } else { section.expanded.bind( function ( expanded ) { if ( expanded ) { kirkiTooltipAdd( control ); } } ); } } ); } ); jQuery( 'head' ).append( jQuery( '' ) ); const $tooltipStyleEl = jQuery( '.kirki-tooltip-inline-styles' ); const $sidebarOverlay = jQuery( '.wp-full-overlay-sidebar-content' ); sectionNames.forEach( function ( sectionName ) { wp.customize.section( sectionName, function ( section ) { section.expanded.bind( function ( expanded ) { if ( expanded ) { if ( section.contentContainer[0].scrollHeight > $sidebarOverlay.height() ) { $tooltipStyleEl.html( '.kirki-tooltip-wrapper span.tooltip-content {min-width: 258px;}' ); } else { $tooltipStyleEl.empty(); } } } ); } ); } ); } ); PK[%bb module-tooltips/src/Tooltips.phpnu[tooltips_content ); } /** * Filter control args. * * @access public * @since 1.0 * @param array $args The field arguments. * @param WP_Customize_Manager $wp_customize The customizer instance. * @return array */ public function filter_control_args( $args, $wp_customize ) { if ( isset( $args['tooltip'] ) && $args['tooltip'] ) { $this->tooltips_content[ $args['settings'] ] = [ 'id' => sanitize_key( $args['settings'] ), 'content' => wp_kses_post( $args['tooltip'] ), ]; } return $args; } } PK[U module-webfonts/src/Webfonts.phpnu[fonts_google = Google::get_instance(); $this->init(); } /** * Init other objects depending on the method we'll be using. * * @access protected * @since 1.0.0 */ protected function init() { foreach ( array_keys( Kirki::$config ) as $config_id ) { if ( 'async' === $this->get_method() ) { new Async( $config_id, $this, $this->fonts_google ); } new Embed( $config_id, $this, $this->fonts_google ); } } /** * Get the method we're going to use. * * @access public * @since 1.0.0 * @deprecated in 3.0.36. * @return string */ public function get_method() { return ( is_customize_preview() || is_admin() ) ? 'async' : 'embed'; } /** * Runs when a field gets added. * Adds fields to this object so we can loop through them. * * @access public * @since 1.0.0 * @param array $args The field args. * @param Object $object The field object. * @return void */ public function field_init( $args, $object ) { if ( ! isset( $args['type'] ) && isset( $object->type ) ) { $args['type'] = $object->type; } if ( ! isset( $args['type'] ) || $args['type'] !== 'kirki-typography' ) { return; } // Use the settings ID as key: self::$fields[ $args['settings'] ] = $args; } /** * Goes through all our fields and then populates the $this->fonts property. * * @access public * @param string $config_id The config-ID. */ public function loop_fields( $config_id ) { foreach ( self::$fields as $field ) { if ( isset( $field['kirki_config'] ) && $config_id !== $field['kirki_config'] ) { continue; } $this->fonts_google->generate_google_font( $field ); } } } PK[[[&module-webfonts/src/Webfonts/Fonts.phpnu[ [ 'label' => 'Serif', 'stack' => 'Georgia,Times,"Times New Roman",serif', ], 'sans-serif' => [ 'label' => 'Sans Serif', 'stack' => '-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif', ], 'monospace' => [ 'label' => 'Monospace', 'stack' => 'Monaco,"Lucida Sans Typewriter","Lucida Typewriter","Courier New",Courier,monospace', ], ]; return apply_filters( 'kirki_fonts_standard_fonts', $standard_fonts ); } /** * Return an array of all available Google Fonts. * * @return array All Google Fonts. */ public static function get_google_fonts() { if ( ! self::$google_fonts ) { $googlefonts = new GoogleFonts(); self::$google_fonts = $googlefonts->get_google_fonts(); } return self::$google_fonts; } /** * Returns an array of all available subsets. * * @static * @access public * @return array */ public static function get_google_font_subsets() { return [ 'cyrillic' => 'Cyrillic', 'cyrillic-ext' => 'Cyrillic Extended', 'devanagari' => 'Devanagari', 'greek' => 'Greek', 'greek-ext' => 'Greek Extended', 'khmer' => 'Khmer', 'latin' => 'Latin', 'latin-ext' => 'Latin Extended', 'vietnamese' => 'Vietnamese', 'hebrew' => 'Hebrew', 'arabic' => 'Arabic', 'bengali' => 'Bengali', 'gujarati' => 'Gujarati', 'tamil' => 'Tamil', 'telugu' => 'Telugu', 'thai' => 'Thai', ]; } /** * Dummy function to avoid issues with backwards-compatibility. * This is not functional, but it will prevent PHP Fatal errors. * * @static * @access public */ public static function get_google_font_uri() {} /** * Returns an array of all available variants. * * @static * @access public * @return array */ public static function get_all_variants() { return [ '100' => esc_html__( 'Ultra-Light 100', 'kirki' ), '100light' => esc_html__( 'Ultra-Light 100', 'kirki' ), '100italic' => esc_html__( 'Ultra-Light 100 Italic', 'kirki' ), '200' => esc_html__( 'Light 200', 'kirki' ), '200italic' => esc_html__( 'Light 200 Italic', 'kirki' ), '300' => esc_html__( 'Book 300', 'kirki' ), '300italic' => esc_html__( 'Book 300 Italic', 'kirki' ), '400' => esc_html__( 'Normal 400', 'kirki' ), 'regular' => esc_html__( 'Normal 400', 'kirki' ), 'italic' => esc_html__( 'Normal 400 Italic', 'kirki' ), '500' => esc_html__( 'Medium 500', 'kirki' ), '500italic' => esc_html__( 'Medium 500 Italic', 'kirki' ), '600' => esc_html__( 'Semi-Bold 600', 'kirki' ), '600bold' => esc_html__( 'Semi-Bold 600', 'kirki' ), '600italic' => esc_html__( 'Semi-Bold 600 Italic', 'kirki' ), '700' => esc_html__( 'Bold 700', 'kirki' ), '700italic' => esc_html__( 'Bold 700 Italic', 'kirki' ), '800' => esc_html__( 'Extra-Bold 800', 'kirki' ), '800bold' => esc_html__( 'Extra-Bold 800', 'kirki' ), '800italic' => esc_html__( 'Extra-Bold 800 Italic', 'kirki' ), '900' => esc_html__( 'Ultra-Bold 900', 'kirki' ), '900bold' => esc_html__( 'Ultra-Bold 900', 'kirki' ), '900italic' => esc_html__( 'Ultra-Bold 900 Italic', 'kirki' ), ]; } /** * Determine if a font-name is a valid google font or not. * * @static * @access public * @param string $fontname The name of the font we want to check. * @return bool */ public static function is_google_font( $fontname ) { if ( is_string( $fontname ) ) { $fonts = self::get_google_fonts(); return isset( $fonts[ $fontname ] ); } return false; } /** * Gets available options for a font. * * @static * @access public * @return array */ public static function get_font_choices() { $fonts = self::get_all_fonts(); $keys = array_keys( $fonts ); return array_combine( $keys, $keys ); } } PK[h#U'module-webfonts/src/Webfonts/Google.phpnu[google_fonts = Fonts::get_google_fonts(); } /** * Get the one, true instance of this class. * Prevents performance issues since this is only loaded once. * * @return object Google */ public static function get_instance() { if ( null === self::$instance ) { self::$instance = new self(); } return self::$instance; } /** * Processes the arguments of a field * determines if it's a typography field * and if it is, then takes appropriate actions. * * @param array $args The field arguments. */ public function generate_google_font( $args ) { // Process typography fields. $process = ( ( isset( $args['type'] ) && 'kirki-typography' === $args['type'] ) || ( isset( $args['choices'] ) && isset( $args['choices']['parent_type'] ) && 'kirki-typography' === $args['choices']['parent_type'] ) ); if ( apply_filters( 'kirki_generate_google_font', $process, $args ) ) { // Get the value. $option_type = ( isset( $args['option_type'] ) ) ? $args['option_type'] : 'theme_mod'; $default = ( isset( $args['default'] ) ) ? $args['default'] : ''; $value = apply_filters( 'kirki_get_value', get_theme_mod( $args['settings'], $default ), $args['settings'], $default, $option_type ); // If we don't have a font-family then we can skip this. if ( ! isset( $value['font-family'] ) || in_array( $value['font-family'], $this->hosted_fonts, true ) ) { return; } // If not a google-font, then we can skip this. if ( ! isset( $value['font-family'] ) || ! Fonts::is_google_font( $value['font-family'] ) ) { return; } // Set a default value for variants. if ( ! isset( $value['variant'] ) ) { $value['variant'] = 'regular'; } // Add the requested google-font. if ( ! is_array( $value ) || ! isset( $value['font-family'] ) || ! isset( $this->fonts[ $value['font-family'] ] ) ) { $this->fonts[ $value['font-family'] ] = []; } if ( ! in_array( $value['variant'], $this->fonts[ $value['font-family'] ], true ) ) { $this->fonts[ $value['font-family'] ][] = $value['variant']; } // Are we force-loading all variants? if ( true === self::$force_load_all_variants ) { $all_variants = Fonts::get_all_variants(); $args['choices']['variant'] = array_keys( $all_variants ); } if ( ! empty( $args['choices']['variant'] ) && is_array( $args['choices']['variant'] ) ) { foreach ( $args['choices']['variant'] as $extra_variant ) { $this->fonts[ $value['font-family'] ][] = $extra_variant; } } return; } // Process non-typography fields. if ( isset( $args['output'] ) && is_array( $args['output'] ) ) { foreach ( $args['output'] as $output ) { // If we don't have a typography-related output argument we can skip this. if ( ! isset( $output['property'] ) || ! in_array( $output['property'], [ 'font-family', 'font-weight' ], true ) ) { continue; } // Get the value. $option_type = ( isset( $args['option_type'] ) ) ? $args['option_type'] : 'theme_mod'; $default = ( isset( $args['default'] ) ) ? $args['default'] : ''; $value = apply_filters( 'kirki_get_value', get_theme_mod( $args['settings'], $default ), $args['settings'], $default, $option_type ); if ( is_string( $value ) ) { if ( 'font-family' === $output['property'] ) { if ( ! array_key_exists( $value, $this->fonts ) ) { $this->fonts[ $value ] = []; } } elseif ( 'font-weight' === $output['property'] ) { foreach ( $this->fonts as $font => $variants ) { if ( ! in_array( $value, $variants, true ) ) { $this->fonts[ $font ][] = $value; } } } } } } } /** * Determines the vbalidity of the selected font as well as its properties. * This is vital to make sure that the google-font script that we'll generate later * does not contain any invalid options. */ public function process_fonts() { // Early exit if font-family is empty. if ( empty( $this->fonts ) ) { return; } foreach ( $this->fonts as $font => $variants ) { // Determine if this is indeed a google font or not. // If it's not, then just remove it from the array. if ( ! array_key_exists( $font, $this->google_fonts ) ) { unset( $this->fonts[ $font ] ); continue; } // Get all valid font variants for this font. $font_variants = []; if ( isset( $this->google_fonts[ $font ]['variants'] ) ) { $font_variants = $this->google_fonts[ $font ]['variants']; } foreach ( $variants as $variant ) { // If this is not a valid variant for this font-family // then unset it and move on to the next one. if ( ! in_array( strval( $variant ), $font_variants, true ) ) { $variant_key = array_search( $variant, $this->fonts[ $font ], true ); unset( $this->fonts[ $font ][ $variant_key ] ); continue; } } } } /** * Get the standard fonts JSON. * * @since 1.0.0 * @return void */ public function get_standardfonts_json() { echo wp_json_encode( Fonts::get_standard_fonts() ); wp_die(); } } PK[ yp&module-webfonts/src/Webfonts/Embed.phpnu[config_id = $config_id; $this->webfonts = $webfonts; $this->googlefonts = $googlefonts; add_action( 'wp', [ $this, 'init' ], 9 ); // add_filter( 'wp_resource_hints', [ $this, 'resource_hints' ], 10, 2 ); } /** * Init. * * @access public * @since 1.0.0 * @return void */ public function init() { $this->populate_fonts(); add_action( 'kirki_dynamic_css', [ $this, 'the_css' ] ); } /** * Add preconnect for Google Fonts. * * @access public * @param array $urls URLs to print for resource hints. * @param string $relation_type The relation type the URLs are printed. * @return array $urls URLs to print for resource hints. */ public function resource_hints( $urls, $relation_type ) { $fonts_to_load = $this->googlefonts->fonts; if ( ! empty( $fonts_to_load ) && 'preconnect' === $relation_type ) { $urls[] = [ 'href' => 'https://fonts.gstatic.com', 'crossorigin', ]; } return $urls; } /** * Webfont Loader for Google Fonts. * * @access public * @since 1.0.0 */ public function populate_fonts() { // Go through our fields and populate $this->fonts. $this->webfonts->loop_fields( $this->config_id ); $this->googlefonts->fonts = apply_filters( 'kirki_enqueue_google_fonts', $this->googlefonts->fonts ); // Goes through $this->fonts and adds or removes things as needed. $this->googlefonts->process_fonts(); foreach ( $this->googlefonts->fonts as $font => $weights ) { foreach ( $weights as $key => $value ) { if ( 'italic' === $value ) { $weights[ $key ] = '400i'; } else { $weights[ $key ] = str_replace( [ 'regular', 'bold', 'italic' ], [ '400', '', 'i' ], $value ); } } $this->fonts_to_load[] = [ 'family' => $font, 'weights' => $weights, ]; } } /** * Webfont Loader script for Google Fonts. * * @access public * @since 1.0.0 */ public function the_css() { foreach ( $this->fonts_to_load as $font ) { $family = str_replace( ' ', '+', trim( $font['family'] ) ); $weights = join( ',', $font['weights'] ); $url = "https://fonts.googleapis.com/css?family={$family}:{$weights}&subset=cyrillic,cyrillic-ext,devanagari,greek,greek-ext,khmer,latin,latin-ext,vietnamese,hebrew,arabic,bengali,gujarati,tamil,telugu,thai&display=swap"; $downloader = new Downloader(); $contents = $downloader->get_styles( $url ); if ( $contents ) { /** * Note to code reviewers: * * Though all output should be run through an escaping function, this is pure CSS * and it is added on a call that has a PHP `header( 'Content-type: text/css' );`. * No code, script or anything else can be executed from inside a stylesheet. * For extra security we're using the wp_strip_all_tags() function here * just to make sure there's no row_label['type'] = $args['row_label']['type']; } // Validating row label type. if ( isset( $args['row_label']['value'] ) && ! empty( $args['row_label']['value'] ) ) { $this->row_label['value'] = esc_html( $args['row_label']['value'] ); } // Validating row label field. if ( isset( $args['row_label']['field'] ) && ! empty( $args['row_label']['field'] ) && isset( $args['fields'][ sanitize_key( $args['row_label']['field'] ) ] ) ) { $this->row_label['field'] = esc_html( $args['row_label']['field'] ); } else { // If from field is not set correctly, making sure standard is set as the type. $this->row_label['type'] = 'text'; } } } } PK[/jjcontrol-repeater/src/control.jsnu[import "./control.scss"; /* global kirkiControlLoader */ /* eslint max-depth: 0 */ /* eslint no-useless-escape: 0 */ var RepeaterRow = function (rowIndex, container, label, control) { var self = this; this.rowIndex = rowIndex; this.container = container; this.label = label; this.header = this.container.find(".repeater-row-header"); this.header.on("click", function () { self.toggleMinimize(); }); this.container.on("click", ".repeater-row-remove", function () { self.remove(); }); this.header.on("mousedown", function () { self.container.trigger("row:start-dragging"); }); this.container.on("keyup change", "input, select, textarea", function (e) { self.container.trigger("row:update", [ self.rowIndex, jQuery(e.target).data("field"), e.target, ]); }); this.setRowIndex = function (rowNum) { this.rowIndex = rowNum; this.container.attr("data-row", rowNum); this.container.data("row", rowNum); this.updateLabel(); }; this.toggleMinimize = function () { // Store the previous state. this.container.toggleClass("minimized"); this.header .find(".dashicons") .toggleClass("dashicons-arrow-up") .toggleClass("dashicons-arrow-down"); }; this.remove = function () { this.container.slideUp(300, function () { jQuery(this).detach(); }); this.container.trigger("row:remove", [this.rowIndex]); }; this.updateLabel = function () { var rowLabelField, rowLabel, rowLabelSelector; if ("field" === this.label.type) { rowLabelField = this.container.find( '.repeater-field [data-field="' + this.label.field + '"]' ); if (_.isFunction(rowLabelField.val)) { rowLabel = rowLabelField.val(); if ("" !== rowLabel) { if (!_.isUndefined(control.params.fields[this.label.field])) { if (!_.isUndefined(control.params.fields[this.label.field].type)) { if ("select" === control.params.fields[this.label.field].type) { if ( !_.isUndefined( control.params.fields[this.label.field].choices ) && !_.isUndefined( control.params.fields[this.label.field].choices[ rowLabelField.val() ] ) ) { rowLabel = control.params.fields[this.label.field].choices[ rowLabelField.val() ]; } } else if ( "radio" === control.params.fields[this.label.field].type || "radio-image" === control.params.fields[this.label.field].type ) { rowLabelSelector = control.selector + ' [data-row="' + this.rowIndex + '"] .repeater-field [data-field="' + this.label.field + '"]:checked'; rowLabel = jQuery(rowLabelSelector).val(); } } } this.header.find(".repeater-row-label").text(rowLabel); return; } } } this.header .find(".repeater-row-label") .text(this.label.value + " " + (this.rowIndex + 1)); }; this.updateLabel(); }; wp.customize.controlConstructor.repeater = wp.customize.Control.extend({ // When we're finished loading continue processing ready: function () { var control = this; // Init the control. if ( !_.isUndefined(window.kirkiControlLoader) && _.isFunction(kirkiControlLoader) ) { kirkiControlLoader(control); } else { control.initKirkiControl(); } }, initKirkiControl: function (control) { var limit, theNewRow, settingValue; control = control || this; // The current value set in Control Class (set in Kirki_Customize_Repeater_Control::to_json() function) settingValue = control.params.value; // The hidden field that keeps the data saved (though we never update it) control.settingField = control.container .find("[data-customize-setting-link]") .first(); // Set the field value for the first time, we'll fill it up later control.setValue([], false); // The DIV that holds all the rows control.repeaterFieldsContainer = control.container .find(".repeater-fields") .first(); // Set number of rows to 0 control.currentIndex = 0; // Save the rows objects control.rows = []; // Default limit choice limit = false; if (!_.isUndefined(control.params.choices.limit)) { limit = 0 >= control.params.choices.limit ? false : parseInt(control.params.choices.limit, 10); } control.container.on("click", "button.repeater-add", function (e) { e.preventDefault(); if (!limit || control.currentIndex < limit) { theNewRow = control.addRow(); theNewRow.toggleMinimize(); control.initColorPicker(); control.initSelect(theNewRow); } else { jQuery(control.selector + " .limit").addClass("highlight"); } }); control.container.on("click", ".repeater-row-remove", function () { control.currentIndex--; if (!limit || control.currentIndex < limit) { jQuery(control.selector + " .limit").removeClass("highlight"); } }); control.container.on( "click keypress", ".repeater-field-image .upload-button,.repeater-field-cropped_image .upload-button,.repeater-field-upload .upload-button", function (e) { e.preventDefault(); control.$thisButton = jQuery(this); control.openFrame(e); } ); control.container.on( "click keypress", ".repeater-field-image .remove-button,.repeater-field-cropped_image .remove-button", function (e) { e.preventDefault(); control.$thisButton = jQuery(this); control.removeImage(e); } ); control.container.on( "click keypress", ".repeater-field-upload .remove-button", function (e) { e.preventDefault(); control.$thisButton = jQuery(this); control.removeFile(e); } ); /** * Function that loads the Mustache template */ control.repeaterTemplate = _.memoize(function () { var compiled, /* * Underscore's default ERB-style templates are incompatible with PHP * when asp_tags is enabled, so WordPress uses Mustache-inspired templating syntax. * * @see trac ticket #22344. */ options = { evaluate: /<#([\s\S]+?)#>/g, interpolate: /\{\{\{([\s\S]+?)\}\}\}/g, escape: /\{\{([^\}]+?)\}\}(?!\})/g, variable: "data", }; return function (data) { compiled = _.template( control.container .find(".customize-control-repeater-content") .first() .html(), null, options ); return compiled(data); }; }); // When we load the control, the fields have not been filled up // This is the first time that we create all the rows if (settingValue.length) { _.each(settingValue, function (subValue) { theNewRow = control.addRow(subValue); control.initColorPicker(); control.initSelect(theNewRow, subValue); }); } control.repeaterFieldsContainer.sortable({ handle: ".repeater-row-header", update: function () { control.sort(); }, }); }, /** * Open the media modal. * * @param {Object} event - The JS event. * @returns {void} */ openFrame: function (event) { if (wp.customize.utils.isKeydownButNotEnterEvent(event)) { return; } if ( this.$thisButton .closest(".repeater-field") .hasClass("repeater-field-cropped_image") ) { this.initCropperFrame(); } else { this.initFrame(); } this.frame.open(); }, initFrame: function () { var libMediaType = this.getMimeType(); this.frame = wp.media({ states: [ new wp.media.controller.Library({ library: wp.media.query({ type: libMediaType }), multiple: false, date: false, }), ], }); // When a file is selected, run a callback. this.frame.on("select", this.onSelect, this); }, /** * Create a media modal select frame, and store it so the instance can be reused when needed. * This is mostly a copy/paste of Core api.CroppedImageControl in /wp-admin/js/customize-control.js * * @returns {void} */ initCropperFrame: function () { // We get the field id from which this was called var currentFieldId = this.$thisButton .siblings("input.hidden-field") .attr("data-field"), attrs = ["width", "height", "flex_width", "flex_height"], // A list of attributes to look for libMediaType = this.getMimeType(); // Make sure we got it if (_.isString(currentFieldId) && "" !== currentFieldId) { // Make fields is defined and only do the hack for cropped_image if ( _.isObject(this.params.fields[currentFieldId]) && "cropped_image" === this.params.fields[currentFieldId].type ) { //Iterate over the list of attributes attrs.forEach( function (el) { // If the attribute exists in the field if (!_.isUndefined(this.params.fields[currentFieldId][el])) { // Set the attribute in the main object this.params[el] = this.params.fields[currentFieldId][el]; } }.bind(this) ); } } this.frame = wp.media({ button: { text: "Select and Crop", close: false, }, states: [ new wp.media.controller.Library({ library: wp.media.query({ type: libMediaType }), multiple: false, date: false, suggestedWidth: this.params.width, suggestedHeight: this.params.height, }), new wp.media.controller.CustomizeImageCropper({ imgSelectOptions: this.calculateImageSelectOptions, control: this, }), ], }); this.frame.on("select", this.onSelectForCrop, this); this.frame.on("cropped", this.onCropped, this); this.frame.on("skippedcrop", this.onSkippedCrop, this); }, onSelect: function () { var attachment = this.frame.state().get("selection").first().toJSON(); if ( this.$thisButton .closest(".repeater-field") .hasClass("repeater-field-upload") ) { this.setFileInRepeaterField(attachment); } else { this.setImageInRepeaterField(attachment); } }, /** * After an image is selected in the media modal, switch to the cropper * state if the image isn't the right size. */ onSelectForCrop: function () { var attachment = this.frame.state().get("selection").first().toJSON(); if ( this.params.width === attachment.width && this.params.height === attachment.height && !this.params.flex_width && !this.params.flex_height ) { this.setImageInRepeaterField(attachment); } else { this.frame.setState("cropper"); } }, /** * After the image has been cropped, apply the cropped image data to the setting. * * @param {object} croppedImage Cropped attachment data. * @returns {void} */ onCropped: function (croppedImage) { this.setImageInRepeaterField(croppedImage); }, /** * Returns a set of options, computed from the attached image data and * control-specific data, to be fed to the imgAreaSelect plugin in * wp.media.view.Cropper. * * @param {wp.media.model.Attachment} attachment - The attachment from the WP API. * @param {wp.media.controller.Cropper} controller - Media controller. * @returns {Object} - Options. */ calculateImageSelectOptions: function (attachment, controller) { var control = controller.get("control"), flexWidth = !!parseInt(control.params.flex_width, 10), flexHeight = !!parseInt(control.params.flex_height, 10), realWidth = attachment.get("width"), realHeight = attachment.get("height"), xInit = parseInt(control.params.width, 10), yInit = parseInt(control.params.height, 10), ratio = xInit / yInit, xImg = realWidth, yImg = realHeight, x1, y1, imgSelectOptions; controller.set( "canSkipCrop", !control.mustBeCropped( flexWidth, flexHeight, xInit, yInit, realWidth, realHeight ) ); if (xImg / yImg > ratio) { yInit = yImg; xInit = yInit * ratio; } else { xInit = xImg; yInit = xInit / ratio; } x1 = (xImg - xInit) / 2; y1 = (yImg - yInit) / 2; imgSelectOptions = { handles: true, keys: true, instance: true, persistent: true, imageWidth: realWidth, imageHeight: realHeight, x1: x1, y1: y1, x2: xInit + x1, y2: yInit + y1, }; if (false === flexHeight && false === flexWidth) { imgSelectOptions.aspectRatio = xInit + ":" + yInit; } if (false === flexHeight) { imgSelectOptions.maxHeight = yInit; } if (false === flexWidth) { imgSelectOptions.maxWidth = xInit; } return imgSelectOptions; }, /** * Return whether the image must be cropped, based on required dimensions. * * @param {bool} flexW - The flex-width. * @param {bool} flexH - The flex-height. * @param {int} dstW - Initial point distance in the X axis. * @param {int} dstH - Initial point distance in the Y axis. * @param {int} imgW - Width. * @param {int} imgH - Height. * @returns {bool} - Whether the image must be cropped or not based on required dimensions. */ mustBeCropped: function (flexW, flexH, dstW, dstH, imgW, imgH) { return !( (true === flexW && true === flexH) || (true === flexW && dstH === imgH) || (true === flexH && dstW === imgW) || (dstW === imgW && dstH === imgH) || imgW <= dstW ); }, /** * If cropping was skipped, apply the image data directly to the setting. * * @returns {void} */ onSkippedCrop: function () { var attachment = this.frame.state().get("selection").first().toJSON(); this.setImageInRepeaterField(attachment); }, /** * Updates the setting and re-renders the control UI. * * @param {object} attachment - The attachment object. * @returns {void} */ setImageInRepeaterField: function (attachment) { var $targetDiv = this.$thisButton.closest( ".repeater-field-image,.repeater-field-cropped_image" ); $targetDiv .find(".kirki-image-attachment") .html('') .hide() .slideDown("slow"); $targetDiv.find(".hidden-field").val(attachment.id); this.$thisButton.text(this.$thisButton.data("alt-label")); $targetDiv.find(".remove-button").show(); //This will activate the save button $targetDiv.find("input, textarea, select").trigger("change"); this.frame.close(); }, /** * Updates the setting and re-renders the control UI. * * @param {object} attachment - The attachment object. * @returns {void} */ setFileInRepeaterField: function (attachment) { var $targetDiv = this.$thisButton.closest(".repeater-field-upload"); $targetDiv .find(".kirki-file-attachment") .html( ' ' + attachment.filename + "" ) .hide() .slideDown("slow"); $targetDiv.find(".hidden-field").val(attachment.id); this.$thisButton.text(this.$thisButton.data("alt-label")); $targetDiv.find(".upload-button").show(); $targetDiv.find(".remove-button").show(); //This will activate the save button $targetDiv.find("input, textarea, select").trigger("change"); this.frame.close(); }, getMimeType: function () { // We get the field id from which this was called var currentFieldId = this.$thisButton .siblings("input.hidden-field") .attr("data-field"); // Make sure we got it if (_.isString(currentFieldId) && "" !== currentFieldId) { // Make fields is defined and only do the hack for cropped_image if ( _.isObject(this.params.fields[currentFieldId]) && "upload" === this.params.fields[currentFieldId].type ) { // If the attribute exists in the field if (!_.isUndefined(this.params.fields[currentFieldId].mime_type)) { // Set the attribute in the main object return this.params.fields[currentFieldId].mime_type; } } } return "image"; }, removeImage: function (event) { var $targetDiv, $uploadButton; if (wp.customize.utils.isKeydownButNotEnterEvent(event)) { return; } $targetDiv = this.$thisButton.closest( ".repeater-field-image,.repeater-field-cropped_image,.repeater-field-upload" ); $uploadButton = $targetDiv.find(".upload-button"); $targetDiv.find(".kirki-image-attachment").slideUp("fast", function () { jQuery(this).show().html(jQuery(this).data("placeholder")); }); $targetDiv.find(".hidden-field").val(""); $uploadButton.text($uploadButton.data("label")); this.$thisButton.hide(); $targetDiv.find("input, textarea, select").trigger("change"); }, removeFile: function (event) { var $targetDiv, $uploadButton; if (wp.customize.utils.isKeydownButNotEnterEvent(event)) { return; } $targetDiv = this.$thisButton.closest(".repeater-field-upload"); $uploadButton = $targetDiv.find(".upload-button"); $targetDiv.find(".kirki-file-attachment").slideUp("fast", function () { jQuery(this).show().html(jQuery(this).data("placeholder")); }); $targetDiv.find(".hidden-field").val(""); $uploadButton.text($uploadButton.data("label")); this.$thisButton.hide(); $targetDiv.find("input, textarea, select").trigger("change"); }, /** * Get the current value of the setting * * @returns {Object} - Returns the value. */ getValue: function () { // The setting is saved in JSON return JSON.parse(decodeURI(this.setting.get())); }, /** * Set a new value for the setting * * @param {Object} newValue - The new value. * @param {bool} refresh - If we want to refresh the previewer or not * @param {bool} filtering - If we want to filter or not. * @returns {void} */ setValue: function (newValue, refresh, filtering) { // We need to filter the values after the first load to remove data requrired for diplay but that we don't want to save in DB var filteredValue = newValue, filter = []; if (filtering) { jQuery.each(this.params.fields, function (index, value) { if ( "image" === value.type || "cropped_image" === value.type || "upload" === value.type ) { filter.push(index); } }); jQuery.each(newValue, function (index, value) { jQuery.each(filter, function (ind, field) { if (!_.isUndefined(value[field]) && !_.isUndefined(value[field].id)) { filteredValue[index][field] = value[field].id; } }); }); } this.setting.set(encodeURI(JSON.stringify(filteredValue))); if (refresh) { // Trigger the change event on the hidden field so // previewer refresh the website on Customizer this.settingField.trigger("change"); } }, /** * Add a new row to repeater settings based on the structure. * * @param {Object} data - (Optional) Object of field => value pairs (undefined if you want to get the default values) * @returns {Object} - Returns the new row. */ addRow: function (data) { var control = this, template = control.repeaterTemplate(), // The template for the new row (defined on Kirki_Customize_Repeater_Control::render_content() ). settingValue = this.getValue(), // Get the current setting value. newRowSetting = {}, // Saves the new setting data. templateData, // Data to pass to the template newRow, i; if (template) { // The control structure is going to define the new fields // We need to clone control.params.fields. Assigning it // ould result in a reference assignment. templateData = jQuery.extend(true, {}, control.params.fields); // But if we have passed data, we'll use the data values instead if (data) { for (i in data) { if (data.hasOwnProperty(i) && templateData.hasOwnProperty(i)) { templateData[i].default = data[i]; } } } templateData.index = this.currentIndex; // Append the template content template = template(templateData); // Create a new row object and append the element newRow = new RepeaterRow( control.currentIndex, jQuery(template).appendTo(control.repeaterFieldsContainer), control.params.row_label, control ); newRow.container.on("row:remove", function (e, rowIndex) { control.deleteRow(rowIndex); }); newRow.container.on( "row:update", function (e, rowIndex, fieldName, element) { control.updateField.call(control, e, rowIndex, fieldName, element); // eslint-disable-line no-useless-call newRow.updateLabel(); } ); // Add the row to rows collection this.rows[this.currentIndex] = newRow; for (i in templateData) { if (templateData.hasOwnProperty(i)) { newRowSetting[i] = templateData[i].default; } } settingValue[this.currentIndex] = newRowSetting; this.setValue(settingValue, true); this.currentIndex++; return newRow; } }, sort: function () { var control = this, $rows = this.repeaterFieldsContainer.find(".repeater-row"), newOrder = [], settings = control.getValue(), newRows = [], newSettings = []; $rows.each(function (i, element) { newOrder.push(jQuery(element).data("row")); }); jQuery.each(newOrder, function (newPosition, oldPosition) { newRows[newPosition] = control.rows[oldPosition]; newRows[newPosition].setRowIndex(newPosition); newSettings[newPosition] = settings[oldPosition]; }); control.rows = newRows; control.setValue(newSettings); }, /** * Delete a row in the repeater setting * * @param {int} index - Position of the row in the complete Setting Array * @returns {void} */ deleteRow: function (index) { var currentSettings = this.getValue(), row, prop; if (currentSettings[index]) { // Find the row row = this.rows[index]; if (row) { // Remove the row settings delete currentSettings[index]; // Remove the row from the rows collection delete this.rows[index]; // Update the new setting values this.setValue(currentSettings, true); } } // Remap the row numbers for (prop in this.rows) { if (this.rows.hasOwnProperty(prop) && this.rows[prop]) { this.rows[prop].updateLabel(); } } }, /** * Update a single field inside a row. * Triggered when a field has changed * * @param {Object} e - Event Object * @param {int} rowIndex - The row's index as an integer. * @param {string} fieldId - The field ID. * @param {string|Object} element - The element's identifier, or jQuery Object of the element. * @returns {void} */ updateField: function (e, rowIndex, fieldId, element) { var type, row, currentSettings; if (!this.rows[rowIndex]) { return; } if (!this.params.fields[fieldId]) { return; } type = this.params.fields[fieldId].type; row = this.rows[rowIndex]; currentSettings = this.getValue(); element = jQuery(element); if (_.isUndefined(currentSettings[row.rowIndex][fieldId])) { return; } if ("checkbox" === type) { currentSettings[row.rowIndex][fieldId] = element.is(":checked"); } else { // Update the settings currentSettings[row.rowIndex][fieldId] = element.val(); } this.setValue(currentSettings, true); }, /** * Init the color picker on color fields * Called after AddRow * * @returns {void} */ initColorPicker: function () { var control = this; var colorPicker = control.container.find(".kirki-classic-color-picker"); var fieldId = colorPicker.data("field"); var options = {}; // We check if the color palette parameter is defined. if ( !_.isUndefined(fieldId) && !_.isUndefined(control.params.fields[fieldId]) && !_.isUndefined(control.params.fields[fieldId].palettes) && _.isObject(control.params.fields[fieldId].palettes) ) { options.palettes = control.params.fields[fieldId].palettes; } // When the color picker value is changed we update the value of the field options.change = function (event, ui) { var currentPicker = jQuery(event.target); var row = currentPicker.closest(".repeater-row"); var rowIndex = row.data("row"); var currentSettings = control.getValue(); var value = ui.color._alpha < 1 ? ui.color.to_s() : ui.color.toString(); currentSettings[rowIndex][currentPicker.data("field")] = value; control.setValue(currentSettings, true); // By default if the alpha is 1, the input will be rgb. // We setTimeout to 50ms to prevent race value set. setTimeout(function() { event.target.value = value; }, 50); }; // Init the color picker if (colorPicker.length && 0 !== colorPicker.length) { colorPicker.wpColorPicker(options); } }, /** * Init the dropdown-pages field. * Called after AddRow * * @param {object} theNewRow the row that was added to the repeater * @param {object} data the data for the row if we're initializing a pre-existing row * @returns {void} */ initSelect: function (theNewRow, data) { var control = this, dropdown = theNewRow.container.find(".repeater-field select"), dataField; if (0 === dropdown.length) { return; } dataField = dropdown.data("field"); multiple = jQuery(dropdown).data("multiple"); data = data || {}; data[dataField] = data[dataField] || ""; jQuery(dropdown).val(data[dataField] || jQuery(dropdown).val()); this.container.on("change", ".repeater-field select", function (event) { var currentDropdown = jQuery(event.target), row = currentDropdown.closest(".repeater-row"), rowIndex = row.data("row"), currentSettings = control.getValue(); currentSettings[rowIndex][currentDropdown.data("field")] = jQuery(this).val(); control.setValue(currentSettings); }); }, }); PK[pY^^*control-repeater/src/Settings/Repeater.phpnu[id}", [ $this, 'sanitize_repeater_setting' ], 10, 1 ); } /** * Fetch the value of the setting. * * @access public * @since 1.0 * @return mixed The value. */ public function value() { return (array) parent::value(); } /** * Convert the JSON encoded setting coming from Customizer to an Array. * * @access public * @since 1.0 * @param string $value URL Encoded JSON Value. * @return array */ public function sanitize_repeater_setting( $value ) { if ( ! is_array( $value ) ) { $value = json_decode( urldecode( $value ) ); } if ( empty( $value ) || ! is_array( $value ) ) { $value = []; } // Make sure that every row is an array, not an object. foreach ( $value as $key => $val ) { $value[ $key ] = (array) $val; if ( empty( $val ) ) { unset( $value[ $key ] ); } } // Reindex array. if ( is_array( $value ) ) { $value = array_values( $value ); } return $value; } } PK[C##control-repeater/composer.jsonnu[{ "name": "kirki-framework/control-repeater", "type": "library", "version": "1.0.5", "description": "Repeater control for the Kirki Customizer framework.", "keywords": [ "wordpress", "customizer", "framework" ], "homepage": "https://kirki.org/", "license": "MIT", "authors": [ { "name": "Kirki Framework", "email": "connect@mapsteps.com" } ], "require": { "php": ">=7.0", "kirki-framework/url-getter": "*", "kirki-framework/control-generic": "*", "kirki-framework/control-select": "*", "kirki-framework/control-checkbox": "*", "kirki-framework/control-radio": "*", "kirki-framework/control-color": "*", "kirki-framework/control-image": "*", "kirki-framework/control-upload": "*" }, "autoload": { "psr-4": { "Kirki\\Control\\": "src/Control", "Kirki\\Field\\": "src/Field", "Kirki\\Settings\\": "src/Settings" } } } PK[ln00control-repeater/LICENSEnu[MIT License Copyright (c) 2019 kirki-framework Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. PK[2# control-checkbox/dist/control.jsnu[!function(){var i={initKirkiControl:function(i){(i=i||this).container.on("change","input",(function(){i.setting.set(jQuery(this).is(":checked"))}))}};wp.customize.controlConstructor["kirki-checkbox"]=wp.customize.kirkiDynamicControl.extend(i),wp.customize.controlConstructor["kirki-switch"]=wp.customize.kirkiDynamicControl.extend(i),wp.customize.controlConstructor["kirki-toggle"]=wp.customize.kirkiDynamicControl.extend(i)}(); //# sourceMappingURL=control.js.map PK[MXX!control-checkbox/dist/control.cssnu[.customize-control-kirki-toggle .kirki-toggle{align-items:flex-start;display:flex;justify-content:space-between}.customize-control-kirki-toggle .kirki-toggle .kirki-control-label{width:80%}.customize-control-kirki-toggle .kirki-toggle .kirki-control-form{text-align:right;width:20%}.customize-control-kirki-toggle .kirki-toggle .kirki-toggle-switch-label{width:100%}.customize-control-kirki-toggle .kirki-toggle .kirki-toggle-switch-label:before{right:0}.customize-control-kirki-toggle .kirki-toggle .kirki-toggle-switch-label:after{right:18px}.customize-control-kirki-switch .kirki-switch .kirki-toggle-switch-label{padding:10px 0 12px 44px;text-align:left}.customize-control-kirki-switch .kirki-switch .kirki-toggle-switch-label:after,.customize-control-kirki-switch .kirki-switch .kirki-toggle-switch-label:before{left:0}.customize-control-kirki-switch .kirki-switch .toggle-off,.customize-control-kirki-switch .kirki-switch .toggle-on{bottom:-2px;padding-left:5px;position:relative}.customize-control-kirki-switch .kirki-switch .toggle-on{color:#0073aa;display:none}.customize-control-kirki-switch .kirki-switch .toggle-off{color:#82878c;display:inline-block}.kirki-toggle-switch-label{cursor:pointer;display:inline-block;position:relative}.kirki-toggle-switch-label:after,.kirki-toggle-switch-label:before{box-sizing:border-box;content:"";margin:0;outline:0;position:absolute;top:50%;transform:translate3d(0,-50%,0);transition:all .35s cubic-bezier(0,.95,.38,.98),background-color .15s ease}.kirki-toggle-switch-label:before{background-color:#b4b9be;border:1px solid #b4b9be;border-radius:8px;height:14px;width:37px}.kirki-toggle-switch-label:after{background-color:#999;border:1px solid rgba(0,0,0,.1);border-radius:50%;height:22px;width:22px}.kirki-toggle-switch-input{opacity:0}.kirki-toggle-switch-input:checked+.kirki-toggle-switch-label:after{background-color:#0073aa;transform:translate3d(100%,-50%,0)}.kirki-toggle-switch-input:checked+.kirki-toggle-switch-label .toggle-on{display:inline-block}.kirki-toggle-switch-input:checked+.kirki-toggle-switch-label .toggle-off{display:none} /*# sourceMappingURL=control.css.map */ PK[$control-checkbox/dist/control.js.mapnu[{"mappings":"YAEA,IAAIA,EAAsB,CAEzBC,iBAAkB,SAAUC,IAC3BA,EAAUA,GAAWC,MACbC,UAAUC,GAAI,SAAU,SAAS,WACxCH,EAAQI,QAAQC,IAAKC,OAAQL,MAAOM,GAAI,kBAK3CC,GAAGC,UAAUC,mBAAmB,kBAAoBF,GAAGC,UAAUE,oBAAoBC,OAAQd,GAC7FU,GAAGC,UAAUC,mBAAmB,gBAAoBF,GAAGC,UAAUE,oBAAoBC,OAAQd,GAC7FU,GAAGC,UAAUC,mBAAmB,gBAAoBF,GAAGC,UAAUE,oBAAoBC,OAAQd","sources":["src/control.js"],"sourcesContent":["import \"./control.scss\";\n\nvar kirkiCheckboxScript = {\n\n\tinitKirkiControl: function( control ) {\n\t\tcontrol = control || this;\n\t\tcontrol.container.on( 'change', 'input', function() {\n\t\t\tcontrol.setting.set( jQuery( this ).is( ':checked' ) );\n\t\t} );\n\t}\n};\n\nwp.customize.controlConstructor['kirki-checkbox'] = wp.customize.kirkiDynamicControl.extend( kirkiCheckboxScript );\nwp.customize.controlConstructor['kirki-switch'] = wp.customize.kirkiDynamicControl.extend( kirkiCheckboxScript );\nwp.customize.controlConstructor['kirki-toggle'] = wp.customize.kirkiDynamicControl.extend( kirkiCheckboxScript );\n"],"names":["$1abc80d3e2df1201$var$kirkiCheckboxScript","initKirkiControl","control","this","container","on","setting","set","jQuery","is","wp","customize","controlConstructor","kirkiDynamicControl","extend"],"version":3,"file":"control.js.map"}PK[ʲ((%control-checkbox/dist/control.css.mapnu[{"mappings":"AAGE,8CAEE,sBAAA,CADA,YAAA,CAEA,6BCFJ,CDII,mEACE,SCFN,CDKI,kEACE,gBAAA,CACA,SCHN,CDMI,yEACE,UCJN,CDMM,gFACE,OCJR,CDOM,+EACE,UCLR,CDaI,yEACE,wBAAA,CACA,eCVN,CDgBM,+JACE,MCXR,CDeI,mHAGE,WAAA,CACA,gBAAA,CAFA,iBCXN,CDgBI,yDAEE,aEpDU,CFmDV,YCbN,CDiBI,0DAEE,aEjDmB,CFgDnB,oBCdN,CDoBA,2BAGE,cAAA,CADA,oBAAA,CADA,iBCfF,CDmBE,mEAEE,qBAAA,CACA,UAAA,CAEA,QAAA,CACA,SAAA,CAFA,iBAAA,CAGA,OAAA,CACA,+BAAA,CACA,0EClBJ,CDsBE,kCAIE,wBE1EsB,CF2EtB,wBAAA,CACA,iBAAA,CAJA,WAAA,CADA,UChBJ,CDwBE,iCAGE,qBEhFgB,CFmFhB,+BAAA,CAFA,iBAAA,CAFA,WAAA,CADA,UClBJ,CD2BA,2BACE,SCxBF,CDgCM,oEACE,wBE7GQ,CF8GR,kCC9BR,CDiCM,yEACE,oBC/BR,CDkCM,0EACE,YChCR","sources":["src/control.scss","%3Cinput%20css%20kvIa1f%3E","src/scss/_vars.scss"],"sourcesContent":["@import \"scss/vars\";\n\n.customize-control-kirki-toggle {\n .kirki-toggle {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n\n .kirki-control-label {\n width: 80%;\n }\n\n .kirki-control-form {\n text-align: right;\n width: 20%;\n }\n\n .kirki-toggle-switch-label {\n width: 100%;\n\n &:before {\n right: 0;\n }\n\n &:after {\n right: 18px;\n }\n }\n }\n}\n\n.customize-control-kirki-switch {\n .kirki-switch {\n .kirki-toggle-switch-label {\n padding: 10px 0 12px 44px;\n text-align: left;\n\n &:before {\n left: 0;\n }\n\n &:after {\n left: 0;\n }\n }\n\n .toggle-on,\n .toggle-off {\n position: relative;\n bottom: -2px;\n padding-left: 5px;\n }\n\n .toggle-on {\n display: none;\n color: $color-wp-blue;\n }\n\n .toggle-off {\n display: inline-block;\n color: $color-dark-silver-gray;\n }\n }\n}\n\n.kirki-toggle-switch-label {\n position: relative;\n display: inline-block;\n cursor: pointer;\n\n &:before,\n &:after {\n box-sizing: border-box;\n content: \"\";\n position: absolute;\n margin: 0;\n outline: 0;\n top: 50%;\n transform: translate3d(0, -50%, 0);\n transition: all 350ms cubic-bezier(0, 0.95, 0.38, 0.98),\n background-color 150ms ease;\n }\n\n &:before {\n width: 37px;\n height: 14px;\n // background-color: $color-silver-gray;\n background-color: $color-light-silver-gray;\n border: 1px solid $color-light-silver-gray;\n border-radius: 8px;\n }\n\n &:after {\n width: 22px;\n height: 22px;\n background-color: $color-medium-gray;\n border-radius: 50%;\n // box-shadow: 0 3px 1px -2px rgba(0, 0, 0, 0.14), 0 2px 2px 0 rgba(0, 0, 0, 0.098), 0 1px 5px 0 rgba(0, 0, 0, 0.084);\n border: 1px solid rgba(0, 0, 0, 0.1);\n }\n}\n\n.kirki-toggle-switch-input {\n opacity: 0;\n\n &:checked {\n + .kirki-toggle-switch-label {\n &::before {\n // background-color: desaturate(lighten($color-wp-blue, 40%), 40%);\n }\n\n &::after {\n background-color: $color-wp-blue;\n transform: translate3d(100%, -50%, 0);\n }\n\n .toggle-on {\n display: inline-block;\n }\n\n .toggle-off {\n display: none;\n }\n }\n }\n}\n",".customize-control-kirki-toggle .kirki-toggle {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n}\n.customize-control-kirki-toggle .kirki-toggle .kirki-control-label {\n width: 80%;\n}\n.customize-control-kirki-toggle .kirki-toggle .kirki-control-form {\n text-align: right;\n width: 20%;\n}\n.customize-control-kirki-toggle .kirki-toggle .kirki-toggle-switch-label {\n width: 100%;\n}\n.customize-control-kirki-toggle .kirki-toggle .kirki-toggle-switch-label:before {\n right: 0;\n}\n.customize-control-kirki-toggle .kirki-toggle .kirki-toggle-switch-label:after {\n right: 18px;\n}\n\n.customize-control-kirki-switch .kirki-switch .kirki-toggle-switch-label {\n padding: 10px 0 12px 44px;\n text-align: left;\n}\n.customize-control-kirki-switch .kirki-switch .kirki-toggle-switch-label:before {\n left: 0;\n}\n.customize-control-kirki-switch .kirki-switch .kirki-toggle-switch-label:after {\n left: 0;\n}\n.customize-control-kirki-switch .kirki-switch .toggle-on,\n.customize-control-kirki-switch .kirki-switch .toggle-off {\n position: relative;\n bottom: -2px;\n padding-left: 5px;\n}\n.customize-control-kirki-switch .kirki-switch .toggle-on {\n display: none;\n color: #0073aa;\n}\n.customize-control-kirki-switch .kirki-switch .toggle-off {\n display: inline-block;\n color: #82878c;\n}\n\n.kirki-toggle-switch-label {\n position: relative;\n display: inline-block;\n cursor: pointer;\n}\n.kirki-toggle-switch-label:before, .kirki-toggle-switch-label:after {\n box-sizing: border-box;\n content: \"\";\n position: absolute;\n margin: 0;\n outline: 0;\n top: 50%;\n transform: translate3d(0, -50%, 0);\n transition: all 350ms cubic-bezier(0, 0.95, 0.38, 0.98), background-color 150ms ease;\n}\n.kirki-toggle-switch-label:before {\n width: 37px;\n height: 14px;\n background-color: #b4b9be;\n border: 1px solid #b4b9be;\n border-radius: 8px;\n}\n.kirki-toggle-switch-label:after {\n width: 22px;\n height: 22px;\n background-color: #999;\n border-radius: 50%;\n border: 1px solid rgba(0, 0, 0, 0.1);\n}\n\n.kirki-toggle-switch-input {\n opacity: 0;\n}\n.kirki-toggle-switch-input:checked + .kirki-toggle-switch-label::after {\n background-color: #0073aa;\n transform: translate3d(100%, -50%, 0);\n}\n.kirki-toggle-switch-input:checked + .kirki-toggle-switch-label .toggle-on {\n display: inline-block;\n}\n.kirki-toggle-switch-input:checked + .kirki-toggle-switch-label .toggle-off {\n display: none;\n}\n/*# sourceMappingURL=control.css.map */\n","// See https://make.wordpress.org/design/handbook/design-guide/foundations/colors/\n// Colors copied from https://codepen.io/hugobaeta/pen/RNOzoV\n\n$color-wp-blue: #0073aa;\n$color-medium-blue: #00a0d2;\n$color-light-blue: #00b9eb;\n\n$color-ultra-dark-gray: #191e23;\n$color-dark-gray: #23282d;\n$color-base-gray: #32373c;\n$color-dark-medium-gray: lighten($color-base-gray,15%);\n$color-dark-silver-gray: #82878c;\n$color-silver-gray: #a0a5aa;\n$color-light-silver-gray: #b4b9be;\n// $color-medium-gray: mix($color-base-gray,$color-dark-silver-gray,20%);\n$color-medium-gray: #999;\n\n$color-gray-900: $color-ultra-dark-gray;\n$color-gray-800: $color-dark-gray;\n$color-gray-700: $color-base-gray;\n$color-gray-600: lighten($color-base-gray,6%);\n$color-gray-500: lighten($color-base-gray,15%);\n$color-gray-400: lighten($color-base-gray,20%);\n$color-gray-300: lighten($color-base-gray,25%);\n$color-gray-200: lighten($color-base-gray,32%);\n$color-gray-100: lighten($color-base-gray,38%);\n\n$color--gray-light-900: lighten($color-base-gray,45%);\n$color--gray-light-800: lighten($color-base-gray,52%);\n$color--gray-light-700: lighten($color-base-gray,60%);\n$color--gray-light-600: lighten($color-base-gray,64%);\n$color--gray-light-500: lighten($color-base-gray,68%);\n$color--gray-light-400: lighten($color-base-gray,70%);\n$color--gray-light-300: lighten($color-base-gray,72%);\n$color--gray-light-200: lighten($color-base-gray,74%);\n$color--gray-light-100: lighten($color-base-gray,77%);\n\n$color-accent-red: #dc3232;\n$color-accent-fire-orange: #d54e21;\n$color-accent-orange: #f56e28;\n$color-accent-yellow: #ffb900;\n$color-accent-green: #46b450; //old #64b450;\n$color-accent-blue: $color-medium-blue;\n$color-accent-purple: #826eb4;\n\n\n//Tints and Tones and Shades - Oh My!\n\n$color-accent-red-shade30: shade($color-accent-red,30%);\n$color-accent-red-shade20: shade($color-accent-red,20%);\n$color-accent-red-shade10: shade($color-accent-red,10%);\n$color-accent-red-tint20: tint($color-accent-red,20%);\n$color-accent-red-tint40: tint($color-accent-red,40%);\n$color-accent-red-tint60: tint($color-accent-red,60%);\n$color-accent-red-tint90: tint($color-accent-red,90%);\n\n$color-accent-fire-orange-shade10: shade($color-accent-fire-orange,10%);\n$color-accent-fire-orange-shade5: shade($color-accent-fire-orange,5%);\n$color-accent-orange-tint20: tint($color-accent-orange,20%);\n$color-accent-orange-tint40: tint($color-accent-orange,40%);\n$color-accent-orange-tint60: tint($color-accent-orange,60%);\n$color-accent-orange-tint90: tint($color-accent-orange,90%);\n\n$color-accent-yellow-tonefire40: mix($color-accent-fire-orange,$color-accent-yellow,40%);\n$color-accent-yellow-tonefire20: mix($color-accent-fire-orange,$color-accent-yellow,20%);\n$color-accent-yellow-tint20: tint($color-accent-yellow,20%);\n$color-accent-yellow-tint40: tint($color-accent-yellow,40%);\n$color-accent-yellow-tint60: tint($color-accent-yellow,60%);\n$color-accent-yellow-tint90: tint($color-accent-yellow,90%);\n\n$color-accent-green-toneblue5shade25: shade(mix($color-wp-blue, $color-accent-green,5%),25%);\n$color-accent-green-toneblue5shade15: shade(mix($color-wp-blue, $color-accent-green,5%),15%);\n$color-accent-green-tint20: tint($color-accent-green,20%);\n$color-accent-green-tint40: tint($color-accent-green,40%);\n$color-accent-green-tint60: tint($color-accent-green,60%);\n$color-accent-green-tint70: tint($color-accent-green,70%);\n$color-accent-green-tint90: tint($color-accent-green,90%);\n\n$color-accent-wp-blue-shade10: shade($color-wp-blue,10%);\n$color-accent-blue-toneblue80: mix($color-wp-blue,$color-accent-blue,80%);\n$color-accent-blue-toneblue60: mix($color-wp-blue,$color-accent-blue,60%);\n$color-accent-blue-toneblue40: mix($color-wp-blue,$color-accent-blue,40%);\n$color-accent-blue-tint20: tint($color-accent-blue,20%);\n$color-accent-blue-tint40: tint($color-accent-blue,40%);\n$color-accent-blue-tint60: tint($color-accent-blue,60%);\n$color-accent-blue-tint75: tint($color-accent-blue,75%);\n$color-accent-blue-tint90: tint($color-accent-blue,90%);\n\n$color-accent-purple-shade40: shade($color-accent-purple,40%);\n$color-accent-purple-shade20: shade($color-accent-purple,20%);\n$color-accent-purple-tint20: tint($color-accent-purple,20%);\n$color-accent-purple-tint40: tint($color-accent-purple,40%);\n$color-accent-purple-tint60: tint($color-accent-purple,60%);\n$color-accent-purple-tint90: tint($color-accent-purple,90%);\n\n//Text Colors\n$textcolor-dark: rgba($color-base-gray,.8);\n$textcolor-dark-mid: rgba($color-base-gray,.5);\n$textcolor-light: rgba(#fff,.8);\n$textcolor-light-mid: rgba(#fff,.5);\n"],"names":[],"version":3,"file":"control.css.map"}PK[KX.control-checkbox/src/Field/Checkbox_Toggle.phpnu[args['settings'] ) { $args = parent::filter_control_args( $args, $wp_customize ); $args['type'] = 'kirki-toggle'; } return $args; } } PK[[, , 'control-checkbox/src/Field/Checkbox.phpnu[args['settings'] ) { $args = parent::filter_setting_args( $args, $wp_customize ); // Set the sanitize-callback if none is defined. if ( ! isset( $args['sanitize_callback'] ) || ! $args['sanitize_callback'] ) { $args['sanitize_callback'] = function( $value ) { return ( '0' === $value || 'false' === $value ) ? false : (bool) $value; }; } $args['default'] = isset( $args['default'] ) ? $args['default'] : false; // Make sure the default is formatted as boolean. $args['default'] = (bool) ( 1 === $args['default'] || '1' === $args['default'] || true === $args['default'] || 'true' === $args['default'] || 'on' === $args['default'] ); } return $args; } /** * Filter arguments before creating the control. * * @access public * @since 0.1 * @param array $args The field arguments. * @param WP_Customize_Manager $wp_customize The customizer instance. * @return array */ public function filter_control_args( $args, $wp_customize ) { if ( $args['settings'] === $this->args['settings'] ) { $args = parent::filter_control_args( $args, $wp_customize ); $args['type'] = 'kirki-checkbox'; } return $args; } } PK[UU.control-checkbox/src/Field/Checkbox_Switch.phpnu[args['settings'] ) { $args = parent::filter_control_args( $args, $wp_customize ); $args['type'] = 'kirki-switch'; } return $args; } } PK[ ''0control-checkbox/src/Control/Checkbox_Toggle.phpnu[ aria-describedby="_customize-description-{{ data.id }}"<# } #> <# if ( data.value ) { #>checked="checked"<# } #> /> <# if ( data.description ) { #> {{{ data.description }}} <# } #> json['checkboxType'] = str_ireplace( 'kirki-', '', $this->type ); $this->json['defaultChoices'] = [ 'on' => __( 'On', 'kirki' ), 'off' => __( 'Off', 'kirki' ), ]; } /** * An Underscore (JS) template for this control's content (but not its container). * * Class variables for this control class are available in the `data` JS object; * export custom variables by overriding {@see WP_Customize_Control::to_json()}. * * @see WP_Customize_Control::print_template() * * @access protected * @since 1.0 * @return void */ protected function content_template() { ?>
<# if ( data.label || data.description ) { #>
<# if ( data.label ) { #> <# } #> <# if ( data.description ) { #> {{{ data.description }}} <# } #>
<# } #>
checked<# } #> />
'kirki-generic', 'default' => '', 'choices' => [ 'type' => 'hidden', 'parent_type' => 'kirki-background', ], 'sanitize_callback' => [ '\Kirki\Field\Background', 'sanitize' ], ], $args ) ); $args['parent_setting'] = $args['settings']; $args['output'] = []; $args['wrapper_attrs'] = [ 'data-kirki-parent-control-type' => 'kirki-background', ]; if ( isset( $args['transport'] ) && 'auto' === $args['transport'] ) { $args['transport'] = 'postMessage'; } $default_bg_color = isset( $args['default']['background-color'] ) ? $args['default']['background-color'] : ''; /** * Background Color. */ new \Kirki\Field\Color( wp_parse_args( [ 'settings' => $args['settings'] . '[background-color]', 'label' => '', 'description' => esc_html__( 'Background Color', 'kirki' ), 'default' => $default_bg_color, 'section' => $args['section'], 'choices' => [ 'alpha' => true, ], ], $args ) ); /** * Background Image. */ new \Kirki\Field\Image( wp_parse_args( [ 'settings' => $args['settings'] . '[background-image]', 'label' => '', 'description' => esc_html__( 'Background Image', 'kirki' ), 'default' => isset( $args['default']['background-image'] ) ? $args['default']['background-image'] : '', 'section' => $args['section'], ], $args ) ); /** * Background Repeat. */ new Kirki\Field\Select( wp_parse_args( [ 'settings' => $args['settings'] . '[background-repeat]', 'label' => '', 'description' => esc_html__( 'Background Repeat', 'kirki' ), 'section' => $args['section'], 'default' => isset( $args['default']['background-repeat'] ) ? $args['default']['background-repeat'] : '', 'choices' => [ 'no-repeat' => esc_html__( 'No Repeat', 'kirki' ), 'repeat' => esc_html__( 'Repeat All', 'kirki' ), 'repeat-x' => esc_html__( 'Repeat Horizontally', 'kirki' ), 'repeat-y' => esc_html__( 'Repeat Vertically', 'kirki' ), ], 'required' => array_merge( $args['required'], [ [ 'setting' => $args['settings'], 'operator' => '!=', 'value' => '', 'choice' => 'background-image', ], ] ), ], $args ) ); /** * Background Position. */ new Kirki\Field\Select( wp_parse_args( [ 'settings' => $args['settings'] . '[background-position]', 'label' => '', 'description' => esc_html__( 'Background Position', 'kirki' ), 'default' => isset( $args['default']['background-position'] ) ? $args['default']['background-position'] : '', 'section' => $args['section'], 'choices' => [ 'left top' => esc_html__( 'Left Top', 'kirki' ), 'left center' => esc_html__( 'Left Center', 'kirki' ), 'left bottom' => esc_html__( 'Left Bottom', 'kirki' ), 'center top' => esc_html__( 'Center Top', 'kirki' ), 'center center' => esc_html__( 'Center Center', 'kirki' ), 'center bottom' => esc_html__( 'Center Bottom', 'kirki' ), 'right top' => esc_html__( 'Right Top', 'kirki' ), 'right center' => esc_html__( 'Right Center', 'kirki' ), 'right bottom' => esc_html__( 'Right Bottom', 'kirki' ), ], 'required' => array_merge( $args['required'], [ [ 'setting' => $args['settings'], 'operator' => '!=', 'value' => '', 'choice' => 'background-image', ], ] ), ], $args ) ); /** * Background size. */ new Kirki\Field\Radio_Buttonset( wp_parse_args( [ 'settings' => $args['settings'] . '[background-size]', 'label' => '', 'description' => esc_html__( 'Background Size', 'kirki' ), 'default' => isset( $args['default']['background-size'] ) ? $args['default']['background-size'] : '', 'section' => $args['section'], 'choices' => [ 'cover' => esc_html__( 'Cover', 'kirki' ), 'contain' => esc_html__( 'Contain', 'kirki' ), 'auto' => esc_html__( 'Auto', 'kirki' ), ], 'required' => array_merge( $args['required'], [ [ 'setting' => $args['settings'], 'operator' => '!=', 'value' => '', 'choice' => 'background-image', ], ] ), ], $args ) ); /** * Background attachment. */ new Kirki\Field\Radio_Buttonset( wp_parse_args( [ 'type' => 'kirki-radio-buttonset', 'settings' => $args['settings'] . '[background-attachment]', 'description' => esc_html__( 'Background Attachment', 'kirki' ), 'label' => '', 'default' => isset( $args['default']['background-attachment'] ) ? $args['default']['background-attachment'] : '', 'section' => $args['section'], 'choices' => [ 'scroll' => esc_html__( 'Scroll', 'kirki' ), 'fixed' => esc_html__( 'Fixed', 'kirki' ), ], 'required' => array_merge( $args['required'], [ [ 'setting' => $args['settings'], 'operator' => '!=', 'value' => '', 'choice' => 'background-image', ], ] ), ], $args ) ); add_action( 'customize_preview_init', [ $this, 'enqueue_scripts' ] ); add_filter( 'kirki_output_control_classnames', [ $this, 'output_control_classnames' ] ); } /** * Sets the $sanitize_callback * * @access protected * @since 1.0 * @return void */ protected function set_sanitize_callback() { // If a custom sanitize_callback has been defined, // then we don't need to proceed any further. if ( ! empty( $this->sanitize_callback ) ) { return; } $this->sanitize_callback = [ '\Kirki\Field\Background', 'sanitize' ]; } /** * Sanitizes background controls * * @static * @access public * @since 1.0 * @param array $value The value. * @return array */ public static function sanitize( $value ) { if ( ! is_array( $value ) ) { return []; } $sanitized_value = [ 'background-color' => '', 'background-image' => '', 'background-repeat' => '', 'background-position' => '', 'background-size' => '', 'background-attachment' => '', ]; if ( isset( $value['background-color'] ) ) { $sanitized_value['background-color'] = \Kirki\Field\Color::sanitize( $value['background-color'] ); } if ( isset( $value['background-image'] ) ) { $sanitized_value['background-image'] = esc_url_raw( $value['background-image'] ); } if ( isset( $value['background-repeat'] ) ) { $sanitized_value['background-repeat'] = in_array( $value['background-repeat'], [ 'no-repeat', 'repeat', 'repeat-x', 'repeat-y', ], true ) ? $value['background-repeat'] : ''; } if ( isset( $value['background-position'] ) ) { $sanitized_value['background-position'] = in_array( $value['background-position'], [ 'left top', 'left center', 'left bottom', 'center top', 'center center', 'center bottom', 'right top', 'right center', 'right bottom', ], true ) ? $value['background-position'] : ''; } if ( isset( $value['background-size'] ) ) { $sanitized_value['background-size'] = in_array( $value['background-size'], [ 'cover', 'contain', 'auto', ], true ) ? $value['background-size'] : ''; } if ( isset( $value['background-attachment'] ) ) { $sanitized_value['background-attachment'] = in_array( $value['background-attachment'], [ 'scroll', 'fixed', ], true ) ? $value['background-attachment'] : ''; } return $sanitized_value; } /** * Sets the $js_vars * * @access protected * @since 1.0 * @return void */ protected function set_js_vars() { // Typecast to array. $this->js_vars = (array) $this->js_vars; // Check if transport is set to auto. // If not, then skip the auto-calculations and exit early. if ( 'auto' !== $this->transport ) { return; } // Set transport to refresh initially. // Serves as a fallback in case we failt to auto-calculate js_vars. $this->transport = 'refresh'; $js_vars = []; // Try to auto-generate js_vars. // First we need to check if js_vars are empty, and that output is not empty. if ( empty( $this->js_vars ) && ! empty( $this->output ) ) { // Start going through each item in the $output array. foreach ( $this->output as $output ) { // If 'element' is not defined, skip this. if ( ! isset( $output['element'] ) ) { continue; } if ( is_array( $output['element'] ) ) { $output['element'] = implode( ',', $output['element'] ); } // If there's a sanitize_callback defined, skip this. if ( isset( $output['sanitize_callback'] ) && ! empty( $output['sanitize_callback'] ) ) { continue; } // If we got this far, it's safe to add this. $js_vars[] = $output; } // Did we manage to get all the items from 'output'? // If not, then we're missing something so don't add this. if ( count( $js_vars ) !== count( $this->output ) ) { return; } $this->js_vars = $js_vars; $this->transport = 'postMessage'; } } /** * Override parent method. No need to register any setting. * * @access public * @since 0.1 * @param WP_Customize_Manager $wp_customize The customizer instance. * @return void */ public function add_setting( $wp_customize ) {} /** * Override the parent method. No need for a control. * * @access public * @since 0.1 * @param WP_Customize_Manager $wp_customize The customizer instance. * @return void */ public function add_control( $wp_customize ) {} /** * Enqueue scripts & styles. * * @access public * @since 1.0 * @return void */ public function enqueue_scripts() { wp_enqueue_script( 'kirki-typography', URL::get_from_path( __DIR__ ) . '/script.js', [ 'wp-hooks' ], '1.0', true ); } /** * Adds a custom output class for typography fields. * * @access public * @since 1.0 * @param array $classnames The array of classnames. * @return array */ public function output_control_classnames( $classnames ) { $classnames['kirki-background'] = '\Kirki\Field\CSS\Background'; return $classnames; } } PK[!field-background/src/script.jsnu[/* global kirkiPostMessage */ /** * Hook in the kirkiPostMessageStylesOutput filter. * * Handles postMessage styles for typography controls. */ jQuery( document ).ready( function() { wp.hooks.addFilter( 'kirkiPostMessageStylesOutput', 'kirki', /** * Append styles for this control. * * @param {string} styles - The styles. * @param {Object} value - The control value. * @param {Object} output - The control's "output" argument. * @param {string} controlType - The control type. * @returns {string} - Returns CSS styles as a string. */ function( styles, value, output, controlType ) { var processedValue; if ( 'kirki-background' === controlType ) { styles += output.element + '{'; _.each( value, function( val, key ) { if ( output.choice && key !== output.choice ) { return; } if ( 'background-image' === key ) { val = -1 === val.indexOf( 'url(' ) ? 'url(' + val + ')' : val; } processedValue = kirkiPostMessage.util.processValue( output, val ); if ( '' === processedValue ) { if ( 'background-color' === output.property ) { processedValue = 'unset'; } else if ( 'background-image' === output.property ) { processedValue = 'none'; } } if ( false !== processedValue ) { styles += output.property ? output.property + ':' + processedValue + ';' : key + ':' + processedValue + ';'; } } ); styles += '}'; } return styles; } ); } ); PK[/ꢣ'field-background/src/CSS/Background.phpnu[ 'global', 'element' => 'body', 'prefix' => '', 'suffix' => '', ] ); foreach ( [ 'background-image', 'background-color', 'background-repeat', 'background-position', 'background-size', 'background-attachment' ] as $property ) { // See https://github.com/aristath/kirki/issues/1808. if ( 'background-color' === $property && isset( $value['background-color'] ) && $value['background-color'] && ( ! isset( $value['background-image'] ) || empty( $value['background-image'] ) ) ) { $this->styles[ $output['media_query'] ][ $output['element'] ]['background'] = $output['prefix'] . $this->process_property_value( $property, $value[ $property ] ) . $output['suffix']; } if ( isset( $value[ $property ] ) && ! empty( $value[ $property ] ) ) { $this->styles[ $output['media_query'] ][ $output['element'] ][ $property ] = $output['prefix'] . $this->process_property_value( $property, $value[ $property ] ) . $output['suffix']; } } } } PK[޶field-background/composer.jsonnu[{ "name": "kirki-framework/field-background", "type": "library", "description": "Background field for the Kirki Customizer framework.", "keywords": [ "wordpress", "customizer", "framework" ], "homepage": "https://kirki.org/", "license": "MIT", "authors": [ { "name": "Kirki Framework", "email": "connect@mapsteps.com" } ], "require": { "php": ">=7.0", "kirki-framework/url-getter": "*", "kirki-framework/control-react-colorful": "*", "kirki-framework/control-select": "*", "kirki-framework/control-radio": "*" }, "autoload": { "psr-4": { "Kirki\\Field\\": "src" } } } PK[_EEfield-background/LICENSEnu[MIT License Copyright (c) 2019 kirki-framework Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. PK[ "control-multicheck/dist/control.jsnu[wp.customize.controlConstructor["kirki-multicheck"]=wp.customize.kirkiDynamicControl.extend({initKirkiControl:function(n){(n=n||this).container.on("change","input",(function(){var i=[],e=0;jQuery.each(n.params.choices,(function(t){n.container.find('input[value="'+t+'"]').is(":checked")?(n.container.find('input[value="'+t+'"]').parent().addClass("checked"),i[e]=t,e++):n.container.find('input[value="'+t+'"]').parent().removeClass("checked")})),n.setting.set(i)}))}}); //# sourceMappingURL=control.js.map PK[ln++#control-multicheck/dist/control.cssnu[ /*# sourceMappingURL=control.css.map */ PK[j:&control-multicheck/dist/control.js.mapnu[{"mappings":"AAEAA,GAAGC,UAAUC,mBAAkB,oBAAuBF,GAAGC,UAAUE,oBAAoBC,OAAM,CAE5FC,iBAAgB,SAAYC,IAC3BA,EAAUA,GAAOC,MAGTC,UAAUC,GAAE,SAAU,SAAS,WACtC,IAAIC,EAAK,GACRC,EAAI,EAGLC,OAAOC,KAAMP,EAAQQ,OAAOC,SAAO,SAAYC,GACzCV,EAAQE,UAAUS,KAAI,gBAAoBD,EAAG,MAAUE,GAAE,aAC7DZ,EAAQE,UAAUS,KAAI,gBAAoBD,EAAG,MAAUG,SAASC,SAAQ,WACxEV,EAAOC,GAAMK,EACbL,KAEAL,EAAQE,UAAUS,KAAI,gBAAoBD,EAAG,MAAUG,SAASE,YAAW,cAK7Ef,EAAQgB,QAAQC,IAAKb","sources":["src/control.js"],"sourcesContent":["import \"./control.scss\";\n\nwp.customize.controlConstructor['kirki-multicheck'] = wp.customize.kirkiDynamicControl.extend( {\n\n\tinitKirkiControl: function( control ) {\n\t\tcontrol = control || this;\n\n\t\t// Save the value\n\t\tcontrol.container.on( 'change', 'input', function() {\n\t\t\tvar value = [],\n\t\t\t\ti = 0;\n\n\t\t\t// Build the value as an object using the sub-values from individual checkboxes.\n\t\t\tjQuery.each( control.params.choices, function( key ) {\n\t\t\t\tif ( control.container.find( 'input[value=\"' + key + '\"]' ).is( ':checked' ) ) {\n\t\t\t\t\tcontrol.container.find( 'input[value=\"' + key + '\"]' ).parent().addClass( 'checked' );\n\t\t\t\t\tvalue[ i ] = key;\n\t\t\t\t\ti++;\n\t\t\t\t} else {\n\t\t\t\t\tcontrol.container.find( 'input[value=\"' + key + '\"]' ).parent().removeClass( 'checked' );\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\t// Update the value in the customizer.\n\t\t\tcontrol.setting.set( value );\n\t\t} );\n\t}\n} );\n"],"names":["wp","customize","controlConstructor","kirkiDynamicControl","extend","initKirkiControl","control","this","container","on","value","i","jQuery","each","params","choices","key","find","is","parent","addClass","removeClass","setting","set"],"version":3,"file":"control.js.map"}PK[Z``'control-multicheck/dist/control.css.mapnu[{"mappings":"","sources":[],"sourcesContent":[],"names":[],"version":3,"file":"control.css.map"}PK[fՌ| +control-multicheck/src/Field/Multicheck.phpnu[args['settings'] ) { $args = parent::filter_setting_args( $args, $wp_customize ); // Set the sanitize-callback if none is defined. if ( ! isset( $args['sanitize_callback'] ) || ! $args['sanitize_callback'] ) { $args['sanitize_callback'] = [ __CLASS__, 'sanitize' ]; } } return $args; } /** * Filter arguments before creating the control. * * @access public * @since 0.1 * @param array $args The field arguments. * @param WP_Customize_Manager $wp_customize The customizer instance. * @return array */ public function filter_control_args( $args, $wp_customize ) { if ( $args['settings'] === $this->args['settings'] ) { $args = parent::filter_control_args( $args, $wp_customize ); $args['type'] = 'kirki-multicheck'; } return $args; } /** * The sanitize method that will be used as a falback * * @static * @access public * @since 1.0 * @param string|array $value The control's value. * @return array */ public static function sanitize( $value ) { $value = ( ! is_array( $value ) ) ? explode( ',', $value ) : $value; return ( ! empty( $value ) ) ? array_map( 'sanitize_text_field', $value ) : []; } } PK[<74$ $ -control-multicheck/src/Control/Multicheck.phpnu[ <# if ( ! data.choices ) { return; } #> <# if ( data.label ) { #>{{{ data.label }}}<# } #> <# if ( data.description ) { #>{{{ data.description }}}<# } #>
    <# for ( key in data.choices ) { #>
  • class="checked"<# } #>> checked<# } #> />{{ data.choices[ key ] }}
  • <# } #>
=7.0", "kirki-framework/url-getter": "*", "kirki-framework/control-base": "*" }, "autoload": { "psr-4": { "Kirki\\Control\\": "src/Control", "Kirki\\Field\\": "src/Field" } } } PK[_EEcontrol-multicheck/LICENSEnu[MIT License Copyright (c) 2019 kirki-framework Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. PK[D field-typography/dist/preview.jsnu[jQuery(document).ready((function(){wp.hooks.addFilter("kirkiPostMessageStylesOutput","kirki",(function(i,a,e,t){var n,r="";return a.variant&&(a["font-weight"]="regular"===a.variant||"italic"===a.variant?400:parseInt(a.variant,10),a["font-style"]=a.variant.includes("italic")?"italic":"normal"),"kirki-typography"===t&&(i+=e.element+"{",_.each(a,(function(a,t){e.choice&&t!==e.choice||"variant"!==t&&!1!==(n=window.kirkiPostMessage.util.processValue(e,a))&&(i+=t+":"+n+";")})),i+="}",!_.isUndefined(window.WebFont)&&a["font-family"]&&kirkiGoogleFontNames.includes(a["font-family"])&&(r=a["font-family"].replace(/\"/g,"""),a.variant&&("regular"===a.variant?r+=":400":"italic"===a.variant?r+=":400i":r+=":"+a.variant),r+=":cyrillic,cyrillic-ext,devanagari,greek,greek-ext,khmer,latin,latin-ext,vietnamese,hebrew,arabic,bengali,gujarati,tamil,telugu,thai",window.WebFont.load({google:{families:[r]}}))),i}))})); //# sourceMappingURL=preview.js.map PK[ field-typography/dist/control.jsnu[!function(){function t(t,i){var n=wp.customize.control(t);if(void 0!==n){var o=(i=i||n.setting.get())["font-family"]&&kirkiGoogleFonts.items[i["font-family"]],a=i.variant?i.variant.toString():"regular",e=wp.customize.control(t+"[variant]"),r=[];if(o){var l=kirkiGoogleFonts.items[i["font-family"]].variants;l.sort((function(t,i){return ti?1:0})),kirkiFontVariants.complete.forEach((function(t){-1!==l.indexOf(t.value)&&r.push({value:t.value,label:t.label})}))}else{var c=t.replace(/]/g,"");c=c.replace(/\[/g,"_"),r=kirkiCustomVariants[c][i["font-family"]]?kirkiCustomVariants[c][i["font-family"]]:kirkiFontVariants.standard}-1!==a.indexOf("i")?i["font-style"]="italic":i["font-style"]="normal",i["font-weight"]="regular"===a||"italic"===a?400:parseInt(a,10),e&&(1 b) return 1;\n return 0;\n };\n\n let variants = [];\n\n if (isGoogle) {\n let gFontVariants = kirkiGoogleFonts.items[value[\"font-family\"]].variants;\n gFontVariants.sort(sortVariants);\n\n kirkiFontVariants.complete.forEach(function (variant) {\n if (-1 !== gFontVariants.indexOf(variant.value)) {\n variants.push({\n value: variant.value,\n label: variant.label,\n });\n }\n });\n } else {\n\t\tlet customVariantKey = id.replace(/]/g, '');\n\t\tcustomVariantKey = customVariantKey.replace(/\\[/g, '_');\n\n\t\tif (kirkiCustomVariants[customVariantKey][value[\"font-family\"]]) {\n variants = kirkiCustomVariants[customVariantKey][value[\"font-family\"]];\n } else {\n variants = kirkiFontVariants.standard;\n }\n }\n\n // Set the font-style value.\n if (-1 !== variantValue.indexOf(\"i\")) {\n value[\"font-style\"] = \"italic\";\n } else {\n value[\"font-style\"] = \"normal\";\n }\n\n // Set the font-weight value.\n value[\"font-weight\"] =\n \"regular\" === variantValue || \"italic\" === variantValue\n ? 400\n : parseInt(variantValue, 10);\n\n if (variantControl) {\n // Hide/show variant options depending on which are available for this font-family.\n if (1 < variants.length && control.active()) {\n variantControl.activate();\n } else {\n // If there's only 1 variant to choose from, we can hide the control.\n variantControl.deactivate();\n }\n\n variantControl.params.choices = variants;\n variantControl.formattedOptions = [];\n variantControl.destroy();\n\n if (!variants.includes(variantValue)) {\n // If the selected font-family doesn't support the currently selected variant, switch to \"regular\".\n variantControl.doSelectAction(\"selectOption\", \"regular\");\n } else {\n variantControl.doSelectAction(\"selectOption\", variantValue);\n }\n }\n\n wp.hooks.addAction(\n \"kirki.dynamicControl.initKirkiControl\",\n \"kirki\",\n function (controlInit) {\n if (variantControl && id + \"[variant]\" === controlInit.id) {\n }\n }\n );\n}\n\njQuery(document).ready(function () {\n _.each(kirkiTypographyControls, function (id) {\n kirkiTypographyCompositeControlFontProperties(id);\n\n wp.customize(id, function (value) {\n value.bind(function (newval) {\n kirkiTypographyCompositeControlFontProperties(id, newval);\n });\n });\n });\n});\n"],"names":["$1abc80d3e2df1201$var$kirkiTypographyCompositeControlFontProperties","id","value","control","wp","customize","isGoogle","setting","get","kirkiGoogleFonts","items","variantValue","toString","variantControl","variants","gFontVariants","sort","a","b","kirkiFontVariants","complete","forEach","variant","indexOf","push","label","customVariantKey","replace","kirkiCustomVariants","standard","parseInt","length","active","activate","deactivate","params","choices","formattedOptions","destroy","includes","doSelectAction","hooks","addAction","controlInit","jQuery","document","ready","_","each","kirkiTypographyControls","bind","newval"],"version":3,"file":"control.js.map"}PK[㮜%field-typography/dist/control.css.mapnu[{"mappings":"AAAA,0EACE,kBCCF,CDCE,mGAGE,cAAA,CADA,eAAA,CADA,eCGJ,CDGA,yEACE,kBCAF,CDGA,sBAEE,iBAAA,CADA,cCCF,CDEE,yBAEE,eAAA,CADA,YCCJ","sources":["src/control.scss","%3Cinput%20css%20zBhG12%3E"],"sourcesContent":[".customize-control-kirki[data-kirki-parent-control-type=\"kirki-typography\"] {\n margin-bottom: 10px;\n\n .customize-control-title {\n margin-bottom: 0;\n font-weight: 500;\n font-size: 12px;\n }\n}\n\n.customize-control-kirki[data-kirki-typography-css-prop=\"text-decoration\"] {\n margin-bottom: 15px;\n}\n\n.kirki-typography-end {\n margin-top: 8px;\n margin-bottom: 8px;\n\n hr {\n margin-top: 0;\n margin-bottom: 0;\n }\n}\n",".customize-control-kirki[data-kirki-parent-control-type=kirki-typography] {\n margin-bottom: 10px;\n}\n.customize-control-kirki[data-kirki-parent-control-type=kirki-typography] .customize-control-title {\n margin-bottom: 0;\n font-weight: 500;\n font-size: 12px;\n}\n\n.customize-control-kirki[data-kirki-typography-css-prop=text-decoration] {\n margin-bottom: 15px;\n}\n\n.kirki-typography-end {\n margin-top: 8px;\n margin-bottom: 8px;\n}\n.kirki-typography-end hr {\n margin-top: 0;\n margin-bottom: 0;\n}\n/*# sourceMappingURL=control.css.map */\n"],"names":[],"version":3,"file":"control.css.map"}PK[YMX  field-typography/src/preview.jsnu[/** * Hook in the kirkiPostMessageStylesOutput filter. * * Handles postMessage styles for typography controls. */ jQuery(document).ready(function () { wp.hooks.addFilter( "kirkiPostMessageStylesOutput", "kirki", /** * Append styles for this control. * * @param {string} styles - The styles. * @param {Object} value - The control value. * @param {Object} output - The control's "output" argument. * @param {string} controlType - The control type. * @returns {string} - Returns the CSS as a string. */ function (styles, value, output, controlType) { var googleFont = "", processedValue; if (value.variant) { value["font-weight"] = "regular" === value.variant || "italic" === value.variant ? 400 : parseInt(value.variant, 10); value["font-style"] = value.variant.includes("italic") ? "italic" : "normal"; } if ("kirki-typography" === controlType) { styles += output.element + "{"; _.each(value, function (val, key) { if (output.choice && key !== output.choice) { return; } if ("variant" === key) { return; } processedValue = window.kirkiPostMessage.util.processValue( output, val ); if (false !== processedValue) { styles += key + ":" + processedValue + ";"; } }); styles += "}"; // Check if this is a googlefont so that we may load it. if ( !_.isUndefined(window.WebFont) && value["font-family"] && kirkiGoogleFontNames.includes(value["font-family"]) ) { // Calculate the googlefont params. googleFont = value["font-family"].replace(/\"/g, """); // eslint-disable-line no-useless-escape if (value.variant) { if ("regular" === value.variant) { googleFont += ":400"; } else if ("italic" === value.variant) { googleFont += ":400i"; } else { googleFont += ":" + value.variant; } } googleFont += ":cyrillic,cyrillic-ext,devanagari,greek,greek-ext,khmer,latin,latin-ext,vietnamese,hebrew,arabic,bengali,gujarati,tamil,telugu,thai"; window.WebFont.load({ google: { families: [googleFont], }, }); } } return styles; } ); }); PK[rr)field-typography/src/Field/Typography.phpnu[ 'regular', 'label' => __( 'Regular', 'kirki' ), ], [ 'value' => 'italic', 'label' => __( 'Italic', 'kirki' ), ], [ 'value' => '700', 'label' => __( '700', 'kirki' ), ], [ 'value' => '700italic', 'label' => __( '700 Italic', 'kirki' ), ], ]; self::$complete_variants = [ [ 'value' => 'regular', 'label' => __( 'Regular', 'kirki' ), ], [ 'value' => 'italic', 'label' => __( 'Italic', 'kirki' ), ], [ 'value' => '100', 'label' => __( '100', 'kirki' ), ], [ 'value' => '100italic', 'label' => __( '100 Italic', 'kirki' ), ], [ 'value' => '200', 'label' => __( '200', 'kirki' ), ], [ 'value' => '200italic', 'label' => __( '200 Italic', 'kirki' ), ], [ 'value' => '300', 'label' => __( '300', 'kirki' ), ], [ 'value' => '300italic', 'label' => __( '300 Italic', 'kirki' ), ], [ 'value' => '500', 'label' => __( '500', 'kirki' ), ], [ 'value' => '500italic', 'label' => __( '500 Italic', 'kirki' ), ], [ 'value' => '600', 'label' => __( '600', 'kirki' ), ], [ 'value' => '600italic', 'label' => __( '600 Italic', 'kirki' ), ], [ 'value' => '700', 'label' => __( '700', 'kirki' ), ], [ 'value' => '700italic', 'label' => __( '700 Italic', 'kirki' ), ], [ 'value' => '800', 'label' => __( '800', 'kirki' ), ], [ 'value' => '800italic', 'label' => __( '800 Italic', 'kirki' ), ], [ 'value' => '900', 'label' => __( '900', 'kirki' ), ], [ 'value' => '900italic', 'label' => __( '900 Italic', 'kirki' ), ], ]; foreach ( self::$complete_variants as $variants ) { self::$complete_variant_labels[ $variants['value'] ] = $variants['label']; } $this->add_sub_fields( $args ); add_action( 'customize_controls_enqueue_scripts', [ $this, 'enqueue_control_scripts' ] ); add_action( 'customize_preview_init', [ $this, 'enqueue_preview_scripts' ] ); add_filter( 'kirki_output_control_classnames', [ $this, 'output_control_classnames' ] ); } /** * Add sub-fields. * * @access private * @since 1.0 * @param array $args The field arguments. * @return void */ private function add_sub_fields( $args ) { $args['kirki_config'] = isset( $args['kirki_config'] ) ? $args['kirki_config'] : 'global'; $defaults = isset( $args['default'] ) ? $args['default'] : []; /** * Add a hidden field, the label & description. */ new \Kirki\Field\Generic( wp_parse_args( [ 'sanitize_callback' => isset( $args['sanitize_callback'] ) ? $args['sanitize_callback'] : [ __CLASS__, 'sanitize' ], 'wrapper_opts' => [ 'gap' => 'small', ], 'input_attrs' => '', 'choices' => [ 'type' => 'hidden', 'parent_type' => 'kirki-typography', ], ], $args ) ); $args['parent_setting'] = $args['settings']; $args['output'] = []; $args['wrapper_attrs'] = [ 'data-kirki-parent-control-type' => 'kirki-typography', ]; if ( isset( $args['transport'] ) && 'auto' === $args['transport'] ) { $args['transport'] = 'postMessage'; } /** * Add font-family selection controls. * These include font-family and variant. * They are grouped here because all they are required. * in order to get the right googlefont variant. */ if ( isset( $args['default']['font-family'] ) ) { $args['wrapper_attrs']['kirki-typography-subcontrol-type'] = 'font-family'; /** * Add font-family control. */ new \Kirki\Field\ReactSelect( wp_parse_args( [ 'label' => esc_html__( 'Font Family', 'kirki' ), 'description' => '', 'settings' => $args['settings'] . '[font-family]', 'default' => isset( $args['default']['font-family'] ) ? $args['default']['font-family'] : '', 'input_attrs' => $this->filter_preferred_choice_setting( 'input_attrs', 'font-family', $args ), 'choices' => [], // The choices will be populated later inside `get_font_family_choices` function in this file. 'css_vars' => [], 'output' => [], ], $args ) ); /** * Add font variant. */ $font_variant = isset( $args['default']['variant'] ) ? $args['default']['variant'] : 'regular'; if ( isset( $args['default']['font-weight'] ) ) { $font_variant = 400 === $args['default']['font-weight'] || '400' === $args['default']['font-weight'] ? 'regular' : $args['default']['font-weight']; } $args['wrapper_attrs']['kirki-typography-subcontrol-type'] = 'font-variant'; new \Kirki\Field\ReactSelect( wp_parse_args( [ 'label' => esc_html__( 'Font Variant', 'kirki' ), 'description' => '', 'settings' => $args['settings'] . '[variant]', 'default' => $font_variant, 'input_attrs' => $this->filter_preferred_choice_setting( 'input_attrs', 'variant', $args ), 'choices' => [], // The choices will be populated later inside `get_variant_choices` function in this file. 'css_vars' => [], 'output' => [], ], $args ) ); } $font_size_field_specified = isset( $defaults['font-size'] ); $color_field_specified = isset( $defaults['color'] ); if ( $font_size_field_specified || $color_field_specified ) { $group = [ 'font-size' => [ 'type' => 'dimension', 'label' => esc_html__( 'Font Size', 'kirki' ), 'is_specified' => $font_size_field_specified, ], 'color' => [ 'type' => 'react-colorful', 'label' => esc_html__( 'Font Color', 'kirki' ), 'is_specified' => $color_field_specified, 'choices' => [ 'alpha' => true, 'label_style' => 'top', ], ], ]; $this->generate_controls_group( $group, $args ); } $text_align_field_specified = isset( $defaults['text-align'] ); $text_transform_field_specified = isset( $defaults['text-transform'] ); if ( $text_align_field_specified || $text_transform_field_specified ) { $group = [ 'text-align' => [ 'type' => 'react-select', 'label' => esc_html__( 'Text Align', 'kirki' ), 'is_specified' => $text_align_field_specified, 'choices' => [ 'initial' => esc_html__( 'Initial', 'kirki' ), 'left' => esc_html__( 'Left', 'kirki' ), 'center' => esc_html__( 'Center', 'kirki' ), 'right' => esc_html__( 'Right', 'kirki' ), 'justify' => esc_html__( 'Justify', 'kirki' ), ], ], 'text-transform' => [ 'type' => 'react-select', 'label' => esc_html__( 'Text Transform', 'kirki' ), 'is_specified' => $text_transform_field_specified, 'choices' => [ 'none' => esc_html__( 'None', 'kirki' ), 'capitalize' => esc_html__( 'Capitalize', 'kirki' ), 'uppercase' => esc_html__( 'Uppercase', 'kirki' ), 'lowercase' => esc_html__( 'Lowercase', 'kirki' ), ], ], ]; $this->generate_controls_group( $group, $args ); } $text_decoration_field_specified = isset( $defaults['text-decoration'] ); if ( $text_decoration_field_specified ) { $group = [ 'text-decoration' => [ 'type' => 'react-select', 'label' => esc_html__( 'Text Decoration', 'kirki' ), 'is_specified' => $text_decoration_field_specified, 'choices' => [ 'none' => esc_html__( 'None', 'kirki' ), 'underline' => esc_html__( 'Underline', 'kirki' ), 'line-through' => esc_html__( 'Line Through', 'kirki' ), 'overline' => esc_html__( 'Overline', 'kirki' ), 'solid' => esc_html__( 'Solid', 'kirki' ), 'wavy' => esc_html__( 'Wavy', 'kirki' ), ], ], ]; $this->generate_controls_group( $group, $args ); } $line_height_field_specified = isset( $defaults['line-height'] ); $letter_spacing_field_specified = isset( $defaults['letter-spacing'] ); if ( $line_height_field_specified || $letter_spacing_field_specified ) { $group = [ 'line-height' => [ 'type' => 'dimension', 'label' => esc_html__( 'Line Height', 'kirki' ), 'is_specified' => $line_height_field_specified, ], 'letter-spacing' => [ 'type' => 'dimension', 'label' => esc_html__( 'Letter Spacing', 'kirki' ), 'is_specified' => $letter_spacing_field_specified, ], ]; $this->generate_controls_group( $group, $args ); } $margin_top_field_specified = isset( $defaults['margin-top'] ); $margin_bottom_field_specified = isset( $defaults['margin-bottom'] ); if ( $margin_top_field_specified || $margin_bottom_field_specified ) { $group = [ 'margin-top' => [ 'type' => 'dimension', 'label' => esc_html__( 'Margin Top', 'kirki' ), 'is_specified' => $margin_top_field_specified, ], 'margin-bottom' => [ 'type' => 'dimension', 'label' => esc_html__( 'Margin Bottom', 'kirki' ), 'is_specified' => $margin_bottom_field_specified, ], ]; $this->generate_controls_group( $group, $args ); } } /** * Generate controls group. * * @param array $group The group data. * @param array $args The field args. */ public function generate_controls_group( $group, $args ) { $total_specified = 0; $field_width = 100; foreach ( $group as $css_prop => $control ) { if ( $control['is_specified'] ) { $total_specified++; } } if ( $total_specified > 1 ) { $field_width = floor( 100 / $total_specified ); } $group_count = 0; foreach ( $group as $css_prop => $control ) { if ( $control['is_specified'] ) { $group_count++; $group_classname = 'kirki-group-item'; $group_classname .= 1 === $group_count ? ' kirki-group-start' : ( $group_count === $total_specified ? ' kirki-group-end' : '' ); $control_class = str_ireplace( '-', ' ', $control['type'] ); $control_class = ucwords( $control_class ); $control_class = str_replace( ' ', '', $control_class ); $control_class = '\\Kirki\\Field\\' . $control_class; new $control_class( wp_parse_args( [ 'label' => isset( $control['label'] ) ? $control['label'] : '', 'description' => isset( $control['description'] ) ? $control['description'] : '', 'settings' => $args['settings'] . '[' . $css_prop . ']', 'default' => $args['default'][ $css_prop ], 'wrapper_attrs' => wp_parse_args( [ 'data-kirki-typography-css-prop' => $css_prop, 'kirki-typography-subcontrol-type' => $css_prop, 'class' => '{default_class} ' . $group_classname . ' kirki-w' . $field_width, ], $args['wrapper_attrs'] ), 'input_attrs' => $this->filter_preferred_choice_setting( 'input_attrs', $css_prop, $args ), 'choices' => ( isset( $control['choices'] ) ? $control['choices'] : [] ), 'css_vars' => [], 'output' => [], ], $args ) ); } } } /** * Sanitizes typography controls * * @static * @since 1.0 * @param array $value The value. * @return array */ public static function sanitize( $value ) { if ( ! is_array( $value ) ) { return []; } foreach ( $value as $key => $val ) { switch ( $key ) { case 'font-family': $value['font-family'] = sanitize_text_field( $val ); break; case 'variant': // Use 'regular' instead of 400 for font-variant. $value['variant'] = ( 400 === $val || '400' === $val ) ? 'regular' : $val; // Get font-weight from variant. $value['font-weight'] = filter_var( $value['variant'], FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION ); $value['font-weight'] = ( 'regular' === $value['variant'] || 'italic' === $value['variant'] ) ? '400' : (string) absint( $value['font-weight'] ); // Get font-style from variant. if ( ! isset( $value['font-style'] ) ) { $value['font-style'] = ( false === strpos( $value['variant'], 'italic' ) ) ? 'normal' : 'italic'; } break; case 'text-align': if ( ! in_array( $val, [ '', 'inherit', 'left', 'center', 'right', 'justify' ], true ) ) { $value['text-align'] = ''; } break; case 'text-transform': if ( ! in_array( $val, [ '', 'none', 'capitalize', 'uppercase', 'lowercase', 'initial', 'inherit' ], true ) ) { $value['text-transform'] = ''; } break; case 'text-decoration': if ( ! in_array( $val, [ '', 'none', 'underline', 'overline', 'line-through', 'solid', 'wavy', 'initial', 'inherit' ], true ) ) { $value['text-transform'] = ''; } break; case 'color': $value['color'] = '' === $value['color'] ? '' : \Kirki\Field\ReactColorful::sanitize( $value['color'] ); break; default: $value[ $key ] = sanitize_text_field( $value[ $key ] ); } } return $value; } /** * Enqueue scripts & styles. * * @access public * @since 1.0 * @return void */ public function enqueue_control_scripts() { wp_enqueue_style( 'kirki-control-typography', \Kirki\URL::get_from_path( dirname( dirname( __DIR__ ) ) . '/dist/control.css' ), [], '1.0' ); wp_enqueue_script( 'kirki-control-typography', \Kirki\URL::get_from_path( dirname( dirname( __DIR__ ) ) . '/dist/control.js' ), [], '1.0', true ); wp_localize_script( 'kirki-control-typography', 'kirkiTypographyControls', self::$typography_controls ); $args = $this->args; $variants = []; // Add custom variants (for custom fonts) to the $variants. if ( isset( $args['choices'] ) && isset( $args['choices']['fonts'] ) && isset( $args['choices']['fonts']['families'] ) ) { // If $args['choices']['fonts']['families'] exists, then loop it. foreach ( $args['choices']['fonts']['families'] as $font_family_key => $font_family_value ) { // Then loop the $font_family_value['children]. foreach ( $font_family_value['children'] as $font_family ) { // Then check if $font_family['id'] exists in variants argument. if ( isset( $args['choices']['fonts']['variants'] ) && isset( $args['choices']['fonts']['variants'][ $font_family['id'] ] ) ) { // Create new array if $variants[ $font_family['id'] ] doesn't exist. if ( ! isset( $variants[ $font_family['id'] ] ) ) { $variants[ $font_family['id'] ] = []; } // The $custom_variant here can be something like "400italic" or "italic". foreach ( $args['choices']['fonts']['variants'][ $font_family['id'] ] as $custom_variant ) { // Check if $custom_variant exists in self::$complete_variant_labels. if ( isset( self::$complete_variant_labels[ $custom_variant ] ) ) { // If it exists, assign it to $variants[ $font_family['id'] ], so that they will be available in JS object. array_push( $variants[ $font_family['id'] ], [ 'value' => $custom_variant, 'label' => self::$complete_variant_labels[ $custom_variant ], ] ); } // End of isset(self::$complete_variant_labels[$font_family['id']]) if. } // End of $args['choices']['fonts']['variants'][ $font_family['id'] foreach. } } // End of $font_family_value['children'] foreach. } // End of $args['choices']['fonts']['families'] foreach. } // End of $args['choices']['fonts']['families'] if. if ( ! isset( $args['choices']['fonts'] ) || ! isset( $args['choices']['fonts']['standard'] ) ) { $standard_fonts = Fonts::get_standard_fonts(); foreach ( $standard_fonts as $font ) { if ( isset( $font['variants'] ) ) { // Create new array if $variants[ $font['stack'] ] doesn't exist. if ( ! isset( $variants[ $font['stack'] ] ) ) { $variants[ $font['stack'] ] = []; } // The $std_variant here can be something like "400italic" or "italic". foreach ( $font['variants'] as $std_variant ) { // Check if $std_variant exists in self::$complete_variant_labels. if ( isset( self::$complete_variant_labels[ $std_variant ] ) ) { // If it exists, assign it to $variants[ $font['stack'] ], so that they will be available in JS object. array_push( $variants[ $font['stack'] ], [ 'value' => $std_variant, 'label' => self::$complete_variant_labels[ $std_variant ], ] ); } // End of isset(self::$complete_variant_labels[$font_family['id']]) if. } // End of $args['choices']['fonts']['variants'][ $font_family['id'] foreach. } } } elseif ( is_array( $args['choices']['fonts']['standard'] ) ) { foreach ( $args['choices']['fonts']['standard'] as $key => $val ) { $key = ( is_int( $key ) ) ? $val : $key; if ( isset( $val['variants'] ) ) { // Create new array if $variants[ $font['stack'] ] doesn't exist. if ( ! isset( $variants[ $key ] ) ) { $variants[ $key ] = []; } // The $std_variant here can be something like "400italic" or "italic". foreach ( $val['variants'] as $std_variant ) { // Check if $std_variant exists in self::$complete_variant_labels. if ( isset( self::$complete_variant_labels[ $std_variant ] ) ) { // If it exists, assign it to $variants[ $font['stack'] ], so that they will be available in JS object. array_push( $variants[ $key ], [ 'value' => $std_variant, 'label' => self::$complete_variant_labels[ $std_variant ], ] ); } // End of isset(self::$complete_variant_labels[$font_family['id']]) if. } // End of $args['choices']['fonts']['variants'][ $font_family['id'] foreach. } } } // Scripts inside this block will only be executed once. if ( ! self::$fonts_var_added ) { wp_localize_script( 'kirki-control-typography', 'kirkiFontVariants', [ 'standard' => self::$std_variants, 'complete' => self::$complete_variants, ] ); $google = new GoogleFonts(); wp_localize_script( 'kirki-control-typography', 'kirkiGoogleFonts', $google->get_array() ); wp_add_inline_script( 'kirki-control-typography', 'var kirkiCustomVariants = {};', 'before' ); self::$fonts_var_added = true; } // This custom variants will be available for each typography control. $custom_variant_key = str_ireplace( ']', '', $args['settings'] ); $custom_variant_key = str_ireplace( '[', '_', $custom_variant_key ); $custom_variant_value = wp_json_encode( Helper::prepare_php_array_for_js( $variants ) ); wp_add_inline_script( 'kirki-control-typography', 'kirkiCustomVariants["' . $custom_variant_key . '"] = ' . $custom_variant_value . ';', $variants ); } /** * Enqueue scripts for customize_preview_init. * * @access public * @since 1.0 * @return void */ public function enqueue_preview_scripts() { wp_enqueue_script( 'kirki-preview-typography', \Kirki\URL::get_from_path( dirname( dirname( __DIR__ ) ) . '/dist/preview.js' ), [ 'wp-hooks' ], '1.0', true ); if ( ! self::$preview_var_added ) { $google = new GoogleFonts(); wp_localize_script( 'kirki-preview-typography', 'kirkiGoogleFontNames', $google->get_google_font_names() ); self::$preview_var_added = true; } } /** * Prefer control specific value over field value * * @access public * @since 4.0 * @param $setting * @param $choice * @param $args * * @return string */ public function filter_preferred_choice_setting( $setting, $choice, $args ) { // Fail early. if ( ! isset( $args[ $setting ] ) ) { return ''; } // If a specific field for the choice is set if ( isset( $args[ $setting ][ $choice ] ) ) { return $args[ $setting ][ $choice ]; } // Unset input_attrs of all other choices. foreach ( $args['choices'] as $id => $set ) { if ( $id !== $choice && isset( $args[ $setting ][ $id ] ) ) { unset( $args[ $setting ][ $id ] ); } elseif ( ! isset( $args[ $setting ][ $id ] ) ) { $args[ $setting ] = ''; } } return $args[ $setting ]; } /** * Populate the font family choices. * * It's separated from the `add_sub_field` function to prevent a bug * when hooking a function into `kirki_fonts_standard_fonts` hook after registering the field. * * When a function is hooked to `kirki_fonts_standard_fonts` before registering the field, it will work. * But if it's hooked after field registration, then the function won't be available. * * @access private * @since 1.0.1 * * @return array */ private function get_font_family_choices() { $args = $this->args; // Figure out how to sort the fonts. $sorting = 'alpha'; $max_fonts = 9999; $google = new GoogleFonts(); if ( isset( $args['choices'] ) && isset( $args['choices']['fonts'] ) && isset( $args['choices']['fonts']['google'] ) && ! empty( $args['choices']['fonts']['google'] ) ) { if ( in_array( $args['choices']['fonts']['google'][0], [ 'alpha', 'popularity', 'trending' ], true ) ) { $sorting = $args['choices']['fonts']['google'][0]; if ( isset( $args['choices']['fonts']['google'][1] ) && is_int( $args['choices']['fonts']['google'][1] ) ) { $max_fonts = (int) $args['choices']['fonts']['google'][1]; } $g_fonts = $google->get_google_fonts_by_args( [ 'sort' => $sorting, 'count' => $max_fonts, ] ); } else { $g_fonts = $args['choices']['fonts']['google']; } } else { $g_fonts = $google->get_google_fonts_by_args( [ 'sort' => $sorting, 'count' => $max_fonts, ] ); } $std_fonts = []; if ( ! isset( $args['choices']['fonts'] ) || ! isset( $args['choices']['fonts']['standard'] ) ) { $standard_fonts = Fonts::get_standard_fonts(); foreach ( $standard_fonts as $font ) { $std_fonts[ $font['stack'] ] = $font['label']; } } elseif ( is_array( $args['choices']['fonts']['standard'] ) ) { foreach ( $args['choices']['fonts']['standard'] as $key => $val ) { $key = ( \is_int( $key ) ) ? $val : $key; $std_fonts[ $key ] = $val; } } $choices = []; $choices['default'] = [ esc_html__( 'Defaults', 'kirki' ), [ '' => esc_html__( 'Default', 'kirki' ), ], ]; if ( isset( $args['choices'] ) && isset( $args['choices']['fonts'] ) && isset( $args['choices']['fonts']['families'] ) ) { // Implementing the custom font families. foreach ( $args['choices']['fonts']['families'] as $font_family_key => $font_family_value ) { if ( ! isset( $choices[ $font_family_key ] ) ) { $choices[ $font_family_key ] = []; } $family_opts = []; foreach ( $font_family_value['children'] as $font_family ) { $family_opts[ $font_family['id'] ] = $font_family['text']; } $choices[ $font_family_key ] = [ $font_family_value['text'], $family_opts, ]; } } $choices['standard'] = [ esc_html__( 'Standard Fonts', 'kirki' ), $std_fonts, ]; $choices['google'] = [ esc_html__( 'Google Fonts', 'kirki' ), array_combine( array_values( $g_fonts ), array_values( $g_fonts ) ), ]; if ( empty( $choices['standard'][1] ) ) { $choices = array_combine( array_values( $g_fonts ), array_values( $g_fonts ) ); } elseif ( empty( $choices['google'][1] ) ) { $choices = $std_fonts; } return $choices; } /** * Get custom variant choices (for custom fonts). * * It's separated from the `add_sub_field` function to prevent a bug * when hooking a function into `kirki_fonts_standard_fonts` hook after registering the field. * * When a function is hooked to `kirki_fonts_standard_fonts` before registering the field, it will work. * But if it's hooked after field registration, then the function won't be available. * * @access private * @since 1.0.2 * * @return array */ private function get_variant_choices() { $args = $this->args; $choices = self::$std_variants; // Implementing the custom variants for custom fonts. if ( isset( $args['choices'] ) && isset( $args['choices']['fonts'] ) && isset( $args['choices']['fonts']['families'] ) ) { $choices = []; // If $args['choices']['fonts']['families'] exists, then loop it. foreach ( $args['choices']['fonts']['families'] as $font_family_key => $font_family_value ) { // Then loop the $font_family_value['children]. foreach ( $font_family_value['children'] as $font_family ) { // Then check if $font_family['id'] exists in $args['choices']['fonts']['variants']. if ( isset( $args['choices']['fonts']['variants'] ) && isset( $args['choices']['fonts']['variants'][ $font_family['id'] ] ) ) { // The $custom_variant here can be something like "400italic" or "italic". foreach ( $args['choices']['fonts']['variants'][ $font_family['id'] ] as $custom_variant ) { // Check if $custom_variant exists in self::$complete_variant_labels. if ( isset( self::$complete_variant_labels[ $custom_variant ] ) ) { // If it exists, assign it to $choices. array_push( $choices, [ 'value' => $custom_variant, 'label' => self::$complete_variant_labels[ $custom_variant ], ] ); } // End of isset(self::$complete_variant_labels[$font_family['id']]) if. } // End of $args['choices']['fonts']['variants'][ $font_family['id'] foreach. } } // End of $font_family_value['children'] foreach. } // End of $args['choices']['fonts']['families'] foreach. } // End of $args['choices']['fonts']['families'] if. return $choices; } /** * Filter arguments before creating the control. * * @access public * @since 0.1 * @param array $args The field arguments. * @param WP_Customize_Manager $wp_customize The customizer instance. * @return array */ public function filter_control_args( $args, $wp_customize ) { if ( $args['settings'] === $this->args['settings'] . '[font-family]' ) { $args = parent::filter_control_args( $args, $wp_customize ); $args['choices'] = $this->get_font_family_choices(); } if ( $args['settings'] === $this->args['settings'] . '[variant]' ) { $args = parent::filter_control_args( $args, $wp_customize ); $args['choices'] = $this->get_variant_choices(); } return $args; } /** * Adds a custom output class for typography fields. * * @access public * @since 1.0 * @param array $classnames The array of classnames. * @return array */ public function output_control_classnames( $classnames ) { $classnames['kirki-typography'] = '\Kirki\Field\CSS\Typography'; return $classnames; } /** * Override parent method. No need to register any setting. * * @access public * @since 0.1 * @param WP_Customize_Manager $wp_customize The customizer instance. * @return void */ public function add_setting( $wp_customize ) {} /** * Override the parent method. No need for a control. * * @access public * @since 0.1 * @param WP_Customize_Manager $wp_customize The customizer instance. * @return void */ public function add_control( $wp_customize ) {} } PK[\<  -field-typography/src/Field/CSS/Typography.phpnu[field['default'][ $property ] ) ) { continue; } // Early exit if the value is not saved in the values. if ( ! isset( $value[ $property ] ) || ! $value[ $property ] ) { continue; } // Early exit if we use "choice" but not for this property. if ( isset( $output['choice'] ) && $output['choice'] !== $property ) { continue; } // Take care of variants. if ( 'variant' === $property && isset( $value['variant'] ) && ! empty( $value['variant'] ) ) { // Get the font_weight. $font_weight = str_replace( 'italic', '', $value['variant'] ); $font_weight = ( in_array( $font_weight, [ '', 'regular' ], true ) ) ? '400' : $font_weight; // Is this italic? $is_italic = ( false !== strpos( $value['variant'], 'italic' ) ); $this->styles[ $output['media_query'] ][ $output['element'] ]['font-weight'] = $font_weight; if ( $is_italic ) { $this->styles[ $output['media_query'] ][ $output['element'] ]['font-style'] = 'italic'; } continue; } $property_value = $this->process_property_value( $property, $value[ $property ] ); $property = ( isset( $output['choice'] ) && isset( $output['property'] ) ) ? $output['property'] : $property; $property_value = ( is_array( $property_value ) && isset( $property_value[0] ) ) ? $property_value[0] : $property_value; $this->styles[ $output['media_query'] ][ $output['element'] ][ $property ] = $output['prefix'] . $property_value . $output['suffix']; } } } PK[+ field-typography/src/control.jsnu[import "./control.scss"; /* global kirkiTypographyControls, kirkiGoogleFonts, kirkiFontVariants */ function kirkiTypographyCompositeControlFontProperties(id, value) { const control = wp.customize.control(id); if ("undefined" === typeof control) { return; } value = value || control.setting.get(); const isGoogle = value["font-family"] && kirkiGoogleFonts.items[value["font-family"]]; const variantValue = value["variant"] ? value["variant"].toString() : "regular"; const variantControl = wp.customize.control(id + "[variant]"); const sortVariants = function (a, b) { if (a < b) return -1; if (a > b) return 1; return 0; }; let variants = []; if (isGoogle) { let gFontVariants = kirkiGoogleFonts.items[value["font-family"]].variants; gFontVariants.sort(sortVariants); kirkiFontVariants.complete.forEach(function (variant) { if (-1 !== gFontVariants.indexOf(variant.value)) { variants.push({ value: variant.value, label: variant.label, }); } }); } else { let customVariantKey = id.replace(/]/g, ''); customVariantKey = customVariantKey.replace(/\[/g, '_'); if (kirkiCustomVariants[customVariantKey][value["font-family"]]) { variants = kirkiCustomVariants[customVariantKey][value["font-family"]]; } else { variants = kirkiFontVariants.standard; } } // Set the font-style value. if (-1 !== variantValue.indexOf("i")) { value["font-style"] = "italic"; } else { value["font-style"] = "normal"; } // Set the font-weight value. value["font-weight"] = "regular" === variantValue || "italic" === variantValue ? 400 : parseInt(variantValue, 10); if (variantControl) { // Hide/show variant options depending on which are available for this font-family. if (1 < variants.length && control.active()) { variantControl.activate(); } else { // If there's only 1 variant to choose from, we can hide the control. variantControl.deactivate(); } variantControl.params.choices = variants; variantControl.formattedOptions = []; variantControl.destroy(); if (!variants.includes(variantValue)) { // If the selected font-family doesn't support the currently selected variant, switch to "regular". variantControl.doSelectAction("selectOption", "regular"); } else { variantControl.doSelectAction("selectOption", variantValue); } } wp.hooks.addAction( "kirki.dynamicControl.initKirkiControl", "kirki", function (controlInit) { if (variantControl && id + "[variant]" === controlInit.id) { } } ); } jQuery(document).ready(function () { _.each(kirkiTypographyControls, function (id) { kirkiTypographyCompositeControlFontProperties(id); wp.customize(id, function (value) { value.bind(function (newval) { kirkiTypographyCompositeControlFontProperties(id, newval); }); }); }); }); PK[ln00field-typography/LICENSEnu[MIT License Copyright (c) 2019 kirki-framework Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. PK[data-option/src/Option.phpnu[ $part ) { /** * Skip the 1st item, it's already been dealt with * when we got the value initially right before this loop. */ if ( 0 === $key ) { continue; } $part = str_replace( ']', '', $part ); /** * If the item exists in the value, then change $value to the item. * This runs recursively for all parts until we get to the end. */ if ( is_array( $value ) && isset( $value[ $part ] ) ) { $value = $value[ $part ]; continue; } /** * If we got here, the item was not found in the value. * We need to change the value accordingly depending on whether * this is the last item in the loop or not. */ $value = ( isset( $parts[ $key + 1 ] ) ) ? [] : ''; } } return $value; } /** * Allow filtering the arguments. * * @since 0.1 * @param array $args The arguments. * @param WP_Customize_Manager $customizer The customizer instance. * @return array Return the arguments. */ public function add_setting_args( $args, $customizer ) { // If this is not an option, early exit. if ( ! isset( $args['option_type'] ) || 'option' !== $args['option_type'] ) { return $args; } // Set "type" argument to option. $args['type'] = 'option'; return $this->maybe_change_settings( $args ); } /** * Allow filtering the arguments. * * @since 0.1 * @param array $args The arguments. * @param WP_Customize_Manager $customizer The customizer instance. * @return array Return the arguments. */ public function add_control_args( $args, $customizer ) { // If this is not an option, early exit. if ( ! isset( $args['option_type'] ) || 'option' !== $args['option_type'] ) { return $args; } return $this->maybe_change_settings( $args ); } /** * Change the settings argument. * * @access private * @since 1.0 * @param array $args The arguments. * @return array Returns modified array with tweaks to the [settings] argument if needed. */ private function maybe_change_settings( $args ) { // Check if we have an option-name defined. if ( isset( $args['option_name'] ) ) { if ( empty( $args['option_name'] ) ) { return $args; } if ( isset( $args['settings'] ) && $args['settings'] && false !== strpos( $args['settings'], $args['option_name'] . '[' ) ) { return $args; } if ( false === strpos( $args['settings'], '[' ) ) { // ? Bagus: in line above, it's obvious that '[' is not found in $args['settings']. But why do we explode it using '[' here? $parts = explode( '[', $args['settings'] ); $final_parts = [ $args['option_name'] ]; foreach ( $parts as $part ) { $final_parts[] = $part; } $args['settings'] = \implode( '][', $final_parts ) . ']'; $args['settings'] = str_replace( $args['option_name'] . '][', $args['option_name'] . '[', $args['settings'] ); } } return $args; } } PK[zdata-option/composer.jsonnu[{ "name": "kirki-framework/data-option", "type": "library", "keywords": [ "WordPress", "Customizer" ], "description": "Hooks and tweaks to allow Kirki Fields to save options.", "homepage": "https://kirki.org/", "license": "MIT", "authors": [ { "name": "Kirki Framework", "email": "connect@mapsteps.com" } ], "require": { "php": ">=7.0" }, "autoload": { "psr-4": { "Kirki\\Data\\": "src" } } } PK[n800data-option/LICENSEnu[MIT License Copyright (c) 2019 Kirki Framework Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. PK[(module-panels/src/Panel_Types/Nested.phpnu[PK[p 6module-panels/src/Panel.phpnu[PK[ |module-panels/src/script.jsnu[PK[yymodule-panels/composer.jsonnu[PK[; EE!module-panels/LICENSEnu[PK[H &control-palette/dist/control.jsnu[PK[xwQQ &control-palette/dist/control.cssnu[PK[ #~+control-palette/dist/control.js.mapnu[PK[_Enu u $i-control-palette/dist/control.css.mapnu[PK[OHH%2:control-palette/src/Field/Palette.phpnu[PK[V' '>control-palette/src/Control/Palette.phpnu[PK[&z||%Icontrol-palette/src/control.jsnu[PK[pѼIcontrol-palette/composer.jsonnu[PK[ln00Lcontrol-palette/LICENSEnu[PK[6_ oQfield-dimensions/dist/preview.jsnu[PK[k!]))!Sfield-dimensions/dist/control.cssnu[PK[Yy y $Tfield-dimensions/dist/preview.js.mapnu[PK[Z``%]field-dimensions/dist/control.css.mapnu[PK[#*^field-dimensions/src/preview.jsnu[PK[(2"#dfield-dimensions/src/Dimensions.phpnu[PK[j'field-dimensions/src/CSS/Dimensions.phpnu[PK[TFfield-dimensions/composer.jsonnu[PK[ln00field-dimensions/LICENSEnu[PK[β@2module-selective-refresh/src/Selective_Refresh.phpnu[PK[;f0 0 control-image/dist/control.jsnu[PK[bJ !control-image/dist/control.js.mapnu[PK[^ҥ!control-image/src/Field/Image.phpnu[PK[xO5%control-image/src/Field/CSS/Image.phpnu[PK[I=! ! #control-image/src/Control/Image.phpnu[PK[[vv<control-image/src/control.jsnu[PK[ 8control-image/composer.jsonnu[PK[ln00control-image/LICENSEnu[PK[Ȗ'HHucontrol-radio/dist/control.jsnu[PK[s control-radio/dist/control.cssnu[PK[*d!( control-radio/dist/control.js.mapnu[PK[M_s";control-radio/dist/control.css.mapnu[PK[P!v#control-radio/src/Field/Radio.phpnu[PK[q1',control-radio/src/Field/Radio_Image.phpnu[PK[zȚ+1control-radio/src/Field/Radio_Buttonset.phpnu[PK[̗w #6control-radio/src/Control/Radio.phpnu[PK[=ų! ! )^@control-radio/src/Control/Radio_Image.phpnu[PK[9e e -Mcontrol-radio/src/Control/Radio_Buttonset.phpnu[PK[=MJ]]Wcontrol-radio/src/control.jsnu[PK[`TTCYcontrol-radio/composer.jsonnu[PK[_EE7\control-radio/LICENSEnu[PK[S)`field-multicolor/src/Field/Multicolor.phpnu[PK[/{B55-{field-multicolor/src/Field/CSS/Multicolor.phpnu[PK[CYfield-multicolor/composer.jsonnu[PK[ln00Ņfield-multicolor/LICENSEnu[PK[5+=field-fontawesome/src/Field/FontAwesome.phpnu[PK[acc,field-fontawesome/src/Field/fontawesome.jsonnu[PK[;)gZfield-fontawesome/composer.jsonnu[PK[_EEYfield-fontawesome/LICENSEnu[PK[GҞ8 8 control-slider/dist/control.jsnu[PK[@y W W mcontrol-slider/dist/control.cssnu[PK[`k!(("control-slider/dist/control.js.mapnu[PK[5>#?control-slider/dist/control.css.mapnu[PK[$*Z688#control-slider/src/Field/Slider.phpnu[PK[ %, control-slider/src/Control/Slider.phpnu[PK[Y[control-slider/src/control.jsnu[PK[rW %pcontrol-slider/src/KirkiSliderForm.jsnu[PK[r (!control-slider/src/KirkiSliderControl.jsnu[PK[OYY.control-slider/composer.jsonnu[PK[Q *q1module-editor-styles/src/Editor_Styles.phpnu[PK[ ^,^"Amodule-editor-styles/composer.jsonnu[PK[ln00Dmodule-editor-styles/LICENSEnu[PK[%q(q(%WImodule-postmessage/src/postMessage.jsnu[PK[G(&rmodule-postmessage/src/Postmessage.phpnu[PK[^צ ycontrol-sortable/dist/control.jsnu[PK[DL  !ocontrol-sortable/dist/control.cssnu[PK[:$˅control-sortable/dist/control.js.mapnu[PK[5qq%ӎcontrol-sortable/dist/control.css.mapnu[PK[eW*o o 'control-sortable/src/Field/Sortable.phpnu[PK[kb  )_control-sortable/src/Control/Sortable.phpnu[PK[%ԩcontrol-sortable/src/control.jsnu[PK[Pcontrol-sortable/composer.jsonnu[PK[_EE;control-sortable/LICENSEnu[PK[Xȶcontrol-generic/dist/control.jsnu[PK[Tι#control-generic/dist/control.js.mapnu[PK[:JJ"control-generic/src/Field/Text.phpnu[PK[ ѣqq&control-generic/src/Field/Textarea.phpnu[PK[Mk%control-generic/src/Field/Generic.phpnu[PK[ײ˦ $ccontrol-generic/src/Field/Number.phpnu[PK[_J3599!]control-generic/src/Field/URL.phpnu[PK[  'control-generic/src/Control/Generic.phpnu[PK[!ZZTcontrol-generic/src/control.jsnu[PK[(:control-generic/composer.jsonnu[PK[ln00control-generic/LICENSEnu[PK[c t  {util/src/Setting/User_Meta.phpnu[PK[v util/src/Setting/Site_Option.phpnu[PK[c util/src/Util.phpnu[PK[,&util/src/MaterialColors.phpnu[PK[=b++"<util/src/Helper.phpnu[PK[22$hutil/composer.jsonnu[PK[_EE jutil/LICENSEnu[PK[ ocontrol-base/dist/control.jsnu[PK[O~ׇ22/}control-base/dist/control.cssnu[PK[:ae3e3 control-base/dist/control.js.mapnu[PK[f|-**!ccontrol-base/dist/control.css.mapnu[PK[\1#control-base/src/dynamic-control.jsnu[PK[p5& !control-base/src/Control/Base.phpnu[PK[׃55% control-base/src/control.jsnu[PK[bWW control-base/composer.jsonnu[PK[ln00F control-base/LICENSEnu[PK[NkMMmodule-preset/src/Preset.phpnu[PK[YZSmodule-preset/src/script.jsnu[PK[wmodule-tooltips/dist/control.jsnu[PK[V module-tooltips/dist/control.cssnu[PK[/5``#!module-tooltips/dist/control.js.mapnu[PK[< $t1module-tooltips/dist/control.css.mapnu[PK[|<module-tooltips/src/control.jsnu[PK[%bb Emodule-tooltips/src/Tooltips.phpnu[PK[U DMmodule-webfonts/src/Webfonts.phpnu[PK[[[&tXmodule-webfonts/src/Webfonts/Fonts.phpnu[PK[h#U'%omodule-webfonts/src/Webfonts/Google.phpnu[PK[ yp&Umodule-webfonts/src/Webfonts/Embed.phpnu[PK[t11&module-webfonts/src/Webfonts/Async.phpnu[PK[w#hh+module-webfonts/src/Webfonts/Downloader.phpnu[PK[`Njpp@module-webfonts/src/assets/scripts/vendor-typekit/src/closure.jsnu[PK[%%Mmodule-webfonts/src/assets/scripts/vendor-typekit/src/core/fontwatchrunner.jsnu[PK[)u E[module-webfonts/src/assets/scripts/vendor-typekit/src/core/webfont.jsnu[PK[..Gmodule-webfonts/src/assets/scripts/vendor-typekit/src/core/domhelper.jsnu[PK[I7-module-webfonts/src/assets/scripts/vendor-typekit/src/core/fontwatcher.jsnu[PK[Ќ(״H?module-webfonts/src/assets/scripts/vendor-typekit/src/core/initialize.jsnu[PK[NgvvNHmodule-webfonts/src/assets/scripts/vendor-typekit/src/core/fontmoduleloader.jsnu[PK[Ox BMmodule-webfonts/src/assets/scripts/vendor-typekit/src/core/font.jsnu[PK[T3SCZmodule-webfonts/src/assets/scripts/vendor-typekit/src/core/nativefontwatchrunner.jsnu[PK[7JXbmodule-webfonts/src/assets/scripts/vendor-typekit/src/core/cssclassname.jsnu[PK[CNgmodule-webfonts/src/assets/scripts/vendor-typekit/src/core/stylesheetwaiter.jsnu[PK[]3SSH[lmodule-webfonts/src/assets/scripts/vendor-typekit/src/core/fontmodule.jsnu[PK[WG&nmodule-webfonts/src/assets/scripts/vendor-typekit/src/core/fontruler.jsnu[PK[u%ggMtmodule-webfonts/src/assets/scripts/vendor-typekit/src/core/eventdispatcher.jsnu[PK[$ӞImodule-webfonts/src/assets/scripts/vendor-typekit/src/modules/fontdeck.jsnu[PK[89[h h Imodule-webfonts/src/assets/scripts/vendor-typekit/src/modules/monotype.jsnu[PK[-Hmodule-webfonts/src/assets/scripts/vendor-typekit/src/modules/typekit.jsnu[PK[jY\module-webfonts/src/assets/scripts/vendor-typekit/src/modules/google/fontapiurlbuilder.jsnu[PK[vj$Umodule-webfonts/src/assets/scripts/vendor-typekit/src/modules/google/googlefontapi.jsnu[PK[5Umodule-webfonts/src/assets/scripts/vendor-typekit/src/modules/google/fontapiparser.jsnu[PK[,}3RRG9module-webfonts/src/assets/scripts/vendor-typekit/src/modules/custom.jsnu[PK[YtQiiAmodule-webfonts/src/assets/scripts/vendor-typekit/src/modules.ymlnu[PK[m00Bmodule-webfonts/src/assets/scripts/vendor-typekit/webfontloader.jsnu[PK[3׷i i *'module-section-icons/src/Section_Icons.phpnu[PK['|!module-section-icons/src/icons.jsnu[PK["module-section-icons/composer.jsonnu[PK[ln00module-section-icons/LICENSEnu[PK[  "googlefonts/src/webfont-files.jsonnu[PK[$@ @ {googlefonts/src/webfonts.jsonnu[PK[vSKK"googlefonts/src/webfont-names.jsonnu[PK[-*&)'googlefonts/src/GoogleFonts.phpnu[PK[9+H#z;control-select/src/Field/Preset.phpnu[PK[ϴ!WW#?control-select/src/Field/Select.phpnu[PK[̣ݾ+ZAcontrol-select/src/Field/Dropdown_Pages.phpnu[PK['8sEcontrol-select/composer.jsonnu[PK[^ &Hcontrol-react-colorful/dist/preview.jsnu[PK[Q׾""&Lcontrol-react-colorful/dist/control.jsnu[PK[Y㰢'w7control-react-colorful/dist/control.cssnu[PK[s}++*Ncontrol-react-colorful/dist/preview.js.mapnu[PK[$[*Pacontrol-react-colorful/dist/control.js.mapnu[PK[B55+7control-react-colorful/dist/control.css.mapnu[PK[Ɂ)")"2mcontrol-react-colorful/src/Field/ReactColorful.phpnu[PK[*V V 6bcontrol-react-colorful/src/Field/CSS/ReactColorful.phpnu[PK[4control-react-colorful/src/Control/ReactColorful.phpnu[PK[+control-react-colorful/src/js/utils/util.jsnu[PK[c;control-react-colorful/src/js/utils/convertColorForInput.jsnu[PK[,@control-react-colorful/src/js/utils/convertColorForCustomizer.jsnu[PK[۽ <scontrol-react-colorful/src/js/utils/convertColorForPicker.jsnu[PK[ڒDbcontrol-react-colorful/src/js/components/KirkiReactColorfulCircle.jsnu[PK[GFhcontrol-react-colorful/src/js/components/KirkiReactColorfulSwatches.jsnu[PK['A Ccontrol-react-colorful/src/js/components/KirkiReactColorfulInput.jsnu[PK[q&&6control-react-colorful/src/js/hooks/useFocusOutside.jsnu[PK[ >>6control-react-colorful/src/js/hooks/useClickOutside.jsnu[PK[vfGG62control-react-colorful/src/js/hooks/useWindowResize.jsnu[PK[P11module-css/src/CSS.phpnu[PK[66)module-css/src/CSS/Property.phpnu[PK[k, i.module-css/src/CSS/Generator.phpnu[PK[>+Imodule-css/src/CSS/Property/Font_Family.phpnu[PK[lV0Mmodule-css/src/CSS/Property/Background_Image.phpnu[PK[Xo >3Rmodule-css/src/CSS/Property/Background_Position.phpnu[PK[8"--Ymodule-css/src/CSS/Output.phpnu[PK[=HHLJmodule-css/composer.jsonnu[PK[ln00Wmodule-css/LICENSEnu[PK[߸]SSɎfield/src/Field/None.phpnu[PK[hjߵ99dfield/src/Field.phpnu[PK[WOfield/composer.jsonnu[PK[ln00 +field/LICENSEnu[PK[ zNNurl-getter/src/URL.phpnu[PK[ %,control-color-palette/dist/control.jsnu[PK[%i&Scontrol-color-palette/dist/control.cssnu[PK[I!!)Kcontrol-color-palette/dist/control.js.mapnu[PK[sI*scontrol-color-palette/dist/control.css.mapnu[PK[1xcontrol-color-palette/src/Field/Color_Palette.phpnu[PK[?K>>2 control-color-palette/src/KirkiColorPaletteForm.jsnu[PK[ѹ  3E(control-color-palette/src/Control/Color_Palette.phpnu[PK[-$3control-color-palette/src/control.jsnu[PK[F0 54control-color-palette/src/KirkiColorPaletteControl.jsnu[PK[L#Acontrol-color-palette/composer.jsonnu[PK[z!MDcontrol-dashicons/dist/control.jsnu[PK[7"$Econtrol-dashicons/dist/control.cssnu[PK[aqq%Hcontrol-dashicons/dist/control.js.mapnu[PK[O\r99&Icontrol-dashicons/dist/control.css.mapnu[PK[Z55(iQcontrol-dashicons/src/Util/Dashicons.phpnu[PK[y@$)ccontrol-dashicons/src/Field/Dashicons.phpnu[PK[FgoTT+Alcontrol-dashicons/src/Control/Dashicons.phpnu[PK[ W ~control-dashicons/src/control.jsnu[PK[control-dashicons/composer.jsonnu[PK[_EEcontrol-dashicons/LICENSEnu[PK[#control-upload/src/Field/Upload.phpnu[PK[00%control-upload/src/Control/Upload.phpnu[PK["%rcontrol-upload/composer.jsonnu[PK[_EEcontrol-upload/LICENSEnu[PK[}3!control-color/src/Field/Color.phpnu[PK[_EEcontrol-color/LICENSEnu[PK[Jcompatibility/src/Scripts.phpnu[PK[SdaGbb 6compatibility/src/Deprecated.phpnu[PK[7h}EEcompatibility/src/Framework.phpnu[PK[J11|compatibility/src/Kirki.phpnu[PK[N]]compatibility/src/Config.phpnu[PK[PZcompatibility/src/Settings.phpnu[PK[yYBFBFcompatibility/src/Field.phpnu[PK[44( ?compatibility/src/deprecated/filters.phpnu[PK[@(Ncompatibility/src/deprecated/classes.phpnu[PK[˿!!*Scompatibility/src/deprecated/functions.phpnu[PK[E9$${Zcompatibility/src/Init.phpnu[PK[C} } ~compatibility/src/Modules.phpnu[PK[{{{compatibility/src/Values.phpnu[PK[](ncompatibility/src/scripts/wp-polyfill.jsnu[PK[AEu! compatibility/src/scripts/i18n.jsnu[PK[UՙUU" compatibility/src/scripts/hooks.jsnu[PK[$74   compatibility/src/Control.phpnu[PK[G:!compatibility/src/Aliases.phpnu[PK[:^%Z&!compatibility/src/Sanitize_Values.phpnu[PK[%;!compatibility/composer.jsonnu[PK[ln00>!compatibility/LICENSEnu[PK[zAq#B!control-custom/src/Field/Custom.phpnu[PK[$%J!control-custom/src/Control/Custom.phpnu[PK[+-nnR!control-custom/composer.jsonnu[PK[_EET!control-custom/LICENSEnu[PK[XL]gg!aY!control-dimension/dist/control.jsnu[PK[=D"^!control-dimension/dist/control.cssnu[PK[\%_!control-dimension/dist/control.js.mapnu[PK[oO@44&dq!control-dimension/dist/control.css.mapnu[PK[!S)u!control-dimension/src/Field/Dimension.phpnu[PK[k܎+~!control-dimension/src/Control/Dimension.phpnu[PK["4 !control-dimension/src/control.jsnu[PK[n3A!control-dimension/composer.jsonnu[PK[_EE&!control-dimension/LICENSEnu[PK[=5Ukk!module-sections/src/styles.cssnu[PK[%jm!module-sections/src/Section.phpnu[PK[f+!module-sections/src/Section_Types/Outer.phpnu[PK[; ff*!module-sections/src/Section_Types/Link.phpnu[PK[{,h!module-sections/src/Section_Types/Nested.phpnu[PK[C7.!module-sections/src/Section_Types/Expanded.phpnu[PK[)p2 !module-sections/src/script.jsnu[PK[11h!control-editor/dist/control.jsnu[PK[__!control-editor/dist/control.cssnu[PK[/_=55"!control-editor/dist/control.js.mapnu[PK[(VV#!control-editor/dist/control.css.mapnu[PK[% #!control-editor/src/Field/Editor.phpnu[PK[D  %!control-editor/src/Control/Editor.phpnu[PK[.2!control-editor/src/control.jsnu[PK[^\"control-editor/composer.jsonnu[PK[_EE~"control-editor/LICENSEnu[PK[s&QQ "control-code/src/Field/Code.phpnu[PK[&8 !"control-code/src/Control/Code.phpnu[PK[*3 "control-code/composer.jsonnu[PK[ln00u#"control-code/LICENSEnu[PK[(%F'"control-date/dist/control.jsnu[PK[/:+"control-date/dist/control.cssnu[PK[ 4;"control-date/dist/control.js.mapnu[PK[*(i!i!!D"control-date/dist/control.css.mapnu[PK[)#Ge"control-date/src/Field/Date.phpnu[PK[*`!m"control-date/src/Control/Date.phpnu[PK[p-R__v"control-date/src/control.jsnu[PK[S{"control-date/composer.jsonnu[PK[_EE~"control-date/LICENSEnu[PK[M+@"control-cropped-image/src/Cropped_Image.phpnu[PK[WW#"control-cropped-image/composer.jsonnu[PK[_EE^"control-cropped-image/LICENSEnu[PK[Q+ + )"module-field-dependencies/dist/control.jsnu[PK[~11-t"module-field-dependencies/dist/control.js.mapnu[PK[ʎ ("module-field-dependencies/src/control.jsnu[PK[^ 4"module-field-dependencies/src/Field_Dependencies.phpnu[PK[A*G*G$""control-react-select/dist/control.jsnu[PK[v!h--%>$control-react-select/dist/control.cssnu[PK[c:0"C$control-react-select/dist/control.js.LICENSE.txtnu[PK[3f(xD$control-react-select/dist/control.js.mapnu[PK[r׍)S*control-react-select/dist/control.css.mapnu[PK[:n%.Z*control-react-select/src/Field/ReactSelect.phpnu[PK[[0n*control-react-select/src/Control/ReactSelect.phpnu[PK[Y}*l10n/src/L10n.phpnu[PK[k\33@*l10n/composer.jsonnu[PK[; EE *l10n/LICENSEnu[PK[I26*control-repeater/dist/wp-color-picker-alpha.min.jsnu[PK[ҷ,, S*control-repeater/dist/control.jsnu[PK[!jIX X !Z*control-repeater/dist/control.cssnu[PK[pD$*control-repeater/dist/control.js.mapnu[PK[5ӡ%%%+control-repeater/dist/control.css.mapnu[PK[ʻ'+control-repeater/src/Field/Repeater.phpnu[PK[i~eBPBP)+control-repeater/src/Control/Repeater.phpnu[PK[/jj,control-repeater/src/control.jsnu[PK[pY^^*,control-repeater/src/Settings/Repeater.phpnu[PK[C##_,control-repeater/composer.jsonnu[PK[ln00А,control-repeater/LICENSEnu[PK[2# H,control-checkbox/dist/control.jsnu[PK[MXX!i,control-checkbox/dist/control.cssnu[PK[$,control-checkbox/dist/control.js.mapnu[PK[ʲ((%A,control-checkbox/dist/control.css.mapnu[PK[KX.,control-checkbox/src/Field/Checkbox_Toggle.phpnu[PK[[, , '`,control-checkbox/src/Field/Checkbox.phpnu[PK[UU.,control-checkbox/src/Field/Checkbox_Switch.phpnu[PK[ ''0,control-checkbox/src/Control/Checkbox_Toggle.phpnu[PK[),control-checkbox/src/Control/Checkbox.phpnu[PK[5u u 0N,control-checkbox/src/Control/Checkbox_Switch.phpnu[PK[L..##,field-background/src/Background.phpnu[PK[!d)-field-background/src/script.jsnu[PK[/ꢣ'/-field-background/src/CSS/Background.phpnu[PK[޶6-field-background/composer.jsonnu[PK[_EE#:-field-background/LICENSEnu[PK[ ">-control-multicheck/dist/control.jsnu[PK[ln++#@-control-multicheck/dist/control.cssnu[PK[j:&|A-control-multicheck/dist/control.js.mapnu[PK[Z``'H-control-multicheck/dist/control.css.mapnu[PK[fՌ| +;I-control-multicheck/src/Field/Multicheck.phpnu[PK[<74$ $ -5S-control-multicheck/src/Control/Multicheck.phpnu[PK[Tw!]-control-multicheck/src/control.jsnu[PK[i a-control-multicheck/composer.jsonnu[PK[_EEd-control-multicheck/LICENSEnu[PK[D Ci-field-typography/dist/preview.jsnu[PK[ Hm-field-typography/dist/control.jsnu[PK[!zr-field-typography/dist/control.cssnu[PK[600$t-field-typography/dist/preview.js.mapnu[PK[´$0-field-typography/dist/control.js.mapnu[PK[㮜%n-field-typography/dist/control.css.mapnu[PK[YMX  Ɲ-field-typography/src/preview.jsnu[PK[rr)%-field-typography/src/Field/Typography.phpnu[PK[\<  -.field-typography/src/Field/CSS/Typography.phpnu[PK[+ &.field-typography/src/control.jsnu[PK[ln001.field-typography/LICENSEnu[PK[v6.data-option/src/Option.phpnu[PK[zI.data-option/composer.jsonnu[PK[n800L.data-option/LICENSEnu[PKUUP.