diff --git a/composer.lock b/composer.lock index e649068..ee95f25 100644 --- a/composer.lock +++ b/composer.lock @@ -50,12 +50,12 @@ "source": { "type": "git", "url": "https://github.com/YahnisElsts/plugin-update-checker.git", - "reference": "0a8fd4ad3a79f95f4bbadaa7eba6c815a72c60ee" + "reference": "97dfe23d158b8af0ea3f7652e678688da6e52e51" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/YahnisElsts/plugin-update-checker/zipball/0a8fd4ad3a79f95f4bbadaa7eba6c815a72c60ee", - "reference": "0a8fd4ad3a79f95f4bbadaa7eba6c815a72c60ee", + "url": "https://api.github.com/repos/YahnisElsts/plugin-update-checker/zipball/97dfe23d158b8af0ea3f7652e678688da6e52e51", + "reference": "97dfe23d158b8af0ea3f7652e678688da6e52e51", "shasum": "" }, "require": { @@ -66,7 +66,7 @@ "type": "library", "autoload": { "files": [ - "load-v5p3.php" + "load-v5p4.php" ] }, "notification-url": "https://packagist.org/downloads/", @@ -93,7 +93,7 @@ "issues": "https://github.com/YahnisElsts/plugin-update-checker/issues", "source": "https://github.com/YahnisElsts/plugin-update-checker/tree/master" }, - "time": "2024-01-19T13:40:36+00:00" + "time": "2024-03-20T16:33:33+00:00" } ], "packages-dev": [], diff --git a/css/_dashicons.scss b/css/_dashicons.scss index e49d7ec..640d349 100644 --- a/css/_dashicons.scss +++ b/css/_dashicons.scss @@ -1,126 +1,213 @@ /* This file was automatically generated from /wp-includes/css/dashicons.css. -Last update: 2017-06-07T16:55:55+00:00 +Last update: 2024-07-16T16:52:28+00:00 */ -.dashicons-menu:before { content: "\f333" !important; } -.dashicons-admin-site:before { content: "\f319" !important; } -.dashicons-admin-media:before { content: "\f104" !important; } -.dashicons-admin-page:before { content: "\f105" !important; } -.dashicons-admin-comments:before { content: "\f101" !important; } .dashicons-admin-appearance:before { content: "\f100" !important; } -.dashicons-admin-plugins:before { content: "\f106" !important; } -.dashicons-admin-users:before { content: "\f110" !important; } -.dashicons-admin-tools:before { content: "\f107" !important; } -.dashicons-admin-settings:before { content: "\f108" !important; } -.dashicons-admin-network:before { content: "\f112" !important; } -.dashicons-admin-generic:before { content: "\f111" !important; } -.dashicons-admin-home:before { content: "\f102" !important; } .dashicons-admin-collapse:before { content: "\f148" !important; } -.dashicons-filter:before { content: "\f536" !important; } +.dashicons-admin-comments:before { content: "\f101" !important; } .dashicons-admin-customizer:before { content: "\f540" !important; } +.dashicons-admin-generic:before { content: "\f111" !important; } +.dashicons-admin-home:before { content: "\f102" !important; } +.dashicons-admin-links:before { content: "\f103" !important; } +.dashicons-admin-media:before { content: "\f104" !important; } .dashicons-admin-multisite:before { content: "\f541" !important; } -.dashicons-admin-links:before, .dashicons-format-links:before { content: "\f103" !important; } -.dashicons-admin-post:before, .dashicons-format-standard:before { content: "\f109" !important; } -.dashicons-format-image:before { content: "\f128" !important; } -.dashicons-format-gallery:before { content: "\f161" !important; } -.dashicons-format-audio:before { content: "\f127" !important; } -.dashicons-format-video:before { content: "\f126" !important; } -.dashicons-format-chat:before { content: "\f125" !important; } -.dashicons-format-status:before { content: "\f130" !important; } -.dashicons-format-aside:before { content: "\f123" !important; } -.dashicons-format-quote:before { content: "\f122" !important; } -.dashicons-welcome-write-blog:before, .dashicons-welcome-edit-page:before { content: "\f119" !important; } -.dashicons-welcome-add-page:before { content: "\f133" !important; } -.dashicons-welcome-view-site:before { content: "\f115" !important; } -.dashicons-welcome-widgets-menus:before { content: "\f116" !important; } -.dashicons-welcome-comments:before { content: "\f117" !important; } -.dashicons-welcome-learn-more:before { content: "\f118" !important; } -.dashicons-image-crop:before { content: "\f165" !important; } -.dashicons-image-rotate:before { content: "\f531" !important; } -.dashicons-image-rotate-left:before { content: "\f166" !important; } -.dashicons-image-rotate-right:before { content: "\f167" !important; } -.dashicons-image-flip-vertical:before { content: "\f168" !important; } -.dashicons-image-flip-horizontal:before { content: "\f169" !important; } -.dashicons-image-filter:before { content: "\f533" !important; } -.dashicons-undo:before { content: "\f171" !important; } -.dashicons-redo:before { content: "\f172" !important; } -.dashicons-editor-ul:before { content: "\f203" !important; } -.dashicons-editor-ol:before { content: "\f204" !important; } -.dashicons-editor-quote:before { content: "\f205" !important; } -.dashicons-editor-alignleft:before { content: "\f206" !important; } +.dashicons-admin-network:before { content: "\f112" !important; } +.dashicons-admin-page:before { content: "\f105" !important; } +.dashicons-admin-plugins:before { content: "\f106" !important; } +.dashicons-admin-post:before { content: "\f109" !important; } +.dashicons-admin-settings:before { content: "\f108" !important; } +.dashicons-admin-site-alt:before { content: "\f11d" !important; } +.dashicons-admin-site-alt2:before { content: "\f11e" !important; } +.dashicons-admin-site-alt3:before { content: "\f11f" !important; } +.dashicons-admin-site:before { content: "\f319" !important; } +.dashicons-admin-tools:before { content: "\f107" !important; } +.dashicons-admin-users:before { content: "\f110" !important; } +.dashicons-airplane:before { content: "\f15f" !important; } +.dashicons-album:before { content: "\f514" !important; } +.dashicons-align-center:before { content: "\f134" !important; } +.dashicons-align-full-width:before { content: "\f114" !important; } +.dashicons-align-left:before { content: "\f135" !important; } +.dashicons-align-none:before { content: "\f138" !important; } +.dashicons-align-pull-left:before { content: "\f10a" !important; } +.dashicons-align-pull-right:before { content: "\f10b" !important; } +.dashicons-align-right:before { content: "\f136" !important; } +.dashicons-align-wide:before { content: "\f11b" !important; } +.dashicons-amazon:before { content: "\f162" !important; } +.dashicons-analytics:before { content: "\f183" !important; } +.dashicons-archive:before { content: "\f480" !important; } +.dashicons-art:before { content: "\f309" !important; } +.dashicons-awards:before { content: "\f313" !important; } +.dashicons-backup:before { content: "\f321" !important; } +.dashicons-bank:before { content: "\f16a" !important; } +.dashicons-beer:before { content: "\f16c" !important; } +.dashicons-bell:before { content: "\f16d" !important; } +.dashicons-block-default:before { content: "\f12b" !important; } +.dashicons-book-alt:before { content: "\f331" !important; } +.dashicons-book:before { content: "\f330" !important; } +.dashicons-buddicons-activity:before { content: "\f452" !important; } +.dashicons-buddicons-bbpress-logo:before { content: "\f477" !important; } +.dashicons-buddicons-buddypress-logo:before { content: "\f448" !important; } +.dashicons-buddicons-community:before { content: "\f453" !important; } +.dashicons-buddicons-forums:before { content: "\f449" !important; } +.dashicons-buddicons-friends:before { content: "\f454" !important; } +.dashicons-buddicons-groups:before { content: "\f456" !important; } +.dashicons-buddicons-pm:before { content: "\f457" !important; } +.dashicons-buddicons-replies:before { content: "\f451" !important; } +.dashicons-buddicons-topics:before { content: "\f450" !important; } +.dashicons-buddicons-tracking:before { content: "\f455" !important; } +.dashicons-building:before { content: "\f512" !important; } +.dashicons-businessman:before { content: "\f338" !important; } +.dashicons-businessperson:before { content: "\f12e" !important; } +.dashicons-businesswoman:before { content: "\f12f" !important; } +.dashicons-button:before { content: "\f11a" !important; } +.dashicons-calculator:before { content: "\f16e" !important; } +.dashicons-calendar-alt:before { content: "\f508" !important; } +.dashicons-calendar:before { content: "\f145" !important; } +.dashicons-camera-alt:before { content: "\f129" !important; } +.dashicons-camera:before { content: "\f306" !important; } +.dashicons-car:before { content: "\f16b" !important; } +.dashicons-carrot:before { content: "\f511" !important; } +.dashicons-cart:before { content: "\f174" !important; } +.dashicons-category:before { content: "\f318" !important; } +.dashicons-chart-area:before { content: "\f239" !important; } +.dashicons-chart-bar:before { content: "\f185" !important; } +.dashicons-chart-line:before { content: "\f238" !important; } +.dashicons-chart-pie:before { content: "\f184" !important; } +.dashicons-clipboard:before { content: "\f481" !important; } +.dashicons-clock:before { content: "\f469" !important; } +.dashicons-cloud-saved:before { content: "\f137" !important; } +.dashicons-cloud-upload:before { content: "\f13b" !important; } +.dashicons-cloud:before { content: "\f176" !important; } +.dashicons-code-standards:before { content: "\f13a" !important; } +.dashicons-coffee:before { content: "\f16f" !important; } +.dashicons-color-picker:before { content: "\f131" !important; } +.dashicons-columns:before { content: "\f13c" !important; } +.dashicons-controls-back:before { content: "\f518" !important; } +.dashicons-controls-forward:before { content: "\f519" !important; } +.dashicons-controls-pause:before { content: "\f523" !important; } +.dashicons-controls-play:before { content: "\f522" !important; } +.dashicons-controls-repeat:before { content: "\f515" !important; } +.dashicons-controls-skipback:before { content: "\f516" !important; } +.dashicons-controls-skipforward:before { content: "\f517" !important; } +.dashicons-controls-volumeoff:before { content: "\f520" !important; } +.dashicons-controls-volumeon:before { content: "\f521" !important; } +.dashicons-cover-image:before { content: "\f13d" !important; } +.dashicons-database-add:before { content: "\f170" !important; } +.dashicons-database-export:before { content: "\f17a" !important; } +.dashicons-database-import:before { content: "\f17b" !important; } +.dashicons-database-remove:before { content: "\f17c" !important; } +.dashicons-database-view:before { content: "\f17d" !important; } +.dashicons-database:before { content: "\f17e" !important; } +.dashicons-desktop:before { content: "\f472" !important; } +.dashicons-dismiss:before { content: "\f153" !important; } +.dashicons-download:before { content: "\f316" !important; } +.dashicons-drumstick:before { content: "\f17f" !important; } +.dashicons-edit-large:before { content: "\f327" !important; } +.dashicons-edit-page:before { content: "\f186" !important; } +.dashicons-edit:before { content: "\f464" !important; } .dashicons-editor-aligncenter:before { content: "\f207" !important; } +.dashicons-editor-alignleft:before { content: "\f206" !important; } .dashicons-editor-alignright:before { content: "\f208" !important; } -.dashicons-editor-insertmore:before { content: "\f209" !important; } -.dashicons-editor-spellcheck:before { content: "\f210" !important; } -.dashicons-editor-distractionfree:before, .dashicons-editor-expand:before { content: "\f211" !important; } +.dashicons-editor-bold:before { content: "\f200" !important; } +.dashicons-editor-break:before { content: "\f474" !important; } +.dashicons-editor-code-duplicate:before { content: "\f494" !important; } +.dashicons-editor-code:before { content: "\f475" !important; } .dashicons-editor-contract:before { content: "\f506" !important; } -.dashicons-editor-kitchensink:before { content: "\f212" !important; } -.dashicons-editor-underline:before { content: "\f213" !important; } +.dashicons-editor-customchar:before { content: "\f220" !important; } +.dashicons-editor-expand:before { content: "\f211" !important; } +.dashicons-editor-help:before { content: "\f223" !important; } +.dashicons-editor-indent:before { content: "\f222" !important; } +.dashicons-editor-insertmore:before { content: "\f209" !important; } +.dashicons-editor-italic:before { content: "\f201" !important; } .dashicons-editor-justify:before { content: "\f214" !important; } -.dashicons-editor-textcolor:before { content: "\f215" !important; } -.dashicons-editor-paste-word:before { content: "\f216" !important; } +.dashicons-editor-kitchensink:before { content: "\f212" !important; } +.dashicons-editor-ltr:before { content: "\f10c" !important; } +.dashicons-editor-ol-rtl:before { content: "\f12c" !important; } +.dashicons-editor-ol:before { content: "\f204" !important; } +.dashicons-editor-outdent:before { content: "\f221" !important; } +.dashicons-editor-paragraph:before { content: "\f476" !important; } .dashicons-editor-paste-text:before { content: "\f217" !important; } +.dashicons-editor-paste-word:before { content: "\f216" !important; } +.dashicons-editor-quote:before { content: "\f205" !important; } .dashicons-editor-removeformatting:before { content: "\f218" !important; } -.dashicons-editor-video:before { content: "\f219" !important; } -.dashicons-editor-customchar:before { content: "\f220" !important; } -.dashicons-editor-outdent:before { content: "\f221" !important; } -.dashicons-editor-indent:before { content: "\f222" !important; } -.dashicons-editor-help:before { content: "\f223" !important; } -.dashicons-editor-strikethrough:before { content: "\f224" !important; } -.dashicons-editor-unlink:before { content: "\f225" !important; } .dashicons-editor-rtl:before { content: "\f320" !important; } -.dashicons-editor-break:before { content: "\f474" !important; } -.dashicons-editor-code:before { content: "\f475" !important; } -.dashicons-editor-paragraph:before { content: "\f476" !important; } +.dashicons-editor-spellcheck:before { content: "\f210" !important; } +.dashicons-editor-strikethrough:before { content: "\f224" !important; } .dashicons-editor-table:before { content: "\f535" !important; } -.dashicons-align-left:before { content: "\f135" !important; } -.dashicons-align-right:before { content: "\f136" !important; } -.dashicons-align-center:before { content: "\f134" !important; } -.dashicons-align-none:before { content: "\f138" !important; } -.dashicons-lock:before { content: "\f160" !important; } -.dashicons-unlock:before { content: "\f528" !important; } -.dashicons-calendar:before { content: "\f145" !important; } -.dashicons-calendar-alt:before { content: "\f508" !important; } -.dashicons-visibility:before { content: "\f177" !important; } -.dashicons-hidden:before { content: "\f530" !important; } -.dashicons-post-status:before { content: "\f173" !important; } -.dashicons-edit:before { content: "\f464" !important; } -.dashicons-post-trash:before, .dashicons-trash:before { content: "\f182" !important; } -.dashicons-sticky:before { content: "\f537" !important; } +.dashicons-editor-textcolor:before { content: "\f215" !important; } +.dashicons-editor-ul:before { content: "\f203" !important; } +.dashicons-editor-underline:before { content: "\f213" !important; } +.dashicons-editor-unlink:before { content: "\f225" !important; } +.dashicons-editor-video:before { content: "\f219" !important; } +.dashicons-ellipsis:before { content: "\f11c" !important; } +.dashicons-email-alt:before { content: "\f466" !important; } +.dashicons-email-alt2:before { content: "\f467" !important; } +.dashicons-email:before { content: "\f465" !important; } +.dashicons-embed-audio:before { content: "\f13e" !important; } +.dashicons-embed-generic:before { content: "\f13f" !important; } +.dashicons-embed-photo:before { content: "\f144" !important; } +.dashicons-embed-post:before { content: "\f146" !important; } +.dashicons-embed-video:before { content: "\f149" !important; } +.dashicons-excerpt-view:before { content: "\f164" !important; } +.dashicons-exit:before { content: "\f14a" !important; } .dashicons-external:before { content: "\f504" !important; } -.dashicons-leftright:before { content: "\f229" !important; } -.dashicons-sort:before { content: "\f156" !important; } -.dashicons-randomize:before { content: "\f503" !important; } -.dashicons-list-view:before { content: "\f163" !important; } -.dashicons-exerpt-view:before, .dashicons-excerpt-view:before { content: "\f164" !important; } +.dashicons-facebook-alt:before { content: "\f305" !important; } +.dashicons-facebook:before { content: "\f304" !important; } +.dashicons-feedback:before { content: "\f175" !important; } +.dashicons-filter:before { content: "\f536" !important; } +.dashicons-flag:before { content: "\f227" !important; } +.dashicons-food:before { content: "\f187" !important; } +.dashicons-format-aside:before { content: "\f123" !important; } +.dashicons-format-audio:before { content: "\f127" !important; } +.dashicons-format-chat:before { content: "\f125" !important; } +.dashicons-format-gallery:before { content: "\f161" !important; } +.dashicons-format-image:before { content: "\f128" !important; } +.dashicons-format-quote:before { content: "\f122" !important; } +.dashicons-format-status:before { content: "\f130" !important; } +.dashicons-format-video:before { content: "\f126" !important; } +.dashicons-forms:before { content: "\f314" !important; } +.dashicons-fullscreen-alt:before { content: "\f188" !important; } +.dashicons-fullscreen-exit-alt:before { content: "\f189" !important; } +.dashicons-games:before { content: "\f18a" !important; } +.dashicons-google:before { content: "\f18b" !important; } +.dashicons-googleplus:before { content: "\f462" !important; } .dashicons-grid-view:before { content: "\f509" !important; } -.dashicons-move:before { content: "\f545" !important; } +.dashicons-groups:before { content: "\f307" !important; } .dashicons-hammer:before { content: "\f308" !important; } -.dashicons-art:before { content: "\f309" !important; } -.dashicons-migrate:before { content: "\f310" !important; } -.dashicons-performance:before { content: "\f311" !important; } -.dashicons-universal-access:before { content: "\f483" !important; } -.dashicons-universal-access-alt:before { content: "\f507" !important; } -.dashicons-tickets:before { content: "\f486" !important; } -.dashicons-nametag:before { content: "\f484" !important; } -.dashicons-clipboard:before { content: "\f481" !important; } +.dashicons-heading:before { content: "\f10e" !important; } .dashicons-heart:before { content: "\f487" !important; } -.dashicons-megaphone:before { content: "\f488" !important; } -.dashicons-schedule:before { content: "\f489" !important; } -.dashicons-wordpress:before { content: "\f120" !important; } -.dashicons-wordpress-alt:before { content: "\f324" !important; } -.dashicons-pressthis:before { content: "\f157" !important; } -.dashicons-update:before { content: "\f463" !important; } -.dashicons-screenoptions:before { content: "\f180" !important; } -.dashicons-cart:before { content: "\f174" !important; } -.dashicons-feedback:before { content: "\f175" !important; } -.dashicons-cloud:before { content: "\f176" !important; } -.dashicons-translation:before { content: "\f326" !important; } -.dashicons-tag:before { content: "\f323" !important; } -.dashicons-category:before { content: "\f318" !important; } -.dashicons-archive:before { content: "\f480" !important; } -.dashicons-tagcloud:before { content: "\f479" !important; } -.dashicons-text:before { content: "\f478" !important; } +.dashicons-hidden:before { content: "\f530" !important; } +.dashicons-hourglass:before { content: "\f18c" !important; } +.dashicons-html:before { content: "\f14b" !important; } +.dashicons-id-alt:before { content: "\f337" !important; } +.dashicons-id:before { content: "\f336" !important; } +.dashicons-image-crop:before { content: "\f165" !important; } +.dashicons-image-filter:before { content: "\f533" !important; } +.dashicons-image-flip-horizontal:before { content: "\f169" !important; } +.dashicons-image-flip-vertical:before { content: "\f168" !important; } +.dashicons-image-rotate-left:before { content: "\f166" !important; } +.dashicons-image-rotate-right:before { content: "\f167" !important; } +.dashicons-image-rotate:before { content: "\f531" !important; } +.dashicons-images-alt:before { content: "\f232" !important; } +.dashicons-images-alt2:before { content: "\f233" !important; } +.dashicons-index-card:before { content: "\f510" !important; } +.dashicons-info-outline:before { content: "\f14c" !important; } +.dashicons-info:before { content: "\f348" !important; } +.dashicons-insert-after:before { content: "\f14d" !important; } +.dashicons-insert-before:before { content: "\f14e" !important; } +.dashicons-insert:before { content: "\f10f" !important; } +.dashicons-instagram:before { content: "\f12d" !important; } +.dashicons-laptop:before { content: "\f547" !important; } +.dashicons-layout:before { content: "\f538" !important; } +.dashicons-leftright:before { content: "\f229" !important; } +.dashicons-lightbulb:before { content: "\f339" !important; } +.dashicons-linkedin:before { content: "\f18d" !important; } +.dashicons-list-view:before { content: "\f163" !important; } +.dashicons-location-alt:before { content: "\f231" !important; } +.dashicons-location:before { content: "\f230" !important; } +.dashicons-lock-duplicate:before { content: "\f315" !important; } +.dashicons-lock:before { content: "\f160" !important; } +.dashicons-marker:before { content: "\f159" !important; } .dashicons-media-archive:before { content: "\f501" !important; } .dashicons-media-audio:before { content: "\f500" !important; } .dashicons-media-code:before { content: "\f499" !important; } @@ -130,95 +217,123 @@ Last update: 2017-06-07T16:55:55+00:00 .dashicons-media-spreadsheet:before { content: "\f495" !important; } .dashicons-media-text:before { content: "\f491" !important; } .dashicons-media-video:before { content: "\f490" !important; } +.dashicons-megaphone:before { content: "\f488" !important; } +.dashicons-menu-alt:before { content: "\f228" !important; } +.dashicons-menu-alt2:before { content: "\f329" !important; } +.dashicons-menu-alt3:before { content: "\f349" !important; } +.dashicons-menu:before { content: "\f333" !important; } +.dashicons-microphone:before { content: "\f482" !important; } +.dashicons-migrate:before { content: "\f310" !important; } +.dashicons-minus:before { content: "\f460" !important; } +.dashicons-money-alt:before { content: "\f18e" !important; } +.dashicons-money:before { content: "\f526" !important; } +.dashicons-move:before { content: "\f545" !important; } +.dashicons-nametag:before { content: "\f484" !important; } +.dashicons-networking:before { content: "\f325" !important; } +.dashicons-no-alt:before { content: "\f335" !important; } +.dashicons-no:before { content: "\f158" !important; } +.dashicons-open-folder:before { content: "\f18f" !important; } +.dashicons-palmtree:before { content: "\f527" !important; } +.dashicons-paperclip:before { content: "\f546" !important; } +.dashicons-pdf:before { content: "\f190" !important; } +.dashicons-performance:before { content: "\f311" !important; } +.dashicons-pets:before { content: "\f191" !important; } +.dashicons-phone:before { content: "\f525" !important; } +.dashicons-pinterest:before { content: "\f192" !important; } .dashicons-playlist-audio:before { content: "\f492" !important; } .dashicons-playlist-video:before { content: "\f493" !important; } -.dashicons-controls-play:before { content: "\f522" !important; } -.dashicons-controls-pause:before { content: "\f523" !important; } -.dashicons-controls-forward:before { content: "\f519" !important; } -.dashicons-controls-skipforward:before { content: "\f517" !important; } -.dashicons-controls-back:before { content: "\f518" !important; } -.dashicons-controls-skipback:before { content: "\f516" !important; } -.dashicons-controls-repeat:before { content: "\f515" !important; } -.dashicons-controls-volumeon:before { content: "\f521" !important; } -.dashicons-controls-volumeoff:before { content: "\f520" !important; } -.dashicons-yes:before { content: "\f147" !important; } -.dashicons-no:before { content: "\f158" !important; } -.dashicons-no-alt:before { content: "\f335" !important; } -.dashicons-plus:before { content: "\f132" !important; } +.dashicons-plugins-checked:before { content: "\f485" !important; } .dashicons-plus-alt:before { content: "\f502" !important; } .dashicons-plus-alt2:before { content: "\f543" !important; } -.dashicons-minus:before { content: "\f460" !important; } -.dashicons-dismiss:before { content: "\f153" !important; } -.dashicons-marker:before { content: "\f159" !important; } -.dashicons-star-filled:before { content: "\f155" !important; } -.dashicons-star-half:before { content: "\f459" !important; } -.dashicons-star-empty:before { content: "\f154" !important; } -.dashicons-flag:before { content: "\f227" !important; } -.dashicons-info:before { content: "\f348" !important; } -.dashicons-warning:before { content: "\f534" !important; } -.dashicons-share:before { content: "\f237" !important; } -.dashicons-share1:before { content: "\f237" !important; } +.dashicons-plus:before { content: "\f132" !important; } +.dashicons-podio:before { content: "\f19c" !important; } +.dashicons-portfolio:before { content: "\f322" !important; } +.dashicons-post-status:before { content: "\f173" !important; } +.dashicons-pressthis:before { content: "\f157" !important; } +.dashicons-printer:before { content: "\f193" !important; } +.dashicons-privacy:before { content: "\f194" !important; } +.dashicons-products:before { content: "\f312" !important; } +.dashicons-randomize:before { content: "\f503" !important; } +.dashicons-reddit:before { content: "\f195" !important; } +.dashicons-redo:before { content: "\f172" !important; } +.dashicons-remove:before { content: "\f14f" !important; } +.dashicons-rest-api:before { content: "\f124" !important; } +.dashicons-rss:before { content: "\f303" !important; } +.dashicons-saved:before { content: "\f15e" !important; } +.dashicons-schedule:before { content: "\f489" !important; } +.dashicons-screenoptions:before { content: "\f180" !important; } +.dashicons-search:before { content: "\f179" !important; } .dashicons-share-alt:before { content: "\f240" !important; } .dashicons-share-alt2:before { content: "\f242" !important; } -.dashicons-twitter:before { content: "\f301" !important; } -.dashicons-rss:before { content: "\f303" !important; } -.dashicons-email:before { content: "\f465" !important; } -.dashicons-email-alt:before { content: "\f466" !important; } -.dashicons-facebook:before { content: "\f304" !important; } -.dashicons-facebook-alt:before { content: "\f305" !important; } -.dashicons-networking:before { content: "\f325" !important; } -.dashicons-googleplus:before { content: "\f462" !important; } -.dashicons-location:before { content: "\f230" !important; } -.dashicons-location-alt:before { content: "\f231" !important; } -.dashicons-camera:before { content: "\f306" !important; } -.dashicons-images-alt:before { content: "\f232" !important; } -.dashicons-images-alt2:before { content: "\f233" !important; } -.dashicons-video-alt:before { content: "\f234" !important; } -.dashicons-video-alt2:before { content: "\f235" !important; } -.dashicons-video-alt3:before { content: "\f236" !important; } -.dashicons-vault:before { content: "\f178" !important; } -.dashicons-shield:before { content: "\f332" !important; } +.dashicons-share:before { content: "\f237" !important; } .dashicons-shield-alt:before { content: "\f334" !important; } -.dashicons-sos:before { content: "\f468" !important; } -.dashicons-search:before { content: "\f179" !important; } +.dashicons-shield:before { content: "\f332" !important; } +.dashicons-shortcode:before { content: "\f150" !important; } .dashicons-slides:before { content: "\f181" !important; } -.dashicons-analytics:before { content: "\f183" !important; } -.dashicons-chart-pie:before { content: "\f184" !important; } -.dashicons-chart-bar:before { content: "\f185" !important; } -.dashicons-chart-line:before { content: "\f238" !important; } -.dashicons-chart-area:before { content: "\f239" !important; } -.dashicons-groups:before { content: "\f307" !important; } -.dashicons-businessman:before { content: "\f338" !important; } -.dashicons-id:before { content: "\f336" !important; } -.dashicons-id-alt:before { content: "\f337" !important; } -.dashicons-products:before { content: "\f312" !important; } -.dashicons-awards:before { content: "\f313" !important; } -.dashicons-forms:before { content: "\f314" !important; } -.dashicons-testimonial:before { content: "\f473" !important; } -.dashicons-portfolio:before { content: "\f322" !important; } -.dashicons-book:before { content: "\f330" !important; } -.dashicons-book-alt:before { content: "\f331" !important; } -.dashicons-download:before { content: "\f316" !important; } -.dashicons-upload:before { content: "\f317" !important; } -.dashicons-backup:before { content: "\f321" !important; } -.dashicons-clock:before { content: "\f469" !important; } -.dashicons-lightbulb:before { content: "\f339" !important; } -.dashicons-microphone:before { content: "\f482" !important; } -.dashicons-desktop:before { content: "\f472" !important; } -.dashicons-laptop:before { content: "\f547" !important; } -.dashicons-tablet:before { content: "\f471" !important; } .dashicons-smartphone:before { content: "\f470" !important; } -.dashicons-phone:before { content: "\f525" !important; } .dashicons-smiley:before { content: "\f328" !important; } -.dashicons-index-card:before { content: "\f510" !important; } -.dashicons-carrot:before { content: "\f511" !important; } -.dashicons-building:before { content: "\f512" !important; } +.dashicons-sort:before { content: "\f156" !important; } +.dashicons-sos:before { content: "\f468" !important; } +.dashicons-spotify:before { content: "\f196" !important; } +.dashicons-star-empty:before { content: "\f154" !important; } +.dashicons-star-filled:before { content: "\f155" !important; } +.dashicons-star-half:before { content: "\f459" !important; } +.dashicons-sticky:before { content: "\f537" !important; } .dashicons-store:before { content: "\f513" !important; } -.dashicons-album:before { content: "\f514" !important; } -.dashicons-palmtree:before { content: "\f527" !important; } -.dashicons-tickets-alt:before { content: "\f524" !important; } -.dashicons-money:before { content: "\f526" !important; } -.dashicons-thumbs-up:before { content: "\f529" !important; } +.dashicons-superhero-alt:before { content: "\f197" !important; } +.dashicons-superhero:before { content: "\f198" !important; } +.dashicons-table-col-after:before { content: "\f151" !important; } +.dashicons-table-col-before:before { content: "\f152" !important; } +.dashicons-table-col-delete:before { content: "\f15a" !important; } +.dashicons-table-row-after:before { content: "\f15b" !important; } +.dashicons-table-row-before:before { content: "\f15c" !important; } +.dashicons-table-row-delete:before { content: "\f15d" !important; } +.dashicons-tablet:before { content: "\f471" !important; } +.dashicons-tag:before { content: "\f323" !important; } +.dashicons-tagcloud:before { content: "\f479" !important; } +.dashicons-testimonial:before { content: "\f473" !important; } +.dashicons-text-page:before { content: "\f121" !important; } +.dashicons-text:before { content: "\f478" !important; } .dashicons-thumbs-down:before { content: "\f542" !important; } -.dashicons-layout:before { content: "\f538" !important; } -.dashicons-paperclip:before { content: "\f546" !important; } +.dashicons-thumbs-up:before { content: "\f529" !important; } +.dashicons-tickets-alt:before { content: "\f524" !important; } +.dashicons-tickets:before { content: "\f486" !important; } +.dashicons-tide:before { content: "\f10d" !important; } +.dashicons-translation:before { content: "\f326" !important; } +.dashicons-trash:before { content: "\f182" !important; } +.dashicons-twitch:before { content: "\f199" !important; } +.dashicons-twitter-alt:before { content: "\f302" !important; } +.dashicons-twitter:before { content: "\f301" !important; } +.dashicons-undo:before { content: "\f171" !important; } +.dashicons-universal-access-alt:before { content: "\f507" !important; } +.dashicons-universal-access:before { content: "\f483" !important; } +.dashicons-unlock:before { content: "\f528" !important; } +.dashicons-update-alt:before { content: "\f113" !important; } +.dashicons-update:before { content: "\f463" !important; } +.dashicons-upload:before { content: "\f317" !important; } +.dashicons-vault:before { content: "\f178" !important; } +.dashicons-video-alt:before { content: "\f234" !important; } +.dashicons-video-alt2:before { content: "\f235" !important; } +.dashicons-video-alt3:before { content: "\f236" !important; } +.dashicons-visibility:before { content: "\f177" !important; } +.dashicons-warning:before { content: "\f534" !important; } +.dashicons-welcome-add-page:before { content: "\f133" !important; } +.dashicons-welcome-comments:before { content: "\f117" !important; } +.dashicons-welcome-learn-more:before { content: "\f118" !important; } +.dashicons-welcome-view-site:before { content: "\f115" !important; } +.dashicons-welcome-widgets-menus:before { content: "\f116" !important; } +.dashicons-welcome-write-blog:before { content: "\f119" !important; } +.dashicons-whatsapp:before { content: "\f19a" !important; } +.dashicons-wordpress-alt:before { content: "\f324" !important; } +.dashicons-wordpress:before { content: "\f120" !important; } +.dashicons-xing:before { content: "\f19d" !important; } +.dashicons-yes-alt:before { content: "\f12a" !important; } +.dashicons-yes:before { content: "\f147" !important; } +.dashicons-youtube:before { content: "\f19b" !important; } +.dashicons-editor-distractionfree:before { content: "\f211" !important; } +.dashicons-exerpt-view:before { content: "\f164" !important; } +.dashicons-format-links:before { content: "\f103" !important; } +.dashicons-format-standard:before { content: "\f109" !important; } +.dashicons-post-trash:before { content: "\f182" !important; } +.dashicons-share1:before { content: "\f237" !important; } +.dashicons-welcome-edit-page:before { content: "\f119" !important; } diff --git a/css/_ui-constants.scss b/css/_ui-constants.scss new file mode 100644 index 0000000..670bd80 --- /dev/null +++ b/css/_ui-constants.scss @@ -0,0 +1,6 @@ +$smallActorSelectorToUiGap: 2px; +$largeActorSelectorToUiGap: 8px; + +//Note: At least in WP 6.5, this is the grey that WP uses for .description text, +//file properties in the media library, etc. +$ameUiTextMutedColor: #646970; \ No newline at end of file diff --git a/css/force-dashicons.css b/css/force-dashicons.css index 71481ac..78b24c5 100644 --- a/css/force-dashicons.css +++ b/css/force-dashicons.css @@ -11,679 +11,685 @@ #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon { /* This file was automatically generated from /wp-includes/css/dashicons.css. - Last update: 2017-06-07T16:55:55+00:00 - */ -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon > .wp-menu-image::before { - font-family: "dashicons", sans-serif !important; - font-size: 20px !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon > .wp-menu-image { - background-image: none !important; - position: static; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon > .wp-menu-image::before { - background-image: none !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-menu:before { - content: "\f333" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-admin-site:before { - content: "\f319" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-admin-media:before { - content: "\f104" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-admin-page:before { - content: "\f105" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-admin-comments:before { - content: "\f101" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-admin-appearance:before { - content: "\f100" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-admin-plugins:before { - content: "\f106" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-admin-users:before { - content: "\f110" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-admin-tools:before { - content: "\f107" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-admin-settings:before { - content: "\f108" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-admin-network:before { - content: "\f112" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-admin-generic:before { - content: "\f111" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-admin-home:before { - content: "\f102" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-admin-collapse:before { - content: "\f148" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-filter:before { - content: "\f536" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-admin-customizer:before { - content: "\f540" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-admin-multisite:before { - content: "\f541" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-admin-links:before, #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-format-links:before { - content: "\f103" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-admin-post:before, #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-format-standard:before { - content: "\f109" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-format-image:before { - content: "\f128" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-format-gallery:before { - content: "\f161" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-format-audio:before { - content: "\f127" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-format-video:before { - content: "\f126" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-format-chat:before { - content: "\f125" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-format-status:before { - content: "\f130" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-format-aside:before { - content: "\f123" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-format-quote:before { - content: "\f122" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-welcome-write-blog:before, #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-welcome-edit-page:before { - content: "\f119" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-welcome-add-page:before { - content: "\f133" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-welcome-view-site:before { - content: "\f115" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-welcome-widgets-menus:before { - content: "\f116" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-welcome-comments:before { - content: "\f117" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-welcome-learn-more:before { - content: "\f118" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-image-crop:before { - content: "\f165" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-image-rotate:before { - content: "\f531" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-image-rotate-left:before { - content: "\f166" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-image-rotate-right:before { - content: "\f167" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-image-flip-vertical:before { - content: "\f168" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-image-flip-horizontal:before { - content: "\f169" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-image-filter:before { - content: "\f533" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-undo:before { - content: "\f171" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-redo:before { - content: "\f172" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-editor-ul:before { - content: "\f203" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-editor-ol:before { - content: "\f204" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-editor-quote:before { - content: "\f205" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-editor-alignleft:before { - content: "\f206" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-editor-aligncenter:before { - content: "\f207" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-editor-alignright:before { - content: "\f208" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-editor-insertmore:before { - content: "\f209" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-editor-spellcheck:before { - content: "\f210" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-editor-distractionfree:before, #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-editor-expand:before { - content: "\f211" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-editor-contract:before { - content: "\f506" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-editor-kitchensink:before { - content: "\f212" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-editor-underline:before { - content: "\f213" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-editor-justify:before { - content: "\f214" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-editor-textcolor:before { - content: "\f215" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-editor-paste-word:before { - content: "\f216" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-editor-paste-text:before { - content: "\f217" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-editor-removeformatting:before { - content: "\f218" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-editor-video:before { - content: "\f219" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-editor-customchar:before { - content: "\f220" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-editor-outdent:before { - content: "\f221" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-editor-indent:before { - content: "\f222" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-editor-help:before { - content: "\f223" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-editor-strikethrough:before { - content: "\f224" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-editor-unlink:before { - content: "\f225" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-editor-rtl:before { - content: "\f320" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-editor-break:before { - content: "\f474" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-editor-code:before { - content: "\f475" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-editor-paragraph:before { - content: "\f476" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-editor-table:before { - content: "\f535" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-align-left:before { - content: "\f135" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-align-right:before { - content: "\f136" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-align-center:before { - content: "\f134" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-align-none:before { - content: "\f138" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-lock:before { - content: "\f160" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-unlock:before { - content: "\f528" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-calendar:before { - content: "\f145" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-calendar-alt:before { - content: "\f508" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-visibility:before { - content: "\f177" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-hidden:before { - content: "\f530" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-post-status:before { - content: "\f173" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-edit:before { - content: "\f464" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-post-trash:before, #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-trash:before { - content: "\f182" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-sticky:before { - content: "\f537" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-external:before { - content: "\f504" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-leftright:before { - content: "\f229" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-sort:before { - content: "\f156" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-randomize:before { - content: "\f503" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-list-view:before { - content: "\f163" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-exerpt-view:before, #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-excerpt-view:before { - content: "\f164" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-grid-view:before { - content: "\f509" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-move:before { - content: "\f545" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-hammer:before { - content: "\f308" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-art:before { - content: "\f309" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-migrate:before { - content: "\f310" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-performance:before { - content: "\f311" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-universal-access:before { - content: "\f483" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-universal-access-alt:before { - content: "\f507" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-tickets:before { - content: "\f486" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-nametag:before { - content: "\f484" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-clipboard:before { - content: "\f481" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-heart:before { - content: "\f487" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-megaphone:before { - content: "\f488" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-schedule:before { - content: "\f489" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-wordpress:before { - content: "\f120" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-wordpress-alt:before { - content: "\f324" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-pressthis:before { - content: "\f157" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-update:before { - content: "\f463" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-screenoptions:before { - content: "\f180" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-cart:before { - content: "\f174" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-feedback:before { - content: "\f175" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-cloud:before { - content: "\f176" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-translation:before { - content: "\f326" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-tag:before { - content: "\f323" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-category:before { - content: "\f318" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-archive:before { - content: "\f480" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-tagcloud:before { - content: "\f479" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-text:before { - content: "\f478" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-media-archive:before { - content: "\f501" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-media-audio:before { - content: "\f500" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-media-code:before { - content: "\f499" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-media-default:before { - content: "\f498" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-media-document:before { - content: "\f497" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-media-interactive:before { - content: "\f496" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-media-spreadsheet:before { - content: "\f495" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-media-text:before { - content: "\f491" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-media-video:before { - content: "\f490" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-playlist-audio:before { - content: "\f492" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-playlist-video:before { - content: "\f493" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-controls-play:before { - content: "\f522" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-controls-pause:before { - content: "\f523" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-controls-forward:before { - content: "\f519" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-controls-skipforward:before { - content: "\f517" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-controls-back:before { - content: "\f518" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-controls-skipback:before { - content: "\f516" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-controls-repeat:before { - content: "\f515" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-controls-volumeon:before { - content: "\f521" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-controls-volumeoff:before { - content: "\f520" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-yes:before { - content: "\f147" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-no:before { - content: "\f158" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-no-alt:before { - content: "\f335" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-plus:before { - content: "\f132" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-plus-alt:before { - content: "\f502" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-plus-alt2:before { - content: "\f543" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-minus:before { - content: "\f460" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-dismiss:before { - content: "\f153" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-marker:before { - content: "\f159" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-star-filled:before { - content: "\f155" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-star-half:before { - content: "\f459" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-star-empty:before { - content: "\f154" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-flag:before { - content: "\f227" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-info:before { - content: "\f348" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-warning:before { - content: "\f534" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-share:before { - content: "\f237" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-share1:before { - content: "\f237" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-share-alt:before { - content: "\f240" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-share-alt2:before { - content: "\f242" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-twitter:before { - content: "\f301" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-rss:before { - content: "\f303" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-email:before { - content: "\f465" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-email-alt:before { - content: "\f466" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-facebook:before { - content: "\f304" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-facebook-alt:before { - content: "\f305" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-networking:before { - content: "\f325" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-googleplus:before { - content: "\f462" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-location:before { - content: "\f230" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-location-alt:before { - content: "\f231" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-camera:before { - content: "\f306" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-images-alt:before { - content: "\f232" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-images-alt2:before { - content: "\f233" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-video-alt:before { - content: "\f234" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-video-alt2:before { - content: "\f235" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-video-alt3:before { - content: "\f236" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-vault:before { - content: "\f178" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-shield:before { - content: "\f332" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-shield-alt:before { - content: "\f334" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-sos:before { - content: "\f468" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-search:before { - content: "\f179" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-slides:before { - content: "\f181" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-analytics:before { - content: "\f183" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-chart-pie:before { - content: "\f184" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-chart-bar:before { - content: "\f185" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-chart-line:before { - content: "\f238" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-chart-area:before { - content: "\f239" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-groups:before { - content: "\f307" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-businessman:before { - content: "\f338" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-id:before { - content: "\f336" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-id-alt:before { - content: "\f337" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-products:before { - content: "\f312" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-awards:before { - content: "\f313" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-forms:before { - content: "\f314" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-testimonial:before { - content: "\f473" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-portfolio:before { - content: "\f322" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-book:before { - content: "\f330" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-book-alt:before { - content: "\f331" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-download:before { - content: "\f316" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-upload:before { - content: "\f317" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-backup:before { - content: "\f321" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-clock:before { - content: "\f469" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-lightbulb:before { - content: "\f339" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-microphone:before { - content: "\f482" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-desktop:before { - content: "\f472" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-laptop:before { - content: "\f547" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-tablet:before { - content: "\f471" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-smartphone:before { - content: "\f470" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-phone:before { - content: "\f525" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-smiley:before { - content: "\f328" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-index-card:before { - content: "\f510" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-carrot:before { - content: "\f511" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-building:before { - content: "\f512" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-store:before { - content: "\f513" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-album:before { - content: "\f514" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-palmtree:before { - content: "\f527" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-tickets-alt:before { - content: "\f524" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-money:before { - content: "\f526" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-thumbs-up:before { - content: "\f529" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-thumbs-down:before { - content: "\f542" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-layout:before { - content: "\f538" !important; -} -#adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-paperclip:before { - content: "\f546" !important; -} + Last update: 2024-07-16T16:52:28+00:00 + */ } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon > .wp-menu-image::before { + font-family: "dashicons", sans-serif !important; + font-size: 20px !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon > .wp-menu-image { + background-image: none !important; + position: static; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon > .wp-menu-image::before { + background-image: none !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-admin-appearance:before { + content: "\f100" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-admin-collapse:before { + content: "\f148" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-admin-comments:before { + content: "\f101" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-admin-customizer:before { + content: "\f540" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-admin-generic:before { + content: "\f111" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-admin-home:before { + content: "\f102" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-admin-links:before { + content: "\f103" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-admin-media:before { + content: "\f104" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-admin-multisite:before { + content: "\f541" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-admin-network:before { + content: "\f112" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-admin-page:before { + content: "\f105" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-admin-plugins:before { + content: "\f106" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-admin-post:before { + content: "\f109" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-admin-settings:before { + content: "\f108" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-admin-site-alt:before { + content: "\f11d" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-admin-site-alt2:before { + content: "\f11e" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-admin-site-alt3:before { + content: "\f11f" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-admin-site:before { + content: "\f319" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-admin-tools:before { + content: "\f107" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-admin-users:before { + content: "\f110" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-airplane:before { + content: "\f15f" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-album:before { + content: "\f514" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-align-center:before { + content: "\f134" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-align-full-width:before { + content: "\f114" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-align-left:before { + content: "\f135" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-align-none:before { + content: "\f138" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-align-pull-left:before { + content: "\f10a" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-align-pull-right:before { + content: "\f10b" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-align-right:before { + content: "\f136" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-align-wide:before { + content: "\f11b" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-amazon:before { + content: "\f162" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-analytics:before { + content: "\f183" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-archive:before { + content: "\f480" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-art:before { + content: "\f309" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-awards:before { + content: "\f313" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-backup:before { + content: "\f321" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-bank:before { + content: "\f16a" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-beer:before { + content: "\f16c" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-bell:before { + content: "\f16d" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-block-default:before { + content: "\f12b" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-book-alt:before { + content: "\f331" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-book:before { + content: "\f330" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-buddicons-activity:before { + content: "\f452" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-buddicons-bbpress-logo:before { + content: "\f477" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-buddicons-buddypress-logo:before { + content: "\f448" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-buddicons-community:before { + content: "\f453" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-buddicons-forums:before { + content: "\f449" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-buddicons-friends:before { + content: "\f454" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-buddicons-groups:before { + content: "\f456" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-buddicons-pm:before { + content: "\f457" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-buddicons-replies:before { + content: "\f451" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-buddicons-topics:before { + content: "\f450" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-buddicons-tracking:before { + content: "\f455" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-building:before { + content: "\f512" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-businessman:before { + content: "\f338" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-businessperson:before { + content: "\f12e" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-businesswoman:before { + content: "\f12f" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-button:before { + content: "\f11a" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-calculator:before { + content: "\f16e" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-calendar-alt:before { + content: "\f508" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-calendar:before { + content: "\f145" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-camera-alt:before { + content: "\f129" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-camera:before { + content: "\f306" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-car:before { + content: "\f16b" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-carrot:before { + content: "\f511" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-cart:before { + content: "\f174" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-category:before { + content: "\f318" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-chart-area:before { + content: "\f239" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-chart-bar:before { + content: "\f185" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-chart-line:before { + content: "\f238" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-chart-pie:before { + content: "\f184" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-clipboard:before { + content: "\f481" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-clock:before { + content: "\f469" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-cloud-saved:before { + content: "\f137" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-cloud-upload:before { + content: "\f13b" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-cloud:before { + content: "\f176" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-code-standards:before { + content: "\f13a" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-coffee:before { + content: "\f16f" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-color-picker:before { + content: "\f131" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-columns:before { + content: "\f13c" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-controls-back:before { + content: "\f518" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-controls-forward:before { + content: "\f519" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-controls-pause:before { + content: "\f523" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-controls-play:before { + content: "\f522" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-controls-repeat:before { + content: "\f515" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-controls-skipback:before { + content: "\f516" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-controls-skipforward:before { + content: "\f517" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-controls-volumeoff:before { + content: "\f520" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-controls-volumeon:before { + content: "\f521" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-cover-image:before { + content: "\f13d" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-database-add:before { + content: "\f170" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-database-export:before { + content: "\f17a" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-database-import:before { + content: "\f17b" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-database-remove:before { + content: "\f17c" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-database-view:before { + content: "\f17d" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-database:before { + content: "\f17e" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-desktop:before { + content: "\f472" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-dismiss:before { + content: "\f153" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-download:before { + content: "\f316" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-drumstick:before { + content: "\f17f" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-edit-large:before { + content: "\f327" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-edit-page:before { + content: "\f186" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-edit:before { + content: "\f464" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-editor-aligncenter:before { + content: "\f207" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-editor-alignleft:before { + content: "\f206" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-editor-alignright:before { + content: "\f208" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-editor-bold:before { + content: "\f200" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-editor-break:before { + content: "\f474" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-editor-code-duplicate:before { + content: "\f494" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-editor-code:before { + content: "\f475" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-editor-contract:before { + content: "\f506" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-editor-customchar:before { + content: "\f220" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-editor-expand:before { + content: "\f211" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-editor-help:before { + content: "\f223" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-editor-indent:before { + content: "\f222" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-editor-insertmore:before { + content: "\f209" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-editor-italic:before { + content: "\f201" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-editor-justify:before { + content: "\f214" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-editor-kitchensink:before { + content: "\f212" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-editor-ltr:before { + content: "\f10c" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-editor-ol-rtl:before { + content: "\f12c" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-editor-ol:before { + content: "\f204" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-editor-outdent:before { + content: "\f221" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-editor-paragraph:before { + content: "\f476" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-editor-paste-text:before { + content: "\f217" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-editor-paste-word:before { + content: "\f216" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-editor-quote:before { + content: "\f205" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-editor-removeformatting:before { + content: "\f218" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-editor-rtl:before { + content: "\f320" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-editor-spellcheck:before { + content: "\f210" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-editor-strikethrough:before { + content: "\f224" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-editor-table:before { + content: "\f535" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-editor-textcolor:before { + content: "\f215" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-editor-ul:before { + content: "\f203" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-editor-underline:before { + content: "\f213" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-editor-unlink:before { + content: "\f225" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-editor-video:before { + content: "\f219" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-ellipsis:before { + content: "\f11c" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-email-alt:before { + content: "\f466" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-email-alt2:before { + content: "\f467" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-email:before { + content: "\f465" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-embed-audio:before { + content: "\f13e" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-embed-generic:before { + content: "\f13f" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-embed-photo:before { + content: "\f144" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-embed-post:before { + content: "\f146" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-embed-video:before { + content: "\f149" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-excerpt-view:before { + content: "\f164" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-exit:before { + content: "\f14a" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-external:before { + content: "\f504" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-facebook-alt:before { + content: "\f305" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-facebook:before { + content: "\f304" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-feedback:before { + content: "\f175" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-filter:before { + content: "\f536" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-flag:before { + content: "\f227" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-food:before { + content: "\f187" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-format-aside:before { + content: "\f123" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-format-audio:before { + content: "\f127" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-format-chat:before { + content: "\f125" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-format-gallery:before { + content: "\f161" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-format-image:before { + content: "\f128" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-format-quote:before { + content: "\f122" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-format-status:before { + content: "\f130" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-format-video:before { + content: "\f126" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-forms:before { + content: "\f314" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-fullscreen-alt:before { + content: "\f188" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-fullscreen-exit-alt:before { + content: "\f189" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-games:before { + content: "\f18a" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-google:before { + content: "\f18b" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-googleplus:before { + content: "\f462" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-grid-view:before { + content: "\f509" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-groups:before { + content: "\f307" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-hammer:before { + content: "\f308" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-heading:before { + content: "\f10e" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-heart:before { + content: "\f487" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-hidden:before { + content: "\f530" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-hourglass:before { + content: "\f18c" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-html:before { + content: "\f14b" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-id-alt:before { + content: "\f337" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-id:before { + content: "\f336" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-image-crop:before { + content: "\f165" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-image-filter:before { + content: "\f533" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-image-flip-horizontal:before { + content: "\f169" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-image-flip-vertical:before { + content: "\f168" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-image-rotate-left:before { + content: "\f166" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-image-rotate-right:before { + content: "\f167" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-image-rotate:before { + content: "\f531" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-images-alt:before { + content: "\f232" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-images-alt2:before { + content: "\f233" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-index-card:before { + content: "\f510" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-info-outline:before { + content: "\f14c" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-info:before { + content: "\f348" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-insert-after:before { + content: "\f14d" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-insert-before:before { + content: "\f14e" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-insert:before { + content: "\f10f" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-instagram:before { + content: "\f12d" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-laptop:before { + content: "\f547" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-layout:before { + content: "\f538" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-leftright:before { + content: "\f229" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-lightbulb:before { + content: "\f339" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-linkedin:before { + content: "\f18d" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-list-view:before { + content: "\f163" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-location-alt:before { + content: "\f231" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-location:before { + content: "\f230" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-lock-duplicate:before { + content: "\f315" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-lock:before { + content: "\f160" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-marker:before { + content: "\f159" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-media-archive:before { + content: "\f501" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-media-audio:before { + content: "\f500" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-media-code:before { + content: "\f499" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-media-default:before { + content: "\f498" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-media-document:before { + content: "\f497" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-media-interactive:before { + content: "\f496" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-media-spreadsheet:before { + content: "\f495" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-media-text:before { + content: "\f491" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-media-video:before { + content: "\f490" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-megaphone:before { + content: "\f488" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-menu-alt:before { + content: "\f228" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-menu-alt2:before { + content: "\f329" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-menu-alt3:before { + content: "\f349" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-menu:before { + content: "\f333" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-microphone:before { + content: "\f482" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-migrate:before { + content: "\f310" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-minus:before { + content: "\f460" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-money-alt:before { + content: "\f18e" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-money:before { + content: "\f526" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-move:before { + content: "\f545" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-nametag:before { + content: "\f484" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-networking:before { + content: "\f325" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-no-alt:before { + content: "\f335" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-no:before { + content: "\f158" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-open-folder:before { + content: "\f18f" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-palmtree:before { + content: "\f527" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-paperclip:before { + content: "\f546" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-pdf:before { + content: "\f190" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-performance:before { + content: "\f311" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-pets:before { + content: "\f191" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-phone:before { + content: "\f525" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-pinterest:before { + content: "\f192" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-playlist-audio:before { + content: "\f492" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-playlist-video:before { + content: "\f493" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-plugins-checked:before { + content: "\f485" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-plus-alt:before { + content: "\f502" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-plus-alt2:before { + content: "\f543" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-plus:before { + content: "\f132" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-podio:before { + content: "\f19c" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-portfolio:before { + content: "\f322" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-post-status:before { + content: "\f173" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-pressthis:before { + content: "\f157" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-printer:before { + content: "\f193" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-privacy:before { + content: "\f194" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-products:before { + content: "\f312" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-randomize:before { + content: "\f503" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-reddit:before { + content: "\f195" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-redo:before { + content: "\f172" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-remove:before { + content: "\f14f" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-rest-api:before { + content: "\f124" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-rss:before { + content: "\f303" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-saved:before { + content: "\f15e" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-schedule:before { + content: "\f489" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-screenoptions:before { + content: "\f180" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-search:before { + content: "\f179" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-share-alt:before { + content: "\f240" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-share-alt2:before { + content: "\f242" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-share:before { + content: "\f237" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-shield-alt:before { + content: "\f334" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-shield:before { + content: "\f332" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-shortcode:before { + content: "\f150" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-slides:before { + content: "\f181" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-smartphone:before { + content: "\f470" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-smiley:before { + content: "\f328" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-sort:before { + content: "\f156" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-sos:before { + content: "\f468" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-spotify:before { + content: "\f196" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-star-empty:before { + content: "\f154" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-star-filled:before { + content: "\f155" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-star-half:before { + content: "\f459" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-sticky:before { + content: "\f537" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-store:before { + content: "\f513" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-superhero-alt:before { + content: "\f197" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-superhero:before { + content: "\f198" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-table-col-after:before { + content: "\f151" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-table-col-before:before { + content: "\f152" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-table-col-delete:before { + content: "\f15a" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-table-row-after:before { + content: "\f15b" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-table-row-before:before { + content: "\f15c" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-table-row-delete:before { + content: "\f15d" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-tablet:before { + content: "\f471" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-tag:before { + content: "\f323" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-tagcloud:before { + content: "\f479" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-testimonial:before { + content: "\f473" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-text-page:before { + content: "\f121" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-text:before { + content: "\f478" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-thumbs-down:before { + content: "\f542" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-thumbs-up:before { + content: "\f529" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-tickets-alt:before { + content: "\f524" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-tickets:before { + content: "\f486" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-tide:before { + content: "\f10d" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-translation:before { + content: "\f326" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-trash:before { + content: "\f182" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-twitch:before { + content: "\f199" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-twitter-alt:before { + content: "\f302" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-twitter:before { + content: "\f301" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-undo:before { + content: "\f171" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-universal-access-alt:before { + content: "\f507" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-universal-access:before { + content: "\f483" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-unlock:before { + content: "\f528" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-update-alt:before { + content: "\f113" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-update:before { + content: "\f463" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-upload:before { + content: "\f317" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-vault:before { + content: "\f178" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-video-alt:before { + content: "\f234" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-video-alt2:before { + content: "\f235" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-video-alt3:before { + content: "\f236" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-visibility:before { + content: "\f177" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-warning:before { + content: "\f534" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-welcome-add-page:before { + content: "\f133" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-welcome-comments:before { + content: "\f117" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-welcome-learn-more:before { + content: "\f118" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-welcome-view-site:before { + content: "\f115" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-welcome-widgets-menus:before { + content: "\f116" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-welcome-write-blog:before { + content: "\f119" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-whatsapp:before { + content: "\f19a" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-wordpress-alt:before { + content: "\f324" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-wordpress:before { + content: "\f120" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-xing:before { + content: "\f19d" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-yes-alt:before { + content: "\f12a" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-yes:before { + content: "\f147" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-youtube:before { + content: "\f19b" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-editor-distractionfree:before { + content: "\f211" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-exerpt-view:before { + content: "\f164" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-format-links:before { + content: "\f103" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-format-standard:before { + content: "\f109" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-post-trash:before { + content: "\f182" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-share1:before { + content: "\f237" !important; } + #adminmenu#adminmenu#adminmenu a.ame-has-custom-dashicon .dashicons-welcome-edit-page:before { + content: "\f119" !important; } /*# sourceMappingURL=force-dashicons.css.map */ diff --git a/css/force-dashicons.css.map b/css/force-dashicons.css.map index 456fb6c..5d91c80 100644 --- a/css/force-dashicons.css.map +++ b/css/force-dashicons.css.map @@ -1 +1,7 @@ -{"version":3,"sourceRoot":"","sources":["force-dashicons.scss","_dashicons.scss"],"names":[],"mappings":"AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAYA;ACZA;AAAA;AAAA;AAAA;;ADaC;EACC;EACA;;AAID;EACC;EACA;;AAED;EACC;;ACpBF;EAAyB;;AACzB;EAA+B;;AAC/B;EAAgC;;AAChC;EAA+B;;AAC/B;EAAmC;;AACnC;EAAqC;;AACrC;EAAkC;;AAClC;EAAgC;;AAChC;EAAgC;;AAChC;EAAmC;;AACnC;EAAkC;;AAClC;EAAkC;;AAClC;EAA+B;;AAC/B;EAAmC;;AACnC;EAA2B;;AAC3B;EAAqC;;AACrC;EAAoC;;AACpC;EAAgE;;AAChE;EAAkE;;AAClE;EAAiC;;AACjC;EAAmC;;AACnC;EAAiC;;AACjC;EAAiC;;AACjC;EAAgC;;AAChC;EAAkC;;AAClC;EAAiC;;AACjC;EAAiC;;AACjC;EAA4E;;AAC5E;EAAqC;;AACrC;EAAsC;;AACtC;EAA0C;;AAC1C;EAAqC;;AACrC;EAAuC;;AACvC;EAA+B;;AAC/B;EAAiC;;AACjC;EAAsC;;AACtC;EAAuC;;AACvC;EAAwC;;AACxC;EAA0C;;AAC1C;EAAiC;;AACjC;EAAyB;;AACzB;EAAyB;;AACzB;EAA8B;;AAC9B;EAA8B;;AAC9B;EAAiC;;AACjC;EAAqC;;AACrC;EAAuC;;AACvC;EAAsC;;AACtC;EAAsC;;AACtC;EAAsC;;AACtC;EAA4E;;AAC5E;EAAoC;;AACpC;EAAuC;;AACvC;EAAqC;;AACrC;EAAmC;;AACnC;EAAqC;;AACrC;EAAsC;;AACtC;EAAsC;;AACtC;EAA4C;;AAC5C;EAAiC;;AACjC;EAAsC;;AACtC;EAAmC;;AACnC;EAAkC;;AAClC;EAAgC;;AAChC;EAAyC;;AACzC;EAAkC;;AAClC;EAA+B;;AAC/B;EAAiC;;AACjC;EAAgC;;AAChC;EAAqC;;AACrC;EAAiC;;AACjC;EAA+B;;AAC/B;EAAgC;;AAChC;EAAiC;;AACjC;EAA+B;;AAC/B;EAAyB;;AACzB;EAA2B;;AAC3B;EAA6B;;AAC7B;EAAiC;;AACjC;EAA+B;;AAC/B;EAA2B;;AAC3B;EAAgC;;AAChC;EAAyB;;AACzB;EAAwD;;AACxD;EAA2B;;AAC3B;EAA6B;;AAC7B;EAA8B;;AAC9B;EAAyB;;AACzB;EAA8B;;AAC9B;EAA8B;;AAC9B;EAAgE;;AAChE;EAA8B;;AAC9B;EAAyB;;AACzB;EAA2B;;AAC3B;EAAwB;;AACxB;EAA4B;;AAC5B;EAAgC;;AAChC;EAAqC;;AACrC;EAAyC;;AACzC;EAA4B;;AAC5B;EAA4B;;AAC5B;EAA8B;;AAC9B;EAA0B;;AAC1B;EAA8B;;AAC9B;EAA6B;;AAC7B;EAA8B;;AAC9B;EAAkC;;AAClC;EAA8B;;AAC9B;EAA2B;;AAC3B;EAAkC;;AAClC;EAAyB;;AACzB;EAA6B;;AAC7B;EAA0B;;AAC1B;EAAgC;;AAChC;EAAwB;;AACxB;EAA6B;;AAC7B;EAA4B;;AAC5B;EAA6B;;AAC7B;EAAyB;;AACzB;EAAkC;;AAClC;EAAgC;;AAChC;EAA+B;;AAC/B;EAAkC;;AAClC;EAAmC;;AACnC;EAAsC;;AACtC;EAAsC;;AACtC;EAA+B;;AAC/B;EAAgC;;AAChC;EAAmC;;AACnC;EAAmC;;AACnC;EAAkC;;AAClC;EAAmC;;AACnC;EAAqC;;AACrC;EAAyC;;AACzC;EAAkC;;AAClC;EAAsC;;AACtC;EAAoC;;AACpC;EAAsC;;AACtC;EAAuC;;AACvC;EAAwB;;AACxB;EAAuB;;AACvB;EAA2B;;AAC3B;EAAyB;;AACzB;EAA6B;;AAC7B;EAA8B;;AAC9B;EAA0B;;AAC1B;EAA4B;;AAC5B;EAA2B;;AAC3B;EAAgC;;AAChC;EAA8B;;AAC9B;EAA+B;;AAC/B;EAAyB;;AACzB;EAAyB;;AACzB;EAA4B;;AAC5B;EAA0B;;AAC1B;EAA2B;;AAC3B;EAA8B;;AAC9B;EAA+B;;AAC/B;EAA4B;;AAC5B;EAAwB;;AACxB;EAA0B;;AAC1B;EAA8B;;AAC9B;EAA6B;;AAC7B;EAAiC;;AACjC;EAA+B;;AAC/B;EAA+B;;AAC/B;EAA6B;;AAC7B;EAAiC;;AACjC;EAA2B;;AAC3B;EAA+B;;AAC/B;EAAgC;;AAChC;EAA8B;;AAC9B;EAA+B;;AAC/B;EAA+B;;AAC/B;EAA0B;;AAC1B;EAA2B;;AAC3B;EAA+B;;AAC/B;EAAwB;;AACxB;EAA2B;;AAC3B;EAA2B;;AAC3B;EAA8B;;AAC9B;EAA8B;;AAC9B;EAA8B;;AAC9B;EAA+B;;AAC/B;EAA+B;;AAC/B;EAA2B;;AAC3B;EAAgC;;AAChC;EAAuB;;AACvB;EAA2B;;AAC3B;EAA6B;;AAC7B;EAA2B;;AAC3B;EAA0B;;AAC1B;EAAgC;;AAChC;EAA8B;;AAC9B;EAAyB;;AACzB;EAA6B;;AAC7B;EAA6B;;AAC7B;EAA2B;;AAC3B;EAA2B;;AAC3B;EAA0B;;AAC1B;EAA8B;;AAC9B;EAA+B;;AAC/B;EAA4B;;AAC5B;EAA2B;;AAC3B;EAA2B;;AAC3B;EAA+B;;AAC/B;EAA0B;;AAC1B;EAA2B;;AAC3B;EAA+B;;AAC/B;EAA2B;;AAC3B;EAA6B;;AAC7B;EAA0B;;AAC1B;EAA0B;;AAC1B;EAA6B;;AAC7B;EAAgC;;AAChC;EAA0B;;AAC1B;EAA8B;;AAC9B;EAAgC;;AAChC;EAA2B;;AAC3B;EAA8B","file":"force-dashicons.css"} \ No newline at end of file +{ +"version": 3, +"mappings": "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", +"sources": ["force-dashicons.scss","_dashicons.scss"], +"names": [], +"file": "force-dashicons.css" +} \ No newline at end of file diff --git a/css/menu-editor.css b/css/menu-editor.css index d969607..c11660e 100644 --- a/css/menu-editor.css +++ b/css/menu-editor.css @@ -1,27 +1,21 @@ -@charset "UTF-8"; /* Admin Menu Editor CSS file */ .ame-input-group { display: flex; - flex-wrap: wrap; -} -.ame-input-group .ame-input-group-secondary, .ame-input-group > :not(:first-child) { - margin-left: -1px; - border-top-left-radius: 0; - border-bottom-left-radius: 0; -} -.ame-input-group > :not(:last-child) { - margin-right: 0; - border-top-right-radius: 0; - border-bottom-right-radius: 0; -} + flex-wrap: wrap; } + .ame-input-group .ame-input-group-secondary, .ame-input-group > :not(:first-child) { + margin-left: -1px; + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + .ame-input-group > :not(:last-child) { + margin-right: 0; + border-top-right-radius: 0; + border-bottom-right-radius: 0; } #ws_menu_editor { - min-width: 780px; -} + min-width: 780px; } .ame-is-free-version #ws_menu_editor { - margin-top: 9px; -} + margin-top: 9px; } .ws_main_container { margin: 2px; @@ -33,54 +27,48 @@ background-color: #FFFFFF; border-radius: 0px; -moz-border-radius: 0px; - -webkit-border-radius: 0px; -} + -webkit-border-radius: 0px; } .ws_box { min-height: 30px; width: 100%; - margin: 0; -} + margin: 0; } .ws_basic_container { float: left; - display: block; -} + display: block; } .ws_dropzone { display: block; box-sizing: border-box; margin: 2px 6px; border: 3px none #b4b9be; - height: 31px; -} + height: 31px; } .ws_dropzone_active, .ws_dropzone_hover, .ws_top_to_submenu_drop_hover .ws_dropzone { - border-style: dashed; -} + border-style: dashed; } .ws_dropzone_hover, .ws_top_to_submenu_drop_hover .ws_dropzone { - border-width: 1px; -} + border-width: 1px; } + +.ws_invalid_item_drop_target { + outline: 2px solid red; } /************************************************* Actor UI *************************************************/ #ws_actor_selector li:after { - content: "| "; -} + content: '| '; } #ws_actor_selector li:last-child:after { - content: ""; -} + content: ''; } #ws_actor_selector li a { display: inline-block; - text-align: center; -} + text-align: center; } #ws_actor_selector li a::before { display: block; content: attr(data-text); @@ -88,108 +76,90 @@ height: 1px; overflow: hidden; visibility: hidden; - margin-bottom: -1px; -} + margin-bottom: -1px; } #ws_actor_selector { - margin-top: 6px; -} + margin-top: 6px; } /** * The checkbox that lets the user show/hide a menu for the currently selected actor. */ #ws_menu_editor .ws_actor_access_checkbox, -#ws_menu_editor input[type=checkbox].ws_actor_access_checkbox { +#ws_menu_editor input[type="checkbox"].ws_actor_access_checkbox { margin-right: 2px; margin-left: 2px; margin-top: 1px; - vertical-align: text-top; -} -#ws_menu_editor .ws_actor_access_checkbox:indeterminate:before, -#ws_menu_editor input[type=checkbox].ws_actor_access_checkbox:indeterminate:before { - content: "■"; - color: #1e8cbe; - margin: -3px 0 0 -1px; - font: 400 14px/1 dashicons; - float: left; - display: inline-block; - vertical-align: middle; - width: 16px; - -webkit-font-smoothing: antialiased; -} -@media screen and (max-width: 782px) { + vertical-align: text-top; } #ws_menu_editor .ws_actor_access_checkbox:indeterminate:before, -#ws_menu_editor input[type=checkbox].ws_actor_access_checkbox:indeterminate:before { - height: 1.5625rem; - width: 1.5625rem; - line-height: 1.5625rem; - margin: -1px; - font-size: 18px; - font-family: unset; - font-weight: normal; - } -} + #ws_menu_editor input[type="checkbox"].ws_actor_access_checkbox:indeterminate:before { + content: '\25a0'; + color: #1e8cbe; + margin: -3px 0 0 -1px; + font: 400 14px/1 dashicons; + float: left; + display: inline-block; + vertical-align: middle; + width: 16px; + -webkit-font-smoothing: antialiased; } + @media screen and (max-width: 782px) { + #ws_menu_editor .ws_actor_access_checkbox:indeterminate:before, + #ws_menu_editor input[type="checkbox"].ws_actor_access_checkbox:indeterminate:before { + height: 1.5625rem; + width: 1.5625rem; + line-height: 1.5625rem; + margin: -1px; + font-size: 18px; + font-family: unset; + font-weight: normal; } } @media screen and (max-width: 782px) { - #ws_menu_editor input[type=checkbox].ws_actor_access_checkbox:indeterminate:before { + #ws_menu_editor input[type="checkbox"].ws_actor_access_checkbox:indeterminate:before { margin: -6px 0 0 1px; - font: 400 26px/1 dashicons; - } -} + font: 400 26px/1 dashicons; } } /* The checkbox is only visible when viewing the menu configuration for a specific actor. */ #ws_menu_editor .ws_actor_access_checkbox { - display: none; -} + display: none; } #ws_menu_editor.ws_is_actor_view .ws_actor_access_checkbox { - display: inline-block; -} + display: inline-block; } /* Gray-out items inaccessible to the currently selected actor */ .ws_is_actor_view .ws_container.ws_is_hidden_for_actor { - background-color: #F9F9F9; -} + background-color: #F9F9F9; } .ws_is_actor_view .ws_is_hidden_for_actor .ws_item_title { - color: #777; -} + color: #777; } /* * The sidebar */ #ws_editor_sidebar { width: auto; - padding: 2px; -} + padding: 2px; } #ws_menu_editor .ws_main_button { clear: both; display: block; margin: 4px; - width: 130px; -} + width: 130px; } #ws_menu_editor #ws_save_menu { - margin-bottom: 20px; -} + margin-bottom: 20px; } #ws_menu_editor #ws_toggle_editor_layout { - display: none; -} + display: none; } #ws_menu_editor .ws_sidebar_button_separator { display: block; height: 4px; margin: 0; - padding: 0; -} + padding: 0; } /* * Page heading and tabs */ #ws_ame_editor_heading { - float: left; -} + float: left; } /* * Menu components and widgets @@ -198,28 +168,23 @@ display: block; width: 296px; padding: 3px; - margin: 2px 0 2px 6px; -} -body.rtl .ws_container { - margin-right: 6px; - margin-left: 0; -} + margin: 2px 0 2px 6px; } + body.rtl .ws_container { + margin-right: 6px; + margin-left: 0; } .ws_submenu { - min-height: 2em; -} + min-height: 2em; } .ws_item_head { - padding: 0; -} + padding: 0; } .ws_item_title { display: inline-block; padding: 2px; cursor: default; font-size: 13px; - line-height: 18px; -} + line-height: 18px; } .ws_edit_link { float: right; @@ -231,23 +196,19 @@ body.rtl .ws_container { border-radius: 3px; -moz-border-radius: 3px; -webkit-border-radius: 3px; - text-decoration: none; -} + text-decoration: none; } .ws_menu_drop_hover { - background-color: #43b529 !important; -} + background-color: #43b529 !important; } .ws_container.ui-sortable-helper * { - cursor: move !important; -} + cursor: move !important; } .ws_container.ws_sortable_placeholder { outline: 1px dashed #b4b9be; outline-offset: -1px; background: none; - border-color: transparent; -} + border-color: transparent; } /* If you ever want to apply a right-arrow style to the currently selected menu item, @@ -282,8 +243,7 @@ body.rtl .ws_container { * of CSS triangles. */ .ws_container { - position: relative; -} + position: relative; } .ws_menu.ws_active::after { content: ""; @@ -293,13 +253,11 @@ body.rtl .ws_container { top: -1px; width: 19px; height: 30px; - background: transparent url("../images/submenu-tip.png") no-repeat center; -} + background: transparent url("../images/submenu-tip.png") no-repeat center; } .ws_container.ws_menu_separator.ws_active::after, .ws_container.ui-sortable-helper::after { - background-image: none; -} + background-image: none; } /**************************************** Per-menu settings fields & panels @@ -312,38 +270,32 @@ body.rtl .ws_container { -moz-border-radius: 2px; -moz-border-radius-topright: 0; -webkit-border-radius: 2px; - -webkit-border-top-right-radius: 0; -} + -webkit-border-top-right-radius: 0; } .ws_edit_panel { margin: 0; padding: 0; - border: none; -} + border: none; } .ws_edit_field { margin-bottom: 6px; - min-height: 45px; -} -.ws_edit_field:after { - visibility: hidden; - display: block; - height: 0; - font-size: 0; - content: " "; - clear: both; -} + min-height: 45px; } + .ws_edit_field:after { + visibility: hidden; + display: block; + height: 0; + font-size: 0; + content: " "; + clear: both; } .ws_edit_field-custom { - margin-top: 10px; -} + margin-top: 10px; } .ws_edit_field.ws_no_field_caption { margin-top: 10px; padding-left: 1px; height: 25px; - min-height: 25px; -} + min-height: 25px; } /* * Group headings @@ -353,12 +305,10 @@ body.rtl .ws_container { min-height: 0; padding-top: 0; background: #ccc; - margin: 8px -4px 5px; -} -.ws_edit_field.ws_field_group_heading span { - display: none; - font-weight: bold; -} + margin: 8px -4px 5px; } + .ws_edit_field.ws_field_group_heading span { + display: none; + font-weight: bold; } /* The reset-to-default button */ .ws_reset_button { @@ -371,31 +321,25 @@ body.rtl .ws_container { width: 16px; height: 16px; vertical-align: top; - background: url("../images/pencil_delete_gray.png") no-repeat center; -} -.ame-is-wp53-plus .ws_reset_button { - margin-top: 5px; -} + background: url("../images/pencil_delete_gray.png") no-repeat center; } + .ame-is-wp53-plus .ws_reset_button { + margin-top: 5px; } .ws_reset_button:hover { - background-image: url("../images/pencil_delete.png"); -} + background-image: url("../images/pencil_delete.png"); } .ws_input_default input, .ws_input_default select, .ws_input_default .ws_color_scheme_display { - color: gray; -} + color: gray; } /* No reset button for fields set to the default value and fields without a default value */ .ws_input_default .ws_reset_button, .ws_has_no_default .ws_reset_button { - visibility: hidden; -} + visibility: hidden; } /* The input box in each field editor */ -#ws_menu_editor .ws_editbox input[type=text], -#ws_menu_editor .ws_editbox select { +#ws_menu_editor .ws_editbox input[type="text"], #ws_menu_editor .ws_editbox select { display: block; float: left; width: 254px; @@ -403,29 +347,23 @@ body.rtl .ws_container { font-size: 12px; line-height: 17px; padding-top: 3px; - padding-bottom: 3px; -} -.ame-is-wp53-plus #ws_menu_editor .ws_editbox input[type=text], -.ame-is-wp53-plus #ws_menu_editor .ws_editbox select { - height: 28px; - margin-top: 1px; -} + padding-bottom: 3px; } + .ame-is-wp53-plus #ws_menu_editor .ws_editbox input[type="text"], + .ame-is-wp53-plus #ws_menu_editor .ws_editbox select { + height: 28px; + margin-top: 1px; } #ws_menu_editor .ws_edit_field label { display: block; - float: left; -} + float: left; } -#ws_menu_editor .ws_edit_field-custom input[type=checkbox] { - margin-top: 0; -} +#ws_menu_editor .ws_edit_field-custom input[type="checkbox"] { + margin-top: 0; } -#ws_menu_editor input[type=text].ws_field_value { - min-height: 25px; -} -.ame-is-wp53-plus #ws_menu_editor input[type=text].ws_field_value { - min-height: 28px; -} +#ws_menu_editor input[type="text"].ws_field_value { + min-height: 25px; } + .ame-is-wp53-plus #ws_menu_editor input[type="text"].ws_field_value { + min-height: 28px; } /* Dropdown button for combo-box fields */ #ws_menu_editor .ws_dropdown_button, @@ -445,8 +383,7 @@ body.rtl .ws_container { border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 0; - border-bottom-left-radius: 0; -} + border-bottom-left-radius: 0; } .ame-is-wp53-plus #ws_menu_editor .ws_dropdown_button, #ws_menu_access_editor.ame-is-wp53-plus .ws_dropdown_button { @@ -456,26 +393,21 @@ body.rtl .ws_container { border-left-style: none; font-size: 16px !important; line-height: 24px; - color: #555; -} -.ame-is-wp53-plus #ws_menu_editor .ws_dropdown_button:hover, -#ws_menu_access_editor.ame-is-wp53-plus .ws_dropdown_button:hover { - color: #23282d; -} + color: #555; } + .ame-is-wp53-plus #ws_menu_editor .ws_dropdown_button:hover, + #ws_menu_access_editor.ame-is-wp53-plus .ws_dropdown_button:hover { + color: #23282d; } #ws_menu_access_editor .ws_dropdown_button { display: inline-block; - height: 27px; -} + height: 27px; } #ws_menu_access_editor.ame-is-wp53-plus .ws_dropdown_button { - height: 30px; -} + height: 30px; } #ws_menu_editor .ws_dropdown_button { display: block; - float: left; -} + float: left; } /* The appearance and size of combo-box fields need to be changed @@ -486,51 +418,42 @@ to accommodate the drop-down button. margin-right: 0; border-right: 0; border-top-right-radius: 0; - border-bottom-right-radius: 0; -} + border-bottom-right-radius: 0; } #ws_menu_access_editor input.ws_has_dropdown { width: 90%; box-sizing: border-box; height: 27px; - margin-top: 1px; -} + margin-top: 1px; } #ws_menu_access_editor.ame-is-wp53-plus input.ws_has_dropdown { - height: 30px; -} + height: 30px; } #ws_menu_editor .ws_has_dropdown input.ws_field_value { - width: 229px; -} + width: 229px; } /* Unlike others, this field is just a single checkbox, so it has a smaller height */ #ws_menu_editor .ws_edit_field-custom { - height: 16px; -} + height: 16px; } /* * "Show/hide advanced fields" */ .ws_toggle_container { text-align: right; - margin-right: 27px; -} + margin-right: 27px; } .ws_toggle_advanced_fields { color: #6087CB; text-decoration: none; - font-size: 0.85em; -} + font-size: 0.85em; } .ws_toggle_advanced_fields:visited, .ws_toggle_advanced_fields:active { - color: #6087CB; -} + color: #6087CB; } .ws_toggle_advanced_fields:hover { color: #d54e21; - text-decoration: underline; -} + text-decoration: underline; } /************************************ Menu flags @@ -538,8 +461,7 @@ to accommodate the drop-down button. .ws_flag_container { float: right; margin-right: 4px; - padding-top: 2px; -} + padding-top: 2px; } .ws_flag { display: block; @@ -547,29 +469,24 @@ to accommodate the drop-down button. width: 16px; height: 16px; margin-left: 4px; - background-repeat: no-repeat; -} + background-repeat: no-repeat; } /* user-created items */ .ws_custom_flag { - background-image: url("../images/page-add.png"); -} + background-image: url("../images/page-add.png"); } /* unused items - those that are in the default menu but not in the custom one */ .ws_unused_flag { background-image: url("../images/new-menu-badge.png"); - width: 31px; -} + width: 31px; } /* hidden items */ .ws_hidden_flag { - background-image: url("../images/page-invisible.png"); -} + background-image: url("../images/page-invisible.png"); } /* items with custom permissions for the selected actor */ .ws_custom_actor_permissions_flag { - font: 16px/1 "dashicons"; -} + font: 16px/1 'dashicons'; } .ws_custom_actor_permissions_flag::before { /*content: "\f160";*/ @@ -579,23 +496,20 @@ to accommodate the drop-down button. color: black; filter: alpha(opacity=25); /*IE 5-7*/ - opacity: 0.25; -} + opacity: 0.25; } /* Hidden from everyone except the current user and Super Admin. */ .ws_hidden_from_others_flag { - background-image: url("../images/font-awesome/eye-slash.png"); -} + background-image: url("../images/font-awesome/eye-slash.png"); } /* Item visibility can't be determined because it depends on a meta capability. */ .ws_uncertain_meta_cap_flag::before { - font: 16px/1 "dashicons"; + font: 16px/1 'dashicons'; content: "\f348"; color: black; filter: alpha(opacity=25); /*IE 5-7*/ - opacity: 0.25; -} + opacity: 0.25; } /* These classes could be used to apply different styles to items depending on their flags */ /************************************ @@ -611,8 +525,7 @@ to accommodate the drop-down button. position: sticky; top: var(--wp-admin--admin-bar--height, 32px); background-color: white; - z-index: 5; -} + z-index: 5; } .ws_button { display: block; @@ -627,45 +540,36 @@ to accommodate the drop-down button. height: 16px; border-radius: 3px; -moz-border-radius: 3px; - -webkit-border-radius: 3px; -} -.ws_button img { - vertical-align: top; -} + -webkit-border-radius: 3px; } + .ws_button img { + vertical-align: top; } a.ws_button:hover { background-color: #d0e0ff; - border-color: #9090c0; -} + border-color: #9090c0; } .ws_button.ws_button_disabled { - border-color: #ccc; -} + border-color: #ccc; } a.ws_button.ws_button_disabled:hover { background-color: white; - border: 1px solid #ccc; -} + border: 1px solid #ccc; } .ws_button_disabled img { filter: grayscale(1); -webkit-filter: grayscale(1); - opacity: 0.65; -} + opacity: 0.65; } .ws_separator { float: left; - width: 5px; -} + width: 5px; } #ws_toggle_toolbar, .ws_toggle_toolbar_button { - margin-right: 0; -} + margin-right: 0; } .ws_is_sticky_toolbar { border-bottom: 1px solid #ccc; - box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1); -} + box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1); } /************************************ Capability selector @@ -676,19 +580,16 @@ select.ws_dropdown { z-index: 1002; position: absolute; display: none; - font-family: "Lucida Grande", Verdana, Arial, "Bitstream Vera Sans", sans-serif; - font-size: 12px; -} + font-family: "Lucida Grande",Verdana,Arial,"Bitstream Vera Sans",sans-serif; + font-size: 12px; } select.ws_dropdown option { - font-family: "Lucida Grande", Verdana, Arial, "Bitstream Vera Sans", sans-serif; + font-family: "Lucida Grande",Verdana,Arial,"Bitstream Vera Sans",sans-serif; font-size: 12px; - padding: 3px; -} + padding: 3px; } select.ws_dropdown optgroup option { - padding-left: 10px; -} + padding-left: 10px; } /************************************ Tabs (small) @@ -698,33 +599,27 @@ select.ws_dropdown optgroup option { .ws_tool_tab_nav { list-style: outside none none; padding: 0; - margin: 0 0 0 6px; -} -.ws_tool_tab_nav li { - display: inline-block; - border: 1px solid transparent; - border-bottom-width: 0; - padding: 3px 5px 5px; - line-height: 1.35em; - margin-bottom: 0; -} -.ws_tool_tab_nav li.ui-tabs-active { - border-color: #dfdfdf; - border-bottom-color: #FDFDFD; - background: #FDFDFD none; -} -.ws_tool_tab_nav a { - text-decoration: none; -} -.ws_tool_tab_nav li.ui-tabs-active a { - color: #32373C; -} + margin: 0 0 0 6px; } + .ws_tool_tab_nav li { + display: inline-block; + border: 1px solid transparent; + border-bottom-width: 0; + padding: 3px 5px 5px; + line-height: 1.35em; + margin-bottom: 0; } + .ws_tool_tab_nav li.ui-tabs-active { + border-color: #dfdfdf; + border-bottom-color: #FDFDFD; + background: #FDFDFD none; } + .ws_tool_tab_nav a { + text-decoration: none; } + .ws_tool_tab_nav li.ui-tabs-active a { + color: #32373C; } .ws_tool_tab { border-top: 1px solid #DFDFDF; margin-top: -1px; - background-color: #FDFDFD; -} + background-color: #FDFDFD; } /************************************ Icon selector @@ -736,20 +631,16 @@ select.ws_dropdown optgroup option { width: 216px; padding: 4px 0 0 0; position: absolute; - z-index: 6; -} + z-index: 6; } #ws_icon_selector.ws_with_more_icons { - width: 570px; -} + width: 570px; } #ws_icon_selector .ws_icon_extra { - display: none; -} + display: none; } #ws_icon_selector.ws_with_more_icons .ws_icon_extra { - display: inline-block; -} + display: inline-block; } #ws_icon_selector .ws_icon_option { float: left; @@ -764,8 +655,7 @@ select.ws_dropdown optgroup option { background-image: -webkit-linear-gradient(top, #fefefe, #f4f4f4); background-image: -moz-linear-gradient(top, #fefefe, #f4f4f4); background-image: -o-linear-gradient(top, #fefefe, #f4f4f4); - background-image: linear-gradient(to bottom, #fefefe, #f4f4f4); -} + background-image: linear-gradient(to bottom, #fefefe, #f4f4f4); } #ws_icon_selector .ws_icon_option:hover { /* Gradients and colours cribbed from WP 3.5.1 button styles */ @@ -776,43 +666,36 @@ select.ws_dropdown optgroup option { background-image: -moz-linear-gradient(top, #fff, #f3f3f3); background-image: -ms-linear-gradient(top, #fff, #f3f3f3); background-image: -o-linear-gradient(top, #fff, #f3f3f3); - background-image: linear-gradient(to bottom, #fff, #f3f3f3); -} + background-image: linear-gradient(to bottom, #fff, #f3f3f3); } #ws_icon_selector .ws_icon_option.ws_selected_icon { border-color: green; background-color: #deffca; - background-image: none; -} + background-image: none; } #ws_icon_selector .ws_icon_option .ws_icon_image { float: none; margin: 0; - padding: 0; -} -#ws_icon_selector .ws_icon_option .ws_icon_image:before { - color: #85888c; - display: inline-block; -} + padding: 0; } + #ws_icon_selector .ws_icon_option .ws_icon_image:before { + color: #85888c; + display: inline-block; } #ws_icon_selector .ws_icon_option .ws_icon_image.dashicons { width: 20px; height: 20px; - padding: 5px; -} + padding: 5px; } #ws_icon_selector .ws_icon_option img { display: inline-block; margin: 0; padding: 7px; width: 16px; - height: 16px; -} + height: 16px; } #ws_menu_editor .ws_edit_field-icon_url input.ws_field_value { width: 220px; - margin-right: 5px; -} + margin-right: 5px; } /* The icon button that displays the pop-up icon selector. */ #ws_menu_editor .ws_select_icon { @@ -822,61 +705,49 @@ select.ws_dropdown optgroup option { box-sizing: border-box; height: 25px; min-height: 25px; - min-width: 26px; -} -.ame-is-wp53-plus #ws_menu_editor .ws_select_icon { - height: 28px; - min-height: 28px; - margin-top: 1px; -} + min-width: 26px; } + .ame-is-wp53-plus #ws_menu_editor .ws_select_icon { + height: 28px; + min-height: 28px; + margin-top: 1px; } .ws_select_icon .ws_icon_image { color: #85888c; - padding: 3px; -} -.ws_select_icon .ws_icon_image.dashicons { - padding: 3px 2px; -} -.ws_select_icon .ws_icon_image.dashicons:before { - width: 20px; -} + padding: 3px; } + .ws_select_icon .ws_icon_image.dashicons { + padding: 3px 2px; } + .ws_select_icon .ws_icon_image.dashicons:before { + width: 20px; } /* Current icon node (image version) */ .ws_select_icon img { margin: 0; padding: 4px; width: 16px; - height: 16px; -} + height: 16px; } #ws_icon_selector .ws_tool_tab_nav { display: inline-block; margin-top: 2px; - position: relative; -} -#ws_icon_selector .ws_tool_tab_nav li { - padding: 4px 10px 11px; -} + position: relative; } + #ws_icon_selector .ws_tool_tab_nav li { + padding: 4px 10px 11px; } #ws_icon_selector .ws_tool_tab { padding: 0 4px 2px; max-height: 324px; - overflow-y: auto; -} + overflow-y: auto; } #ws_icon_selector .ws_icon_search_bar { margin: 0 0 0 2px; position: sticky; top: 0; background-color: #FDFDFD; - padding: 4px 0; -} + padding: 4px 0; } #ws_icon_selector .ws_no_matching_icons { margin-left: 2px; - padding: 4px 0; -} + padding: 4px 0; } #ws_choose_icon_from_media { - margin: 2px; -} + margin: 2px; } /************************************ Embedded page selector @@ -888,14 +759,12 @@ select.ws_dropdown optgroup option { border-radius: 3px; background-color: white; box-sizing: border-box; - position: absolute; -} + position: absolute; } .ws_page_selector_tab_nav { list-style: outside none none; padding: 0; - margin: 0 0 0 6px; -} + margin: 0 0 0 6px; } .ws_page_selector_tab_nav li { display: inline-block; @@ -903,22 +772,18 @@ select.ws_dropdown optgroup option { border-bottom-width: 0; padding: 3px 5px 5px; line-height: 1.35em; - margin-bottom: 0; -} + margin-bottom: 0; } .ws_page_selector_tab_nav a { - text-decoration: none; -} + text-decoration: none; } .ws_page_selector_tab_nav li.ui-tabs-active { border-color: #dfdfdf; background-color: #FDFDFD; - border-bottom-color: #FDFDFD; -} + border-bottom-color: #FDFDFD; } .ws_page_selector_tab_nav li.ui-tabs-active a { - color: #32373C; -} + color: #32373C; } .ws_page_selector_tab { border-top: 1px solid #DFDFDF; @@ -927,33 +792,28 @@ select.ws_dropdown optgroup option { margin-top: -1px; background-color: #FDFDFD; border-bottom-left-radius: 3px; - border-bottom-right-radius: 3px; -} + border-bottom-right-radius: 3px; } #ws_current_site_pages { width: 100%; min-height: 150px; max-height: 300px; margin-left: 0; - margin-right: 0; -} + margin-right: 0; } #ws_embedded_page_selector input { box-sizing: border-box; - max-width: 100%; -} + max-width: 100%; } #ws_custom_embedded_page_tab p:first-child { - margin-top: 0; -} + margin-top: 0; } /* Make the "Page" field look editable. It is read-only because the user can't change it directly (they have to use the dropdown), but we don't want it to be greyed-out. */ #ws_menu_editor .ws_edit_field-embedded_page_id input.ws_field_value { - background-color: white; -} + background-color: white; } /************************************ Menu color picker @@ -971,21 +831,18 @@ select.ws_dropdown optgroup option { border: 1px solid #ddd; background: white; cursor: pointer; - line-height: 20px; -} -.ame-is-wp53-plus .ws_color_scheme_display { - border-color: #7e8993; - border-radius: 4px; - margin-top: 1px; - margin-bottom: 1px; - padding: 3px 8px; - height: 28px; - line-height: 20px; -} + line-height: 20px; } + .ame-is-wp53-plus .ws_color_scheme_display { + border-color: #7e8993; + border-radius: 4px; + margin-top: 1px; + margin-bottom: 1px; + padding: 3px 8px; + height: 28px; + line-height: 20px; } .ws_open_color_editor { - width: 58px; -} + width: 58px; } .ws_color_display_item { display: inline-block; @@ -993,19 +850,16 @@ select.ws_dropdown optgroup option { height: 18px; margin-right: 4px; border: 1px solid #ccc; - border-radius: 3px; -} + border-radius: 3px; } .ws_color_display_item:last-child { - margin-right: 0; -} + margin-right: 0; } /************************************ Export and import *************************************/ #export_dialog, #import_dialog { - display: none; -} + display: none; } .ui-widget-overlay { background-color: black; @@ -1014,16 +868,14 @@ select.ws_dropdown optgroup option { top: 0; right: 0; bottom: 0; - opacity: 0.7; - -moz-opacity: 0.7; + opacity: 0.70; + -moz-opacity: 0.70; filter: alpha(opacity=70); width: 100%; - height: 100%; -} + height: 100%; } .ui-front { - z-index: 10000; -} + z-index: 10000; } .settings_page_menu_editor .ui-dialog { background: white; @@ -1031,24 +883,21 @@ select.ws_dropdown optgroup option { padding: 0; -moz-border-radius: 5px; -webkit-border-radius: 5px; - border-radius: 5px; -} -.settings_page_menu_editor .ui-dialog .ui-dialog-content { - padding: 8px 8px 8px 8px; - font-size: 1.1em; -} -.settings_page_menu_editor .ui-dialog .ame-scrollable-dialog-content { - max-height: 500px; - overflow-y: auto; - padding-top: 0.5em; -} + border-radius: 5px; } + .settings_page_menu_editor .ui-dialog .ui-dialog-content { + padding: 8px 8px 8px 8px; + font-size: 1.1em; } + .settings_page_menu_editor .ui-dialog .ame-scrollable-dialog-content { + max-height: 500px; + overflow-y: auto; + padding-top: 0.5em; } .settings_page_menu_editor .ui-dialog-titlebar { display: block; height: 22px; margin: 0; padding: 4px 4px 4px 8px; background-color: #86A7E3; - font-size: 1em; + font-size: 1.0em; line-height: 22px; -webkit-border-top-left-radius: 4px; -webkit-border-top-right-radius: 4px; @@ -1056,12 +905,10 @@ select.ws_dropdown optgroup option { -moz-border-radius-topright: 4px; border-top-left-radius: 4px; border-top-right-radius: 4px; - border-bottom: 1px solid #809fd9; -} + border-bottom: 1px solid #809fd9; } .settings_page_menu_editor .ui-dialog-title { color: white; - font-weight: bold; -} + font-weight: bold; } .settings_page_menu_editor .ui-button.ui-dialog-titlebar-close { background: #86A7E3 url(../images/x.png) no-repeat center; width: 22px; @@ -1071,110 +918,87 @@ select.ws_dropdown optgroup option { color: white; border-radius: 3px; -moz-border-radius: 3px; - -webkit-border-radius: 3px; -} + -webkit-border-radius: 3px; } .settings_page_menu_editor .ui-dialog-titlebar-close:hover { /*background-image: url(../images/x-light.png);*/ - background-color: #a6c2f5; -} + background-color: #a6c2f5; } + #export_dialog .ws_dialog_panel { - height: 50px; -} + height: 50px; } #import_dialog .ws_dialog_panel { - height: 64px; -} + height: 64px; } .ws_dialog_panel .ame-fixed-label-text { display: inline-block; - min-width: 6em; -} + min-width: 6em; } .ws_dialog_panel .ame-inline-select-with-input { - vertical-align: baseline; -} + vertical-align: baseline; } .ws_dialog_panel .ame-box-side-sizes { display: flex; flex-wrap: wrap; - max-width: 800px; -} -.ws_dialog_panel .ame-box-side-sizes .ame-fixed-label-text { - min-width: 4em; -} -.ws_dialog_panel .ame-box-side-sizes label { - margin-right: 2.5em; -} -.ws_dialog_panel .ame-box-side-sizes input { - margin-bottom: 0.4em; -} -.ws_dialog_panel .ame-box-side-sizes input[type=number] { - width: 6em; -} + max-width: 800px; } + .ws_dialog_panel .ame-box-side-sizes .ame-fixed-label-text { + min-width: 4em; } + .ws_dialog_panel .ame-box-side-sizes label { + margin-right: 2.5em; } + .ws_dialog_panel .ame-box-side-sizes input { + margin-bottom: 0.4em; } + .ws_dialog_panel .ame-box-side-sizes input[type=number] { + width: 6em; } .ame-flexbox-break { flex-basis: 100%; - height: 0; -} + height: 0; } .ws_dialog_buttons { text-align: right; margin-top: 20px; margin-bottom: 1px; - clear: both; -} + clear: both; } .ws_dialog_buttons .button-primary { display: block; float: left; margin-top: 0; - min-width: 8em; -} + min-width: 8em; } .ws_dialog_buttons .button { - margin-top: 0; -} + margin-top: 0; } .ws_dialog_buttons.ame-vertical-button-list { - text-align: left; -} + text-align: left; } .ws_dialog_buttons.ame-vertical-button-list .button-primary { - float: none; -} + float: none; } .ws_dialog_buttons.ame-vertical-button-list .button { width: 100%; text-align: left; - margin-bottom: 10px; -} + margin-bottom: 10px; } .ws_dialog_buttons.ame-vertical-button-list .button:last-child { - margin-bottom: 0; -} + margin-bottom: 0; } #import_file_selector { display: block; width: 286px; - margin: 6px auto 12px; -} + margin: 6px auto 12px; } #ws_start_import { - min-width: 100px; -} + min-width: 100px; } #import_complete_notice { text-align: center; font-size: large; - padding-top: 25px; -} + padding-top: 25px; } #ws_import_error_response { - width: 100%; -} + width: 100%; } .ws_dont_show_again { display: inline-block; - margin-top: 1em; -} + margin-top: 1em; } /************************************ Menu access editor @@ -1182,61 +1006,50 @@ select.ws_dropdown optgroup option { /* The launch button */ #ws_menu_editor .ws_edit_field-access_level input.ws_field_value { width: 190px; - margin-right: 5px; -} + margin-right: 5px; } .ws_launch_access_editor { min-width: 40px; - width: 58px; -} + width: 58px; } #ws_menu_access_editor { width: 400px; - display: none; -} + display: none; } .ws_dialog_subpanel { - margin-bottom: 1em; -} -.ws_dialog_subpanel fieldset p { - margin-top: 0; - margin-bottom: 4px; -} + margin-bottom: 1em; } + .ws_dialog_subpanel fieldset p { + margin-top: 0; + margin-bottom: 4px; } .ws-ame-dialog-subheading { display: block; font-weight: 600; font-size: 1em; - margin: 0 0 0.2em 0; -} + margin: 0 0 0.2em 0; } #ws_menu_access_editor .ws_column_access, #ws_menu_access_editor .ws_ext_action_check_column { text-align: center; width: 1em; - padding-right: 0; -} + padding-right: 0; } #ws_menu_access_editor .ws_column_access input, #ws_menu_access_editor .ws_ext_action_check_column input { - margin-right: 0; -} + margin-right: 0; } #ws_menu_access_editor .ws_column_role { - white-space: nowrap; -} + white-space: nowrap; } #ws_role_table_body_container { /*max-height: 400px; overflow: auto;*/ overflow: hidden; - margin-right: -1px; -} + margin-right: -1px; } .ws_role_table_body { margin-top: 2px; - max-width: 354px; -} + max-width: 354px; } .ws_has_separate_header .ws_role_table_header { border-bottom: none; @@ -1245,8 +1058,7 @@ select.ws_dropdown optgroup option { -webkit-border-bottom-left-radius: 0; -webkit-border-bottom-right-radius: 0; border-bottom-left-radius: 0; - border-bottom-right-radius: 0; -} + border-bottom-right-radius: 0; } .ws_has_separate_header .ws_role_table_body { border-top: none; @@ -1256,22 +1068,18 @@ select.ws_dropdown optgroup option { -webkit-border-top-left-radius: 0; -webkit-border-top-right-radius: 0; border-top-left-radius: 0; - border-top-right-radius: 0; -} + border-top-right-radius: 0; } .ws_role_id { - display: none; -} + display: none; } #ws_extra_capability { - width: 100%; -} + width: 100%; } #ws_role_access_container { position: relative; max-height: 430px; - overflow: auto; -} + overflow: auto; } #ws_role_access_overlay { width: 100%; @@ -1281,8 +1089,7 @@ select.ws_dropdown optgroup option { background: white; filter: alpha(opacity=60); opacity: 0.6; - -moz-opacity: 0.6; -} + -moz-opacity: 0.6; } #ws_role_access_overlay_content { position: absolute; @@ -1293,18 +1100,15 @@ select.ws_dropdown optgroup option { padding: 8px; border: 2px solid silver; border-radius: 5px; - color: #555; -} + color: #555; } #ws_menu_access_editor div.error { margin-left: 0; margin-right: 0; - margin-bottom: 5px; -} + margin-bottom: 5px; } #ws_hardcoded_role_error { - display: none; -} + display: none; } /*--------------------------------------------* The CPT/taxonomy permissions panel @@ -1313,100 +1117,74 @@ select.ws_dropdown optgroup option { * When there are CPT/taxonomy permissions available, the appearance of the role list changes a bit. */ .ws_has_extended_permissions { - /* The role or actor whose CPT/taxonomy permissions are currently expanded. */ -} -.ws_has_extended_permissions .ws_role_table_body .ws_column_role { - cursor: pointer; -} -.ws_has_extended_permissions .ws_role_table_body .ws_column_selected_role_tip { - display: table-cell; -} -.ws_has_extended_permissions .ws_role_table_body tr:hover { - background: #EAF2FA; -} -.ws_has_extended_permissions .ws_role_table_body td { - border-top: 1px solid #f1f1f1; -} -.ws_has_extended_permissions .ws_role_table_body tr:first-child td { - border-top-width: 0; -} -.ws_has_extended_permissions .ws_role_table_body tr.ws_cpt_selected_role { - background-color: #dddddd; -} -.ws_has_extended_permissions .ws_role_table_body tr.ws_cpt_selected_role .ws_column_role { - font-weight: bold; -} -.ws_has_extended_permissions .ws_role_table_body tr.ws_cpt_selected_role .ws_cpt_selected_role_tip { - visibility: visible; -} -.ws_has_extended_permissions .ws_role_table_body tr.ws_cpt_selected_role td { - color: #222; -} + /* The role or actor whose CPT/taxonomy permissions are currently expanded. */ } + .ws_has_extended_permissions .ws_role_table_body .ws_column_role { + cursor: pointer; } + .ws_has_extended_permissions .ws_role_table_body .ws_column_selected_role_tip { + display: table-cell; } + .ws_has_extended_permissions .ws_role_table_body tr:hover { + background: #EAF2FA; } + .ws_has_extended_permissions .ws_role_table_body td { + border-top: 1px solid #f1f1f1; } + .ws_has_extended_permissions .ws_role_table_body tr:first-child td { + border-top-width: 0; } + .ws_has_extended_permissions .ws_role_table_body tr.ws_cpt_selected_role { + background-color: #dddddd; } + .ws_has_extended_permissions .ws_role_table_body tr.ws_cpt_selected_role .ws_column_role { + font-weight: bold; } + .ws_has_extended_permissions .ws_role_table_body tr.ws_cpt_selected_role .ws_cpt_selected_role_tip { + visibility: visible; } + .ws_has_extended_permissions .ws_role_table_body tr.ws_cpt_selected_role td { + color: #222; } #ws_ext_permissions_container { float: left; width: 352px; - padding: 0 9px 0 0; -} + padding: 0 9px 0 0; } #ws_ext_permissions_container_caption { padding-left: 15px; max-width: 352px; position: relative; - white-space: nowrap; -} + white-space: nowrap; } #ws_ext_permissions_container .ws_ext_permissions_table { - margin-top: 2px; -} -#ws_ext_permissions_container .ws_ext_permissions_table tr td:first-child { - padding-left: 15px; -} -#ws_ext_permissions_container .ws_ext_permissions_table .ws_ext_group_title { - padding-bottom: 0; - font-weight: bold; -} -#ws_ext_permissions_container .ws_ext_permissions_table .ws_ext_action_check_column, -#ws_ext_permissions_container .ws_ext_permissions_table .ws_ext_action_name_column { - padding-top: 3px; - padding-bottom: 3px; -} -#ws_ext_permissions_container .ws_ext_permissions_table tr.ws_ext_padding_row td { - padding: 0 0 0 0; - height: 1px; -} -#ws_ext_permissions_container .ws_ext_permissions_table .ws_same_as_required_cap { - text-decoration: underline; -} -#ws_ext_permissions_container .ws_ext_permissions_table .ws_ext_has_custom_setting label.ws_ext_action_name::after { - content: " *"; -} + margin-top: 2px; } + #ws_ext_permissions_container .ws_ext_permissions_table tr td:first-child { + padding-left: 15px; } + #ws_ext_permissions_container .ws_ext_permissions_table .ws_ext_group_title { + padding-bottom: 0; + font-weight: bold; } + #ws_ext_permissions_container .ws_ext_permissions_table .ws_ext_action_check_column, + #ws_ext_permissions_container .ws_ext_permissions_table .ws_ext_action_name_column { + padding-top: 3px; + padding-bottom: 3px; } + #ws_ext_permissions_container .ws_ext_permissions_table tr.ws_ext_padding_row td { + padding: 0 0 0 0; + height: 1px; } + #ws_ext_permissions_container .ws_ext_permissions_table .ws_same_as_required_cap { + text-decoration: underline; } + #ws_ext_permissions_container .ws_ext_permissions_table .ws_ext_has_custom_setting label.ws_ext_action_name::after { + content: " *"; } #ws_ext_permissions_container #ws_ext_toggle_capability_names { cursor: pointer; position: absolute; right: 0; - color: #0073aa; -} + color: #0073aa; } #ws_ext_permissions_container.ws_ext_readable_names_enabled #ws_ext_toggle_capability_names { - color: #b4b9be; -} + color: #b4b9be; } #ws_ext_permissions_container .ws_ext_readable_name { - display: none; -} + display: none; } #ws_ext_permissions_container .ws_ext_capability { - display: inline; -} + display: inline; } #ws_ext_permissions_container.ws_ext_readable_names_enabled .ws_ext_readable_name { - display: inline; -} + display: inline; } #ws_ext_permissions_container.ws_ext_readable_names_enabled .ws_ext_capability { - display: none; -} + display: none; } #ws_ext_permissions_container #ws_taxonomy_permissions_table tr:first-child td { - padding-top: 8px; -} + padding-top: 8px; } /* The "selected role" indicator. */ .ws_cpt_selected_role_tip { @@ -1419,8 +1197,7 @@ select.ws_dropdown optgroup option { right: 0; background: white; transform: translate(1px, 0) rotate(-45deg); - transform-origin: top right; -} + transform-origin: top right; } .ws_role_table_body .ws_column_selected_role_tip { display: none; @@ -1430,12 +1207,10 @@ select.ws_dropdown optgroup option { text-align: right; overflow: visible; position: relative; - cursor: pointer; -} + cursor: pointer; } .ws_ame_breadcrumb_separator { - color: #999; -} + color: #999; } #ws_menu_editor .ws_ext_permissions_indicator { font-size: 16px; @@ -1444,180 +1219,146 @@ select.ws_dropdown optgroup option { visibility: hidden; vertical-align: bottom; cursor: pointer; - color: #4aa100; -} + color: #4aa100; } #ws_menu_editor.ws_is_actor_view .ws_ext_permissions_indicator { - visibility: visible; -} + visibility: visible; } /************************************ Visible users dialog *************************************/ #ws_visible_users_dialog { background: white; - padding: 8px; -} + padding: 8px; } #ws_user_selection_panels { - min-width: 710px; -} -#ws_user_selection_panels .ws_user_selection_panel { - display: block; - float: left; - position: relative; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - width: 350px; - height: 400px; - border: 1px solid #e5e5e5; - margin-right: 10px; - padding: 10px; -} -#ws_user_selection_panels #ws_user_selection_target_panel { - margin-right: 0; -} -#ws_user_selection_panels #ws_available_user_query { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - width: 100%; - max-height: 28px; -} -#ws_user_selection_panels .ws_user_list_wrapper { - position: absolute; - top: 50px; - left: 10px; - right: 10px; - height: 338px; - overflow-x: auto; - overflow-y: auto; -} -#ws_user_selection_panels .ws_user_selection_list { - min-height: 20px; - border-width: 0; - -webkit-box-shadow: none; - -moz-box-shadow: none; - box-shadow: none; -} -#ws_user_selection_panels .ws_user_selection_list .ws_user_action_column { - width: 20px; - text-align: center; - padding-top: 9px; - padding-bottom: 0; -} -#ws_user_selection_panels .ws_user_selection_list .ws_user_action_button { - cursor: pointer; - color: #b4b9be; -} -#ws_user_selection_panels .ws_user_selection_list .ws_user_username_column { - padding-left: 0; -} -#ws_user_selection_panels .ws_user_selection_list .ws_user_display_name_column { - white-space: nowrap; -} -#ws_user_selection_panels #ws_available_users tr { - cursor: pointer; -} -#ws_user_selection_panels #ws_available_users tr:hover, #ws_user_selection_panels #ws_available_users tr.ws_user_best_match { - background-color: #eaf2fa; -} -#ws_user_selection_panels #ws_available_users tr:hover .ws_user_action_button { - color: #7ad03a; -} -#ws_user_selection_panels #ws_selected_users .ws_user_action_button::before { - content: "\f158"; -} -#ws_user_selection_panels #ws_selected_users .ws_user_action_button:hover { - color: #dd3d36; -} -#ws_user_selection_panels #ws_selected_users .ws_user_action_column { - padding-left: 6px; -} -#ws_user_selection_panels #ws_selected_users .ws_user_display_name_column { - display: none; -} -#ws_user_selection_panels #ws_selected_users tr.ws_user_must_be_selected .ws_user_action_button { - display: none; -} -#ws_user_selection_panels #ws_selected_users_caption { - font-size: 14px; - line-height: 1.4em; - padding: 7px 10px; - color: #555; - font-weight: 600; -} -#ws_user_selection_panels::after { - display: block; - height: 1px; - visibility: hidden; - content: " "; - clear: both; -} + min-width: 710px; } + #ws_user_selection_panels .ws_user_selection_panel { + display: block; + float: left; + position: relative; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + width: 350px; + height: 400px; + border: 1px solid #e5e5e5; + margin-right: 10px; + padding: 10px; } + #ws_user_selection_panels #ws_user_selection_target_panel { + margin-right: 0; } + #ws_user_selection_panels #ws_available_user_query { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + width: 100%; + max-height: 28px; } + #ws_user_selection_panels .ws_user_list_wrapper { + position: absolute; + top: 50px; + left: 10px; + right: 10px; + height: 338px; + overflow-x: auto; + overflow-y: auto; } + #ws_user_selection_panels .ws_user_selection_list { + min-height: 20px; + border-width: 0; + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; } + #ws_user_selection_panels .ws_user_selection_list .ws_user_action_column { + width: 20px; + text-align: center; + padding-top: 9px; + padding-bottom: 0; } + #ws_user_selection_panels .ws_user_selection_list .ws_user_action_button { + cursor: pointer; + color: #b4b9be; } + #ws_user_selection_panels .ws_user_selection_list .ws_user_username_column { + padding-left: 0; } + #ws_user_selection_panels .ws_user_selection_list .ws_user_display_name_column { + white-space: nowrap; } + #ws_user_selection_panels #ws_available_users tr { + cursor: pointer; } + #ws_user_selection_panels #ws_available_users tr:hover, #ws_user_selection_panels #ws_available_users tr.ws_user_best_match { + background-color: #eaf2fa; } + #ws_user_selection_panels #ws_available_users tr:hover .ws_user_action_button { + color: #7ad03a; } + #ws_user_selection_panels #ws_selected_users .ws_user_action_button::before { + content: "\f158"; } + #ws_user_selection_panels #ws_selected_users .ws_user_action_button:hover { + color: #dd3d36; } + #ws_user_selection_panels #ws_selected_users .ws_user_action_column { + padding-left: 6px; } + #ws_user_selection_panels #ws_selected_users .ws_user_display_name_column { + display: none; } + #ws_user_selection_panels #ws_selected_users tr.ws_user_must_be_selected .ws_user_action_button { + display: none; } + #ws_user_selection_panels #ws_selected_users_caption { + font-size: 14px; + line-height: 1.4em; + padding: 7px 10px; + color: #555; + font-weight: 600; } + #ws_user_selection_panels::after { + display: block; + height: 1px; + visibility: hidden; + content: ' '; + clear: both; } #ws_loading_users_indicator { position: absolute; right: 10px; bottom: 10px; margin-right: 0; - margin-bottom: 0; -} + margin-bottom: 0; } /************************************ Menu deletion error *************************************/ #ws-ame-menu-deletion-error { - max-width: 400px; -} + max-width: 400px; } /************************************ Tooltips and hints *************************************/ .ws_tooltip_trigger, .ws_field_tooltip_trigger { - cursor: pointer; -} + cursor: pointer; } .ws_tooltip_content_list { list-style: disc; margin-left: 1em; - margin-bottom: 0; -} + margin-bottom: 0; } .ws_tooltip_node { font-size: 13px; line-height: 1.3; border-radius: 3px; - max-width: 300px; -} + max-width: 300px; } .ws_field_tooltip_trigger .dashicons { font-size: 16px; height: 16px; - vertical-align: bottom; -} + vertical-align: bottom; } .ws_field_tooltip_trigger { - color: #a1a1a1; -} + color: #a1a1a1; } #ws_plugin_settings_form .ws_tooltip_trigger .dashicons { - font-size: 18px; -} + font-size: 18px; } .ws_ame_custom_postbox .ws_tooltip_trigger .dashicons, .postbox .ws_tooltip_trigger .dashicons, .ws-ame-postbox .ws_tooltip_trigger .dashicons { font-size: 18px; height: 18px; - vertical-align: bottom; -} + vertical-align: bottom; } .ws_tooltip_trigger.ame-warning-tooltip { - color: orange; -} + color: orange; } .ws_wide_tooltip { - max-width: 450px; -} + max-width: 450px; } .ws_hint { background: #FFFFE0; @@ -1625,8 +1366,7 @@ select.ws_dropdown optgroup option { margin-bottom: 0.5em; border-radius: 3px; position: relative; - padding-right: 20px; -} + padding-right: 22px; } .ws_hint_close { border: 1px solid #E6DB55; @@ -1640,43 +1380,34 @@ select.ws_dropdown optgroup option { border-radius: 3px; position: absolute; right: 0; - top: 0; -} + top: 0; } .ws_hint_close:hover { background-color: #ffef4c; border-color: #e0b900; - color: black; -} + color: black; } .ws_hint_content { - padding: 0.4em 0 0.4em 0.4em; -} + padding: 0.4em 0 0.4em 0.4em; } .ws_hint_content ul { list-style: disc; list-style-position: inside; - margin-left: 0.5em; -} + margin-left: 0.5em; } .ws_ame_doc_box .hndle, .ws_ame_custom_postbox .hndle { cursor: default !important; - border-bottom: 1px solid #ccd0d4; -} + border-bottom: 1px solid #ccd0d4; } .ws_ame_doc_box .handlediv, .ws_ame_custom_postbox .handlediv { display: block; - float: right; -} + float: right; } .ws_ame_doc_box .inside, .ws_ame_custom_postbox .inside { - margin-bottom: 0; -} + margin-bottom: 0; } .ws_ame_doc_box ul, .ws_ame_custom_postbox ul { list-style: disc outside; - margin-left: 1em; -} + margin-left: 1em; } .ws_ame_doc_box li > ul, .ws_ame_custom_postbox li > ul { - margin-top: 6px; -} + margin-top: 6px; } .ws_ame_doc_box .button-link .toggle-indicator::before, .ws_ame_custom_postbox .button-link .toggle-indicator::before { margin-top: 4px; width: 20px; @@ -1688,40 +1419,32 @@ select.ws_dropdown optgroup option { font: normal 20px/1 dashicons; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; - text-decoration: none !important; -} + text-decoration: none !important; } .ws_ame_doc_box.closed .button-link .toggle-indicator::before, .ws_ame_custom_postbox.closed .button-link .toggle-indicator::before { - content: "\f140"; -} + content: "\f140"; } .ws_basic_container .ws_ame_custom_postbox { margin-left: 2px; - margin-right: 2px; -} + margin-right: 2px; } .ws_ame_custom_postbox .ame-tutorial-list { - margin: 0; -} -.ws_ame_custom_postbox .ame-tutorial-list a { - text-decoration: none; - display: block; - padding: 4px; -} -.ws_ame_custom_postbox .ame-tutorial-list ul { - margin-left: 1em; -} -.ws_ame_custom_postbox .ame-tutorial-list li { - display: block; - margin: 0; - list-style: none; -} + margin: 0; } + .ws_ame_custom_postbox .ame-tutorial-list a { + text-decoration: none; + display: block; + padding: 4px; } + .ws_ame_custom_postbox .ame-tutorial-list ul { + margin-left: 1em; } + .ws_ame_custom_postbox .ame-tutorial-list li { + display: block; + margin: 0; + list-style: none; } /************************************ Copy Permissions dialog *************************************/ #ws-ame-copy-permissions-dialog select { - min-width: 280px; -} + min-width: 280px; } /********************************************* Capability suggestions and preview @@ -1733,25 +1456,19 @@ select.ws_dropdown optgroup option { box-shadow: 0 1px 1px rgba(0, 0, 0, 0.04); background: #fff; border-top-right-radius: 3px; - border-bottom-right-radius: 3px; -} -#ws_capability_suggestions #ws_previewed_caps { - margin-top: 0; - margin-bottom: 6px; -} -#ws_capability_suggestions td, #ws_capability_suggestions th { - padding-top: 3px; - padding-bottom: 3px; -} -#ws_capability_suggestions tr.ws_preview_has_access .ws_ame_role_name { - background-color: lightgreen; -} -#ws_capability_suggestions .ws_ame_suggested_capability { - cursor: pointer; -} -#ws_capability_suggestions .ws_ame_suggested_capability:hover { - background-color: #d0f2d0; -} + border-bottom-right-radius: 3px; } + #ws_capability_suggestions #ws_previewed_caps { + margin-top: 0; + margin-bottom: 6px; } + #ws_capability_suggestions td, #ws_capability_suggestions th { + padding-top: 3px; + padding-bottom: 3px; } + #ws_capability_suggestions tr.ws_preview_has_access .ws_ame_role_name { + background-color: lightgreen; } + #ws_capability_suggestions .ws_ame_suggested_capability { + cursor: pointer; } + #ws_capability_suggestions .ws_ame_suggested_capability:hover { + background-color: #d0f2d0; } /********************************************* Settings page stuff @@ -1759,113 +1476,95 @@ select.ws_dropdown optgroup option { #ws_plugin_settings_form figure { margin-left: 0; margin-top: 0; - margin-bottom: 1em; -} + margin-bottom: 1em; } .ame-available-add-ons tr:first-of-type td { margin-top: 0; - padding-top: 0; -} + padding-top: 0; } .ame-available-add-ons td { padding-top: 10px; - padding-bottom: 10px; -} + padding-bottom: 10px; } .ame-available-add-ons .ame-add-on-heading { - padding-left: 0; -} + padding-left: 0; } .ame-add-on-name { - font-weight: 600; -} + font-weight: 600; } .ame-add-on-details-link::after { /*content: " \f504"; - font-family: dashicons, sans-serif;*/ -} + font-family: dashicons, sans-serif;*/ } /********************************************* WordPress 5.3+ consistent styles **********************************************/ -.ame-is-wp53-plus .ws_edit_field input[type=button] { - margin-top: 1px; -} +.ame-is-wp53-plus .ws_edit_field input[type="button"] { + margin-top: 1px; } /********************************************* CSS border style selector **********************************************/ .ame-css-border-styles .ame-fixed-label-text { - min-width: 5em; -} + min-width: 5em; } .ame-css-border-styles .ame-border-sample-container { display: inline-block; vertical-align: top; - min-height: 28px; -} + min-height: 28px; } .ame-css-border-styles .ame-border-sample { display: inline-block; width: 14em; - border-top: 0.3em solid #444; -} + border-top: 0.3em solid #444; } .ws_ame_has_unsaved_changes #ws_save_menu { - position: relative; -} -.ws_ame_has_unsaved_changes #ws_save_menu:before { - content: ""; - position: absolute; - top: 1px; - right: 1px; - --ame-me-calc-indicator-size: calc(9px + (var(--ame-ds-btn-radius-tr, 3px) - 3px) / 2); - width: var(--ame-me-calc-indicator-size, 9px); - height: var(--ame-me-calc-indicator-size, 9px); - background: #00e93c; - border-top-right-radius: calc(var(--ame-ds-btn-radius-tr, 3px) - 1px); - clip-path: polygon(0 0, 100% 0, 100% 100%); -} + position: relative; } + .ws_ame_has_unsaved_changes #ws_save_menu:before { + content: ''; + position: absolute; + top: 1px; + right: 1px; + --ame-me-calc-indicator-size: calc(9px + (var(--ame-ds-btn-radius-tr, 3px) - 3px) / 2); + width: var(--ame-me-calc-indicator-size, 9px); + height: var(--ame-me-calc-indicator-size, 9px); + background: #00e93c; + border-top-right-radius: calc(var(--ame-ds-btn-radius-tr, 3px) - 1px); + clip-path: polygon(0 0, 100% 0, 100% 100%); } /********************************************* Miscellaneous **********************************************/ #ws_sidebar_pro_ad { min-width: 225px; + max-width: 300px; margin-top: 5px; margin-left: 3px; position: fixed; right: 20px; bottom: 40px; - z-index: 100; -} -#ws_sidebar_pro_ad .dashicons { - font-size: 15px; - width: unset; - height: unset; -} -#ws_sidebar_pro_ad.ame-tgc-sidebar-ad { - max-width: 280px; -} + z-index: 100; } + #ws_sidebar_pro_ad .dashicons { + font-size: 15px; + width: unset; + height: unset; } + #ws_sidebar_pro_ad.ame-tgc-sidebar-ad { + max-width: 280px; } .ws-ame-icon-radio-button-group > label { display: inline-block; padding: 8px; border: 1px solid #ccd0d4; border-radius: 2px; - margin-right: 0.5em; -} + margin-right: 0.5em; } span.description { color: #666; - font-style: italic; -} + font-style: italic; } .wrap :target { background-color: rgba(255, 245, 100, 0.7); - outline: 3px solid rgba(250, 220, 75, 0.7); -} + outline: 3px solid rgba(250, 220, 75, 0.7); } .test-wrap { background-color: #444444; - padding: 30px; -} + padding: 30px; } .test-container { width: 400px; @@ -1873,39 +1572,33 @@ span.description { background-color: white; border: 1px solid black; border-radius: 10px; - overflow: hidden; -} + overflow: hidden; } .test-header { background-color: #67d6ff; padding: 6px; border-top-left-radius: 8px; - border-top-right-radius: 8px; -} + border-top-right-radius: 8px; } .test-content { - padding: 8px; -} + padding: 8px; } /********************************************* "Test access" dialog **********************************************/ #ws_ame_test_access_screen { display: none; - background: #fcfcfc; -} + background: #fcfcfc; } #ws_ame_test_inputs { - padding-bottom: 16px; -} + padding-bottom: 16px; } .ws_ame_test_input { display: block; float: left; width: 100%; margin: 2px 0; - box-sizing: content-box; -} + box-sizing: content-box; } .ws_ame_test_input_name { display: block; @@ -1914,8 +1607,7 @@ span.description { margin-right: 4%; text-align: right; padding-top: 6px; - line-height: 16px; -} + line-height: 16px; } .ws_ame_test_input_value { display: block; @@ -1923,33 +1615,28 @@ span.description { width: 60%; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; - box-sizing: border-box; -} + box-sizing: border-box; } #ws_ame_test_actions { float: left; width: 100%; - margin-top: 1em; -} + margin-top: 1em; } #ws_ame_test_button_container { width: 35%; margin-right: 4%; float: left; - text-align: right; -} + text-align: right; } #ws_ame_test_progress { display: none; width: 60%; - float: right; -} -#ws_ame_test_progress .spinner { - float: none; - vertical-align: bottom; - margin-left: 0; - margin-right: 4px; -} + float: right; } + #ws_ame_test_progress .spinner { + float: none; + vertical-align: bottom; + margin-left: 0; + margin-right: 4px; } #ws_ame_test_access_body { width: 100%; @@ -1957,15 +1644,13 @@ span.description { border: 1px solid #ddd; -webkit-border-radius: 3px; -moz-border-radius: 3px; - border-radius: 3px; -} + border-radius: 3px; } #ws_ame_test_frame_container { margin-right: 250px; background: white; min-height: 500px; - position: relative; -} + position: relative; } #ws_ame_test_access_frame { -webkit-box-sizing: border-box; @@ -1976,8 +1661,7 @@ span.description { min-height: 500px; border: none; margin: 0; - padding: 0; -} + padding: 0; } #ws_ame_test_access_sidebar { -webkit-box-sizing: border-box; @@ -1990,32 +1674,26 @@ span.description { width: 250px; padding: 16px 24px; background-color: #f3f3f3; - border-left: 1px solid #ddd; -} -#ws_ame_test_access_sidebar h4:first-of-type { - margin-top: 0; -} + border-left: 1px solid #ddd; } + #ws_ame_test_access_sidebar h4:first-of-type { + margin-top: 0; } #ws_ame_test_frame_placeholder { display: block; - padding: 16px 24px; -} + padding: 16px 24px; } #ws_ame_test_output { - display: none; -} + display: none; } /*************************************** Tabs on the settings page ***************************************/ .wrap.ws-ame-too-many-tabs .ws-ame-nav-tab-list.nav-tab-wrapper { - border-bottom-color: transparent; -} + border-bottom-color: transparent; } .wrap.ws-ame-too-many-tabs .ws-ame-nav-tab-list .nav-tab { border-bottom: 1px solid #c3c4c7; margin-bottom: 10px; - margin-top: 0; -} + margin-top: 0; } /* Spacing between the page heading and the tab list. @@ -2023,17 +1701,14 @@ Normally, this is handled by .nav-tab styles, but WordPress changes the margins and the tabs end up without a left margin. Let's put that margin on the heading instead and remove it from the first tab. */ #ws_ame_editor_heading { - margin-right: 0.305em; -} + margin-right: 0.305em; } .ws-ame-nav-tab-list a.nav-tab:first-of-type { - margin-left: 0; -} + margin-left: 0; } /* When in "too many tabs" mode, there's too much space between the bottom of the tab list and the rest of the page. I haven't found a good way to change the margins of just the last row, so here's a partial fix. */ .ws-ame-too-many-tabs #ws_actor_selector { - margin-top: 0; -} + margin-top: 0; } /*# sourceMappingURL=menu-editor.css.map */ diff --git a/css/menu-editor.css.map b/css/menu-editor.css.map index c28acbe..4b2baf4 100644 --- a/css/menu-editor.css.map +++ b/css/menu-editor.css.map @@ -1 +1,7 @@ -{"version":3,"sourceRoot":"","sources":["menu-editor.scss","_input-group.scss","_indeterminate-checkbox.scss","_test-access-screen.scss","_main-tabs.scss"],"names":[],"mappings":";AAAA;ACAA;EACC;EACA;;AAEA;EACC;EACA;EACA;;AAGD;EACC;EACA;EACA;;;ADPF;EACC;;;AAGD;EACC;;;AAQD;EACC;EACA,OAPoB;EAQpB;EACA;EAEA;EACA;EACA;EAEA,eAb2B;EAc3B,oBAd2B;EAe3B,uBAf2B;;;AAkB5B;EACC;EACA;EACA;;;AAGD;EACC;EACA;;;AASD;EACC;EACA;EAEA;EACA;EAEA;;;AAGD;AAAA;AAAA;EAGC;;;AAGD;AAAA;EAEC;;;AAGD;AAAA;AAAA;AAGA;EACI;;;AAGJ;EACI;;;AAIH;EACC;EACA;;AAGD;EACC;EACA;EACA;EAEA;EACA;EACA;EACA;;;AAIF;EACC;;;AAGD;AAAA;AAAA;AAKA;AAAA;EAGI;EACA;EACA;EACA;;AEnHH;AAAA;EACC;EACA,OAH4C;EAU5C;EACA;EAMA;EACA;EACA;EACA;EACA;;AAGD;EACC;AAAA;IAEC,QADU;IAEV,OAFU;IAGV,aAHU;IAIV;IAEA;IACA;IACA;;;;AFuFH;EAEE;IACC;IACA;;;AAKH;AACA;EACI;;;AAGJ;EACI;;;AAGJ;AAEA;EACI;;;AAGJ;EACI;;;AAGJ;AAAA;AAAA;AAIA;EACC;EACA;;;AAGD;EACC;EACA;EACA;EACA;;;AAGD;EACC;;;AAGD;EACC;;;AAGD;EACC;EACA;EACA;EACA;;;AAGD;AAAA;AAAA;AAIA;EACC;;;AAGD;AAAA;AAAA;AAIA;EAMC;EACA,OANY;EAQZ,SAPc;EAQd;;AAEA;EACC,cATsB;EAUtB;;;AAWF;EACC;;;AAID;EACC;;;AAGD;EACC;EACA;EACA;EAEA;EACA;;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EAEA;;;AAMD;EACC;;;AAGD;EACC;;;AAGD;EACC;EACA;EACA;EACA;;;AAGD;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAwBA;AAAA;AAAA;AAAA;AAKA;EACC;;;AAGD;EAKC;EACA;EAGA;EACA;EACA;EAEA,OAVkB;EAWlB,QAZmB;EAanB;;;AAID;AAAA;EAEC;;;AAGD;AAAA;AAAA;AAIA;EACC;EACA;EAEA;EACA;EAEA;EACA;EAEA;EACA;;;AAGD;EACI;EACA;EACA;;;AAGJ;EACC;EACA;;AAGA;EACC;EACA;EACA;EACA;EAEA;EACA;;;AAIF;EACC;;;AAGD;EACC;EACA;EACA;EACA;;;AAGD;AAAA;AAAA;AAGA;EAEC;EACA;EACA;EAEA;EACA;;AAEA;EACC;EACA;;;AAIF;AACA;EACC;EACA;EAEA;EACA;EACA;EACA;EAEA;EACA;EACA;EAEA;;AAEA;EACC;;;AAIF;EACC;;;AAGD;AAAA;AAAA;EAGC;;;AAGD;AACA;AAAA;EAEC;;;AAGD;AAIA;AAAA;EAEC;EACA;EACA,OAPiB;EAQjB;EAEA;EACA;EAEA;EACA;;AAEA;AAAA;EACC,QAhBqB;EAiBrB;;;AAIF;EACC;EACA;;;AAGD;EACC;;;AAGD;EACC;;AAEA;EACC,YAlCqB;;;AAsCvB;AAGA;AAAA;EAGC;EACA,OANqB;EAOrB;EACA;EAEA;EACA;EAEA;EAEA;EACA;EACA;EAEA;EACA;EAEA;EACA;EACA;EACA;;;AAGD;AAAA;EAGC,QAtEsB;EAwEtB;EACA;EACA;EAEA;EACA;EACA;;AAEA;AAAA;EACC;;;AAIF;EACC;EACA;;;AAGD;EACC;;;AAGD;EACC;EACA;;;AAGD;AAAA;AAAA;AAAA;AAIA;AAAA;EAGC;EACA;EAEA;EACA;;;AAGD;EACC;EACA;EACA;EACA;;;AAGD;EACC;;;AAGD;EACC;;;AAGD;AACA;EACC;;;AAGD;AAAA;AAAA;AAGA;EACC;EACA;;;AAGD;EACC;EACA;EACA;;;AAGD;EACC;;;AAGD;EACC;EACA;;;AAGD;AAAA;AAAA;AAIA;EACC;EACA;EACA;;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;;;AAGD;AACA;EACC;;;AAGD;AACA;EACC;EACA;;;AAGD;AACA;EACC;;;AAGD;AACA;EACC;;;AAED;AACC;AAAsB;EACtB;AAAkB;EAClB;EAEA;AAA2B;EAC3B;;;AAGD;AACA;EACC;;;AAGD;AACA;EACC;EACA;EACA;EAEA;AAA2B;EAC3B;;;AAGD;AAMA;AAAA;AAAA;AAMA;EACC;EAEA;EACA;EACA;EAEA;EACA;EAIA;EACA;EACA;EACA,SAjBe;;;AAyBhB;EACC;EACA;EACA;EAEA;EACA;EAEA;EACA;EACA;EAEA;EACA;EAEA;EACA;EACA;;AAEA;EACC;;;AAIF;EACC;EACA;;;AAID;EACC;;;AAED;EACC;EACA;;;AAED;EACC;EACA;EACA;;;AAGD;EACC;EACA;;;AAGD;EACC;;;AAGD;EACC;EACA;;;AAGD;AAAA;AAAA;AAIA;EACC;EACA;EAEA;EACA;EACA;EAEA;EACA;;;AAID;EACC;EACA;EACA,SAJ0B;;;AAO3B;EACC;;;AAGD;AAAA;AAAA;AAAA;AAAA;AASA;EACC;EACA;EACA;;AAEA;EACC;EAEA;EACA;EACA;EACA;EAEA;;AAGD;EACC;EACA,qBArBwB;EAsBxB;;AAGD;EACC;;AAGD;EACC;;;AAIF;EACC;EACA;EACA,kBArCyB;;;AA0C1B;AAAA;AAAA;AAOA;EACC;EACA;EACA;EAEA;EACA;EACG;EAEH,SAXoB;;;AAcrB;EACI;;;AAGJ;EACI;;;AAGJ;EACI;;;AAIJ;EACC;EACA;EAEA;EACA;EACA;EACA;AAEA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGD;AACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGD;EACC;EACA;EACA;;;AAGD;EACC;EACA;EACA;;AAEA;EACC,OAtEc;EAuEd;;;AAIF;EACI;EACA;EACA;;;AAGJ;EACC;EACA;EACA;EAEA;EACA;;;AAGD;EACC;EACA;;;AAGD;AACA;EACC;EACA;EACA;EAEG;EACA;EACH;EACA;;AAEA;EACC,QAjfqB;EAkfrB,YAlfqB;EAmfrB;;;AAIF;EACC,OAlHe;EAmHf;;AAEA;EACC;;AAEA;EACC;;;AAKH;AACA;EACC;EACA;EACA;EACA;;;AAOA;EACC;EACA;EAMA;;AAJA;EACC;;AAMF;EACC;EACA;EACA;;AAID;EACC;EACA;EACA;EACA,kBA9MwB;EA+MxB;;AAGD;EACC;EACA;;;AAIF;EACC;;;AAGD;AAAA;AAAA;AAIA;EACC;EACA;EAEA;EACA;EACA;EAEA;EACA;;;AAGD;EACC;EACA;EACA;;;AAGD;EACC;EAEA;EACA;EACA;EACA;EAEA;;;AAGD;EACC;;;AAGD;EACC;EACA;EACA;;;AAGD;EACC;;;AAGD;EACC;EACA;AAAe;EACf;EACA;EAEA;EACA;;;AAGD;EACC;EACA;EACA;EAEA;EACA;;;AAGD;EACC;EACA;;;AAGD;EACC;;;AAGD;AAAA;AAAA;AAAA;AAIA;EACC;;;AAID;AAAA;AAAA;AAIA;AAKA;EAGI;EACH;EACG,QAJgB;EAKhB,OATc;EAWd,cAVoB;EAWvB;EACG;EAEH;EACG;EACA;EACA;EAEH;;AAEA;EACC;EACA;EAEA;EACA;EAEA;EACA;EACA;;;AAIF;EACC;;;AAGD;EACI;EACA;EACA;EAEA;EACA;EACA;;;AAGJ;EACI;;;AAGJ;AAAA;AAAA;AAIA;EACC;;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEG;EACA;;;AAGJ;EACI;;;AAIH;EACC;EACA;EAEA;EAEA;EACA;EACA;;AAEA;EACC;EACA;;AAGD;EACC;EACA;EACA;;AAIF;EACC;EACA;EACA;EACA;EAEA;EACA;EACA;EAEA;EACA;EAEA;EACA;EAEA;EACA;EAEA;;AAGD;EACC;EACA;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;;AAGD;AACC;EACA;;AAQF;EACC;;;AAGD;EACC;;;AAIA;EACC;EACA;;AAGD;EACC;;AAGD;EACC;EACA;EACA;;AAEA;EACC;;AAGD;EACC;;AAGD;EACC;;AAGD;EACC;;;AAKH;EACC;EACA;;;AAGD;EACC;EACA;EACG;EACA;;;AAGJ;EACC;EACA;EACA;EAEA;;;AAGD;EACC;;;AAGD;EACI;;;AAGJ;EACI;;;AAGJ;EACI;EACA;EACA;;;AAGJ;EACI;;;AAGJ;EACC;EACA;EAEA;;;AAGD;EACC;;;AAGD;EACC;EACA;EACA;;;AAGD;EACC;;;AAGD;EACI;EACA;;;AAGJ;AAAA;AAAA;AAIA;AAGA;EAEC,OAJuB;EAKvB,cAJwB;;;AAOzB;EACC;EACA;;;AAGD;EACC;EACA;;;AAGD;EACC;;AAEA;EACC;EACA;;;AAIF;EACC;EACA;EACA;EACA;;;AAGD;AAAA;EAEC;EACA;EACA;;;AAGD;AAAA;EAEC;;;AAGD;EACC;;;AAGD;AACC;AAAA;EAEA;EACA;;;AAGD;EACC;EACA;;;AAGD;EACC;EAEA;EACA;EACA;EACA;EACA;EACA;;;AAGD;EACC;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;;;AAGD;EACC;;;AAGD;EACC;;;AAGD;EACC;EACA;EACA;;;AAGD;EACC;EACA;EACA;EAEA;EAEA;EACA;EACA;EACA;;;AAGD;EACC;EACA;EACA;EACA;EAEA;EACA;EAEA;EACA;EACA;;;AAGD;EACC;EACA;EACA;;;AAGD;EACC;;;AAGD;AAAA;AAAA;AAIA;AAAA;AAAA;AAGA;AAuBC;;AArBA;EACC;;AAGD;EACC;;AAGD;EACC;;AAIA;EACC;;AAED;EACC;;AAKF;EACC;;AAEA;EACC;;AAGD;EACC;;AAGD;EACC;;;AAKH;EACC;EACA;EACA;;;AAKD;EACC,cAH0B;EAI1B;EACA;EACA;;;AAGD;EACC;;AAEA;EACC,cAbyB;;AAgB1B;EACC;EACA;;AAGD;AAAA;EAEC;EACA;;AAGD;EACC;EACA;;AAGD;EACC;;AAIA;EACC;;;AAQF;EACC;EACA;EACA;EACA;;AAGD;EACC;;AAID;EACC;;AAED;EACC;;AAKA;EACC;;AAED;EACC;;;AAQF;EACC;;;AAIF;AACA;EACC;EACA;EAEA;EACA;EACA;EAEA;EACA;EAGA;EAEA;EACA;;;AAGD;EACC;EAEA;EACA;EACA;EACA;EACA;EAEA;EAEA;;;AAGD;EACC;;;AAID;EAGC,WAFgB;EAGhB,QAHgB;EAIhB,OAJgB;EAOhB;EAEA;EACA;EACA;;;AAGD;EACC;;;AAGD;AAAA;AAAA;AAQA;EAEC;EACA,SAFoB;;;AAKrB;EACC;;AAEA;EACC;EACA;EACA;EAEA;EACA;EACA;EAEA,OAtBwB;EAuBxB,QAtByB;EAwBzB;EACA;EACA;;AAGD;EACC;;AAGD;EACC;EACA;EACA;EACA;EACA;;AAGD;EACC;EAGA,KAFc;EAGd,MA7C0B;EA8C1B,OA9C0B;EAiD1B;EAEA;EACA;;AAGD;EACC;EAGA;EACA;EACA;EACA;;AAEA;EACC;EACA;EAEA;EACA;;AAGD;EACC;EACA;;AAGD;EACC;;AAGD;EACC;;AAKD;EACC;;AAGD;EACC;;AAID;EACC;;AAMD;EACC;;AAED;EACC;;AAED;EACC;;AAGD;EACC;;AAKA;EACC;;AAaH;EACC;EACA;EACA;EAEA;EACA;;AAGD;EACC;EACA;EACA;EACA;EACA;;;AAIF;EACC;EACA,OAzJ2B;EA0J3B,QA1J2B;EA4J3B;EACA;;;AAKD;AAAA;AAAA;AAIA;EACI;;;AAMJ;AAAA;AAAA;AAIA;EACC;;;AAGD;EACC;EACA;EACA;;;AAGD;EACC;EACA;EACA;EACA;;;AAGD;EACC;EACA;EACA;;;AAGD;EACC;;;AAID;EACC;;;AAKA;EACC;EACA;EACA;;;AAIF;EACC;;;AAGD;EACC;;;AAGD;EACC;EACA;EAEA;EACA;EACA;EACA;;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EAEA;EACA;EACA;;;AAGD;EACC;EACA;EACA;;;AAGD;EACC;;;AAGD;EACC;EACA;EACA;;;AAIA;EACC;EACA;;AAGD;EACC;EACA;;AAGD;EACC;;AAGD;EACC;EACA;;AAGD;EACC;;AAGD;EACC;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EAEA;EACA;EACA;;AAGD;EACC;;;AAIF;EAEC;EACA;;;AAGD;EACC;;AAEA;EACC;EACA;EACA;;AAGD;EACC;;AAGD;EACC;EACA;EACA;;;AAIF;AAAA;AAAA;AAGA;EACC;;;AAGD;AAAA;AAAA;AAIA;EACC;EACA;EAEA;EACA;EACA;EAEA;EACA;;AAEA;EACC;EACA;;AAGD;EAEC,aApxCyB;EAqxCzB,gBArxCyB;;AAwxC1B;EACC;;AAGD;EACC;;AAEA;EACC;;;AAKH;AAAA;AAAA;AAIA;EACC;EACA;EACA;;;AAIA;EACC;EACA;;AAGD;EACC;EACA;;AAGD;EACC;;;AAIF;EACC;;;AAGD;AACC;AAAA;;;AAID;AAAA;AAAA;AAIA;EACC;;;AAGD;AAAA;AAAA;AAKC;EACC;;AAGD;EACC;EACA;EACA;;AAGD;EACC;EACA;EACA;;;AAKF;EACC;;AAMA;EACC;EACA;EACA,KANQ;EAOR,OAPQ;EASR;EAEA;EACA;EACA;EACA;EACA;;;AAKF;AAAA;AAAA;AAIA;EACI;EAEH;EACA;EAEA;EACA;EACA;EACA;;AAEA;EACC;EACA;EACA;;AAGD;EACC;;;AAIF;EACC;EACA;EACA;EACA;EAEA;;;AAGD;EACC;EAEA;;;AAGD;EACC;EACA;;;AAGD;EACI;EACA;;;AAGJ;EACI;EACA;EACA;EAEA;EACA;EAEA;;;AAGJ;EACI;EACA;EAEA;EACA;;;AAGJ;EACI;;;AGnsEJ;AAAA;AAAA;AAIA;EACC;EACA;;;AAGD;EAEC;;;AAGD;EACC;EACA;EAEA;EACA;EACA;;;AAGD;EACC;EACA;EACA;EACA;EAEA;EACA;EACA;;;AAGD;EACC;EACA;EACA;EAEA;EACA;EACA;;;AAGD;EACC;EACA;EACA;;;AAGD;EACC;EACA;EACA;EACA;;;AAGD;EACC;EACA;EACA;;AAEA;EACC;EACA;EACA;EACA;;;AAIF;EACC;EACA;EAEA;EACA;EACA;EACA;;;AAGD;EACC;EACA;EAEA;EACA;;;AAGD;EACC;EACA;EACA;EAEA;EACA;EACA;EAEA;EACA;EACA;;;AAGD;EACC;EACA;EACA;EAEA;EACA;EACA;EACA;EAEA;EACA;EAEA;EACA;;AAEA;EACC;;;AAIF;EACC;EACA;;;AAGD;EACC;;;ACjID;AAAA;AAAA;AAKC;EACC;;AAGD;EACC;EACA;EACA;;;AAIF;;AAAA;AAAA;AAAA;AAMA;EACC;;;AAIA;EACC;;;AAIF;AAAA;AAEA;EACC","file":"menu-editor.css"} \ No newline at end of file +{ +"version": 3, +"mappings": "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", +"sources": ["menu-editor.scss","_input-group.scss","_indeterminate-checkbox.scss","_test-access-screen.scss","_main-tabs.scss"], +"names": [], +"file": "menu-editor.css" +} \ No newline at end of file diff --git a/css/menu-editor.scss b/css/menu-editor.scss index df7e899..2112652 100644 --- a/css/menu-editor.scss +++ b/css/menu-editor.scss @@ -70,6 +70,10 @@ $mainContainerBorderColor: $amePostboxBorderColor; //Was #cdd5d5 before WP 5.3. border-width: 1px; } +.ws_invalid_item_drop_target { + outline: 2px solid red; +} + /************************************************* Actor UI *************************************************/ @@ -1927,7 +1931,7 @@ $userSelectionPanelPadding: 10px; margin-bottom: 0.5em; border-radius: 3px; position: relative; - padding-right: 20px; + padding-right: 22px; } .ws_hint_close { @@ -2176,6 +2180,7 @@ $userSelectionPanelPadding: 10px; #ws_sidebar_pro_ad { min-width: 225px; + max-width: 300px; margin-top: 5px; margin-left: 3px; diff --git a/customizables/Storage/MenuConfigurationWrapper.php b/customizables/Storage/MenuConfigurationWrapper.php index 390fa5b..825b87b 100644 --- a/customizables/Storage/MenuConfigurationWrapper.php +++ b/customizables/Storage/MenuConfigurationWrapper.php @@ -29,9 +29,6 @@ protected function loadData() { } protected function storeData($newData) { - //Caution: Currently, the underlying implementation doesn't support configs - //without a "tree" key. This may need to be changed to allow configurations - //that only specify menu styles, not menu items. $this->menuEditor->set_custom_menu($newData, $this->menuConfigId); } diff --git a/customizables/assets/image-selector.js b/customizables/assets/image-selector.js index 9de5e3d..ca946a8 100644 --- a/customizables/assets/image-selector.js +++ b/customizables/assets/image-selector.js @@ -318,7 +318,9 @@ var AmeImageSelectorApi; //Accept only HTTP(S). ((url.protocol === "http:") || (url.protocol === "https:")) //An image URL will usually have a path that's not just "/". - && (url.pathname.length > 1)); + //In rare cases, it might be a root URL, but then it should have a query string. + //(URL.search includes the "?" character, so we need to check for a length > 1.) + && ((url.pathname.length > 1) || (url.search.length > 1))); } catch (e) { return false; diff --git a/customizables/assets/image-selector.js.map b/customizables/assets/image-selector.js.map index 84ed48a..fb4348a 100644 --- a/customizables/assets/image-selector.js.map +++ b/customizables/assets/image-selector.js.map @@ -1 +1 @@ -{"version":3,"file":"image-selector.js","sourceRoot":"","sources":["image-selector.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"image-selector.js","sourceRoot":"","sources":["image-selector.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/customizables/assets/image-selector.ts b/customizables/assets/image-selector.ts index 18b75f1..0b96a87 100644 --- a/customizables/assets/image-selector.ts +++ b/customizables/assets/image-selector.ts @@ -415,7 +415,9 @@ namespace AmeImageSelectorApi { //Accept only HTTP(S). ((url.protocol === "http:") || (url.protocol === "https:")) //An image URL will usually have a path that's not just "/". - && (url.pathname.length > 1) + //In rare cases, it might be a root URL, but then it should have a query string. + //(URL.search includes the "?" character, so we need to check for a length > 1.) + && ((url.pathname.length > 1) || (url.search.length > 1)) ); } catch (e) { return false; diff --git a/dist/admin-customizer-preview.bundle.js.map b/dist/admin-customizer-preview.bundle.js.map index bdc98fc..f3ec426 100644 --- a/dist/admin-customizer-preview.bundle.js.map +++ b/dist/admin-customizer-preview.bundle.js.map @@ -1 +1 @@ -{"version":3,"file":"admin-customizer-preview.bundle.js","mappings":"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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,IAAI;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,IAAI,IAAI,MAAM,IAAI,KAAK,IAAI,QAAQ;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD;AACtD,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,WAAW,KAAK,SAAS,KAAK,KAAK,KAAK,OAAO;AAC9E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,sBAAsB;AACzD,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,SAAS,IAAI,MAAM,EAAE,MAAM;AAChE;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,sDAAsD,kCAAkC;AACxF,SAAS;AACT;AACA;AACA;AACA,sDAAsD,iCAAiC;AACvF,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD,SAAS;AAClE;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6EAA6E,gBAAgB;AAC7F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,WAAW,gBAAgB;AAC5C;AACA;AACA;AACA;AACA,uBAAuB,iBAAiB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,WAAW,gBAAgB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,gBAAgB,EAAE,SAAS;AACjF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD,wCAAwC;AAC1F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD,kCAAkC;AACnF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA,iBAAiB,WAAW,gBAAgB;AAC5C;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,wEAAwE;AAC7E,CAAC,8CAA8C;AAC/C","sources":["webpack:///./extras/modules/admin-customizer/preview-handler.ts","webpack:///./extras/modules/admin-customizer/admin-customizer-base.js","webpack:///./extras/style-generator/style-generator.js"],"sourcesContent":["'use strict';\n\nimport {AmeCustomizable} from '../../pro-customizables/assets/customizable.js';\nimport {AmeAdminCustomizerBase} from './admin-customizer-base.js';\nimport {AmeStyleGenerator} from '../../style-generator/style-generator.js';\n\ndeclare var wsAmeAcPreviewData: AmeAdminCustomizerPreview.PreviewScriptData;\n\n//Compatibility note: This script is not compatible with IE11 because it uses some\n//modern JS features like the URLSearchParams class.\n\nnamespace AmeAdminCustomizerPreview {\n\timport ThrottledPreviewRegistry = AmeCustomizable.ThrottledPreviewRegistry;\n\tconst $ = jQuery;\n\n\texport interface PreviewScriptData extends AmeAdminCustomizerBase.ScriptData {\n\t\tstylePreviewConfigs?: AmeStyleGenerator.Preview.StyleGeneratorPreviewConfig[];\n\t}\n\n\texport class PreviewHandler extends AmeAdminCustomizerBase.AdminCustomizerBase {\n\t\tprivate readonly changesetName: string;\n\t\tprivate readonly connection: ReturnType;\n\n\t\tprivate readonly previewRegistry: ThrottledPreviewRegistry;\n\t\tprivate readonly currentPreviewValues: Record = {};\n\n\t\tconstructor(scriptData: PreviewScriptData) {\n\t\t\tsuper(scriptData);\n\t\t\tthis.changesetName = scriptData.changesetName;\n\n\t\t\tthis.previewRegistry = new ThrottledPreviewRegistry(\n\t\t\t\t(settingId: string, defaultResult: any) => {\n\t\t\t\t\tif (this.currentPreviewValues.hasOwnProperty(settingId)) {\n\t\t\t\t\t\treturn this.currentPreviewValues[settingId];\n\t\t\t\t\t}\n\t\t\t\t\t//Try the script data. It should have the current value from the changeset.\n\t\t\t\t\tif (\n\t\t\t\t\t\tscriptData.settings.hasOwnProperty(settingId)\n\t\t\t\t\t\t&& scriptData.settings[settingId].hasOwnProperty('value')\n\t\t\t\t\t) {\n\t\t\t\t\t\treturn scriptData.settings[settingId].value;\n\t\t\t\t\t}\n\t\t\t\t\treturn defaultResult;\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tthis.connection = AmeAcCommunicator.connectToParent(\n\t\t\t\t{\n\t\t\t\t\t'previewSetting': (settingId: string, value: any) => {\n\t\t\t\t\t\tthis.currentPreviewValues[settingId] = value;\n\n\t\t\t\t\t\tif (!this.previewRegistry.canPreview(settingId)) {\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.previewRegistry.queuePreview(settingId);\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t},\n\t\t\t\t\t'getCurrentUrl': () => {\n\t\t\t\t\t\treturn window.location.href;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tscriptData.allowedCommOrigins,\n\t\t\t\tscriptData.isWpDebugEnabled\n\t\t\t);\n\n\t\t\tthis.connection.promise.then((c) => {\n\t\t\t\tif (typeof c === 'undefined') {\n\t\t\t\t\tif (console && console.warn) {\n\t\t\t\t\t\tconsole.warn('Connection succeeded, but the communicator is undefined. This should be impossible.');\n\t\t\t\t\t}\n\t\t\t\t\treturn; //This should never happen.\n\t\t\t\t}\n\n\t\t\t\t//Let the parent know the current URL. The parent might not be able to\n\t\t\t\t//read it due to cross-domain restrictions, and if there are any redirects,\n\t\t\t\t//the actual URL might not match the frame src that was set by the parent.\n\t\t\t\tc.execute('notifyPreviewUrlChanged', window.location.href);\n\t\t\t});\n\n\t\t\t$(() => {\n\t\t\t\tthis.addPreviewParamsToLinks();\n\n\t\t\t\t//Handle clicks on links.\n\t\t\t\t$(document.body).on('click.ame-ac-preview', 'a', (event) => {\n\t\t\t\t\treturn this.handleLinkClick(event);\n\t\t\t\t});\n\n\t\t\t\t//Block form submissions. Theme Customizer supports those, but we don't\n\t\t\t\t//(at least for now).\n\t\t\t\t$(document.body).on('submit.ame-ac-preview', 'form', function (event) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t});\n\t\t\t});\n\n\t\t\t//For convenience, support for StyleGenerator previews is built-in.\n\t\t\tfor (const previewConfig of (scriptData.stylePreviewConfigs || [])) {\n\t\t\t\tconst previewInstance = new AmeStyleGenerator.Preview.StyleGeneratorPreview(previewConfig);\n\t\t\t\tthis.previewRegistry.registerPreviewUpdater(\n\t\t\t\t\tpreviewInstance.getPreviewableSettingIDs(),\n\t\t\t\t\tpreviewInstance\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * Add preview-specific query parameters to all links.\n\t\t */\n\t\taddPreviewParamsToLinks() {\n\t\t\tconst self = this;\n\t\t\t$('a[href]').each(function (this: HTMLElement) {\n\t\t\t\tconst element = this;\n\t\t\t\tif (!(element instanceof HTMLAnchorElement)) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst $link = $(this);\n\n\t\t\t\t//Don't modify internal anchors like \"#abc\".\n\t\t\t\tif (self.isInternalAnchor($link)) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t//Flag and skip non-previewable links.\n\t\t\t\tif (!self.isPreviewableLink(element)) {\n\t\t\t\t\t$link.addClass('ame-ac-not-previewable');\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t//Add the preview query parameter(s).\n\t\t\t\tconst params = new URLSearchParams(element.search);\n\t\t\t\tparams.set('ame-ac-preview', '1');\n\t\t\t\tparams.set('ame-ac-changeset', self.changesetName);\n\t\t\t\telement.search = '?' + params.toString();\n\t\t\t});\n\t\t}\n\n\t\tisPreviewableLink(element: HTMLAnchorElement): boolean {\n\t\t\treturn this.isPreviewableUrl(element);\n\t\t}\n\n\t\tisInternalAnchor($link: JQuery): boolean {\n\t\t\tconst href = $link.attr('href');\n\t\t\tif (typeof href === 'undefined') {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn (href.substring(0, 1) === '#');\n\t\t}\n\n\t\thandleLinkClick(event: JQueryEventObject) {\n\t\t\tconst $link = $(event.target).closest('a');\n\n\t\t\t//Let anchors work as normal.\n\t\t\tif (this.isInternalAnchor($link)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t//Prevent the browser from navigating to non-previewable links.\n\t\t\tconst anchorElement = $link.get(0) as HTMLAnchorElement;\n\t\t\tif (!this.isPreviewableLink(anchorElement)) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t//Tell the parent (i.e. the admin customizer) to load the link.\n\t\t\tif (this.connection.isConnected) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tthis.connection.execute('setPreviewUrl', anchorElement.href);\n\t\t\t}\n\t\t}\n\n\t\t// noinspection JSUnusedGlobalSymbols Used in other modules.\n\t\tregisterPreviewer(settingId: string, callback: (newValue: any) => void) {\n\t\t\tthis.previewRegistry.registerPreviewCallback(settingId, callback);\n\t\t}\n\n\t\t// noinspection JSUnusedGlobalSymbols Also used in other modules.\n\t\tregisterPreviewUpdater(settingIds: string[], updater: AmeCustomizable.PreviewUpdater) {\n\t\t\tthis.previewRegistry.registerPreviewUpdater(settingIds, updater);\n\t\t}\n\n\t\t// noinspection JSUnusedGlobalSymbols\n\t\tregisterRpcMethod(methodName: string, handler: (...args: any) => any) {\n\t\t\tthis.connection.addRpcMethod(methodName, handler);\n\t\t}\n\t}\n\n\tconst previewHandler = new PreviewHandler(wsAmeAcPreviewData);\n\twindow['wsAdminCustomizerPreview'] = previewHandler;\n\n\t$('body').trigger('adminMenuEditor:acPreviewStart', [previewHandler]);\n}\n\ndeclare global {\n\tinterface Window {\n\t\twsAdminCustomizerPreview: AmeAdminCustomizerPreview.PreviewHandler;\n\t}\n}","'use strict';\r\nexport var AmeAdminCustomizerBase;\r\n(function (AmeAdminCustomizerBase) {\r\n class AdminCustomizerBase {\r\n constructor(scriptData) {\r\n this.allowedCommOrigins = scriptData.allowedCommOrigins;\r\n if (this.allowedCommOrigins.length === 0) {\r\n this.allowedCommOrigins = [window.location.origin];\r\n }\r\n this.allowedPreviewUrls = scriptData.allowedPreviewUrls;\r\n this.parsedAllowedUrls = this.allowedPreviewUrls.map(url => new URL(url));\r\n }\r\n isPreviewableUrl(url) {\r\n if (typeof url === 'string') {\r\n url = new URL(url);\r\n }\r\n if (typeof url.protocol === 'undefined') {\r\n return false;\r\n }\r\n //Only HTTP(S) links are previewable.\r\n if ((url.protocol !== 'http:') && (url.protocol !== 'https:')) {\r\n return false;\r\n }\r\n //Check against the list of allowed URLs.\r\n for (const allowedUrl of this.parsedAllowedUrls) {\r\n //Protocol and host must match. The path must start with the path\r\n //of the allowed URL (possibly without a trailing slash).\r\n if ((url.protocol === allowedUrl.protocol) && (url.host === allowedUrl.host)) {\r\n const allowedPath = allowedUrl.pathname.replace(/\\/$/, '');\r\n if (url.pathname.indexOf(allowedPath) === 0) {\r\n return true;\r\n }\r\n }\r\n }\r\n return false;\r\n }\r\n }\r\n AmeAdminCustomizerBase.AdminCustomizerBase = AdminCustomizerBase;\r\n})(AmeAdminCustomizerBase || (AmeAdminCustomizerBase = {}));\r\n//# sourceMappingURL=admin-customizer-base.js.map","export var AmeStyleGenerator;\r\n(function (AmeStyleGenerator) {\r\n const $ = jQuery;\r\n class ValueDescriptor {\r\n }\r\n class ConstantValue extends ValueDescriptor {\r\n constructor(value) {\r\n super();\r\n this.value = value;\r\n }\r\n getValue() {\r\n return this.value;\r\n }\r\n }\r\n class ArrayValue extends ValueDescriptor {\r\n constructor(items) {\r\n super();\r\n this.items = items;\r\n }\r\n getValue() {\r\n return this.items.map(item => item.getValue());\r\n }\r\n getItemDescriptors() {\r\n return this.items;\r\n }\r\n }\r\n class SettingReference extends ValueDescriptor {\r\n constructor(settingId, valueGetter) {\r\n super();\r\n this.settingId = settingId;\r\n this.valueGetter = valueGetter;\r\n }\r\n getValue() {\r\n return this.valueGetter(this.settingId);\r\n }\r\n }\r\n class VariableReference extends ValueDescriptor {\r\n constructor(name, valueGetter) {\r\n super();\r\n this.name = name;\r\n this.valueGetter = valueGetter;\r\n }\r\n getValue() {\r\n return this.valueGetter(this.name);\r\n }\r\n }\r\n class FunctionCall extends ValueDescriptor {\r\n constructor(args, callback) {\r\n super();\r\n this.args = args;\r\n this.callback = callback;\r\n }\r\n getValue() {\r\n return this.callback(this.resolveArgs(this.args));\r\n }\r\n resolveArgs(args) {\r\n if (Array.isArray(args)) {\r\n return args.map(arg => arg.getValue());\r\n }\r\n return Object.keys(args).reduce((result, key) => {\r\n result[key] = args[key].getValue();\r\n return result;\r\n }, {});\r\n }\r\n }\r\n //endregion\r\n function isEmptyCssValue(value) {\r\n return (typeof value === 'undefined') || (value === '') || (value === null);\r\n }\r\n function convertToRgba(color, opacity = 1.0) {\r\n color = color.trim();\r\n if (color === '') {\r\n return 'transparent';\r\n }\r\n //Strip the leading hash, if any.\r\n if (color[0] === '#') {\r\n color = color.substring(1);\r\n }\r\n //If the color is in the shorthand format, expand it.\r\n if (color.length === 3) {\r\n color = color[0] + color[0] + color[1] + color[1] + color[2] + color[2];\r\n }\r\n //The color should now be in the full 6-digit format. Convert it to RGBA.\r\n if (color.length === 6) {\r\n const red = parseInt(color.substring(0, 2), 16);\r\n const green = parseInt(color.substring(2, 4), 16);\r\n const blue = parseInt(color.substring(4, 6), 16);\r\n return `rgba(${red}, ${green}, ${blue}, ${opacity})`;\r\n }\r\n //The color may be invalid, or it's not in a hex format we recognize.\r\n return color;\r\n }\r\n function uniqueArrayValues(array) {\r\n return array.filter((value, index) => array.indexOf(value) === index);\r\n }\r\n function constrain(value, min, max) {\r\n return Math.min(Math.max(value, min), max);\r\n }\r\n function modifyHexColorAsHsl(args, operation) {\r\n const color = args.color || '';\r\n if (isEmptyCssValue(color)) {\r\n return '';\r\n }\r\n const hue = args.hue || null;\r\n const saturation = args.saturation || null;\r\n const lightness = args.lightness || null;\r\n if ((hue === null) && (saturation === null) && (lightness === null)) {\r\n return color;\r\n }\r\n let output = $.Color(color);\r\n output = operation(output, hue, saturation, lightness);\r\n return output.toHexString();\r\n }\r\n // noinspection JSUnusedGlobalSymbols -- Used dynamically by declaration generators received from the server.\r\n const builtinFunctions = {\r\n simpleProperty: function (args) {\r\n if (isEmptyCssValue(args.value)) {\r\n return [];\r\n }\r\n return [args.name + ': ' + args.value + ';'];\r\n },\r\n formatLength: function (args) {\r\n if (isEmptyCssValue(args.value)) {\r\n return '';\r\n }\r\n //Normalize numeric values. For example, while JS accepts \"1.\" as a number,\r\n //\"1.px\" is not a valid CSS length value, so it should be converted to \"1px\".\r\n const numericValue = parseFloat(String(args.value));\r\n if (isNaN(numericValue)) {\r\n return '';\r\n }\r\n return '' + numericValue + (args.unit || '');\r\n },\r\n shadow: function (args) {\r\n const mode = args.mode || 'default';\r\n const color = args.color || '';\r\n if (mode === 'default') {\r\n return [];\r\n }\r\n if ((mode === 'none') || (color === '') || (color === null) || (color === 'transparent')) {\r\n return ['box-shadow: none;'];\r\n }\r\n if (mode !== 'custom') {\r\n return [];\r\n }\r\n const components = [];\r\n if (args.inset) {\r\n components.push('inset');\r\n }\r\n const horizontal = args['offset-x'] || 0;\r\n const vertical = args['offset-y'] || 0;\r\n const blur = args.blur || 0;\r\n const spread = args.spread || 0;\r\n components.push(`${horizontal}px ${vertical}px ${blur}px ${spread}px`);\r\n const colorOpacity = args.colorOpacity || 1.0;\r\n if (colorOpacity < 1.0) {\r\n components.push(convertToRgba(color, colorOpacity));\r\n }\r\n else {\r\n components.push(color);\r\n }\r\n return [`box-shadow: ${components.join(' ')};`];\r\n },\r\n boxSides: function (args) {\r\n if (typeof args.cssPropertyPrefix !== 'string') {\r\n throw new Error('Invalid config for the boxSides generator: missing cssPropertyPrefix');\r\n }\r\n const compositeValue = args.value || {};\r\n const unit = compositeValue.unit || '';\r\n const declarations = [];\r\n for (const side of ['top', 'right', 'bottom', 'left']) {\r\n const value = compositeValue[side];\r\n if (isEmptyCssValue(value)) {\r\n continue;\r\n }\r\n const property = args.cssPropertyPrefix + side;\r\n declarations.push(`${property}: ${value}${unit};`);\r\n }\r\n return declarations;\r\n },\r\n firstNonEmpty(args) {\r\n for (const arg of args) {\r\n if (!isEmptyCssValue(arg)) {\r\n return arg;\r\n }\r\n }\r\n return null;\r\n },\r\n /**\r\n * Take a HEX color, convert it to HSL to edit its components,\r\n * then convert back to HEX.\r\n *\r\n * @param args\r\n */\r\n editHexAsHsl: function (args) {\r\n return modifyHexColorAsHsl(args, (color, hue, saturation, lightness) => {\r\n if (hue !== null) {\r\n color = color.hue(hue);\r\n }\r\n if (saturation !== null) {\r\n color = color.saturation(saturation);\r\n }\r\n if (lightness !== null) {\r\n color = color.lightness(lightness);\r\n }\r\n return color;\r\n });\r\n },\r\n adjustHexAsHsl: function (args) {\r\n return modifyHexColorAsHsl(args, (color, hue, saturation, lightness) => {\r\n if (hue !== null) {\r\n color = color.hue(constrain(color.hue() + hue, 0, 360));\r\n }\r\n if (saturation !== null) {\r\n color = color.saturation(constrain(color.saturation() + saturation, 0, 1.0));\r\n }\r\n if (lightness !== null) {\r\n color = color.lightness(constrain(color.lightness() + lightness, 0, 1.0));\r\n }\r\n return color;\r\n });\r\n },\r\n mixColors: function (args) {\r\n const color1 = args.color1 || '';\r\n const color2 = args.color2 || '';\r\n if (isEmptyCssValue(color1) || isEmptyCssValue(color2)) {\r\n return '';\r\n }\r\n const weight = args.weight || 50;\r\n if (weight <= 0) {\r\n return color2;\r\n }\r\n else if (weight >= 100) {\r\n return color1;\r\n }\r\n return $.Color(color2).transition($.Color(color1), weight / 100).toHexString();\r\n },\r\n changeLightness: function (args) {\r\n const color = args.color || '';\r\n if (isEmptyCssValue(color)) {\r\n return '';\r\n }\r\n const amount = args.amount || 0;\r\n if (amount === 0) {\r\n return color;\r\n }\r\n let output = $.Color(color);\r\n //Amount is a number between 0 and 100, while lightness is between 0.0 and 1.0.\r\n let newLightness = output.lightness() + (amount / 100);\r\n //Clamp to 0.0 - 1.0.\r\n newLightness = constrain(newLightness, 0.0, 1.0);\r\n return output.lightness(newLightness).toHexString();\r\n },\r\n darken: function (args) {\r\n const color = args.color || '';\r\n const amount = args.amount || 0;\r\n return builtinFunctions.changeLightness({ color, amount: -Math.abs(amount) });\r\n },\r\n lighten: function (args) {\r\n const color = args.color || '';\r\n const amount = args.amount || 0;\r\n return builtinFunctions.changeLightness({ color, amount: Math.abs(amount) });\r\n },\r\n compare: function (args) {\r\n const value1 = args.value1;\r\n const value2 = args.value2;\r\n const operator = args.op;\r\n const thenResult = (typeof args.thenResult !== 'undefined') ? args.thenResult : true;\r\n const elseResult = (typeof args.elseResult !== 'undefined') ? args.elseResult : null;\r\n let result;\r\n switch (operator) {\r\n case '==':\r\n result = value1 == value2;\r\n break;\r\n case '!=':\r\n result = value1 != value2;\r\n break;\r\n case '>':\r\n result = value1 > value2;\r\n break;\r\n case '>=':\r\n result = value1 >= value2;\r\n break;\r\n case '<':\r\n result = value1 < value2;\r\n break;\r\n case '<=':\r\n result = value1 <= value2;\r\n break;\r\n default:\r\n throw new Error(`Unknown operator: ${operator}`);\r\n }\r\n return result ? thenResult : elseResult;\r\n },\r\n ifTruthy: function (args) {\r\n const value = args.value;\r\n const thenResult = (typeof args.thenResult !== 'undefined') ? args.thenResult : true;\r\n const elseResult = (typeof args.elseResult !== 'undefined') ? args.elseResult : null;\r\n return value ? thenResult : elseResult;\r\n },\r\n ifSome: function (args) {\r\n const values = args.values;\r\n const thenResult = args.thenResult;\r\n const elseResult = (typeof args.elseResult !== 'undefined') ? args.elseResult : null;\r\n for (const value of values) {\r\n if (!!value) {\r\n return thenResult;\r\n }\r\n }\r\n return elseResult;\r\n },\r\n ifAll: function (args) {\r\n const values = args.values;\r\n const thenResult = args.thenResult;\r\n const elseResult = args.elseResult !== undefined ? args.elseResult : null;\r\n if (!values || (values.length === 0)) {\r\n return elseResult;\r\n }\r\n for (const value of values) {\r\n if (!value) {\r\n return elseResult;\r\n }\r\n }\r\n return thenResult;\r\n },\r\n ifImageSettingContainsImage: function (args) {\r\n const thenResult = args.thenResult !== undefined ? args.thenResult : true;\r\n const elseResult = args.elseResult !== undefined ? args.elseResult : null;\r\n if ((typeof args.value !== 'object') || !args.value) {\r\n return elseResult;\r\n }\r\n const image = args.value;\r\n const hasAttachment = !!image.attachmentId;\r\n const hasExternalUrl = !!image.externalUrl;\r\n const hasImage = hasAttachment || hasExternalUrl;\r\n return hasImage ? thenResult : elseResult;\r\n }\r\n };\r\n let Preview;\r\n (function (Preview) {\r\n const $ = jQuery;\r\n function isConditionalAtRuleConfig(config) {\r\n if ((typeof config !== 'object') || (config === null)) {\r\n return false;\r\n }\r\n const configAsRecord = config;\r\n return ((typeof configAsRecord['t'] === 'string')\r\n && (configAsRecord['t'] === 'conditionalAtRule')\r\n && (typeof configAsRecord['identifier'] === 'string'));\r\n }\r\n function isRuleSetConfig(config) {\r\n return ((config !== null)\r\n && (Array.isArray(config['selectors']))\r\n && (Array.isArray(config['generators'])));\r\n }\r\n const inactiveSettingMarker = { '_ame_inactive_setting': true };\r\n class PreviewSession {\r\n constructor(config) {\r\n this.settings = {};\r\n this.valueReaders = new Set();\r\n this.notFound = {};\r\n this.variables = {};\r\n this.styleBlocks = [];\r\n this.stylesheetsToDisable = [];\r\n this.stylesheetWasEnabled = {};\r\n /**\r\n * Whether this is the first time the preview is being updated.\r\n * This is set to false after preview() is called for the first time.\r\n */\r\n this._isBeforeFirstUpdate = true;\r\n //Optimization: Create bound getters once instead of every time we need\r\n //to create a setting or variable reference.\r\n this.settingValueGetter = this.getSettingPreviewValue.bind(this);\r\n this.variableValueGetter = (variableName) => {\r\n if (variableName in this.variables) {\r\n return this.variables[variableName].getValue();\r\n }\r\n return null;\r\n };\r\n //Optionally, disable already generated custom stylesheets while the preview\r\n //is active to prevent old settings from interfering with the preview of new settings.\r\n if (Array.isArray(config.stylesheetsToDisable)) {\r\n this.stylesheetsToDisable = config.stylesheetsToDisable;\r\n }\r\n //Variables\r\n for (const variableName in config.variables) {\r\n if (!config.variables.hasOwnProperty(variableName)) {\r\n continue;\r\n }\r\n this.variables[variableName] = this.createValueDescriptor(config.variables[variableName], true);\r\n }\r\n //CSS statement groups\r\n for (const conditionConfig of config.statementGroups) {\r\n const statements = this.createCssStatements(conditionConfig.statements);\r\n if (statements.length < 1) {\r\n continue;\r\n }\r\n const condition = this.createValueDescriptor(conditionConfig.expression, true);\r\n const usedSettingIds = this.getSettingIdsUsedBy(condition);\r\n const conditionCallback = () => {\r\n //For performance, conditions that reference settings should\r\n //only be checked when at least one setting is active.\r\n if (usedSettingIds.length > 0) {\r\n if (!usedSettingIds.some((id) => this.isSettingActive(id))) {\r\n return false;\r\n }\r\n }\r\n const isTruthy = condition.getValue();\r\n return !!isTruthy; //Convert to boolean.\r\n };\r\n this.styleBlocks.push(new PreviewStyleBlock(statements, conditionCallback));\r\n }\r\n }\r\n createValueDescriptor(data, allowUnknownVariables = false) {\r\n switch (data.t) {\r\n case 'constant':\r\n return new ConstantValue(data.value);\r\n case 'array':\r\n return new ArrayValue(data.items.map((valueData) => this.createValueDescriptor(valueData, allowUnknownVariables)));\r\n case 'setting':\r\n this.registerPreviewableSettingId(data.id);\r\n return new SettingReference(data.id, this.settingValueGetter);\r\n case 'var':\r\n if (!this.variables.hasOwnProperty(data.name) && !allowUnknownVariables) {\r\n throw new Error('Unknown variable: ' + data.name);\r\n }\r\n return new VariableReference(data.name, this.variableValueGetter);\r\n case 'funcCall':\r\n let functionName;\r\n if (data.name in builtinFunctions) {\r\n functionName = data.name;\r\n }\r\n else {\r\n throw new Error('Unknown function: ' + data.name);\r\n }\r\n const func = builtinFunctions[functionName];\r\n //Initialize the function arguments.\r\n let args;\r\n if (Array.isArray(data.args)) {\r\n args = data.args.map(arg => this.createValueDescriptor(arg, allowUnknownVariables));\r\n }\r\n else {\r\n args = {};\r\n for (const argName in data.args) {\r\n if (!data.args.hasOwnProperty(argName)) {\r\n continue;\r\n }\r\n args[argName] = this.createValueDescriptor(data.args[argName], allowUnknownVariables);\r\n }\r\n }\r\n // @ts-ignore - Can't really statically check this since the values come from the server.\r\n return new FunctionCall(args, func);\r\n }\r\n }\r\n /**\r\n * Get the IDs of all settings that are referenced by the given descriptor.\r\n *\r\n * @param descriptor\r\n * @private\r\n */\r\n getSettingIdsUsedBy(descriptor) {\r\n if (descriptor instanceof SettingReference) {\r\n return [descriptor.settingId];\r\n }\r\n if (descriptor instanceof ArrayValue) {\r\n let result = [];\r\n for (const item of descriptor.getItemDescriptors()) {\r\n result = result.concat(this.getSettingIdsUsedBy(item));\r\n }\r\n return uniqueArrayValues(result);\r\n }\r\n if (descriptor instanceof FunctionCall) {\r\n let result = [];\r\n const args = descriptor.args;\r\n if (Array.isArray(args)) {\r\n for (const arg of args) {\r\n result = result.concat(this.getSettingIdsUsedBy(arg));\r\n }\r\n }\r\n else {\r\n for (const argName in args) {\r\n if (args.hasOwnProperty(argName)) {\r\n result = result.concat(this.getSettingIdsUsedBy(args[argName]));\r\n }\r\n }\r\n }\r\n return uniqueArrayValues(result);\r\n }\r\n if (descriptor instanceof VariableReference) {\r\n const varDef = this.getVariableDefinition(descriptor.name);\r\n if (varDef === null) {\r\n return [];\r\n }\r\n return this.getSettingIdsUsedBy(varDef);\r\n }\r\n return [];\r\n }\r\n getVariableDefinition(variableName) {\r\n if (!this.variables.hasOwnProperty(variableName)) {\r\n return null;\r\n }\r\n return this.variables[variableName];\r\n }\r\n createCssStatements(configs) {\r\n let results = [];\r\n for (const config of configs) {\r\n if (isRuleSetConfig(config)) {\r\n results.push(this.createRuleSetFromConfig(config));\r\n }\r\n else if (isConditionalAtRuleConfig(config)) {\r\n results.push(new ConditionalAtRule(config.identifier, config.condition, (typeof config.nestedStatements === 'undefined')\r\n ? []\r\n : this.createCssStatements(config.nestedStatements)));\r\n }\r\n else {\r\n console.error('Unknown CSS statement type: ', config);\r\n }\r\n }\r\n return results;\r\n }\r\n createRuleSetFromConfig(config, parent = null) {\r\n const generatorWrappers = this.makeGeneratorWrappers(config.generators);\r\n const ruleSet = new CssRuleSet(config.selectors, generatorWrappers, parent);\r\n const nestedRuleSets = this.createNestedRuleSets(config.nestedStatements, ruleSet);\r\n ruleSet.setNestedRuleSets(nestedRuleSets);\r\n return ruleSet;\r\n }\r\n createNestedRuleSets(configs, parent = null) {\r\n let results = [];\r\n if (!configs) {\r\n return results;\r\n }\r\n for (const config of configs) {\r\n if (!isRuleSetConfig(config)) {\r\n throw new Error('A CSS rule set can only contain other rule sets, not other types of statements.');\r\n }\r\n results.push(this.createRuleSetFromConfig(config, parent));\r\n }\r\n return results;\r\n }\r\n getPreviewableSettingIDs() {\r\n return Object.keys(this.settings);\r\n }\r\n preview(settingId, value, otherSettingReader) {\r\n if (this._isBeforeFirstUpdate) {\r\n this._isBeforeFirstUpdate = false;\r\n this.disableAssociatedStylesheets();\r\n }\r\n this.valueReaders.add(otherSettingReader);\r\n if (!this.settings.hasOwnProperty(settingId)) {\r\n this.settings[settingId] = ko.observable(value);\r\n }\r\n else {\r\n this.settings[settingId](value);\r\n }\r\n }\r\n dispose() {\r\n //Dispose of all style blocks.\r\n for (const block of this.styleBlocks) {\r\n block.dispose();\r\n }\r\n this.reEnableAssociatedStylesheets();\r\n }\r\n disableAssociatedStylesheets() {\r\n for (const stylesheetSelector of this.stylesheetsToDisable) {\r\n const $link = $(stylesheetSelector);\r\n if ($link.length > 0) {\r\n this.stylesheetWasEnabled[stylesheetSelector] = $link.prop('disabled');\r\n $link.prop('disabled', true);\r\n }\r\n }\r\n }\r\n reEnableAssociatedStylesheets() {\r\n for (const stylesheetSelector of this.stylesheetsToDisable) {\r\n const $link = $(stylesheetSelector);\r\n if (($link.length > 0) && this.stylesheetWasEnabled.hasOwnProperty(stylesheetSelector)) {\r\n $link.prop('disabled', this.stylesheetWasEnabled[stylesheetSelector]);\r\n }\r\n }\r\n }\r\n isSettingActive(settingId) {\r\n if (this.settings.hasOwnProperty(settingId)) {\r\n return this.settings[settingId]() !== inactiveSettingMarker;\r\n }\r\n return false;\r\n }\r\n getSettingPreviewValue(settingId) {\r\n if (!this.settings.hasOwnProperty(settingId)) {\r\n const value = this.getSettingFromReaders(settingId);\r\n this.settings[settingId] = ko.observable(value).extend({ deferred: true });\r\n }\r\n const observable = this.settings[settingId];\r\n let value = observable();\r\n if (value === inactiveSettingMarker) {\r\n value = this.getSettingFromReaders(settingId);\r\n observable(value);\r\n }\r\n return value;\r\n }\r\n getSettingFromReaders(settingId) {\r\n for (const reader of this.valueReaders) {\r\n const value = reader(settingId, this.notFound);\r\n if (value !== this.notFound) {\r\n return value;\r\n }\r\n }\r\n throw new Error('Setting not found for preview: ' + settingId);\r\n }\r\n makeGeneratorWrappers(generatorConfigs) {\r\n let generatorWrappers = [];\r\n for (const generatorConfig of generatorConfigs) {\r\n const wrapper = this.makeDeclarationGeneratorWrapper(generatorConfig);\r\n if (wrapper !== null) {\r\n generatorWrappers.push(wrapper);\r\n }\r\n }\r\n return generatorWrappers;\r\n }\r\n makeDeclarationGeneratorWrapper(config) {\r\n const generator = this.createValueDescriptor(config);\r\n return new DeclarationGeneratorWrapper(generator, this);\r\n }\r\n registerPreviewableSettingId(settingId) {\r\n if (!this.settings.hasOwnProperty(settingId)) {\r\n this.settings[settingId] = ko.observable(inactiveSettingMarker);\r\n }\r\n }\r\n get isBeforeFirstUpdate() {\r\n return this._isBeforeFirstUpdate;\r\n }\r\n }\r\n /**\r\n * Preview manager for the style generator.\r\n *\r\n * This is a thin wrapper around the PreviewSession class. It initializes the session\r\n * as needed and destroys it when the preview is cleared. This makes it simpler to manage\r\n * active settings, style blocks, and CSS rule-sets: instead of having to carefully\r\n * track dependencies and deactivate/reactivate them in the right order whenever the preview\r\n * is disabled/enabled, we can just destroy the session and start over.\r\n */\r\n class StyleGeneratorPreview {\r\n constructor(config) {\r\n this.config = config;\r\n this.currentSession = null;\r\n }\r\n getOrCreateSession() {\r\n if (this.currentSession === null) {\r\n this.currentSession = new PreviewSession(this.config);\r\n }\r\n return this.currentSession;\r\n }\r\n getPreviewableSettingIDs() {\r\n return this.getOrCreateSession().getPreviewableSettingIDs();\r\n }\r\n preview(settingId, value, otherSettingReader) {\r\n const session = this.getOrCreateSession();\r\n const shouldPreviewAll = (this.config.previewAllOnFirstUpdate && session.isBeforeFirstUpdate);\r\n session.preview(settingId, value, otherSettingReader);\r\n if (shouldPreviewAll) {\r\n //Preview all registered settings the first time the preview is updated.\r\n const notFound = {};\r\n for (const otherId of session.getPreviewableSettingIDs()) {\r\n const otherValue = otherSettingReader(otherId, notFound);\r\n if ((otherId !== settingId) && (otherValue !== notFound)) {\r\n session.preview(otherId, otherValue, otherSettingReader);\r\n }\r\n }\r\n }\r\n }\r\n clearPreview() {\r\n if (this.currentSession !== null) {\r\n this.currentSession.dispose();\r\n this.currentSession = null;\r\n }\r\n }\r\n }\r\n Preview.StyleGeneratorPreview = StyleGeneratorPreview;\r\n class DeclarationGeneratorWrapper {\r\n constructor(generator, settingSource) {\r\n this.generator = generator;\r\n this.settingSource = settingSource;\r\n //Introspect the generator and see which settings it uses.\r\n //This will be useful to determine if the generator is active.\r\n this.usedSettingIds = DeclarationGeneratorWrapper.findReferencedSettingIds(generator, settingSource);\r\n this.cssDeclarations = ko.computed({\r\n read: () => this.getDeclarations(),\r\n deferEvaluation: true,\r\n }).extend({ deferred: true });\r\n }\r\n /**\r\n * Recursively find all settings used by a value descriptor (such as a function call).\r\n *\r\n * @param {ValueDescriptor} thing\r\n * @param variableSource Needed to get variable definitions and not just the final values.\r\n */\r\n static findReferencedSettingIds(thing, variableSource) {\r\n let settingIds = [];\r\n if (thing instanceof SettingReference) {\r\n settingIds.push(thing.settingId);\r\n }\r\n else if (thing instanceof FunctionCall) {\r\n if (Array.isArray(thing.args)) {\r\n for (const arg of thing.args) {\r\n settingIds = settingIds.concat(DeclarationGeneratorWrapper.findReferencedSettingIds(arg, variableSource));\r\n }\r\n }\r\n else {\r\n for (const key in thing.args) {\r\n settingIds = settingIds.concat(DeclarationGeneratorWrapper.findReferencedSettingIds(thing.args[key], variableSource));\r\n }\r\n }\r\n }\r\n else if (thing instanceof VariableReference) {\r\n const value = variableSource.getVariableDefinition(thing.name);\r\n if (value !== null) {\r\n settingIds = settingIds.concat(DeclarationGeneratorWrapper.findReferencedSettingIds(value, variableSource));\r\n }\r\n }\r\n return settingIds;\r\n }\r\n isActive() {\r\n //Check if any of the input settings are active.\r\n let hasSettingLookups = false;\r\n for (const settingId of this.usedSettingIds) {\r\n hasSettingLookups = true;\r\n if (this.settingSource.isSettingActive(settingId)) {\r\n return true;\r\n }\r\n }\r\n //If there are no input settings, the generator is always active: it just\r\n //generates a fixed declaration.\r\n return !hasSettingLookups;\r\n }\r\n getDeclarations() {\r\n return this.generator.getValue();\r\n }\r\n dispose() {\r\n this.cssDeclarations.dispose();\r\n }\r\n }\r\n class CssStatement {\r\n constructor() {\r\n this.cssText = ko.computed({\r\n read: () => this.generateCss(),\r\n deferEvaluation: true,\r\n }).extend({ deferred: true });\r\n }\r\n dispose() {\r\n //Dispose the CSS text observable.\r\n this.cssText.dispose();\r\n }\r\n }\r\n class CssRuleSet extends CssStatement {\r\n constructor(selectors, declarationSources, parent = null) {\r\n super();\r\n this.declarationSources = declarationSources;\r\n this.nestedRuleSets = ko.observableArray([]);\r\n if (parent === null) {\r\n this.effectiveSelectors = selectors;\r\n }\r\n else {\r\n this.effectiveSelectors = CssRuleSet.combineSelectors(selectors, parent.effectiveSelectors);\r\n }\r\n this.selectorText = this.effectiveSelectors.join(', ');\r\n }\r\n static combineSelectors(selectors, parentSelectors) {\r\n const combinedSelectors = [];\r\n for (const selector of selectors) {\r\n if (selector === '') {\r\n continue;\r\n }\r\n if (selector.includes('&')) {\r\n //Insert the parent selectors into the current selector at the position of the \"&\".\r\n for (const parentSelector of parentSelectors) {\r\n combinedSelectors.push(selector.replace('&', parentSelector.trim()));\r\n }\r\n }\r\n else {\r\n //Just append the current selector to the parent selectors.\r\n for (const parentSelector of parentSelectors) {\r\n combinedSelectors.push(`${parentSelector} ${selector}`);\r\n }\r\n }\r\n }\r\n return combinedSelectors;\r\n }\r\n setNestedRuleSets(ruleSets) {\r\n //Dispose the old rule sets that are not part of the new list.\r\n for (const oldRuleSet of this.nestedRuleSets()) {\r\n if (ruleSets.indexOf(oldRuleSet) === -1) {\r\n oldRuleSet.dispose();\r\n }\r\n }\r\n this.nestedRuleSets(ruleSets);\r\n }\r\n generateCss() {\r\n const declarations = this.getDeclarations();\r\n const nestedRuleSetParts = [];\r\n for (const ruleSet of this.nestedRuleSets()) {\r\n if (ruleSet.isActive()) {\r\n nestedRuleSetParts.push(ruleSet.cssText());\r\n }\r\n }\r\n let css = '';\r\n if (declarations.length > 0) {\r\n css += this.selectorText + ' {\\n\\t' + declarations.join('\\n\\t') + '\\n}\\n';\r\n }\r\n if (nestedRuleSetParts.length > 0) {\r\n css += nestedRuleSetParts.join('\\n');\r\n }\r\n return css;\r\n }\r\n isActive() {\r\n for (const source of this.declarationSources) {\r\n if (source.isActive()) {\r\n return true;\r\n }\r\n }\r\n for (const ruleSet of this.nestedRuleSets()) {\r\n if (ruleSet.isActive()) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n getDeclarations() {\r\n const declarations = [];\r\n for (const source of this.declarationSources) {\r\n if (source.isActive()) {\r\n declarations.push(...source.cssDeclarations());\r\n }\r\n }\r\n return declarations;\r\n }\r\n dispose() {\r\n //Dispose declaration sources.\r\n for (const source of this.declarationSources) {\r\n source.dispose();\r\n }\r\n //Dispose nested rule sets.\r\n for (const ruleSet of this.nestedRuleSets()) {\r\n ruleSet.dispose();\r\n }\r\n super.dispose();\r\n }\r\n }\r\n class ConditionalAtRule extends CssStatement {\r\n constructor(identifier, condition, nestedStatements) {\r\n super();\r\n this.identifier = identifier;\r\n this.condition = condition;\r\n this.nestedStatements = nestedStatements;\r\n }\r\n generateCss() {\r\n const pieces = [];\r\n for (const statement of this.nestedStatements) {\r\n const css = statement.cssText();\r\n if (css !== '') {\r\n pieces.push(css);\r\n }\r\n }\r\n if (pieces.length === 0) {\r\n return '';\r\n }\r\n return this.getAtRuleText() + ' {\\n\\t' + pieces.join('\\n\\t') + '\\n}';\r\n }\r\n getAtRuleText() {\r\n return '@' + this.identifier + ' ' + this.condition;\r\n }\r\n isActive() {\r\n for (const statement of this.nestedStatements) {\r\n if (statement.isActive()) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n dispose() {\r\n //Dispose nested statements.\r\n for (const statement of this.nestedStatements) {\r\n statement.dispose();\r\n }\r\n super.dispose();\r\n }\r\n }\r\n class PreviewStyleBlock {\r\n constructor(statements, condition = null) {\r\n this.statements = statements;\r\n this.condition = condition;\r\n this.$styleElement = null;\r\n this.cssText = ko.computed({\r\n read: () => {\r\n if ((condition !== null) && !condition()) {\r\n return '';\r\n }\r\n let pieces = [];\r\n for (const statement of this.statements) {\r\n if (statement.isActive()) {\r\n const css = statement.cssText();\r\n if (css !== '') {\r\n pieces.push(css);\r\n }\r\n }\r\n }\r\n if (pieces.length === 0) {\r\n return '';\r\n }\r\n return pieces.join('\\n');\r\n },\r\n deferEvaluation: true,\r\n }).extend({ deferred: true });\r\n this.updateStyleElement(this.cssText());\r\n this.cssChangeSubscription = this.cssText.subscribe((cssText) => {\r\n this.updateStyleElement(cssText);\r\n });\r\n }\r\n updateStyleElement(cssText) {\r\n if (cssText === '') {\r\n if (this.$styleElement) {\r\n this.$styleElement.remove();\r\n this.$styleElement = null;\r\n }\r\n return;\r\n }\r\n if (!this.$styleElement) {\r\n this.$styleElement = $('').appendTo('head');\r\n }\r\n this.$styleElement.text(cssText);\r\n }\r\n clear() {\r\n if (this.$styleElement) {\r\n this.$styleElement.remove();\r\n this.$styleElement = null;\r\n }\r\n }\r\n dispose() {\r\n //Stop listening for CSS changes.\r\n this.cssChangeSubscription.dispose();\r\n this.cssText.dispose();\r\n //Dispose rule sets.\r\n for (const ruleset of this.statements) {\r\n ruleset.dispose();\r\n }\r\n //Remove the style element.\r\n this.clear();\r\n }\r\n }\r\n })(Preview = AmeStyleGenerator.Preview || (AmeStyleGenerator.Preview = {}));\r\n})(AmeStyleGenerator || (AmeStyleGenerator = {}));\r\n//# sourceMappingURL=style-generator.js.map"],"names":[],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"admin-customizer-preview.bundle.js","mappings":";;;;;;;;;;;;;AAAa;AAEkE;AACb;AACS;AAI3E,kFAAkF;AAClF,oDAAoD;AAEpD,IAAU,yBAAyB,CAkLlC;AAlLD,WAAU,yBAAyB;IAClC,IAAO,wBAAwB,GAAG,+GAAwC,CAAC;IAC3E,MAAM,CAAC,GAAG,MAAM,CAAC;IAMjB,MAAa,cAAe,SAAQ,iGAA0C;QAO7E,YAAY,UAA6B;YACxC,KAAK,CAAC,UAAU,CAAC,CAAC;YAHF,yBAAoB,GAAwB,EAAE,CAAC;YAI/D,IAAI,CAAC,aAAa,GAAG,UAAU,CAAC,aAAa,CAAC;YAE9C,IAAI,CAAC,eAAe,GAAG,IAAI,wBAAwB,CAClD,CAAC,SAAiB,EAAE,aAAkB,EAAE,EAAE;gBACzC,IAAI,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC,SAAS,CAAC,EAAE;oBACxD,OAAO,IAAI,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC;iBAC5C;gBACD,2EAA2E;gBAC3E,IACC,UAAU,CAAC,QAAQ,CAAC,cAAc,CAAC,SAAS,CAAC;uBAC1C,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC,EACxD;oBACD,OAAO,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC;iBAC5C;gBACD,OAAO,aAAa,CAAC;YACtB,CAAC,CACD,CAAC;YAEF,IAAI,CAAC,UAAU,GAAG,iBAAiB,CAAC,eAAe,CAClD;gBACC,gBAAgB,EAAE,CAAC,SAAiB,EAAE,KAAU,EAAE,EAAE;oBACnD,IAAI,CAAC,oBAAoB,CAAC,SAAS,CAAC,GAAG,KAAK,CAAC;oBAE7C,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE;wBAChD,OAAO,KAAK,CAAC;qBACb;oBACD,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;oBAC7C,OAAO,IAAI,CAAC;gBACb,CAAC;gBACD,eAAe,EAAE,GAAG,EAAE;oBACrB,OAAO,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;gBAC7B,CAAC;aACD,EACD,UAAU,CAAC,kBAAkB,EAC7B,UAAU,CAAC,gBAAgB,CAC3B,CAAC;YAEF,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE;gBAClC,IAAI,OAAO,CAAC,KAAK,WAAW,EAAE;oBAC7B,IAAI,OAAO,IAAI,OAAO,CAAC,IAAI,EAAE;wBAC5B,OAAO,CAAC,IAAI,CAAC,qFAAqF,CAAC,CAAC;qBACpG;oBACD,OAAO,CAAC,2BAA2B;iBACnC;gBAED,sEAAsE;gBACtE,2EAA2E;gBAC3E,0EAA0E;gBAC1E,CAAC,CAAC,OAAO,CAAC,yBAAyB,EAAE,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YAC5D,CAAC,CAAC,CAAC;YAEH,CAAC,CAAC,GAAG,EAAE;gBACN,IAAI,CAAC,uBAAuB,EAAE,CAAC;gBAE/B,yBAAyB;gBACzB,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,sBAAsB,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,EAAE;oBAC1D,OAAO,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;gBACpC,CAAC,CAAC,CAAC;gBAEH,uEAAuE;gBACvE,qBAAqB;gBACrB,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,uBAAuB,EAAE,MAAM,EAAE,UAAU,KAAK;oBACnE,KAAK,CAAC,cAAc,EAAE,CAAC;gBACxB,CAAC,CAAC,CAAC;YACJ,CAAC,CAAC,CAAC;YAEH,mEAAmE;YACnE,KAAK,MAAM,aAAa,IAAI,CAAC,UAAU,CAAC,mBAAmB,IAAI,EAAE,CAAC,EAAE;gBACnE,MAAM,eAAe,GAAG,IAAI,gHAA+C,CAAC,aAAa,CAAC,CAAC;gBAC3F,IAAI,CAAC,eAAe,CAAC,sBAAsB,CAC1C,eAAe,CAAC,wBAAwB,EAAE,EAC1C,eAAe,CACf,CAAC;aACF;QACF,CAAC;QAED;;WAEG;QACH,uBAAuB;YACtB,MAAM,IAAI,GAAG,IAAI,CAAC;YAClB,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC;gBACjB,MAAM,OAAO,GAAG,IAAI,CAAC;gBACrB,IAAI,CAAC,CAAC,OAAO,YAAY,iBAAiB,CAAC,EAAE;oBAC5C,OAAO;iBACP;gBACD,MAAM,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;gBAEtB,4CAA4C;gBAC5C,IAAI,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,EAAE;oBACjC,OAAO;iBACP;gBAED,sCAAsC;gBACtC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,EAAE;oBACrC,KAAK,CAAC,QAAQ,CAAC,wBAAwB,CAAC,CAAC;oBACzC,OAAO;iBACP;gBAED,qCAAqC;gBACrC,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;gBACnD,MAAM,CAAC,GAAG,CAAC,gBAAgB,EAAE,GAAG,CAAC,CAAC;gBAClC,MAAM,CAAC,GAAG,CAAC,kBAAkB,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;gBACnD,OAAO,CAAC,MAAM,GAAG,GAAG,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;YAC1C,CAAC,CAAC,CAAC;QACJ,CAAC;QAED,iBAAiB,CAAC,OAA0B;YAC3C,OAAO,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;QACvC,CAAC;QAED,gBAAgB,CAAC,KAAa;YAC7B,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAChC,IAAI,OAAO,IAAI,KAAK,WAAW,EAAE;gBAChC,OAAO,KAAK,CAAC;aACb;YACD,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC;QACvC,CAAC;QAED,eAAe,CAAC,KAAwB;YACvC,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAE3C,6BAA6B;YAC7B,IAAI,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,EAAE;gBACjC,OAAO;aACP;YAED,+DAA+D;YAC/D,MAAM,aAAa,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAsB,CAAC;YACxD,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,EAAE;gBAC3C,KAAK,CAAC,cAAc,EAAE,CAAC;gBACvB,OAAO;aACP;YAED,+DAA+D;YAC/D,IAAI,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE;gBAChC,KAAK,CAAC,cAAc,EAAE,CAAC;gBACvB,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,eAAe,EAAE,aAAa,CAAC,IAAI,CAAC,CAAC;aAC7D;QACF,CAAC;QAED,4DAA4D;QAC5D,iBAAiB,CAAC,SAAiB,EAAE,QAAiC;YACrE,IAAI,CAAC,eAAe,CAAC,uBAAuB,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QACnE,CAAC;QAED,iEAAiE;QACjE,sBAAsB,CAAC,UAAoB,EAAE,OAAuC;YACnF,IAAI,CAAC,eAAe,CAAC,sBAAsB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QAClE,CAAC;QAED,qCAAqC;QACrC,iBAAiB,CAAC,UAAkB,EAAE,OAA8B;YACnE,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QACnD,CAAC;KACD;IApKY,wCAAc,iBAoK1B;IAED,MAAM,cAAc,GAAG,IAAI,cAAc,CAAC,kBAAkB,CAAC,CAAC;IAC9D,MAAM,CAAC,0BAA0B,CAAC,GAAG,cAAc,CAAC;IAEpD,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,gCAAgC,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC;AACvE,CAAC,EAlLS,yBAAyB,KAAzB,yBAAyB,QAkLlC;;;;;;;;;;;;;;;AC7LY;AACN;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,wDAAwD;AACzD;;;;;;;;;;;;;;ACvCO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,IAAI;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,IAAI,IAAI,MAAM,IAAI,KAAK,IAAI,QAAQ;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD;AACtD,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,WAAW,KAAK,SAAS,KAAK,KAAK,KAAK,OAAO;AAC9E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,sBAAsB;AACzD,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,SAAS,IAAI,MAAM,EAAE,MAAM;AAChE;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,sDAAsD,kCAAkC;AACxF,SAAS;AACT;AACA;AACA;AACA,sDAAsD,iCAAiC;AACvF,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD,SAAS;AAClE;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6EAA6E,gBAAgB;AAC7F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,WAAW,gBAAgB;AAC5C;AACA;AACA;AACA;AACA,uBAAuB,iBAAiB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,WAAW,gBAAgB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,gBAAgB,EAAE,SAAS;AACjF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD,wCAAwC;AAC1F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD,kCAAkC;AACnF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA,iBAAiB,WAAW,gBAAgB;AAC5C;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,wEAAwE;AAC7E,CAAC,8CAA8C;AAC/C","sources":["webpack:///./extras/modules/admin-customizer/preview-handler.ts","webpack:///./extras/modules/admin-customizer/admin-customizer-base.js","webpack:///./extras/style-generator/style-generator.js"],"sourcesContent":["'use strict';\n\nimport {AmeCustomizable} from '../../pro-customizables/assets/customizable.js';\nimport {AmeAdminCustomizerBase} from './admin-customizer-base.js';\nimport {AmeStyleGenerator} from '../../style-generator/style-generator.js';\n\ndeclare var wsAmeAcPreviewData: AmeAdminCustomizerPreview.PreviewScriptData;\n\n//Compatibility note: This script is not compatible with IE11 because it uses some\n//modern JS features like the URLSearchParams class.\n\nnamespace AmeAdminCustomizerPreview {\n\timport ThrottledPreviewRegistry = AmeCustomizable.ThrottledPreviewRegistry;\n\tconst $ = jQuery;\n\n\texport interface PreviewScriptData extends AmeAdminCustomizerBase.ScriptData {\n\t\tstylePreviewConfigs?: AmeStyleGenerator.Preview.StyleGeneratorPreviewConfig[];\n\t}\n\n\texport class PreviewHandler extends AmeAdminCustomizerBase.AdminCustomizerBase {\n\t\tprivate readonly changesetName: string;\n\t\tprivate readonly connection: ReturnType;\n\n\t\tprivate readonly previewRegistry: ThrottledPreviewRegistry;\n\t\tprivate readonly currentPreviewValues: Record = {};\n\n\t\tconstructor(scriptData: PreviewScriptData) {\n\t\t\tsuper(scriptData);\n\t\t\tthis.changesetName = scriptData.changesetName;\n\n\t\t\tthis.previewRegistry = new ThrottledPreviewRegistry(\n\t\t\t\t(settingId: string, defaultResult: any) => {\n\t\t\t\t\tif (this.currentPreviewValues.hasOwnProperty(settingId)) {\n\t\t\t\t\t\treturn this.currentPreviewValues[settingId];\n\t\t\t\t\t}\n\t\t\t\t\t//Try the script data. It should have the current value from the changeset.\n\t\t\t\t\tif (\n\t\t\t\t\t\tscriptData.settings.hasOwnProperty(settingId)\n\t\t\t\t\t\t&& scriptData.settings[settingId].hasOwnProperty('value')\n\t\t\t\t\t) {\n\t\t\t\t\t\treturn scriptData.settings[settingId].value;\n\t\t\t\t\t}\n\t\t\t\t\treturn defaultResult;\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tthis.connection = AmeAcCommunicator.connectToParent(\n\t\t\t\t{\n\t\t\t\t\t'previewSetting': (settingId: string, value: any) => {\n\t\t\t\t\t\tthis.currentPreviewValues[settingId] = value;\n\n\t\t\t\t\t\tif (!this.previewRegistry.canPreview(settingId)) {\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.previewRegistry.queuePreview(settingId);\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t},\n\t\t\t\t\t'getCurrentUrl': () => {\n\t\t\t\t\t\treturn window.location.href;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tscriptData.allowedCommOrigins,\n\t\t\t\tscriptData.isWpDebugEnabled\n\t\t\t);\n\n\t\t\tthis.connection.promise.then((c) => {\n\t\t\t\tif (typeof c === 'undefined') {\n\t\t\t\t\tif (console && console.warn) {\n\t\t\t\t\t\tconsole.warn('Connection succeeded, but the communicator is undefined. This should be impossible.');\n\t\t\t\t\t}\n\t\t\t\t\treturn; //This should never happen.\n\t\t\t\t}\n\n\t\t\t\t//Let the parent know the current URL. The parent might not be able to\n\t\t\t\t//read it due to cross-domain restrictions, and if there are any redirects,\n\t\t\t\t//the actual URL might not match the frame src that was set by the parent.\n\t\t\t\tc.execute('notifyPreviewUrlChanged', window.location.href);\n\t\t\t});\n\n\t\t\t$(() => {\n\t\t\t\tthis.addPreviewParamsToLinks();\n\n\t\t\t\t//Handle clicks on links.\n\t\t\t\t$(document.body).on('click.ame-ac-preview', 'a', (event) => {\n\t\t\t\t\treturn this.handleLinkClick(event);\n\t\t\t\t});\n\n\t\t\t\t//Block form submissions. Theme Customizer supports those, but we don't\n\t\t\t\t//(at least for now).\n\t\t\t\t$(document.body).on('submit.ame-ac-preview', 'form', function (event) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t});\n\t\t\t});\n\n\t\t\t//For convenience, support for StyleGenerator previews is built-in.\n\t\t\tfor (const previewConfig of (scriptData.stylePreviewConfigs || [])) {\n\t\t\t\tconst previewInstance = new AmeStyleGenerator.Preview.StyleGeneratorPreview(previewConfig);\n\t\t\t\tthis.previewRegistry.registerPreviewUpdater(\n\t\t\t\t\tpreviewInstance.getPreviewableSettingIDs(),\n\t\t\t\t\tpreviewInstance\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * Add preview-specific query parameters to all links.\n\t\t */\n\t\taddPreviewParamsToLinks() {\n\t\t\tconst self = this;\n\t\t\t$('a[href]').each(function (this: HTMLElement) {\n\t\t\t\tconst element = this;\n\t\t\t\tif (!(element instanceof HTMLAnchorElement)) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst $link = $(this);\n\n\t\t\t\t//Don't modify internal anchors like \"#abc\".\n\t\t\t\tif (self.isInternalAnchor($link)) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t//Flag and skip non-previewable links.\n\t\t\t\tif (!self.isPreviewableLink(element)) {\n\t\t\t\t\t$link.addClass('ame-ac-not-previewable');\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t//Add the preview query parameter(s).\n\t\t\t\tconst params = new URLSearchParams(element.search);\n\t\t\t\tparams.set('ame-ac-preview', '1');\n\t\t\t\tparams.set('ame-ac-changeset', self.changesetName);\n\t\t\t\telement.search = '?' + params.toString();\n\t\t\t});\n\t\t}\n\n\t\tisPreviewableLink(element: HTMLAnchorElement): boolean {\n\t\t\treturn this.isPreviewableUrl(element);\n\t\t}\n\n\t\tisInternalAnchor($link: JQuery): boolean {\n\t\t\tconst href = $link.attr('href');\n\t\t\tif (typeof href === 'undefined') {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn (href.substring(0, 1) === '#');\n\t\t}\n\n\t\thandleLinkClick(event: JQueryEventObject) {\n\t\t\tconst $link = $(event.target).closest('a');\n\n\t\t\t//Let anchors work as normal.\n\t\t\tif (this.isInternalAnchor($link)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t//Prevent the browser from navigating to non-previewable links.\n\t\t\tconst anchorElement = $link.get(0) as HTMLAnchorElement;\n\t\t\tif (!this.isPreviewableLink(anchorElement)) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t//Tell the parent (i.e. the admin customizer) to load the link.\n\t\t\tif (this.connection.isConnected) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tthis.connection.execute('setPreviewUrl', anchorElement.href);\n\t\t\t}\n\t\t}\n\n\t\t// noinspection JSUnusedGlobalSymbols Used in other modules.\n\t\tregisterPreviewer(settingId: string, callback: (newValue: any) => void) {\n\t\t\tthis.previewRegistry.registerPreviewCallback(settingId, callback);\n\t\t}\n\n\t\t// noinspection JSUnusedGlobalSymbols Also used in other modules.\n\t\tregisterPreviewUpdater(settingIds: string[], updater: AmeCustomizable.PreviewUpdater) {\n\t\t\tthis.previewRegistry.registerPreviewUpdater(settingIds, updater);\n\t\t}\n\n\t\t// noinspection JSUnusedGlobalSymbols\n\t\tregisterRpcMethod(methodName: string, handler: (...args: any) => any) {\n\t\t\tthis.connection.addRpcMethod(methodName, handler);\n\t\t}\n\t}\n\n\tconst previewHandler = new PreviewHandler(wsAmeAcPreviewData);\n\twindow['wsAdminCustomizerPreview'] = previewHandler;\n\n\t$('body').trigger('adminMenuEditor:acPreviewStart', [previewHandler]);\n}\n\ndeclare global {\n\tinterface Window {\n\t\twsAdminCustomizerPreview: AmeAdminCustomizerPreview.PreviewHandler;\n\t}\n}","'use strict';\nexport var AmeAdminCustomizerBase;\n(function (AmeAdminCustomizerBase) {\n class AdminCustomizerBase {\n constructor(scriptData) {\n this.allowedCommOrigins = scriptData.allowedCommOrigins;\n if (this.allowedCommOrigins.length === 0) {\n this.allowedCommOrigins = [window.location.origin];\n }\n this.allowedPreviewUrls = scriptData.allowedPreviewUrls;\n this.parsedAllowedUrls = this.allowedPreviewUrls.map(url => new URL(url));\n }\n isPreviewableUrl(url) {\n if (typeof url === 'string') {\n url = new URL(url);\n }\n if (typeof url.protocol === 'undefined') {\n return false;\n }\n //Only HTTP(S) links are previewable.\n if ((url.protocol !== 'http:') && (url.protocol !== 'https:')) {\n return false;\n }\n //Check against the list of allowed URLs.\n for (const allowedUrl of this.parsedAllowedUrls) {\n //Protocol and host must match. The path must start with the path\n //of the allowed URL (possibly without a trailing slash).\n if ((url.protocol === allowedUrl.protocol) && (url.host === allowedUrl.host)) {\n const allowedPath = allowedUrl.pathname.replace(/\\/$/, '');\n if (url.pathname.indexOf(allowedPath) === 0) {\n return true;\n }\n }\n }\n return false;\n }\n }\n AmeAdminCustomizerBase.AdminCustomizerBase = AdminCustomizerBase;\n})(AmeAdminCustomizerBase || (AmeAdminCustomizerBase = {}));\n//# sourceMappingURL=admin-customizer-base.js.map","export var AmeStyleGenerator;\n(function (AmeStyleGenerator) {\n const $ = jQuery;\n class ValueDescriptor {\n }\n class ConstantValue extends ValueDescriptor {\n constructor(value) {\n super();\n this.value = value;\n }\n getValue() {\n return this.value;\n }\n }\n class ArrayValue extends ValueDescriptor {\n constructor(items) {\n super();\n this.items = items;\n }\n getValue() {\n return this.items.map(item => item.getValue());\n }\n getItemDescriptors() {\n return this.items;\n }\n }\n class SettingReference extends ValueDescriptor {\n constructor(settingId, valueGetter) {\n super();\n this.settingId = settingId;\n this.valueGetter = valueGetter;\n }\n getValue() {\n return this.valueGetter(this.settingId);\n }\n }\n class VariableReference extends ValueDescriptor {\n constructor(name, valueGetter) {\n super();\n this.name = name;\n this.valueGetter = valueGetter;\n }\n getValue() {\n return this.valueGetter(this.name);\n }\n }\n class FunctionCall extends ValueDescriptor {\n constructor(args, callback) {\n super();\n this.args = args;\n this.callback = callback;\n }\n getValue() {\n return this.callback(this.resolveArgs(this.args));\n }\n resolveArgs(args) {\n if (Array.isArray(args)) {\n return args.map(arg => arg.getValue());\n }\n return Object.keys(args).reduce((result, key) => {\n result[key] = args[key].getValue();\n return result;\n }, {});\n }\n }\n //endregion\n function isEmptyCssValue(value) {\n return (typeof value === 'undefined') || (value === '') || (value === null);\n }\n function convertToRgba(color, opacity = 1.0) {\n color = color.trim();\n if (color === '') {\n return 'transparent';\n }\n //Strip the leading hash, if any.\n if (color[0] === '#') {\n color = color.substring(1);\n }\n //If the color is in the shorthand format, expand it.\n if (color.length === 3) {\n color = color[0] + color[0] + color[1] + color[1] + color[2] + color[2];\n }\n //The color should now be in the full 6-digit format. Convert it to RGBA.\n if (color.length === 6) {\n const red = parseInt(color.substring(0, 2), 16);\n const green = parseInt(color.substring(2, 4), 16);\n const blue = parseInt(color.substring(4, 6), 16);\n return `rgba(${red}, ${green}, ${blue}, ${opacity})`;\n }\n //The color may be invalid, or it's not in a hex format we recognize.\n return color;\n }\n function uniqueArrayValues(array) {\n return array.filter((value, index) => array.indexOf(value) === index);\n }\n function constrain(value, min, max) {\n return Math.min(Math.max(value, min), max);\n }\n function modifyHexColorAsHsl(args, operation) {\n const color = args.color || '';\n if (isEmptyCssValue(color)) {\n return '';\n }\n const hue = args.hue || null;\n const saturation = args.saturation || null;\n const lightness = args.lightness || null;\n if ((hue === null) && (saturation === null) && (lightness === null)) {\n return color;\n }\n let output = $.Color(color);\n output = operation(output, hue, saturation, lightness);\n return output.toHexString();\n }\n // noinspection JSUnusedGlobalSymbols -- Used dynamically by declaration generators received from the server.\n const builtinFunctions = {\n simpleProperty: function (args) {\n if (isEmptyCssValue(args.value)) {\n return [];\n }\n return [args.name + ': ' + args.value + ';'];\n },\n formatLength: function (args) {\n if (isEmptyCssValue(args.value)) {\n return '';\n }\n //Normalize numeric values. For example, while JS accepts \"1.\" as a number,\n //\"1.px\" is not a valid CSS length value, so it should be converted to \"1px\".\n const numericValue = parseFloat(String(args.value));\n if (isNaN(numericValue)) {\n return '';\n }\n return '' + numericValue + (args.unit || '');\n },\n shadow: function (args) {\n const mode = args.mode || 'default';\n const color = args.color || '';\n if (mode === 'default') {\n return [];\n }\n if ((mode === 'none') || (color === '') || (color === null) || (color === 'transparent')) {\n return ['box-shadow: none;'];\n }\n if (mode !== 'custom') {\n return [];\n }\n const components = [];\n if (args.inset) {\n components.push('inset');\n }\n const horizontal = args['offset-x'] || 0;\n const vertical = args['offset-y'] || 0;\n const blur = args.blur || 0;\n const spread = args.spread || 0;\n components.push(`${horizontal}px ${vertical}px ${blur}px ${spread}px`);\n const colorOpacity = args.colorOpacity || 1.0;\n if (colorOpacity < 1.0) {\n components.push(convertToRgba(color, colorOpacity));\n }\n else {\n components.push(color);\n }\n return [`box-shadow: ${components.join(' ')};`];\n },\n boxSides: function (args) {\n if (typeof args.cssPropertyPrefix !== 'string') {\n throw new Error('Invalid config for the boxSides generator: missing cssPropertyPrefix');\n }\n const compositeValue = args.value || {};\n const unit = compositeValue.unit || '';\n const declarations = [];\n for (const side of ['top', 'right', 'bottom', 'left']) {\n const value = compositeValue[side];\n if (isEmptyCssValue(value)) {\n continue;\n }\n const property = args.cssPropertyPrefix + side;\n declarations.push(`${property}: ${value}${unit};`);\n }\n return declarations;\n },\n firstNonEmpty(args) {\n for (const arg of args) {\n if (!isEmptyCssValue(arg)) {\n return arg;\n }\n }\n return null;\n },\n /**\n * Take a HEX color, convert it to HSL to edit its components,\n * then convert back to HEX.\n *\n * @param args\n */\n editHexAsHsl: function (args) {\n return modifyHexColorAsHsl(args, (color, hue, saturation, lightness) => {\n if (hue !== null) {\n color = color.hue(hue);\n }\n if (saturation !== null) {\n color = color.saturation(saturation);\n }\n if (lightness !== null) {\n color = color.lightness(lightness);\n }\n return color;\n });\n },\n adjustHexAsHsl: function (args) {\n return modifyHexColorAsHsl(args, (color, hue, saturation, lightness) => {\n if (hue !== null) {\n color = color.hue(constrain(color.hue() + hue, 0, 360));\n }\n if (saturation !== null) {\n color = color.saturation(constrain(color.saturation() + saturation, 0, 1.0));\n }\n if (lightness !== null) {\n color = color.lightness(constrain(color.lightness() + lightness, 0, 1.0));\n }\n return color;\n });\n },\n mixColors: function (args) {\n const color1 = args.color1 || '';\n const color2 = args.color2 || '';\n if (isEmptyCssValue(color1) || isEmptyCssValue(color2)) {\n return '';\n }\n const weight = args.weight || 50;\n if (weight <= 0) {\n return color2;\n }\n else if (weight >= 100) {\n return color1;\n }\n return $.Color(color2).transition($.Color(color1), weight / 100).toHexString();\n },\n changeLightness: function (args) {\n const color = args.color || '';\n if (isEmptyCssValue(color)) {\n return '';\n }\n const amount = args.amount || 0;\n if (amount === 0) {\n return color;\n }\n let output = $.Color(color);\n //Amount is a number between 0 and 100, while lightness is between 0.0 and 1.0.\n let newLightness = output.lightness() + (amount / 100);\n //Clamp to 0.0 - 1.0.\n newLightness = constrain(newLightness, 0.0, 1.0);\n return output.lightness(newLightness).toHexString();\n },\n darken: function (args) {\n const color = args.color || '';\n const amount = args.amount || 0;\n return builtinFunctions.changeLightness({ color, amount: -Math.abs(amount) });\n },\n lighten: function (args) {\n const color = args.color || '';\n const amount = args.amount || 0;\n return builtinFunctions.changeLightness({ color, amount: Math.abs(amount) });\n },\n compare: function (args) {\n const value1 = args.value1;\n const value2 = args.value2;\n const operator = args.op;\n const thenResult = (typeof args.thenResult !== 'undefined') ? args.thenResult : true;\n const elseResult = (typeof args.elseResult !== 'undefined') ? args.elseResult : null;\n let result;\n switch (operator) {\n case '==':\n result = value1 == value2;\n break;\n case '!=':\n result = value1 != value2;\n break;\n case '>':\n result = value1 > value2;\n break;\n case '>=':\n result = value1 >= value2;\n break;\n case '<':\n result = value1 < value2;\n break;\n case '<=':\n result = value1 <= value2;\n break;\n default:\n throw new Error(`Unknown operator: ${operator}`);\n }\n return result ? thenResult : elseResult;\n },\n ifTruthy: function (args) {\n const value = args.value;\n const thenResult = (typeof args.thenResult !== 'undefined') ? args.thenResult : true;\n const elseResult = (typeof args.elseResult !== 'undefined') ? args.elseResult : null;\n return value ? thenResult : elseResult;\n },\n ifSome: function (args) {\n const values = args.values;\n const thenResult = args.thenResult;\n const elseResult = (typeof args.elseResult !== 'undefined') ? args.elseResult : null;\n for (const value of values) {\n if (!!value) {\n return thenResult;\n }\n }\n return elseResult;\n },\n ifAll: function (args) {\n const values = args.values;\n const thenResult = args.thenResult;\n const elseResult = args.elseResult !== undefined ? args.elseResult : null;\n if (!values || (values.length === 0)) {\n return elseResult;\n }\n for (const value of values) {\n if (!value) {\n return elseResult;\n }\n }\n return thenResult;\n },\n ifImageSettingContainsImage: function (args) {\n const thenResult = args.thenResult !== undefined ? args.thenResult : true;\n const elseResult = args.elseResult !== undefined ? args.elseResult : null;\n if ((typeof args.value !== 'object') || !args.value) {\n return elseResult;\n }\n const image = args.value;\n const hasAttachment = !!image.attachmentId;\n const hasExternalUrl = !!image.externalUrl;\n const hasImage = hasAttachment || hasExternalUrl;\n return hasImage ? thenResult : elseResult;\n }\n };\n let Preview;\n (function (Preview) {\n const $ = jQuery;\n function isConditionalAtRuleConfig(config) {\n if ((typeof config !== 'object') || (config === null)) {\n return false;\n }\n const configAsRecord = config;\n return ((typeof configAsRecord['t'] === 'string')\n && (configAsRecord['t'] === 'conditionalAtRule')\n && (typeof configAsRecord['identifier'] === 'string'));\n }\n function isRuleSetConfig(config) {\n return ((config !== null)\n && (Array.isArray(config['selectors']))\n && (Array.isArray(config['generators'])));\n }\n const inactiveSettingMarker = { '_ame_inactive_setting': true };\n class PreviewSession {\n constructor(config) {\n this.settings = {};\n this.valueReaders = new Set();\n this.notFound = {};\n this.variables = {};\n this.styleBlocks = [];\n this.stylesheetsToDisable = [];\n this.stylesheetWasEnabled = {};\n /**\n * Whether this is the first time the preview is being updated.\n * This is set to false after preview() is called for the first time.\n */\n this._isBeforeFirstUpdate = true;\n //Optimization: Create bound getters once instead of every time we need\n //to create a setting or variable reference.\n this.settingValueGetter = this.getSettingPreviewValue.bind(this);\n this.variableValueGetter = (variableName) => {\n if (variableName in this.variables) {\n return this.variables[variableName].getValue();\n }\n return null;\n };\n //Optionally, disable already generated custom stylesheets while the preview\n //is active to prevent old settings from interfering with the preview of new settings.\n if (Array.isArray(config.stylesheetsToDisable)) {\n this.stylesheetsToDisable = config.stylesheetsToDisable;\n }\n //Variables\n for (const variableName in config.variables) {\n if (!config.variables.hasOwnProperty(variableName)) {\n continue;\n }\n this.variables[variableName] = this.createValueDescriptor(config.variables[variableName], true);\n }\n //CSS statement groups\n for (const conditionConfig of config.statementGroups) {\n const statements = this.createCssStatements(conditionConfig.statements);\n if (statements.length < 1) {\n continue;\n }\n const condition = this.createValueDescriptor(conditionConfig.expression, true);\n const usedSettingIds = this.getSettingIdsUsedBy(condition);\n const conditionCallback = () => {\n //For performance, conditions that reference settings should\n //only be checked when at least one setting is active.\n if (usedSettingIds.length > 0) {\n if (!usedSettingIds.some((id) => this.isSettingActive(id))) {\n return false;\n }\n }\n const isTruthy = condition.getValue();\n return !!isTruthy; //Convert to boolean.\n };\n this.styleBlocks.push(new PreviewStyleBlock(statements, conditionCallback));\n }\n }\n createValueDescriptor(data, allowUnknownVariables = false) {\n switch (data.t) {\n case 'constant':\n return new ConstantValue(data.value);\n case 'array':\n return new ArrayValue(data.items.map((valueData) => this.createValueDescriptor(valueData, allowUnknownVariables)));\n case 'setting':\n this.registerPreviewableSettingId(data.id);\n return new SettingReference(data.id, this.settingValueGetter);\n case 'var':\n if (!this.variables.hasOwnProperty(data.name) && !allowUnknownVariables) {\n throw new Error('Unknown variable: ' + data.name);\n }\n return new VariableReference(data.name, this.variableValueGetter);\n case 'funcCall':\n let functionName;\n if (data.name in builtinFunctions) {\n functionName = data.name;\n }\n else {\n throw new Error('Unknown function: ' + data.name);\n }\n const func = builtinFunctions[functionName];\n //Initialize the function arguments.\n let args;\n if (Array.isArray(data.args)) {\n args = data.args.map(arg => this.createValueDescriptor(arg, allowUnknownVariables));\n }\n else {\n args = {};\n for (const argName in data.args) {\n if (!data.args.hasOwnProperty(argName)) {\n continue;\n }\n args[argName] = this.createValueDescriptor(data.args[argName], allowUnknownVariables);\n }\n }\n // @ts-ignore - Can't really statically check this since the values come from the server.\n return new FunctionCall(args, func);\n }\n }\n /**\n * Get the IDs of all settings that are referenced by the given descriptor.\n *\n * @param descriptor\n * @private\n */\n getSettingIdsUsedBy(descriptor) {\n if (descriptor instanceof SettingReference) {\n return [descriptor.settingId];\n }\n if (descriptor instanceof ArrayValue) {\n let result = [];\n for (const item of descriptor.getItemDescriptors()) {\n result = result.concat(this.getSettingIdsUsedBy(item));\n }\n return uniqueArrayValues(result);\n }\n if (descriptor instanceof FunctionCall) {\n let result = [];\n const args = descriptor.args;\n if (Array.isArray(args)) {\n for (const arg of args) {\n result = result.concat(this.getSettingIdsUsedBy(arg));\n }\n }\n else {\n for (const argName in args) {\n if (args.hasOwnProperty(argName)) {\n result = result.concat(this.getSettingIdsUsedBy(args[argName]));\n }\n }\n }\n return uniqueArrayValues(result);\n }\n if (descriptor instanceof VariableReference) {\n const varDef = this.getVariableDefinition(descriptor.name);\n if (varDef === null) {\n return [];\n }\n return this.getSettingIdsUsedBy(varDef);\n }\n return [];\n }\n getVariableDefinition(variableName) {\n if (!this.variables.hasOwnProperty(variableName)) {\n return null;\n }\n return this.variables[variableName];\n }\n createCssStatements(configs) {\n let results = [];\n for (const config of configs) {\n if (isRuleSetConfig(config)) {\n results.push(this.createRuleSetFromConfig(config));\n }\n else if (isConditionalAtRuleConfig(config)) {\n results.push(new ConditionalAtRule(config.identifier, config.condition, (typeof config.nestedStatements === 'undefined')\n ? []\n : this.createCssStatements(config.nestedStatements)));\n }\n else {\n console.error('Unknown CSS statement type: ', config);\n }\n }\n return results;\n }\n createRuleSetFromConfig(config, parent = null) {\n const generatorWrappers = this.makeGeneratorWrappers(config.generators);\n const ruleSet = new CssRuleSet(config.selectors, generatorWrappers, parent);\n const nestedRuleSets = this.createNestedRuleSets(config.nestedStatements, ruleSet);\n ruleSet.setNestedRuleSets(nestedRuleSets);\n return ruleSet;\n }\n createNestedRuleSets(configs, parent = null) {\n let results = [];\n if (!configs) {\n return results;\n }\n for (const config of configs) {\n if (!isRuleSetConfig(config)) {\n throw new Error('A CSS rule set can only contain other rule sets, not other types of statements.');\n }\n results.push(this.createRuleSetFromConfig(config, parent));\n }\n return results;\n }\n getPreviewableSettingIDs() {\n return Object.keys(this.settings);\n }\n preview(settingId, value, otherSettingReader) {\n if (this._isBeforeFirstUpdate) {\n this._isBeforeFirstUpdate = false;\n this.disableAssociatedStylesheets();\n }\n this.valueReaders.add(otherSettingReader);\n if (!this.settings.hasOwnProperty(settingId)) {\n this.settings[settingId] = ko.observable(value);\n }\n else {\n this.settings[settingId](value);\n }\n }\n dispose() {\n //Dispose of all style blocks.\n for (const block of this.styleBlocks) {\n block.dispose();\n }\n this.reEnableAssociatedStylesheets();\n }\n disableAssociatedStylesheets() {\n for (const stylesheetSelector of this.stylesheetsToDisable) {\n const $link = $(stylesheetSelector);\n if ($link.length > 0) {\n this.stylesheetWasEnabled[stylesheetSelector] = $link.prop('disabled');\n $link.prop('disabled', true);\n }\n }\n }\n reEnableAssociatedStylesheets() {\n for (const stylesheetSelector of this.stylesheetsToDisable) {\n const $link = $(stylesheetSelector);\n if (($link.length > 0) && this.stylesheetWasEnabled.hasOwnProperty(stylesheetSelector)) {\n $link.prop('disabled', this.stylesheetWasEnabled[stylesheetSelector]);\n }\n }\n }\n isSettingActive(settingId) {\n if (this.settings.hasOwnProperty(settingId)) {\n return this.settings[settingId]() !== inactiveSettingMarker;\n }\n return false;\n }\n getSettingPreviewValue(settingId) {\n if (!this.settings.hasOwnProperty(settingId)) {\n const value = this.getSettingFromReaders(settingId);\n this.settings[settingId] = ko.observable(value).extend({ deferred: true });\n }\n const observable = this.settings[settingId];\n let value = observable();\n if (value === inactiveSettingMarker) {\n value = this.getSettingFromReaders(settingId);\n observable(value);\n }\n return value;\n }\n getSettingFromReaders(settingId) {\n for (const reader of this.valueReaders) {\n const value = reader(settingId, this.notFound);\n if (value !== this.notFound) {\n return value;\n }\n }\n throw new Error('Setting not found for preview: ' + settingId);\n }\n makeGeneratorWrappers(generatorConfigs) {\n let generatorWrappers = [];\n for (const generatorConfig of generatorConfigs) {\n const wrapper = this.makeDeclarationGeneratorWrapper(generatorConfig);\n if (wrapper !== null) {\n generatorWrappers.push(wrapper);\n }\n }\n return generatorWrappers;\n }\n makeDeclarationGeneratorWrapper(config) {\n const generator = this.createValueDescriptor(config);\n return new DeclarationGeneratorWrapper(generator, this);\n }\n registerPreviewableSettingId(settingId) {\n if (!this.settings.hasOwnProperty(settingId)) {\n this.settings[settingId] = ko.observable(inactiveSettingMarker);\n }\n }\n get isBeforeFirstUpdate() {\n return this._isBeforeFirstUpdate;\n }\n }\n /**\n * Preview manager for the style generator.\n *\n * This is a thin wrapper around the PreviewSession class. It initializes the session\n * as needed and destroys it when the preview is cleared. This makes it simpler to manage\n * active settings, style blocks, and CSS rule-sets: instead of having to carefully\n * track dependencies and deactivate/reactivate them in the right order whenever the preview\n * is disabled/enabled, we can just destroy the session and start over.\n */\n class StyleGeneratorPreview {\n constructor(config) {\n this.config = config;\n this.currentSession = null;\n }\n getOrCreateSession() {\n if (this.currentSession === null) {\n this.currentSession = new PreviewSession(this.config);\n }\n return this.currentSession;\n }\n getPreviewableSettingIDs() {\n return this.getOrCreateSession().getPreviewableSettingIDs();\n }\n preview(settingId, value, otherSettingReader) {\n const session = this.getOrCreateSession();\n const shouldPreviewAll = (this.config.previewAllOnFirstUpdate && session.isBeforeFirstUpdate);\n session.preview(settingId, value, otherSettingReader);\n if (shouldPreviewAll) {\n //Preview all registered settings the first time the preview is updated.\n const notFound = {};\n for (const otherId of session.getPreviewableSettingIDs()) {\n const otherValue = otherSettingReader(otherId, notFound);\n if ((otherId !== settingId) && (otherValue !== notFound)) {\n session.preview(otherId, otherValue, otherSettingReader);\n }\n }\n }\n }\n clearPreview() {\n if (this.currentSession !== null) {\n this.currentSession.dispose();\n this.currentSession = null;\n }\n }\n }\n Preview.StyleGeneratorPreview = StyleGeneratorPreview;\n class DeclarationGeneratorWrapper {\n constructor(generator, settingSource) {\n this.generator = generator;\n this.settingSource = settingSource;\n //Introspect the generator and see which settings it uses.\n //This will be useful to determine if the generator is active.\n this.usedSettingIds = DeclarationGeneratorWrapper.findReferencedSettingIds(generator, settingSource);\n this.cssDeclarations = ko.computed({\n read: () => this.getDeclarations(),\n deferEvaluation: true,\n }).extend({ deferred: true });\n }\n /**\n * Recursively find all settings used by a value descriptor (such as a function call).\n *\n * @param {ValueDescriptor} thing\n * @param variableSource Needed to get variable definitions and not just the final values.\n */\n static findReferencedSettingIds(thing, variableSource) {\n let settingIds = [];\n if (thing instanceof SettingReference) {\n settingIds.push(thing.settingId);\n }\n else if (thing instanceof FunctionCall) {\n if (Array.isArray(thing.args)) {\n for (const arg of thing.args) {\n settingIds = settingIds.concat(DeclarationGeneratorWrapper.findReferencedSettingIds(arg, variableSource));\n }\n }\n else {\n for (const key in thing.args) {\n settingIds = settingIds.concat(DeclarationGeneratorWrapper.findReferencedSettingIds(thing.args[key], variableSource));\n }\n }\n }\n else if (thing instanceof VariableReference) {\n const value = variableSource.getVariableDefinition(thing.name);\n if (value !== null) {\n settingIds = settingIds.concat(DeclarationGeneratorWrapper.findReferencedSettingIds(value, variableSource));\n }\n }\n return settingIds;\n }\n isActive() {\n //Check if any of the input settings are active.\n let hasSettingLookups = false;\n for (const settingId of this.usedSettingIds) {\n hasSettingLookups = true;\n if (this.settingSource.isSettingActive(settingId)) {\n return true;\n }\n }\n //If there are no input settings, the generator is always active: it just\n //generates a fixed declaration.\n return !hasSettingLookups;\n }\n getDeclarations() {\n return this.generator.getValue();\n }\n dispose() {\n this.cssDeclarations.dispose();\n }\n }\n class CssStatement {\n constructor() {\n this.cssText = ko.computed({\n read: () => this.generateCss(),\n deferEvaluation: true,\n }).extend({ deferred: true });\n }\n dispose() {\n //Dispose the CSS text observable.\n this.cssText.dispose();\n }\n }\n class CssRuleSet extends CssStatement {\n constructor(selectors, declarationSources, parent = null) {\n super();\n this.declarationSources = declarationSources;\n this.nestedRuleSets = ko.observableArray([]);\n if (parent === null) {\n this.effectiveSelectors = selectors;\n }\n else {\n this.effectiveSelectors = CssRuleSet.combineSelectors(selectors, parent.effectiveSelectors);\n }\n this.selectorText = this.effectiveSelectors.join(', ');\n }\n static combineSelectors(selectors, parentSelectors) {\n const combinedSelectors = [];\n for (const selector of selectors) {\n if (selector === '') {\n continue;\n }\n if (selector.includes('&')) {\n //Insert the parent selectors into the current selector at the position of the \"&\".\n for (const parentSelector of parentSelectors) {\n combinedSelectors.push(selector.replace('&', parentSelector.trim()));\n }\n }\n else {\n //Just append the current selector to the parent selectors.\n for (const parentSelector of parentSelectors) {\n combinedSelectors.push(`${parentSelector} ${selector}`);\n }\n }\n }\n return combinedSelectors;\n }\n setNestedRuleSets(ruleSets) {\n //Dispose the old rule sets that are not part of the new list.\n for (const oldRuleSet of this.nestedRuleSets()) {\n if (ruleSets.indexOf(oldRuleSet) === -1) {\n oldRuleSet.dispose();\n }\n }\n this.nestedRuleSets(ruleSets);\n }\n generateCss() {\n const declarations = this.getDeclarations();\n const nestedRuleSetParts = [];\n for (const ruleSet of this.nestedRuleSets()) {\n if (ruleSet.isActive()) {\n nestedRuleSetParts.push(ruleSet.cssText());\n }\n }\n let css = '';\n if (declarations.length > 0) {\n css += this.selectorText + ' {\\n\\t' + declarations.join('\\n\\t') + '\\n}\\n';\n }\n if (nestedRuleSetParts.length > 0) {\n css += nestedRuleSetParts.join('\\n');\n }\n return css;\n }\n isActive() {\n for (const source of this.declarationSources) {\n if (source.isActive()) {\n return true;\n }\n }\n for (const ruleSet of this.nestedRuleSets()) {\n if (ruleSet.isActive()) {\n return true;\n }\n }\n return false;\n }\n getDeclarations() {\n const declarations = [];\n for (const source of this.declarationSources) {\n if (source.isActive()) {\n declarations.push(...source.cssDeclarations());\n }\n }\n return declarations;\n }\n dispose() {\n //Dispose declaration sources.\n for (const source of this.declarationSources) {\n source.dispose();\n }\n //Dispose nested rule sets.\n for (const ruleSet of this.nestedRuleSets()) {\n ruleSet.dispose();\n }\n super.dispose();\n }\n }\n class ConditionalAtRule extends CssStatement {\n constructor(identifier, condition, nestedStatements) {\n super();\n this.identifier = identifier;\n this.condition = condition;\n this.nestedStatements = nestedStatements;\n }\n generateCss() {\n const pieces = [];\n for (const statement of this.nestedStatements) {\n const css = statement.cssText();\n if (css !== '') {\n pieces.push(css);\n }\n }\n if (pieces.length === 0) {\n return '';\n }\n return this.getAtRuleText() + ' {\\n\\t' + pieces.join('\\n\\t') + '\\n}';\n }\n getAtRuleText() {\n return '@' + this.identifier + ' ' + this.condition;\n }\n isActive() {\n for (const statement of this.nestedStatements) {\n if (statement.isActive()) {\n return true;\n }\n }\n return false;\n }\n dispose() {\n //Dispose nested statements.\n for (const statement of this.nestedStatements) {\n statement.dispose();\n }\n super.dispose();\n }\n }\n class PreviewStyleBlock {\n constructor(statements, condition = null) {\n this.statements = statements;\n this.condition = condition;\n this.$styleElement = null;\n this.cssText = ko.computed({\n read: () => {\n if ((condition !== null) && !condition()) {\n return '';\n }\n let pieces = [];\n for (const statement of this.statements) {\n if (statement.isActive()) {\n const css = statement.cssText();\n if (css !== '') {\n pieces.push(css);\n }\n }\n }\n if (pieces.length === 0) {\n return '';\n }\n return pieces.join('\\n');\n },\n deferEvaluation: true,\n }).extend({ deferred: true });\n this.updateStyleElement(this.cssText());\n this.cssChangeSubscription = this.cssText.subscribe((cssText) => {\n this.updateStyleElement(cssText);\n });\n }\n updateStyleElement(cssText) {\n if (cssText === '') {\n if (this.$styleElement) {\n this.$styleElement.remove();\n this.$styleElement = null;\n }\n return;\n }\n if (!this.$styleElement) {\n this.$styleElement = $('').appendTo('head');\n }\n this.$styleElement.text(cssText);\n }\n clear() {\n if (this.$styleElement) {\n this.$styleElement.remove();\n this.$styleElement = null;\n }\n }\n dispose() {\n //Stop listening for CSS changes.\n this.cssChangeSubscription.dispose();\n this.cssText.dispose();\n //Dispose rule sets.\n for (const ruleset of this.statements) {\n ruleset.dispose();\n }\n //Remove the style element.\n this.clear();\n }\n }\n })(Preview = AmeStyleGenerator.Preview || (AmeStyleGenerator.Preview = {}));\n})(AmeStyleGenerator || (AmeStyleGenerator = {}));\n//# sourceMappingURL=style-generator.js.map"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/dist/admin-customizer.bundle.js b/dist/admin-customizer.bundle.js index e8a697c..8d49575 100644 --- a/dist/admin-customizer.bundle.js +++ b/dist/admin-customizer.bundle.js @@ -5039,6 +5039,7 @@ var AmeAdminCustomizer; } this.customBasePath = scriptData.customBasePath || null; this.consoleLoggingEnabled = scriptData.isWpDebugEnabled || false; + this.downloadOnlyIfChangesetIsNonEmpty = scriptData.downloadOnlyIfChangesetIsNonEmpty || false; if ((typeof scriptData.exitPromptMode === 'number') && (scriptData.exitPromptMode in ExitPromptMode)) { this.exitPromptMode = scriptData.exitPromptMode; } @@ -5248,8 +5249,10 @@ var AmeAdminCustomizer; //The changeset must already be saved for the download to work, //which means it should have a name. && (this.settings.getCurrentChangeset().name() !== '') - //The changeset should probably be non-empty. - && this.settings.getCurrentChangeset().isNonEmpty()); + && ( + //Optionally, the download can be restricted to non-empty changesets. + !this.downloadOnlyIfChangesetIsNonEmpty + || this.settings.getCurrentChangeset().isNonEmpty())); }); this.downloadThemeActionEnabled.subscribe((isEnabled) => { if (this.$extraActionMenu) { diff --git a/dist/admin-customizer.bundle.js.map b/dist/admin-customizer.bundle.js.map index 6d6f558..72bc0f4 100644 --- a/dist/admin-customizer.bundle.js.map +++ b/dist/admin-customizer.bundle.js.map @@ -1 +1 @@ -{"version":3,"file":"admin-customizer.bundle.js","mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD,IAAI;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,oBAAoB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,gCAAgC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD;AACrD;AACA,0DAA0D;AAC1D,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,eAAe,aAAa,eAAe;AACjF;AACA;AACA;AACA,yDAAyD,2DAA2D;AACpH;AACA;AACA,wDAAwD,kCAAkC;AAC1F;AACA;AACA;AACA;AACA;AACA,+DAA+D,+BAA+B;AAC9F;AACA;AACA,sDAAsD,+BAA+B,cAAc,eAAe;AAClH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8DAA8D,0BAA0B;AACxF;AACA,qCAAqC,SAAS,oDAAoD,0BAA0B;AAC5H;AACA;AACA;AACA,iEAAiE,4BAA4B;AAC7F;AACA;AACA,+DAA+D,0BAA0B;AACzF;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,iBAAiB;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,sEAAsE,EAAE,eAAe;AACvI;AACA,iDAAiD,iEAAiE,EAAE,eAAe;AACnI;AACA,4CAA4C;AAC5C;AACA;AACA;AACA,0CAA0C,EAAE,cAAc;AAC1D;AACA,0CAA0C;AAC1C;AACA;AACA;AACA,0CAA0C,EAAE,gCAAgC;AAC5E;AACA;AACA;AACA;AACA;AACA,gDAAgD,qEAAqE,EAAE,eAAe;AACtI;AACA,iDAAiD,iEAAiE,EAAE,eAAe;AACnI;AACA,4CAA4C;AAC5C;AACA;AACA;AACA,uCAAuC,EAAE,cAAc;AACvD;AACA,4CAA4C;AAC5C;AACA;AACA;AACA,uCAAuC,EAAE,cAAc;AACvD;AACA,0CAA0C;AAC1C;AACA;AACA;AACA,0CAA0C,EAAE,gCAAgC;AAC5E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,iBAAiB;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,YAAY,mCAAmC;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,kCAAkC;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,aAAa;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,CAAC;AACD,4BAA4B,wBAAwB;AACpD,yBAAyB,wBAAwB;AACjD;AACA;AACA;AACA;;AAEA;AACA;AACA,sEAAsE,UAAU;AAChF;AACA,CAAC,8BAA8B;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,4DAA4D;AACxE;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,qBAAqB;AACrB;AACA,qBAAqB;AACrB;AACA,iBAAiB;AACjB;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,mCAAmC;AAC5E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,mCAAmC;AAClF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,sBAAsB,gCAAgC;AACtD,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,8BAA8B;AACpD,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,GAAG;AAC/B;AACA,sCAAsC,GAAG;AACzC,8BAA8B,EAAE,UAAU,EAAE,eAAe,EAAE,UAAU,EAAE,UAAU,GAAG;AACtF;AACA;AACA,4DAA4D,GAAG,mFAAmF,GAAG;AACrJ;AACA,sCAAsC,sBAAsB,sCAAsC,uBAAuB,OAAO,GAAG,cAAc;AACjJ;AACA,qCAAqC,yBAAyB,4DAA4D,EAAE,SAAS,IAAI,MAAM,EAAE,iCAAiC,EAAE,SAAS,IAAI,yBAAyB,IAAI,GAAG,EAAE,aAAa,IAAI,GAAG,IAAI,WAAW,IAAI,GAAG,EAAE,WAAW,IAAI,GAAG,IAAI,WAAW,IAAI,GAAG,EAAE,WAAW,IAAI,GAAG,IAAI,WAAW,IAAI,GAAG,EAAE,WAAW,IAAI,GAAG,IAAI,WAAW,IAAI,GAAG,EAAE,WAAW,IAAI,GAAG,IAAI,WAAW,IAAI,GAAG,EAAE,WAAW,IAAI,GAAG,IAAI,WAAW,IAAI,mCAAmC,EAAE,SAAS,IAAI,MAAM,EAAE,iCAAiC,EAAE,SAAS,IAAI,0DAA0D,GAAG;AACnoB;AACA,yBAAyB,sBAAsB,IAAI,gBAAgB;AACnE,sDAAsD,EAAE,SAAS,IAAI,MAAM,EAAE,iCAAiC,EAAE,SAAS,IAAI;AAC7H,+BAA+B,IAAI,GAAG,EAAE,aAAa,IAAI,GAAG,IAAI,WAAW,IAAI,GAAG,EAAE,WAAW,IAAI,GAAG,IAAI,WAAW,IAAI,GAAG,EAAE,WAAW,IAAI,GAAG,IAAI,WAAW,IAAI,GAAG,EAAE,WAAW,IAAI,GAAG,IAAI,WAAW,IAAI,GAAG,EAAE,WAAW,IAAI,GAAG,IAAI,WAAW,IAAI,GAAG,EAAE,WAAW,IAAI,GAAG,IAAI,WAAW,IAAI,mCAAmC,EAAE,SAAS,IAAI,MAAM,EAAE,iCAAiC,EAAE,SAAS,IAAI;AAC3Y;AACA;AACA;AACA;AACA,oCAAoC,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,gBAAgB,UAAU,EAAE,OAAO,EAAE;AACvH;AACA;AACA,oCAAoC,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,gBAAgB;AAClG;AACA;AACA;AACA;AACA,oCAAoC,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE;AAC9F;AACA;AACA,oCAAoC,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE;AACzE;AACA;AACA;AACA;AACA,oCAAoC,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,oBAAoB,EAAE,OAAO,EAAE;AACxG;AACA;AACA,oCAAoC,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,4CAA4C,cAAc;AAC1D,SAAS;AACT;AACA;AACA,4CAA4C,qBAAqB;AACjE,SAAS;AACT;AACA;AACA,4CAA4C,qBAAqB;AACjE,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,iDAAiD;AACvF;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,yBAAyB;AAC/D;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,uBAAuB;AAC7D;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,gCAAgC,+CAA+C;AAC/E;AACA;AACA,gCAAgC,6CAA6C;AAC7E;AACA;AACA,gCAAgC,+CAA+C;AAC/E;AACA;AACA,gCAAgC,8CAA8C;AAC9E;AACA;AACA,gCAAgC,8CAA8C;AAC9E;AACA;AACA,gCAAgC,+CAA+C;AAC/E;AACA;AACA,gCAAgC,8CAA8C;AAC9E;AACA;AACA,gCAAgC,4CAA4C;AAC5E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,gBAAgB,cAAc;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,aAAa;AACb;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,wDAAwD;AACjF,SAAS;AACT;AACA;AACA;AACA;AACA,yBAAyB,wDAAwD;AACjF,SAAS;AACT;AACA;AACA;AACA;AACA,2BAA2B,kDAAkD;AAC7E,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,aAAa;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,gBAAgB,cAAc;AAC9B,gBAAgB,yBAAyB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,6BAA6B;AACpD;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,6BAA6B;AAC5D,iCAAiC,uCAAuC;AACxE,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,6BAA6B;AACxD;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA,oBAAoB;AACpB,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA,8BAA8B,eAAe;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,gBAAgB,MAAM;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,MAAM;AACtB;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mEAAmE,cAAc;AACjF;AACA;AACA;AACA,8DAA8D,uBAAuB,sBAAsB,cAAc;AACzH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA,4BAA4B,kBAAkB;AAC9C;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,gBAAgB,cAAc;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,gBAAgB,cAAc;AAC9B;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,iCAAiC;AACjC;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,cAAc;AAC9B;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,gBAAgB,cAAc;AAC9B;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,gBAAgB,cAAc;AAC9B;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,sDAAsD;AAC7E,SAAS;AACT;AACA;AACA;AACA;AACA,uBAAuB,sDAAsD;AAC7E,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,MAAM;AACtB;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,MAAM;AACtB;AACA,mCAAmC,6CAA6C;AAChF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,MAAM;AACtB;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,cAAc;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA,mCAAmC,6CAA6C;AAChF;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC;AACjC,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA,mCAAmC,6CAA6C;AAChF;AACA;AACA;AACA,uGAAuG,qCAAqC;AAC5I,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,kBAAkB,2CAA2C;AAC7D;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,gBAAgB,MAAM;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,gBAAgB,MAAM;AACtB;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA,yBAAyB;AACzB;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,gBAAgB,MAAM;AACtB;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,cAAc;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,cAAc;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA,qDAAqD,aAAa;AAClE,+BAA+B,sCAAsC;AACrE;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,sDAAsD;AACvD;AACA;AACA;AACA,sCAAsC,SAAS;AAC/C,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,sBAAsB;AAC/D,yCAAyC,sBAAsB;AAC/D;AACA;AACA;AACA,KAAK;AACL,yCAAyC,sBAAsB;AAC/D,qCAAqC,sBAAsB;AAC3D;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,cAAc;AAChC,wBAAwB,oBAAoB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,+BAA+B;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAE+pD;;;;;;;;;;;;;;;;;;;;;;;;;;;ACh3HnpD;AAEb,gDAAgD;AAChD,uCAAuC;AACvC,+CAA+C;AAE0D;AACV;AAC9B;AACJ;AACS;AACT;AACW;AACI;AACV;AACD;AACe;AACpB;AAKrD,IAAU,kBAAkB,CAiuElC;AAjuED,WAAiB,kBAAkB;IAElC,IAAO,iBAAiB,GAAG,wGAAiC,CAAC;IAG7D,IAAO,oBAAoB,GAAG,2GAAoC,CAAC;IACnE,IAAO,kBAAkB,GAAG,yGAAkC,CAAC;IAI/D,MAAM,CAAC,GAAG,MAAM,CAAC;IACjB,MAAM,CAAC,GAAG,WAAW,CAAC;IAEtB,0GAAsB,EAAE,CAAC;IACzB,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,kBAAkB,EAAE,0EAAc,CAAC,CAAC;IAC3D,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,gBAAgB,EAAE,wEAAY,CAAC,CAAC;IACvD,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,qBAAqB,EAAE,6EAAgB,CAAC,CAAC;IAChE,E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AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,wDAAwD;AACzD;;;;;;;;;;;;;;;;ACvCmD;AAC8C;AACjG,kCAAkC,4DAAY;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,iEAAe,uGAAqB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,EAAC;AACH;;;;;;;;;;;;;;;;ACtCgJ;AAC5D;AACpF,mBAAmB,mGAA4B;AAC/C,gCAAgC,kGAAoB;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,iHAAmC;AACtD;AACA;AACA;AACA;AACA,iEAAe,uGAAqB;AACpC;AACA;AACA;AACA;AACA,mCAAmC,cAAc;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,EAAC;AACH;;;;;;;;;;;;;;;;AC9CqH;AACjC;AACpF,cAAc,8FAAuB;AACrC;AACA;AACA,iCAAiC,gBAAgB,KAAK,aAAa;AACnE;AACA;AACA;AACA,2BAA2B,gGAAkB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAe,uGAAqB;AACpC;AACA;AACA;AACA,sEAAsE,gBAAgB;AACtF;AACA;AACA;AACA;AACA;AACA,sBAAsB,mEAAmE;AACzF;AACA,EAAE,EAAC;AACH;;;;;;;;;;;;;;;;;ACvCuH;AACnC;AACpF,cAAc,8FAAuB;AACc;AACnD,+BAA+B,kGAAoB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,gFAAgC;AAC/D,yBAAyB,oFAAoC;AAC7D;AACA;AACA;AACA;AACA;AACA,iEAAe,uGAAqB;AACpC,mDAAmD,oDAAoD;AACvG;AACA;AACA,EAAE,EAAC;AACH;;;;;;;;;;;;;;;;;ACvBgJ;AAC5D;AACpF,cAAc,8FAAuB;AACrC,cAAc,8FAAuB;AACrC,mBAAmB,mGAA4B;AACxC,2BAA2B,kGAAoB;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,iHAAmC;AAC1D;AACA;AACA,uBAAuB,iHAAmC;AAC1D;AACA;AACA;AACA,mBAAmB,iHAAmC;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,iHAAmC;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAe,uGAAqB;AACpC,8CAA8C,cAAc;AAC5D;AACA;AACA;AACA;AACA;AACA,sDAAsD,oDAAoD;AAC1G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,EAAC;AACH;;;;;;;;;;;;;;;ACtHsH;AACtH,6BAA6B,iGAAmB;AAChD;AACA;AACA;AACA;AACA,iEAAe,uGAAqB;AACpC;AACA,EAAE,EAAC;AACH;;;;;;;;;;;;;;;;ACT8H;AAC1C;AACpF,cAAc,8FAAuB;AACrC,6BAA6B,iGAAmB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAe,+GAA6B;AAC5C;AACA,sBAAsB,4DAA4D;AAClF;AACA,EAAE,EAAC;AACH;;;;;;;;;;;;;;;ACxCsH;AACtH,oCAAoC,iGAAmB;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAe,uGAAqB;AACpC;AACA;AACA,6EAA6E,qBAAqB;AAClG;AACA;AACA,EAAE,EAAC;AACH;;;;;;;;;;;;;;;;AC5Ba;AAC0E;AACd;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,iEAAmB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4DAA4D,cAAc;AAC1E;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,aAAa,WAAW,yBAAyB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,aAAa,WAAW,yBAAyB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,iFAAsB;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAe,8EAA4B;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,0CAA0C;AACvE;AACA;AACA;AACA;AACA,yEAAyE,mBAAmB;AAC5F;AACA;AACA;AACA,2DAA2D,uBAAuB;AAClF;AACA;AACA,EAAE,EAAC;AACH;;;;;;;;;;;;;;;;AC1SyD;AAClD;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,+BAA+B,iEAAmB;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;ACnBa;AAC0E;AACvF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,iEAAmB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAe,8EAA4B;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,0CAA0C,2BAA2B;AAC3F;AACA,EAAE,EAAC;AACH;;;;;;;;;;;;;;;AChCuF;AACvF;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,iEAAmB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAe,8EAA4B;AAC3C;AACA;AACA,EAAE,EAAC;AACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC3CA;AACA;AACA;AACA;AAC0E;AACN;AACc;AACR;AACN;AACkB;AACP;AACd;AACH;AAC2B;AACxB;AACH;AACe;AACN;AACZ;AACiC;AAC3B;AACjE;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA,iDAAiD,iFAAgB;AACjE,+CAA+C,6EAAc;AAC7D,oDAAoD,uFAAkB;AACtE,iDAAiD,iFAAgB;AACjE,+CAA+C,6EAAc;AAC7D,qDAAqD,yFAAoB;AACzE,mDAAmD,qFAAiB;AACpE,8CAA8C,2EAAa;AAC3D,6CAA6C,yEAAY;AACzD,sDAAsD,2FAAqB;AAC3E,8CAA8C,4EAAa;AAC3D,6CAA6C,0EAAY;AACzD,kDAAkD,oFAAiB;AACnE,gDAAgD,gFAAe;AAC/D,4CAA4C,wEAAW;AACvD,uDAAuD,8FAAsB;AAC7E,8CAA8C,4EAAa;AAC3D;AACA;AACA;;;;;;;;;;;;;;;AClD0D;AAC1D;AACA;AACA;AACO,sCAAsC,kEAAoB;AACjE;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;ACVuF;AACvF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,SAAS,IAAI,OAAO;AAC9C;AACA,mDAAmD,YAAY;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA,iCAAiC,iEAAmB;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAe,8EAA4B;AAC3C;AACA;AACA;AACA,oEAAoE,oBAAoB;AACxF;AACA;AACA;AACA;AACA,mCAAmC,wDAAwD;AAC3F;AACA;AACA;AACA,EAAE,EAAC;AACH;;;;;;;;;;;;;;;ACnKuF;AACvF,qCAAqC,iEAAmB;AACxD;AACA;AACA;AACA;AACA,iEAAe,8EAA4B;AAC3C;AACA,EAAE,EAAC;AACH;;;;;;;;;;;;;;;ACTa;AAC0E;AACvF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,iEAAmB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,iEAAe,8EAA4B;AAC3C;AACA,8DAA8D,wBAAwB;AACtF;AACA;AACA,EAAE,EAAC;AACH;;;;;;;;;;;;;;;;AC/C2D;AACqB;AAChF;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,wFAAuB;AAC1D;AACA,iEAAe,uEAAqB;AACpC;AACA,EAAE,EAAC;AACH;;;;;;;;;;;;;;;;;ACbA;AACsF;AACvB;AAC/D,cAAc,4EAAuB;AAC9B,6BAA6B,gEAAkB;AACtD;AACA;AACA;AACA;AACA,qDAAqD,yBAAyB;AAC9E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAe,8EAA4B;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2EAA2E,qBAAqB;AAChG;AACA;AACA;AACA;AACA;AACA,yCAAyC,gDAAgD;AACzF;AACA;AACA;AACA,EAAE,EAAC;AACH;;;;;;;;;;;;;;;;ACnHa;AACqD;AACa;AAC/E,gCAAgC,uFAAgB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAe,8EAA4B;AAC3C;AACA;AACA,2BAA2B,mBAAmB;AAC9C;AACA;AACA;AACA,8DAA8D,2BAA2B;AACzF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,EAAC;AACH;;;;;;;;;;;;;;;;AC9Ba;AACqD;AACa;AAC/E;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,8BAA8B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,uFAAgB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,wEAAwE;AAChF;AACA;AACA,UAAU,sCAAsC;AAChD;AACA;AACA,uBAAuB,yCAAyC,2BAA2B;AAC3F;AACA;AACA;AACA,iEAAe,8EAA4B;AAC3C;AACA;AACA;AACA,MAAM,gBAAgB;AACtB;AACA;AACA,SAAS,eAAe;AACxB;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,2BAA2B,8CAA8C;AACzE;AACA;AACA;AACA,EAAE,EAAC;AACH;;;;;;;;;;;;;;;;AClG+E;AACb;AAClE,2BAA2B,uFAAgB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAe,8EAA4B;AAC3C;AACA;AACA;AACA,sBAAsB,0CAA0C,2BAA2B;AAC3F;AACA,EAAE,EAAC;AACH;;;;;;;;;;;;;;;;ACjB2D;AACqB;AAChF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,wFAAuB;AAC3D;AACA,iEAAe,uEAAqB;AACpC;AACA,EAAE,EAAC;AACH;;;;;;;;;;;;;;;ACfuF;AACvF,4BAA4B,iEAAmB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAe,8EAA4B;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,EAAC;AACH;;;;;;;;;;;;;;;;ACrBsF;AAC/E,2BAA2B,gEAAkB;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,wBAAwB;AACvD;AACA;AACA,iEAAe,8EAA4B;AAC3C;AACA;AACA,sBAAsB,0CAA0C,2BAA2B;AAC3F;AACA,EAAE,EAAC;AACH;;;;;;;;;;;;;;;AC1BuF;AACvF,gCAAgC,iEAAmB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAe,8EAA4B;AAC3C;AACA;AACA;AACA;AACA;AACA,uBAAuB,yCAAyC,2BAA2B;AAC3F;AACA;AACA,EAAE,EAAC;AACH;;;;;;;;;;;;;;;;ACtCuF;AAChF,8BAA8B,iEAAmB;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAe,8EAA4B;AAC3C;AACA;AACA,SAAS,aAAa;AACtB,EAAE,EAAC;AACH;;;;;;;;;;;;;;;ACjBa;AAC0E;AACvF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,iEAAmB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,4BAA4B;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,UAAU,+BAA+B;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAe,8EAA4B;AAC3C;AACA,EAAE,EAAC;AACH;;;;;;;;;;;;;;;;;;;;;;;;ACpK4D;AAC5D,cAAc,4EAAuB;AACrC,yBAAyB,uFAAkC;AAC3D,cAAc,4EAAuB;AAC9B;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uFAAuF,WAAW;AAClG;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;AC5RA;AACA;AACA;AACA;AACA;AACO;AACP,iIAAiI;AACjI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","sources":["webpack:///./extras/zod/lib/index.js","webpack:///./extras/modules/admin-customizer/admin-customizer.ts","webpack:///./extras/modules/admin-customizer/admin-customizer-base.js","webpack:///./extras/modules/admin-customizer/ko-components/ame-ac-content-section.js","webpack:///./extras/modules/admin-customizer/ko-components/ame-ac-control-group.js","webpack:///./extras/modules/admin-customizer/ko-components/ame-ac-control.js","webpack:///./extras/modules/admin-customizer/ko-components/ame-ac-section-link.js","webpack:///./extras/modules/admin-customizer/ko-components/ame-ac-section.js","webpack:///./extras/modules/admin-customizer/ko-components/ame-ac-separator.js","webpack:///./extras/modules/admin-customizer/ko-components/ame-ac-structure.js","webpack:///./extras/modules/admin-customizer/ko-components/ame-ac-validation-errors.js","webpack:///./extras/pro-customizables/ko-components/ame-box-dimensions/ame-box-dimensions.js","webpack:///./extras/pro-customizables/ko-components/ame-choice-control/ame-choice-control.js","webpack:///./extras/pro-customizables/ko-components/ame-code-editor/ame-code-editor.js","webpack:///./extras/pro-customizables/ko-components/ame-color-picker/ame-color-picker.js","webpack:///./extras/pro-customizables/ko-components/ame-components.js","webpack:///./extras/pro-customizables/ko-components/ame-description/ame-description.js","webpack:///./extras/pro-customizables/ko-components/ame-font-style-picker/ame-font-style-picker.js","webpack:///./extras/pro-customizables/ko-components/ame-horizontal-separator/ame-horizontal-separator.js","webpack:///./extras/pro-customizables/ko-components/ame-image-selector/ame-image-selector.js","webpack:///./extras/pro-customizables/ko-components/ame-nested-description/ame-nested-description.js","webpack:///./extras/pro-customizables/ko-components/ame-number-input/ame-number-input.js","webpack:///./extras/pro-customizables/ko-components/ame-radio-button-bar/ame-radio-button-bar.js","webpack:///./extras/pro-customizables/ko-components/ame-radio-group/ame-radio-group.js","webpack:///./extras/pro-customizables/ko-components/ame-select-box/ame-select-box.js","webpack:///./extras/pro-customizables/ko-components/ame-sibling-description/ame-sibling-description.js","webpack:///./extras/pro-customizables/ko-components/ame-static-html/ame-static-html.js","webpack:///./extras/pro-customizables/ko-components/ame-text-input/ame-text-input.js","webpack:///./extras/pro-customizables/ko-components/ame-toggle-checkbox/ame-toggle-checkbox.js","webpack:///./extras/pro-customizables/ko-components/ame-unit-dropdown/ame-unit-dropdown.js","webpack:///./extras/pro-customizables/ko-components/ame-wp-editor/ame-wp-editor.js","webpack:///./extras/pro-customizables/ko-components/control-base.js","webpack:///./extras/pro-customizables/ko-components/lazy-popup-slider-adapter.js"],"sourcesContent":["var util;\n(function (util) {\n util.assertEqual = (val) => val;\n function assertIs(_arg) { }\n util.assertIs = assertIs;\n function assertNever(_x) {\n throw new Error();\n }\n util.assertNever = assertNever;\n util.arrayToEnum = (items) => {\n const obj = {};\n for (const item of items) {\n obj[item] = item;\n }\n return obj;\n };\n util.getValidEnumValues = (obj) => {\n const validKeys = util.objectKeys(obj).filter((k) => typeof obj[obj[k]] !== \"number\");\n const filtered = {};\n for (const k of validKeys) {\n filtered[k] = obj[k];\n }\n return util.objectValues(filtered);\n };\n util.objectValues = (obj) => {\n return util.objectKeys(obj).map(function (e) {\n return obj[e];\n });\n };\n util.objectKeys = typeof Object.keys === \"function\" // eslint-disable-line ban/ban\n ? (obj) => Object.keys(obj) // eslint-disable-line ban/ban\n : (object) => {\n const keys = [];\n for (const key in object) {\n if (Object.prototype.hasOwnProperty.call(object, key)) {\n keys.push(key);\n }\n }\n return keys;\n };\n util.find = (arr, checker) => {\n for (const item of arr) {\n if (checker(item))\n return item;\n }\n return undefined;\n };\n util.isInteger = typeof Number.isInteger === \"function\"\n ? (val) => Number.isInteger(val) // eslint-disable-line ban/ban\n : (val) => typeof val === \"number\" && isFinite(val) && Math.floor(val) === val;\n function joinValues(array, separator = \" | \") {\n return array\n .map((val) => (typeof val === \"string\" ? `'${val}'` : val))\n .join(separator);\n }\n util.joinValues = joinValues;\n util.jsonStringifyReplacer = (_, value) => {\n if (typeof value === \"bigint\") {\n return value.toString();\n }\n return value;\n };\n})(util || (util = {}));\nvar objectUtil;\n(function (objectUtil) {\n objectUtil.mergeShapes = (first, second) => {\n return {\n ...first,\n ...second, // second overwrites first\n };\n };\n})(objectUtil || (objectUtil = {}));\nconst ZodParsedType = util.arrayToEnum([\n \"string\",\n \"nan\",\n \"number\",\n \"integer\",\n \"float\",\n \"boolean\",\n \"date\",\n \"bigint\",\n \"symbol\",\n \"function\",\n \"undefined\",\n \"null\",\n \"array\",\n \"object\",\n \"unknown\",\n \"promise\",\n \"void\",\n \"never\",\n \"map\",\n \"set\",\n]);\nconst getParsedType = (data) => {\n const t = typeof data;\n switch (t) {\n case \"undefined\":\n return ZodParsedType.undefined;\n case \"string\":\n return ZodParsedType.string;\n case \"number\":\n return isNaN(data) ? ZodParsedType.nan : ZodParsedType.number;\n case \"boolean\":\n return ZodParsedType.boolean;\n case \"function\":\n return ZodParsedType.function;\n case \"bigint\":\n return ZodParsedType.bigint;\n case \"symbol\":\n return ZodParsedType.symbol;\n case \"object\":\n if (Array.isArray(data)) {\n return ZodParsedType.array;\n }\n if (data === null) {\n return ZodParsedType.null;\n }\n if (data.then &&\n typeof data.then === \"function\" &&\n data.catch &&\n typeof data.catch === \"function\") {\n return ZodParsedType.promise;\n }\n if (typeof Map !== \"undefined\" && data instanceof Map) {\n return ZodParsedType.map;\n }\n if (typeof Set !== \"undefined\" && data instanceof Set) {\n return ZodParsedType.set;\n }\n if (typeof Date !== \"undefined\" && data instanceof Date) {\n return ZodParsedType.date;\n }\n return ZodParsedType.object;\n default:\n return ZodParsedType.unknown;\n }\n};\n\nconst ZodIssueCode = util.arrayToEnum([\n \"invalid_type\",\n \"invalid_literal\",\n \"custom\",\n \"invalid_union\",\n \"invalid_union_discriminator\",\n \"invalid_enum_value\",\n \"unrecognized_keys\",\n \"invalid_arguments\",\n \"invalid_return_type\",\n \"invalid_date\",\n \"invalid_string\",\n \"too_small\",\n \"too_big\",\n \"invalid_intersection_types\",\n \"not_multiple_of\",\n \"not_finite\",\n]);\nconst quotelessJson = (obj) => {\n const json = JSON.stringify(obj, null, 2);\n return json.replace(/\"([^\"]+)\":/g, \"$1:\");\n};\nclass ZodError extends Error {\n constructor(issues) {\n super();\n this.issues = [];\n this.addIssue = (sub) => {\n this.issues = [...this.issues, sub];\n };\n this.addIssues = (subs = []) => {\n this.issues = [...this.issues, ...subs];\n };\n const actualProto = new.target.prototype;\n if (Object.setPrototypeOf) {\n // eslint-disable-next-line ban/ban\n Object.setPrototypeOf(this, actualProto);\n }\n else {\n this.__proto__ = actualProto;\n }\n this.name = \"ZodError\";\n this.issues = issues;\n }\n get errors() {\n return this.issues;\n }\n format(_mapper) {\n const mapper = _mapper ||\n function (issue) {\n return issue.message;\n };\n const fieldErrors = { _errors: [] };\n const processError = (error) => {\n for (const issue of error.issues) {\n if (issue.code === \"invalid_union\") {\n issue.unionErrors.map(processError);\n }\n else if (issue.code === \"invalid_return_type\") {\n processError(issue.returnTypeError);\n }\n else if (issue.code === \"invalid_arguments\") {\n processError(issue.argumentsError);\n }\n else if (issue.path.length === 0) {\n fieldErrors._errors.push(mapper(issue));\n }\n else {\n let curr = fieldErrors;\n let i = 0;\n while (i < issue.path.length) {\n const el = issue.path[i];\n const terminal = i === issue.path.length - 1;\n if (!terminal) {\n curr[el] = curr[el] || { _errors: [] };\n // if (typeof el === \"string\") {\n // curr[el] = curr[el] || { _errors: [] };\n // } else if (typeof el === \"number\") {\n // const errorArray: any = [];\n // errorArray._errors = [];\n // curr[el] = curr[el] || errorArray;\n // }\n }\n else {\n curr[el] = curr[el] || { _errors: [] };\n curr[el]._errors.push(mapper(issue));\n }\n curr = curr[el];\n i++;\n }\n }\n }\n };\n processError(this);\n return fieldErrors;\n }\n toString() {\n return this.message;\n }\n get message() {\n return JSON.stringify(this.issues, util.jsonStringifyReplacer, 2);\n }\n get isEmpty() {\n return this.issues.length === 0;\n }\n flatten(mapper = (issue) => issue.message) {\n const fieldErrors = {};\n const formErrors = [];\n for (const sub of this.issues) {\n if (sub.path.length > 0) {\n fieldErrors[sub.path[0]] = fieldErrors[sub.path[0]] || [];\n fieldErrors[sub.path[0]].push(mapper(sub));\n }\n else {\n formErrors.push(mapper(sub));\n }\n }\n return { formErrors, fieldErrors };\n }\n get formErrors() {\n return this.flatten();\n }\n}\nZodError.create = (issues) => {\n const error = new ZodError(issues);\n return error;\n};\n\nconst errorMap = (issue, _ctx) => {\n let message;\n switch (issue.code) {\n case ZodIssueCode.invalid_type:\n if (issue.received === ZodParsedType.undefined) {\n message = \"Required\";\n }\n else {\n message = `Expected ${issue.expected}, received ${issue.received}`;\n }\n break;\n case ZodIssueCode.invalid_literal:\n message = `Invalid literal value, expected ${JSON.stringify(issue.expected, util.jsonStringifyReplacer)}`;\n break;\n case ZodIssueCode.unrecognized_keys:\n message = `Unrecognized key(s) in object: ${util.joinValues(issue.keys, \", \")}`;\n break;\n case ZodIssueCode.invalid_union:\n message = `Invalid input`;\n break;\n case ZodIssueCode.invalid_union_discriminator:\n message = `Invalid discriminator value. Expected ${util.joinValues(issue.options)}`;\n break;\n case ZodIssueCode.invalid_enum_value:\n message = `Invalid enum value. Expected ${util.joinValues(issue.options)}, received '${issue.received}'`;\n break;\n case ZodIssueCode.invalid_arguments:\n message = `Invalid function arguments`;\n break;\n case ZodIssueCode.invalid_return_type:\n message = `Invalid function return type`;\n break;\n case ZodIssueCode.invalid_date:\n message = `Invalid date`;\n break;\n case ZodIssueCode.invalid_string:\n if (typeof issue.validation === \"object\") {\n if (\"includes\" in issue.validation) {\n message = `Invalid input: must include \"${issue.validation.includes}\"`;\n if (typeof issue.validation.position === \"number\") {\n message = `${message} at one or more positions greater than or equal to ${issue.validation.position}`;\n }\n }\n else if (\"startsWith\" in issue.validation) {\n message = `Invalid input: must start with \"${issue.validation.startsWith}\"`;\n }\n else if (\"endsWith\" in issue.validation) {\n message = `Invalid input: must end with \"${issue.validation.endsWith}\"`;\n }\n else {\n util.assertNever(issue.validation);\n }\n }\n else if (issue.validation !== \"regex\") {\n message = `Invalid ${issue.validation}`;\n }\n else {\n message = \"Invalid\";\n }\n break;\n case ZodIssueCode.too_small:\n if (issue.type === \"array\")\n message = `Array must contain ${issue.exact ? \"exactly\" : issue.inclusive ? `at least` : `more than`} ${issue.minimum} element(s)`;\n else if (issue.type === \"string\")\n message = `String must contain ${issue.exact ? \"exactly\" : issue.inclusive ? `at least` : `over`} ${issue.minimum} character(s)`;\n else if (issue.type === \"number\")\n message = `Number must be ${issue.exact\n ? `exactly equal to `\n : issue.inclusive\n ? `greater than or equal to `\n : `greater than `}${issue.minimum}`;\n else if (issue.type === \"date\")\n message = `Date must be ${issue.exact\n ? `exactly equal to `\n : issue.inclusive\n ? `greater than or equal to `\n : `greater than `}${new Date(Number(issue.minimum))}`;\n else\n message = \"Invalid input\";\n break;\n case ZodIssueCode.too_big:\n if (issue.type === \"array\")\n message = `Array must contain ${issue.exact ? `exactly` : issue.inclusive ? `at most` : `less than`} ${issue.maximum} element(s)`;\n else if (issue.type === \"string\")\n message = `String must contain ${issue.exact ? `exactly` : issue.inclusive ? `at most` : `under`} ${issue.maximum} character(s)`;\n else if (issue.type === \"number\")\n message = `Number must be ${issue.exact\n ? `exactly`\n : issue.inclusive\n ? `less than or equal to`\n : `less than`} ${issue.maximum}`;\n else if (issue.type === \"bigint\")\n message = `BigInt must be ${issue.exact\n ? `exactly`\n : issue.inclusive\n ? `less than or equal to`\n : `less than`} ${issue.maximum}`;\n else if (issue.type === \"date\")\n message = `Date must be ${issue.exact\n ? `exactly`\n : issue.inclusive\n ? `smaller than or equal to`\n : `smaller than`} ${new Date(Number(issue.maximum))}`;\n else\n message = \"Invalid input\";\n break;\n case ZodIssueCode.custom:\n message = `Invalid input`;\n break;\n case ZodIssueCode.invalid_intersection_types:\n message = `Intersection results could not be merged`;\n break;\n case ZodIssueCode.not_multiple_of:\n message = `Number must be a multiple of ${issue.multipleOf}`;\n break;\n case ZodIssueCode.not_finite:\n message = \"Number must be finite\";\n break;\n default:\n message = _ctx.defaultError;\n util.assertNever(issue);\n }\n return { message };\n};\n\nlet overrideErrorMap = errorMap;\nfunction setErrorMap(map) {\n overrideErrorMap = map;\n}\nfunction getErrorMap() {\n return overrideErrorMap;\n}\n\nconst makeIssue = (params) => {\n const { data, path, errorMaps, issueData } = params;\n const fullPath = [...path, ...(issueData.path || [])];\n const fullIssue = {\n ...issueData,\n path: fullPath,\n };\n let errorMessage = \"\";\n const maps = errorMaps\n .filter((m) => !!m)\n .slice()\n .reverse();\n for (const map of maps) {\n errorMessage = map(fullIssue, { data, defaultError: errorMessage }).message;\n }\n return {\n ...issueData,\n path: fullPath,\n message: issueData.message || errorMessage,\n };\n};\nconst EMPTY_PATH = [];\nfunction addIssueToContext(ctx, issueData) {\n const issue = makeIssue({\n issueData: issueData,\n data: ctx.data,\n path: ctx.path,\n errorMaps: [\n ctx.common.contextualErrorMap,\n ctx.schemaErrorMap,\n getErrorMap(),\n errorMap, // then global default map\n ].filter((x) => !!x),\n });\n ctx.common.issues.push(issue);\n}\nclass ParseStatus {\n constructor() {\n this.value = \"valid\";\n }\n dirty() {\n if (this.value === \"valid\")\n this.value = \"dirty\";\n }\n abort() {\n if (this.value !== \"aborted\")\n this.value = \"aborted\";\n }\n static mergeArray(status, results) {\n const arrayValue = [];\n for (const s of results) {\n if (s.status === \"aborted\")\n return INVALID;\n if (s.status === \"dirty\")\n status.dirty();\n arrayValue.push(s.value);\n }\n return { status: status.value, value: arrayValue };\n }\n static async mergeObjectAsync(status, pairs) {\n const syncPairs = [];\n for (const pair of pairs) {\n syncPairs.push({\n key: await pair.key,\n value: await pair.value,\n });\n }\n return ParseStatus.mergeObjectSync(status, syncPairs);\n }\n static mergeObjectSync(status, pairs) {\n const finalObject = {};\n for (const pair of pairs) {\n const { key, value } = pair;\n if (key.status === \"aborted\")\n return INVALID;\n if (value.status === \"aborted\")\n return INVALID;\n if (key.status === \"dirty\")\n status.dirty();\n if (value.status === \"dirty\")\n status.dirty();\n if (typeof value.value !== \"undefined\" || pair.alwaysSet) {\n finalObject[key.value] = value.value;\n }\n }\n return { status: status.value, value: finalObject };\n }\n}\nconst INVALID = Object.freeze({\n status: \"aborted\",\n});\nconst DIRTY = (value) => ({ status: \"dirty\", value });\nconst OK = (value) => ({ status: \"valid\", value });\nconst isAborted = (x) => x.status === \"aborted\";\nconst isDirty = (x) => x.status === \"dirty\";\nconst isValid = (x) => x.status === \"valid\";\nconst isAsync = (x) => typeof Promise !== \"undefined\" && x instanceof Promise;\n\nvar errorUtil;\n(function (errorUtil) {\n errorUtil.errToObj = (message) => typeof message === \"string\" ? { message } : message || {};\n errorUtil.toString = (message) => typeof message === \"string\" ? message : message === null || message === void 0 ? void 0 : message.message;\n})(errorUtil || (errorUtil = {}));\n\nclass ParseInputLazyPath {\n constructor(parent, value, path, key) {\n this._cachedPath = [];\n this.parent = parent;\n this.data = value;\n this._path = path;\n this._key = key;\n }\n get path() {\n if (!this._cachedPath.length) {\n if (this._key instanceof Array) {\n this._cachedPath.push(...this._path, ...this._key);\n }\n else {\n this._cachedPath.push(...this._path, this._key);\n }\n }\n return this._cachedPath;\n }\n}\nconst handleResult = (ctx, result) => {\n if (isValid(result)) {\n return { success: true, data: result.value };\n }\n else {\n if (!ctx.common.issues.length) {\n throw new Error(\"Validation failed but no issues detected.\");\n }\n return {\n success: false,\n get error() {\n if (this._error)\n return this._error;\n const error = new ZodError(ctx.common.issues);\n this._error = error;\n return this._error;\n },\n };\n }\n};\nfunction processCreateParams(params) {\n if (!params)\n return {};\n const { errorMap, invalid_type_error, required_error, description } = params;\n if (errorMap && (invalid_type_error || required_error)) {\n throw new Error(`Can't use \"invalid_type_error\" or \"required_error\" in conjunction with custom error map.`);\n }\n if (errorMap)\n return { errorMap: errorMap, description };\n const customMap = (iss, ctx) => {\n if (iss.code !== \"invalid_type\")\n return { message: ctx.defaultError };\n if (typeof ctx.data === \"undefined\") {\n return { message: required_error !== null && required_error !== void 0 ? required_error : ctx.defaultError };\n }\n return { message: invalid_type_error !== null && invalid_type_error !== void 0 ? invalid_type_error : ctx.defaultError };\n };\n return { errorMap: customMap, description };\n}\nclass ZodType {\n constructor(def) {\n /** Alias of safeParseAsync */\n this.spa = this.safeParseAsync;\n this._def = def;\n this.parse = this.parse.bind(this);\n this.safeParse = this.safeParse.bind(this);\n this.parseAsync = this.parseAsync.bind(this);\n this.safeParseAsync = this.safeParseAsync.bind(this);\n this.spa = this.spa.bind(this);\n this.refine = this.refine.bind(this);\n this.refinement = this.refinement.bind(this);\n this.superRefine = this.superRefine.bind(this);\n this.optional = this.optional.bind(this);\n this.nullable = this.nullable.bind(this);\n this.nullish = this.nullish.bind(this);\n this.array = this.array.bind(this);\n this.promise = this.promise.bind(this);\n this.or = this.or.bind(this);\n this.and = this.and.bind(this);\n this.transform = this.transform.bind(this);\n this.brand = this.brand.bind(this);\n this.default = this.default.bind(this);\n this.catch = this.catch.bind(this);\n this.describe = this.describe.bind(this);\n this.pipe = this.pipe.bind(this);\n this.isNullable = this.isNullable.bind(this);\n this.isOptional = this.isOptional.bind(this);\n }\n get description() {\n return this._def.description;\n }\n _getType(input) {\n return getParsedType(input.data);\n }\n _getOrReturnCtx(input, ctx) {\n return (ctx || {\n common: input.parent.common,\n data: input.data,\n parsedType: getParsedType(input.data),\n schemaErrorMap: this._def.errorMap,\n path: input.path,\n parent: input.parent,\n });\n }\n _processInputParams(input) {\n return {\n status: new ParseStatus(),\n ctx: {\n common: input.parent.common,\n data: input.data,\n parsedType: getParsedType(input.data),\n schemaErrorMap: this._def.errorMap,\n path: input.path,\n parent: input.parent,\n },\n };\n }\n _parseSync(input) {\n const result = this._parse(input);\n if (isAsync(result)) {\n throw new Error(\"Synchronous parse encountered promise.\");\n }\n return result;\n }\n _parseAsync(input) {\n const result = this._parse(input);\n return Promise.resolve(result);\n }\n parse(data, params) {\n const result = this.safeParse(data, params);\n if (result.success)\n return result.data;\n throw result.error;\n }\n safeParse(data, params) {\n var _a;\n const ctx = {\n common: {\n issues: [],\n async: (_a = params === null || params === void 0 ? void 0 : params.async) !== null && _a !== void 0 ? _a : false,\n contextualErrorMap: params === null || params === void 0 ? void 0 : params.errorMap,\n },\n path: (params === null || params === void 0 ? void 0 : params.path) || [],\n schemaErrorMap: this._def.errorMap,\n parent: null,\n data,\n parsedType: getParsedType(data),\n };\n const result = this._parseSync({ data, path: ctx.path, parent: ctx });\n return handleResult(ctx, result);\n }\n async parseAsync(data, params) {\n const result = await this.safeParseAsync(data, params);\n if (result.success)\n return result.data;\n throw result.error;\n }\n async safeParseAsync(data, params) {\n const ctx = {\n common: {\n issues: [],\n contextualErrorMap: params === null || params === void 0 ? void 0 : params.errorMap,\n async: true,\n },\n path: (params === null || params === void 0 ? void 0 : params.path) || [],\n schemaErrorMap: this._def.errorMap,\n parent: null,\n data,\n parsedType: getParsedType(data),\n };\n const maybeAsyncResult = this._parse({ data, path: ctx.path, parent: ctx });\n const result = await (isAsync(maybeAsyncResult)\n ? maybeAsyncResult\n : Promise.resolve(maybeAsyncResult));\n return handleResult(ctx, result);\n }\n refine(check, message) {\n const getIssueProperties = (val) => {\n if (typeof message === \"string\" || typeof message === \"undefined\") {\n return { message };\n }\n else if (typeof message === \"function\") {\n return message(val);\n }\n else {\n return message;\n }\n };\n return this._refinement((val, ctx) => {\n const result = check(val);\n const setError = () => ctx.addIssue({\n code: ZodIssueCode.custom,\n ...getIssueProperties(val),\n });\n if (typeof Promise !== \"undefined\" && result instanceof Promise) {\n return result.then((data) => {\n if (!data) {\n setError();\n return false;\n }\n else {\n return true;\n }\n });\n }\n if (!result) {\n setError();\n return false;\n }\n else {\n return true;\n }\n });\n }\n refinement(check, refinementData) {\n return this._refinement((val, ctx) => {\n if (!check(val)) {\n ctx.addIssue(typeof refinementData === \"function\"\n ? refinementData(val, ctx)\n : refinementData);\n return false;\n }\n else {\n return true;\n }\n });\n }\n _refinement(refinement) {\n return new ZodEffects({\n schema: this,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect: { type: \"refinement\", refinement },\n });\n }\n superRefine(refinement) {\n return this._refinement(refinement);\n }\n optional() {\n return ZodOptional.create(this, this._def);\n }\n nullable() {\n return ZodNullable.create(this, this._def);\n }\n nullish() {\n return this.nullable().optional();\n }\n array() {\n return ZodArray.create(this, this._def);\n }\n promise() {\n return ZodPromise.create(this, this._def);\n }\n or(option) {\n return ZodUnion.create([this, option], this._def);\n }\n and(incoming) {\n return ZodIntersection.create(this, incoming, this._def);\n }\n transform(transform) {\n return new ZodEffects({\n ...processCreateParams(this._def),\n schema: this,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect: { type: \"transform\", transform },\n });\n }\n default(def) {\n const defaultValueFunc = typeof def === \"function\" ? def : () => def;\n return new ZodDefault({\n ...processCreateParams(this._def),\n innerType: this,\n defaultValue: defaultValueFunc,\n typeName: ZodFirstPartyTypeKind.ZodDefault,\n });\n }\n brand() {\n return new ZodBranded({\n typeName: ZodFirstPartyTypeKind.ZodBranded,\n type: this,\n ...processCreateParams(this._def),\n });\n }\n catch(def) {\n const catchValueFunc = typeof def === \"function\" ? def : () => def;\n return new ZodCatch({\n ...processCreateParams(this._def),\n innerType: this,\n catchValue: catchValueFunc,\n typeName: ZodFirstPartyTypeKind.ZodCatch,\n });\n }\n describe(description) {\n const This = this.constructor;\n return new This({\n ...this._def,\n description,\n });\n }\n pipe(target) {\n return ZodPipeline.create(this, target);\n }\n isOptional() {\n return this.safeParse(undefined).success;\n }\n isNullable() {\n return this.safeParse(null).success;\n }\n}\nconst cuidRegex = /^c[^\\s-]{8,}$/i;\nconst cuid2Regex = /^[a-z][a-z0-9]*$/;\nconst ulidRegex = /[0-9A-HJKMNP-TV-Z]{26}/;\nconst uuidRegex = /^([a-f0-9]{8}-[a-f0-9]{4}-[1-5][a-f0-9]{3}-[a-f0-9]{4}-[a-f0-9]{12}|00000000-0000-0000-0000-000000000000)$/i;\n// from https://stackoverflow.com/a/46181/1550155\n// old version: too slow, didn't support unicode\n// const emailRegex = /^((([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+(\\.([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*)|((\\x22)((((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(([\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]|\\x21|[\\x23-\\x5b]|[\\x5d-\\x7e]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(\\\\([\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]))))*(((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(\\x22)))@((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))$/i;\n//old email regex\n// const emailRegex = /^(([^<>()[\\].,;:\\s@\"]+(\\.[^<>()[\\].,;:\\s@\"]+)*)|(\".+\"))@((?!-)([^<>()[\\].,;:\\s@\"]+\\.)+[^<>()[\\].,;:\\s@\"]{1,})[^-<>()[\\].,;:\\s@\"]$/i;\n// eslint-disable-next-line\nconst emailRegex = /^(([^<>()[\\]\\\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@((\\[(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\])|(\\[IPv6:(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))\\])|([A-Za-z0-9]([A-Za-z0-9-]*[A-Za-z0-9])*(\\.[A-Za-z]{2,})+))$/;\n// from https://thekevinscott.com/emojis-in-javascript/#writing-a-regular-expression\nconst emojiRegex = /^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$/u;\nconst ipv4Regex = /^(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))$/;\nconst ipv6Regex = /^(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))$/;\n// Adapted from https://stackoverflow.com/a/3143231\nconst datetimeRegex = (args) => {\n if (args.precision) {\n if (args.offset) {\n return new RegExp(`^\\\\d{4}-\\\\d{2}-\\\\d{2}T\\\\d{2}:\\\\d{2}:\\\\d{2}\\\\.\\\\d{${args.precision}}(([+-]\\\\d{2}(:?\\\\d{2})?)|Z)$`);\n }\n else {\n return new RegExp(`^\\\\d{4}-\\\\d{2}-\\\\d{2}T\\\\d{2}:\\\\d{2}:\\\\d{2}\\\\.\\\\d{${args.precision}}Z$`);\n }\n }\n else if (args.precision === 0) {\n if (args.offset) {\n return new RegExp(`^\\\\d{4}-\\\\d{2}-\\\\d{2}T\\\\d{2}:\\\\d{2}:\\\\d{2}(([+-]\\\\d{2}(:?\\\\d{2})?)|Z)$`);\n }\n else {\n return new RegExp(`^\\\\d{4}-\\\\d{2}-\\\\d{2}T\\\\d{2}:\\\\d{2}:\\\\d{2}Z$`);\n }\n }\n else {\n if (args.offset) {\n return new RegExp(`^\\\\d{4}-\\\\d{2}-\\\\d{2}T\\\\d{2}:\\\\d{2}:\\\\d{2}(\\\\.\\\\d+)?(([+-]\\\\d{2}(:?\\\\d{2})?)|Z)$`);\n }\n else {\n return new RegExp(`^\\\\d{4}-\\\\d{2}-\\\\d{2}T\\\\d{2}:\\\\d{2}:\\\\d{2}(\\\\.\\\\d+)?Z$`);\n }\n }\n};\nfunction isValidIP(ip, version) {\n if ((version === \"v4\" || !version) && ipv4Regex.test(ip)) {\n return true;\n }\n if ((version === \"v6\" || !version) && ipv6Regex.test(ip)) {\n return true;\n }\n return false;\n}\nclass ZodString extends ZodType {\n constructor() {\n super(...arguments);\n this._regex = (regex, validation, message) => this.refinement((data) => regex.test(data), {\n validation,\n code: ZodIssueCode.invalid_string,\n ...errorUtil.errToObj(message),\n });\n /**\n * @deprecated Use z.string().min(1) instead.\n * @see {@link ZodString.min}\n */\n this.nonempty = (message) => this.min(1, errorUtil.errToObj(message));\n this.trim = () => new ZodString({\n ...this._def,\n checks: [...this._def.checks, { kind: \"trim\" }],\n });\n this.toLowerCase = () => new ZodString({\n ...this._def,\n checks: [...this._def.checks, { kind: \"toLowerCase\" }],\n });\n this.toUpperCase = () => new ZodString({\n ...this._def,\n checks: [...this._def.checks, { kind: \"toUpperCase\" }],\n });\n }\n _parse(input) {\n if (this._def.coerce) {\n input.data = String(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.string) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.string,\n received: ctx.parsedType,\n }\n //\n );\n return INVALID;\n }\n const status = new ParseStatus();\n let ctx = undefined;\n for (const check of this._def.checks) {\n if (check.kind === \"min\") {\n if (input.data.length < check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: check.value,\n type: \"string\",\n inclusive: true,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n if (input.data.length > check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: check.value,\n type: \"string\",\n inclusive: true,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"length\") {\n const tooBig = input.data.length > check.value;\n const tooSmall = input.data.length < check.value;\n if (tooBig || tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n if (tooBig) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: check.value,\n type: \"string\",\n inclusive: true,\n exact: true,\n message: check.message,\n });\n }\n else if (tooSmall) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: check.value,\n type: \"string\",\n inclusive: true,\n exact: true,\n message: check.message,\n });\n }\n status.dirty();\n }\n }\n else if (check.kind === \"email\") {\n if (!emailRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"email\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"emoji\") {\n if (!emojiRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"emoji\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"uuid\") {\n if (!uuidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"uuid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"cuid\") {\n if (!cuidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"cuid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"cuid2\") {\n if (!cuid2Regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"cuid2\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"ulid\") {\n if (!ulidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"ulid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"url\") {\n try {\n new URL(input.data);\n }\n catch (_a) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"url\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"regex\") {\n check.regex.lastIndex = 0;\n const testResult = check.regex.test(input.data);\n if (!testResult) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"regex\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"trim\") {\n input.data = input.data.trim();\n }\n else if (check.kind === \"includes\") {\n if (!input.data.includes(check.value, check.position)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: { includes: check.value, position: check.position },\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"toLowerCase\") {\n input.data = input.data.toLowerCase();\n }\n else if (check.kind === \"toUpperCase\") {\n input.data = input.data.toUpperCase();\n }\n else if (check.kind === \"startsWith\") {\n if (!input.data.startsWith(check.value)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: { startsWith: check.value },\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"endsWith\") {\n if (!input.data.endsWith(check.value)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: { endsWith: check.value },\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"datetime\") {\n const regex = datetimeRegex(check);\n if (!regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: \"datetime\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"ip\") {\n if (!isValidIP(input.data, check.version)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"ip\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return { status: status.value, value: input.data };\n }\n _addCheck(check) {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n email(message) {\n return this._addCheck({ kind: \"email\", ...errorUtil.errToObj(message) });\n }\n url(message) {\n return this._addCheck({ kind: \"url\", ...errorUtil.errToObj(message) });\n }\n emoji(message) {\n return this._addCheck({ kind: \"emoji\", ...errorUtil.errToObj(message) });\n }\n uuid(message) {\n return this._addCheck({ kind: \"uuid\", ...errorUtil.errToObj(message) });\n }\n cuid(message) {\n return this._addCheck({ kind: \"cuid\", ...errorUtil.errToObj(message) });\n }\n cuid2(message) {\n return this._addCheck({ kind: \"cuid2\", ...errorUtil.errToObj(message) });\n }\n ulid(message) {\n return this._addCheck({ kind: \"ulid\", ...errorUtil.errToObj(message) });\n }\n ip(options) {\n return this._addCheck({ kind: \"ip\", ...errorUtil.errToObj(options) });\n }\n datetime(options) {\n var _a;\n if (typeof options === \"string\") {\n return this._addCheck({\n kind: \"datetime\",\n precision: null,\n offset: false,\n message: options,\n });\n }\n return this._addCheck({\n kind: \"datetime\",\n precision: typeof (options === null || options === void 0 ? void 0 : options.precision) === \"undefined\" ? null : options === null || options === void 0 ? void 0 : options.precision,\n offset: (_a = options === null || options === void 0 ? void 0 : options.offset) !== null && _a !== void 0 ? _a : false,\n ...errorUtil.errToObj(options === null || options === void 0 ? void 0 : options.message),\n });\n }\n regex(regex, message) {\n return this._addCheck({\n kind: \"regex\",\n regex: regex,\n ...errorUtil.errToObj(message),\n });\n }\n includes(value, options) {\n return this._addCheck({\n kind: \"includes\",\n value: value,\n position: options === null || options === void 0 ? void 0 : options.position,\n ...errorUtil.errToObj(options === null || options === void 0 ? void 0 : options.message),\n });\n }\n startsWith(value, message) {\n return this._addCheck({\n kind: \"startsWith\",\n value: value,\n ...errorUtil.errToObj(message),\n });\n }\n endsWith(value, message) {\n return this._addCheck({\n kind: \"endsWith\",\n value: value,\n ...errorUtil.errToObj(message),\n });\n }\n min(minLength, message) {\n return this._addCheck({\n kind: \"min\",\n value: minLength,\n ...errorUtil.errToObj(message),\n });\n }\n max(maxLength, message) {\n return this._addCheck({\n kind: \"max\",\n value: maxLength,\n ...errorUtil.errToObj(message),\n });\n }\n length(len, message) {\n return this._addCheck({\n kind: \"length\",\n value: len,\n ...errorUtil.errToObj(message),\n });\n }\n get isDatetime() {\n return !!this._def.checks.find((ch) => ch.kind === \"datetime\");\n }\n get isEmail() {\n return !!this._def.checks.find((ch) => ch.kind === \"email\");\n }\n get isURL() {\n return !!this._def.checks.find((ch) => ch.kind === \"url\");\n }\n get isEmoji() {\n return !!this._def.checks.find((ch) => ch.kind === \"emoji\");\n }\n get isUUID() {\n return !!this._def.checks.find((ch) => ch.kind === \"uuid\");\n }\n get isCUID() {\n return !!this._def.checks.find((ch) => ch.kind === \"cuid\");\n }\n get isCUID2() {\n return !!this._def.checks.find((ch) => ch.kind === \"cuid2\");\n }\n get isULID() {\n return !!this._def.checks.find((ch) => ch.kind === \"ulid\");\n }\n get isIP() {\n return !!this._def.checks.find((ch) => ch.kind === \"ip\");\n }\n get minLength() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min;\n }\n get maxLength() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max;\n }\n}\nZodString.create = (params) => {\n var _a;\n return new ZodString({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodString,\n coerce: (_a = params === null || params === void 0 ? void 0 : params.coerce) !== null && _a !== void 0 ? _a : false,\n ...processCreateParams(params),\n });\n};\n// https://stackoverflow.com/questions/3966484/why-does-modulus-operator-return-fractional-number-in-javascript/31711034#31711034\nfunction floatSafeRemainder(val, step) {\n const valDecCount = (val.toString().split(\".\")[1] || \"\").length;\n const stepDecCount = (step.toString().split(\".\")[1] || \"\").length;\n const decCount = valDecCount > stepDecCount ? valDecCount : stepDecCount;\n const valInt = parseInt(val.toFixed(decCount).replace(\".\", \"\"));\n const stepInt = parseInt(step.toFixed(decCount).replace(\".\", \"\"));\n return (valInt % stepInt) / Math.pow(10, decCount);\n}\nclass ZodNumber extends ZodType {\n constructor() {\n super(...arguments);\n this.min = this.gte;\n this.max = this.lte;\n this.step = this.multipleOf;\n }\n _parse(input) {\n if (this._def.coerce) {\n input.data = Number(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.number) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.number,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n let ctx = undefined;\n const status = new ParseStatus();\n for (const check of this._def.checks) {\n if (check.kind === \"int\") {\n if (!util.isInteger(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: \"integer\",\n received: \"float\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"min\") {\n const tooSmall = check.inclusive\n ? input.data < check.value\n : input.data <= check.value;\n if (tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: check.value,\n type: \"number\",\n inclusive: check.inclusive,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n const tooBig = check.inclusive\n ? input.data > check.value\n : input.data >= check.value;\n if (tooBig) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: check.value,\n type: \"number\",\n inclusive: check.inclusive,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"multipleOf\") {\n if (floatSafeRemainder(input.data, check.value) !== 0) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.not_multiple_of,\n multipleOf: check.value,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"finite\") {\n if (!Number.isFinite(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.not_finite,\n message: check.message,\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return { status: status.value, value: input.data };\n }\n gte(value, message) {\n return this.setLimit(\"min\", value, true, errorUtil.toString(message));\n }\n gt(value, message) {\n return this.setLimit(\"min\", value, false, errorUtil.toString(message));\n }\n lte(value, message) {\n return this.setLimit(\"max\", value, true, errorUtil.toString(message));\n }\n lt(value, message) {\n return this.setLimit(\"max\", value, false, errorUtil.toString(message));\n }\n setLimit(kind, value, inclusive, message) {\n return new ZodNumber({\n ...this._def,\n checks: [\n ...this._def.checks,\n {\n kind,\n value,\n inclusive,\n message: errorUtil.toString(message),\n },\n ],\n });\n }\n _addCheck(check) {\n return new ZodNumber({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n int(message) {\n return this._addCheck({\n kind: \"int\",\n message: errorUtil.toString(message),\n });\n }\n positive(message) {\n return this._addCheck({\n kind: \"min\",\n value: 0,\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n negative(message) {\n return this._addCheck({\n kind: \"max\",\n value: 0,\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n nonpositive(message) {\n return this._addCheck({\n kind: \"max\",\n value: 0,\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n nonnegative(message) {\n return this._addCheck({\n kind: \"min\",\n value: 0,\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n multipleOf(value, message) {\n return this._addCheck({\n kind: \"multipleOf\",\n value: value,\n message: errorUtil.toString(message),\n });\n }\n finite(message) {\n return this._addCheck({\n kind: \"finite\",\n message: errorUtil.toString(message),\n });\n }\n safe(message) {\n return this._addCheck({\n kind: \"min\",\n inclusive: true,\n value: Number.MIN_SAFE_INTEGER,\n message: errorUtil.toString(message),\n })._addCheck({\n kind: \"max\",\n inclusive: true,\n value: Number.MAX_SAFE_INTEGER,\n message: errorUtil.toString(message),\n });\n }\n get minValue() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min;\n }\n get maxValue() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max;\n }\n get isInt() {\n return !!this._def.checks.find((ch) => ch.kind === \"int\" ||\n (ch.kind === \"multipleOf\" && util.isInteger(ch.value)));\n }\n get isFinite() {\n let max = null, min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"finite\" ||\n ch.kind === \"int\" ||\n ch.kind === \"multipleOf\") {\n return true;\n }\n else if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n else if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return Number.isFinite(min) && Number.isFinite(max);\n }\n}\nZodNumber.create = (params) => {\n return new ZodNumber({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodNumber,\n coerce: (params === null || params === void 0 ? void 0 : params.coerce) || false,\n ...processCreateParams(params),\n });\n};\nclass ZodBigInt extends ZodType {\n constructor() {\n super(...arguments);\n this.min = this.gte;\n this.max = this.lte;\n }\n _parse(input) {\n if (this._def.coerce) {\n input.data = BigInt(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.bigint) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.bigint,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n let ctx = undefined;\n const status = new ParseStatus();\n for (const check of this._def.checks) {\n if (check.kind === \"min\") {\n const tooSmall = check.inclusive\n ? input.data < check.value\n : input.data <= check.value;\n if (tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n type: \"bigint\",\n minimum: check.value,\n inclusive: check.inclusive,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n const tooBig = check.inclusive\n ? input.data > check.value\n : input.data >= check.value;\n if (tooBig) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n type: \"bigint\",\n maximum: check.value,\n inclusive: check.inclusive,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"multipleOf\") {\n if (input.data % check.value !== BigInt(0)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.not_multiple_of,\n multipleOf: check.value,\n message: check.message,\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return { status: status.value, value: input.data };\n }\n gte(value, message) {\n return this.setLimit(\"min\", value, true, errorUtil.toString(message));\n }\n gt(value, message) {\n return this.setLimit(\"min\", value, false, errorUtil.toString(message));\n }\n lte(value, message) {\n return this.setLimit(\"max\", value, true, errorUtil.toString(message));\n }\n lt(value, message) {\n return this.setLimit(\"max\", value, false, errorUtil.toString(message));\n }\n setLimit(kind, value, inclusive, message) {\n return new ZodBigInt({\n ...this._def,\n checks: [\n ...this._def.checks,\n {\n kind,\n value,\n inclusive,\n message: errorUtil.toString(message),\n },\n ],\n });\n }\n _addCheck(check) {\n return new ZodBigInt({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n positive(message) {\n return this._addCheck({\n kind: \"min\",\n value: BigInt(0),\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n negative(message) {\n return this._addCheck({\n kind: \"max\",\n value: BigInt(0),\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n nonpositive(message) {\n return this._addCheck({\n kind: \"max\",\n value: BigInt(0),\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n nonnegative(message) {\n return this._addCheck({\n kind: \"min\",\n value: BigInt(0),\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n multipleOf(value, message) {\n return this._addCheck({\n kind: \"multipleOf\",\n value,\n message: errorUtil.toString(message),\n });\n }\n get minValue() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min;\n }\n get maxValue() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max;\n }\n}\nZodBigInt.create = (params) => {\n var _a;\n return new ZodBigInt({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodBigInt,\n coerce: (_a = params === null || params === void 0 ? void 0 : params.coerce) !== null && _a !== void 0 ? _a : false,\n ...processCreateParams(params),\n });\n};\nclass ZodBoolean extends ZodType {\n _parse(input) {\n if (this._def.coerce) {\n input.data = Boolean(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.boolean) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.boolean,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodBoolean.create = (params) => {\n return new ZodBoolean({\n typeName: ZodFirstPartyTypeKind.ZodBoolean,\n coerce: (params === null || params === void 0 ? void 0 : params.coerce) || false,\n ...processCreateParams(params),\n });\n};\nclass ZodDate extends ZodType {\n _parse(input) {\n if (this._def.coerce) {\n input.data = new Date(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.date) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.date,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n if (isNaN(input.data.getTime())) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_date,\n });\n return INVALID;\n }\n const status = new ParseStatus();\n let ctx = undefined;\n for (const check of this._def.checks) {\n if (check.kind === \"min\") {\n if (input.data.getTime() < check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n message: check.message,\n inclusive: true,\n exact: false,\n minimum: check.value,\n type: \"date\",\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n if (input.data.getTime() > check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n message: check.message,\n inclusive: true,\n exact: false,\n maximum: check.value,\n type: \"date\",\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return {\n status: status.value,\n value: new Date(input.data.getTime()),\n };\n }\n _addCheck(check) {\n return new ZodDate({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n min(minDate, message) {\n return this._addCheck({\n kind: \"min\",\n value: minDate.getTime(),\n message: errorUtil.toString(message),\n });\n }\n max(maxDate, message) {\n return this._addCheck({\n kind: \"max\",\n value: maxDate.getTime(),\n message: errorUtil.toString(message),\n });\n }\n get minDate() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min != null ? new Date(min) : null;\n }\n get maxDate() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max != null ? new Date(max) : null;\n }\n}\nZodDate.create = (params) => {\n return new ZodDate({\n checks: [],\n coerce: (params === null || params === void 0 ? void 0 : params.coerce) || false,\n typeName: ZodFirstPartyTypeKind.ZodDate,\n ...processCreateParams(params),\n });\n};\nclass ZodSymbol extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.symbol) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.symbol,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodSymbol.create = (params) => {\n return new ZodSymbol({\n typeName: ZodFirstPartyTypeKind.ZodSymbol,\n ...processCreateParams(params),\n });\n};\nclass ZodUndefined extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.undefined) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.undefined,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodUndefined.create = (params) => {\n return new ZodUndefined({\n typeName: ZodFirstPartyTypeKind.ZodUndefined,\n ...processCreateParams(params),\n });\n};\nclass ZodNull extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.null) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.null,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodNull.create = (params) => {\n return new ZodNull({\n typeName: ZodFirstPartyTypeKind.ZodNull,\n ...processCreateParams(params),\n });\n};\nclass ZodAny extends ZodType {\n constructor() {\n super(...arguments);\n // to prevent instances of other classes from extending ZodAny. this causes issues with catchall in ZodObject.\n this._any = true;\n }\n _parse(input) {\n return OK(input.data);\n }\n}\nZodAny.create = (params) => {\n return new ZodAny({\n typeName: ZodFirstPartyTypeKind.ZodAny,\n ...processCreateParams(params),\n });\n};\nclass ZodUnknown extends ZodType {\n constructor() {\n super(...arguments);\n // required\n this._unknown = true;\n }\n _parse(input) {\n return OK(input.data);\n }\n}\nZodUnknown.create = (params) => {\n return new ZodUnknown({\n typeName: ZodFirstPartyTypeKind.ZodUnknown,\n ...processCreateParams(params),\n });\n};\nclass ZodNever extends ZodType {\n _parse(input) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.never,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n}\nZodNever.create = (params) => {\n return new ZodNever({\n typeName: ZodFirstPartyTypeKind.ZodNever,\n ...processCreateParams(params),\n });\n};\nclass ZodVoid extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.undefined) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.void,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodVoid.create = (params) => {\n return new ZodVoid({\n typeName: ZodFirstPartyTypeKind.ZodVoid,\n ...processCreateParams(params),\n });\n};\nclass ZodArray extends ZodType {\n _parse(input) {\n const { ctx, status } = this._processInputParams(input);\n const def = this._def;\n if (ctx.parsedType !== ZodParsedType.array) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.array,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n if (def.exactLength !== null) {\n const tooBig = ctx.data.length > def.exactLength.value;\n const tooSmall = ctx.data.length < def.exactLength.value;\n if (tooBig || tooSmall) {\n addIssueToContext(ctx, {\n code: tooBig ? ZodIssueCode.too_big : ZodIssueCode.too_small,\n minimum: (tooSmall ? def.exactLength.value : undefined),\n maximum: (tooBig ? def.exactLength.value : undefined),\n type: \"array\",\n inclusive: true,\n exact: true,\n message: def.exactLength.message,\n });\n status.dirty();\n }\n }\n if (def.minLength !== null) {\n if (ctx.data.length < def.minLength.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: def.minLength.value,\n type: \"array\",\n inclusive: true,\n exact: false,\n message: def.minLength.message,\n });\n status.dirty();\n }\n }\n if (def.maxLength !== null) {\n if (ctx.data.length > def.maxLength.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: def.maxLength.value,\n type: \"array\",\n inclusive: true,\n exact: false,\n message: def.maxLength.message,\n });\n status.dirty();\n }\n }\n if (ctx.common.async) {\n return Promise.all([...ctx.data].map((item, i) => {\n return def.type._parseAsync(new ParseInputLazyPath(ctx, item, ctx.path, i));\n })).then((result) => {\n return ParseStatus.mergeArray(status, result);\n });\n }\n const result = [...ctx.data].map((item, i) => {\n return def.type._parseSync(new ParseInputLazyPath(ctx, item, ctx.path, i));\n });\n return ParseStatus.mergeArray(status, result);\n }\n get element() {\n return this._def.type;\n }\n min(minLength, message) {\n return new ZodArray({\n ...this._def,\n minLength: { value: minLength, message: errorUtil.toString(message) },\n });\n }\n max(maxLength, message) {\n return new ZodArray({\n ...this._def,\n maxLength: { value: maxLength, message: errorUtil.toString(message) },\n });\n }\n length(len, message) {\n return new ZodArray({\n ...this._def,\n exactLength: { value: len, message: errorUtil.toString(message) },\n });\n }\n nonempty(message) {\n return this.min(1, message);\n }\n}\nZodArray.create = (schema, params) => {\n return new ZodArray({\n type: schema,\n minLength: null,\n maxLength: null,\n exactLength: null,\n typeName: ZodFirstPartyTypeKind.ZodArray,\n ...processCreateParams(params),\n });\n};\nfunction deepPartialify(schema) {\n if (schema instanceof ZodObject) {\n const newShape = {};\n for (const key in schema.shape) {\n const fieldSchema = schema.shape[key];\n newShape[key] = ZodOptional.create(deepPartialify(fieldSchema));\n }\n return new ZodObject({\n ...schema._def,\n shape: () => newShape,\n });\n }\n else if (schema instanceof ZodArray) {\n return new ZodArray({\n ...schema._def,\n type: deepPartialify(schema.element),\n });\n }\n else if (schema instanceof ZodOptional) {\n return ZodOptional.create(deepPartialify(schema.unwrap()));\n }\n else if (schema instanceof ZodNullable) {\n return ZodNullable.create(deepPartialify(schema.unwrap()));\n }\n else if (schema instanceof ZodTuple) {\n return ZodTuple.create(schema.items.map((item) => deepPartialify(item)));\n }\n else {\n return schema;\n }\n}\nclass ZodObject extends ZodType {\n constructor() {\n super(...arguments);\n this._cached = null;\n /**\n * @deprecated In most cases, this is no longer needed - unknown properties are now silently stripped.\n * If you want to pass through unknown properties, use `.passthrough()` instead.\n */\n this.nonstrict = this.passthrough;\n // extend<\n // Augmentation extends ZodRawShape,\n // NewOutput extends util.flatten<{\n // [k in keyof Augmentation | keyof Output]: k extends keyof Augmentation\n // ? Augmentation[k][\"_output\"]\n // : k extends keyof Output\n // ? Output[k]\n // : never;\n // }>,\n // NewInput extends util.flatten<{\n // [k in keyof Augmentation | keyof Input]: k extends keyof Augmentation\n // ? Augmentation[k][\"_input\"]\n // : k extends keyof Input\n // ? Input[k]\n // : never;\n // }>\n // >(\n // augmentation: Augmentation\n // ): ZodObject<\n // extendShape,\n // UnknownKeys,\n // Catchall,\n // NewOutput,\n // NewInput\n // > {\n // return new ZodObject({\n // ...this._def,\n // shape: () => ({\n // ...this._def.shape(),\n // ...augmentation,\n // }),\n // }) as any;\n // }\n /**\n * @deprecated Use `.extend` instead\n * */\n this.augment = this.extend;\n }\n _getCached() {\n if (this._cached !== null)\n return this._cached;\n const shape = this._def.shape();\n const keys = util.objectKeys(shape);\n return (this._cached = { shape, keys });\n }\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.object) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.object,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const { status, ctx } = this._processInputParams(input);\n const { shape, keys: shapeKeys } = this._getCached();\n const extraKeys = [];\n if (!(this._def.catchall instanceof ZodNever &&\n this._def.unknownKeys === \"strip\")) {\n for (const key in ctx.data) {\n if (!shapeKeys.includes(key)) {\n extraKeys.push(key);\n }\n }\n }\n const pairs = [];\n for (const key of shapeKeys) {\n const keyValidator = shape[key];\n const value = ctx.data[key];\n pairs.push({\n key: { status: \"valid\", value: key },\n value: keyValidator._parse(new ParseInputLazyPath(ctx, value, ctx.path, key)),\n alwaysSet: key in ctx.data,\n });\n }\n if (this._def.catchall instanceof ZodNever) {\n const unknownKeys = this._def.unknownKeys;\n if (unknownKeys === \"passthrough\") {\n for (const key of extraKeys) {\n pairs.push({\n key: { status: \"valid\", value: key },\n value: { status: \"valid\", value: ctx.data[key] },\n });\n }\n }\n else if (unknownKeys === \"strict\") {\n if (extraKeys.length > 0) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.unrecognized_keys,\n keys: extraKeys,\n });\n status.dirty();\n }\n }\n else if (unknownKeys === \"strip\") ;\n else {\n throw new Error(`Internal ZodObject error: invalid unknownKeys value.`);\n }\n }\n else {\n // run catchall validation\n const catchall = this._def.catchall;\n for (const key of extraKeys) {\n const value = ctx.data[key];\n pairs.push({\n key: { status: \"valid\", value: key },\n value: catchall._parse(new ParseInputLazyPath(ctx, value, ctx.path, key) //, ctx.child(key), value, getParsedType(value)\n ),\n alwaysSet: key in ctx.data,\n });\n }\n }\n if (ctx.common.async) {\n return Promise.resolve()\n .then(async () => {\n const syncPairs = [];\n for (const pair of pairs) {\n const key = await pair.key;\n syncPairs.push({\n key,\n value: await pair.value,\n alwaysSet: pair.alwaysSet,\n });\n }\n return syncPairs;\n })\n .then((syncPairs) => {\n return ParseStatus.mergeObjectSync(status, syncPairs);\n });\n }\n else {\n return ParseStatus.mergeObjectSync(status, pairs);\n }\n }\n get shape() {\n return this._def.shape();\n }\n strict(message) {\n errorUtil.errToObj;\n return new ZodObject({\n ...this._def,\n unknownKeys: \"strict\",\n ...(message !== undefined\n ? {\n errorMap: (issue, ctx) => {\n var _a, _b, _c, _d;\n const defaultError = (_c = (_b = (_a = this._def).errorMap) === null || _b === void 0 ? void 0 : _b.call(_a, issue, ctx).message) !== null && _c !== void 0 ? _c : ctx.defaultError;\n if (issue.code === \"unrecognized_keys\")\n return {\n message: (_d = errorUtil.errToObj(message).message) !== null && _d !== void 0 ? _d : defaultError,\n };\n return {\n message: defaultError,\n };\n },\n }\n : {}),\n });\n }\n strip() {\n return new ZodObject({\n ...this._def,\n unknownKeys: \"strip\",\n });\n }\n passthrough() {\n return new ZodObject({\n ...this._def,\n unknownKeys: \"passthrough\",\n });\n }\n // const AugmentFactory =\n // (def: Def) =>\n // (\n // augmentation: Augmentation\n // ): ZodObject<\n // extendShape, Augmentation>,\n // Def[\"unknownKeys\"],\n // Def[\"catchall\"]\n // > => {\n // return new ZodObject({\n // ...def,\n // shape: () => ({\n // ...def.shape(),\n // ...augmentation,\n // }),\n // }) as any;\n // };\n extend(augmentation) {\n return new ZodObject({\n ...this._def,\n shape: () => ({\n ...this._def.shape(),\n ...augmentation,\n }),\n });\n }\n /**\n * Prior to zod@1.0.12 there was a bug in the\n * inferred type of merged objects. Please\n * upgrade if you are experiencing issues.\n */\n merge(merging) {\n const merged = new ZodObject({\n unknownKeys: merging._def.unknownKeys,\n catchall: merging._def.catchall,\n shape: () => ({\n ...this._def.shape(),\n ...merging._def.shape(),\n }),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n });\n return merged;\n }\n // merge<\n // Incoming extends AnyZodObject,\n // Augmentation extends Incoming[\"shape\"],\n // NewOutput extends {\n // [k in keyof Augmentation | keyof Output]: k extends keyof Augmentation\n // ? Augmentation[k][\"_output\"]\n // : k extends keyof Output\n // ? Output[k]\n // : never;\n // },\n // NewInput extends {\n // [k in keyof Augmentation | keyof Input]: k extends keyof Augmentation\n // ? Augmentation[k][\"_input\"]\n // : k extends keyof Input\n // ? Input[k]\n // : never;\n // }\n // >(\n // merging: Incoming\n // ): ZodObject<\n // extendShape>,\n // Incoming[\"_def\"][\"unknownKeys\"],\n // Incoming[\"_def\"][\"catchall\"],\n // NewOutput,\n // NewInput\n // > {\n // const merged: any = new ZodObject({\n // unknownKeys: merging._def.unknownKeys,\n // catchall: merging._def.catchall,\n // shape: () =>\n // objectUtil.mergeShapes(this._def.shape(), merging._def.shape()),\n // typeName: ZodFirstPartyTypeKind.ZodObject,\n // }) as any;\n // return merged;\n // }\n setKey(key, schema) {\n return this.augment({ [key]: schema });\n }\n // merge(\n // merging: Incoming\n // ): //ZodObject = (merging) => {\n // ZodObject<\n // extendShape>,\n // Incoming[\"_def\"][\"unknownKeys\"],\n // Incoming[\"_def\"][\"catchall\"]\n // > {\n // // const mergedShape = objectUtil.mergeShapes(\n // // this._def.shape(),\n // // merging._def.shape()\n // // );\n // const merged: any = new ZodObject({\n // unknownKeys: merging._def.unknownKeys,\n // catchall: merging._def.catchall,\n // shape: () =>\n // objectUtil.mergeShapes(this._def.shape(), merging._def.shape()),\n // typeName: ZodFirstPartyTypeKind.ZodObject,\n // }) as any;\n // return merged;\n // }\n catchall(index) {\n return new ZodObject({\n ...this._def,\n catchall: index,\n });\n }\n pick(mask) {\n const shape = {};\n util.objectKeys(mask).forEach((key) => {\n if (mask[key] && this.shape[key]) {\n shape[key] = this.shape[key];\n }\n });\n return new ZodObject({\n ...this._def,\n shape: () => shape,\n });\n }\n omit(mask) {\n const shape = {};\n util.objectKeys(this.shape).forEach((key) => {\n if (!mask[key]) {\n shape[key] = this.shape[key];\n }\n });\n return new ZodObject({\n ...this._def,\n shape: () => shape,\n });\n }\n /**\n * @deprecated\n */\n deepPartial() {\n return deepPartialify(this);\n }\n partial(mask) {\n const newShape = {};\n util.objectKeys(this.shape).forEach((key) => {\n const fieldSchema = this.shape[key];\n if (mask && !mask[key]) {\n newShape[key] = fieldSchema;\n }\n else {\n newShape[key] = fieldSchema.optional();\n }\n });\n return new ZodObject({\n ...this._def,\n shape: () => newShape,\n });\n }\n required(mask) {\n const newShape = {};\n util.objectKeys(this.shape).forEach((key) => {\n if (mask && !mask[key]) {\n newShape[key] = this.shape[key];\n }\n else {\n const fieldSchema = this.shape[key];\n let newField = fieldSchema;\n while (newField instanceof ZodOptional) {\n newField = newField._def.innerType;\n }\n newShape[key] = newField;\n }\n });\n return new ZodObject({\n ...this._def,\n shape: () => newShape,\n });\n }\n keyof() {\n return createZodEnum(util.objectKeys(this.shape));\n }\n}\nZodObject.create = (shape, params) => {\n return new ZodObject({\n shape: () => shape,\n unknownKeys: \"strip\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params),\n });\n};\nZodObject.strictCreate = (shape, params) => {\n return new ZodObject({\n shape: () => shape,\n unknownKeys: \"strict\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params),\n });\n};\nZodObject.lazycreate = (shape, params) => {\n return new ZodObject({\n shape,\n unknownKeys: \"strip\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params),\n });\n};\nclass ZodUnion extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const options = this._def.options;\n function handleResults(results) {\n // return first issue-free validation if it exists\n for (const result of results) {\n if (result.result.status === \"valid\") {\n return result.result;\n }\n }\n for (const result of results) {\n if (result.result.status === \"dirty\") {\n // add issues from dirty option\n ctx.common.issues.push(...result.ctx.common.issues);\n return result.result;\n }\n }\n // return invalid\n const unionErrors = results.map((result) => new ZodError(result.ctx.common.issues));\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_union,\n unionErrors,\n });\n return INVALID;\n }\n if (ctx.common.async) {\n return Promise.all(options.map(async (option) => {\n const childCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: [],\n },\n parent: null,\n };\n return {\n result: await option._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: childCtx,\n }),\n ctx: childCtx,\n };\n })).then(handleResults);\n }\n else {\n let dirty = undefined;\n const issues = [];\n for (const option of options) {\n const childCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: [],\n },\n parent: null,\n };\n const result = option._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: childCtx,\n });\n if (result.status === \"valid\") {\n return result;\n }\n else if (result.status === \"dirty\" && !dirty) {\n dirty = { result, ctx: childCtx };\n }\n if (childCtx.common.issues.length) {\n issues.push(childCtx.common.issues);\n }\n }\n if (dirty) {\n ctx.common.issues.push(...dirty.ctx.common.issues);\n return dirty.result;\n }\n const unionErrors = issues.map((issues) => new ZodError(issues));\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_union,\n unionErrors,\n });\n return INVALID;\n }\n }\n get options() {\n return this._def.options;\n }\n}\nZodUnion.create = (types, params) => {\n return new ZodUnion({\n options: types,\n typeName: ZodFirstPartyTypeKind.ZodUnion,\n ...processCreateParams(params),\n });\n};\n/////////////////////////////////////////////////////\n/////////////////////////////////////////////////////\n////////// //////////\n////////// ZodDiscriminatedUnion //////////\n////////// //////////\n/////////////////////////////////////////////////////\n/////////////////////////////////////////////////////\nconst getDiscriminator = (type) => {\n if (type instanceof ZodLazy) {\n return getDiscriminator(type.schema);\n }\n else if (type instanceof ZodEffects) {\n return getDiscriminator(type.innerType());\n }\n else if (type instanceof ZodLiteral) {\n return [type.value];\n }\n else if (type instanceof ZodEnum) {\n return type.options;\n }\n else if (type instanceof ZodNativeEnum) {\n // eslint-disable-next-line ban/ban\n return Object.keys(type.enum);\n }\n else if (type instanceof ZodDefault) {\n return getDiscriminator(type._def.innerType);\n }\n else if (type instanceof ZodUndefined) {\n return [undefined];\n }\n else if (type instanceof ZodNull) {\n return [null];\n }\n else {\n return null;\n }\n};\nclass ZodDiscriminatedUnion extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.object) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.object,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const discriminator = this.discriminator;\n const discriminatorValue = ctx.data[discriminator];\n const option = this.optionsMap.get(discriminatorValue);\n if (!option) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_union_discriminator,\n options: Array.from(this.optionsMap.keys()),\n path: [discriminator],\n });\n return INVALID;\n }\n if (ctx.common.async) {\n return option._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n }\n else {\n return option._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n }\n }\n get discriminator() {\n return this._def.discriminator;\n }\n get options() {\n return this._def.options;\n }\n get optionsMap() {\n return this._def.optionsMap;\n }\n /**\n * The constructor of the discriminated union schema. Its behaviour is very similar to that of the normal z.union() constructor.\n * However, it only allows a union of objects, all of which need to share a discriminator property. This property must\n * have a different value for each object in the union.\n * @param discriminator the name of the discriminator property\n * @param types an array of object schemas\n * @param params\n */\n static create(discriminator, options, params) {\n // Get all the valid discriminator values\n const optionsMap = new Map();\n // try {\n for (const type of options) {\n const discriminatorValues = getDiscriminator(type.shape[discriminator]);\n if (!discriminatorValues) {\n throw new Error(`A discriminator value for key \\`${discriminator}\\` could not be extracted from all schema options`);\n }\n for (const value of discriminatorValues) {\n if (optionsMap.has(value)) {\n throw new Error(`Discriminator property ${String(discriminator)} has duplicate value ${String(value)}`);\n }\n optionsMap.set(value, type);\n }\n }\n return new ZodDiscriminatedUnion({\n typeName: ZodFirstPartyTypeKind.ZodDiscriminatedUnion,\n discriminator,\n options,\n optionsMap,\n ...processCreateParams(params),\n });\n }\n}\nfunction mergeValues(a, b) {\n const aType = getParsedType(a);\n const bType = getParsedType(b);\n if (a === b) {\n return { valid: true, data: a };\n }\n else if (aType === ZodParsedType.object && bType === ZodParsedType.object) {\n const bKeys = util.objectKeys(b);\n const sharedKeys = util\n .objectKeys(a)\n .filter((key) => bKeys.indexOf(key) !== -1);\n const newObj = { ...a, ...b };\n for (const key of sharedKeys) {\n const sharedValue = mergeValues(a[key], b[key]);\n if (!sharedValue.valid) {\n return { valid: false };\n }\n newObj[key] = sharedValue.data;\n }\n return { valid: true, data: newObj };\n }\n else if (aType === ZodParsedType.array && bType === ZodParsedType.array) {\n if (a.length !== b.length) {\n return { valid: false };\n }\n const newArray = [];\n for (let index = 0; index < a.length; index++) {\n const itemA = a[index];\n const itemB = b[index];\n const sharedValue = mergeValues(itemA, itemB);\n if (!sharedValue.valid) {\n return { valid: false };\n }\n newArray.push(sharedValue.data);\n }\n return { valid: true, data: newArray };\n }\n else if (aType === ZodParsedType.date &&\n bType === ZodParsedType.date &&\n +a === +b) {\n return { valid: true, data: a };\n }\n else {\n return { valid: false };\n }\n}\nclass ZodIntersection extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n const handleParsed = (parsedLeft, parsedRight) => {\n if (isAborted(parsedLeft) || isAborted(parsedRight)) {\n return INVALID;\n }\n const merged = mergeValues(parsedLeft.value, parsedRight.value);\n if (!merged.valid) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_intersection_types,\n });\n return INVALID;\n }\n if (isDirty(parsedLeft) || isDirty(parsedRight)) {\n status.dirty();\n }\n return { status: status.value, value: merged.data };\n };\n if (ctx.common.async) {\n return Promise.all([\n this._def.left._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }),\n this._def.right._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }),\n ]).then(([left, right]) => handleParsed(left, right));\n }\n else {\n return handleParsed(this._def.left._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }), this._def.right._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }));\n }\n }\n}\nZodIntersection.create = (left, right, params) => {\n return new ZodIntersection({\n left: left,\n right: right,\n typeName: ZodFirstPartyTypeKind.ZodIntersection,\n ...processCreateParams(params),\n });\n};\nclass ZodTuple extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.array) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.array,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n if (ctx.data.length < this._def.items.length) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: this._def.items.length,\n inclusive: true,\n exact: false,\n type: \"array\",\n });\n return INVALID;\n }\n const rest = this._def.rest;\n if (!rest && ctx.data.length > this._def.items.length) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: this._def.items.length,\n inclusive: true,\n exact: false,\n type: \"array\",\n });\n status.dirty();\n }\n const items = [...ctx.data]\n .map((item, itemIndex) => {\n const schema = this._def.items[itemIndex] || this._def.rest;\n if (!schema)\n return null;\n return schema._parse(new ParseInputLazyPath(ctx, item, ctx.path, itemIndex));\n })\n .filter((x) => !!x); // filter nulls\n if (ctx.common.async) {\n return Promise.all(items).then((results) => {\n return ParseStatus.mergeArray(status, results);\n });\n }\n else {\n return ParseStatus.mergeArray(status, items);\n }\n }\n get items() {\n return this._def.items;\n }\n rest(rest) {\n return new ZodTuple({\n ...this._def,\n rest,\n });\n }\n}\nZodTuple.create = (schemas, params) => {\n if (!Array.isArray(schemas)) {\n throw new Error(\"You must pass an array of schemas to z.tuple([ ... ])\");\n }\n return new ZodTuple({\n items: schemas,\n typeName: ZodFirstPartyTypeKind.ZodTuple,\n rest: null,\n ...processCreateParams(params),\n });\n};\nclass ZodRecord extends ZodType {\n get keySchema() {\n return this._def.keyType;\n }\n get valueSchema() {\n return this._def.valueType;\n }\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.object) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.object,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const pairs = [];\n const keyType = this._def.keyType;\n const valueType = this._def.valueType;\n for (const key in ctx.data) {\n pairs.push({\n key: keyType._parse(new ParseInputLazyPath(ctx, key, ctx.path, key)),\n value: valueType._parse(new ParseInputLazyPath(ctx, ctx.data[key], ctx.path, key)),\n });\n }\n if (ctx.common.async) {\n return ParseStatus.mergeObjectAsync(status, pairs);\n }\n else {\n return ParseStatus.mergeObjectSync(status, pairs);\n }\n }\n get element() {\n return this._def.valueType;\n }\n static create(first, second, third) {\n if (second instanceof ZodType) {\n return new ZodRecord({\n keyType: first,\n valueType: second,\n typeName: ZodFirstPartyTypeKind.ZodRecord,\n ...processCreateParams(third),\n });\n }\n return new ZodRecord({\n keyType: ZodString.create(),\n valueType: first,\n typeName: ZodFirstPartyTypeKind.ZodRecord,\n ...processCreateParams(second),\n });\n }\n}\nclass ZodMap extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.map) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.map,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const keyType = this._def.keyType;\n const valueType = this._def.valueType;\n const pairs = [...ctx.data.entries()].map(([key, value], index) => {\n return {\n key: keyType._parse(new ParseInputLazyPath(ctx, key, ctx.path, [index, \"key\"])),\n value: valueType._parse(new ParseInputLazyPath(ctx, value, ctx.path, [index, \"value\"])),\n };\n });\n if (ctx.common.async) {\n const finalMap = new Map();\n return Promise.resolve().then(async () => {\n for (const pair of pairs) {\n const key = await pair.key;\n const value = await pair.value;\n if (key.status === \"aborted\" || value.status === \"aborted\") {\n return INVALID;\n }\n if (key.status === \"dirty\" || value.status === \"dirty\") {\n status.dirty();\n }\n finalMap.set(key.value, value.value);\n }\n return { status: status.value, value: finalMap };\n });\n }\n else {\n const finalMap = new Map();\n for (const pair of pairs) {\n const key = pair.key;\n const value = pair.value;\n if (key.status === \"aborted\" || value.status === \"aborted\") {\n return INVALID;\n }\n if (key.status === \"dirty\" || value.status === \"dirty\") {\n status.dirty();\n }\n finalMap.set(key.value, value.value);\n }\n return { status: status.value, value: finalMap };\n }\n }\n}\nZodMap.create = (keyType, valueType, params) => {\n return new ZodMap({\n valueType,\n keyType,\n typeName: ZodFirstPartyTypeKind.ZodMap,\n ...processCreateParams(params),\n });\n};\nclass ZodSet extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.set) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.set,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const def = this._def;\n if (def.minSize !== null) {\n if (ctx.data.size < def.minSize.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: def.minSize.value,\n type: \"set\",\n inclusive: true,\n exact: false,\n message: def.minSize.message,\n });\n status.dirty();\n }\n }\n if (def.maxSize !== null) {\n if (ctx.data.size > def.maxSize.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: def.maxSize.value,\n type: \"set\",\n inclusive: true,\n exact: false,\n message: def.maxSize.message,\n });\n status.dirty();\n }\n }\n const valueType = this._def.valueType;\n function finalizeSet(elements) {\n const parsedSet = new Set();\n for (const element of elements) {\n if (element.status === \"aborted\")\n return INVALID;\n if (element.status === \"dirty\")\n status.dirty();\n parsedSet.add(element.value);\n }\n return { status: status.value, value: parsedSet };\n }\n const elements = [...ctx.data.values()].map((item, i) => valueType._parse(new ParseInputLazyPath(ctx, item, ctx.path, i)));\n if (ctx.common.async) {\n return Promise.all(elements).then((elements) => finalizeSet(elements));\n }\n else {\n return finalizeSet(elements);\n }\n }\n min(minSize, message) {\n return new ZodSet({\n ...this._def,\n minSize: { value: minSize, message: errorUtil.toString(message) },\n });\n }\n max(maxSize, message) {\n return new ZodSet({\n ...this._def,\n maxSize: { value: maxSize, message: errorUtil.toString(message) },\n });\n }\n size(size, message) {\n return this.min(size, message).max(size, message);\n }\n nonempty(message) {\n return this.min(1, message);\n }\n}\nZodSet.create = (valueType, params) => {\n return new ZodSet({\n valueType,\n minSize: null,\n maxSize: null,\n typeName: ZodFirstPartyTypeKind.ZodSet,\n ...processCreateParams(params),\n });\n};\nclass ZodFunction extends ZodType {\n constructor() {\n super(...arguments);\n this.validate = this.implement;\n }\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.function) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.function,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n function makeArgsIssue(args, error) {\n return makeIssue({\n data: args,\n path: ctx.path,\n errorMaps: [\n ctx.common.contextualErrorMap,\n ctx.schemaErrorMap,\n getErrorMap(),\n errorMap,\n ].filter((x) => !!x),\n issueData: {\n code: ZodIssueCode.invalid_arguments,\n argumentsError: error,\n },\n });\n }\n function makeReturnsIssue(returns, error) {\n return makeIssue({\n data: returns,\n path: ctx.path,\n errorMaps: [\n ctx.common.contextualErrorMap,\n ctx.schemaErrorMap,\n getErrorMap(),\n errorMap,\n ].filter((x) => !!x),\n issueData: {\n code: ZodIssueCode.invalid_return_type,\n returnTypeError: error,\n },\n });\n }\n const params = { errorMap: ctx.common.contextualErrorMap };\n const fn = ctx.data;\n if (this._def.returns instanceof ZodPromise) {\n return OK(async (...args) => {\n const error = new ZodError([]);\n const parsedArgs = await this._def.args\n .parseAsync(args, params)\n .catch((e) => {\n error.addIssue(makeArgsIssue(args, e));\n throw error;\n });\n const result = await fn(...parsedArgs);\n const parsedReturns = await this._def.returns._def.type\n .parseAsync(result, params)\n .catch((e) => {\n error.addIssue(makeReturnsIssue(result, e));\n throw error;\n });\n return parsedReturns;\n });\n }\n else {\n return OK((...args) => {\n const parsedArgs = this._def.args.safeParse(args, params);\n if (!parsedArgs.success) {\n throw new ZodError([makeArgsIssue(args, parsedArgs.error)]);\n }\n const result = fn(...parsedArgs.data);\n const parsedReturns = this._def.returns.safeParse(result, params);\n if (!parsedReturns.success) {\n throw new ZodError([makeReturnsIssue(result, parsedReturns.error)]);\n }\n return parsedReturns.data;\n });\n }\n }\n parameters() {\n return this._def.args;\n }\n returnType() {\n return this._def.returns;\n }\n args(...items) {\n return new ZodFunction({\n ...this._def,\n args: ZodTuple.create(items).rest(ZodUnknown.create()),\n });\n }\n returns(returnType) {\n return new ZodFunction({\n ...this._def,\n returns: returnType,\n });\n }\n implement(func) {\n const validatedFunc = this.parse(func);\n return validatedFunc;\n }\n strictImplement(func) {\n const validatedFunc = this.parse(func);\n return validatedFunc;\n }\n static create(args, returns, params) {\n return new ZodFunction({\n args: (args\n ? args\n : ZodTuple.create([]).rest(ZodUnknown.create())),\n returns: returns || ZodUnknown.create(),\n typeName: ZodFirstPartyTypeKind.ZodFunction,\n ...processCreateParams(params),\n });\n }\n}\nclass ZodLazy extends ZodType {\n get schema() {\n return this._def.getter();\n }\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const lazySchema = this._def.getter();\n return lazySchema._parse({ data: ctx.data, path: ctx.path, parent: ctx });\n }\n}\nZodLazy.create = (getter, params) => {\n return new ZodLazy({\n getter: getter,\n typeName: ZodFirstPartyTypeKind.ZodLazy,\n ...processCreateParams(params),\n });\n};\nclass ZodLiteral extends ZodType {\n _parse(input) {\n if (input.data !== this._def.value) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n received: ctx.data,\n code: ZodIssueCode.invalid_literal,\n expected: this._def.value,\n });\n return INVALID;\n }\n return { status: \"valid\", value: input.data };\n }\n get value() {\n return this._def.value;\n }\n}\nZodLiteral.create = (value, params) => {\n return new ZodLiteral({\n value: value,\n typeName: ZodFirstPartyTypeKind.ZodLiteral,\n ...processCreateParams(params),\n });\n};\nfunction createZodEnum(values, params) {\n return new ZodEnum({\n values: values,\n typeName: ZodFirstPartyTypeKind.ZodEnum,\n ...processCreateParams(params),\n });\n}\nclass ZodEnum extends ZodType {\n _parse(input) {\n if (typeof input.data !== \"string\") {\n const ctx = this._getOrReturnCtx(input);\n const expectedValues = this._def.values;\n addIssueToContext(ctx, {\n expected: util.joinValues(expectedValues),\n received: ctx.parsedType,\n code: ZodIssueCode.invalid_type,\n });\n return INVALID;\n }\n if (this._def.values.indexOf(input.data) === -1) {\n const ctx = this._getOrReturnCtx(input);\n const expectedValues = this._def.values;\n addIssueToContext(ctx, {\n received: ctx.data,\n code: ZodIssueCode.invalid_enum_value,\n options: expectedValues,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n get options() {\n return this._def.values;\n }\n get enum() {\n const enumValues = {};\n for (const val of this._def.values) {\n enumValues[val] = val;\n }\n return enumValues;\n }\n get Values() {\n const enumValues = {};\n for (const val of this._def.values) {\n enumValues[val] = val;\n }\n return enumValues;\n }\n get Enum() {\n const enumValues = {};\n for (const val of this._def.values) {\n enumValues[val] = val;\n }\n return enumValues;\n }\n extract(values) {\n return ZodEnum.create(values);\n }\n exclude(values) {\n return ZodEnum.create(this.options.filter((opt) => !values.includes(opt)));\n }\n}\nZodEnum.create = createZodEnum;\nclass ZodNativeEnum extends ZodType {\n _parse(input) {\n const nativeEnumValues = util.getValidEnumValues(this._def.values);\n const ctx = this._getOrReturnCtx(input);\n if (ctx.parsedType !== ZodParsedType.string &&\n ctx.parsedType !== ZodParsedType.number) {\n const expectedValues = util.objectValues(nativeEnumValues);\n addIssueToContext(ctx, {\n expected: util.joinValues(expectedValues),\n received: ctx.parsedType,\n code: ZodIssueCode.invalid_type,\n });\n return INVALID;\n }\n if (nativeEnumValues.indexOf(input.data) === -1) {\n const expectedValues = util.objectValues(nativeEnumValues);\n addIssueToContext(ctx, {\n received: ctx.data,\n code: ZodIssueCode.invalid_enum_value,\n options: expectedValues,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n get enum() {\n return this._def.values;\n }\n}\nZodNativeEnum.create = (values, params) => {\n return new ZodNativeEnum({\n values: values,\n typeName: ZodFirstPartyTypeKind.ZodNativeEnum,\n ...processCreateParams(params),\n });\n};\nclass ZodPromise extends ZodType {\n unwrap() {\n return this._def.type;\n }\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.promise &&\n ctx.common.async === false) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.promise,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const promisified = ctx.parsedType === ZodParsedType.promise\n ? ctx.data\n : Promise.resolve(ctx.data);\n return OK(promisified.then((data) => {\n return this._def.type.parseAsync(data, {\n path: ctx.path,\n errorMap: ctx.common.contextualErrorMap,\n });\n }));\n }\n}\nZodPromise.create = (schema, params) => {\n return new ZodPromise({\n type: schema,\n typeName: ZodFirstPartyTypeKind.ZodPromise,\n ...processCreateParams(params),\n });\n};\nclass ZodEffects extends ZodType {\n innerType() {\n return this._def.schema;\n }\n sourceType() {\n return this._def.schema._def.typeName === ZodFirstPartyTypeKind.ZodEffects\n ? this._def.schema.sourceType()\n : this._def.schema;\n }\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n const effect = this._def.effect || null;\n if (effect.type === \"preprocess\") {\n const processed = effect.transform(ctx.data);\n if (ctx.common.async) {\n return Promise.resolve(processed).then((processed) => {\n return this._def.schema._parseAsync({\n data: processed,\n path: ctx.path,\n parent: ctx,\n });\n });\n }\n else {\n return this._def.schema._parseSync({\n data: processed,\n path: ctx.path,\n parent: ctx,\n });\n }\n }\n const checkCtx = {\n addIssue: (arg) => {\n addIssueToContext(ctx, arg);\n if (arg.fatal) {\n status.abort();\n }\n else {\n status.dirty();\n }\n },\n get path() {\n return ctx.path;\n },\n };\n checkCtx.addIssue = checkCtx.addIssue.bind(checkCtx);\n if (effect.type === \"refinement\") {\n const executeRefinement = (acc\n // effect: RefinementEffect\n ) => {\n const result = effect.refinement(acc, checkCtx);\n if (ctx.common.async) {\n return Promise.resolve(result);\n }\n if (result instanceof Promise) {\n throw new Error(\"Async refinement encountered during synchronous parse operation. Use .parseAsync instead.\");\n }\n return acc;\n };\n if (ctx.common.async === false) {\n const inner = this._def.schema._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (inner.status === \"aborted\")\n return INVALID;\n if (inner.status === \"dirty\")\n status.dirty();\n // return value is ignored\n executeRefinement(inner.value);\n return { status: status.value, value: inner.value };\n }\n else {\n return this._def.schema\n ._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx })\n .then((inner) => {\n if (inner.status === \"aborted\")\n return INVALID;\n if (inner.status === \"dirty\")\n status.dirty();\n return executeRefinement(inner.value).then(() => {\n return { status: status.value, value: inner.value };\n });\n });\n }\n }\n if (effect.type === \"transform\") {\n if (ctx.common.async === false) {\n const base = this._def.schema._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (!isValid(base))\n return base;\n const result = effect.transform(base.value, checkCtx);\n if (result instanceof Promise) {\n throw new Error(`Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.`);\n }\n return { status: status.value, value: result };\n }\n else {\n return this._def.schema\n ._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx })\n .then((base) => {\n if (!isValid(base))\n return base;\n return Promise.resolve(effect.transform(base.value, checkCtx)).then((result) => ({ status: status.value, value: result }));\n });\n }\n }\n util.assertNever(effect);\n }\n}\nZodEffects.create = (schema, effect, params) => {\n return new ZodEffects({\n schema,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect,\n ...processCreateParams(params),\n });\n};\nZodEffects.createWithPreprocess = (preprocess, schema, params) => {\n return new ZodEffects({\n schema,\n effect: { type: \"preprocess\", transform: preprocess },\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n ...processCreateParams(params),\n });\n};\nclass ZodOptional extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType === ZodParsedType.undefined) {\n return OK(undefined);\n }\n return this._def.innerType._parse(input);\n }\n unwrap() {\n return this._def.innerType;\n }\n}\nZodOptional.create = (type, params) => {\n return new ZodOptional({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodOptional,\n ...processCreateParams(params),\n });\n};\nclass ZodNullable extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType === ZodParsedType.null) {\n return OK(null);\n }\n return this._def.innerType._parse(input);\n }\n unwrap() {\n return this._def.innerType;\n }\n}\nZodNullable.create = (type, params) => {\n return new ZodNullable({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodNullable,\n ...processCreateParams(params),\n });\n};\nclass ZodDefault extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n let data = ctx.data;\n if (ctx.parsedType === ZodParsedType.undefined) {\n data = this._def.defaultValue();\n }\n return this._def.innerType._parse({\n data,\n path: ctx.path,\n parent: ctx,\n });\n }\n removeDefault() {\n return this._def.innerType;\n }\n}\nZodDefault.create = (type, params) => {\n return new ZodDefault({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodDefault,\n defaultValue: typeof params.default === \"function\"\n ? params.default\n : () => params.default,\n ...processCreateParams(params),\n });\n};\nclass ZodCatch extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n // newCtx is used to not collect issues from inner types in ctx\n const newCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: [],\n },\n };\n const result = this._def.innerType._parse({\n data: newCtx.data,\n path: newCtx.path,\n parent: {\n ...newCtx,\n },\n });\n if (isAsync(result)) {\n return result.then((result) => {\n return {\n status: \"valid\",\n value: result.status === \"valid\"\n ? result.value\n : this._def.catchValue({\n get error() {\n return new ZodError(newCtx.common.issues);\n },\n input: newCtx.data,\n }),\n };\n });\n }\n else {\n return {\n status: \"valid\",\n value: result.status === \"valid\"\n ? result.value\n : this._def.catchValue({\n get error() {\n return new ZodError(newCtx.common.issues);\n },\n input: newCtx.data,\n }),\n };\n }\n }\n removeCatch() {\n return this._def.innerType;\n }\n}\nZodCatch.create = (type, params) => {\n return new ZodCatch({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodCatch,\n catchValue: typeof params.catch === \"function\" ? params.catch : () => params.catch,\n ...processCreateParams(params),\n });\n};\nclass ZodNaN extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.nan) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.nan,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return { status: \"valid\", value: input.data };\n }\n}\nZodNaN.create = (params) => {\n return new ZodNaN({\n typeName: ZodFirstPartyTypeKind.ZodNaN,\n ...processCreateParams(params),\n });\n};\nconst BRAND = Symbol(\"zod_brand\");\nclass ZodBranded extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const data = ctx.data;\n return this._def.type._parse({\n data,\n path: ctx.path,\n parent: ctx,\n });\n }\n unwrap() {\n return this._def.type;\n }\n}\nclass ZodPipeline extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.common.async) {\n const handleAsync = async () => {\n const inResult = await this._def.in._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (inResult.status === \"aborted\")\n return INVALID;\n if (inResult.status === \"dirty\") {\n status.dirty();\n return DIRTY(inResult.value);\n }\n else {\n return this._def.out._parseAsync({\n data: inResult.value,\n path: ctx.path,\n parent: ctx,\n });\n }\n };\n return handleAsync();\n }\n else {\n const inResult = this._def.in._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (inResult.status === \"aborted\")\n return INVALID;\n if (inResult.status === \"dirty\") {\n status.dirty();\n return {\n status: \"dirty\",\n value: inResult.value,\n };\n }\n else {\n return this._def.out._parseSync({\n data: inResult.value,\n path: ctx.path,\n parent: ctx,\n });\n }\n }\n }\n static create(a, b) {\n return new ZodPipeline({\n in: a,\n out: b,\n typeName: ZodFirstPartyTypeKind.ZodPipeline,\n });\n }\n}\nconst custom = (check, params = {}, \n/*\n * @deprecated\n *\n * Pass `fatal` into the params object instead:\n *\n * ```ts\n * z.string().custom((val) => val.length > 5, { fatal: false })\n * ```\n *\n */\nfatal) => {\n if (check)\n return ZodAny.create().superRefine((data, ctx) => {\n var _a, _b;\n if (!check(data)) {\n const p = typeof params === \"function\"\n ? params(data)\n : typeof params === \"string\"\n ? { message: params }\n : params;\n const _fatal = (_b = (_a = p.fatal) !== null && _a !== void 0 ? _a : fatal) !== null && _b !== void 0 ? _b : true;\n const p2 = typeof p === \"string\" ? { message: p } : p;\n ctx.addIssue({ code: \"custom\", ...p2, fatal: _fatal });\n }\n });\n return ZodAny.create();\n};\nconst late = {\n object: ZodObject.lazycreate,\n};\nvar ZodFirstPartyTypeKind;\n(function (ZodFirstPartyTypeKind) {\n ZodFirstPartyTypeKind[\"ZodString\"] = \"ZodString\";\n ZodFirstPartyTypeKind[\"ZodNumber\"] = \"ZodNumber\";\n ZodFirstPartyTypeKind[\"ZodNaN\"] = \"ZodNaN\";\n ZodFirstPartyTypeKind[\"ZodBigInt\"] = \"ZodBigInt\";\n ZodFirstPartyTypeKind[\"ZodBoolean\"] = \"ZodBoolean\";\n ZodFirstPartyTypeKind[\"ZodDate\"] = \"ZodDate\";\n ZodFirstPartyTypeKind[\"ZodSymbol\"] = \"ZodSymbol\";\n ZodFirstPartyTypeKind[\"ZodUndefined\"] = \"ZodUndefined\";\n ZodFirstPartyTypeKind[\"ZodNull\"] = \"ZodNull\";\n ZodFirstPartyTypeKind[\"ZodAny\"] = \"ZodAny\";\n ZodFirstPartyTypeKind[\"ZodUnknown\"] = \"ZodUnknown\";\n ZodFirstPartyTypeKind[\"ZodNever\"] = \"ZodNever\";\n ZodFirstPartyTypeKind[\"ZodVoid\"] = \"ZodVoid\";\n ZodFirstPartyTypeKind[\"ZodArray\"] = \"ZodArray\";\n ZodFirstPartyTypeKind[\"ZodObject\"] = \"ZodObject\";\n ZodFirstPartyTypeKind[\"ZodUnion\"] = \"ZodUnion\";\n ZodFirstPartyTypeKind[\"ZodDiscriminatedUnion\"] = \"ZodDiscriminatedUnion\";\n ZodFirstPartyTypeKind[\"ZodIntersection\"] = \"ZodIntersection\";\n ZodFirstPartyTypeKind[\"ZodTuple\"] = \"ZodTuple\";\n ZodFirstPartyTypeKind[\"ZodRecord\"] = \"ZodRecord\";\n ZodFirstPartyTypeKind[\"ZodMap\"] = \"ZodMap\";\n ZodFirstPartyTypeKind[\"ZodSet\"] = \"ZodSet\";\n ZodFirstPartyTypeKind[\"ZodFunction\"] = \"ZodFunction\";\n ZodFirstPartyTypeKind[\"ZodLazy\"] = \"ZodLazy\";\n ZodFirstPartyTypeKind[\"ZodLiteral\"] = \"ZodLiteral\";\n ZodFirstPartyTypeKind[\"ZodEnum\"] = \"ZodEnum\";\n ZodFirstPartyTypeKind[\"ZodEffects\"] = \"ZodEffects\";\n ZodFirstPartyTypeKind[\"ZodNativeEnum\"] = \"ZodNativeEnum\";\n ZodFirstPartyTypeKind[\"ZodOptional\"] = \"ZodOptional\";\n ZodFirstPartyTypeKind[\"ZodNullable\"] = \"ZodNullable\";\n ZodFirstPartyTypeKind[\"ZodDefault\"] = \"ZodDefault\";\n ZodFirstPartyTypeKind[\"ZodCatch\"] = \"ZodCatch\";\n ZodFirstPartyTypeKind[\"ZodPromise\"] = \"ZodPromise\";\n ZodFirstPartyTypeKind[\"ZodBranded\"] = \"ZodBranded\";\n ZodFirstPartyTypeKind[\"ZodPipeline\"] = \"ZodPipeline\";\n})(ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {}));\nconst instanceOfType = (\n// const instanceOfType = any>(\ncls, params = {\n message: `Input not instance of ${cls.name}`,\n}) => custom((data) => data instanceof cls, params);\nconst stringType = ZodString.create;\nconst numberType = ZodNumber.create;\nconst nanType = ZodNaN.create;\nconst bigIntType = ZodBigInt.create;\nconst booleanType = ZodBoolean.create;\nconst dateType = ZodDate.create;\nconst symbolType = ZodSymbol.create;\nconst undefinedType = ZodUndefined.create;\nconst nullType = ZodNull.create;\nconst anyType = ZodAny.create;\nconst unknownType = ZodUnknown.create;\nconst neverType = ZodNever.create;\nconst voidType = ZodVoid.create;\nconst arrayType = ZodArray.create;\nconst objectType = ZodObject.create;\nconst strictObjectType = ZodObject.strictCreate;\nconst unionType = ZodUnion.create;\nconst discriminatedUnionType = ZodDiscriminatedUnion.create;\nconst intersectionType = ZodIntersection.create;\nconst tupleType = ZodTuple.create;\nconst recordType = ZodRecord.create;\nconst mapType = ZodMap.create;\nconst setType = ZodSet.create;\nconst functionType = ZodFunction.create;\nconst lazyType = ZodLazy.create;\nconst literalType = ZodLiteral.create;\nconst enumType = ZodEnum.create;\nconst nativeEnumType = ZodNativeEnum.create;\nconst promiseType = ZodPromise.create;\nconst effectsType = ZodEffects.create;\nconst optionalType = ZodOptional.create;\nconst nullableType = ZodNullable.create;\nconst preprocessType = ZodEffects.createWithPreprocess;\nconst pipelineType = ZodPipeline.create;\nconst ostring = () => stringType().optional();\nconst onumber = () => numberType().optional();\nconst oboolean = () => booleanType().optional();\nconst coerce = {\n string: ((arg) => ZodString.create({ ...arg, coerce: true })),\n number: ((arg) => ZodNumber.create({ ...arg, coerce: true })),\n boolean: ((arg) => ZodBoolean.create({\n ...arg,\n coerce: true,\n })),\n bigint: ((arg) => ZodBigInt.create({ ...arg, coerce: true })),\n date: ((arg) => ZodDate.create({ ...arg, coerce: true })),\n};\nconst NEVER = INVALID;\n\nvar z = /*#__PURE__*/Object.freeze({\n __proto__: null,\n defaultErrorMap: errorMap,\n setErrorMap: setErrorMap,\n getErrorMap: getErrorMap,\n makeIssue: makeIssue,\n EMPTY_PATH: EMPTY_PATH,\n addIssueToContext: addIssueToContext,\n ParseStatus: ParseStatus,\n INVALID: INVALID,\n DIRTY: DIRTY,\n OK: OK,\n isAborted: isAborted,\n isDirty: isDirty,\n isValid: isValid,\n isAsync: isAsync,\n get util () { return util; },\n get objectUtil () { return objectUtil; },\n ZodParsedType: ZodParsedType,\n getParsedType: getParsedType,\n ZodType: ZodType,\n ZodString: ZodString,\n ZodNumber: ZodNumber,\n ZodBigInt: ZodBigInt,\n ZodBoolean: ZodBoolean,\n ZodDate: ZodDate,\n ZodSymbol: ZodSymbol,\n ZodUndefined: ZodUndefined,\n ZodNull: ZodNull,\n ZodAny: ZodAny,\n ZodUnknown: ZodUnknown,\n ZodNever: ZodNever,\n ZodVoid: ZodVoid,\n ZodArray: ZodArray,\n ZodObject: ZodObject,\n ZodUnion: ZodUnion,\n ZodDiscriminatedUnion: ZodDiscriminatedUnion,\n ZodIntersection: ZodIntersection,\n ZodTuple: ZodTuple,\n ZodRecord: ZodRecord,\n ZodMap: ZodMap,\n ZodSet: ZodSet,\n ZodFunction: ZodFunction,\n ZodLazy: ZodLazy,\n ZodLiteral: ZodLiteral,\n ZodEnum: ZodEnum,\n ZodNativeEnum: ZodNativeEnum,\n ZodPromise: ZodPromise,\n ZodEffects: ZodEffects,\n ZodTransformer: ZodEffects,\n ZodOptional: ZodOptional,\n ZodNullable: ZodNullable,\n ZodDefault: ZodDefault,\n ZodCatch: ZodCatch,\n ZodNaN: ZodNaN,\n BRAND: BRAND,\n ZodBranded: ZodBranded,\n ZodPipeline: ZodPipeline,\n custom: custom,\n Schema: ZodType,\n ZodSchema: ZodType,\n late: late,\n get ZodFirstPartyTypeKind () { return ZodFirstPartyTypeKind; },\n coerce: coerce,\n any: anyType,\n array: arrayType,\n bigint: bigIntType,\n boolean: booleanType,\n date: dateType,\n discriminatedUnion: discriminatedUnionType,\n effect: effectsType,\n 'enum': enumType,\n 'function': functionType,\n 'instanceof': instanceOfType,\n intersection: intersectionType,\n lazy: lazyType,\n literal: literalType,\n map: mapType,\n nan: nanType,\n nativeEnum: nativeEnumType,\n never: neverType,\n 'null': nullType,\n nullable: nullableType,\n number: numberType,\n object: objectType,\n oboolean: oboolean,\n onumber: onumber,\n optional: optionalType,\n ostring: ostring,\n pipeline: pipelineType,\n preprocess: preprocessType,\n promise: promiseType,\n record: recordType,\n set: setType,\n strictObject: strictObjectType,\n string: stringType,\n symbol: symbolType,\n transformer: effectsType,\n tuple: tupleType,\n 'undefined': undefinedType,\n union: unionType,\n unknown: unknownType,\n 'void': voidType,\n NEVER: NEVER,\n ZodIssueCode: ZodIssueCode,\n quotelessJson: quotelessJson,\n ZodError: ZodError\n});\n\nexport { BRAND, DIRTY, EMPTY_PATH, INVALID, NEVER, OK, ParseStatus, ZodType as Schema, ZodAny, ZodArray, ZodBigInt, ZodBoolean, ZodBranded, ZodCatch, ZodDate, ZodDefault, ZodDiscriminatedUnion, ZodEffects, ZodEnum, ZodError, ZodFirstPartyTypeKind, ZodFunction, ZodIntersection, ZodIssueCode, ZodLazy, ZodLiteral, ZodMap, ZodNaN, ZodNativeEnum, ZodNever, ZodNull, ZodNullable, ZodNumber, ZodObject, ZodOptional, ZodParsedType, ZodPipeline, ZodPromise, ZodRecord, ZodType as ZodSchema, ZodSet, ZodString, ZodSymbol, ZodEffects as ZodTransformer, ZodTuple, ZodType, ZodUndefined, ZodUnion, ZodUnknown, ZodVoid, addIssueToContext, anyType as any, arrayType as array, bigIntType as bigint, booleanType as boolean, coerce, custom, dateType as date, z as default, errorMap as defaultErrorMap, discriminatedUnionType as discriminatedUnion, effectsType as effect, enumType as enum, functionType as function, getErrorMap, getParsedType, instanceOfType as instanceof, intersectionType as intersection, isAborted, isAsync, isDirty, isValid, late, lazyType as lazy, literalType as literal, makeIssue, mapType as map, nanType as nan, nativeEnumType as nativeEnum, neverType as never, nullType as null, nullableType as nullable, numberType as number, objectType as object, objectUtil, oboolean, onumber, optionalType as optional, ostring, pipelineType as pipeline, preprocessType as preprocess, promiseType as promise, quotelessJson, recordType as record, setType as set, setErrorMap, strictObjectType as strictObject, stringType as string, symbolType as symbol, effectsType as transformer, tupleType as tuple, undefinedType as undefined, unionType as union, unknownType as unknown, util, voidType as void, z };\n","'use strict';\n\n/// \n/// \n/// \n\nimport {AmeCustomizable, AmeCustomizableViewModel} from '../../pro-customizables/assets/customizable.js';\nimport {registerBaseComponents} from '../../pro-customizables/ko-components/ame-components.js';\nimport AmeAcStructure from './ko-components/ame-ac-structure.js';\nimport AmeAcSection from './ko-components/ame-ac-section.js';\nimport AmeAcSectionLink from './ko-components/ame-ac-section-link.js';\nimport AmeAcControl from './ko-components/ame-ac-control.js';\nimport AmeAcControlGroup from './ko-components/ame-ac-control-group.js';\nimport AmeAcContentSection from './ko-components/ame-ac-content-section.js';\nimport {AmeAdminCustomizerBase} from './admin-customizer-base.js';\nimport AmeAcSeparator from './ko-components/ame-ac-separator.js';\nimport AmeAcValidationErrors from './ko-components/ame-ac-validation-errors.js';\nimport z, {ZodError, ZodType} from '../../zod/lib/index.js';\n\ndeclare var wsAmeLodash: _.LoDashStatic;\ndeclare const wsAmeAdminCustomizerData: AmeAdminCustomizer.ScriptData;\n\nexport namespace AmeAdminCustomizer {\n\timport Setting = AmeCustomizable.Setting;\n\timport SettingCollection = AmeCustomizable.SettingCollection;\n\timport InterfaceStructureData = AmeCustomizable.InterfaceStructureData;\n\timport InterfaceStructure = AmeCustomizable.InterfaceStructure;\n\timport unserializeUiElement = AmeCustomizable.unserializeUiElement;\n\timport unserializeSetting = AmeCustomizable.unserializeSetting;\n\timport AnySpecificElementData = AmeCustomizable.AnySpecificElementData;\n\timport CustomizableVmInterface = AmeCustomizableViewModel.CustomizableVmInterface;\n\n\tconst $ = jQuery;\n\tconst _ = wsAmeLodash;\n\n\tregisterBaseComponents();\n\tko.components.register('ame-ac-structure', AmeAcStructure);\n\tko.components.register('ame-ac-section', AmeAcSection);\n\tko.components.register('ame-ac-section-link', AmeAcSectionLink);\n\tko.components.register('ame-ac-content-section', AmeAcContentSection);\n\tko.components.register('ame-ac-control-group', AmeAcControlGroup);\n\tko.components.register('ame-ac-control', AmeAcControl);\n\tko.components.register('ame-ac-separator', AmeAcSeparator);\n\tko.components.register('ame-ac-validation-errors', AmeAcValidationErrors);\n\n\texport interface ScriptData extends AmeAdminCustomizerBase.ScriptData, AdminThemeTexts {\n\t\tajaxUrl: string;\n\t\tsaveChangesetNonce: string;\n\t\ttrashChangesetNonce: string;\n\t\tchangesetItemCount: number;\n\t\tchangesetStatus: string;\n\t\tchangesetThemeMetadata: AdminThemeMetadata | null;\n\n\t\trefreshPreviewNonce: string;\n\t\tinitialPreviewUrl: string;\n\t\tinterfaceStructure: InterfaceStructureData;\n\n\t\t/**\n\t\t * The template to use when generating the URL for a changeset.\n\t\t *\n\t\t * By default, the changeset name is added as a query parameter. Alternatively,\n\t\t * you can use a path template that includes a \"{changeset}\" placeholder, which\n\t\t * will be replaced with the changeset name.\n\t\t */\n\t\tchangesetPathTemplate: string | null;\n\n\t\t/**\n\t\t * Whether to use pushState() to update the URL when the changeset name changes.\n\t\t *\n\t\t * By default, we discourage navigating to the old URL (no pushState()) because\n\t\t * the name is only expected to change when the old changeset becomes invalid\n\t\t * (e.g. it's deleted or published).\n\t\t */\n\t\tchangesetPushStateEnabled: boolean;\n\n\t\t/**\n\t\t * Admin Customizer base path. Defaults to the current URL path.\n\t\t *\n\t\t * Note that setting this to a non-empty value will also stop AC from\n\t\t * adding the \"page\" query parameter to the URL.\n\t\t */\n\t\tcustomBasePath: string | null;\n\n\t\texitPromptMode?: number;\n\t}\n\n\tinterface AdminThemeTexts {\n\t\tgeneratorCreditPhrase?: string;\n\t\tstandalonePluginNote?: string;\n\t}\n\n\tconst reducedMotionQuery = window.matchMedia('(prefers-reduced-motion: reduce)');\n\tlet prefersReducedMotion = reducedMotionQuery && reducedMotionQuery.matches;\n\treducedMotionQuery.addEventListener('change', () => {\n\t\tprefersReducedMotion = reducedMotionQuery.matches;\n\t});\n\n\tclass CustomizerSettingsCollection extends SettingCollection {\n\t\t/**\n\t\t * Settings that have changed since the last save attempt.\n\t\t */\n\t\tprivate pendingSettings: Record = {};\n\t\t/**\n\t\t * Settings that in the process of being sent to the server to be saved.\n\t\t * They might not be saved yet.\n\t\t */\n\t\tprivate sentSettings: Record = {};\n\t\tprivate currentChangesetRequest: JQueryXHR | null = null;\n\t\tprivate saveTriggerTimeoutId: null | ReturnType = null;\n\n\t\tprivate readonly currentChangeset: KnockoutObservable;\n\t\tpublic readonly changesetName: KnockoutComputed;\n\n\t\tpublic readonly adminThemeMetadata: KnockoutObservable;\n\t\tprivate readonly underlyingMetadata: KnockoutObservable = ko.observable(null);\n\t\tprivate readonly metadataHasChanged: KnockoutObservable = ko.observable(false);\n\n\t\tpublic readonly isExclusiveOperationInProgress: KnockoutComputed;\n\t\tprivate readonly exclusiveOperation: KnockoutObservable = ko.observable(false);\n\n\t\tconstructor(\n\t\t\tpublic readonly ajaxUrl: string,\n\t\t\tpublic readonly saveChangesetNonce: string,\n\t\t\tpublic readonly trashChangesetNonce: string,\n\t\t\tchangesetName: string,\n\t\t\tchangesetItemCount: number = 0,\n\t\t\tchangesetStatus: string | null = null\n\t\t) {\n\t\t\tsuper();\n\t\t\tconst self = this;\n\n\t\t\tthis.currentChangeset = ko.observable(\n\t\t\t\tnew Changeset(changesetName, changesetItemCount, changesetStatus)\n\t\t\t);\n\t\t\tthis.changesetName = ko.pureComputed(() => {\n\t\t\t\treturn (self.currentChangeset()?.name()) || '';\n\t\t\t});\n\n\t\t\tthis.adminThemeMetadata = ko.computed({\n\t\t\t\tread: () => this.underlyingMetadata(),\n\t\t\t\twrite: (newValue) => {\n\t\t\t\t\tconst oldValue = this.underlyingMetadata.peek();\n\t\t\t\t\tif (!_.isEqual(newValue, oldValue)) {\n\t\t\t\t\t\tthis.underlyingMetadata(newValue);\n\t\t\t\t\t\tthis.metadataHasChanged(true);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t//Automatically save the changeset when any settings change.\n\t\t\tconst totalChangeCount = ko.pureComputed(() => {\n\t\t\t\tconst changeset = self.currentChangeset();\n\t\t\t\treturn (changeset ? changeset.currentSessionChanges() : 0);\n\t\t\t});\n\t\t\tconst debouncedSaveTrigger = _.debounce(\n\t\t\t\t() => {\n\t\t\t\t\t//Only save if there are changes. This may look like a duplicate check,\n\t\t\t\t\t//but it's not: the totalChangeCount() may change between the time\n\t\t\t\t\t//the debounced function is called and the time this code is executed.\n\t\t\t\t\t//\n\t\t\t\t\t//Also save if the metadata has changed, but only if the changeset\n\t\t\t\t\t//is not empty. Saving a changeset with only metadata is not useful.\n\t\t\t\t\tif (\n\t\t\t\t\t\t(totalChangeCount() > 0)\n\t\t\t\t\t\t|| (this.metadataHasChanged() && this.currentChangeset().isNonEmpty())\n\t\t\t\t\t) {\n\t\t\t\t\t\tself.queueChangesetUpdate()\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t3000,\n\t\t\t\t{leading: true, trailing: true}\n\t\t\t)\n\t\t\ttotalChangeCount.subscribe((counter) => {\n\t\t\t\tif (counter > 0) {\n\t\t\t\t\tdebouncedSaveTrigger();\n\t\t\t\t}\n\t\t\t});\n\t\t\t//Also save when theme metadata changes.\n\t\t\tthis.metadataHasChanged.subscribe((hasChanged) => {\n\t\t\t\tif (hasChanged) {\n\t\t\t\t\tdebouncedSaveTrigger();\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis.isExclusiveOperationInProgress = ko.pureComputed(() => {\n\t\t\t\treturn self.exclusiveOperation();\n\t\t\t});\n\n\t\t\t//Keep track of unsaved changes and changesets.\n\t\t\tthis.addChangeListener((setting: Setting) => {\n\t\t\t\tthis.pendingSettings[setting.id] = setting;\n\n\t\t\t\tlet changeset = this.currentChangeset();\n\t\t\t\t//If the current changeset cannot be modified, create a new one\n\t\t\t\t//for the changed setting(s).\n\t\t\t\tif (!changeset?.canBeModified()) {\n\t\t\t\t\tchangeset = new Changeset();\n\t\t\t\t\tthis.currentChangeset(changeset);\n\t\t\t\t}\n\t\t\t\t//Track the number of changes in the current session.\n\t\t\t\tchangeset.currentSessionChanges(changeset.currentSessionChanges() + 1);\n\t\t\t});\n\t\t}\n\n\t\tqueueChangesetUpdate(delay: number = 0) {\n\t\t\tif (delay > 0) {\n\t\t\t\tif (this.saveTriggerTimeoutId !== null) {\n\t\t\t\t\t//Replace the existing timeout with a new one.\n\t\t\t\t\tclearTimeout(this.saveTriggerTimeoutId);\n\t\t\t\t}\n\t\t\t\tthis.saveTriggerTimeoutId = setTimeout(() => {\n\t\t\t\t\tthis.saveTriggerTimeoutId = null;\n\t\t\t\t\tthis.queueChangesetUpdate(0);\n\t\t\t\t}, delay);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (this.saveTriggerTimeoutId !== null) {\n\t\t\t\treturn; //Another timeout is already waiting.\n\t\t\t}\n\n\t\t\tif (this.currentChangesetRequest !== null) {\n\t\t\t\t//There's an in-progress request, so wait until it's done.\n\t\t\t\tthis.currentChangesetRequest.always(() => {\n\t\t\t\t\t//Wait a bit to avoid hammering the server.\n\t\t\t\t\tthis.queueChangesetUpdate(1000);\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.saveChangeset();\n\t\t}\n\n\t\tprivate saveChangeset(status: string | null = null): JQueryPromise {\n\t\t\t//Do nothing if there are no changes.\n\t\t\tif (_.isEmpty(this.pendingSettings) && (status === null) && !this.metadataHasChanged()) {\n\t\t\t\treturn $.Deferred().reject(new Error('There are no changes to save.')).promise();\n\t\t\t}\n\n\t\t\tif (this.isExclusiveOperationInProgress()) {\n\t\t\t\treturn $.Deferred().reject(\n\t\t\t\t\tnew Error('Another exclusive changeset operation is in progress.')\n\t\t\t\t).promise();\n\t\t\t}\n\n\t\t\tlet isExclusiveRequest = (status === 'publish') || (status === 'trash');\n\t\t\tif (isExclusiveRequest) {\n\t\t\t\tthis.exclusiveOperation(true);\n\t\t\t}\n\n\t\t\tconst savedChangeset = this.currentChangeset();\n\n\t\t\t//Keep a local copy of the settings in case something changes instance\n\t\t\t//properties while the request is in progress (should never happen).\n\t\t\tconst settingsToSend = this.pendingSettings;\n\t\t\tthis.sentSettings = settingsToSend;\n\t\t\tthis.pendingSettings = {};\n\n\t\t\tconst modifiedSettings = _.mapValues(settingsToSend, setting => setting.value());\n\t\t\tconst requestData: Record = {\n\t\t\t\taction: 'ws_ame_ac_save_changeset',\n\t\t\t\t_ajax_nonce: this.saveChangesetNonce,\n\t\t\t\tchangeset: (savedChangeset?.name()) ?? '',\n\t\t\t\tmodified: JSON.stringify(modifiedSettings),\n\t\t\t};\n\t\t\tif (status !== null) {\n\t\t\t\trequestData['status'] = status;\n\t\t\t}\n\t\t\t//If the changeset doesn't have a name, it is new.\n\t\t\tif (!savedChangeset?.hasName()) {\n\t\t\t\trequestData['createNew'] = 1;\n\t\t\t}\n\n\t\t\t//Also send the metadata if it has changed.\n\t\t\tconst metadataWasChanged = this.metadataHasChanged();\n\t\t\tif (metadataWasChanged) {\n\t\t\t\tconst metadata = this.adminThemeMetadata();\n\t\t\t\trequestData['adminThemeMetadata'] = JSON.stringify(metadata);\n\t\t\t}\n\t\t\tthis.metadataHasChanged(false);\n\n\t\t\tconst request = $.ajax({\n\t\t\t\turl: this.ajaxUrl,\n\t\t\t\tmethod: 'POST',\n\t\t\t\tdata: requestData,\n\t\t\t\tdataType: 'json',\n\t\t\t\ttimeout: 20000,\n\t\t\t});\n\t\t\tthis.currentChangesetRequest = request;\n\n\t\t\tinterface ServerValidationResults {\n\t\t\t\t[settingId: string]: {\n\t\t\t\t\tisValid: boolean;\n\t\t\t\t\terrors: Array<{ code: string; message: string; }>;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst self = this;\n\n\t\t\tfunction storeValidationResultsFrom(serverResponse: any) {\n\t\t\t\tconst results: ServerValidationResults = _.get(\n\t\t\t\t\tserverResponse,\n\t\t\t\t\t['data', 'validationResults']\n\t\t\t\t);\n\t\t\t\tif (typeof results !== 'object') {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tfor (const settingId in results) {\n\t\t\t\t\tconst setting = self.get(settingId);\n\t\t\t\t\tif (!setting.isDefined()) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!modifiedSettings.hasOwnProperty(settingId)) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tconst sentValue = modifiedSettings[settingId];\n\n\t\t\t\t\tconst state = results[settingId];\n\t\t\t\t\tif (state.isValid) {\n\t\t\t\t\t\tsetting.get().clearValidationErrorsForValue(sentValue);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t//Since the server response is not fully validated, some typeof checks\n\t\t\t\t\t\t//are still useful.\n\t\t\t\t\t\t// noinspection SuspiciousTypeOfGuard\n\t\t\t\t\t\tsetting.get().addValidationErrorsForValue(\n\t\t\t\t\t\t\tsentValue,\n\t\t\t\t\t\t\t_.filter(state.errors, error => (typeof error.message === 'string'))\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfunction storeChangesetDetailsFrom(serverResponse: any) {\n\t\t\t\tif (!savedChangeset) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t//Store the returned changeset name in case a new changeset was created\n\t\t\t\t//or an existing changeset was forked due to permissions.\n\t\t\t\tconst newName = _.get(serverResponse, ['data', 'changeset']);\n\t\t\t\tif (!savedChangeset.hasName() || (newName !== savedChangeset.name())) {\n\t\t\t\t\tif (typeof newName === 'string') {\n\t\t\t\t\t\tsavedChangeset.name(newName);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t//Store the changeset status.\n\t\t\t\tconst newStatus = _.get(serverResponse, ['data', 'changesetStatus']);\n\t\t\t\tif (typeof newStatus === 'string') {\n\t\t\t\t\tsavedChangeset.status(newStatus);\n\t\t\t\t}\n\n\t\t\t\t//Store the number of changes in the changeset.\n\t\t\t\tconst newChangeCount = _.get(serverResponse, ['data', 'changesetItemCount']);\n\t\t\t\tif (typeof newChangeCount === 'number') {\n\t\t\t\t\tsavedChangeset.knownItemCount(newChangeCount);\n\t\t\t\t}\n\n\t\t\t\t//Was the changeset published? Because changesets are typically moved\n\t\t\t\t//to trash after publishing, \"status\" might be \"trash\" instead of \"publish\",\n\t\t\t\t//but we still want to know if it was successfully published.\n\t\t\t\tconst wasPublished = _.get(serverResponse, ['data', 'changesetWasPublished'], null);\n\t\t\t\tif (wasPublished) {\n\t\t\t\t\tsavedChangeset.wasPublished(wasPublished);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\trequest.done(function (response) {\n\t\t\t\tstoreChangesetDetailsFrom(response);\n\t\t\t\tstoreValidationResultsFrom(response);\n\n\t\t\t\t//After successfully publishing a changeset, it has no more\n\t\t\t\t//unsaved changes.\n\t\t\t\tconst isPublished =\n\t\t\t\t\t(savedChangeset.status() === 'publish')\n\t\t\t\t\t|| (savedChangeset.status() === 'future')\n\t\t\t\t\t|| (savedChangeset.wasPublished());\n\t\t\t\tif (isPublished) {\n\t\t\t\t\tsavedChangeset.currentSessionChanges(0);\n\t\t\t\t}\n\n\t\t\t\t//After a changeset is published or trashed, it can no longer\n\t\t\t\t//be edited. We may be able to replace it with a new changeset\n\t\t\t\t//that was created on the server.\n\t\t\t\tif (!self.currentChangeset().canBeModified()) {\n\t\t\t\t\tconst nextChangeset = _.get(response, ['data', 'nextChangeset']);\n\t\t\t\t\tif ((typeof nextChangeset === 'string') && (nextChangeset !== '')) {\n\t\t\t\t\t\tself.currentChangeset(new Changeset(nextChangeset));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\n\t\t\trequest.fail((requestObject: JQueryXHR) => {\n\t\t\t\tif (typeof requestObject.responseJSON === 'object') {\n\t\t\t\t\tstoreValidationResultsFrom(requestObject.responseJSON);\n\t\t\t\t\tstoreChangesetDetailsFrom(requestObject.responseJSON);\n\t\t\t\t}\n\n\t\t\t\t//Add the unsaved settings back to the pending list.\n\t\t\t\tfor (const id in settingsToSend) {\n\t\t\t\t\t//Keep only settings that still exist.\n\t\t\t\t\tif (this.get(id).isDefined()) {\n\t\t\t\t\t\tthis.pendingSettings[id] = settingsToSend[id];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t//We don't automatically retry because the problem might be something\n\t\t\t\t//that doesn't get better on its own, like missing permissions.\n\t\t\t});\n\n\t\t\trequest.always(() => {\n\t\t\t\tthis.currentChangesetRequest = null;\n\t\t\t\tthis.sentSettings = {};\n\t\t\t\tif (isExclusiveRequest) {\n\t\t\t\t\tthis.exclusiveOperation(false);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\treturn request;\n\t\t}\n\n\t\tpublic savePendingSettings(timeout: number = 20): JQueryPromise {\n\t\t\tif (this.isExclusiveOperationInProgress()) {\n\t\t\t\t//Wait for the exclusive operation to finish.\n\t\t\t\tconst deferred = $.Deferred();\n\t\t\t\tconst result = deferred.then(() => this.doSavePendingSettings());\n\n\t\t\t\tconst startTime = Date.now();\n\t\t\t\tconst timer = setInterval(() => {\n\t\t\t\t\tif (!this.isExclusiveOperationInProgress()) {\n\t\t\t\t\t\tclearInterval(timer);\n\t\t\t\t\t\tdeferred.resolve();\n\t\t\t\t\t} else if ((Date.now() - startTime) > timeout) {\n\t\t\t\t\t\tclearInterval(timer);\n\t\t\t\t\t\tdeferred.reject(new Error('Exclusive operation timed out.'));\n\t\t\t\t\t}\n\t\t\t\t}, 200);\n\n\t\t\t\treturn result;\n\t\t\t}\n\n\t\t\treturn this.doSavePendingSettings();\n\t\t}\n\n\t\tprivate doSavePendingSettings(): JQueryPromise {\n\t\t\t//If there are no changes, we don't need to do anything.\n\t\t\tif (_.isEmpty(this.pendingSettings)) {\n\t\t\t\treturn $.Deferred().resolve().promise();\n\t\t\t}\n\t\t\treturn this.saveChangeset();\n\t\t}\n\n\t\tpublic getCurrentChangeset(): Changeset {\n\t\t\treturn this.currentChangeset();\n\t\t}\n\n\t\t/**\n\t\t * Get any unsaved setting changes.\n\t\t *\n\t\t * @returns Object An object mapping setting IDs to their modified values.\n\t\t */\n\t\tpublic get unsavedChanges(): Record {\n\t\t\t//Include both pending settings and sent settings. Sent settings\n\t\t\t//might not be saved yet.\n\t\t\tlet unsavedSettings: Record = {};\n\t\t\t_.defaults(unsavedSettings, this.pendingSettings, this.sentSettings);\n\n\t\t\treturn _.mapValues(unsavedSettings, setting => setting.value());\n\t\t}\n\n\t\tpublic publishChangeset(): JQueryPromise {\n\t\t\tif (this.isExclusiveOperationInProgress()) {\n\t\t\t\treturn $.Deferred()\n\t\t\t\t\t.reject(new Error('Another exclusive changeset operation is already in progress.'))\n\t\t\t\t\t.promise();\n\t\t\t}\n\t\t\treturn this.saveChangeset('publish');\n\t\t}\n\n\t\tpublic trashChangeset(): JQueryPromise {\n\t\t\tif (this.isExclusiveOperationInProgress()) {\n\t\t\t\treturn $.Deferred()\n\t\t\t\t\t.reject(new Error('Another exclusive changeset operation is already in progress.'))\n\t\t\t\t\t.promise();\n\t\t\t}\n\n\t\t\tconst changeset = this.currentChangeset();\n\t\t\tif (!changeset.hasName()) {\n\t\t\t\t//The changeset hasn't been saved yet, so we can just mark it as trashed.\n\t\t\t\tchangeset.status('trash');\n\t\t\t\tchangeset.currentSessionChanges(0);\n\n\t\t\t\t//It's a success of sorts.\n\t\t\t\treturn $.Deferred().resolve(true).promise();\n\t\t\t}\n\n\t\t\tthis.exclusiveOperation(true);\n\n\t\t\tconst requestData: Record = {\n\t\t\t\taction: 'ws_ame_ac_trash_changeset',\n\t\t\t\t_ajax_nonce: this.trashChangesetNonce,\n\t\t\t\tchangeset: changeset.name\n\t\t\t};\n\n\t\t\tconst request = $.ajax({\n\t\t\t\turl: this.ajaxUrl,\n\t\t\t\tmethod: 'POST',\n\t\t\t\tdata: requestData,\n\t\t\t\tdataType: 'json',\n\t\t\t\ttimeout: 20000,\n\t\t\t});\n\t\t\tthis.currentChangesetRequest = request;\n\n\t\t\trequest.done(function () {\n\t\t\t\tchangeset.status('trash');\n\t\t\t\tchangeset.currentSessionChanges(0);\n\t\t\t});\n\n\t\t\t//Unfortunately, jQuery doesn't seem to allow us to create a custom\n\t\t\t//error object and pass it to other handlers, so code that uses this\n\t\t\t//method will have to parse the error response itself.\n\n\t\t\trequest.always(() => {\n\t\t\t\tthis.currentChangesetRequest = null;\n\t\t\t\tthis.exclusiveOperation(false);\n\t\t\t});\n\n\t\t\treturn request;\n\t\t}\n\n\t\tpublic addInitialThemeMetadata(metadata: AdminThemeMetadata | null) {\n\t\t\tthis.underlyingMetadata(metadata);\n\t\t\tthis.metadataHasChanged(false);\n\t\t}\n\t}\n\n\tclass Changeset {\n\t\tpublic readonly name: KnockoutObservable;\n\t\tpublic readonly knownItemCount: KnockoutObservable;\n\t\tpublic readonly status: KnockoutObservable;\n\n\t\t/**\n\t\t * The number of times settings have been changed in this changeset\n\t\t * during the current customizer session.\n\t\t *\n\t\t * Note that this is not the same as the number settings in the changeset:\n\t\t * if the same setting is changed X times, this counter will increase by X,\n\t\t * but the changeset will still only have one entry for that setting.\n\t\t */\n\t\tpublic readonly currentSessionChanges: KnockoutObservable = ko.observable(0);\n\n\t\t/**\n\t\t * Once a changeset has been published or deleted, its contents can't be modified any more.\n\t\t * @private\n\t\t */\n\t\tprivate readonly fixedContentStatuses: Record =\n\t\t\t{'publish': true, 'trash': true, 'future': true};\n\n\t\tpublic readonly wasPublished: KnockoutObservable = ko.observable(false);\n\n\t\tconstructor(name: string = '', knownItemCount: number = 0, initialStatus: string | null = '') {\n\t\t\tthis.name = ko.observable(name);\n\n\t\t\tthis.name.subscribe((newName) => {\n\t\t\t\t//In theory, the type system should ensure that the name is always a string,\n\t\t\t\t//but that only works on the TS side. I've previously run into a bug where\n\t\t\t\t//a null value was sent from the server. Let's add a check here to make it\n\t\t\t\t//easier to spot bugs like that in the future.\n\t\t\t\tif ((typeof (newName as unknown) !== 'string')) {\n\t\t\t\t\tthrow new Error('Changeset name must always be a string, found ' + (typeof newName));\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis.knownItemCount = ko.observable(knownItemCount);\n\t\t\tthis.status = ko.observable(initialStatus ?? '');\n\t\t}\n\n\t\tpublic hasName(): boolean {\n\t\t\tconst name = this.name();\n\t\t\treturn (name !== '');\n\t\t}\n\n\t\tpublic canBeModified(): boolean {\n\t\t\treturn !this.fixedContentStatuses.hasOwnProperty(this.status());\n\t\t}\n\n\t\tpublic isNonEmpty(): boolean {\n\t\t\treturn (this.currentSessionChanges() > 0) || (this.knownItemCount() > 0)\n\t\t}\n\t}\n\n\tconst TemporaryChangesetName = 'temporary000'; //Note: Must match the value used in PHP.\n\n\t//region Admin theme\n\tconst UrlOrEmpty = z.union([\n\t\tz.string().url().max(1000),\n\t\tz.literal('')\n\t]);\n\n\tconst AdminThemeMetadata = z.object({\n\t\tpluginName: z.string().max(100),\n\t\tshortDescription: z.string().max(500),\n\n\t\tpluginSlug: z.string().max(64).toLowerCase().default('')\n\t\t\t.refine(\n\t\t\t\tfunction (input: string) {\n\t\t\t\t\t//Only allow alphanumeric characters, underscores, and dashes.\n\t\t\t\t\t//Empty string is allowed.\n\t\t\t\t\treturn /^[a-z0-9_-]*$/.test(input);\n\t\t\t\t},\n\t\t\t\t{message: 'The slug can only contain letters (a-z), numbers, underscores, and dashes.'}\n\t\t\t),\n\t\tidentifierPrefix: z.string().max(20).optional(),\n\n\t\tpluginVersion: z.string().default('1.0').optional(),\n\t\tpluginUrl: UrlOrEmpty.optional(),\n\t\tauthorName: z.string().max(100).optional(),\n\t\tauthorUrl: UrlOrEmpty.optional(),\n\t\trequiredWpVersion: z.string().max(30).default('4.7').optional(),\n\t\ttestedWpVersion: z.string().max(30).optional(),\n\t\twasEverConfirmed: z.boolean().default(false).optional(),\n\t});\n\n\ttype AdminThemeMetadata = z.infer;\n\n\tconst AdminThemeSettings = z.record(\n\t\t//Key type\n\t\tz.string().min(1),\n\t\t//Value type\n\t\tz.any()\n\t);\n\n\tclass AdminThemeImportReport {\n\t\tpublic totalSettings: number = 0;\n\t\tpublic importedSettings: number = 0;\n\t\tpublic invalidSettings: number = 0;\n\t\tpublic skippedSettings: number = 0;\n\t\tpublic differentImportedSettings: number = 0;\n\n\t\tpublic readonly pluginName: string;\n\n\t\tconstructor(\n\t\t\tpublic readonly fileName: string,\n\t\t\tpublic readonly metadata: AdminThemeMetadata\n\t\t) {\n\t\t\tthis.pluginName = metadata.pluginName || '(Unnamed)';\n\t\t}\n\t}\n\n\tinterface WithZodValidationResults extends ObservableValidationFields {\n\t\tameZodValidationError: KnockoutObservable;\n\t}\n\n\ttype ZodValidatedObservable = KnockoutComputed & WithZodValidationResults;\n\n\tfunction observableWithZodValidation>(\n\t\tvalue: z.output,\n\t\tschema: S\n\t): ZodValidatedObservable> {\n\t\tconst underlyingObservable = ko.observable(value);\n\n\t\tconst observable: ZodValidatedObservable = ko.pureComputed({\n\t\t\tread: underlyingObservable,\n\t\t\twrite: (newValue: T) => {\n\t\t\t\tconst validationResult = schema.safeParse(newValue);\n\t\t\t\tif (validationResult.success) {\n\t\t\t\t\tunderlyingObservable(validationResult.data);\n\t\t\t\t\tobservable.ameZodValidationError(null);\n\t\t\t\t\tobservable.ameValidationErrors([]);\n\t\t\t\t} else {\n\t\t\t\t\tobservable.ameZodValidationError(validationResult.error);\n\t\t\t\t\t//Convert Zod issues to ObservableValidationErrors.\n\t\t\t\t\tobservable.ameValidationErrors(validationResult.error.issues.map(issue => {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tcode: issue.code,\n\t\t\t\t\t\t\tmessage: issue.message\n\t\t\t\t\t\t} satisfies ObservableValidationError;\n\t\t\t\t\t}));\n\t\t\t\t}\n\t\t\t}\n\t\t}) as ZodValidatedObservable;\n\n\t\tobservable.ameZodValidationError = ko.observable(null);\n\t\tobservable.ameValidationErrors = ko.observable([] as ObservableValidationError[]);\n\t\tobservable.ameIsValid = ko.pureComputed(() => {\n\t\t\tconst errors = observable.ameValidationErrors();\n\t\t\treturn !errors || errors.length === 0;\n\t\t});\n\n\t\treturn observable;\n\t}\n\n\tclass ObservableThemeMetadata {\n\t\tpublic readonly pluginName: ZodValidatedObservable;\n\t\tpublic readonly shortDescription: ZodValidatedObservable;\n\t\tpublic readonly pluginSlug: ZodValidatedObservable;\n\t\tpublic readonly identifierPrefix: ZodValidatedObservable;\n\t\tpublic readonly pluginVersion: ZodValidatedObservable;\n\t\tpublic readonly pluginUrl: ZodValidatedObservable;\n\t\tpublic readonly authorName: ZodValidatedObservable;\n\t\tpublic readonly authorUrl: ZodValidatedObservable;\n\t\tpublic readonly requiredWpVersion: ZodValidatedObservable;\n\t\tpublic readonly testedWpVersion: ZodValidatedObservable;\n\t\tpublic readonly wasEverConfirmed: ZodValidatedObservable;\n\n\t\tconstructor(metadata: AdminThemeMetadata) {\n\t\t\tthis.pluginName = observableWithZodValidation(\n\t\t\t\tmetadata.pluginName,\n\t\t\t\tAdminThemeMetadata.shape.pluginName\n\t\t\t);\n\t\t\tthis.shortDescription = observableWithZodValidation(\n\t\t\t\tmetadata.shortDescription,\n\t\t\t\tAdminThemeMetadata.shape.shortDescription\n\t\t\t);\n\n\t\t\tthis.pluginSlug = observableWithZodValidation(\n\t\t\t\tmetadata.pluginSlug ?? '',\n\t\t\t\tAdminThemeMetadata.shape.pluginSlug\n\t\t\t);\n\t\t\tthis.identifierPrefix = observableWithZodValidation(\n\t\t\t\tmetadata.identifierPrefix ?? '',\n\t\t\t\tAdminThemeMetadata.shape.identifierPrefix\n\t\t\t);\n\n\t\t\tthis.pluginVersion = observableWithZodValidation(\n\t\t\t\tmetadata.pluginVersion ?? '',\n\t\t\t\tAdminThemeMetadata.shape.pluginVersion\n\t\t\t);\n\t\t\tthis.pluginUrl = observableWithZodValidation(\n\t\t\t\tmetadata.pluginUrl ?? '',\n\t\t\t\tAdminThemeMetadata.shape.pluginUrl\n\t\t\t);\n\t\t\tthis.authorName = observableWithZodValidation(\n\t\t\t\tmetadata.authorName ?? '',\n\t\t\t\tAdminThemeMetadata.shape.authorName\n\t\t\t);\n\t\t\tthis.authorUrl = observableWithZodValidation(\n\t\t\t\tmetadata.authorUrl ?? '',\n\t\t\t\tAdminThemeMetadata.shape.authorUrl\n\t\t\t);\n\t\t\tthis.requiredWpVersion = observableWithZodValidation(\n\t\t\t\tmetadata.requiredWpVersion ?? '',\n\t\t\t\tAdminThemeMetadata.shape.requiredWpVersion\n\t\t\t);\n\t\t\tthis.testedWpVersion = observableWithZodValidation(\n\t\t\t\tmetadata.testedWpVersion ?? '',\n\t\t\t\tAdminThemeMetadata.shape.testedWpVersion\n\t\t\t);\n\n\t\t\tthis.wasEverConfirmed = observableWithZodValidation(\n\t\t\t\tmetadata.wasEverConfirmed ?? false,\n\t\t\t\tAdminThemeMetadata.shape.wasEverConfirmed\n\t\t\t);\n\t\t}\n\n\t\tpublic toObject(): AdminThemeMetadata {\n\t\t\treturn {\n\t\t\t\tpluginName: this.pluginName(),\n\t\t\t\tshortDescription: this.shortDescription(),\n\t\t\t\tpluginSlug: this.pluginSlug(),\n\t\t\t\tidentifierPrefix: this.identifierPrefix(),\n\t\t\t\tpluginVersion: this.pluginVersion(),\n\t\t\t\tpluginUrl: this.pluginUrl(),\n\t\t\t\tauthorName: this.authorName(),\n\t\t\t\tauthorUrl: this.authorUrl(),\n\t\t\t\trequiredWpVersion: this.requiredWpVersion(),\n\t\t\t\ttestedWpVersion: this.testedWpVersion(),\n\t\t\t\twasEverConfirmed: this.wasEverConfirmed()\n\t\t\t};\n\t\t}\n\n\t\tisValid(): boolean {\n\t\t\t//This seems really inelegant, but I can't think of a better way to do it.\n\t\t\treturn this.pluginName.ameIsValid()\n\t\t\t\t&& this.shortDescription.ameIsValid()\n\t\t\t\t&& this.pluginSlug.ameIsValid()\n\t\t\t\t&& this.identifierPrefix.ameIsValid()\n\t\t\t\t&& this.pluginVersion.ameIsValid()\n\t\t\t\t&& this.pluginUrl.ameIsValid()\n\t\t\t\t&& this.authorName.ameIsValid()\n\t\t\t\t&& this.authorUrl.ameIsValid()\n\t\t\t\t&& this.requiredWpVersion.ameIsValid()\n\t\t\t\t&& this.testedWpVersion.ameIsValid()\n\t\t\t\t&& this.wasEverConfirmed.ameIsValid();\n\t\t}\n\t}\n\n\tenum MetadataDialogMode {\n\t\tDownload,\n\t\tEdit\n\t}\n\n\tclass DownloadThemeDialog extends AmeBaseKnockoutDialog {\n\t\tpublic readonly meta: KnockoutObservable;\n\t\tpublic readonly areFieldsEditable: KnockoutComputed;\n\t\tpublic readonly isOperationInProgress: KnockoutObservable = ko.observable(false);\n\n\t\tpublic readonly mode: KnockoutObservable = ko.observable(MetadataDialogMode.Download);\n\n\t\tautoCancelButton: boolean = true;\n\t\tisConfirmButtonEnabled: KnockoutObservable;\n\t\treadonly confirmButtonLabel: KnockoutObservable;\n\n\t\tadvancedOptionsVisible: KnockoutObservable = ko.observable(false);\n\t\tadvancedOptionsToggleLabel: KnockoutComputed;\n\n\t\thelpVisible: KnockoutObservable = ko.observable(false);\n\t\thelpToggleLabel: KnockoutComputed;\n\t\thelpContainerVisible: KnockoutComputed;\n\n\t\tchangesetName: KnockoutObservable = ko.observable('');\n\t\tmetadataJson: KnockoutObservable = ko.observable('');\n\t\tdownloadCookieName: KnockoutObservable = ko.observable('');\n\n\t\tpublic readonly adminThemeTexts: Required;\n\n\t\tprivate cleanupCurrentDownload: () => void = () => {\n\t\t};\n\n\t\tconstructor(\n\t\t\tprivate readonly getChangesetName: () => string,\n\t\t\tprivate readonly savePendingChangesetData: () => JQueryPromise,\n\t\t\tprivate readonly metadataObservable: KnockoutObservable,\n\t\t\tcustomAdminThemeTexts: AdminThemeTexts\n\t\t) {\n\t\t\tsuper();\n\t\t\tthis.options.minWidth = 400;\n\n\t\t\tthis.adminThemeTexts = {\n\t\t\t\t...{\n\t\t\t\t\tgeneratorCreditPhrase: 'generated using the Admin Menu Editor Pro plugin.',\n\t\t\t\t\tstandalonePluginNote: 'The result is a standalone plugin that you can use without Admin Menu Editor Pro.',\n\t\t\t\t},\n\t\t\t\t...customAdminThemeTexts\n\t\t\t}\n\n\t\t\tlet initialMetadata = metadataObservable();\n\t\t\tif (initialMetadata === null) {\n\t\t\t\tinitialMetadata = this.getSampleMetadata();\n\t\t\t}\n\n\t\t\tthis.meta = ko.observable(new ObservableThemeMetadata(initialMetadata));\n\n\t\t\tthis.confirmButtonLabel = ko.computed(() => {\n\t\t\t\tif (this.mode() === MetadataDialogMode.Download) {\n\t\t\t\t\treturn 'Download Admin Theme';\n\t\t\t\t}\n\t\t\t\treturn 'OK';\n\t\t\t});\n\n\t\t\tthis.isConfirmButtonEnabled = ko.computed(() => {\n\t\t\t\tif (this.isOperationInProgress()) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tif (getChangesetName() === '') {\n\t\t\t\t\t//To generate an admin theme, the changeset must have already been saved.\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\treturn this.meta().isValid();\n\t\t\t});\n\n\t\t\tthis.areFieldsEditable = ko.computed(() => {\n\t\t\t\treturn !this.isOperationInProgress();\n\t\t\t});\n\n\t\t\tthis.advancedOptionsToggleLabel = ko.pureComputed((): string => {\n\t\t\t\treturn this.advancedOptionsVisible() ? 'Fewer options' : 'More options';\n\t\t\t});\n\t\t\tthis.helpToggleLabel = ko.pureComputed((): string => {\n\t\t\t\treturn this.helpVisible() ? 'Hide info' : 'How it works';\n\t\t\t});\n\n\t\t\t//Hide the help container in download mode.\n\t\t\tthis.helpContainerVisible = ko.pureComputed((): boolean => {\n\t\t\t\treturn this.mode() === MetadataDialogMode.Download;\n\t\t\t});\n\n\t\t\tthis.mode.subscribe((newMode: MetadataDialogMode) => {\n\t\t\t\tif (newMode === MetadataDialogMode.Download) {\n\t\t\t\t\tthis.title('Generate admin theme');\n\t\t\t\t} else if (newMode === MetadataDialogMode.Edit) {\n\t\t\t\t\tthis.title('Edit admin theme properties');\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tprivate getSampleMetadata() {\n\t\t\treturn AdminThemeMetadata.parse({\n\t\t\t\tpluginName: 'Custom Admin Theme',\n\t\t\t\tshortDescription: 'A custom admin theme ' + this.adminThemeTexts.generatorCreditPhrase,\n\t\t\t\tpluginVersion: '1.0',\n\t\t\t});\n\t\t}\n\n\t\tonOpen(event: JQueryEventObject, ui: any): void {\n\t\t\tlet latestMetadata = this.metadataObservable();\n\t\t\tif (latestMetadata === null) {\n\t\t\t\tlatestMetadata = this.getSampleMetadata();\n\t\t\t}\n\t\t\tthis.meta(new ObservableThemeMetadata(latestMetadata));\n\t\t}\n\n\t\ttoggleAdvancedOptions(): void {\n\t\t\tthis.advancedOptionsVisible(!this.advancedOptionsVisible());\n\t\t}\n\n\t\ttoggleHelp(): void {\n\t\t\tthis.helpVisible(!this.helpVisible());\n\t\t}\n\n\t\tonConfirm(event: JQueryEventObject) {\n\t\t\tif (!this.meta().isValid()) {\n\t\t\t\t//This should never happen because the confirm button is disabled\n\t\t\t\t//when the metadata is invalid.\n\t\t\t\talert('Error: The admin theme details are not valid.');\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst metadata = this.meta().toObject();\n\t\t\tmetadata.wasEverConfirmed = true;\n\t\t\tthis.metadataObservable(metadata);\n\n\t\t\tif (this.mode() === MetadataDialogMode.Edit) {\n\t\t\t\t//That's all we need to do in edit mode.\n\t\t\t\tthis.isOpen(false);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.triggerDownloadWithErrorReporting(metadata);\n\t\t}\n\n\t\tpublic triggerDownloadWithErrorReporting(metadata: AdminThemeMetadata) {\n\t\t\tif (this.isOperationInProgress()) {\n\t\t\t\talert('Error: Another operation is already in progress.');\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.triggerDownload(metadata)\n\t\t\t\t.fail((error: string) => {\n\t\t\t\t\tif (error !== '') {\n\t\t\t\t\t\talert('Error: ' + error);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t}\n\n\t\tprivate triggerDownload(metadata: AdminThemeMetadata): JQueryPromise {\n\t\t\tconst deferred = $.Deferred();\n\n\t\t\t//Sanity checks.\n\t\t\t//Download mode still requires a saved changeset.\n\t\t\tconst changesetName = this.getChangesetName();\n\t\t\tif (changesetName === '') {\n\t\t\t\treturn deferred.reject('The changeset has not been saved yet (name is empty).').promise();\n\t\t\t}\n\n\t\t\tthis.isOperationInProgress(true);\n\n\t\t\tconst $form = $('#ame-ac-theme-download-request-form');\n\t\t\tconst $frame = $('#ame-ac-theme-download-frame');\n\n\t\t\t//Cancel the operation and re-enable buttons if the request takes too long.\n\t\t\tlet isCancelledOrDone: boolean = false;\n\t\t\tconst requestTimeoutMs = 30000;\n\t\t\tconst requestStartTime = (new Date()).getTime();\n\t\t\tlet statusCheckInterval: ReturnType | null = null;\n\n\t\t\tconst cleanup = this.cleanupCurrentDownload = () => {\n\t\t\t\tisCancelledOrDone = true;\n\n\t\t\t\t$frame.off('load.ameAcDownloadAdminTheme');\n\t\t\t\tif (timeoutTimer) {\n\t\t\t\t\tclearTimeout(timeoutTimer);\n\t\t\t\t}\n\t\t\t\tif (statusCheckInterval) {\n\t\t\t\t\tclearInterval(statusCheckInterval);\n\t\t\t\t}\n\t\t\t\t$frame.attr('src', 'about:blank');\n\n\t\t\t\tthis.isOperationInProgress(false);\n\n\t\t\t\tif (this.cleanupCurrentDownload === cleanup) {\n\t\t\t\t\tthis.cleanupCurrentDownload = () => {\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst timeoutTimer = setTimeout(() => {\n\t\t\t\tdeferred.reject('The download operation timed out.');\n\t\t\t\tcleanup();\n\t\t\t}, requestTimeoutMs);\n\n\t\t\tthis.savePendingChangesetData().then(\n\t\t\t\t() => {\n\t\t\t\t\tif (isCancelledOrDone) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.changesetName(changesetName);\n\t\t\t\t\tthis.metadataJson(JSON.stringify(metadata));\n\n\t\t\t\t\t//The server will set a cookie with a unique name that can be used\n\t\t\t\t\t//to check if the download has been initiated. Note that the user\n\t\t\t\t\t//can still cancel the download.\n\t\t\t\t\tconst cookieName = ('ameAcFileDownload_'\n\t\t\t\t\t\t+ new Date().getTime()\n\t\t\t\t\t\t+ '_'\n\t\t\t\t\t\t+ Math.round(Math.random() * 10000) //No dots allowed in these cookie names.\n\t\t\t\t\t);\n\t\t\t\t\tthis.downloadCookieName(cookieName);\n\n\t\t\t\t\t//Clear the frame to prevent the old response from being read.\n\t\t\t\t\t$frame.attr('src', 'about:blank');\n\t\t\t\t\ttry {\n\t\t\t\t\t\t$frame.contents().find('body').html('');\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t//Ignore but log cross-origin errors. These should not happen in practice.\n\t\t\t\t\t\tif (console && console.error) {\n\t\t\t\t\t\t\tconsole.error(e);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tstatusCheckInterval = setInterval(() => {\n\t\t\t\t\t\tconst cookieValue = $.cookie(cookieName);\n\t\t\t\t\t\tif (cookieValue) {\n\t\t\t\t\t\t\tcleanup();\n\t\t\t\t\t\t\t$.removeCookie(cookieName);\n\n\t\t\t\t\t\t\t//Close the dialog when the download starts.\n\t\t\t\t\t\t\tthis.isOpen(false);\n\t\t\t\t\t\t\tdeferred.resolve();\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ((new Date()).getTime() - requestStartTime > requestTimeoutMs) {\n\t\t\t\t\t\t\tcleanup();\n\t\t\t\t\t\t\tdeferred.reject('The download operation timed out.');\n\t\t\t\t\t\t}\n\t\t\t\t\t}, 1000);\n\n\t\t\t\t\t$frame.on('load.ameAcDownloadAdminTheme', () => {\n\t\t\t\t\t\t//Get the response from the frame. It should be JSON displayed as text.\n\t\t\t\t\t\tconst responseText = String($frame.contents().text()).trim();\n\t\t\t\t\t\tconst response = JSON.parse(responseText);\n\n\t\t\t\t\t\tcleanup();\n\n\t\t\t\t\t\tif ((response === null) || (typeof response !== 'object')) {\n\t\t\t\t\t\t\tdeferred.reject('Received an invalid response from the server.');\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (!response.success) {\n\t\t\t\t\t\t\t\tlet errorMessage;\n\t\t\t\t\t\t\t\tif (response.data.message) {\n\t\t\t\t\t\t\t\t\terrorMessage = response.data.message;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\terrorMessage = 'An unknown error occurred on the server.';\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdeferred.reject(errorMessage);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t//This should never happen in practice.\n\t\t\t\t\t\t\t\tdeferred.reject('The server did not start the download correctly.');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\t$form.trigger('submit');\n\t\t\t\t},\n\t\t\t\t() => {\n\t\t\t\t\tif (isCancelledOrDone) {\n\t\t\t\t\t\tif (deferred.state() === 'pending') {\n\t\t\t\t\t\t\tdeferred.reject(''); //No error message; the user probably cancelled the operation.\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tcleanup();\n\t\t\t\t\tdeferred.reject('Could not save the changeset data before generating an admin theme.');\n\t\t\t\t}\n\t\t\t);\n\n\t\t\treturn deferred.promise();\n\t\t}\n\n\t\tonClose(event: JQueryEventObject, ui: any) {\n\t\t\tthis.cleanupCurrentDownload();\n\t\t}\n\t}\n\n\t//endregion\n\n\tclass SectionNavigation {\n\t\tprivate sectionNavStack: KnockoutObservableArray = ko.observableArray([] as string[]);\n\t\tprivate $sectionList: JQuery;\n\n\t\tpublic readonly breadcrumbs: KnockoutObservable;\n\n\t\tconstructor() {\n\t\t\tthis.$sectionList = $('#ame-ac-container-collection');\n\n\t\t\tthis.$sectionList.on('click', '.ame-ac-section-link', (event) => {\n\t\t\t\tevent.preventDefault()\n\n\t\t\t\tif (event.currentTarget === null) {\n\t\t\t\t\treturn; //Shouldn't happen in practice, but let's satisfy the type checker.\n\t\t\t\t}\n\n\t\t\t\tconst targetId = $(event.currentTarget).data('target-id');\n\t\t\t\tif (targetId) {\n\t\t\t\t\tthis.navigateToSection(targetId);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis.$sectionList.on('click', '.ame-ac-section-back-button', (event) => {\n\t\t\t\tevent.preventDefault()\n\t\t\t\tthis.navigateBack();\n\t\t\t});\n\n\t\t\tthis.breadcrumbs = ko.pureComputed(() => {\n\t\t\t\treturn this.sectionNavStack()\n\t\t\t\t\t.map((sectionId) => $('#' + sectionId))\n\t\t\t\t\t.filter(($section) => $section.length > 0)\n\t\t\t\t\t.map(($section) => {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\ttitle: $section.find('.ame-ac-section-title .ame-ac-section-own-title')\n\t\t\t\t\t\t\t\t.first().text()\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t});\n\t\t}\n\n\t\tnavigateToSection(sectionElementId: string) {\n\t\t\tconst $section = $('#' + sectionElementId);\n\t\t\tif ($section.length === 0) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ($section.hasClass('ame-ac-current-section')) {\n\t\t\t\treturn; //Already on this section.\n\t\t\t}\n\n\t\t\t//If the requested section is in the navigation stack, navigate back\n\t\t\t//to it instead of putting more sections on the stack.\n\t\t\tconst stackIndex = this.sectionNavStack.indexOf(sectionElementId);\n\t\t\tif (stackIndex !== -1) {\n\t\t\t\twhile (this.sectionNavStack().length > stackIndex) {\n\t\t\t\t\tthis.navigateBack();\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst $previousSection = this.$sectionList.find('.ame-ac-current-section');\n\t\t\tif ($previousSection.length > 0) {\n\t\t\t\tthis.expectTransition($previousSection, '.ame-ac-section');\n\t\t\t\t$previousSection\n\t\t\t\t\t.removeClass('ame-ac-current-section')\n\t\t\t\t\t.addClass('ame-ac-previous-section');\n\t\t\t\tthis.sectionNavStack.push($previousSection.attr('id'));\n\n\t\t\t\t$previousSection.trigger('adminMenuEditor:leaveSection');\n\t\t\t}\n\n\t\t\tthis.expectTransition($section, '.ame-ac-section');\n\t\t\t$section.addClass('ame-ac-current-section');\n\n\t\t\t$section.trigger('adminMenuEditor:enterSection');\n\t\t}\n\n\t\tnavigateBack() {\n\t\t\tif (this.sectionNavStack().length < 1) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst $newCurrentSection = $('#' + this.sectionNavStack.pop());\n\t\t\tif ($newCurrentSection.length === 0) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst $oldCurrentSection = this.$sectionList.find('.ame-ac-current-section');\n\t\t\tthis.expectTransition($oldCurrentSection, '.ame-ac-section');\n\t\t\t$oldCurrentSection.removeClass('ame-ac-current-section ame-ac-previous-section');\n\t\t\t$oldCurrentSection.trigger('adminMenuEditor:leaveSection');\n\n\t\t\tconst $oldPreviousSection = this.$sectionList.find('.ame-ac-previous-section');\n\t\t\t$oldPreviousSection.removeClass('ame-ac-previous-section');\n\n\t\t\t//Show the new current section.\n\t\t\tthis.expectTransition($newCurrentSection, '.ame-ac-section');\n\t\t\t$newCurrentSection.addClass('ame-ac-current-section');\n\t\t\t$newCurrentSection.trigger('adminMenuEditor:enterSection');\n\n\t\t\t//The next section in the stack becomes the previous section.\n\t\t\tif (this.sectionNavStack().length > 0) {\n\t\t\t\tthis.$sectionList.find('#' + this.sectionNavStack()[this.sectionNavStack().length - 1])\n\t\t\t\t\t.addClass('ame-ac-previous-section');\n\t\t\t}\n\t\t}\n\n\t\t//Add a special class to sections when they have an active CSS transition.\n\t\t//This is used to keep both sections visible while the previous section\n\t\t//slides out and the next section slides in.\n\t\texpectTransition($element: JQuery, requiredSelector: string) {\n\t\t\tif (prefersReducedMotion) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ($element.data('ameHasTransitionEvents')) {\n\t\t\t\treturn; //Event handler(s) already added.\n\t\t\t}\n\n\t\t\tconst transitionEvents = 'transitionend transitioncancel';\n\n\t\t\t$element.addClass('ame-ac-transitioning');\n\n\t\t\tfunction transitionEndCallback(event: JQueryEventObject) {\n\t\t\t\t//Ignore events that bubble from child elements.\n\t\t\t\tif (!$(event.target).is(requiredSelector)) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t$element\n\t\t\t\t\t.off(transitionEvents, transitionEndCallback)\n\t\t\t\t\t.data('ameHasTransitionEvents', null)\n\t\t\t\t\t.removeClass('ame-ac-transitioning');\n\t\t\t}\n\n\t\t\t$element.data('ameHasTransitionEvents', true);\n\t\t\t$element.on(transitionEvents, transitionEndCallback);\n\t\t}\n\t}\n\n\texport interface NavigationBreadcrumb {\n\t\ttitle: string;\n\t}\n\n\t/**\n\t * Whether to ask for confirmation when the user tries to exit the customizer.\n\t */\n\tenum ExitPromptMode {\n\t\t/**\n\t\t * Ask if there are unsaved changes.\n\t\t */\n\t\tUnsavedChanges = 1,\n\n\t\t/**\n\t\t * Ask if the current changeset hasn't been published yet.\n\t\t */\n\t\tUnpublishedChanges = 2\n\t}\n\n\texport class AdminCustomizer extends AmeAdminCustomizerBase.AdminCustomizerBase implements CustomizableVmInterface {\n\t\tprivate readonly exitPromptMessage = 'Unsaved changes will be lost if you navigate away from this page.';\n\t\t//Admin themes generated by this plugin should be fairly small.\n\t\tprivate readonly maxImportFileSize = 500 * 1024;\n\n\t\tsectionNavigation: SectionNavigation;\n\t\tsettings: CustomizerSettingsCollection;\n\t\tpublic readonly interfaceStructure: InterfaceStructure;\n\n\t\tprivate readonly $previewFrame: JQuery;\n\n\t\t/**\n\t\t * Preview frame URL.\n\t\t */\n\t\tprivate currentPreviewUrl: string | null = null;\n\t\t/**\n\t\t * The default preview URL that can be used when the current frame URL cannot be detected.\n\t\t */\n\t\tprivate readonly initialPreviewUrl: string;\n\t\tprivate previewConnection: ReturnType | null = null;\n\t\tprivate readonly refreshPreviewNonce: string;\n\n\t\tprivate readonly $saveButton: JQuery;\n\n\t\tpublic readonly downloadThemeDialog: DownloadThemeDialog;\n\t\tprivate $extraActionMenu: JQuery | null = null;\n\t\tprivate $extraActionButton: JQuery | null = null;\n\n\t\tprivate $importFileInput: JQuery | null = null;\n\t\tprivate isImporting: KnockoutObservable = ko.observable(false);\n\t\tprivate lastImportReport: KnockoutObservable = ko.observable(null);\n\t\tprivate isImportReportVisible: KnockoutObservable = ko.observable(true);\n\n\t\tprivate isDiscardingChanges: KnockoutObservable = ko.observable(false);\n\n\t\tpublic readonly isGeneralOverlayVisible: KnockoutObservable;\n\n\t\tprivate readonly importActionEnabled: KnockoutComputed;\n\t\tprivate readonly discardChangesActionEnabled: KnockoutComputed;\n\t\tprivate readonly downloadThemeActionEnabled: KnockoutComputed;\n\n\t\tprivate readonly customBasePath: string | null;\n\t\tprivate readonly consoleLoggingEnabled: boolean;\n\t\tprivate readonly exitPromptMode: ExitPromptMode;\n\n\t\tconstructor(scriptData: ScriptData) {\n\t\t\tsuper(scriptData);\n\n\t\t\tthis.settings = new CustomizerSettingsCollection(\n\t\t\t\tscriptData.ajaxUrl,\n\t\t\t\tscriptData.saveChangesetNonce,\n\t\t\t\tscriptData.trashChangesetNonce,\n\t\t\t\tscriptData.changesetName,\n\t\t\t\tscriptData.changesetItemCount,\n\t\t\t\tscriptData.changesetStatus\n\t\t\t);\n\t\t\t_.forOwn(scriptData.settings, (data, id) => {\n\t\t\t\tif (typeof id === 'string') {\n\t\t\t\t\tthis.settings.add(unserializeSetting(id, data));\n\t\t\t\t}\n\t\t\t});\n\t\t\tif (scriptData.changesetThemeMetadata) {\n\t\t\t\tthis.settings.addInitialThemeMetadata(scriptData.changesetThemeMetadata);\n\t\t\t}\n\n\t\t\tthis.customBasePath = scriptData.customBasePath || null;\n\t\t\tthis.consoleLoggingEnabled = scriptData.isWpDebugEnabled || false;\n\n\t\t\tif ((typeof scriptData.exitPromptMode === 'number') && (scriptData.exitPromptMode in ExitPromptMode)) {\n\t\t\t\tthis.exitPromptMode = scriptData.exitPromptMode;\n\t\t\t} else {\n\t\t\t\tthis.exitPromptMode = ExitPromptMode.UnpublishedChanges;\n\t\t\t}\n\n\t\t\tlet sectionIdCounter = 0;\n\n\t\t\tthis.interfaceStructure = unserializeUiElement(\n\t\t\t\tscriptData.interfaceStructure,\n\t\t\t\tthis.settings.get.bind(this.settings),\n\t\t\t\t(data: AnySpecificElementData) => {\n\t\t\t\t\tswitch (data.t) {\n\t\t\t\t\t\tcase 'section':\n\t\t\t\t\t\t\tdata.component = 'ame-ac-section';\n\t\t\t\t\t\t\t//All sections must have unique IDs for navigation to work.\n\t\t\t\t\t\t\tif (!data.id) {\n\t\t\t\t\t\t\t\tdata.id = 'autoID-' + (++sectionIdCounter);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'control-group':\n\t\t\t\t\t\t\tdata.component = 'ame-ac-control-group';\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'control':\n\t\t\t\t\t\t\t//Tell controls that use number inputs to position the popup\n\t\t\t\t\t\t\t//slider within the customizer sidebar.\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t(data.component === 'ame-number-input')\n\t\t\t\t\t\t\t\t|| (data.component === 'ame-box-dimensions')\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tdata.params = data.params || {};\n\t\t\t\t\t\t\t\tdata.params.popupSliderWithin = '#ame-ac-sidebar-content';\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t//Replace regular separators with AC-specific ones.\n\t\t\t\t\t\t\tif (data.component === 'ame-horizontal-separator') {\n\t\t\t\t\t\t\t\tdata.component = 'ame-ac-separator';\n\t\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t);\n\n\t\t\t//Remove the reload parameter from the URL. It is only used to avoid\n\t\t\t//caching issues, and is not needed otherwise.\n\t\t\tconst currentUrl = new URL(window.location.href);\n\t\t\tif (currentUrl.searchParams.get('_ame-ac-reload') !== null) {\n\t\t\t\tcurrentUrl.searchParams.delete('_ame-ac-reload');\n\t\t\t\twindow.history.replaceState({}, '', currentUrl.href);\n\t\t\t}\n\n\t\t\t//Also remove the \"request new changeset\" parameter.\n\t\t\tif (currentUrl.searchParams.get('_ame-ac-new-changeset') !== null) {\n\t\t\t\tcurrentUrl.searchParams.delete('_ame-ac-new-changeset');\n\t\t\t\twindow.history.replaceState({}, '', currentUrl.href);\n\t\t\t}\n\n\t\t\tconst changesetPathTemplate: string | null = scriptData.changesetPathTemplate;\n\t\t\tconst changesetPlaceholder = '{changeset}';\n\n\t\t\tfunction addChangesetToUrl(currentUrl: string, changesetName: string): URL {\n\t\t\t\tconst url = new URL(currentUrl);\n\t\t\t\tif (changesetPathTemplate) {\n\t\t\t\t\turl.pathname = changesetPathTemplate.replace(changesetPlaceholder, changesetName);\n\t\t\t\t\t//With a custom path, the \"page\" parameter that points to the AC\n\t\t\t\t\t//admin page is not necessary and would be confusing.\n\t\t\t\t\turl.searchParams.delete('page');\n\t\t\t\t\t//When the changeset name is stored in the path, the \"ame-ac-changeset\"\n\t\t\t\t\t//parameter is no longer needed, and could be out of sync with the path.\n\t\t\t\t\turl.searchParams.delete('ame-ac-changeset');\n\t\t\t\t} else {\n\t\t\t\t\turl.searchParams.set('ame-ac-changeset', changesetName);\n\t\t\t\t}\n\t\t\t\treturn url;\n\t\t\t}\n\n\t\t\tfunction getChangesetFromUrl(url: string): string {\n\t\t\t\tconst parsedUrl = new URL(url);\n\t\t\t\tif (changesetPathTemplate) {\n\t\t\t\t\tfunction escapeRegExp(input: string): string {\n\t\t\t\t\t\treturn input.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n\t\t\t\t\t}\n\n\t\t\t\t\tconst placeholderStart = changesetPathTemplate.indexOf(changesetPlaceholder);\n\t\t\t\t\tconst placeholderEnd = placeholderStart + changesetPlaceholder.length;\n\n\t\t\t\t\tconst changesetPathTemplateRegex = new RegExp(\n\t\t\t\t\t\t'^' + escapeRegExp(changesetPathTemplate.slice(0, placeholderStart))\n\t\t\t\t\t\t+ '([^a-zA-Z0-9]+)'\n\t\t\t\t\t\t+ escapeRegExp(changesetPathTemplate.slice(placeholderEnd))\n\t\t\t\t\t);\n\n\t\t\t\t\tconst match = parsedUrl.pathname.match(changesetPathTemplateRegex);\n\t\t\t\t\treturn match ? match[1] : '';\n\t\t\t\t} else {\n\t\t\t\t\treturn parsedUrl.searchParams.get('ame-ac-changeset') ?? '';\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t//Add the changeset name to the URL (if not already present).\n\t\t\tif (getChangesetFromUrl(window.location.href) !== this.settings.changesetName()) {\n\t\t\t\tconst newUrl = addChangesetToUrl(window.location.href, this.settings.changesetName());\n\t\t\t\twindow.history.replaceState({}, '', newUrl.href);\n\t\t\t}\n\n\t\t\t//When the changeset name changes, also change the URL.\n\t\t\tthis.settings.changesetName.subscribe((changesetName) => {\n\t\t\t\tconst url = addChangesetToUrl(window.location.href, changesetName);\n\t\t\t\tif (scriptData.changesetPushStateEnabled) {\n\t\t\t\t\twindow.history.pushState({}, '', url.href);\n\t\t\t\t} else {\n\t\t\t\t\twindow.history.replaceState({}, '', url.href);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis.$saveButton = $('#ame-ac-apply-changes');\n\n\t\t\t//The save button should be enabled when:\n\t\t\t// - There are non-zero changes in the current changeset.\n\t\t\t// - All settings are valid.\n\t\t\t// - The changeset is not in the process of being published, deleted, etc.\n\t\t\t// - The contents of the changeset can be modified (e.g. not already published).\n\t\t\tconst isSaveButtonEnabled = ko.pureComputed(() => {\n\t\t\t\tconst changeset = this.settings.getCurrentChangeset();\n\t\t\t\treturn (\n\t\t\t\t\tchangeset.isNonEmpty()\n\t\t\t\t\t&& changeset.canBeModified()\n\t\t\t\t\t&& !this.settings.isExclusiveOperationInProgress()\n\t\t\t\t\t&& !this.settings.hasValidationErrors()\n\t\t\t\t);\n\t\t\t});\n\t\t\t//Update button state when the customizer loads.\n\t\t\tthis.$saveButton.prop('disabled', !isSaveButtonEnabled());\n\t\t\t//And also on changes.\n\t\t\tisSaveButtonEnabled.subscribe((isEnabled) => {\n\t\t\t\tthis.$saveButton.prop('disabled', !isEnabled);\n\t\t\t\t//Change the text back to the default when the button is enabled.\n\t\t\t\tif (isEnabled) {\n\t\t\t\t\tthis.$saveButton.val(this.$saveButton.data('default-text') ?? 'Save Changes');\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t//Handle the \"Save Changes\" button.\n\t\t\tthis.$saveButton.on('click', () => {\n\t\t\t\t//Show the spinner.\n\t\t\t\tconst $spinner = $('#ame-ac-primary-actions .spinner');\n\t\t\t\t$spinner.css('visibility', 'visible').show();\n\n\t\t\t\tconst publishFailNoticeId = 'ame-ac-publish-failed-notice';\n\t\t\t\t//Remove the previous error notification, if any.\n\t\t\t\t$('#' + publishFailNoticeId).remove();\n\n\t\t\t\tconst promise = this.settings.publishChangeset();\n\n\t\t\t\tpromise.fail((error) => {\n\t\t\t\t\t//Show a dismissible error notification.\n\t\t\t\t\tlet message = 'An unexpected error occurred while saving changes.';\n\t\t\t\t\tif (typeof error === 'string') {\n\t\t\t\t\t\tmessage = error;\n\t\t\t\t\t} else if (error instanceof Error) {\n\t\t\t\t\t\tmessage = error.message;\n\t\t\t\t\t} else if (typeof error.responseJSON === 'object') {\n\t\t\t\t\t\tmessage = _.get(error.responseJSON, ['data', 'message'], message);\n\t\t\t\t\t}\n\n\t\t\t\t\tconst $notice = $('
')\n\t\t\t\t\t\t.attr('id', publishFailNoticeId)\n\t\t\t\t\t\t.addClass('notice notice-error is-dismissible')\n\t\t\t\t\t\t.text(message);\n\n\t\t\t\t\t//WordPress won't automatically add the dismiss button to a dynamically\n\t\t\t\t\t//generated notice like this, so we have to do it.\n\t\t\t\t\t$notice.append(\n\t\t\t\t\t\t$('')\n\t\t\t\t\t\t\t.append('Dismiss this notice')\n\t\t\t\t\t\t\t.on('click', (event) => {\n\t\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\t\t$notice.remove(); //Not as fancy as WP does it.\n\t\t\t\t\t\t\t})\n\t\t\t\t\t);\n\n\t\t\t\t\tconst $container = $('#ame-ac-global-notification-area');\n\t\t\t\t\t$container.append($notice);\n\t\t\t\t})\n\n\t\t\t\tpromise.done(() => {\n\t\t\t\t\tthis.$saveButton.val(this.$saveButton.data('published-text') ?? 'Saved');\n\n\t\t\t\t\t//The preview could be stale. For example, the color scheme module\n\t\t\t\t\t//switches between \"actual\" and \"preview\" color schemes dynamically,\n\t\t\t\t\t//but the \"actual\" scheme could change after applying new settings.\n\t\t\t\t\t//Let's reload the preview frame to make sure it's up-to-date.\n\t\t\t\t\tthis.queuePreviewFrameReload();\n\t\t\t\t});\n\n\t\t\t\tpromise.always(() => {\n\t\t\t\t\t$spinner.css('visibility', 'hidden');\n\t\t\t\t});\n\t\t\t});\n\n\t\t\t//Prevent the user from interacting with settings while the changeset is being modified.\n\t\t\tthis.settings.isExclusiveOperationInProgress.subscribe((isInProgress) => {\n\t\t\t\t$('#ame-ac-sidebar-blocker-overlay').toggle(isInProgress);\n\t\t\t});\n\n\t\t\t//Show a general overlay with a progress spinner while something is happening.\n\t\t\tthis.isGeneralOverlayVisible = ko.pureComputed(() => {\n\t\t\t\treturn this.isImporting() || this.isDiscardingChanges();\n\t\t\t});\n\n\t\t\t//Initialize the \"download admin theme\" dialog.\n\t\t\tthis.downloadThemeDialog = new DownloadThemeDialog(\n\t\t\t\t() => this.settings.getCurrentChangeset().name(),\n\t\t\t\t() => this.settings.savePendingSettings(),\n\t\t\t\tthis.settings.adminThemeMetadata,\n\t\t\t\tscriptData\n\t\t\t);\n\n\t\t\t//Toggle available extra actions based on changeset status.\n\t\t\tthis.importActionEnabled = ko.pureComputed(() => {\n\t\t\t\tconst changeset = this.settings.getCurrentChangeset();\n\t\t\t\treturn changeset && changeset.canBeModified()\n\t\t\t\t\t&& !this.settings.isExclusiveOperationInProgress();\n\t\t\t});\n\t\t\tthis.importActionEnabled.subscribe((isEnabled) => {\n\t\t\t\tif (this.$extraActionMenu) {\n\t\t\t\t\tthis.$extraActionMenu.find('.ame-ac-import-theme-action')\n\t\t\t\t\t\t.toggleClass('ui-state-disabled', !isEnabled);\n\t\t\t\t}\n\t\t\t});\n\t\t\tthis.discardChangesActionEnabled = ko.pureComputed(() => {\n\t\t\t\tconst changeset = this.settings.getCurrentChangeset();\n\t\t\t\treturn changeset && changeset.isNonEmpty() && changeset.canBeModified()\n\t\t\t\t\t&& !this.settings.isExclusiveOperationInProgress()\n\t\t\t});\n\t\t\tthis.discardChangesActionEnabled.subscribe((isEnabled) => {\n\t\t\t\tif (this.$extraActionMenu) {\n\t\t\t\t\tthis.$extraActionMenu.find('.ame-ac-discard-changes-action')\n\t\t\t\t\t\t.toggleClass('ui-state-disabled', !isEnabled);\n\t\t\t\t}\n\t\t\t});\n\t\t\tthis.downloadThemeActionEnabled = ko.pureComputed(() => {\n\t\t\t\treturn (\n\t\t\t\t\t!this.settings.isExclusiveOperationInProgress()\n\t\t\t\t\t&& !this.downloadThemeDialog.isOperationInProgress()\n\t\t\t\t\t//The changeset must already be saved for the download to work,\n\t\t\t\t\t//which means it should have a name.\n\t\t\t\t\t&& (this.settings.getCurrentChangeset().name() !== '')\n\t\t\t\t\t//The changeset should probably be non-empty.\n\t\t\t\t\t&& this.settings.getCurrentChangeset().isNonEmpty()\n\t\t\t\t);\n\t\t\t});\n\t\t\tthis.downloadThemeActionEnabled.subscribe((isEnabled) => {\n\t\t\t\tif (this.$extraActionMenu) {\n\t\t\t\t\tthis.$extraActionMenu.find('.ame-ac-download-theme-action')\n\t\t\t\t\t\t.toggleClass('ui-state-disabled', !isEnabled);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis.sectionNavigation = new SectionNavigation();\n\n\t\t\t//Set up the preview frame.\n\t\t\tthis.$previewFrame = $('iframe#ame-ac-preview');\n\n\t\t\tthis.initialPreviewUrl = scriptData.initialPreviewUrl;\n\t\t\tthis.refreshPreviewNonce = scriptData.refreshPreviewNonce;\n\n\t\t\tthis.$previewFrame.on('load', () => {\n\t\t\t\tthis.isFrameLoading = false;\n\n\t\t\t\t//The URL that was actually loaded might not match the one that\n\t\t\t\t//was requested (e.g. because there was a redirect).\n\t\t\t\tthis.currentPreviewUrl = null;\n\n\t\t\t\t//Close the previous postMessage connection.\n\t\t\t\tif (this.previewConnection) {\n\t\t\t\t\tthis.previewConnection.disconnect();\n\t\t\t\t\tthis.previewConnection = null;\n\t\t\t\t}\n\n\t\t\t\tconst frame = this.$previewFrame.get(0) as HTMLIFrameElement;\n\t\t\t\tif (!frame || !(frame instanceof HTMLIFrameElement)) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t//Try to get the preview URL from the iframe.\n\t\t\t\ttry {\n\t\t\t\t\tconst url = frame.contentWindow?.location.href;\n\t\t\t\t\tif (url) {\n\t\t\t\t\t\tthis.currentPreviewUrl = url;\n\t\t\t\t\t}\n\t\t\t\t} catch (e) {\n\t\t\t\t\t//We can't get the URL directly, probably because it's a cross-origin iframe.\n\t\t\t\t}\n\n\t\t\t\tthis.previewConnection = AmeAcCommunicator.connectToChild(\n\t\t\t\t\tframe,\n\t\t\t\t\t{\n\t\t\t\t\t\t'setPreviewUrl': (url: string) => {\n\t\t\t\t\t\t\tif (this.isPreviewableUrl(url)) {\n\t\t\t\t\t\t\t\tthis.previewUrl = url;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t'notifyPreviewUrlChanged': (url: string) => {\n\t\t\t\t\t\t\tthis.currentPreviewUrl = url;\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tthis.allowedCommOrigins,\n\t\t\t\t\tscriptData.isWpDebugEnabled\n\t\t\t\t);\n\n\t\t\t\tthis.previewConnection.promise.then((connection) => {\n\t\t\t\t\tif (typeof connection === 'undefined') {\n\t\t\t\t\t\t//This should never happen, but the type checker doesn't know that.\n\t\t\t\t\t\tthrow new Error('Unexpected error: Connection apparently succeeded, but the connection object is undefined');\n\t\t\t\t\t}\n\n\t\t\t\t\tconnection.execute('getCurrentUrl').then((url) => {\n\t\t\t\t\t\tif (url && (typeof url === 'string')) {\n\t\t\t\t\t\t\tthis.currentPreviewUrl = url;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\t//Notify other scripts that the preview frame is loaded and\n\t\t\t\t\t//the postMessage connection is ready for use.\n\t\t\t\t\t$('body').trigger('adminMenuEditor:acPreviewConnectionReady');\n\t\t\t\t});\n\t\t\t});\n\n\t\t\tthis.previewUrl = this.initialPreviewUrl;\n\n\t\t\t//Notify other scripts. This lets them register custom controls and so on.\n\t\t\t$('#ame-ac-admin-customizer').trigger('adminMenuEditor:acRegister', [this]);\n\n\t\t\tconst throttledReloadPreview = _.throttle(\n\t\t\t\t() => {\n\t\t\t\t\tthis.queuePreviewFrameReload();\n\t\t\t\t},\n\t\t\t\t1000, //The reload method does its own throttling, so we use a low wait time here.\n\t\t\t\t{leading: true, trailing: true}\n\t\t\t);\n\n\t\t\t//Refresh the preview when any setting changes.\n\t\t\tthis.settings.addChangeListener((setting, newValue) => {\n\t\t\t\tif (\n\t\t\t\t\tsetting.supportsPostMessage\n\t\t\t\t\t&& this.previewConnection\n\t\t\t\t\t&& this.previewConnection.isConnected\n\t\t\t\t) {\n\t\t\t\t\tthis.previewConnection.execute('previewSetting', setting.id, newValue);\n\t\t\t\t} else {\n\t\t\t\t\tlet reason: string = 'Unknown';\n\t\t\t\t\tif (!setting.supportsPostMessage) {\n\t\t\t\t\t\treason = 'Setting \"' + setting.id + '\" does not support postMessage';\n\t\t\t\t\t} else if (!this.previewConnection) {\n\t\t\t\t\t\treason = 'No preview connection';\n\t\t\t\t\t} else if (!this.previewConnection.isConnected) {\n\t\t\t\t\t\treason = 'Preview connection is not connected';\n\t\t\t\t\t}\n\t\t\t\t\tthis.log('Reloading the preview frame because: ' + reason);\n\n\t\t\t\t\tthrottledReloadPreview();\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tconst registerUnloadPrompt = () => {\n\t\t\t\t//Ask for confirmation when the user tries to leave the page and the changeset\n\t\t\t\t//has unpublished/unsaved changes.\n\t\t\t\t$(window).on('beforeunload.ame-ac-exit-confirm', (event) => {\n\t\t\t\t\tif (this.isExitPromptNeeded()) {\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t//Note: The confirmation prompt will only be displayed if the user\n\t\t\t\t\t\t//has interacted with the page (e.g. clicked something).\n\n\t\t\t\t\t\t//As of this writing, MDN says that some browsers still don't support triggering\n\t\t\t\t\t\t//an \"unsaved changes\" prompt with event.preventDefault(). You need to set\n\t\t\t\t\t\t//event.returnValue to a string or return a string from the event handler.\n\t\t\t\t\t\t//Modern browsers will ignore the content and display their own generic message.\n\t\t\t\t\t\treturn this.exitPromptMessage;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t/*\n\t\t\t Allegedly, registering a beforeunload handler can cause the browser to\n\t\t\t disable some optimizations, so let's only do it when the user changes\n\t\t\t something or the changeset already contains some changes.\n\t\t\t */\n\t\t\tif (this.settings.getCurrentChangeset().isNonEmpty()) {\n\t\t\t\tregisterUnloadPrompt();\n\t\t\t} else {\n\t\t\t\tconst listenerId = this.settings.addChangeListener(() => {\n\t\t\t\t\t//Remove the listener after it has been triggered once.\n\t\t\t\t\tthis.settings.removeChangeListener(listenerId);\n\t\t\t\t\tregisterUnloadPrompt();\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tgetSettingObservable(settingId: string, defaultValue: any): KnockoutObservable {\n\t\t\t//Let's just implement this temporarily while working on refactoring this\n\t\t\t//stuff to use KO components.\n\t\t\treturn this.settings\n\t\t\t\t.get(settingId)\n\t\t\t\t.map(setting => setting.value)\n\t\t\t\t.getOrElse(ko.observable(defaultValue));\n\t\t}\n\n\t\tgetAllSettingValues(): Record {\n\t\t\tthrow new Error('Method not implemented.');\n\t\t}\n\n\t\tget previewUrl(): string | null {\n\t\t\treturn this.currentPreviewUrl;\n\t\t}\n\n\t\tset previewUrl(url: string | null) {\n\t\t\tif (url === this.currentPreviewUrl) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t//The URL starts out as null, but it cannot be set to NULL again after\n\t\t\t//the preview frame has been loaded.\n\t\t\tif (url === null) {\n\t\t\t\tthrow new Error('Cannot directly set preview URL to null');\n\t\t\t}\n\n\t\t\tif (this.isPreviewableUrl(url)) {\n\t\t\t\tthis.navigatePreviewFrame(url);\n\t\t\t}\n\t\t}\n\n\t\tprivate navigatePreviewFrame(url: string | null = null, forceReload: boolean = false) {\n\t\t\tconst oldUrl = this.previewUrl;\n\t\t\tif (url === null) {\n\t\t\t\turl = oldUrl ?? this.initialPreviewUrl;\n\t\t\t}\n\n\t\t\tconst isSameUrl = (oldUrl === url);\n\t\t\tif (isSameUrl && !forceReload) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t//If there are any unsaved changes, let's include them in the preview by simulating\n\t\t\t//a form submission and sending the changes as form data. The server-side component\n\t\t\t//will merge these changes with existing changeset data.\n\t\t\tconst unsavedChanges = this.settings.unsavedChanges;\n\t\t\tconst simulateFormSubmission = !_.isEmpty(unsavedChanges);\n\n\t\t\tconst parsedUrl = new URL(url);\n\n\t\t\t//If we're not using form submission, add a special parameter\n\t\t\t//to the URL to force a refresh.\n\t\t\tconst refreshParam = '_ame-ac-refresh-trigger';\n\t\t\tif (isSameUrl && !simulateFormSubmission) {\n\t\t\t\tparsedUrl.searchParams.set(refreshParam, Date.now() + '_' + Math.random());\n\t\t\t} else {\n\t\t\t\t//Otherwise, remove the parameter just to be safe.\n\t\t\t\tparsedUrl.searchParams.delete(refreshParam);\n\t\t\t}\n\n\t\t\t//Ensure that the changeset used in the preview matches the current\n\t\t\t//changeset and preview is enabled. This is just a precaution. Normally,\n\t\t\t//the preview script automatically changes link URLs.\n\t\t\tlet changesetName = this.settings.changesetName();\n\t\t\tif (changesetName === '') {\n\t\t\t\t//Use a special value if the changeset hasn't been saved yet.\n\t\t\t\tchangesetName = TemporaryChangesetName;\n\t\t\t}\n\t\t\tparsedUrl.searchParams.set('ame-ac-changeset', changesetName);\n\t\t\tparsedUrl.searchParams.set('ame-ac-preview', '1');\n\n\t\t\tthis.hasPendingPreviewReload = false; //Reloading now, so no longer pending.\n\t\t\tthis.isFrameLoading = true;\n\n\t\t\t//console.info('navigatePreviewFrame: Navigating to ' + parsedUrl.href);\n\t\t\tif (simulateFormSubmission) {\n\t\t\t\tconst formData = {\n\t\t\t\t\taction: 'ws_ame_ac_refresh_preview_frame',\n\t\t\t\t\t\"ame-ac-changeset\": changesetName,\n\t\t\t\t\tmodified: JSON.stringify(unsavedChanges),\n\t\t\t\t\tnonce: this.refreshPreviewNonce\n\t\t\t\t}\n\n\t\t\t\tconst $form = $('
')\n\t\t\t\t\t.attr('method', 'post')\n\t\t\t\t\t.attr('action', parsedUrl.href)\n\t\t\t\t\t.attr('target', 'ame-ac-preview-frame')\n\t\t\t\t\t.appendTo('body');\n\n\t\t\t\tlet key: keyof typeof formData;\n\t\t\t\tfor (key in formData) {\n\t\t\t\t\tconst value = formData[key];\n\t\t\t\t\t$('')\n\t\t\t\t\t\t.attr('type', 'hidden')\n\t\t\t\t\t\t.attr('name', key)\n\t\t\t\t\t\t.val(value)\n\t\t\t\t\t\t.appendTo($form);\n\t\t\t\t}\n\n\t\t\t\tthis.currentPreviewUrl = parsedUrl.href;\n\t\t\t\t$form.trigger('submit');\n\t\t\t\t$form.remove();\n\t\t\t} else {\n\t\t\t\tthis.currentPreviewUrl = parsedUrl.href;\n\t\t\t\tthis.$previewFrame.attr('src', this.currentPreviewUrl);\n\t\t\t}\n\t\t}\n\n\t\tprivate _isFrameLoading: boolean = false;\n\t\tprivate frameLoadingTimeoutId: number | null = null;\n\t\tprivate lastPreviewLoadTimestamp: Date = new Date(0);\n\n\t\tprivate reloadWaitTimeoutId: number | null = null;\n\t\tprivate hasPendingPreviewReload: boolean = false;\n\n\t\tprivate set isFrameLoading(isLoading: boolean) {\n\t\t\tconst wasLoadingBefore = this._isFrameLoading;\n\t\t\tif (!isLoading && (isLoading === wasLoadingBefore)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t//In some circumstances, we may start to load a new URL before\n\t\t\t//the previous one has finished loading. This is valid and should\n\t\t\t//reset the load timeout.\n\n\t\t\t$('#ame-ac-preview-refresh-indicator').toggleClass('ame-ac-show-indicator', isLoading);\n\t\t\tif (this.frameLoadingTimeoutId) {\n\t\t\t\tclearTimeout(this.frameLoadingTimeoutId);\n\t\t\t\tthis.frameLoadingTimeoutId = null;\n\t\t\t}\n\n\t\t\tif (isLoading) {\n\t\t\t\t//As a precaution, we'll assume that if the frame doesn't load in a reasonable\n\t\t\t\t//time, it will never finish loading.\n\t\t\t\tthis.frameLoadingTimeoutId = window.setTimeout(() => {\n\t\t\t\t\tif (this.isFrameLoading) {\n\t\t\t\t\t\tthis.isFrameLoading = false;\n\t\t\t\t\t}\n\t\t\t\t}, 20000);\n\t\t\t}\n\t\t\tthis._isFrameLoading = isLoading;\n\n\t\t\tif (wasLoadingBefore && !isLoading) {\n\t\t\t\tthis.lastPreviewLoadTimestamp = new Date();\n\t\t\t}\n\n\t\t\t//Once the frame is loaded, trigger any pending reload.\n\t\t\tif (!isLoading && this.hasPendingPreviewReload) {\n\t\t\t\tthis.hasPendingPreviewReload = false;\n\t\t\t\tthis.queuePreviewFrameReload();\n\t\t\t}\n\t\t}\n\n\t\tpublic get isFrameLoading(): boolean {\n\t\t\treturn this._isFrameLoading;\n\t\t}\n\n\t\tprivate queuePreviewFrameReload() {\n\t\t\tif (this.reloadWaitTimeoutId) {\n\t\t\t\treturn; //The frame will reload soon.\n\t\t\t}\n\n\t\t\tif (this.isFrameLoading) {\n\t\t\t\tthis.hasPendingPreviewReload = true;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t//To avoid stressing the server, wait at least X ms after the last\n\t\t\t//load completes before reloading the frame.\n\t\t\tconst reloadWaitTime = 2000;\n\t\t\tconst now = new Date();\n\t\t\tconst timeSinceLastLoad = now.getTime() - this.lastPreviewLoadTimestamp.getTime();\n\t\t\tif (timeSinceLastLoad < reloadWaitTime) {\n\t\t\t\tthis.reloadWaitTimeoutId = window.setTimeout(() => {\n\t\t\t\t\tthis.reloadWaitTimeoutId = null;\n\t\t\t\t\tthis.queuePreviewFrameReload();\n\t\t\t\t}, reloadWaitTime - timeSinceLastLoad);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t//Actually reload the frame.\n\t\t\tthis.navigatePreviewFrame(null, true);\n\t\t}\n\n\t\tonBindingsApplied(rootElement: HTMLElement) {\n\t\t\t//Navigate to the root section. In the current implementation this can't happen\n\t\t\t//until bindings have been applied, so it's not part of the constructor.\n\t\t\tthis.navigateToRootSection();\n\n\t\t\t//Initialize the action menu.\n\t\t\tthis.$extraActionButton = jQuery('#ame-ac-extra-actions-trigger', rootElement);\n\t\t\tthis.$extraActionMenu = jQuery('#ame-ac-extra-actions-menu', rootElement).menu();\n\n\t\t\t//Update menu states.\n\t\t\tthis.importActionEnabled.notifySubscribers(this.importActionEnabled());\n\t\t\tthis.discardChangesActionEnabled.notifySubscribers(this.discardChangesActionEnabled());\n\t\t\tthis.downloadThemeActionEnabled.notifySubscribers(this.downloadThemeActionEnabled());\n\n\t\t\t//Get the file picker.\n\t\t\tthis.$importFileInput = jQuery('#ame-ac-import-admin-theme-file', rootElement);\n\t\t}\n\n\t\tnavigateToRootSection() {\n\t\t\tthis.sectionNavigation.navigateToSection('ame-ac-section-structure-root');\n\t\t}\n\n\t\t// noinspection JSUnusedGlobalSymbols -- Used in at least one add-on.\n\t\t/**\n\t\t * Execute an RPC method in the preview frame.\n\t\t *\n\t\t * @param {string} methodName\n\t\t * @param {*} args\n\t\t */\n\t\texecuteRpcMethod(methodName: string, ...args: any): JQueryPromise {\n\t\t\tif (!this.previewConnection || !this.previewConnection.isConnected) {\n\t\t\t\treturn $.Deferred().reject('The preview frame is not connected.').promise();\n\t\t\t}\n\t\t\treturn this.previewConnection.execute(methodName, ...args);\n\t\t}\n\n\t\tconfirmExit() {\n\t\t\tif (this.isExitPromptNeeded()) {\n\t\t\t\tif (window.confirm(this.exitPromptMessage)) {\n\t\t\t\t\t//Remove the confirmation prompt that appears when leaving the page.\n\t\t\t\t\t//We don't want to show two prompts.\n\t\t\t\t\t$(window).off('beforeunload.ame-ac-exit-confirm');\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\n\t\tprivate isExitPromptNeeded(): boolean {\n\t\t\tconst changeset = this.settings.getCurrentChangeset();\n\n\t\t\t//No need to save anything if the changeset is empty.\n\t\t\tif (!changeset.isNonEmpty()) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tswitch (this.exitPromptMode) {\n\t\t\t\tcase ExitPromptMode.UnpublishedChanges:\n\t\t\t\t\treturn (\n\t\t\t\t\t\t!changeset.wasPublished()\n\t\t\t\t\t\t&& (changeset.status() !== 'trash') //Can't publish a trashed changeset.\n\t\t\t\t\t);\n\t\t\t\tcase ExitPromptMode.UnsavedChanges:\n\t\t\t\t\tconst unsavedChanges = this.settings.unsavedChanges;\n\t\t\t\t\treturn !_.isEmpty(unsavedChanges);\n\t\t\t\tdefault:\n\t\t\t\t\treturn false;\n\t\t\t}\n\n\t\t}\n\n\t\t// noinspection JSUnusedGlobalSymbols -- Used in the Knockout template.\n\t\ttoggleExtraActionMenu() {\n\t\t\tif (!this.$extraActionMenu) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.$extraActionMenu.toggle();\n\n\t\t\tif (this.$extraActionMenu.is(':visible')) {\n\t\t\t\t//Position the menu below the button.\n\t\t\t\tconst $button = $('#ame-ac-extra-actions-trigger');\n\t\t\t\tthis.$extraActionMenu.position({\n\t\t\t\t\tmy: 'right top',\n\t\t\t\t\tat: 'right bottom',\n\t\t\t\t\tof: $button,\n\t\t\t\t\tcollision: 'flipfit'\n\t\t\t\t});\n\n\t\t\t\t//Hide the menu when the user clicks outside the menu or the button.\n\t\t\t\t$(document).on('mousedown.ameAcExtraMenuHide', this.handleClickOutsideActionMenu.bind(this));\n\t\t\t} else {\n\t\t\t\t//Remove the click listener if it's still active.\n\t\t\t\t$(document).off('mousedown.ameAcExtraMenuHide');\n\t\t\t}\n\t\t}\n\n\t\thandleClickOutsideActionMenu(event: JQueryEventObject) {\n\t\t\tif (\n\t\t\t\t!this.$extraActionMenu\n\t\t\t\t|| !this.$extraActionMenu.is(':visible')\n\t\t\t\t|| !this.$extraActionButton\n\t\t\t) {\n\t\t\t\t//The event listener should not be active if the menu is not visible.\n\t\t\t\t$(document).off('mousedown.ameAcExtraMenuHide');\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst menuElement = this.$extraActionMenu.get(0);\n\t\t\tconst buttonElement = this.$extraActionButton.get(0);\n\t\t\tconst isClickOutsideMenu = !menuElement.contains(event.target);\n\t\t\tconst isClickOutsideButton = !buttonElement.contains(event.target);\n\n\t\t\tif (isClickOutsideMenu && isClickOutsideButton) {\n\t\t\t\tthis.hideExtraActionMenu();\n\t\t\t}\n\t\t}\n\n\t\tprivate hideExtraActionMenu() {\n\t\t\tif (!this.$extraActionMenu) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.$extraActionMenu.hide();\n\t\t\t//Stop listening for clicks outside the menu.\n\t\t\t$(document).off('mousedown.ameAcExtraMenuHide');\n\t\t}\n\n\t\tprivate openMetadataDialog(mode: MetadataDialogMode) {\n\t\t\tthis.downloadThemeDialog.mode(mode);\n\t\t\tthis.downloadThemeDialog.isOpen(true);\n\t\t\tthis.isImportReportVisible(false);\n\t\t\tthis.hideExtraActionMenu();\n\t\t}\n\n\t\tactionOpenDownloadDialog() {\n\t\t\tif (!this.downloadThemeActionEnabled()) {\n\t\t\t\talert('Currently disabled because there are no changes to download.');\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.openMetadataDialog(MetadataDialogMode.Download);\n\t\t}\n\n\t\t// noinspection JSUnusedGlobalSymbols -- Used in another plugin.\n\t\tactionEditOrDownloadTheme() {\n\t\t\tif (!this.downloadThemeActionEnabled()) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t//If the user hasn't confirmed the theme metadata yet, show the dialog.\n\t\t\tconst metadata = this.settings.adminThemeMetadata();\n\t\t\tif ((metadata === null) || !metadata.wasEverConfirmed) {\n\t\t\t\tthis.openMetadataDialog(MetadataDialogMode.Download);\n\t\t\t} else {\n\t\t\t\tthis.downloadThemeDialog.triggerDownloadWithErrorReporting(metadata);\n\t\t\t}\n\t\t}\n\n\t\t// noinspection JSUnusedGlobalSymbols -- Used in another plugin.\n\t\tactionOpenMetadataDialog() {\n\t\t\tthis.openMetadataDialog(MetadataDialogMode.Edit);\n\t\t}\n\n\t\tactionOpenImportDialog() {\n\t\t\tif (!this.importActionEnabled()) {\n\t\t\t\t//Can't import if there is no changeset or the changeset can't be edited.\n\t\t\t\t//The menu item should be disabled in this case, but we'll check anyway.\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tthis.hideExtraActionMenu();\n\n\t\t\t//Allow the default action to proceed, which will open the file picker.\n\t\t\treturn true;\n\t\t}\n\n\t\tactionDiscardChanges() {\n\t\t\tif (!this.discardChangesActionEnabled()) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.hideExtraActionMenu();\n\n\t\t\tif (this.settings.isExclusiveOperationInProgress()) {\n\t\t\t\talert('Another operation is in progress. Please wait for it to complete before discarding changes.');\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (!confirm('Are you sure you want to discard your unsaved changes?')) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.isImportReportVisible(false);\n\t\t\tthis.isDiscardingChanges(true);\n\n\t\t\tthis.settings.trashChangeset()\n\t\t\t\t.then(() => {\n\t\t\t\t\t//Reload the customizer with a new changeset.\n\t\t\t\t\tconst url = new URL(window.location.href);\n\t\t\t\t\tif (this.customBasePath) {\n\t\t\t\t\t\turl.pathname = this.customBasePath;\n\t\t\t\t\t\turl.search = '';\n\t\t\t\t\t} else {\n\t\t\t\t\t\t//To get the customizer's base URL, get the current URL\n\t\t\t\t\t\t//and remove all query parameters except \"page\".\n\t\t\t\t\t\tconst page = url.searchParams.get('page');\n\t\t\t\t\t\turl.search = '';\n\t\t\t\t\t\turl.searchParams.set('page', page || 'ame-admin-customizer');\n\t\t\t\t\t}\n\t\t\t\t\t//Notify the customizer that we definitely want a new changeset;\n\t\t\t\t\t//don't try to load a draft.\n\t\t\t\t\turl.searchParams.set('_ame-ac-new-changeset', '1');\n\n\t\t\t\t\t//Don't need the hash.\n\t\t\t\t\turl.hash = '';\n\n\t\t\t\t\t//Add a random parameter to force a reload.\n\t\t\t\t\turl.searchParams.set('_ame-ac-reload', Math.random().toString(36).substring(7));\n\n\t\t\t\t\t//Navigate to the new URL.\n\t\t\t\t\twindow.location.href = url.toString();\n\n\t\t\t\t\t//Note that the isDiscardingChanges flag is not reset here,\n\t\t\t\t\t//so the progress overlay will stay visible until the page reloads.\n\t\t\t\t})\n\t\t\t\t.fail((requestObject) => {\n\t\t\t\t\tlet message: string = requestObject.statusText || 'Unknown error.';\n\n\t\t\t\t\tif (typeof requestObject.responseJSON === 'object') {\n\t\t\t\t\t\tconst customMessage = _.get(requestObject.responseJSON, ['data', 'message']);\n\t\t\t\t\t\tif (typeof customMessage === 'string') {\n\t\t\t\t\t\t\tmessage = customMessage;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\talert('Error: ' + message);\n\t\t\t\t\tthis.isDiscardingChanges(false);\n\t\t\t\t});\n\t\t}\n\n\t\thandleImportFileSelection() {\n\t\t\tif (!this.$importFileInput) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst fileInput = this.$importFileInput.get(0) as HTMLInputElement;\n\t\t\tif (!fileInput || !fileInput.files || (fileInput.files.length < 1)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t//Get the first file. Normally, there should only be one.\n\t\t\tconst selectedFile = fileInput.files.item(0);\n\t\t\tif (!selectedFile) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t//Limit the file size.\n\t\t\tif (selectedFile.size > this.maxImportFileSize) {\n\t\t\t\talert(\n\t\t\t\t\t'Error: The selected file is too large. The maximum file size is '\n\t\t\t\t\t+ Math.round(this.maxImportFileSize / 1024) + ' KiB'\n\t\t\t\t);\n\t\t\t\t//Clear the file input.\n\t\t\t\tthis.$importFileInput.val('');\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.isImporting(true);\n\t\t\tthis.lastImportReport(null);\n\n\t\t\tJSZip.loadAsync(selectedFile).then(\n\t\t\t\t(zip) => {\n\t\t\t\t\tconst metadataFileRegex = /^([\\\\/]?[a-zA-Z0-9_-]+[\\\\/])metadata\\.json$/;\n\t\t\t\t\tconst foundMetadataFiles = zip.file(metadataFileRegex);\n\t\t\t\t\tif (!foundMetadataFiles || (foundMetadataFiles.length < 1)) {\n\t\t\t\t\t\tthrow new Error('The selected file is not an admin theme generated by this tool.');\n\t\t\t\t\t}\n\t\t\t\t\tconst metadataFile = foundMetadataFiles[0];\n\n\t\t\t\t\t//Get the directory name and separator from the metadata file path.\n\t\t\t\t\t//The prefix will usually be something like \"admin-theme-slug/\".\n\t\t\t\t\tconst matches = metadataFileRegex.exec(metadataFile.name);\n\t\t\t\t\tlet directoryPrefix: string;\n\t\t\t\t\tif (!matches || (matches.length < 2)) {\n\t\t\t\t\t\tthrow new Error('The directory structure of this ZIP file is not recognized.');\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdirectoryPrefix = matches[1];\n\t\t\t\t\t}\n\n\t\t\t\t\tconst settingsFile = zip.file(directoryPrefix + 'settings.json');\n\t\t\t\t\tif (!settingsFile) {\n\t\t\t\t\t\tthrow new Error('The selected ZIP file is missing a settings.json file.');\n\t\t\t\t\t}\n\n\t\t\t\t\t//Read both files.\n\t\t\t\t\treturn Promise.all([\n\t\t\t\t\t\tmetadataFile.async('string'),\n\t\t\t\t\t\tsettingsFile.async('string')\n\t\t\t\t\t]);\n\t\t\t\t},\n\t\t\t\t(error) => {\n\t\t\t\t\tconst errorMessage = error.message || error;\n\t\t\t\t\tthrow new Error('Error reading \"' + selectedFile.name + '\": ' + errorMessage);\n\t\t\t\t}\n\t\t\t).then((fileContents) => {\n\t\t\t\tif (!fileContents) {\n\t\t\t\t\tthrow new Error('Failed to read settings and metadata from the ZIP file.');\n\t\t\t\t}\n\n\t\t\t\tconst metadata = this.parseImportedAdminThemeFile(\n\t\t\t\t\tfileContents[0],\n\t\t\t\t\t'metadata.json',\n\t\t\t\t\tAdminThemeMetadata\n\t\t\t\t);\n\t\t\t\tconst settings = this.parseImportedAdminThemeFile(\n\t\t\t\t\tfileContents[1],\n\t\t\t\t\t'settings.json',\n\t\t\t\t\tAdminThemeSettings\n\t\t\t\t);\n\t\t\t\tconst report = new AdminThemeImportReport(selectedFile.name, metadata);\n\n\t\t\t\t//Import metadata.\n\t\t\t\tthis.downloadThemeDialog.meta(new ObservableThemeMetadata(metadata));\n\n\t\t\t\t//Import settings.\n\t\t\t\tfor (const [settingId, value] of Object.entries(settings)) {\n\t\t\t\t\treport.totalSettings++;\n\n\t\t\t\t\tconst foundSetting = this.settings.get(settingId);\n\t\t\t\t\tfoundSetting.forEach((setting) => {\n\t\t\t\t\t\tconst oldValue = setting.value();\n\t\t\t\t\t\tconst errors = setting.tryUpdate(value);\n\t\t\t\t\t\tif (errors && errors.length) {\n\t\t\t\t\t\t\treport.invalidSettings++;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treport.importedSettings++;\n\t\t\t\t\t\t\tif (oldValue != value) {\n\t\t\t\t\t\t\t\treport.differentImportedSettings++;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\tif (foundSetting.isEmpty()) {\n\t\t\t\t\t\treport.skippedSettings++;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tthis.lastImportReport(report);\n\t\t\t\tthis.isImportReportVisible(true);\n\n\t\t\t}).catch((error) => {\n\t\t\t\t//Error handling: Show the error message to the user.\n\t\t\t\tlet errorMessage: string;\n\t\t\t\tif (error instanceof Error) {\n\t\t\t\t\terrorMessage = error.message;\n\t\t\t\t} else {\n\t\t\t\t\terrorMessage = String(error);\n\t\t\t\t}\n\t\t\t\talert('Error: ' + errorMessage);\n\t\t\t}).finally(() => {\n\t\t\t\tthis.isImporting(false);\n\t\t\t\tthis.$importFileInput?.val('');\n\t\t\t});\n\t\t}\n\n\t\tprivate parseImportedAdminThemeFile(\n\t\t\tcontent: string,\n\t\t\tname: string,\n\t\t\tschema: T\n\t\t): ReturnType {\n\t\t\ttry {\n\t\t\t\tconst parsedJson = JSON.parse(content);\n\t\t\t\treturn schema.parse(parsedJson);\n\t\t\t} catch (error) {\n\t\t\t\tlet errorMessage: string;\n\t\t\t\tif (error instanceof ZodError) {\n\t\t\t\t\t//Convert issues to a newline-separated string.\n\t\t\t\t\terrorMessage = error.issues.map((issue) => {\n\t\t\t\t\t\treturn issue.path.join('.') + ': ' + issue.message;\n\t\t\t\t\t}).join('\\n');\n\t\t\t\t} else if (error instanceof Error) {\n\t\t\t\t\terrorMessage = error.message;\n\t\t\t\t} else {\n\t\t\t\t\terrorMessage = String(error);\n\t\t\t\t}\n\t\t\t\t//Add the file name to the error message.\n\t\t\t\tthrow new Error('Error parsing ' + name + ':\\n' + errorMessage);\n\t\t\t}\n\t\t}\n\n\t\tdismissImportReport(): void {\n\t\t\tthis.isImportReportVisible(false);\n\t\t}\n\n\t\tlog(message: any): void {\n\t\t\tif (this.consoleLoggingEnabled && console && console.log) {\n\t\t\t\tconsole.log(message);\n\t\t\t}\n\t\t}\n\t}\n}\n\ndeclare global {\n\tinterface Window {\n\t\twsAdminCustomizer: AmeAdminCustomizer.AdminCustomizer;\n\t}\n}\n\njQuery(function () {\n\t//Give other scripts a chance to load before we start.\n\t//Some of them also use jQuery to run when the DOM is ready.\n\tsetTimeout(() => {\n\t\twindow.wsAdminCustomizer = new AmeAdminCustomizer.AdminCustomizer(wsAmeAdminCustomizerData);\n\t\tconst rootElement = document.getElementById('ame-ac-admin-customizer');\n\t\tif (rootElement === null) {\n\t\t\tthrow new Error('The root element for the admin customizer was not found.');\n\t\t}\n\n\t\tko.applyBindings(window.wsAdminCustomizer, rootElement);\n\n\t\t//Notify the customizer that bindings have been applied. It needs to do some\n\t\t//additional setup that can't be done until the DOM structure is ready.\n\t\tsetTimeout(() => {\n\t\t\twindow.wsAdminCustomizer.onBindingsApplied(rootElement);\n\t\t}, 5); //Components are rendered asynchronously.\n\t}, 20);\n});","'use strict';\r\nexport var AmeAdminCustomizerBase;\r\n(function (AmeAdminCustomizerBase) {\r\n class AdminCustomizerBase {\r\n constructor(scriptData) {\r\n this.allowedCommOrigins = scriptData.allowedCommOrigins;\r\n if (this.allowedCommOrigins.length === 0) {\r\n this.allowedCommOrigins = [window.location.origin];\r\n }\r\n this.allowedPreviewUrls = scriptData.allowedPreviewUrls;\r\n this.parsedAllowedUrls = this.allowedPreviewUrls.map(url => new URL(url));\r\n }\r\n isPreviewableUrl(url) {\r\n if (typeof url === 'string') {\r\n url = new URL(url);\r\n }\r\n if (typeof url.protocol === 'undefined') {\r\n return false;\r\n }\r\n //Only HTTP(S) links are previewable.\r\n if ((url.protocol !== 'http:') && (url.protocol !== 'https:')) {\r\n return false;\r\n }\r\n //Check against the list of allowed URLs.\r\n for (const allowedUrl of this.parsedAllowedUrls) {\r\n //Protocol and host must match. The path must start with the path\r\n //of the allowed URL (possibly without a trailing slash).\r\n if ((url.protocol === allowedUrl.protocol) && (url.host === allowedUrl.host)) {\r\n const allowedPath = allowedUrl.pathname.replace(/\\/$/, '');\r\n if (url.pathname.indexOf(allowedPath) === 0) {\r\n return true;\r\n }\r\n }\r\n }\r\n return false;\r\n }\r\n }\r\n AmeAdminCustomizerBase.AdminCustomizerBase = AdminCustomizerBase;\r\n})(AmeAdminCustomizerBase || (AmeAdminCustomizerBase = {}));\r\n//# sourceMappingURL=admin-customizer-base.js.map","import { AmeAcSection } from './ame-ac-section.js';\r\nimport { createComponentConfig } from '../../../pro-customizables/ko-components/control-base.js';\r\nclass AmeAcContentSection extends AmeAcSection {\r\n constructor(params, $element) {\r\n super(params, $element);\r\n if ((typeof params.parentSectionLevel === 'function') && ko.isObservable(params.parentSectionLevel)) {\r\n this.parentSectionLevel = params.parentSectionLevel;\r\n }\r\n else {\r\n this.parentSectionLevel = null;\r\n }\r\n this.contentSectionLevel = ko.pureComputed(() => {\r\n let parentLevel = 0;\r\n if (this.parentSectionLevel !== null) {\r\n parentLevel = this.parentSectionLevel();\r\n }\r\n return parentLevel + 1;\r\n });\r\n //Tell child sections about our section level.\r\n this.childComponents().forEach((child) => {\r\n if (child.name === 'ame-ac-content-section') {\r\n child.params.parentSectionLevel = this.contentSectionLevel;\r\n }\r\n });\r\n this.sectionLevelClass = ko.pureComputed(() => {\r\n const level = this.contentSectionLevel();\r\n return 'ame-ac-content-section-' + level;\r\n });\r\n }\r\n}\r\nexport default createComponentConfig(AmeAcContentSection, `\n\t
  • \n\t\t

    \t\n\t
  • \t\n\t\n\t\t\n\t\t\n`);\r\n//# sourceMappingURL=ame-ac-content-section.js.map","import { ComponentBindingOptions, createComponentConfig, KoContainerViewModel } from '../../../pro-customizables/ko-components/control-base.js';\r\nimport { AmeCustomizable } from '../../../pro-customizables/assets/customizable.js';\r\nvar ControlGroup = AmeCustomizable.ControlGroup;\r\nclass AmeAcControlGroup extends KoContainerViewModel {\r\n constructor(params, $element) {\r\n var _a, _b;\r\n super(params, $element);\r\n this.labelFor = (_b = ((_a = this.uiElement) === null || _a === void 0 ? void 0 : _a.labelFor)) !== null && _b !== void 0 ? _b : null;\r\n this.titleDisabled = (typeof params.titleDisabled !== 'undefined') ? (!!params.titleDisabled) : false;\r\n }\r\n getExpectedUiElementType() {\r\n return ControlGroup;\r\n }\r\n mapChildToComponentBinding(child) {\r\n if (child.component) {\r\n return ComponentBindingOptions.fromElement(child);\r\n }\r\n return super.mapChildToComponentBinding(child);\r\n }\r\n}\r\nexport default createComponentConfig(AmeAcControlGroup, `\n\t
  • \n\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\t
      \n\t\t\t
    • \n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t
    • \t\t\n\t\t
    \n\t
  • \n`);\r\n//# sourceMappingURL=ame-ac-control-group.js.map","import { createComponentConfig, KoControlViewModel } from '../../../pro-customizables/ko-components/control-base.js';\r\nimport { AmeCustomizable } from '../../../pro-customizables/assets/customizable.js';\r\nvar Control = AmeCustomizable.Control;\r\nclass MissingComponentError extends Error {\r\n constructor(uiElement) {\r\n super(`The UI element \"${uiElement.label}\" [${uiElement.id}] is missing a component name.`);\r\n this.uiElement = uiElement;\r\n }\r\n}\r\nclass AmeAcControl extends KoControlViewModel {\r\n constructor(params, $element) {\r\n super(params, $element);\r\n //uiElement is required for this component.\r\n if (!this.uiElement) {\r\n throw new Error('The uiElement parameter is required for AmeAcControl');\r\n }\r\n this.wrapperLabelEnabled = (this.uiElement.label !== '') && (!this.uiElement.includesOwnLabel);\r\n this.labelForId = this.uiElement.labelTargetId;\r\n if (!this.uiElement.component) {\r\n throw new MissingComponentError(this.uiElement);\r\n }\r\n }\r\n getExpectedUiElementType() {\r\n return Control;\r\n }\r\n}\r\nexport default createComponentConfig(AmeAcControl, `\n\t
  • \n\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t
  • \n`);\r\n//# sourceMappingURL=ame-ac-control.js.map","import { createComponentConfig, KoContainerViewModel } from '../../../pro-customizables/ko-components/control-base.js';\r\nimport { AmeCustomizable } from '../../../pro-customizables/assets/customizable.js';\r\nvar Section = AmeCustomizable.Section;\r\nimport { AmeAcSection } from './ame-ac-section.js';\r\nclass AmeAcSectionLink extends KoContainerViewModel {\r\n constructor(params, $element) {\r\n super(params, $element);\r\n //uiElement is required for this component.\r\n if (!this.uiElement) {\r\n throw new Error('The uiElement parameter is required for AmeAcSectionLink');\r\n }\r\n this.targetElementId = AmeAcSection.getSectionElementId(this.uiElement);\r\n this.elementId = AmeAcSection.getSectionLinkElementId(this.uiElement);\r\n }\r\n getExpectedUiElementType() {\r\n return Section;\r\n }\r\n}\r\nexport default createComponentConfig(AmeAcSectionLink, `\n\t
  • \n\t\t

    \n\t
  • \n`);\r\n//# sourceMappingURL=ame-ac-section-link.js.map","import { ComponentBindingOptions, createComponentConfig, KoContainerViewModel } from '../../../pro-customizables/ko-components/control-base.js';\r\nimport { AmeCustomizable } from '../../../pro-customizables/assets/customizable.js';\r\nvar Section = AmeCustomizable.Section;\r\nvar Control = AmeCustomizable.Control;\r\nvar ControlGroup = AmeCustomizable.ControlGroup;\r\nexport class AmeAcSection extends KoContainerViewModel {\r\n constructor(params, $element) {\r\n super(params, $element);\r\n //Must have an uiElement.\r\n if (this.uiElement === null) {\r\n throw new Error('AmeAcSection must have an uiElement.');\r\n }\r\n this.elementId = AmeAcSection.getSectionElementId(this.uiElement);\r\n if ((typeof params.breadcrumbs !== 'undefined') && ko.isObservable(params.breadcrumbs)) {\r\n this.breadcrumbs = params.breadcrumbs;\r\n }\r\n else {\r\n this.breadcrumbs = null;\r\n }\r\n //To keep the header text alignment consistent when navigating between sections,\r\n //let's show something even if there are no breadcrumbs.\r\n const defaultEmptyBreadcrumbText = 'Admin Menu Editor Pro';\r\n //Let other modules change the default text.\r\n let filteredEmptyBreadcrumbText = null;\r\n if (wp && wp.hooks && wp.hooks.applyFilters) {\r\n filteredEmptyBreadcrumbText = wp.hooks.applyFilters('adminMenuEditor.ac.emptyBreadcrumbText', defaultEmptyBreadcrumbText);\r\n }\r\n const emptyBreadcrumbText = ((typeof filteredEmptyBreadcrumbText === 'string')\r\n ? filteredEmptyBreadcrumbText\r\n : defaultEmptyBreadcrumbText);\r\n this.breadcrumbText = ko.pureComputed(() => {\r\n if (this.breadcrumbs === null) {\r\n return emptyBreadcrumbText;\r\n }\r\n const breadcrumbs = this.breadcrumbs();\r\n if (breadcrumbs.length < 1) {\r\n return emptyBreadcrumbText;\r\n }\r\n let titles = breadcrumbs.map(crumb => crumb.title);\r\n //Show the root section differently, \"Admin Customizer\" is too long.\r\n //Not sure about what text to use here, could matching the Theme Customizer be confusing?\r\n //Alternatives: 🛠️🎨, use \\uFE0E to render the emoji without colors (only works for some).\r\n //Alternatives: ⋯ and …\r\n titles[0] = 'Customizing';\r\n //Due to space constraints, show only the last 2 breadcrumbs.\r\n if (titles.length > 2) {\r\n titles = titles.slice(titles.length - 2);\r\n }\r\n return titles.join(' \\u25B8 ');\r\n });\r\n }\r\n getExpectedUiElementType() {\r\n return Section;\r\n }\r\n mapChildToComponentBinding(child) {\r\n if (child instanceof Section) {\r\n if (child.preferredRole === 'content') {\r\n return ComponentBindingOptions.fromElement(child, 'ame-ac-content-section');\r\n }\r\n else {\r\n return ComponentBindingOptions.fromElement(child, 'ame-ac-section-link');\r\n }\r\n }\r\n else if (child instanceof ControlGroup) {\r\n return ComponentBindingOptions.fromElement(child, 'ame-ac-control-group');\r\n }\r\n else if ((child instanceof Control)\r\n && (['ame-ac-separator', 'ame-horizontal-separator'].indexOf(child.component) < 0)) {\r\n //Wrap each control in a control group if it's not already in one.\r\n //Separators are an exception because they're cosmetic and need different styling.\r\n const controlGroup = child.createControlGroup();\r\n return this.mapChildToComponentBinding(controlGroup);\r\n }\r\n else {\r\n return ComponentBindingOptions.fromElement(child);\r\n }\r\n }\r\n static getSectionElementId(section) {\r\n return AmeAcSection.generateSectionElementId(section, 'ame-ac-section-');\r\n }\r\n static getSectionLinkElementId(section) {\r\n return AmeAcSection.generateSectionElementId(section, 'ame-ac-slink-');\r\n }\r\n static generateSectionElementId(section, prefix) {\r\n if (section.id) {\r\n return prefix + section.id;\r\n }\r\n const slug = section.title.toLowerCase().replace(/[^a-z0-9]/g, '-');\r\n if (slug !== '') {\r\n return prefix + slug;\r\n }\r\n throw new Error('Cannot generate a section element ID because the section does not have an ID or a title.');\r\n }\r\n dispose() {\r\n super.dispose();\r\n this.childComponents.dispose();\r\n }\r\n}\r\nexport default createComponentConfig(AmeAcSection, `\n\t
      \n\t\t\n\t\t\n\t\t\t\n\t\t\n\t
    \n`);\r\n//# sourceMappingURL=ame-ac-section.js.map","import { createComponentConfig, KoStandaloneControl } from '../../../pro-customizables/ko-components/control-base.js';\r\nclass AmeAcSeparator extends KoStandaloneControl {\r\n constructor(params, $element) {\r\n super(params, $element);\r\n }\r\n}\r\nexport default createComponentConfig(AmeAcSeparator, `\n\t
  • \n`);\r\n//# sourceMappingURL=ame-ac-separator.js.map","import { createRendererComponentConfig, KoRendererViewModel } from '../../../pro-customizables/ko-components/control-base.js';\r\nimport { AmeCustomizable } from '../../../pro-customizables/assets/customizable.js';\r\nvar Section = AmeCustomizable.Section;\r\nclass AmeAcStructure extends KoRendererViewModel {\r\n constructor(params, $element) {\r\n var _a;\r\n super(params, $element);\r\n this.allNavigationSections = [];\r\n const rootSection = new Section({\r\n t: 'section',\r\n id: 'structure-root',\r\n title: (_a = this.structure.title) !== null && _a !== void 0 ? _a : 'Root',\r\n }, this.structure.children);\r\n //Recursively collect all navigable sections. Don't include content\r\n //sections: their parents will output them, not this component.\r\n function collectChildSections(section, accumulator = []) {\r\n if (section.preferredRole === 'navigation') {\r\n accumulator.push(section);\r\n }\r\n for (const child of section.children) {\r\n if (child instanceof Section) {\r\n collectChildSections(child, accumulator);\r\n }\r\n }\r\n return accumulator;\r\n }\r\n this.allNavigationSections = collectChildSections(rootSection);\r\n //Give the breadcrumb list to each section, if available.\r\n if (typeof params.breadcrumbs !== 'undefined') {\r\n for (const section of this.allNavigationSections) {\r\n section.componentParams.breadcrumbs = params.breadcrumbs;\r\n }\r\n }\r\n }\r\n}\r\nexport default createRendererComponentConfig(AmeAcStructure, `\n\t\n\t\t\n\t\n`);\r\n//# sourceMappingURL=ame-ac-structure.js.map","import { createComponentConfig, KoStandaloneControl } from '../../../pro-customizables/ko-components/control-base.js';\r\nclass AmeAcValidationErrors extends KoStandaloneControl {\r\n constructor(params, $element) {\r\n super(params, $element);\r\n if (typeof params.errors !== 'undefined') {\r\n if (Array.isArray(params.errors)) {\r\n this.errors = params.errors;\r\n }\r\n else if (ko.isObservable(params.errors)) {\r\n this.errors = params.errors;\r\n }\r\n else {\r\n throw new Error('The \"errors\" parameter must be an array or an observable array.');\r\n }\r\n }\r\n else {\r\n console.log('Params:', params);\r\n throw new Error('The \"errors\" parameter is required for the AmeAcValidationErrors component.');\r\n }\r\n }\r\n}\r\nexport default createComponentConfig(AmeAcValidationErrors, `\n\t
      \n\t\t
    • \n\t\t\t\n\t\t
    • \n\t
    \n`);\r\n//# sourceMappingURL=ame-ac-validation-errors.js.map","'use strict';\r\nimport { createControlComponentConfig, KoStandaloneControl } from '../control-base.js';\r\nimport { LazyPopupSliderAdapter } from '../lazy-popup-slider-adapter.js';\r\nconst allDimensionKeys = [\r\n 'top', 'bottom', 'left', 'right',\r\n 'topLeft', 'topRight', 'bottomLeft', 'bottomRight'\r\n];\r\nfunction isDimensionKey(key) {\r\n return allDimensionKeys.includes(key);\r\n}\r\nconst DefaultDimensionsInOrder = [\r\n ['top', 'Top'],\r\n ['bottom', 'Bottom'],\r\n ['left', 'Left'],\r\n ['right', 'Right'],\r\n];\r\nconst SideDimensions = ['top', 'bottom', 'left', 'right'];\r\nconst SymmetricDimensionMap = {\r\n 'vertical': ['top', 'bottom'],\r\n 'horizontal': ['left', 'right'],\r\n};\r\nfunction isSymmetricDimensionKey(key) {\r\n return SymmetricDimensionMap.hasOwnProperty(key);\r\n}\r\nlet nextId = 0;\r\nclass AmeBoxDimensions extends KoStandaloneControl {\r\n constructor(params, $element) {\r\n super(params, $element);\r\n this.inputIdPrefix = '_ame-box-dimensions-c-input-' + (nextId++);\r\n this.unitElementId = '_ame-box-dimensions-c-unit-' + (nextId++);\r\n this.wrapperAttributes = {};\r\n if ((typeof params.id === 'string') && (params.id !== '')) {\r\n this.wrapperAttributes['id'] = '_ame-box-dimensions-w-' + params.id;\r\n }\r\n if ((typeof params['dimensionNames'] !== 'undefined') && Array.isArray(params['dimensionNames'])) {\r\n this.dimensionsInOrder = params['dimensionNames'];\r\n }\r\n else {\r\n this.dimensionsInOrder = DefaultDimensionsInOrder;\r\n }\r\n //Make observable proxies for the individual dimension settings.\r\n const temp = {};\r\n for (const [dimensionKey, dimensionName] of this.dimensionsInOrder) {\r\n const setting = this.settings['value.' + dimensionKey];\r\n if (!setting || (typeof setting !== 'object')) {\r\n throw new Error(`Missing setting for the \"${dimensionName}\" side.`);\r\n }\r\n temp[dimensionKey] = ko.computed({\r\n read: () => {\r\n return setting.value();\r\n },\r\n write: (newValue) => {\r\n if (newValue === '') {\r\n newValue = null;\r\n }\r\n setting.value(newValue);\r\n },\r\n deferEvaluation: true,\r\n }).extend({ 'ameNumericInput': true });\r\n }\r\n this.dimensions = temp;\r\n //Similarly, make an observable for the unit setting.\r\n const unitSetting = this.settings['value.unit'];\r\n if (!unitSetting || (typeof unitSetting !== 'object')) {\r\n throw new Error('Missing setting for the unit.');\r\n }\r\n this.unitSetting = unitSetting;\r\n const defaultDropdownOptions = {\r\n options: [],\r\n optionsText: 'text',\r\n optionsValue: 'value'\r\n };\r\n if (params.unitDropdownOptions && (typeof params.unitDropdownOptions === 'object')) {\r\n const unitDropdownOptions = params.unitDropdownOptions;\r\n this.unitDropdownOptions = {\r\n options: unitDropdownOptions['options'] || defaultDropdownOptions.options,\r\n optionsText: unitDropdownOptions['optionsText'] || defaultDropdownOptions.optionsText,\r\n optionsValue: unitDropdownOptions['optionsValue'] || defaultDropdownOptions.optionsValue,\r\n };\r\n }\r\n else {\r\n this.unitDropdownOptions = defaultDropdownOptions;\r\n }\r\n this.isLinkActive = ko.observable(false);\r\n //Enable the link button by default if all dimensions are equal. Exception: null values.\r\n //Dimensions can have different defaults, so null doesn't necessarily mean that they\r\n //are actually equal.\r\n const firstKey = Object.keys(this.dimensions)[0];\r\n const firstValue = this.dimensions[firstKey]();\r\n if ((firstValue !== null) && (firstValue !== '')) {\r\n let areAllDimensionsEqual = true;\r\n for (const [dimensionKey] of this.dimensionsInOrder) {\r\n if (this.dimensions[dimensionKey]() !== firstValue) {\r\n areAllDimensionsEqual = false;\r\n break;\r\n }\r\n }\r\n this.isLinkActive(areAllDimensionsEqual);\r\n }\r\n //When \"link\" mode is enabled, keep all dimensions in sync.\r\n let isUpdatingAllDimensions = false; //Prevent infinite loops.\r\n const updateAllDimensions = (newValue) => {\r\n if (!isUpdatingAllDimensions && this.isLinkActive()) {\r\n isUpdatingAllDimensions = true;\r\n newValue = this.normalizeValue(newValue);\r\n for (const observable of Object.values(this.dimensions)) {\r\n observable(newValue);\r\n }\r\n isUpdatingAllDimensions = false;\r\n }\r\n };\r\n for (const dimensionKey of Object.keys(this.dimensions)) {\r\n this.dimensions[dimensionKey].subscribe(updateAllDimensions);\r\n }\r\n //In \"symmetric\" mode, the top/bottom and left/right dimensions are always equal.\r\n //The control will only show \"vertical\" and \"horizontal\" inputs.\r\n this.symmetricModeEnabled = ko.observable(this.decideSymmetricMode(params));\r\n //Create computed observables for the \"vertical\" and \"horizontal\" dimensions.\r\n this.symmetricValues = {};\r\n for (const name in SymmetricDimensionMap) {\r\n if (!isSymmetricDimensionKey(name) || !SymmetricDimensionMap.hasOwnProperty(name)) {\r\n continue;\r\n }\r\n const sides = SymmetricDimensionMap[name];\r\n this.symmetricValues[name] = ko.computed({\r\n read: () => {\r\n if (this.symmetricModeEnabled()) {\r\n return this.dimensions[sides[0]]();\r\n }\r\n else {\r\n return null;\r\n }\r\n },\r\n write: (newValue) => {\r\n if (this.symmetricModeEnabled()) {\r\n newValue = this.normalizeValue(newValue);\r\n for (const side of sides) {\r\n this.dimensions[side](newValue);\r\n }\r\n }\r\n },\r\n deferEvaluation: true\r\n }).extend({ 'ameNumericInput': true });\r\n }\r\n //The control displays a different set of inputs depending on the current mode.\r\n this.inputsInOrder = ko.pureComputed(() => {\r\n let result;\r\n if (this.symmetricModeEnabled()) {\r\n result = [\r\n ['vertical', 'Vertical'],\r\n ['horizontal', 'Horizontal'],\r\n ];\r\n }\r\n else {\r\n result = this.dimensionsInOrder;\r\n }\r\n return result;\r\n });\r\n let sliderOptions = {\r\n 'positionParentSelector': '.ame-single-box-dimension',\r\n 'verticalOffset': -2,\r\n };\r\n if (typeof params.popupSliderWithin === 'string') {\r\n sliderOptions.positionWithinClosest = params.popupSliderWithin;\r\n }\r\n this.sliderAdapter = new LazyPopupSliderAdapter(params.sliderRanges ? params.sliderRanges : null, '.ame-box-dimensions-control', 'input.ame-box-dimensions-input', sliderOptions);\r\n }\r\n get classes() {\r\n return ['ame-box-dimensions-control', ...super.classes];\r\n }\r\n //noinspection JSUnusedGlobalSymbols -- Used in the template.\r\n /**\r\n * Get an observable for a specific dimension or a pair of dimensions.\r\n *\r\n * Unfortunately, Knockout doesn't seem to support nested indexed accessors\r\n * like \"dimensions[$data[0]]\", so we have to use a method instead.\r\n */\r\n getInputObservable(key) {\r\n if (this.symmetricModeEnabled() && isSymmetricDimensionKey(key)) {\r\n return this.symmetricValues[key];\r\n }\r\n if (isDimensionKey(key)) {\r\n return this.dimensions[key];\r\n }\r\n throw new Error('Invalid input key for the current mode: ' + key);\r\n }\r\n getInputIdFor(key) {\r\n return this.inputIdPrefix + '-' + key;\r\n }\r\n // noinspection JSUnusedGlobalSymbols -- Used in the template.\r\n getInputAttributes(key) {\r\n return {\r\n id: this.getInputIdFor(key),\r\n 'data-unit-element-id': this.unitElementId,\r\n 'data-ame-box-dimension': key,\r\n };\r\n }\r\n // noinspection JSUnusedGlobalSymbols -- Used in the template.\r\n getSettingFor(key) {\r\n const settingName = 'value.' + key;\r\n if (settingName in this.settings) {\r\n return this.settings[settingName];\r\n }\r\n if (this.symmetricModeEnabled() && isSymmetricDimensionKey(key)) {\r\n for (const dimension of SymmetricDimensionMap[key]) {\r\n //Since both symmetric dimensions are always equal, we can use\r\n //either of the two settings.\r\n const settingName = 'value.' + dimension;\r\n if (settingName in this.settings) {\r\n return this.settings[dimension];\r\n }\r\n }\r\n }\r\n return null;\r\n }\r\n // noinspection JSUnusedGlobalSymbols -- Actually used in the template.\r\n toggleLink() {\r\n this.isLinkActive(!this.isLinkActive());\r\n //When enabling \"link\" mode, fill all inputs with the same value.\r\n //Use the first non-empty value.\r\n if (this.isLinkActive()) {\r\n let firstValue = null;\r\n for (const dimensionObservable of Object.values(this.dimensions)) {\r\n const value = dimensionObservable();\r\n if ((value !== null) && (value !== '')) {\r\n firstValue = value;\r\n break;\r\n }\r\n }\r\n if (firstValue !== null) {\r\n firstValue = this.normalizeValue(firstValue);\r\n for (const dimensionObservable of Object.values(this.dimensions)) {\r\n dimensionObservable(firstValue);\r\n }\r\n }\r\n }\r\n }\r\n normalizeValue(value) {\r\n if (value === null) {\r\n return null;\r\n }\r\n //Convert strings to numbers, and invalid strings to null.\r\n if (typeof value === 'string') {\r\n value = parseFloat(value);\r\n if (isNaN(value)) {\r\n return null;\r\n }\r\n }\r\n return value;\r\n }\r\n /**\r\n * Determine whether the control should be in \"symmetric\" mode.\r\n */\r\n decideSymmetricMode(componentParams) {\r\n //This mode is off by default and can be enabled by setting the \"symmetricMode\" parameter.\r\n let enableMode = (typeof componentParams['symmetricMode'] !== 'undefined')\r\n ? (!!componentParams['symmetricMode'])\r\n : false;\r\n if (!enableMode) {\r\n return false;\r\n }\r\n //Symmetric mode can't be enabled if the control doesn't have all side dimensions.\r\n const hasAllSideDimensions = SideDimensions.every((key) => {\r\n return (key in this.dimensions);\r\n });\r\n if (!hasAllSideDimensions) {\r\n return false;\r\n }\r\n //It also can only be enabled if top/bottom and left/right dimensions are equal.\r\n return ((this.dimensions['top']() === this.dimensions['bottom']())\r\n && (this.dimensions['left']() === this.dimensions['right']()));\r\n }\r\n}\r\nexport default createControlComponentConfig(AmeBoxDimensions, `\n\t
    \n\t\t\n\t\t\t
    \n\t\t\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t
    \n\t\t\n\t\t\n\t\t\n\t
    \n`);\r\n//# sourceMappingURL=ame-box-dimensions.js.map","import { KoStandaloneControl } from '../control-base.js';\r\nexport class ChoiceControlOption {\r\n constructor(data) {\r\n this.value = data.value;\r\n this.label = data.label;\r\n this.description = data.description || '';\r\n this.enabled = (typeof data.enabled === 'undefined') || data.enabled;\r\n this.icon = data.icon || '';\r\n }\r\n}\r\nexport class AmeChoiceControl extends KoStandaloneControl {\r\n constructor(params, $element) {\r\n super(params, $element);\r\n this.options = ko.observableArray([]);\r\n if ((typeof params['options'] !== 'undefined') && Array.isArray(params.options)) {\r\n this.options(params.options.map((optionData) => new ChoiceControlOption(optionData)));\r\n }\r\n }\r\n}\r\n//# sourceMappingURL=ame-choice-control.js.map","'use strict';\r\nimport { createControlComponentConfig, KoStandaloneControl } from '../control-base.js';\r\n/**\r\n * Code editor control with syntax highlighting.\r\n *\r\n * This control uses the custom Knockout binding \"ameCodeMirror\" to do the heavy\r\n * lifting. The binding is defined in ko-extensions.ts.\r\n *\r\n * Note: The user can disable syntax highlighting. In that case, this control\r\n * should behave like a normal textarea.\r\n */\r\nclass AmeCodeEditor extends KoStandaloneControl {\r\n constructor(params, $element) {\r\n super(params, $element);\r\n if ((typeof params.editorSettings === 'object') && (params.editorSettings !== null)) {\r\n this.editorSettings = params.editorSettings;\r\n }\r\n else {\r\n this.editorSettings = false;\r\n }\r\n }\r\n}\r\nexport default createControlComponentConfig(AmeCodeEditor, `\n\t
    \n\t\t\n\t
    \n\t\n\t\t\n\t\n`);\r\n//# sourceMappingURL=ame-code-editor.js.map","import { createControlComponentConfig, KoStandaloneControl } from '../control-base.js';\r\n/**\r\n * A wrapper for the WordPress color picker.\r\n *\r\n * Note that the custom 'ameColorPicker' binding must be available when this component\r\n * is used. You must enqueue the 'ame-ko-extensions' script for this to work.\r\n */\r\nclass AmeColorPicker extends KoStandaloneControl {\r\n constructor(params, $element) {\r\n super(params, $element);\r\n }\r\n koDescendantsComplete(node) {\r\n //Make the color picker input visible. Its visibility is set to hidden by default.\r\n if (node.nodeType === Node.COMMENT_NODE) {\r\n //The component was bound to a comment node. The real element\r\n //should be the next non-comment sibling.\r\n let nextElement;\r\n do {\r\n nextElement = node.nextElementSibling;\r\n } while (nextElement && (nextElement.nodeType === Node.COMMENT_NODE));\r\n if (!nextElement) {\r\n return; //This should never happen.\r\n }\r\n node = nextElement;\r\n }\r\n if (!node || (node.nodeType !== Node.ELEMENT_NODE)) {\r\n return; //This should never happen.\r\n }\r\n const $picker = jQuery(node);\r\n //This should be a .wp-picker-container element that contains an input.\r\n const $input = $picker.find('input.ame-color-picker');\r\n if ($input.length > 0) {\r\n $input.css('visibility', 'visible');\r\n }\r\n }\r\n get classes() {\r\n return ['ame-color-picker', 'ame-color-picker-component', ...super.classes];\r\n }\r\n}\r\nexport default createControlComponentConfig(AmeColorPicker, `\n\t\n`);\r\n//# sourceMappingURL=ame-color-picker.js.map","/*\r\n * This utility module imports all the base Knockout components and exports\r\n * a function that can be used to register the components with Knockout.\r\n */\r\nimport ameBoxDimensions from './ame-box-dimensions/ame-box-dimensions.js';\r\nimport ameColorPicker from './ame-color-picker/ame-color-picker.js';\r\nimport ameFontStylePicker from './ame-font-style-picker/ame-font-style-picker.js';\r\nimport ameImageSelector from './ame-image-selector/ame-image-selector.js';\r\nimport ameNumberInput from './ame-number-input/ame-number-input.js';\r\nimport ameNestedDescription from './ame-nested-description/ame-nested-description.js';\r\nimport ameRadioButtonBar from './ame-radio-button-bar/ame-radio-button-bar.js';\r\nimport ameRadioGroup from './ame-radio-group/ame-radio-group.js';\r\nimport ameSelectBox from './ame-select-box/ame-select-box.js';\r\nimport ameSiblingDescription from './ame-sibling-description/ame-sibling-description.js';\r\nimport ameStaticHtml from './ame-static-html/ame-static-html.js';\r\nimport ameTextInput from './ame-text-input/ame-text-input.js';\r\nimport ameToggleCheckbox from './ame-toggle-checkbox/ame-toggle-checkbox.js';\r\nimport ameUnitDropdown from './ame-unit-dropdown/ame-unit-dropdown.js';\r\nimport ameWpEditor from './ame-wp-editor/ame-wp-editor.js';\r\nimport ameHorizontalSeparator from './ame-horizontal-separator/ame-horizontal-separator.js';\r\nimport ameCodeEditor from './ame-code-editor/ame-code-editor.js';\r\nlet componentsRegistered = false;\r\n/**\r\n * Register the base Knockout components that are part of AME.\r\n *\r\n * It's safe to call this function multiple times. It will only register the components once.\r\n */\r\nexport function registerBaseComponents() {\r\n if (componentsRegistered) {\r\n return;\r\n }\r\n ko.components.register('ame-box-dimensions', ameBoxDimensions);\r\n ko.components.register('ame-color-picker', ameColorPicker);\r\n ko.components.register('ame-font-style-picker', ameFontStylePicker);\r\n ko.components.register('ame-image-selector', ameImageSelector);\r\n ko.components.register('ame-number-input', ameNumberInput);\r\n ko.components.register('ame-nested-description', ameNestedDescription);\r\n ko.components.register('ame-radio-button-bar', ameRadioButtonBar);\r\n ko.components.register('ame-radio-group', ameRadioGroup);\r\n ko.components.register('ame-select-box', ameSelectBox);\r\n ko.components.register('ame-sibling-description', ameSiblingDescription);\r\n ko.components.register('ame-static-html', ameStaticHtml);\r\n ko.components.register('ame-text-input', ameTextInput);\r\n ko.components.register('ame-toggle-checkbox', ameToggleCheckbox);\r\n ko.components.register('ame-unit-dropdown', ameUnitDropdown);\r\n ko.components.register('ame-wp-editor', ameWpEditor);\r\n ko.components.register('ame-horizontal-separator', ameHorizontalSeparator);\r\n ko.components.register('ame-code-editor', ameCodeEditor);\r\n componentsRegistered = true;\r\n}\r\n//# sourceMappingURL=ame-components.js.map","import { KoComponentViewModel } from '../control-base.js';\r\n/**\r\n * Base class for description components.\r\n */\r\nexport class AmeDescriptionComponent extends KoComponentViewModel {\r\n constructor(params, $element) {\r\n super(params, $element);\r\n this.description = params.description || '';\r\n }\r\n}\r\n//# sourceMappingURL=ame-description.js.map","import { createControlComponentConfig, KoStandaloneControl } from '../control-base.js';\r\n//Note: Font style picker CSS is already included in the main 'controls.scss' file\r\n//and won't be duplicated or included here. Instead, load that stylesheet when\r\n//using any control components.\r\n/**\r\n * Font style options that can be selected in the picker component.\r\n *\r\n * Regrettably, these are duplicated from the PHP version of the control.\r\n * Once browsers support importing JSON files, we can move this to a separate\r\n * file and use that file in both places.\r\n */\r\nconst fontStyleOptions = {\r\n \"font-style\": [\r\n {\r\n \"value\": null,\r\n \"text\": \"Default font style\",\r\n \"label\": \"—\"\r\n },\r\n {\r\n \"value\": \"italic\",\r\n \"text\": \"Italic\",\r\n \"label\": \"\"\r\n }\r\n ],\r\n \"text-transform\": [\r\n {\r\n \"value\": null,\r\n \"text\": \"Default letter case\",\r\n \"label\": \"—\"\r\n },\r\n {\r\n \"value\": \"uppercase\",\r\n \"text\": \"Uppercase\",\r\n \"label\": {\r\n 'text-transform': 'uppercase'\r\n }\r\n },\r\n {\r\n \"value\": \"lowercase\",\r\n \"text\": \"Lowercase\",\r\n \"label\": {\r\n 'text-transform': 'lowercase'\r\n }\r\n },\r\n {\r\n \"value\": \"capitalize\",\r\n \"text\": \"Capitalize each word\",\r\n \"label\": {\r\n 'text-transform': 'capitalize'\r\n }\r\n }\r\n ],\r\n \"font-variant\": [\r\n {\r\n \"value\": null,\r\n \"text\": \"Default font variant\",\r\n \"label\": \"—\"\r\n },\r\n {\r\n \"value\": \"small-caps\",\r\n \"text\": \"Small caps\",\r\n \"label\": {\r\n 'font-variant': 'small-caps'\r\n }\r\n }\r\n ],\r\n \"text-decoration\": [\r\n {\r\n \"value\": null,\r\n \"text\": \"Default text decoration\",\r\n \"label\": \"—\"\r\n },\r\n {\r\n \"value\": \"underline\",\r\n \"text\": \"Underline\",\r\n \"label\": \"\"\r\n },\r\n {\r\n \"value\": \"line-through\",\r\n \"text\": \"Strikethrough\",\r\n \"label\": \"\"\r\n }\r\n ]\r\n};\r\n//Generate label HTML for options that don't have it yet.\r\nfunction makeFontSample(styles) {\r\n let styleString = '';\r\n for (const [property, value] of Object.entries(styles)) {\r\n styleString += `${property}: ${value};`;\r\n }\r\n return `ab`;\r\n}\r\nlet flattenedOptions = [];\r\nfor (const [property, options] of Object.entries(fontStyleOptions)) {\r\n options.forEach((option) => {\r\n //Skip null values. They're used to indicate the default option,\r\n //and we don't need those in the Knockout version of this control.\r\n if (option.value === null) {\r\n return;\r\n }\r\n let labelString;\r\n if (typeof option.label === 'object') {\r\n labelString = makeFontSample(option.label);\r\n }\r\n else {\r\n labelString = option.label;\r\n }\r\n flattenedOptions.push({\r\n 'value': option.value,\r\n 'text': option.text || '',\r\n 'property': property,\r\n 'label': labelString\r\n });\r\n });\r\n}\r\nclass AmeFontStylePicker extends KoStandaloneControl {\r\n constructor(params, $element) {\r\n super(params, $element);\r\n this.options = flattenedOptions;\r\n }\r\n get classes() {\r\n return ['ame-font-style-control', ...super.classes];\r\n }\r\n // noinspection JSUnusedGlobalSymbols -- Used in the template, below.\r\n isOptionSelected(property, value) {\r\n if (this.settings.hasOwnProperty(property)) {\r\n return (this.settings[property].value() === value);\r\n }\r\n return false;\r\n }\r\n // noinspection JSUnusedGlobalSymbols -- Used in the template.\r\n toggleOption(property, value) {\r\n if (!this.settings.hasOwnProperty(property)) {\r\n return;\r\n }\r\n const targetSetting = this.settings[property];\r\n if (targetSetting.value() === value) {\r\n //When the user clicks on the currently selected option, reset it to the default.\r\n targetSetting.tryUpdate(null);\r\n }\r\n else {\r\n //Otherwise, set the new value.\r\n targetSetting.tryUpdate(value);\r\n }\r\n }\r\n}\r\n//Note: This weird spacing in the template string is intentional. It's used to\r\n//remove whitespace nodes from the DOM, which would otherwise slightly change\r\n//the layout of the control.\r\nexport default createControlComponentConfig(AmeFontStylePicker, `\n\t
    \n\t\t\n\t
    \n`);\r\n//# sourceMappingURL=ame-font-style-picker.js.map","import { createControlComponentConfig, KoStandaloneControl } from '../control-base.js';\r\nclass AmeHorizontalSeparator extends KoStandaloneControl {\r\n constructor(params, $element) {\r\n super(params, $element);\r\n }\r\n}\r\nexport default createControlComponentConfig(AmeHorizontalSeparator, `\n\t
    \n`);\r\n//# sourceMappingURL=ame-horizontal-separator.js.map","'use strict';\r\nimport { createControlComponentConfig, KoStandaloneControl } from '../control-base.js';\r\n/**\r\n * Image selector control.\r\n *\r\n * This implementation hands off the work to the existing AmeImageSelectorApi.ImageSelector\r\n * class to avoid duplicating the effort. That class is not a module because it is also\r\n * used for the more progressive-enhancement-y PHP-rendered controls, so we can't import it.\r\n */\r\nclass AmeImageSelector extends KoStandaloneControl {\r\n constructor(params, $element) {\r\n super(params, $element);\r\n this.selectorInstance = null;\r\n //Verify that our dependencies are available.\r\n if (typeof AmeImageSelectorApi === 'undefined') {\r\n throw new Error('AmeImageSelectorApi is not available. Remember to enqueue \"ame-image-selector-control-v2\".');\r\n }\r\n if (typeof AmeImageSelectorApi.ImageSelector === 'undefined') {\r\n throw new Error('AmeImageSelectorApi.ImageSelector is not available. This is probably a bug.');\r\n }\r\n this.externalUrlsAllowed = !!params.externalUrlsAllowed;\r\n this.canSelectMedia = !!params.canSelectMedia;\r\n this.imageProxy = this.settings.value.value;\r\n }\r\n get classes() {\r\n return [\r\n 'ame-image-selector-v2',\r\n ...super.classes,\r\n ];\r\n }\r\n koDescendantsComplete() {\r\n const $container = this.findChild('.ame-image-selector-v2');\r\n if ($container.length === 0) {\r\n return;\r\n }\r\n this.selectorInstance = new AmeImageSelectorApi.ImageSelector($container, {\r\n externalUrlsAllowed: this.externalUrlsAllowed,\r\n canSelectMedia: this.canSelectMedia,\r\n }, this.imageProxy());\r\n }\r\n}\r\nexport default createControlComponentConfig(AmeImageSelector, `\n\t
    \n\t\t\n\t
    \n`);\r\n//# sourceMappingURL=ame-image-selector.js.map","import { createComponentConfig } from '../control-base.js';\r\nimport { AmeDescriptionComponent } from '../ame-description/ame-description.js';\r\n/**\r\n * A simple component that displays the description of a UI element.\r\n *\r\n * Like AmeSiblingDescription, but intended to be rendered inside\r\n * the parent control or container, not as a sibling.\r\n */\r\nclass AmeNestedDescription extends AmeDescriptionComponent {\r\n}\r\nexport default createComponentConfig(AmeNestedDescription, `\n\t
    \t\n`);\r\n//# sourceMappingURL=ame-nested-description.js.map","/// \r\nimport { createControlComponentConfig, KoDependentControl } from '../control-base.js';\r\nimport { AmeCustomizable } from '../../assets/customizable.js';\r\nvar Control = AmeCustomizable.Control;\r\nexport class AmeNumberInput extends KoDependentControl {\r\n constructor(params, $element) {\r\n super(params, $element);\r\n this.sliderRanges = null;\r\n this.slider = null;\r\n this.numericValue = this.valueProxy.extend({ 'ameNumericInput': true });\r\n this.unitText = params.unitText || '';\r\n this.hasUnitDropdown = params.hasUnitDropdown || false;\r\n this.unitElementId = params.unitElementId || '';\r\n if (this.hasUnitDropdown && params.unitDropdownOptions) {\r\n this.unitDropdownOptions = {\r\n options: params.unitDropdownOptions.options || [],\r\n optionsText: params.unitDropdownOptions.optionsText || 'text',\r\n optionsValue: params.unitDropdownOptions.optionsValue || 'value'\r\n };\r\n }\r\n else {\r\n this.unitDropdownOptions = null;\r\n }\r\n this.min = params.min || null;\r\n this.max = params.max || null;\r\n this.step = params.step || null;\r\n if (params.sliderRanges) {\r\n this.sliderRanges = params.sliderRanges;\r\n }\r\n this.popupSliderWithin = (typeof params.popupSliderWithin === 'string') ? params.popupSliderWithin : null;\r\n this.inputClasses.unshift('ame-input-with-popup-slider', 'ame-number-input');\r\n }\r\n get classes() {\r\n const classes = ['ame-number-input-control'];\r\n if (this.sliderRanges !== null) {\r\n classes.push('ame-container-with-popup-slider');\r\n }\r\n classes.push(...super.classes);\r\n return classes;\r\n }\r\n get inputClasses() {\r\n const classes = ['ame-input-with-popup-slider', 'ame-number-input'];\r\n classes.push(...super.inputClasses);\r\n return classes;\r\n }\r\n getAdditionalInputAttributes() {\r\n let attributes = super.getAdditionalInputAttributes();\r\n if (this.min !== null) {\r\n attributes['min'] = this.min.toString();\r\n }\r\n if (this.max !== null) {\r\n attributes['max'] = this.max.toString();\r\n }\r\n if (this.step !== null) {\r\n attributes['step'] = this.step.toString();\r\n }\r\n if (this.unitElementId) {\r\n attributes['data-unit-element-id'] = this.unitElementId;\r\n }\r\n return attributes;\r\n }\r\n // noinspection JSUnusedGlobalSymbols -- Used in the Knockout template in this same file.\r\n showPopupSlider($data, event) {\r\n if ((this.sliderRanges === null) || (typeof AmePopupSlider === 'undefined')) {\r\n return;\r\n }\r\n //Some sanity checks.\r\n if (!event.target) {\r\n return;\r\n }\r\n const $input = jQuery(event.target);\r\n if ($input.is(':disabled') || !$input.is('input')) {\r\n return;\r\n }\r\n const $container = $input.closest('.ame-container-with-popup-slider');\r\n if ($container.length < 1) {\r\n return;\r\n }\r\n //Initialize the slider if it's not already initialized.\r\n if (!this.slider) {\r\n let sliderOptions = {};\r\n if (this.popupSliderWithin) {\r\n sliderOptions.positionWithinClosest = this.popupSliderWithin;\r\n }\r\n //In HTML, we would pass the range data as a \"data-slider-ranges\" attribute,\r\n //but here we can just set the data directly.\r\n $input.data('slider-ranges', this.sliderRanges);\r\n this.slider = AmePopupSlider.createSlider($container, sliderOptions);\r\n }\r\n this.slider.showForInput($input);\r\n }\r\n getExpectedUiElementType() {\r\n return Control;\r\n }\r\n}\r\nexport default createControlComponentConfig(AmeNumberInput, `\n\t
    \n\t\t
    \n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t
    \n\t
    \t\n`);\r\n//# sourceMappingURL=ame-number-input.js.map","'use strict';\r\nimport { createControlComponentConfig } from '../control-base.js';\r\nimport { AmeChoiceControl } from '../ame-choice-control/ame-choice-control.js';\r\nclass AmeRadioButtonBar extends AmeChoiceControl {\r\n constructor(params, $element) {\r\n super(params, $element);\r\n }\r\n get classes() {\r\n return ['ame-radio-button-bar-control', ...super.classes];\r\n }\r\n}\r\nexport default createControlComponentConfig(AmeRadioButtonBar, `\n\t
    \n\t\t\n\t\t\n\t\t\n\t
    \n`);\r\n//# sourceMappingURL=ame-radio-button-bar.js.map","'use strict';\r\nimport { createControlComponentConfig } from '../control-base.js';\r\nimport { AmeChoiceControl } from '../ame-choice-control/ame-choice-control.js';\r\n// noinspection JSUnusedGlobalSymbols -- Enum keys like \"Paragraph\" are used when serializing wrapStyle in PHP.\r\nvar WrapStyle;\r\n(function (WrapStyle) {\r\n WrapStyle[\"LineBreak\"] = \"br\";\r\n WrapStyle[\"Paragraph\"] = \"p\";\r\n WrapStyle[\"None\"] = \"\";\r\n})(WrapStyle || (WrapStyle = {}));\r\nfunction isWrapStyle(value) {\r\n if (typeof value !== 'string') {\r\n return false;\r\n }\r\n return (typeof WrapStyle[value] === 'string');\r\n}\r\nlet nextRadioGroupId = 1;\r\nclass AmeRadioGroup extends AmeChoiceControl {\r\n constructor(params, $element) {\r\n super(params, $element);\r\n this.wrapStyle = WrapStyle.None;\r\n this.childByValue = new Map();\r\n if ((typeof params['valueChildIndexes'] === 'object') && Array.isArray(params.valueChildIndexes)) {\r\n const children = ko.unwrap(this.inputChildren);\r\n for (const [value, index] of params.valueChildIndexes) {\r\n if (!children || !children[index]) {\r\n throw new Error('The \"' + this.label + '\" radio group has no children, but its valueChildIndexes'\r\n + ' requires child #' + index + ' to be associated with value \"' + value + '\".');\r\n }\r\n this.childByValue.set(value, children[index]);\r\n }\r\n }\r\n this.wrapStyle = isWrapStyle(params.wrapStyle) ? WrapStyle[params.wrapStyle] : WrapStyle.None;\r\n if (this.childByValue.size > 0) {\r\n this.wrapStyle = WrapStyle.None;\r\n }\r\n this.radioInputPrefix = (typeof params.radioInputPrefix === 'string')\r\n ? params.radioInputPrefix\r\n : ('ame-rg-input-' + nextRadioGroupId++ + '-');\r\n }\r\n get classes() {\r\n const result = ['ame-radio-group-component', ...super.classes];\r\n if (this.childByValue.size > 0) {\r\n result.push('ame-rg-has-nested-controls');\r\n }\r\n return result;\r\n }\r\n // noinspection JSUnusedGlobalSymbols -- Used in the template below.\r\n getChoiceChild(value) {\r\n return this.childByValue.get(value) || null;\r\n }\r\n // noinspection JSUnusedGlobalSymbols -- Used in the template.\r\n /**\r\n * Get the ID attribute for a radio input.\r\n *\r\n * Note: This must match the algorithm used by the PHP version of this control\r\n * to work correctly with the BorderStyleSelector control that adds style samples\r\n * to each choice and uses the ID to link them to the inputs (so that clicking\r\n * the sample selects the option).\r\n */\r\n getRadioInputId(choice) {\r\n let sanitizedValue = (choice.value !== null) ? choice.value.toString() : '';\r\n //Emulate the sanitize_key() function from WordPress core.\r\n sanitizedValue = sanitizedValue.toLowerCase().replace(/[^a-z0-9_\\-]/gi, '');\r\n return this.radioInputPrefix + sanitizedValue;\r\n }\r\n}\r\nconst choiceTemplate = `\n\t\n`;\r\nexport default createControlComponentConfig(AmeRadioGroup, `\n\t
    \n\t\t\n\t\t\t\n\t\t\t\t${choiceTemplate}
    \n\t\t\t\n\t\t\t\n\t\t\t\t

    ${choiceTemplate}

    \n\t\t\t\n\t\t\t\n\t\t\t\t${choiceTemplate}\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t
    \n`);\r\n//# sourceMappingURL=ame-radio-group.js.map","import { AmeChoiceControl } from '../ame-choice-control/ame-choice-control.js';\r\nimport { createControlComponentConfig } from '../control-base.js';\r\nclass AmeSelectBox extends AmeChoiceControl {\r\n constructor(params, $element) {\r\n super(params, $element);\r\n }\r\n get classes() {\r\n return ['ame-select-box-control', ...super.classes];\r\n }\r\n}\r\nexport default createControlComponentConfig(AmeSelectBox, `\n\t\n\t\n\t\t\n\t\t\n`);\r\n//# sourceMappingURL=ame-select-box.js.map","import { createComponentConfig } from '../control-base.js';\r\nimport { AmeDescriptionComponent } from '../ame-description/ame-description.js';\r\n/**\r\n * A simple component that displays the description of a UI element.\r\n *\r\n * This should be rendered as a sibling of the UI element's component,\r\n * typically immediately after it.\r\n *\r\n * Caution: HTML is allowed in the description.\r\n */\r\nclass AmeSiblingDescription extends AmeDescriptionComponent {\r\n}\r\nexport default createComponentConfig(AmeSiblingDescription, `\n\t

    \t\n`);\r\n//# sourceMappingURL=ame-sibling-description.js.map","import { createControlComponentConfig, KoStandaloneControl } from '../control-base.js';\r\nclass AmeStaticHtml extends KoStandaloneControl {\r\n constructor(params, $element) {\r\n super(params, $element);\r\n this.containerType = 'span';\r\n this.htmlContent = (typeof params.html === 'string') ? params.html : '';\r\n if (typeof params.container === 'string') {\r\n this.containerType = params.container;\r\n }\r\n }\r\n}\r\n//Note: The HTML content has to be in a container element because Knockout doesn't allow\r\n//using the \"html\" binding with virtual elements.\r\nexport default createControlComponentConfig(AmeStaticHtml, `\n\t\n\t\t
    \n\t\n\t\n\t\t\n\t\n`);\r\n//# sourceMappingURL=ame-static-html.js.map","import { createControlComponentConfig, KoDependentControl } from '../control-base.js';\r\nexport class AmeTextInput extends KoDependentControl {\r\n constructor(params, $element) {\r\n super(params, $element);\r\n this.inputType = 'text';\r\n this.isCode = params.isCode || false;\r\n this.inputType = params.inputType || 'text';\r\n }\r\n get inputClasses() {\r\n const classes = ['regular-text'];\r\n if (this.isCode) {\r\n classes.push('code');\r\n }\r\n classes.push('ame-text-input-control', ...super.inputClasses);\r\n return classes;\r\n }\r\n getAdditionalInputAttributes() {\r\n return Object.assign({ 'type': this.inputType }, super.getAdditionalInputAttributes());\r\n }\r\n}\r\nexport default createControlComponentConfig(AmeTextInput, `\n\t\n\t\n\t\t\n\t\t\n`);\r\n//# sourceMappingURL=ame-text-input.js.map","import { createControlComponentConfig, KoStandaloneControl } from '../control-base.js';\r\nclass AmeToggleCheckbox extends KoStandaloneControl {\r\n constructor(params, $element) {\r\n super(params, $element);\r\n this.onValue = (typeof params.onValue !== 'undefined') ? params.onValue : true;\r\n this.offValue = (typeof params.offValue !== 'undefined') ? params.offValue : false;\r\n if (typeof this.settings['value'] === 'undefined') {\r\n this.isChecked = ko.pureComputed(() => false);\r\n }\r\n else {\r\n this.isChecked = ko.computed({\r\n read: () => {\r\n return this.settings.value.value() === ko.unwrap(this.onValue);\r\n },\r\n write: (newValue) => {\r\n this.settings.value.value(ko.unwrap(newValue ? this.onValue : this.offValue));\r\n },\r\n deferEvaluation: true\r\n });\r\n }\r\n }\r\n get classes() {\r\n return ['ame-toggle-checkbox-control', ...super.classes];\r\n }\r\n}\r\n//Unlike the HTML version of this control, the Knockout version doesn't have\r\n//a second, hidden checkbox. This is because the component is entirely JS-based\r\n//and doesn't need to be submitted as part of a form.\r\nexport default createControlComponentConfig(AmeToggleCheckbox, `\n\t\t\n`);\r\n//# sourceMappingURL=ame-toggle-checkbox.js.map","import { createControlComponentConfig, KoStandaloneControl } from '../control-base.js';\r\nexport class AmeUnitDropdown extends KoStandaloneControl {\r\n constructor(params, $element) {\r\n super(params, $element);\r\n this.dropdownData = params.optionData || {\r\n options: [],\r\n optionsText: 'text',\r\n optionsValue: 'value'\r\n };\r\n this.selectId = params.id || '';\r\n }\r\n}\r\nexport default createControlComponentConfig(AmeUnitDropdown, `\n\t\n`);\r\n//# sourceMappingURL=ame-unit-dropdown.js.map","'use strict';\r\nimport { createControlComponentConfig, KoStandaloneControl } from '../control-base.js';\r\n//Note: Requires Lodash, but does not explicitly import it because this plugin\r\n//already uses Lodash as a global variable (wsAmeLodash) in many places. Code\r\n//that uses this component should make sure that Lodash is loaded.\r\nlet autoAssignedIdCounter = 0;\r\n/**\r\n * List of visual editor buttons that are visible in the \"teeny\" mode.\r\n *\r\n * Found in /wp-includes/class-wp-editor.php, the editor_settings() method.\r\n * The relevant code is around line #601 (as of WP 6.1.1).\r\n */\r\nconst TeenyButtons = [\r\n 'bold',\r\n 'italic',\r\n 'underline',\r\n 'blockquote',\r\n 'strikethrough',\r\n 'bullist',\r\n 'numlist',\r\n 'alignleft',\r\n 'aligncenter',\r\n 'alignright',\r\n 'undo',\r\n 'redo',\r\n 'link',\r\n 'fullscreen'\r\n];\r\n/**\r\n * List of Quicktags editor buttons that are visible by default.\r\n *\r\n * The default list of text editor buttons used by wp.editor.initialize()\r\n * doesn't match the defaults used by wp_editor() in PHP. Let's copy the list\r\n * from /includes/class-wp-editor.php.\r\n */\r\nconst DefaultQuicktagsButtons = [\r\n 'strong', 'em', 'link', 'block', 'del', 'ins', 'img', 'ul', 'ol', 'li', 'code', 'more', 'close'\r\n];\r\nclass AmeWpEditor extends KoStandaloneControl {\r\n constructor(params, $element) {\r\n super(params, $element);\r\n this.editorId = null;\r\n this.isWpEditorInitialized = false;\r\n const textSetting = this.settings.value;\r\n if (typeof textSetting === 'undefined') {\r\n throw new Error('Visual Editor control is missing the required setting');\r\n }\r\n this.rows = params.rows || 6;\r\n this.isTeeny = !!params.teeny;\r\n }\r\n getAdditionalInputAttributes() {\r\n return Object.assign({ rows: this.rows.toString() }, super.getAdditionalInputAttributes());\r\n }\r\n koDescendantsComplete() {\r\n const $textArea = this.findChild('textarea.ame-wp-editor-textarea');\r\n if ($textArea.length === 0) {\r\n return;\r\n }\r\n const currentValue = this.valueProxy();\r\n $textArea.val((currentValue === null) ? '' : currentValue.toString());\r\n //The textarea must have an ID for wp.editor.initialize() to work.\r\n {\r\n let editorId = $textArea.attr('id');\r\n if (!editorId) {\r\n editorId = 'ws-ame-wp-editor-aid-' + (autoAssignedIdCounter++);\r\n $textArea.attr('id', editorId);\r\n }\r\n this.editorId = editorId;\r\n }\r\n //Update the setting when the contents of the underlying textarea change.\r\n //This happens when the user selects the \"Text\" tab in the editor, or when\r\n //TinyMCE is unavailable (e.g. if the \"Disable the visual editor when writing\"\r\n //option is checked in the user's profile).\r\n $textArea.on('change input', this.throttleUpdates(() => $textArea.val()));\r\n let editorSettings = {\r\n tinymce: {\r\n wpautop: true\r\n },\r\n quicktags: {\r\n //The default list of text editor buttons used by wp.editor.initialize()\r\n //doesn't match the defaults used by wp_editor() in PHP. Let's copy the list\r\n //from /includes/class-wp-editor.php.\r\n buttons: DefaultQuicktagsButtons.join(','),\r\n },\r\n //Include the \"Add Media\" button.\r\n mediaButtons: true,\r\n };\r\n if (typeof window['tinymce'] === 'undefined') {\r\n //TinyMCE is disabled or not available.\r\n editorSettings.tinymce = false;\r\n }\r\n if (this.isTeeny && (typeof editorSettings.tinymce === 'object')) {\r\n editorSettings.tinymce.toolbar1 = TeenyButtons.join(',');\r\n editorSettings.tinymce.toolbar2 = '';\r\n }\r\n const $document = jQuery(document);\r\n const self = this;\r\n //After the editor finishes initializing, add an event listener to update\r\n //the setting when the contents of the visual editor change.\r\n $document.on('tinymce-editor-init', function addMceChangeListener(event, editor) {\r\n if (editor.id !== self.editorId) {\r\n return; //Not our editor.\r\n }\r\n //According to the TinyMCE documentation, the \"Change\" event is fired\r\n //when \"changes [...] cause an undo level to be added\". This could be\r\n //too frequent for our purposes, so we'll throttle the callback.\r\n editor.on('Change', self.throttleUpdates(() => editor.getContent()));\r\n $document.off('tinymce-editor-init', addMceChangeListener);\r\n });\r\n //Unfortunately, as of WP 6.2-beta, wp.editor.initialize() doesn't add\r\n //the \"wp-editor-container\" wrapper when only the Quicktags editor is used.\r\n //This means the editor won't be styled correctly. Let's fix that.\r\n $document.on('quicktags-init', function maybeAddEditorWrapper(event, editor) {\r\n if (!editor || (editor.id !== self.editorId)) {\r\n return;\r\n }\r\n if (editor.canvas) {\r\n const $textarea = jQuery(editor.canvas);\r\n const $wrapper = $textarea.closest('.wp-editor-container');\r\n if ($wrapper.length === 0) {\r\n //Also include the toolbar in the wrapper.\r\n const $toolbar = $textarea.prevAll('.quicktags-toolbar').first();\r\n $textarea.add($toolbar).wrapAll('
    ');\r\n }\r\n }\r\n $document.off('quicktags-init', maybeAddEditorWrapper);\r\n });\r\n //Finally, initialize the editor.\r\n wp.editor.initialize($textArea.attr('id'), editorSettings);\r\n this.isWpEditorInitialized = true;\r\n }\r\n /**\r\n * Create a throttled function that updates the setting.\r\n *\r\n * There are multiple ways to get the contents of the editor (e.g. TinyMCE mode\r\n * vs a plain textarea), so using a utility function helps avoid code duplication.\r\n *\r\n * @param valueGetter\r\n * @protected\r\n */\r\n throttleUpdates(valueGetter) {\r\n const textSetting = this.settings.value;\r\n return wsAmeLodash.throttle(function () {\r\n textSetting.value(valueGetter());\r\n return void 0;\r\n }, 1000, { leading: true, trailing: true });\r\n }\r\n dispose() {\r\n //Destroy the editor. It's not clear whether this is necessary, but it's\r\n //probably a good idea to give WP a chance to clean up.\r\n if (this.isWpEditorInitialized && (this.editorId !== null)) {\r\n wp.editor.remove(this.editorId);\r\n this.isWpEditorInitialized = false;\r\n }\r\n super.dispose();\r\n }\r\n}\r\n//Note: The class of the textarea element is set directly instead of using a binding\r\n//because it must always have the \"wp-editor-area\" class for it to render correctly\r\n//(apparently, wp.editor.initialize() does not automatically add that class).\r\n//Knockout should not be able to remove the class.\r\nexport default createControlComponentConfig(AmeWpEditor, `\n\t\t\n`);\r\n//# sourceMappingURL=ame-wp-editor.js.map","import { AmeCustomizable } from '../assets/customizable.js';\r\nvar Setting = AmeCustomizable.Setting;\r\nvar InterfaceStructure = AmeCustomizable.InterfaceStructure;\r\nvar Control = AmeCustomizable.Control;\r\nexport class KoComponentViewModel {\r\n constructor(params, $element) {\r\n var _a;\r\n this.params = params;\r\n this.$element = $element;\r\n this.isBoundToComment = ($element[0]) && ($element[0].nodeType === Node.COMMENT_NODE);\r\n this.uiElement = null;\r\n const expectedType = this.getExpectedUiElementType();\r\n if (expectedType !== null) {\r\n if ((typeof params.uiElement !== 'undefined')\r\n && (params.uiElement instanceof expectedType)) {\r\n this.uiElement = params.uiElement;\r\n }\r\n else {\r\n throw new Error('uiElement is not a ' + expectedType.name + ' instance.');\r\n }\r\n }\r\n else if ((typeof params.uiElement !== 'undefined') && !(this instanceof KoStandaloneControl)) {\r\n console.warn('Unexpected \"uiElement\" parameter for ' + this.constructor.name\r\n + ' that did not expect an UI element. Did you forget to override getExpectedUiElementType() ?', params.uiElement);\r\n }\r\n if (typeof params.children !== 'undefined') {\r\n if (Array.isArray(params.children) || this.isObservableArray(params.children)) {\r\n this.inputChildren = params.children;\r\n }\r\n else {\r\n throw new Error('Invalid \"children\" parameter: expected an array or an observable array.');\r\n }\r\n }\r\n else {\r\n this.inputChildren = [];\r\n }\r\n this.customClasses = ((typeof params.classes === 'object') && Array.isArray(params.classes)) ? params.classes : [];\r\n this.customStyles = ((typeof params.styles === 'object') && (params.styles !== null)) ? params.styles : {};\r\n if (typeof params.enabled !== 'undefined') {\r\n if (ko.isObservable(params.enabled)) {\r\n this.isEnabled = params.enabled;\r\n }\r\n else {\r\n this.isEnabled = ko.pureComputed(() => !!params.enabled);\r\n }\r\n }\r\n else {\r\n this.isEnabled = ko.pureComputed(() => true);\r\n }\r\n //Get the description either from the \"description\" parameter or from the UI element.\r\n this.description = params.description\r\n ? ko.unwrap(params.description.toString())\r\n : (((_a = this.uiElement) === null || _a === void 0 ? void 0 : _a.description) || '');\r\n }\r\n dispose() {\r\n //Does nothing by default.\r\n }\r\n getExpectedUiElementType() {\r\n return null;\r\n }\r\n get classes() {\r\n return [].concat(this.customClasses);\r\n }\r\n // noinspection JSUnusedGlobalSymbols -- Used in Knockout templates.\r\n get classString() {\r\n return this.classes.join(' ');\r\n }\r\n get styles() {\r\n return Object.assign({}, this.customStyles);\r\n }\r\n findChild(selector, allowSiblingSearch = null) {\r\n if (allowSiblingSearch === null) {\r\n //Enable only if the component is bound to a comment (i.e. \"\").\r\n allowSiblingSearch = this.isBoundToComment;\r\n }\r\n if (this.isBoundToComment) {\r\n if (allowSiblingSearch) {\r\n return this.$element.nextAll(selector).first();\r\n }\r\n else {\r\n //We would never find anything because a comment node has no children.\r\n return jQuery();\r\n }\r\n }\r\n return this.$element.find(selector);\r\n }\r\n isObservableArray(value) {\r\n return (typeof value === 'object')\r\n && (value !== null)\r\n && (typeof value.slice === 'function')\r\n && (typeof value.indexOf === 'function')\r\n && (ko.isObservable(value));\r\n }\r\n}\r\nfunction makeCreateVmFunctionForComponent(ctor) {\r\n return function (params, componentInfo) {\r\n const $element = jQuery(componentInfo.element);\r\n return new ctor(params, $element);\r\n };\r\n}\r\nexport function createComponentConfig(ctor, templateString) {\r\n return {\r\n viewModel: {\r\n createViewModel: makeCreateVmFunctionForComponent(ctor),\r\n },\r\n template: templateString,\r\n };\r\n}\r\n//endregion\r\n//region Container\r\nexport class ComponentBindingOptions {\r\n // noinspection JSUnusedGlobalSymbols -- the uiElement property is used in the KO template of AC control groups.\r\n constructor(name, params, uiElement) {\r\n this.name = name;\r\n this.params = params;\r\n this.uiElement = uiElement;\r\n if (name === '') {\r\n throw new Error('Component name cannot be empty.');\r\n }\r\n }\r\n static fromElement(element, overrideComponentName = null) {\r\n if (!element.component && (overrideComponentName === null)) {\r\n throw new Error(`Cannot create component binding options for UI element \"${element.id}\" without a component name.`);\r\n }\r\n return new ComponentBindingOptions(overrideComponentName || element.component, element.getComponentParams(), element);\r\n }\r\n}\r\nexport class KoContainerViewModel extends KoComponentViewModel {\r\n constructor(params, $element) {\r\n if (typeof params.children === 'undefined') {\r\n throw new Error('Missing \"children\" parameter.');\r\n }\r\n super(params, $element);\r\n this.title = ko.pureComputed(() => {\r\n if (typeof params.title !== 'undefined') {\r\n let title = ko.unwrap(params.title);\r\n if ((title !== null) && (typeof title !== 'undefined')) {\r\n return title.toString();\r\n }\r\n }\r\n if (this.uiElement) {\r\n return this.uiElement.title;\r\n }\r\n return '';\r\n });\r\n this.childComponents = ko.pureComputed(() => {\r\n const result = ko.unwrap(this.inputChildren)\r\n .map(child => this.mapChildToComponentBinding(child))\r\n .filter(binding => binding !== null);\r\n //TypeScript does not recognize that the filter() call above removes\r\n //all null values, so we need an explicit cast.\r\n return result;\r\n });\r\n }\r\n mapChildToComponentBinding(child) {\r\n //Does not map any children by default.\r\n return null;\r\n }\r\n dispose() {\r\n super.dispose();\r\n this.childComponents.dispose();\r\n }\r\n}\r\n//endregion\r\n//region Control\r\nexport class KoControlViewModel extends KoComponentViewModel {\r\n constructor(params, $element) {\r\n var _a;\r\n super(params, $element);\r\n this.settings =\r\n ((typeof params.settings === 'object') && isSettingMap(params.settings))\r\n ? params.settings\r\n : {};\r\n if (typeof this.settings.value !== 'undefined') {\r\n this.valueProxy = this.settings.value.value;\r\n }\r\n else {\r\n this.valueProxy = ko.pureComputed(() => {\r\n console.error('Missing \"value\" setting for a control component.', this.settings, params);\r\n return '';\r\n });\r\n }\r\n //Input ID will be provided by the server if applicable.\r\n this.primaryInputId = (typeof params.primaryInputId === 'string') ? params.primaryInputId : null;\r\n this.inputAttributes = ko.pureComputed(() => {\r\n var _a;\r\n const attributes = ((_a = this.uiElement) === null || _a === void 0 ? void 0 : _a.inputAttributes) || {};\r\n const inputId = this.getPrimaryInputId();\r\n if ((inputId !== null) && (inputId !== '')) {\r\n attributes.id = inputId;\r\n }\r\n //Note: The \"name\" field is not used because these controls are entirely JS-driven.\r\n const additionalAttributes = this.getAdditionalInputAttributes();\r\n for (const key in additionalAttributes) {\r\n if (!additionalAttributes.hasOwnProperty(key)) {\r\n continue;\r\n }\r\n attributes[key] = additionalAttributes[key];\r\n }\r\n return attributes;\r\n });\r\n if ((typeof params.label !== 'undefined') && (params.label !== null)) {\r\n const unwrappedLabel = ko.unwrap(params.label);\r\n this.label = (typeof unwrappedLabel === 'undefined') ? '' : unwrappedLabel.toString();\r\n }\r\n else {\r\n this.label = ((_a = this.uiElement) === null || _a === void 0 ? void 0 : _a.label) || '';\r\n }\r\n }\r\n get inputClasses() {\r\n var _a;\r\n return ((_a = this.uiElement) === null || _a === void 0 ? void 0 : _a.inputClasses) || [];\r\n }\r\n // noinspection JSUnusedGlobalSymbols -- Used in Knockout templates.\r\n get inputClassString() {\r\n return this.inputClasses.join(' ');\r\n }\r\n getAdditionalInputAttributes() {\r\n return {};\r\n }\r\n getPrimaryInputId() {\r\n return this.primaryInputId;\r\n }\r\n}\r\nfunction isSettingMap(value) {\r\n if (value === null) {\r\n return false;\r\n }\r\n if (typeof value !== 'object') {\r\n return false;\r\n }\r\n const valueAsRecord = value;\r\n for (const key in valueAsRecord) {\r\n if (!valueAsRecord.hasOwnProperty(key)) {\r\n continue;\r\n }\r\n if (!(valueAsRecord[key] instanceof Setting)) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n}\r\n/**\r\n * A control that doesn't use or need a UI element instance, but can still have\r\n * settings and other parameters typically associated with controls.\r\n */\r\nexport class KoStandaloneControl extends KoControlViewModel {\r\n}\r\n/**\r\n * A control that requires a UI element of the \"Control\" class.\r\n */\r\nexport class KoDependentControl extends KoControlViewModel {\r\n getExpectedUiElementType() {\r\n return Control;\r\n }\r\n}\r\nexport function createControlComponentConfig(ctor, templateString) {\r\n return {\r\n viewModel: {\r\n createViewModel: makeCreateVmFunctionForComponent(ctor),\r\n },\r\n template: templateString,\r\n };\r\n}\r\n//endregion\r\n//region Renderer\r\nexport class KoRendererViewModel extends KoComponentViewModel {\r\n constructor(params, $element) {\r\n super(params, $element);\r\n if ((typeof params.structure !== 'object') || !(params.structure instanceof InterfaceStructure)) {\r\n throw new Error('Invalid interface structure for a renderer component.');\r\n }\r\n this.structure = params.structure;\r\n }\r\n}\r\nexport function createRendererComponentConfig(ctor, templateString) {\r\n return {\r\n viewModel: {\r\n createViewModel: makeCreateVmFunctionForComponent(ctor),\r\n },\r\n template: templateString,\r\n };\r\n}\r\n//endregion\r\n//# sourceMappingURL=control-base.js.map","/// \r\n/**\r\n * This is a wrapper for the popup slider that initializes the slider on first use.\r\n * It's useful for Knockout components.\r\n */\r\nexport class LazyPopupSliderAdapter {\r\n constructor(sliderRanges, containerSelector = '.ame-container-with-popup-slider', inputSelector = 'input', sliderOptions = {}) {\r\n this.sliderRanges = sliderRanges;\r\n this.containerSelector = containerSelector;\r\n this.inputSelector = inputSelector;\r\n this.sliderOptions = sliderOptions;\r\n this.slider = null;\r\n if (!sliderOptions.hasOwnProperty('ranges')) {\r\n sliderOptions.ranges = sliderRanges;\r\n }\r\n this.handleKoClickEvent = ($data, event) => {\r\n //Verify that this is one of the inputs we're interested in.\r\n //Also, disabled inputs should not trigger the slider.\r\n if (event.target === null) {\r\n return;\r\n }\r\n const $input = jQuery(event.target);\r\n if ($input.is(':disabled') || !$input.is(this.inputSelector)) {\r\n return;\r\n }\r\n //Short-circuit if the slider is already initialized.\r\n if (this.slider) {\r\n this.slider.showForInput($input);\r\n return;\r\n }\r\n //Some sanity checks.\r\n if (typeof AmePopupSlider === 'undefined') {\r\n return;\r\n }\r\n const $container = $input.closest(this.containerSelector);\r\n if ($container.length < 1) {\r\n return;\r\n }\r\n this.initSlider($container);\r\n if (this.slider !== null) {\r\n //TS doesn't realize that this.initSlider() will initialize the slider.\r\n this.slider.showForInput($input);\r\n }\r\n };\r\n }\r\n /**\r\n * Initialize the slider if it's not already initialized.\r\n */\r\n initSlider($container) {\r\n if (this.slider) {\r\n return;\r\n }\r\n //In HTML, we would pass the range data as a \"data-slider-ranges\" attribute,\r\n //but here they are passed via the \"ranges\" option (see the constructor).\r\n this.slider = AmePopupSlider.createSlider($container, this.sliderOptions);\r\n }\r\n}\r\n//# sourceMappingURL=lazy-popup-slider-adapter.js.map"],"names":[],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"admin-customizer.bundle.js","mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD,IAAI;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,oBAAoB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,gCAAgC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD;AACrD;AACA,0DAA0D;AAC1D,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,eAAe,aAAa,eAAe;AACjF;AACA;AACA;AACA,yDAAyD,2DAA2D;AACpH;AACA;AACA,wDAAwD,kCAAkC;AAC1F;AACA;AACA;AACA;AACA;AACA,+DAA+D,+BAA+B;AAC9F;AACA;AACA,sDAAsD,+BAA+B,cAAc,eAAe;AAClH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8DAA8D,0BAA0B;AACxF;AACA,qCAAqC,SAAS,oDAAoD,0BAA0B;AAC5H;AACA;AACA;AACA,iEAAiE,4BAA4B;AAC7F;AACA;AACA,+DAA+D,0BAA0B;AACzF;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,iBAAiB;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,sEAAsE,EAAE,eAAe;AACvI;AACA,iDAAiD,iEAAiE,EAAE,eAAe;AACnI;AACA,4CAA4C;AAC5C;AACA;AACA;AACA,0CAA0C,EAAE,cAAc;AAC1D;AACA,0CAA0C;AAC1C;AACA;AACA;AACA,0CAA0C,EAAE,gCAAgC;AAC5E;AACA;AACA;AACA;AACA;AACA,gDAAgD,qEAAqE,EAAE,eAAe;AACtI;AACA,iDAAiD,iEAAiE,EAAE,eAAe;AACnI;AACA,4CAA4C;AAC5C;AACA;AACA;AACA,uCAAuC,EAAE,cAAc;AACvD;AACA,4CAA4C;AAC5C;AACA;AACA;AACA,uCAAuC,EAAE,cAAc;AACvD;AACA,0CAA0C;AAC1C;AACA;AACA;AACA,0CAA0C,EAAE,gCAAgC;AAC5E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,iBAAiB;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,YAAY,mCAAmC;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,kCAAkC;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,aAAa;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,CAAC;AACD,4BAA4B,wBAAwB;AACpD,yBAAyB,wBAAwB;AACjD;AACA;AACA;AACA;;AAEA;AACA;AACA,sEAAsE,UAAU;AAChF;AACA,CAAC,8BAA8B;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,4DAA4D;AACxE;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,qBAAqB;AACrB;AACA,qBAAqB;AACrB;AACA,iBAAiB;AACjB;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,mCAAmC;AAC5E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,mCAAmC;AAClF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,sBAAsB,gCAAgC;AACtD,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,8BAA8B;AACpD,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,GAAG;AAC/B;AACA,sCAAsC,GAAG;AACzC,8BAA8B,EAAE,UAAU,EAAE,eAAe,EAAE,UAAU,EAAE,UAAU,GAAG;AACtF;AACA;AACA,4DAA4D,GAAG,mFAAmF,GAAG;AACrJ;AACA,sCAAsC,sBAAsB,sCAAsC,uBAAuB,OAAO,GAAG,cAAc;AACjJ;AACA,qCAAqC,yBAAyB,4DAA4D,EAAE,SAAS,IAAI,MAAM,EAAE,iCAAiC,EAAE,SAAS,IAAI,yBAAyB,IAAI,GAAG,EAAE,aAAa,IAAI,GAAG,IAAI,WAAW,IAAI,GAAG,EAAE,WAAW,IAAI,GAAG,IAAI,WAAW,IAAI,GAAG,EAAE,WAAW,IAAI,GAAG,IAAI,WAAW,IAAI,GAAG,EAAE,WAAW,IAAI,GAAG,IAAI,WAAW,IAAI,GAAG,EAAE,WAAW,IAAI,GAAG,IAAI,WAAW,IAAI,GAAG,EAAE,WAAW,IAAI,GAAG,IAAI,WAAW,IAAI,mCAAmC,EAAE,SAAS,IAAI,MAAM,EAAE,iCAAiC,EAAE,SAAS,IAAI,0DAA0D,GAAG;AACnoB;AACA,yBAAyB,sBAAsB,IAAI,gBAAgB;AACnE,sDAAsD,EAAE,SAAS,IAAI,MAAM,EAAE,iCAAiC,EAAE,SAAS,IAAI;AAC7H,+BAA+B,IAAI,GAAG,EAAE,aAAa,IAAI,GAAG,IAAI,WAAW,IAAI,GAAG,EAAE,WAAW,IAAI,GAAG,IAAI,WAAW,IAAI,GAAG,EAAE,WAAW,IAAI,GAAG,IAAI,WAAW,IAAI,GAAG,EAAE,WAAW,IAAI,GAAG,IAAI,WAAW,IAAI,GAAG,EAAE,WAAW,IAAI,GAAG,IAAI,WAAW,IAAI,GAAG,EAAE,WAAW,IAAI,GAAG,IAAI,WAAW,IAAI,mCAAmC,EAAE,SAAS,IAAI,MAAM,EAAE,iCAAiC,EAAE,SAAS,IAAI;AAC3Y;AACA;AACA;AACA;AACA,oCAAoC,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,gBAAgB,UAAU,EAAE,OAAO,EAAE;AACvH;AACA;AACA,oCAAoC,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,gBAAgB;AAClG;AACA;AACA;AACA;AACA,oCAAoC,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE;AAC9F;AACA;AACA,oCAAoC,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE;AACzE;AACA;AACA;AACA;AACA,oCAAoC,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,oBAAoB,EAAE,OAAO,EAAE;AACxG;AACA;AACA,oCAAoC,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,4CAA4C,cAAc;AAC1D,SAAS;AACT;AACA;AACA,4CAA4C,qBAAqB;AACjE,SAAS;AACT;AACA;AACA,4CAA4C,qBAAqB;AACjE,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,iDAAiD;AACvF;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,yBAAyB;AAC/D;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,uBAAuB;AAC7D;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,gCAAgC,+CAA+C;AAC/E;AACA;AACA,gCAAgC,6CAA6C;AAC7E;AACA;AACA,gCAAgC,+CAA+C;AAC/E;AACA;AACA,gCAAgC,8CAA8C;AAC9E;AACA;AACA,gCAAgC,8CAA8C;AAC9E;AACA;AACA,gCAAgC,+CAA+C;AAC/E;AACA;AACA,gCAAgC,8CAA8C;AAC9E;AACA;AACA,gCAAgC,4CAA4C;AAC5E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,gBAAgB,cAAc;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,aAAa;AACb;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,wDAAwD;AACjF,SAAS;AACT;AACA;AACA;AACA;AACA,yBAAyB,wDAAwD;AACjF,SAAS;AACT;AACA;AACA;AACA;AACA,2BAA2B,kDAAkD;AAC7E,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,aAAa;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,gBAAgB,cAAc;AAC9B,gBAAgB,yBAAyB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,6BAA6B;AACpD;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,6BAA6B;AAC5D,iCAAiC,uCAAuC;AACxE,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,6BAA6B;AACxD;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA,oBAAoB;AACpB,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA,8BAA8B,eAAe;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,gBAAgB,MAAM;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,MAAM;AACtB;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mEAAmE,cAAc;AACjF;AACA;AACA;AACA,8DAA8D,uBAAuB,sBAAsB,cAAc;AACzH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA,4BAA4B,kBAAkB;AAC9C;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,gBAAgB,cAAc;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,gBAAgB,cAAc;AAC9B;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,iCAAiC;AACjC;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,cAAc;AAC9B;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,gBAAgB,cAAc;AAC9B;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,gBAAgB,cAAc;AAC9B;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,sDAAsD;AAC7E,SAAS;AACT;AACA;AACA;AACA;AACA,uBAAuB,sDAAsD;AAC7E,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,MAAM;AACtB;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,MAAM;AACtB;AACA,mCAAmC,6CAA6C;AAChF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,MAAM;AACtB;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,cAAc;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA,mCAAmC,6CAA6C;AAChF;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC;AACjC,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA,mCAAmC,6CAA6C;AAChF;AACA;AACA;AACA,uGAAuG,qCAAqC;AAC5I,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,kBAAkB,2CAA2C;AAC7D;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,gBAAgB,MAAM;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,gBAAgB,MAAM;AACtB;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA,yBAAyB;AACzB;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,gBAAgB,MAAM;AACtB;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,cAAc;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,cAAc;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA,qDAAqD,aAAa;AAClE,+BAA+B,sCAAsC;AACrE;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,sDAAsD;AACvD;AACA;AACA;AACA,sCAAsC,SAAS;AAC/C,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,sBAAsB;AAC/D,yCAAyC,sBAAsB;AAC/D;AACA;AACA;AACA,KAAK;AACL,yCAAyC,sBAAsB;AAC/D,qCAAqC,sBAAsB;AAC3D;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,cAAc;AAChC,wBAAwB,oBAAoB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,+BAA+B;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAE+pD;;;;;;;;;;;;;;;;;;;;;;;;;;;ACh3HnpD;AAEb,gDAAgD;AAChD,uCAAuC;AACvC,+CAA+C;AAE0D;AACV;AAC9B;AACJ;AACS;AACT;AACW;AACI;AACV;AACD;AACe;AACpB;AAKrD,IAAU,kBAAkB,CAgvElC;AAhvED,WAAiB,kBAAkB;IAElC,IAAO,iBAAiB,GAAG,wGAAiC,CAAC;IAG7D,IAAO,oBAAoB,GAAG,2GAAoC,CAAC;IACnE,IAAO,kBAAkB,GAAG,yGAAkC,CAAC;IAI/D,MAAM,CAAC,GAAG,MAAM,CAAC;IACjB,MAAM,CAAC,GAAG,WAAW,CAAC;IAEtB,0GAAsB,EAAE,CAAC;IACzB,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,kBAAkB,EAAE,0EAAc,CAAC,CAAC;IAC3D,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,gBAAgB,EAAE,wEAAY,CAAC,CAAC;IACvD,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,qBAAqB,EAAE,6EAAgB,CAAC,CAAC;IAChE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,wBAAwB,EAAE,gFAAmB,CAAC,CAAC;IACtE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,sBAAsB,EAAE,8EAAiB,CAAC,CAAC;IAClE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,gBAAgB,EAAE,wEAAY,CAAC,CAAC;IACvD,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,kBAAkB,EAAE,0EAAc,CAAC,CAAC;IAC3D,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,0BAA0B,EAAE,mFAAqB,CAAC,CAAC;IAyD1E,MAAM,kBAAkB,GAAG,MAAM,CAAC,UAAU,CAAC,kCAAkC,CAAC,CAAC;IACjF,IAAI,oBAAoB,GAAG,kBAAkB,IAAI,kBAAkB,CAAC,OAAO,CAAC;IAC5E,kBAAkB,CAAC,gBAAgB,CAAC,QAAQ,EAAE,GAAG,EAAE;QAClD,oBAAoB,GAAG,kBAAkB,CAAC,OAAO,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,MAAM,4BAA6B,SAAQ,iBAAiB;QAuB3D,YACiB,OAAe,EACf,kBAA0B,EAC1B,mBAA2B,EAC3C,aAAqB,EACrB,qBAA6B,CAAC,EAC9B,kBAAiC,IAAI;YAErC,KAAK,EAAE,CAAC;YAPQ,YAAO,GAAP,OAAO,CAAQ;YACf,uBAAkB,GAAlB,kBAAkB,CAAQ;YAC1B,wBAAmB,GAAnB,mBAAmB,CAAQ;YAzB5C;;eAEG;YACK,oBAAe,GAA4B,EAAE,CAAC;YACtD;;;eAGG;YACK,iBAAY,GAA4B,EAAE,CAAC;YAC3C,4BAAuB,GAAqB,IAAI,CAAC;YACjD,yBAAoB,GAAyC,IAAI,CAAC;YAMzD,uBAAkB,GAAkD,EAAE,CAAC,UAAU,CAA4B,IAAI,CAAC,CAAC;YACnH,uBAAkB,GAAgC,EAAE,CAAC,UAAU,CAAU,KAAK,CAAC,CAAC;YAGhF,uBAAkB,GAAgC,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;YAWvF,MAAM,IAAI,GAAG,IAAI,CAAC;YAElB,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC,UAAU,CACpC,IAAI,SAAS,CAAC,aAAa,EAAE,kBAAkB,EAAE,eAAe,CAAC,CACjE,CAAC;YACF,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC,YAAY,CAAC,GAAG,EAAE;;gBACzC,OAAO,CAAC,UAAI,CAAC,gBAAgB,EAAE,0CAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC;YAChD,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,kBAAkB,GAAG,EAAE,CAAC,QAAQ,CAAC;gBACrC,IAAI,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,kBAAkB,EAAE;gBACrC,KAAK,EAAE,CAAC,QAAQ,EAAE,EAAE;oBACnB,MAAM,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,CAAC;oBAChD,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE;wBACnC,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC;wBAClC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;qBAC9B;gBACF,CAAC;aACD,CAAC,CAAC;YAEH,4DAA4D;YAC5D,MAAM,gBAAgB,GAAG,EAAE,CAAC,YAAY,CAAC,GAAG,EAAE;gBAC7C,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBAC1C,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,qBAAqB,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5D,CAAC,CAAC,CAAC;YACH,MAAM,oBAAoB,GAAG,CAAC,CAAC,QAAQ,CACtC,GAAG,EAAE;gBACJ,uEAAuE;gBACvE,kEAAkE;gBAClE,sEAAsE;gBACtE,EAAE;gBACF,kEAAkE;gBAClE,oEAAoE;gBACpE,IACC,CAAC,gBAAgB,EAAE,GAAG,CAAC,CAAC;uBACrB,CAAC,IAAI,CAAC,kBAAkB,EAAE,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC,UAAU,EAAE,CAAC,EACrE;oBACD,IAAI,CAAC,oBAAoB,EAAE;iBAC3B;YACF,CAAC,EACD,IAAI,EACJ,EAAC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAC,CAC/B;YACD,gBAAgB,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,EAAE;gBACtC,IAAI,OAAO,GAAG,CAAC,EAAE;oBAChB,oBAAoB,EAAE,CAAC;iBACvB;YACF,CAAC,CAAC,CAAC;YACH,wCAAwC;YACxC,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC,UAAU,EAAE,EAAE;gBAChD,IAAI,UAAU,EAAE;oBACf,oBAAoB,EAAE,CAAC;iBACvB;YACF,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,8BAA8B,GAAG,EAAE,CAAC,YAAY,CAAC,GAAG,EAAE;gBAC1D,OAAO,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAClC,CAAC,CAAC,CAAC;YAEH,+CAA+C;YAC/C,IAAI,CAAC,iBAAiB,CAAC,CAAC,OAAgB,EAAE,EAAE;gBAC3C,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC;gBAE3C,IAAI,SAAS,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBACxC,+DAA+D;gBAC/D,6BAA6B;gBAC7B,IAAI,CAAC,UAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,aAAa,EAAE,GAAE;oBAChC,SAAS,GAAG,IAAI,SAAS,EAAE,CAAC;oBAC5B,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;iBACjC;gBACD,qDAAqD;gBACrD,SAAS,CAAC,qBAAqB,CAAC,SAAS,CAAC,qBAAqB,EAAE,GAAG,CAAC,CAAC,CAAC;YACxE,CAAC,CAAC,CAAC;QACJ,CAAC;QAED,oBAAoB,CAAC,QAAgB,CAAC;YACrC,IAAI,KAAK,GAAG,CAAC,EAAE;gBACd,IAAI,IAAI,CAAC,oBAAoB,KAAK,IAAI,EAAE;oBACvC,8CAA8C;oBAC9C,YAAY,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;iBACxC;gBACD,IAAI,CAAC,oBAAoB,GAAG,UAAU,CAAC,GAAG,EAAE;oBAC3C,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;oBACjC,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC;gBAC9B,CAAC,EAAE,KAAK,CAAC,CAAC;gBACV,OAAO;aACP;YAED,IAAI,IAAI,CAAC,oBAAoB,KAAK,IAAI,EAAE;gBACvC,OAAO,CAAC,qCAAqC;aAC7C;YAED,IAAI,IAAI,CAAC,uBAAuB,KAAK,IAAI,EAAE;gBAC1C,0DAA0D;gBAC1D,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,GAAG,EAAE;oBACxC,2CAA2C;oBAC3C,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;gBACjC,CAAC,CAAC,CAAC;gBACH,OAAO;aACP;YAED,IAAI,CAAC,aAAa,EAAE,CAAC;QACtB,CAAC;QAEO,aAAa,CAAC,SAAwB,IAAI;;YACjD,qCAAqC;YACrC,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,EAAE;gBACvF,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;aACjF;YAED,IAAI,IAAI,CAAC,8BAA8B,EAAE,EAAE;gBAC1C,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC,MAAM,CACzB,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAClE,CAAC,OAAO,EAAE,CAAC;aACZ;YAED,IAAI,kBAAkB,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,IAAI,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC;YACxE,IAAI,kBAAkB,EAAE;gBACvB,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;aAC9B;YAED,MAAM,cAAc,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAE/C,sEAAsE;YACtE,oEAAoE;YACpE,MAAM,cAAc,GAAG,IAAI,CAAC,eAAe,CAAC;YAC5C,IAAI,CAAC,YAAY,GAAG,cAAc,CAAC;YACnC,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;YAE1B,MAAM,gBAAgB,GAAG,CAAC,CAAC,SAAS,CAAC,cAAc,EAAE,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;YACjF,MAAM,WAAW,GAAwB;gBACxC,MAAM,EAAE,0BAA0B;gBAClC,WAAW,EAAE,IAAI,CAAC,kBAAkB;gBACpC,SAAS,EAAE,OAAC,cAAc,aAAd,cAAc,uBAAd,cAAc,CAAE,IAAI,EAAE,CAAC,mCAAI,EAAE;gBACzC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC;aAC1C,CAAC;YACF,IAAI,MAAM,KAAK,IAAI,EAAE;gBACpB,WAAW,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC;aAC/B;YACD,kDAAkD;YAClD,IAAI,CAAC,eAAc,aAAd,cAAc,uBAAd,cAAc,CAAE,OAAO,EAAE,GAAE;gBAC/B,WAAW,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;aAC7B;YAED,2CAA2C;YAC3C,MAAM,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;YACrD,IAAI,kBAAkB,EAAE;gBACvB,MAAM,QAAQ,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;gBAC3C,WAAW,CAAC,oBAAoB,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;aAC7D;YACD,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;YAE/B,MAAM,OAAO,GAAG,CAAC,CAAC,IAAI,CAAC;gBACtB,GAAG,EAAE,IAAI,CAAC,OAAO;gBACjB,MAAM,EAAE,MAAM;gBACd,IAAI,EAAE,WAAW;gBACjB,QAAQ,EAAE,MAAM;gBAChB,OAAO,EAAE,KAAK;aACd,CAAC,CAAC;YACH,IAAI,CAAC,uBAAuB,GAAG,OAAO,CAAC;YASvC,MAAM,IAAI,GAAG,IAAI,CAAC;YAElB,SAAS,0BAA0B,CAAC,cAAmB;gBACtD,MAAM,OAAO,GAA4B,CAAC,CAAC,GAAG,CAC7C,cAAc,EACd,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAC7B,CAAC;gBACF,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;oBAChC,OAAO;iBACP;gBAED,KAAK,MAAM,SAAS,IAAI,OAAO,EAAE;oBAChC,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;oBACpC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE;wBACzB,SAAS;qBACT;oBAED,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,SAAS,CAAC,EAAE;wBAChD,SAAS;qBACT;oBACD,MAAM,SAAS,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAC;oBAE9C,MAAM,KAAK,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;oBACjC,IAAI,KAAK,CAAC,OAAO,EAAE;wBAClB,OAAO,CAAC,GAAG,EAAE,CAAC,6BAA6B,CAAC,SAAS,CAAC,CAAC;qBACvD;yBAAM;wBACN,sEAAsE;wBACtE,mBAAmB;wBACnB,qCAAqC;wBACrC,OAAO,CAAC,GAAG,EAAE,CAAC,2BAA2B,CACxC,SAAS,EACT,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CACpE,CAAC;qBACF;iBACD;YACF,CAAC;YAED,SAAS,yBAAyB,CAAC,cAAmB;gBACrD,IAAI,CAAC,cAAc,EAAE;oBACpB,OAAO;iBACP;gBAED,uEAAuE;gBACvE,yDAAyD;gBACzD,MAAM,OAAO,GAAG,CAAC,CAAC,GAAG,CAAC,cAAc,EAAE,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC;gBAC7D,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,KAAK,cAAc,CAAC,IAAI,EAAE,CAAC,EAAE;oBACrE,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;wBAChC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;qBAC7B;iBACD;gBACD,6BAA6B;gBAC7B,MAAM,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,cAAc,EAAE,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAAC;gBACrE,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE;oBAClC,cAAc,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;iBACjC;gBAED,+CAA+C;gBAC/C,MAAM,cAAc,GAAG,CAAC,CAAC,GAAG,CAAC,cAAc,EAAE,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC,CAAC;gBAC7E,IAAI,OAAO,cAAc,KAAK,QAAQ,EAAE;oBACvC,cAAc,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC;iBAC9C;gBAED,qEAAqE;gBACrE,4EAA4E;gBAC5E,6DAA6D;gBAC7D,MAAM,YAAY,GAAG,CAAC,CAAC,GAAG,CAAC,cAAc,EAAE,CAAC,MAAM,EAAE,uBAAuB,CAAC,EAAE,IAAI,CAAC,CAAC;gBACpF,IAAI,YAAY,EAAE;oBACjB,cAAc,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;iBAC1C;YACF,CAAC;YAED,OAAO,CAAC,IAAI,CAAC,UAAU,QAAQ;gBAC9B,yBAAyB,CAAC,QAAQ,CAAC,CAAC;gBACpC,0BAA0B,CAAC,QAAQ,CAAC,CAAC;gBAErC,2DAA2D;gBAC3D,kBAAkB;gBAClB,MAAM,WAAW,GAChB,CAAC,cAAc,CAAC,MAAM,EAAE,KAAK,SAAS,CAAC;uBACpC,CAAC,cAAc,CAAC,MAAM,EAAE,KAAK,QAAQ,CAAC;uBACtC,CAAC,cAAc,CAAC,YAAY,EAAE,CAAC,CAAC;gBACpC,IAAI,WAAW,EAAE;oBAChB,cAAc,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;iBACxC;gBAED,6DAA6D;gBAC7D,8DAA8D;gBAC9D,iCAAiC;gBACjC,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,aAAa,EAAE,EAAE;oBAC7C,MAAM,aAAa,GAAG,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC,CAAC;oBACjE,IAAI,CAAC,OAAO,aAAa,KAAK,QAAQ,CAAC,IAAI,CAAC,aAAa,KAAK,EAAE,CAAC,EAAE;wBAClE,IAAI,CAAC,gBAAgB,CAAC,IAAI,SAAS,CAAC,aAAa,CAAC,CAAC,CAAC;qBACpD;iBACD;YACF,CAAC,CAAC,CAAC;YAEH,OAAO,CAAC,IAAI,CAAC,CAAC,aAAwB,EAAE,EAAE;gBACzC,IAAI,OAAO,aAAa,CAAC,YAAY,KAAK,QAAQ,EAAE;oBACnD,0BAA0B,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;oBACvD,yBAAyB,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;iBACtD;gBAED,oDAAoD;gBACpD,KAAK,MAAM,EAAE,IAAI,cAAc,EAAE;oBAChC,sCAAsC;oBACtC,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,SAAS,EAAE,EAAE;wBAC7B,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC,GAAG,cAAc,CAAC,EAAE,CAAC,CAAC;qBAC9C;iBACD;gBAED,qEAAqE;gBACrE,+DAA+D;YAChE,CAAC,CAAC,CAAC;YAEH,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE;gBACnB,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC;gBACpC,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;gBACvB,IAAI,kBAAkB,EAAE;oBACvB,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;iBAC/B;YACF,CAAC,CAAC,CAAC;YAEH,OAAO,OAAO,CAAC;QAChB,CAAC;QAEM,mBAAmB,CAAC,UAAkB,EAAE;YAC9C,IAAI,IAAI,CAAC,8BAA8B,EAAE,EAAE;gBAC1C,6CAA6C;gBAC7C,MAAM,QAAQ,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC;gBAC9B,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,qBAAqB,EAAE,CAAC,CAAC;gBAEjE,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;gBAC7B,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE;oBAC9B,IAAI,CAAC,IAAI,CAAC,8BAA8B,EAAE,EAAE;wBAC3C,aAAa,CAAC,KAAK,CAAC,CAAC;wBACrB,QAAQ,CAAC,OAAO,EAAE,CAAC;qBACnB;yBAAM,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,GAAG,OAAO,EAAE;wBAC9C,aAAa,CAAC,KAAK,CAAC,CAAC;wBACrB,QAAQ,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC,CAAC;qBAC7D;gBACF,CAAC,EAAE,GAAG,CAAC,CAAC;gBAER,OAAO,MAAM,CAAC;aACd;YAED,OAAO,IAAI,CAAC,qBAAqB,EAAE,CAAC;QACrC,CAAC;QAEO,qBAAqB;YAC5B,wDAAwD;YACxD,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE;gBACpC,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,CAAC;aACxC;YACD,OAAO,IAAI,CAAC,aAAa,EAAE,CAAC;QAC7B,CAAC;QAEM,mBAAmB;YACzB,OAAO,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAChC,CAAC;QAED;;;;WAIG;QACH,IAAW,cAAc;YACxB,gEAAgE;YAChE,yBAAyB;YACzB,IAAI,eAAe,GAA4B,EAAE,CAAC;YAClD,CAAC,CAAC,QAAQ,CAAC,eAAe,EAAE,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;YAErE,OAAO,CAAC,CAAC,SAAS,CAAC,eAAe,EAAE,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;QACjE,CAAC;QAEM,gBAAgB;YACtB,IAAI,IAAI,CAAC,8BAA8B,EAAE,EAAE;gBAC1C,OAAO,CAAC,CAAC,QAAQ,EAAE;qBACjB,MAAM,CAAC,IAAI,KAAK,CAAC,+DAA+D,CAAC,CAAC;qBAClF,OAAO,EAAE,CAAC;aACZ;YACD,OAAO,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;QACtC,CAAC;QAEM,cAAc;YACpB,IAAI,IAAI,CAAC,8BAA8B,EAAE,EAAE;gBAC1C,OAAO,CAAC,CAAC,QAAQ,EAAE;qBACjB,MAAM,CAAC,IAAI,KAAK,CAAC,+DAA+D,CAAC,CAAC;qBAClF,OAAO,EAAE,CAAC;aACZ;YAED,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC1C,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE;gBACzB,yEAAyE;gBACzE,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;gBAC1B,SAAS,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;gBAEnC,0BAA0B;gBAC1B,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;aAC5C;YAED,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;YAE9B,MAAM,WAAW,GAAwB;gBACxC,MAAM,EAAE,2BAA2B;gBACnC,WAAW,EAAE,IAAI,CAAC,mBAAmB;gBACrC,SAAS,EAAE,SAAS,CAAC,IAAI;aACzB,CAAC;YAEF,MAAM,OAAO,GAAG,CAAC,CAAC,IAAI,CAAC;gBACtB,GAAG,EAAE,IAAI,CAAC,OAAO;gBACjB,MAAM,EAAE,MAAM;gBACd,IAAI,EAAE,WAAW;gBACjB,QAAQ,EAAE,MAAM;gBAChB,OAAO,EAAE,KAAK;aACd,CAAC,CAAC;YACH,IAAI,CAAC,uBAAuB,GAAG,OAAO,CAAC;YAEvC,OAAO,CAAC,IAAI,CAAC;gBACZ,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;gBAC1B,SAAS,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;YACpC,CAAC,CAAC,CAAC;YAEH,mEAAmE;YACnE,oEAAoE;YACpE,sDAAsD;YAEtD,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE;gBACnB,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC;gBACpC,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;YAChC,CAAC,CAAC,CAAC;YAEH,OAAO,OAAO,CAAC;QAChB,CAAC;QAEM,uBAAuB,CAAC,QAAmC;YACjE,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC;YAClC,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;QAChC,CAAC;KACD;IAED,MAAM,SAAS;QAwBd,YAAY,OAAe,EAAE,EAAE,iBAAyB,CAAC,EAAE,gBAA+B,EAAE;YAnB5F;;;;;;;eAOG;YACa,0BAAqB,GAA+B,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;YAErF;;;eAGG;YACc,yBAAoB,GACpC,EAAC,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAC,CAAC;YAElC,iBAAY,GAAgC,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;YAGhF,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YAEhC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,EAAE;gBAC/B,4EAA4E;gBAC5E,0EAA0E;gBAC1E,0EAA0E;gBAC1E,8CAA8C;gBAC9C,IAAI,CAAC,OAAQ,OAAmB,KAAK,QAAQ,CAAC,EAAE;oBAC/C,MAAM,IAAI,KAAK,CAAC,gDAAgD,GAAG,CAAC,OAAO,OAAO,CAAC,CAAC,CAAC;iBACrF;YACF,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;YACpD,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC,UAAU,CAAC,aAAa,aAAb,aAAa,cAAb,aAAa,GAAI,EAAE,CAAC,CAAC;QAClD,CAAC;QAEM,OAAO;YACb,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YACzB,OAAO,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC;QACtB,CAAC;QAEM,aAAa;YACnB,OAAO,CAAC,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QACjE,CAAC;QAEM,UAAU;YAChB,OAAO,CAAC,IAAI,CAAC,qBAAqB,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC;QACzE,CAAC;KACD;IAED,MAAM,sBAAsB,GAAG,cAAc,CAAC,CAAC,yCAAyC;IAExF,oBAAoB;IACpB,MAAM,UAAU,GAAG,gEAAO,CAAC;QAC1B,iEAAQ,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC;QAC1B,kEAAS,CAAC,EAAE,CAAC;KACb,CAAC,CAAC;IAEH,MAAM,kBAAkB,GAAG,iEAAQ,CAAC;QACnC,UAAU,EAAE,iEAAQ,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC;QAC/B,gBAAgB,EAAE,iEAAQ,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC;QAErC,UAAU,EAAE,iEAAQ,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;aACtD,MAAM,CACN,UAAU,KAAa;YACtB,8DAA8D;YAC9D,0BAA0B;YAC1B,OAAO,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACpC,CAAC,EACD,EAAC,OAAO,EAAE,4EAA4E,EAAC,CACvF;QACF,gBAAgB,EAAE,iEAAQ,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE;QAE/C,aAAa,EAAE,iEAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE;QACnD,SAAS,EAAE,UAAU,CAAC,QAAQ,EAAE;QAChC,UAAU,EAAE,iEAAQ,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;QAC1C,SAAS,EAAE,UAAU,CAAC,QAAQ,EAAE;QAChC,iBAAiB,EAAE,iEAAQ,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE;QAC/D,eAAe,EAAE,iEAAQ,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE;QAC9C,gBAAgB,EAAE,kEAAS,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE;KACvD,CAAC,CAAC;IAIH,MAAM,kBAAkB,GAAG,iEAAQ;IAClC,UAAU;IACV,iEAAQ,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACjB,YAAY;IACZ,8DAAK,EAAE,CACP,CAAC;IAEF,MAAM,sBAAsB;QAS3B,YACiB,QAAgB,EAChB,QAA4B;YAD5B,aAAQ,GAAR,QAAQ,CAAQ;YAChB,aAAQ,GAAR,QAAQ,CAAoB;YAVtC,kBAAa,GAAW,CAAC,CAAC;YAC1B,qBAAgB,GAAW,CAAC,CAAC;YAC7B,oBAAe,GAAW,CAAC,CAAC;YAC5B,oBAAe,GAAW,CAAC,CAAC;YAC5B,8BAAyB,GAAW,CAAC,CAAC;YAQ5C,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAC,UAAU,IAAI,WAAW,CAAC;QACtD,CAAC;KACD;IAQD,SAAS,2BAA2B,CACnC,KAAkB,EAClB,MAAS;QAET,MAAM,oBAAoB,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QAElD,MAAM,UAAU,GAA8B,EAAE,CAAC,YAAY,CAAC;YAC7D,IAAI,EAAE,oBAAoB;YAC1B,KAAK,EAAE,CAAC,QAAW,EAAE,EAAE;gBACtB,MAAM,gBAAgB,GAAG,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;gBACpD,IAAI,gBAAgB,CAAC,OAAO,EAAE;oBAC7B,oBAAoB,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;oBAC5C,UAAU,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;oBACvC,UAAU,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAC;iBACnC;qBAAM;oBACN,UAAU,CAAC,qBAAqB,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;oBACzD,mDAAmD;oBACnD,UAAU,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;wBACxE,OAAO;4BACN,IAAI,EAAE,KAAK,CAAC,IAAI;4BAChB,OAAO,EAAE,KAAK,CAAC,OAAO;yBACc,CAAC;oBACvC,CAAC,CAAC,CAAC,CAAC;iBACJ;YACF,CAAC;SACD,CAA8B,CAAC;QAEhC,UAAU,CAAC,qBAAqB,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QACvD,UAAU,CAAC,mBAAmB,GAAG,EAAE,CAAC,UAAU,CAAC,EAAiC,CAAC,CAAC;QAClF,UAAU,CAAC,UAAU,GAAG,EAAE,CAAC,YAAY,CAAC,GAAG,EAAE;YAC5C,MAAM,MAAM,GAAG,UAAU,CAAC,mBAAmB,EAAE,CAAC;YAChD,OAAO,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC;QAEH,OAAO,UAAU,CAAC;IACnB,CAAC;IAED,MAAM,uBAAuB;QAa5B,YAAY,QAA4B;;YACvC,IAAI,CAAC,UAAU,GAAG,2BAA2B,CAC5C,QAAQ,CAAC,UAAU,EACnB,kBAAkB,CAAC,KAAK,CAAC,UAAU,CACnC,CAAC;YACF,IAAI,CAAC,gBAAgB,GAAG,2BAA2B,CAClD,QAAQ,CAAC,gBAAgB,EACzB,kBAAkB,CAAC,KAAK,CAAC,gBAAgB,CACzC,CAAC;YAEF,IAAI,CAAC,UAAU,GAAG,2BAA2B,CAC5C,cAAQ,CAAC,UAAU,mCAAI,EAAE,EACzB,kBAAkB,CAAC,KAAK,CAAC,UAAU,CACnC,CAAC;YACF,IAAI,CAAC,gBAAgB,GAAG,2BAA2B,CAClD,cAAQ,CAAC,gBAAgB,mCAAI,EAAE,EAC/B,kBAAkB,CAAC,KAAK,CAAC,gBAAgB,CACzC,CAAC;YAEF,IAAI,CAAC,aAAa,GAAG,2BAA2B,CAC/C,cAAQ,CAAC,aAAa,mCAAI,EAAE,EAC5B,kBAAkB,CAAC,KAAK,CAAC,aAAa,CACtC,CAAC;YACF,IAAI,CAAC,SAAS,GAAG,2BAA2B,CAC3C,cAAQ,CAAC,SAAS,mCAAI,EAAE,EACxB,kBAAkB,CAAC,KAAK,CAAC,SAAS,CAClC,CAAC;YACF,IAAI,CAAC,UAAU,GAAG,2BAA2B,CAC5C,cAAQ,CAAC,UAAU,mCAAI,EAAE,EACzB,kBAAkB,CAAC,KAAK,CAAC,UAAU,CACnC,CAAC;YACF,IAAI,CAAC,SAAS,GAAG,2BAA2B,CAC3C,cAAQ,CAAC,SAAS,mCAAI,EAAE,EACxB,kBAAkB,CAAC,KAAK,CAAC,SAAS,CAClC,CAAC;YACF,IAAI,CAAC,iBAAiB,GAAG,2BAA2B,CACnD,cAAQ,CAAC,iBAAiB,mCAAI,EAAE,EAChC,kBAAkB,CAAC,KAAK,CAAC,iBAAiB,CAC1C,CAAC;YACF,IAAI,CAAC,eAAe,GAAG,2BAA2B,CACjD,cAAQ,CAAC,eAAe,mCAAI,EAAE,EAC9B,kBAAkB,CAAC,KAAK,CAAC,eAAe,CACxC,CAAC;YAEF,IAAI,CAAC,gBAAgB,GAAG,2BAA2B,CAClD,cAAQ,CAAC,gBAAgB,mCAAI,KAAK,EAClC,kBAAkB,CAAC,KAAK,CAAC,gBAAgB,CACzC,CAAC;QACH,CAAC;QAEM,QAAQ;YACd,OAAO;gBACN,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE;gBAC7B,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,EAAE;gBACzC,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE;gBAC7B,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,EAAE;gBACzC,aAAa,EAAE,IAAI,CAAC,aAAa,EAAE;gBACnC,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE;gBAC3B,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE;gBAC7B,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE;gBAC3B,iBAAiB,EAAE,IAAI,CAAC,iBAAiB,EAAE;gBAC3C,eAAe,EAAE,IAAI,CAAC,eAAe,EAAE;gBACvC,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,EAAE;aACzC,CAAC;QACH,CAAC;QAED,OAAO;YACN,0EAA0E;YAC1E,OAAO,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE;mBAC/B,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE;mBAClC,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE;mBAC5B,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE;mBAClC,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE;mBAC/B,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE;mBAC3B,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE;mBAC5B,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE;mBAC3B,IAAI,CAAC,iBAAiB,CAAC,UAAU,EAAE;mBACnC,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE;mBACjC,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,CAAC;QACxC,CAAC;KACD;IAED,IAAK,kBAGJ;IAHD,WAAK,kBAAkB;QACtB,mEAAQ;QACR,2DAAI;IACL,CAAC,EAHI,kBAAkB,KAAlB,kBAAkB,QAGtB;IAED,MAAM,mBAAoB,SAAQ,qBAAqB;QA2BtD,YACkB,gBAA8B,EAC9B,wBAAkD,EAClD,kBAAiE,EAClF,qBAAsC;YAEtC,KAAK,EAAE,CAAC;YALS,qBAAgB,GAAhB,gBAAgB,CAAc;YAC9B,6BAAwB,GAAxB,wBAAwB,CAA0B;YAClD,uBAAkB,GAAlB,kBAAkB,CAA+C;YA3BnE,0BAAqB,GAAgC,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;YAE1E,SAAI,GAA2C,EAAE,CAAC,UAAU,CAAqB,kBAAkB,CAAC,QAAQ,CAAC,CAAC;YAE9H,qBAAgB,GAAY,IAAI,CAAC;YAIjC,2BAAsB,GAAgC,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;YAG3E,gBAAW,GAAgC,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;YAIhE,kBAAa,GAA+B,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;YAC9D,iBAAY,GAA+B,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;YAC7D,uBAAkB,GAA+B,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;YAI3D,2BAAsB,GAAe,GAAG,EAAE;YAClD,CAAC,CAAC;YASD,IAAI,CAAC,OAAO,CAAC,QAAQ,GAAG,GAAG,CAAC;YAE5B,IAAI,CAAC,eAAe,iBAChB;gBACF,qBAAqB,EAAE,mDAAmD;gBAC1E,oBAAoB,EAAE,mFAAmF;aACzG,EACE,qBAAqB,CACxB;YAED,IAAI,eAAe,GAAG,kBAAkB,EAAE,CAAC;YAC3C,IAAI,eAAe,KAAK,IAAI,EAAE;gBAC7B,eAAe,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;aAC3C;YAED,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,uBAAuB,CAAC,eAAe,CAAC,CAAC,CAAC;YAExE,IAAI,CAAC,kBAAkB,GAAG,EAAE,CAAC,QAAQ,CAAC,GAAG,EAAE;gBAC1C,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,kBAAkB,CAAC,QAAQ,EAAE;oBAChD,OAAO,sBAAsB,CAAC;iBAC9B;gBACD,OAAO,IAAI,CAAC;YACb,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,sBAAsB,GAAG,EAAE,CAAC,QAAQ,CAAC,GAAG,EAAE;gBAC9C,IAAI,IAAI,CAAC,qBAAqB,EAAE,EAAE;oBACjC,OAAO,KAAK,CAAC;iBACb;gBAED,IAAI,gBAAgB,EAAE,KAAK,EAAE,EAAE;oBAC9B,yEAAyE;oBACzE,OAAO,KAAK,CAAC;iBACb;gBACD,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;YAC9B,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,iBAAiB,GAAG,EAAE,CAAC,QAAQ,CAAC,GAAG,EAAE;gBACzC,OAAO,CAAC,IAAI,CAAC,qBAAqB,EAAE,CAAC;YACtC,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,0BAA0B,GAAG,EAAE,CAAC,YAAY,CAAC,GAAW,EAAE;gBAC9D,OAAO,IAAI,CAAC,sBAAsB,EAAE,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,cAAc,CAAC;YACzE,CAAC,CAAC,CAAC;YACH,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC,YAAY,CAAC,GAAW,EAAE;gBACnD,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,cAAc,CAAC;YAC1D,CAAC,CAAC,CAAC;YAEH,2CAA2C;YAC3C,IAAI,CAAC,oBAAoB,GAAG,EAAE,CAAC,YAAY,CAAC,GAAY,EAAE;gBACzD,OAAO,IAAI,CAAC,IAAI,EAAE,KAAK,kBAAkB,CAAC,QAAQ,CAAC;YACpD,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,OAA2B,EAAE,EAAE;gBACnD,IAAI,OAAO,KAAK,kBAAkB,CAAC,QAAQ,EAAE;oBAC5C,IAAI,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;iBACnC;qBAAM,IAAI,OAAO,KAAK,kBAAkB,CAAC,IAAI,EAAE;oBAC/C,IAAI,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;iBAC1C;YACF,CAAC,CAAC,CAAC;QACJ,CAAC;QAEO,iBAAiB;YACxB,OAAO,kBAAkB,CAAC,KAAK,CAAC;gBAC/B,UAAU,EAAE,oBAAoB;gBAChC,gBAAgB,EAAE,uBAAuB,GAAG,IAAI,CAAC,eAAe,CAAC,qBAAqB;gBACtF,aAAa,EAAE,KAAK;aACpB,CAAC,CAAC;QACJ,CAAC;QAED,MAAM,CAAC,KAAwB,EAAE,EAAO;YACvC,IAAI,cAAc,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC/C,IAAI,cAAc,KAAK,IAAI,EAAE;gBAC5B,cAAc,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;aAC1C;YACD,IAAI,CAAC,IAAI,CAAC,IAAI,uBAAuB,CAAC,cAAc,CAAC,CAAC,CAAC;QACxD,CAAC;QAED,qBAAqB;YACpB,IAAI,CAAC,sBAAsB,CAAC,CAAC,IAAI,CAAC,sBAAsB,EAAE,CAAC,CAAC;QAC7D,CAAC;QAED,UAAU;YACT,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;QACvC,CAAC;QAED,SAAS,CAAC,KAAwB;YACjC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,OAAO,EAAE,EAAE;gBAC3B,iEAAiE;gBACjE,+BAA+B;gBAC/B,KAAK,CAAC,+CAA+C,CAAC,CAAC;gBACvD,OAAO;aACP;YAED,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE,CAAC;YACxC,QAAQ,CAAC,gBAAgB,GAAG,IAAI,CAAC;YACjC,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC;YAElC,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,kBAAkB,CAAC,IAAI,EAAE;gBAC5C,wCAAwC;gBACxC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBACnB,OAAO;aACP;YAED,IAAI,CAAC,iCAAiC,CAAC,QAAQ,CAAC,CAAC;QAClD,CAAC;QAEM,iCAAiC,CAAC,QAA4B;YACpE,IAAI,IAAI,CAAC,qBAAqB,EAAE,EAAE;gBACjC,KAAK,CAAC,kDAAkD,CAAC,CAAC;gBAC1D,OAAO;aACP;YAED,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC;iBAC5B,IAAI,CAAC,CAAC,KAAa,EAAE,EAAE;gBACvB,IAAI,KAAK,KAAK,EAAE,EAAE;oBACjB,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC,CAAC;iBACzB;YACF,CAAC,CAAC,CAAC;QACL,CAAC;QAEO,eAAe,CAAC,QAA4B;YACnD,MAAM,QAAQ,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC;YAE9B,gBAAgB;YAChB,iDAAiD;YACjD,MAAM,aAAa,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC9C,IAAI,aAAa,KAAK,EAAE,EAAE;gBACzB,OAAO,QAAQ,CAAC,MAAM,CAAC,uDAAuD,CAAC,CAAC,OAAO,EAAE,CAAC;aAC1F;YAED,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;YAEjC,MAAM,KAAK,GAAG,CAAC,CAAC,qCAAqC,CAAC,CAAC;YACvD,MAAM,MAAM,GAAG,CAAC,CAAC,8BAA8B,CAAC,CAAC;YAEjD,2EAA2E;YAC3E,IAAI,iBAAiB,GAAY,KAAK,CAAC;YACvC,MAAM,gBAAgB,GAAG,KAAK,CAAC;YAC/B,MAAM,gBAAgB,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;YAChD,IAAI,mBAAmB,GAAyC,IAAI,CAAC;YAErE,MAAM,OAAO,GAAG,IAAI,CAAC,sBAAsB,GAAG,GAAG,EAAE;gBAClD,iBAAiB,GAAG,IAAI,CAAC;gBAEzB,MAAM,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;gBAC3C,IAAI,YAAY,EAAE;oBACjB,YAAY,CAAC,YAAY,CAAC,CAAC;iBAC3B;gBACD,IAAI,mBAAmB,EAAE;oBACxB,aAAa,CAAC,mBAAmB,CAAC,CAAC;iBACnC;gBACD,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;gBAElC,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC;gBAElC,IAAI,IAAI,CAAC,sBAAsB,KAAK,OAAO,EAAE;oBAC5C,IAAI,CAAC,sBAAsB,GAAG,GAAG,EAAE;oBACnC,CAAC,CAAC;iBACF;YACF,CAAC;YAED,MAAM,YAAY,GAAG,UAAU,CAAC,GAAG,EAAE;gBACpC,QAAQ,CAAC,MAAM,CAAC,mCAAmC,CAAC,CAAC;gBACrD,OAAO,EAAE,CAAC;YACX,CAAC,EAAE,gBAAgB,CAAC,CAAC;YAErB,IAAI,CAAC,wBAAwB,EAAE,CAAC,IAAI,CACnC,GAAG,EAAE;gBACJ,IAAI,iBAAiB,EAAE;oBACtB,OAAO;iBACP;gBAED,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC;gBAClC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;gBAE5C,kEAAkE;gBAClE,iEAAiE;gBACjE,gCAAgC;gBAChC,MAAM,UAAU,GAAG,CAAC,oBAAoB;sBACrC,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE;sBACpB,GAAG;sBACH,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,wCAAwC;iBAC5E,CAAC;gBACF,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAC;gBAEpC,8DAA8D;gBAC9D,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;gBAClC,IAAI;oBACH,MAAM,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;iBACxC;gBAAC,OAAO,CAAC,EAAE;oBACX,0EAA0E;oBAC1E,IAAI,OAAO,IAAI,OAAO,CAAC,KAAK,EAAE;wBAC7B,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;qBACjB;iBACD;gBAED,mBAAmB,GAAG,WAAW,CAAC,GAAG,EAAE;oBACtC,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;oBACzC,IAAI,WAAW,EAAE;wBAChB,OAAO,EAAE,CAAC;wBACV,CAAC,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;wBAE3B,4CAA4C;wBAC5C,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;wBACnB,QAAQ,CAAC,OAAO,EAAE,CAAC;wBACnB,OAAO;qBACP;oBAED,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,GAAG,gBAAgB,GAAG,gBAAgB,EAAE;wBACjE,OAAO,EAAE,CAAC;wBACV,QAAQ,CAAC,MAAM,CAAC,mCAAmC,CAAC,CAAC;qBACrD;gBACF,CAAC,EAAE,IAAI,CAAC,CAAC;gBAET,MAAM,CAAC,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;oBAC9C,uEAAuE;oBACvE,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;oBAC7D,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;oBAE1C,OAAO,EAAE,CAAC;oBAEV,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,IAAI,CAAC,OAAO,QAAQ,KAAK,QAAQ,CAAC,EAAE;wBAC1D,QAAQ,CAAC,MAAM,CAAC,+CAA+C,CAAC,CAAC;qBACjE;yBAAM;wBACN,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE;4BACtB,IAAI,YAAY,CAAC;4BACjB,IAAI,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE;gCAC1B,YAAY,GAAG,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC;6BACrC;iCAAM;gCACN,YAAY,GAAG,0CAA0C,CAAC;6BAC1D;4BACD,QAAQ,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;yBAC9B;6BAAM;4BACN,uCAAuC;4BACvC,QAAQ,CAAC,MAAM,CAAC,kDAAkD,CAAC,CAAC;yBACpE;qBACD;gBACF,CAAC,CAAC,CAAC;gBAEH,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YACzB,CAAC,EACD,GAAG,EAAE;gBACJ,IAAI,iBAAiB,EAAE;oBACtB,IAAI,QAAQ,CAAC,KAAK,EAAE,KAAK,SAAS,EAAE;wBACnC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,8DAA8D;qBACnF;oBACD,OAAO;iBACP;gBAED,OAAO,EAAE,CAAC;gBACV,QAAQ,CAAC,MAAM,CAAC,qEAAqE,CAAC,CAAC;YACxF,CAAC,CACD,CAAC;YAEF,OAAO,QAAQ,CAAC,OAAO,EAAE,CAAC;QAC3B,CAAC;QAED,OAAO,CAAC,KAAwB,EAAE,EAAO;YACxC,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAC/B,CAAC;KACD;IAED,WAAW;IAEX,MAAM,iBAAiB;QAMtB;YALQ,oBAAe,GAAoC,EAAE,CAAC,eAAe,CAAC,EAAc,CAAC,CAAC;YAM7F,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC,8BAA8B,CAAC,CAAC;YAEtD,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,sBAAsB,EAAE,CAAC,KAAK,EAAE,EAAE;gBAC/D,KAAK,CAAC,cAAc,EAAE;gBAEtB,IAAI,KAAK,CAAC,aAAa,KAAK,IAAI,EAAE;oBACjC,OAAO,CAAC,mEAAmE;iBAC3E;gBAED,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;gBAC1D,IAAI,QAAQ,EAAE;oBACb,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;iBACjC;YACF,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,6BAA6B,EAAE,CAAC,KAAK,EAAE,EAAE;gBACtE,KAAK,CAAC,cAAc,EAAE;gBACtB,IAAI,CAAC,YAAY,EAAE,CAAC;YACrB,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC,YAAY,CAAC,GAAG,EAAE;gBACvC,OAAO,IAAI,CAAC,eAAe,EAAE;qBAC3B,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,SAAS,CAAC,CAAC;qBACtC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;qBACzC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE;oBACjB,OAAO;wBACN,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,iDAAiD,CAAC;6BACrE,KAAK,EAAE,CAAC,IAAI,EAAE;qBAChB;gBACF,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACJ,CAAC;QAED,iBAAiB,CAAC,gBAAwB;YACzC,MAAM,QAAQ,GAAG,CAAC,CAAC,GAAG,GAAG,gBAAgB,CAAC,CAAC;YAC3C,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;gBAC1B,OAAO;aACP;YAED,IAAI,QAAQ,CAAC,QAAQ,CAAC,wBAAwB,CAAC,EAAE;gBAChD,OAAO,CAAC,0BAA0B;aAClC;YAED,oEAAoE;YACpE,sDAAsD;YACtD,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;YAClE,IAAI,UAAU,KAAK,CAAC,CAAC,EAAE;gBACtB,OAAO,IAAI,CAAC,eAAe,EAAE,CAAC,MAAM,GAAG,UAAU,EAAE;oBAClD,IAAI,CAAC,YAAY,EAAE,CAAC;iBACpB;gBACD,OAAO;aACP;YAED,MAAM,gBAAgB,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;YAC3E,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE;gBAChC,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,EAAE,iBAAiB,CAAC,CAAC;gBAC3D,gBAAgB;qBACd,WAAW,CAAC,wBAAwB,CAAC;qBACrC,QAAQ,CAAC,yBAAyB,CAAC,CAAC;gBACtC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;gBAEvD,gBAAgB,CAAC,OAAO,CAAC,8BAA8B,CAAC,CAAC;aACzD;YAED,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,iBAAiB,CAAC,CAAC;YACnD,QAAQ,CAAC,QAAQ,CAAC,wBAAwB,CAAC,CAAC;YAE5C,QAAQ,CAAC,OAAO,CAAC,8BAA8B,CAAC,CAAC;QAClD,CAAC;QAED,YAAY;YACX,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE;gBACtC,OAAO;aACP;YACD,MAAM,kBAAkB,GAAG,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,CAAC,CAAC;YAC/D,IAAI,kBAAkB,CAAC,MAAM,KAAK,CAAC,EAAE;gBACpC,OAAO;aACP;YAED,MAAM,kBAAkB,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;YAC7E,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,iBAAiB,CAAC,CAAC;YAC7D,kBAAkB,CAAC,WAAW,CAAC,gDAAgD,CAAC,CAAC;YACjF,kBAAkB,CAAC,OAAO,CAAC,8BAA8B,CAAC,CAAC;YAE3D,MAAM,mBAAmB,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;YAC/E,mBAAmB,CAAC,WAAW,CAAC,yBAAyB,CAAC,CAAC;YAE3D,+BAA+B;YAC/B,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,iBAAiB,CAAC,CAAC;YAC7D,kBAAkB,CAAC,QAAQ,CAAC,wBAAwB,CAAC,CAAC;YACtD,kBAAkB,CAAC,OAAO,CAAC,8BAA8B,CAAC,CAAC;YAE3D,6DAA6D;YAC7D,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE;gBACtC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;qBACrF,QAAQ,CAAC,yBAAyB,CAAC,CAAC;aACtC;QACF,CAAC;QAED,0EAA0E;QAC1E,uEAAuE;QACvE,4CAA4C;QAC5C,gBAAgB,CAAC,QAAgB,EAAE,gBAAwB;YAC1D,IAAI,oBAAoB,EAAE;gBACzB,OAAO;aACP;YAED,IAAI,QAAQ,CAAC,IAAI,CAAC,wBAAwB,CAAC,EAAE;gBAC5C,OAAO,CAAC,iCAAiC;aACzC;YAED,MAAM,gBAAgB,GAAG,gCAAgC,CAAC;YAE1D,QAAQ,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC;YAE1C,SAAS,qBAAqB,CAAC,KAAwB;gBACtD,gDAAgD;gBAChD,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,gBAAgB,CAAC,EAAE;oBAC1C,OAAO;iBACP;gBAED,QAAQ;qBACN,GAAG,CAAC,gBAAgB,EAAE,qBAAqB,CAAC;qBAC5C,IAAI,CAAC,wBAAwB,EAAE,IAAI,CAAC;qBACpC,WAAW,CAAC,sBAAsB,CAAC,CAAC;YACvC,CAAC;YAED,QAAQ,CAAC,IAAI,CAAC,wBAAwB,EAAE,IAAI,CAAC,CAAC;YAC9C,QAAQ,CAAC,EAAE,CAAC,gBAAgB,EAAE,qBAAqB,CAAC,CAAC;QACtD,CAAC;KACD;IAMD;;OAEG;IACH,IAAK,cAUJ;IAVD,WAAK,cAAc;QAClB;;WAEG;QACH,uEAAkB;QAElB;;WAEG;QACH,+EAAsB;IACvB,CAAC,EAVI,cAAc,KAAd,cAAc,QAUlB;IAED,MAAa,eAAgB,SAAQ,iGAA0C;QA+C9E,YAAY,UAAsB;YACjC,KAAK,CAAC,UAAU,CAAC,CAAC;YA/CF,sBAAiB,GAAG,mEAAmE,CAAC;YACzG,+DAA+D;YAC9C,sBAAiB,GAAG,GAAG,GAAG,IAAI,CAAC;YAQhD;;eAEG;YACK,sBAAiB,GAAkB,IAAI,CAAC;YAKxC,sBAAiB,GAA+D,IAAI,CAAC;YAMrF,qBAAgB,GAAkB,IAAI,CAAC;YACvC,uBAAkB,GAAkB,IAAI,CAAC;YAEzC,qBAAgB,GAAkB,IAAI,CAAC;YACvC,gBAAW,GAAgC,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;YAChE,qBAAgB,GAAsD,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YAC1F,0BAAqB,GAAgC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YAEzE,wBAAmB,GAAgC,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;YAmiBxE,oBAAe,GAAY,KAAK,CAAC;YACjC,0BAAqB,GAAkB,IAAI,CAAC;YAC5C,6BAAwB,GAAS,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC;YAE7C,wBAAmB,GAAkB,IAAI,CAAC;YAC1C,4BAAuB,GAAY,KAAK,CAAC;YAvhBhD,IAAI,CAAC,QAAQ,GAAG,IAAI,4BAA4B,CAC/C,UAAU,CAAC,OAAO,EAClB,UAAU,CAAC,kBAAkB,EAC7B,UAAU,CAAC,mBAAmB,EAC9B,UAAU,CAAC,aAAa,EACxB,UAAU,CAAC,kBAAkB,EAC7B,UAAU,CAAC,eAAe,CAC1B,CAAC;YACF,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE;gBAC1C,IAAI,OAAO,EAAE,KAAK,QAAQ,EAAE;oBAC3B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,kBAAkB,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC;iBAChD;YACF,CAAC,CAAC,CAAC;YACH,IAAI,UAAU,CAAC,sBAAsB,EAAE;gBACtC,IAAI,CAAC,QAAQ,CAAC,uBAAuB,CAAC,UAAU,CAAC,sBAAsB,CAAC,CAAC;aACzE;YAED,IAAI,CAAC,cAAc,GAAG,UAAU,CAAC,cAAc,IAAI,IAAI,CAAC;YACxD,IAAI,CAAC,qBAAqB,GAAG,UAAU,CAAC,gBAAgB,IAAI,KAAK,CAAC;YAClE,IAAI,CAAC,iCAAiC,GAAG,UAAU,CAAC,iCAAiC,IAAI,KAAK,CAAC;YAE/F,IAAI,CAAC,OAAO,UAAU,CAAC,cAAc,KAAK,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,cAAc,IAAI,cAAc,CAAC,EAAE;gBACrG,IAAI,CAAC,cAAc,GAAG,UAAU,CAAC,cAAc,CAAC;aAChD;iBAAM;gBACN,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC,kBAAkB,CAAC;aACxD;YAED,IAAI,gBAAgB,GAAG,CAAC,CAAC;YAEzB,IAAI,CAAC,kBAAkB,GAAG,oBAAoB,CAC7C,UAAU,CAAC,kBAAkB,EAC7B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,EACrC,CAAC,IAA4B,EAAE,EAAE;gBAChC,QAAQ,IAAI,CAAC,CAAC,EAAE;oBACf,KAAK,SAAS;wBACb,IAAI,CAAC,SAAS,GAAG,gBAAgB,CAAC;wBAClC,2DAA2D;wBAC3D,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE;4BACb,IAAI,CAAC,EAAE,GAAG,SAAS,GAAG,CAAC,EAAE,gBAAgB,CAAC,CAAC;yBAC3C;wBACD,MAAM;oBACP,KAAK,eAAe;wBACnB,IAAI,CAAC,SAAS,GAAG,sBAAsB,CAAC;wBACxC,MAAM;oBACP,KAAK,SAAS;wBACb,4DAA4D;wBAC5D,uCAAuC;wBACvC,IACC,CAAC,IAAI,CAAC,SAAS,KAAK,kBAAkB,CAAC;+BACpC,CAAC,IAAI,CAAC,SAAS,KAAK,oBAAoB,CAAC,EAC3C;4BACD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC;4BAChC,IAAI,CAAC,MAAM,CAAC,iBAAiB,GAAG,yBAAyB,CAAC;yBAC1D;wBACD,mDAAmD;wBACnD,IAAI,IAAI,CAAC,SAAS,KAAK,0BAA0B,EAAE;4BAClD,IAAI,CAAC,SAAS,GAAG,kBAAkB,CAAC;yBACpC;iBACF;YACF,CAAC,CACD,CAAC;YAEF,oEAAoE;YACpE,8CAA8C;YAC9C,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YACjD,IAAI,UAAU,CAAC,YAAY,CAAC,GAAG,CAAC,gBAAgB,CAAC,KAAK,IAAI,EAAE;gBAC3D,UAAU,CAAC,YAAY,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;gBACjD,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,EAAE,EAAE,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC;aACrD;YAED,oDAAoD;YACpD,IAAI,UAAU,CAAC,YAAY,CAAC,GAAG,CAAC,uBAAuB,CAAC,KAAK,IAAI,EAAE;gBAClE,UAAU,CAAC,YAAY,CAAC,MAAM,CAAC,uBAAuB,CAAC,CAAC;gBACxD,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,EAAE,EAAE,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC;aACrD;YAED,MAAM,qBAAqB,GAAkB,UAAU,CAAC,qBAAqB,CAAC;YAC9E,MAAM,oBAAoB,GAAG,aAAa,CAAC;YAE3C,SAAS,iBAAiB,CAAC,UAAkB,EAAE,aAAqB;gBACnE,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC;gBAChC,IAAI,qBAAqB,EAAE;oBAC1B,GAAG,CAAC,QAAQ,GAAG,qBAAqB,CAAC,OAAO,CAAC,oBAAoB,EAAE,aAAa,CAAC,CAAC;oBAClF,gEAAgE;oBAChE,qDAAqD;oBACrD,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;oBAChC,uEAAuE;oBACvE,wEAAwE;oBACxE,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;iBAC5C;qBAAM;oBACN,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,kBAAkB,EAAE,aAAa,CAAC,CAAC;iBACxD;gBACD,OAAO,GAAG,CAAC;YACZ,CAAC;YAED,SAAS,mBAAmB,CAAC,GAAW;;gBACvC,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;gBAC/B,IAAI,qBAAqB,EAAE;oBAC1B,SAAS,YAAY,CAAC,KAAa;wBAClC,OAAO,KAAK,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;oBACrD,CAAC;oBAED,MAAM,gBAAgB,GAAG,qBAAqB,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;oBAC7E,MAAM,cAAc,GAAG,gBAAgB,GAAG,oBAAoB,CAAC,MAAM,CAAC;oBAEtE,MAAM,0BAA0B,GAAG,IAAI,MAAM,CAC5C,GAAG,GAAG,YAAY,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAC;0BAClE,iBAAiB;0BACjB,YAAY,CAAC,qBAAqB,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAC3D,CAAC;oBAEF,MAAM,KAAK,GAAG,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;oBACnE,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;iBAC7B;qBAAM;oBACN,OAAO,eAAS,CAAC,YAAY,CAAC,GAAG,CAAC,kBAAkB,CAAC,mCAAI,EAAE,CAAC;iBAC5D;YACF,CAAC;YAED,6DAA6D;YAC7D,IAAI,mBAAmB,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,EAAE;gBAChF,MAAM,MAAM,GAAG,iBAAiB,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC,CAAC;gBACtF,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;aACjD;YAED,uDAAuD;YACvD,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,aAAa,EAAE,EAAE;gBACvD,MAAM,GAAG,GAAG,iBAAiB,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;gBACnE,IAAI,UAAU,CAAC,yBAAyB,EAAE;oBACzC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;iBAC3C;qBAAM;oBACN,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;iBAC9C;YACF,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,uBAAuB,CAAC,CAAC;YAE9C,yCAAyC;YACzC,yDAAyD;YACzD,4BAA4B;YAC5B,0EAA0E;YAC1E,gFAAgF;YAChF,MAAM,mBAAmB,GAAG,EAAE,CAAC,YAAY,CAAC,GAAG,EAAE;gBAChD,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,mBAAmB,EAAE,CAAC;gBACtD,OAAO,CACN,SAAS,CAAC,UAAU,EAAE;uBACnB,SAAS,CAAC,aAAa,EAAE;uBACzB,CAAC,IAAI,CAAC,QAAQ,CAAC,8BAA8B,EAAE;uBAC/C,CAAC,IAAI,CAAC,QAAQ,CAAC,mBAAmB,EAAE,CACvC,CAAC;YACH,CAAC,CAAC,CAAC;YACH,gDAAgD;YAChD,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,mBAAmB,EAAE,CAAC,CAAC;YAC1D,sBAAsB;YACtB,mBAAmB,CAAC,SAAS,CAAC,CAAC,SAAS,EAAE,EAAE;;gBAC3C,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,SAAS,CAAC,CAAC;gBAC9C,iEAAiE;gBACjE,IAAI,SAAS,EAAE;oBACd,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,UAAI,CAAC,WAAW,CAAC,IAAI,CAAC,cAAc,CAAC,mCAAI,cAAc,CAAC,CAAC;iBAC9E;YACF,CAAC,CAAC,CAAC;YAEH,mCAAmC;YACnC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;gBACjC,mBAAmB;gBACnB,MAAM,QAAQ,GAAG,CAAC,CAAC,kCAAkC,CAAC,CAAC;gBACvD,QAAQ,CAAC,GAAG,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC,IAAI,EAAE,CAAC;gBAE7C,MAAM,mBAAmB,GAAG,8BAA8B,CAAC;gBAC3D,iDAAiD;gBACjD,CAAC,CAAC,GAAG,GAAG,mBAAmB,CAAC,CAAC,MAAM,EAAE,CAAC;gBAEtC,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,gBAAgB,EAAE,CAAC;gBAEjD,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE;oBACtB,wCAAwC;oBACxC,IAAI,OAAO,GAAG,oDAAoD,CAAC;oBACnE,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;wBAC9B,OAAO,GAAG,KAAK,CAAC;qBAChB;yBAAM,IAAI,KAAK,YAAY,KAAK,EAAE;wBAClC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;qBACxB;yBAAM,IAAI,OAAO,KAAK,CAAC,YAAY,KAAK,QAAQ,EAAE;wBAClD,OAAO,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE,OAAO,CAAC,CAAC;qBAClE;oBAED,MAAM,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC;yBACxB,IAAI,CAAC,IAAI,EAAE,mBAAmB,CAAC;yBAC/B,QAAQ,CAAC,oCAAoC,CAAC;yBAC9C,IAAI,CAAC,OAAO,CAAC,CAAC;oBAEhB,uEAAuE;oBACvE,kDAAkD;oBAClD,OAAO,CAAC,MAAM,CACb,CAAC,CAAC,wDAAwD,CAAC;yBACzD,MAAM,CAAC,6DAA6D,CAAC;yBACrE,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;wBACtB,KAAK,CAAC,cAAc,EAAE,CAAC;wBACvB,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,6BAA6B;oBAChD,CAAC,CAAC,CACH,CAAC;oBAEF,MAAM,UAAU,GAAG,CAAC,CAAC,kCAAkC,CAAC,CAAC;oBACzD,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;gBAC5B,CAAC,CAAC;gBAEF,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE;;oBACjB,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,UAAI,CAAC,WAAW,CAAC,IAAI,CAAC,gBAAgB,CAAC,mCAAI,OAAO,CAAC,CAAC;oBAEzE,kEAAkE;oBAClE,oEAAoE;oBACpE,mEAAmE;oBACnE,8DAA8D;oBAC9D,IAAI,CAAC,uBAAuB,EAAE,CAAC;gBAChC,CAAC,CAAC,CAAC;gBAEH,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE;oBACnB,QAAQ,CAAC,GAAG,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;gBACtC,CAAC,CAAC,CAAC;YACJ,CAAC,CAAC,CAAC;YAEH,wFAAwF;YACxF,IAAI,CAAC,QAAQ,CAAC,8BAA8B,CAAC,SAAS,CAAC,CAAC,YAAY,EAAE,EAAE;gBACvE,CAAC,CAAC,iCAAiC,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;YAC3D,CAAC,CAAC,CAAC;YAEH,8EAA8E;YAC9E,IAAI,CAAC,uBAAuB,GAAG,EAAE,CAAC,YAAY,CAAC,GAAG,EAAE;gBACnD,OAAO,IAAI,CAAC,WAAW,EAAE,IAAI,IAAI,CAAC,mBAAmB,EAAE,CAAC;YACzD,CAAC,CAAC,CAAC;YAEH,+CAA+C;YAC/C,IAAI,CAAC,mBAAmB,GAAG,IAAI,mBAAmB,CACjD,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,mBAAmB,EAAE,CAAC,IAAI,EAAE,EAChD,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,mBAAmB,EAAE,EACzC,IAAI,CAAC,QAAQ,CAAC,kBAAkB,EAChC,UAAU,CACV,CAAC;YAEF,2DAA2D;YAC3D,IAAI,CAAC,mBAAmB,GAAG,EAAE,CAAC,YAAY,CAAC,GAAG,EAAE;gBAC/C,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,mBAAmB,EAAE,CAAC;gBACtD,OAAO,SAAS,IAAI,SAAS,CAAC,aAAa,EAAE;uBACzC,CAAC,IAAI,CAAC,QAAQ,CAAC,8BAA8B,EAAE,CAAC;YACrD,CAAC,CAAC,CAAC;YACH,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC,SAAS,EAAE,EAAE;gBAChD,IAAI,IAAI,CAAC,gBAAgB,EAAE;oBAC1B,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,6BAA6B,CAAC;yBACvD,WAAW,CAAC,mBAAmB,EAAE,CAAC,SAAS,CAAC,CAAC;iBAC/C;YACF,CAAC,CAAC,CAAC;YACH,IAAI,CAAC,2BAA2B,GAAG,EAAE,CAAC,YAAY,CAAC,GAAG,EAAE;gBACvD,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,mBAAmB,EAAE,CAAC;gBACtD,OAAO,SAAS,IAAI,SAAS,CAAC,UAAU,EAAE,IAAI,SAAS,CAAC,aAAa,EAAE;uBACnE,CAAC,IAAI,CAAC,QAAQ,CAAC,8BAA8B,EAAE;YACpD,CAAC,CAAC,CAAC;YACH,IAAI,CAAC,2BAA2B,CAAC,SAAS,CAAC,CAAC,SAAS,EAAE,EAAE;gBACxD,IAAI,IAAI,CAAC,gBAAgB,EAAE;oBAC1B,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,gCAAgC,CAAC;yBAC1D,WAAW,CAAC,mBAAmB,EAAE,CAAC,SAAS,CAAC,CAAC;iBAC/C;YACF,CAAC,CAAC,CAAC;YACH,IAAI,CAAC,0BAA0B,GAAG,EAAE,CAAC,YAAY,CAAC,GAAG,EAAE;gBACtD,OAAO,CACN,CAAC,IAAI,CAAC,QAAQ,CAAC,8BAA8B,EAAE;uBAC5C,CAAC,IAAI,CAAC,mBAAmB,CAAC,qBAAqB,EAAE;oBACpD,+DAA+D;oBAC/D,oCAAoC;uBACjC,CAAC,IAAI,CAAC,QAAQ,CAAC,mBAAmB,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC;uBACnD;oBACF,qEAAqE;oBACrE,CAAC,IAAI,CAAC,iCAAiC;2BACpC,IAAI,CAAC,QAAQ,CAAC,mBAAmB,EAAE,CAAC,UAAU,EAAE,CACnD,CACD,CAAC;YACH,CAAC,CAAC,CAAC;YACH,IAAI,CAAC,0BAA0B,CAAC,SAAS,CAAC,CAAC,SAAS,EAAE,EAAE;gBACvD,IAAI,IAAI,CAAC,gBAAgB,EAAE;oBAC1B,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,+BAA+B,CAAC;yBACzD,WAAW,CAAC,mBAAmB,EAAE,CAAC,SAAS,CAAC,CAAC;iBAC/C;YACF,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,iBAAiB,GAAG,IAAI,iBAAiB,EAAE,CAAC;YAEjD,2BAA2B;YAC3B,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC,uBAAuB,CAAC,CAAC;YAEhD,IAAI,CAAC,iBAAiB,GAAG,UAAU,CAAC,iBAAiB,CAAC;YACtD,IAAI,CAAC,mBAAmB,GAAG,UAAU,CAAC,mBAAmB,CAAC;YAE1D,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE;;gBAClC,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;gBAE5B,+DAA+D;gBAC/D,oDAAoD;gBACpD,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;gBAE9B,4CAA4C;gBAC5C,IAAI,IAAI,CAAC,iBAAiB,EAAE;oBAC3B,IAAI,CAAC,iBAAiB,CAAC,UAAU,EAAE,CAAC;oBACpC,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;iBAC9B;gBAED,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAsB,CAAC;gBAC7D,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,YAAY,iBAAiB,CAAC,EAAE;oBACpD,OAAO;iBACP;gBAED,6CAA6C;gBAC7C,IAAI;oBACH,MAAM,GAAG,GAAG,WAAK,CAAC,aAAa,0CAAE,QAAQ,CAAC,IAAI,CAAC;oBAC/C,IAAI,GAAG,EAAE;wBACR,IAAI,CAAC,iBAAiB,GAAG,GAAG,CAAC;qBAC7B;iBACD;gBAAC,OAAO,CAAC,EAAE;oBACX,6EAA6E;iBAC7E;gBAED,IAAI,CAAC,iBAAiB,GAAG,iBAAiB,CAAC,cAAc,CACxD,KAAK,EACL;oBACC,eAAe,EAAE,CAAC,GAAW,EAAE,EAAE;wBAChC,IAAI,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE;4BAC/B,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC;yBACtB;oBACF,CAAC;oBACD,yBAAyB,EAAE,CAAC,GAAW,EAAE,EAAE;wBAC1C,IAAI,CAAC,iBAAiB,GAAG,GAAG,CAAC;oBAC9B,CAAC;iBACD,EACD,IAAI,CAAC,kBAAkB,EACvB,UAAU,CAAC,gBAAgB,CAC3B,CAAC;gBAEF,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,EAAE;oBAClD,IAAI,OAAO,UAAU,KAAK,WAAW,EAAE;wBACtC,mEAAmE;wBACnE,MAAM,IAAI,KAAK,CAAC,2FAA2F,CAAC,CAAC;qBAC7G;oBAED,UAAU,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE;wBAChD,IAAI,GAAG,IAAI,CAAC,OAAO,GAAG,KAAK,QAAQ,CAAC,EAAE;4BACrC,IAAI,CAAC,iBAAiB,GAAG,GAAG,CAAC;yBAC7B;oBACF,CAAC,CAAC,CAAC;oBAEH,2DAA2D;oBAC3D,8CAA8C;oBAC9C,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,0CAA0C,CAAC,CAAC;gBAC/D,CAAC,CAAC,CAAC;YACJ,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC;YAEzC,0EAA0E;YAC1E,CAAC,CAAC,0BAA0B,CAAC,CAAC,OAAO,CAAC,4BAA4B,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;YAE5E,MAAM,sBAAsB,GAAG,CAAC,CAAC,QAAQ,CACxC,GAAG,EAAE;gBACJ,IAAI,CAAC,uBAAuB,EAAE,CAAC;YAChC,CAAC,EACD,IAAI,EAAE,4EAA4E;YAClF,EAAC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAC,CAC/B,CAAC;YAEF,+CAA+C;YAC/C,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,EAAE;gBACrD,IACC,OAAO,CAAC,mBAAmB;uBACxB,IAAI,CAAC,iBAAiB;uBACtB,IAAI,CAAC,iBAAiB,CAAC,WAAW,EACpC;oBACD,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,gBAAgB,EAAE,OAAO,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;iBACvE;qBAAM;oBACN,IAAI,MAAM,GAAW,SAAS,CAAC;oBAC/B,IAAI,CAAC,OAAO,CAAC,mBAAmB,EAAE;wBACjC,MAAM,GAAG,WAAW,GAAG,OAAO,CAAC,EAAE,GAAG,gCAAgC,CAAC;qBACrE;yBAAM,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE;wBACnC,MAAM,GAAG,uBAAuB,CAAC;qBACjC;yBAAM,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,WAAW,EAAE;wBAC/C,MAAM,GAAG,qCAAqC,CAAC;qBAC/C;oBACD,IAAI,CAAC,GAAG,CAAC,uCAAuC,GAAG,MAAM,CAAC,CAAC;oBAE3D,sBAAsB,EAAE,CAAC;iBACzB;YACF,CAAC,CAAC,CAAC;YAEH,MAAM,oBAAoB,GAAG,GAAG,EAAE;gBACjC,8EAA8E;gBAC9E,kCAAkC;gBAClC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,kCAAkC,EAAE,CAAC,KAAK,EAAE,EAAE;oBAC1D,IAAI,IAAI,CAAC,kBAAkB,EAAE,EAAE;wBAC9B,KAAK,CAAC,cAAc,EAAE,CAAC;wBACvB,kEAAkE;wBAClE,wDAAwD;wBAExD,gFAAgF;wBAChF,0EAA0E;wBAC1E,0EAA0E;wBAC1E,gFAAgF;wBAChF,OAAO,IAAI,CAAC,iBAAiB,CAAC;qBAC9B;gBACF,CAAC,CAAC,CAAC;YACJ,CAAC;YAED;;;;eAIG;YACH,IAAI,IAAI,CAAC,QAAQ,CAAC,mBAAmB,EAAE,CAAC,UAAU,EAAE,EAAE;gBACrD,oBAAoB,EAAE,CAAC;aACvB;iBAAM;gBACN,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,GAAG,EAAE;oBACvD,uDAAuD;oBACvD,IAAI,CAAC,QAAQ,CAAC,oBAAoB,CAAC,UAAU,CAAC,CAAC;oBAC/C,oBAAoB,EAAE,CAAC;gBACxB,CAAC,CAAC,CAAC;aACH;QACF,CAAC;QAED,oBAAoB,CAAC,SAAiB,EAAE,YAAiB;YACxD,yEAAyE;YACzE,6BAA6B;YAC7B,OAAO,IAAI,CAAC,QAAQ;iBAClB,GAAG,CAAC,SAAS,CAAC;iBACd,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;iBAC7B,SAAS,CAAC,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC;QAC1C,CAAC;QAED,mBAAmB;YAClB,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;QAC5C,CAAC;QAED,IAAI,UAAU;YACb,OAAO,IAAI,CAAC,iBAAiB,CAAC;QAC/B,CAAC;QAED,IAAI,UAAU,CAAC,GAAkB;YAChC,IAAI,GAAG,KAAK,IAAI,CAAC,iBAAiB,EAAE;gBACnC,OAAO;aACP;YACD,sEAAsE;YACtE,oCAAoC;YACpC,IAAI,GAAG,KAAK,IAAI,EAAE;gBACjB,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;aAC3D;YAED,IAAI,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE;gBAC/B,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC;aAC/B;QACF,CAAC;QAEO,oBAAoB,CAAC,MAAqB,IAAI,EAAE,cAAuB,KAAK;YACnF,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC;YAC/B,IAAI,GAAG,KAAK,IAAI,EAAE;gBACjB,GAAG,GAAG,MAAM,aAAN,MAAM,cAAN,MAAM,GAAI,IAAI,CAAC,iBAAiB,CAAC;aACvC;YAED,MAAM,SAAS,GAAG,CAAC,MAAM,KAAK,GAAG,CAAC,CAAC;YACnC,IAAI,SAAS,IAAI,CAAC,WAAW,EAAE;gBAC9B,OAAO;aACP;YAED,mFAAmF;YACnF,mFAAmF;YACnF,wDAAwD;YACxD,MAAM,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC;YACpD,MAAM,sBAAsB,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;YAE1D,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;YAE/B,6DAA6D;YAC7D,gCAAgC;YAChC,MAAM,YAAY,GAAG,yBAAyB,CAAC;YAC/C,IAAI,SAAS,IAAI,CAAC,sBAAsB,EAAE;gBACzC,SAAS,CAAC,YAAY,CAAC,GAAG,CAAC,YAAY,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;aAC3E;iBAAM;gBACN,kDAAkD;gBAClD,SAAS,CAAC,YAAY,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;aAC5C;YAED,mEAAmE;YACnE,wEAAwE;YACxE,qDAAqD;YACrD,IAAI,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC;YAClD,IAAI,aAAa,KAAK,EAAE,EAAE;gBACzB,6DAA6D;gBAC7D,aAAa,GAAG,sBAAsB,CAAC;aACvC;YACD,SAAS,CAAC,YAAY,CAAC,GAAG,CAAC,kBAAkB,EAAE,aAAa,CAAC,CAAC;YAC9D,SAAS,CAAC,YAAY,CAAC,GAAG,CAAC,gBAAgB,EAAE,GAAG,CAAC,CAAC;YAElD,IAAI,CAAC,uBAAuB,GAAG,KAAK,CAAC,CAAC,sCAAsC;YAC5E,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;YAE3B,wEAAwE;YACxE,IAAI,sBAAsB,EAAE;gBAC3B,MAAM,QAAQ,GAAG;oBAChB,MAAM,EAAE,iCAAiC;oBACzC,kBAAkB,EAAE,aAAa;oBACjC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC;oBACxC,KAAK,EAAE,IAAI,CAAC,mBAAmB;iBAC/B;gBAED,MAAM,KAAK,GAAG,CAAC,CAAC,QAAQ,CAAC;qBACvB,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC;qBACtB,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC,IAAI,CAAC;qBAC9B,IAAI,CAAC,QAAQ,EAAE,sBAAsB,CAAC;qBACtC,QAAQ,CAAC,MAAM,CAAC,CAAC;gBAEnB,IAAI,GAA0B,CAAC;gBAC/B,KAAK,GAAG,IAAI,QAAQ,EAAE;oBACrB,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;oBAC5B,CAAC,CAAC,SAAS,CAAC;yBACV,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC;yBACtB,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC;yBACjB,GAAG,CAAC,KAAK,CAAC;yBACV,QAAQ,CAAC,KAAK,CAAC,CAAC;iBAClB;gBAED,IAAI,CAAC,iBAAiB,GAAG,SAAS,CAAC,IAAI,CAAC;gBACxC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;gBACxB,KAAK,CAAC,MAAM,EAAE,CAAC;aACf;iBAAM;gBACN,IAAI,CAAC,iBAAiB,GAAG,SAAS,CAAC,IAAI,CAAC;gBACxC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;aACvD;QACF,CAAC;QASD,IAAY,cAAc,CAAC,SAAkB;YAC5C,MAAM,gBAAgB,GAAG,IAAI,CAAC,eAAe,CAAC;YAC9C,IAAI,CAAC,SAAS,IAAI,CAAC,SAAS,KAAK,gBAAgB,CAAC,EAAE;gBACnD,OAAO;aACP;YACD,8DAA8D;YAC9D,iEAAiE;YACjE,yBAAyB;YAEzB,CAAC,CAAC,mCAAmC,CAAC,CAAC,WAAW,CAAC,uBAAuB,EAAE,SAAS,CAAC,CAAC;YACvF,IAAI,IAAI,CAAC,qBAAqB,EAAE;gBAC/B,YAAY,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;gBACzC,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC;aAClC;YAED,IAAI,SAAS,EAAE;gBACd,8EAA8E;gBAC9E,qCAAqC;gBACrC,IAAI,CAAC,qBAAqB,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE;oBACnD,IAAI,IAAI,CAAC,cAAc,EAAE;wBACxB,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;qBAC5B;gBACF,CAAC,EAAE,KAAK,CAAC,CAAC;aACV;YACD,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC;YAEjC,IAAI,gBAAgB,IAAI,CAAC,SAAS,EAAE;gBACnC,IAAI,CAAC,wBAAwB,GAAG,IAAI,IAAI,EAAE,CAAC;aAC3C;YAED,uDAAuD;YACvD,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,uBAAuB,EAAE;gBAC/C,IAAI,CAAC,uBAAuB,GAAG,KAAK,CAAC;gBACrC,IAAI,CAAC,uBAAuB,EAAE,CAAC;aAC/B;QACF,CAAC;QAED,IAAW,cAAc;YACxB,OAAO,IAAI,CAAC,eAAe,CAAC;QAC7B,CAAC;QAEO,uBAAuB;YAC9B,IAAI,IAAI,CAAC,mBAAmB,EAAE;gBAC7B,OAAO,CAAC,6BAA6B;aACrC;YAED,IAAI,IAAI,CAAC,cAAc,EAAE;gBACxB,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC;gBACpC,OAAO;aACP;YAED,kEAAkE;YAClE,4CAA4C;YAC5C,MAAM,cAAc,GAAG,IAAI,CAAC;YAC5B,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,MAAM,iBAAiB,GAAG,GAAG,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,wBAAwB,CAAC,OAAO,EAAE,CAAC;YAClF,IAAI,iBAAiB,GAAG,cAAc,EAAE;gBACvC,IAAI,CAAC,mBAAmB,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE;oBACjD,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;oBAChC,IAAI,CAAC,uBAAuB,EAAE,CAAC;gBAChC,CAAC,EAAE,cAAc,GAAG,iBAAiB,CAAC,CAAC;gBACvC,OAAO;aACP;YAED,4BAA4B;YAC5B,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACvC,CAAC;QAED,iBAAiB,CAAC,WAAwB;YACzC,+EAA+E;YAC/E,wEAAwE;YACxE,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAE7B,6BAA6B;YAC7B,IAAI,CAAC,kBAAkB,GAAG,MAAM,CAAC,+BAA+B,EAAE,WAAW,CAAC,CAAC;YAC/E,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC,4BAA4B,EAAE,WAAW,CAAC,CAAC,IAAI,EAAE,CAAC;YAEjF,qBAAqB;YACrB,IAAI,CAAC,mBAAmB,CAAC,iBAAiB,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC,CAAC;YACvE,IAAI,CAAC,2BAA2B,CAAC,iBAAiB,CAAC,IAAI,CAAC,2BAA2B,EAAE,CAAC,CAAC;YACvF,IAAI,CAAC,0BAA0B,CAAC,iBAAiB,CAAC,IAAI,CAAC,0BAA0B,EAAE,CAAC,CAAC;YAErF,sBAAsB;YACtB,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC,iCAAiC,EAAE,WAAW,CAAC,CAAC;QAChF,CAAC;QAED,qBAAqB;YACpB,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,+BAA+B,CAAC,CAAC;QAC3E,CAAC;QAED,qEAAqE;QACrE;;;;;WAKG;QACH,gBAAgB,CAAC,UAAkB,EAAE,GAAG,IAAS;YAChD,IAAI,CAAC,IAAI,CAAC,iBAAiB,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,WAAW,EAAE;gBACnE,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC,qCAAqC,CAAC,CAAC,OAAO,EAAE,CAAC;aAC5E;YACD,OAAO,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,CAAC;QAC5D,CAAC;QAED,WAAW;YACV,IAAI,IAAI,CAAC,kBAAkB,EAAE,EAAE;gBAC9B,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,EAAE;oBAC3C,oEAAoE;oBACpE,oCAAoC;oBACpC,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;oBAClD,OAAO,IAAI,CAAC;iBACZ;gBACD,OAAO,KAAK,CAAC;aACb;YACD,OAAO,IAAI,CAAC;QACb,CAAC;QAEO,kBAAkB;YACzB,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,mBAAmB,EAAE,CAAC;YAEtD,qDAAqD;YACrD,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,EAAE;gBAC5B,OAAO,KAAK,CAAC;aACb;YAED,QAAQ,IAAI,CAAC,cAAc,EAAE;gBAC5B,KAAK,cAAc,CAAC,kBAAkB;oBACrC,OAAO,CACN,CAAC,SAAS,CAAC,YAAY,EAAE;2BACtB,CAAC,SAAS,CAAC,MAAM,EAAE,KAAK,OAAO,CAAC,CAAC,oCAAoC;qBACxE,CAAC;gBACH,KAAK,cAAc,CAAC,cAAc;oBACjC,MAAM,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC;oBACpD,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;gBACnC;oBACC,OAAO,KAAK,CAAC;aACd;QAEF,CAAC;QAED,uEAAuE;QACvE,qBAAqB;YACpB,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;gBAC3B,OAAO;aACP;YACD,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,CAAC;YAE/B,IAAI,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE;gBACzC,qCAAqC;gBACrC,MAAM,OAAO,GAAG,CAAC,CAAC,+BAA+B,CAAC,CAAC;gBACnD,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC;oBAC9B,EAAE,EAAE,WAAW;oBACf,EAAE,EAAE,cAAc;oBAClB,EAAE,EAAE,OAAO;oBACX,SAAS,EAAE,SAAS;iBACpB,CAAC,CAAC;gBAEH,oEAAoE;gBACpE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,8BAA8B,EAAE,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;aAC7F;iBAAM;gBACN,iDAAiD;gBACjD,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;aAChD;QACF,CAAC;QAED,4BAA4B,CAAC,KAAwB;YACpD,IACC,CAAC,IAAI,CAAC,gBAAgB;mBACnB,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC,UAAU,CAAC;mBACrC,CAAC,IAAI,CAAC,kBAAkB,EAC1B;gBACD,qEAAqE;gBACrE,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;gBAChD,OAAO;aACP;YAED,MAAM,WAAW,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACjD,MAAM,aAAa,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACrD,MAAM,kBAAkB,GAAG,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAC/D,MAAM,oBAAoB,GAAG,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAEnE,IAAI,kBAAkB,IAAI,oBAAoB,EAAE;gBAC/C,IAAI,CAAC,mBAAmB,EAAE,CAAC;aAC3B;QACF,CAAC;QAEO,mBAAmB;YAC1B,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;gBAC3B,OAAO;aACP;YAED,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAAC;YAC7B,6CAA6C;YAC7C,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;QACjD,CAAC;QAEO,kBAAkB,CAAC,IAAwB;YAClD,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACpC,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACtC,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC;YAClC,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC5B,CAAC;QAED,wBAAwB;YACvB,IAAI,CAAC,IAAI,CAAC,0BAA0B,EAAE,EAAE;gBACvC,KAAK,CAAC,8DAA8D,CAAC,CAAC;gBACtE,OAAO;aACP;YACD,IAAI,CAAC,kBAAkB,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC;QACtD,CAAC;QAED,gEAAgE;QAChE,yBAAyB;YACxB,IAAI,CAAC,IAAI,CAAC,0BAA0B,EAAE,EAAE;gBACvC,OAAO;aACP;YAED,uEAAuE;YACvE,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,kBAAkB,EAAE,CAAC;YACpD,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,EAAE;gBACtD,IAAI,CAAC,kBAAkB,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC;aACrD;iBAAM;gBACN,IAAI,CAAC,mBAAmB,CAAC,iCAAiC,CAAC,QAAQ,CAAC,CAAC;aACrE;QACF,CAAC;QAED,gEAAgE;QAChE,wBAAwB;YACvB,IAAI,CAAC,kBAAkB,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;QAClD,CAAC;QAED,sBAAsB;YACrB,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,EAAE;gBAChC,yEAAyE;gBACzE,wEAAwE;gBACxE,OAAO,KAAK,CAAC;aACb;YACD,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAE3B,uEAAuE;YACvE,OAAO,IAAI,CAAC;QACb,CAAC;QAED,oBAAoB;YACnB,IAAI,CAAC,IAAI,CAAC,2BAA2B,EAAE,EAAE;gBACxC,OAAO;aACP;YACD,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAE3B,IAAI,IAAI,CAAC,QAAQ,CAAC,8BAA8B,EAAE,EAAE;gBACnD,KAAK,CAAC,6FAA6F,CAAC,CAAC;gBACrG,OAAO;aACP;YAED,IAAI,CAAC,OAAO,CAAC,wDAAwD,CAAC,EAAE;gBACvE,OAAO;aACP;YAED,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC;YAClC,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;YAE/B,IAAI,CAAC,QAAQ,CAAC,cAAc,EAAE;iBAC5B,IAAI,CAAC,GAAG,EAAE;gBACV,6CAA6C;gBAC7C,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;gBAC1C,IAAI,IAAI,CAAC,cAAc,EAAE;oBACxB,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC;oBACnC,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC;iBAChB;qBAAM;oBACN,uDAAuD;oBACvD,gDAAgD;oBAChD,MAAM,IAAI,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;oBAC1C,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC;oBAChB,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,IAAI,sBAAsB,CAAC,CAAC;iBAC7D;gBACD,gEAAgE;gBAChE,4BAA4B;gBAC5B,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,uBAAuB,EAAE,GAAG,CAAC,CAAC;gBAEnD,sBAAsB;gBACtB,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC;gBAEd,2CAA2C;gBAC3C,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,gBAAgB,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;gBAEhF,0BAA0B;gBAC1B,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAC;gBAEtC,2DAA2D;gBAC3D,mEAAmE;YACpE,CAAC,CAAC;iBACD,IAAI,CAAC,CAAC,aAAa,EAAE,EAAE;gBACvB,IAAI,OAAO,GAAW,aAAa,CAAC,UAAU,IAAI,gBAAgB,CAAC;gBAEnE,IAAI,OAAO,aAAa,CAAC,YAAY,KAAK,QAAQ,EAAE;oBACnD,MAAM,aAAa,GAAG,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,YAAY,EAAE,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC;oBAC7E,IAAI,OAAO,aAAa,KAAK,QAAQ,EAAE;wBACtC,OAAO,GAAG,aAAa,CAAC;qBACxB;iBACD;gBAED,KAAK,CAAC,SAAS,GAAG,OAAO,CAAC,CAAC;gBAC3B,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;YACjC,CAAC,CAAC,CAAC;QACL,CAAC;QAED,yBAAyB;YACxB,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;gBAC3B,OAAO;aACP;YACD,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAqB,CAAC;YACnE,IAAI,CAAC,SAAS,IAAI,CAAC,SAAS,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE;gBACnE,OAAO;aACP;YAED,yDAAyD;YACzD,MAAM,YAAY,GAAG,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC7C,IAAI,CAAC,YAAY,EAAE;gBAClB,OAAO;aACP;YAED,sBAAsB;YACtB,IAAI,YAAY,CAAC,IAAI,GAAG,IAAI,CAAC,iBAAiB,EAAE;gBAC/C,KAAK,CACJ,kEAAkE;sBAChE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,GAAG,MAAM,CACpD,CAAC;gBACF,uBAAuB;gBACvB,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBAC9B,OAAO;aACP;YAED,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;YACvB,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;YAE5B,KAAK,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,IAAI,CACjC,CAAC,GAAG,EAAE,EAAE;gBACP,MAAM,iBAAiB,GAAG,6CAA6C,CAAC;gBACxE,MAAM,kBAAkB,GAAG,GAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;gBACvD,IAAI,CAAC,kBAAkB,IAAI,CAAC,kBAAkB,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE;oBAC3D,MAAM,IAAI,KAAK,CAAC,iEAAiE,CAAC,CAAC;iBACnF;gBACD,MAAM,YAAY,GAAG,kBAAkB,CAAC,CAAC,CAAC,CAAC;gBAE3C,mEAAmE;gBACnE,gEAAgE;gBAChE,MAAM,OAAO,GAAG,iBAAiB,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;gBAC1D,IAAI,eAAuB,CAAC;gBAC5B,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE;oBACrC,MAAM,IAAI,KAAK,CAAC,6DAA6D,CAAC,CAAC;iBAC/E;qBAAM;oBACN,eAAe,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;iBAC7B;gBAED,MAAM,YAAY,GAAG,GAAG,CAAC,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC,CAAC;gBACjE,IAAI,CAAC,YAAY,EAAE;oBAClB,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;iBAC1E;gBAED,kBAAkB;gBAClB,OAAO,OAAO,CAAC,GAAG,CAAC;oBAClB,YAAY,CAAC,KAAK,CAAC,QAAQ,CAAC;oBAC5B,YAAY,CAAC,KAAK,CAAC,QAAQ,CAAC;iBAC5B,CAAC,CAAC;YACJ,CAAC,EACD,CAAC,KAAK,EAAE,EAAE;gBACT,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC;gBAC5C,MAAM,IAAI,KAAK,CAAC,iBAAiB,GAAG,YAAY,CAAC,IAAI,GAAG,KAAK,GAAG,YAAY,CAAC,CAAC;YAC/E,CAAC,CACD,CAAC,IAAI,CAAC,CAAC,YAAY,EAAE,EAAE;gBACvB,IAAI,CAAC,YAAY,EAAE;oBAClB,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC;iBAC3E;gBAED,MAAM,QAAQ,GAAG,IAAI,CAAC,2BAA2B,CAChD,YAAY,CAAC,CAAC,CAAC,EACf,eAAe,EACf,kBAAkB,CAClB,CAAC;gBACF,MAAM,QAAQ,GAAG,IAAI,CAAC,2BAA2B,CAChD,YAAY,CAAC,CAAC,CAAC,EACf,eAAe,EACf,kBAAkB,CAClB,CAAC;gBACF,MAAM,MAAM,GAAG,IAAI,sBAAsB,CAAC,YAAY,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;gBAEvE,kBAAkB;gBAClB,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,uBAAuB,CAAC,QAAQ,CAAC,CAAC,CAAC;gBAErE,kBAAkB;gBAClB,KAAK,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;oBAC1D,MAAM,CAAC,aAAa,EAAE,CAAC;oBAEvB,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;oBAClD,YAAY,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;wBAChC,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;wBACjC,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;wBACxC,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE;4BAC5B,MAAM,CAAC,eAAe,EAAE,CAAC;yBACzB;6BAAM;4BACN,MAAM,CAAC,gBAAgB,EAAE,CAAC;4BAC1B,IAAI,QAAQ,IAAI,KAAK,EAAE;gCACtB,MAAM,CAAC,yBAAyB,EAAE,CAAC;6BACnC;yBACD;oBACF,CAAC,CAAC,CAAC;oBAEH,IAAI,YAAY,CAAC,OAAO,EAAE,EAAE;wBAC3B,MAAM,CAAC,eAAe,EAAE,CAAC;qBACzB;iBACD;gBAED,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;gBAC9B,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;YAElC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;gBAClB,qDAAqD;gBACrD,IAAI,YAAoB,CAAC;gBACzB,IAAI,KAAK,YAAY,KAAK,EAAE;oBAC3B,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC;iBAC7B;qBAAM;oBACN,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;iBAC7B;gBACD,KAAK,CAAC,SAAS,GAAG,YAAY,CAAC,CAAC;YACjC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE;;gBACf,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;gBACxB,UAAI,CAAC,gBAAgB,0CAAE,GAAG,CAAC,EAAE,CAAC,CAAC;YAChC,CAAC,CAAC,CAAC;QACJ,CAAC;QAEO,2BAA2B,CAClC,OAAe,EACf,IAAY,EACZ,MAAS;YAET,IAAI;gBACH,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;gBACvC,OAAO,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;aAChC;YAAC,OAAO,KAAK,EAAE;gBACf,IAAI,YAAoB,CAAC;gBACzB,IAAI,KAAK,YAAY,wDAAQ,EAAE;oBAC9B,+CAA+C;oBAC/C,YAAY,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;wBACzC,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC;oBACpD,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;iBACd;qBAAM,IAAI,KAAK,YAAY,KAAK,EAAE;oBAClC,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC;iBAC7B;qBAAM;oBACN,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;iBAC7B;gBACD,yCAAyC;gBACzC,MAAM,IAAI,KAAK,CAAC,gBAAgB,GAAG,IAAI,GAAG,KAAK,GAAG,YAAY,CAAC,CAAC;aAChE;QACF,CAAC;QAED,mBAAmB;YAClB,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC;QACnC,CAAC;QAED,GAAG,CAAC,OAAY;YACf,IAAI,IAAI,CAAC,qBAAqB,IAAI,OAAO,IAAI,OAAO,CAAC,GAAG,EAAE;gBACzD,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;aACrB;QACF,CAAC;KACD;IA3hCY,kCAAe,kBA2hC3B;AACF,CAAC,EAhvEgB,kBAAkB,KAAlB,kBAAkB,QAgvElC;AAQD,MAAM,CAAC;IACN,sDAAsD;IACtD,4DAA4D;IAC5D,UAAU,CAAC,GAAG,EAAE;QACf,MAAM,CAAC,iBAAiB,GAAG,IAAI,kBAAkB,CAAC,eAAe,CAAC,wBAAwB,CAAC,CAAC;QAC5F,MAAM,WAAW,GAAG,QAAQ,CAAC,cAAc,CAAC,yBAAyB,CAAC,CAAC;QACvE,IAAI,WAAW,KAAK,IAAI,EAAE;YACzB,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAC;SAC5E;QAED,EAAE,CAAC,aAAa,CAAC,MAAM,CAAC,iBAAiB,EAAE,WAAW,CAAC,CAAC;QAExD,4EAA4E;QAC5E,uEAAuE;QACvE,UAAU,CAAC,GAAG,EAAE;YACf,MAAM,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC;QACzD,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,yCAAyC;IACjD,CAAC,EAAE,EAAE,CAAC,CAAC;AACR,CAAC,CAAC,CAAC;;;;;;;;;;;;;;;AChyEU;AACN;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,wDAAwD;AACzD;;;;;;;;;;;;;;;;ACvCmD;AAC8C;AACjG,kCAAkC,4DAAY;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,iEAAe,uGAAqB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,EAAC;AACH;;;;;;;;;;;;;;;;ACtCgJ;AAC5D;AACpF,mBAAmB,mGAA4B;AAC/C,gCAAgC,kGAAoB;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,iHAAmC;AACtD;AACA;AACA;AACA;AACA,iEAAe,uGAAqB;AACpC;AACA;AACA;AACA;AACA,mCAAmC,cAAc;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,EAAC;AACH;;;;;;;;;;;;;;;;AC9CqH;AACjC;AACpF,cAAc,8FAAuB;AACrC;AACA;AACA,iCAAiC,gBAAgB,KAAK,aAAa;AACnE;AACA;AACA;AACA,2BAA2B,gGAAkB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAe,uGAAqB;AACpC;AACA;AACA;AACA,sEAAsE,gBAAgB;AACtF;AACA;AACA;AACA;AACA;AACA,sBAAsB,mEAAmE;AACzF;AACA,EAAE,EAAC;AACH;;;;;;;;;;;;;;;;;ACvCuH;AACnC;AACpF,cAAc,8FAAuB;AACc;AACnD,+BAA+B,kGAAoB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,gFAAgC;AAC/D,yBAAyB,oFAAoC;AAC7D;AACA;AACA;AACA;AACA;AACA,iEAAe,uGAAqB;AACpC,mDAAmD,oDAAoD;AACvG;AACA;AACA,EAAE,EAAC;AACH;;;;;;;;;;;;;;;;;ACvBgJ;AAC5D;AACpF,cAAc,8FAAuB;AACrC,cAAc,8FAAuB;AACrC,mBAAmB,mGAA4B;AACxC,2BAA2B,kGAAoB;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,iHAAmC;AAC1D;AACA;AACA,uBAAuB,iHAAmC;AAC1D;AACA;AACA;AACA,mBAAmB,iHAAmC;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,iHAAmC;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAe,uGAAqB;AACpC,8CAA8C,cAAc;AAC5D;AACA;AACA;AACA;AACA;AACA,sDAAsD,oDAAoD;AAC1G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,EAAC;AACH;;;;;;;;;;;;;;;ACtHsH;AACtH,6BAA6B,iGAAmB;AAChD;AACA;AACA;AACA;AACA,iEAAe,uGAAqB;AACpC;AACA,EAAE,EAAC;AACH;;;;;;;;;;;;;;;;ACT8H;AAC1C;AACpF,cAAc,8FAAuB;AACrC,6BAA6B,iGAAmB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAe,+GAA6B;AAC5C;AACA,sBAAsB,4DAA4D;AAClF;AACA,EAAE,EAAC;AACH;;;;;;;;;;;;;;;ACxCsH;AACtH,oCAAoC,iGAAmB;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAe,uGAAqB;AACpC;AACA;AACA,6EAA6E,qBAAqB;AAClG;AACA;AACA,EAAE,EAAC;AACH;;;;;;;;;;;;;;;;AC5Ba;AAC0E;AACd;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,iEAAmB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4DAA4D,cAAc;AAC1E;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,aAAa,WAAW,yBAAyB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,aAAa,WAAW,yBAAyB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,iFAAsB;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAe,8EAA4B;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,0CAA0C;AACvE;AACA;AACA;AACA;AACA,yEAAyE,mBAAmB;AAC5F;AACA;AACA;AACA,2DAA2D,uBAAuB;AAClF;AACA;AACA,EAAE,EAAC;AACH;;;;;;;;;;;;;;;;AC1SyD;AAClD;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,+BAA+B,iEAAmB;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;ACnBa;AAC0E;AACvF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,iEAAmB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAe,8EAA4B;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,0CAA0C,2BAA2B;AAC3F;AACA,EAAE,EAAC;AACH;;;;;;;;;;;;;;;AChCuF;AACvF;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,iEAAmB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAe,8EAA4B;AAC3C;AACA;AACA,EAAE,EAAC;AACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC3CA;AACA;AACA;AACA;AAC0E;AACN;AACc;AACR;AACN;AACkB;AACP;AACd;AACH;AAC2B;AACxB;AACH;AACe;AACN;AACZ;AACiC;AAC3B;AACjE;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA,iDAAiD,iFAAgB;AACjE,+CAA+C,6EAAc;AAC7D,oDAAoD,uFAAkB;AACtE,iDAAiD,iFAAgB;AACjE,+CAA+C,6EAAc;AAC7D,qDAAqD,yFAAoB;AACzE,mDAAmD,qFAAiB;AACpE,8CAA8C,2EAAa;AAC3D,6CAA6C,yEAAY;AACzD,sDAAsD,2FAAqB;AAC3E,8CAA8C,4EAAa;AAC3D,6CAA6C,0EAAY;AACzD,kDAAkD,oFAAiB;AACnE,gDAAgD,gFAAe;AAC/D,4CAA4C,wEAAW;AACvD,uDAAuD,8FAAsB;AAC7E,8CAA8C,4EAAa;AAC3D;AACA;AACA;;;;;;;;;;;;;;;AClD0D;AAC1D;AACA;AACA;AACO,sCAAsC,kEAAoB;AACjE;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;ACVuF;AACvF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,SAAS,IAAI,OAAO;AAC9C;AACA,mDAAmD,YAAY;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA,iCAAiC,iEAAmB;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAe,8EAA4B;AAC3C;AACA;AACA;AACA,oEAAoE,oBAAoB;AACxF;AACA;AACA;AACA;AACA,mCAAmC,wDAAwD;AAC3F;AACA;AACA;AACA,EAAE,EAAC;AACH;;;;;;;;;;;;;;;ACnKuF;AACvF,qCAAqC,iEAAmB;AACxD;AACA;AACA;AACA;AACA,iEAAe,8EAA4B;AAC3C;AACA,EAAE,EAAC;AACH;;;;;;;;;;;;;;;ACTa;AAC0E;AACvF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,iEAAmB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,iEAAe,8EAA4B;AAC3C;AACA,8DAA8D,wBAAwB;AACtF;AACA;AACA,EAAE,EAAC;AACH;;;;;;;;;;;;;;;;AC/C2D;AACqB;AAChF;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,wFAAuB;AAC1D;AACA,iEAAe,uEAAqB;AACpC;AACA,EAAE,EAAC;AACH;;;;;;;;;;;;;;;;;ACbA;AACsF;AACvB;AAC/D,cAAc,4EAAuB;AAC9B,6BAA6B,gEAAkB;AACtD;AACA;AACA;AACA;AACA,qDAAqD,yBAAyB;AAC9E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAe,8EAA4B;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2EAA2E,qBAAqB;AAChG;AACA;AACA;AACA;AACA;AACA,yCAAyC,gDAAgD;AACzF;AACA;AACA;AACA,EAAE,EAAC;AACH;;;;;;;;;;;;;;;;ACnHa;AACqD;AACa;AAC/E,gCAAgC,uFAAgB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAe,8EAA4B;AAC3C;AACA;AACA,2BAA2B,mBAAmB;AAC9C;AACA;AACA;AACA,8DAA8D,2BAA2B;AACzF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,EAAC;AACH;;;;;;;;;;;;;;;;AC9Ba;AACqD;AACa;AAC/E;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,8BAA8B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,uFAAgB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,wEAAwE;AAChF;AACA;AACA,UAAU,sCAAsC;AAChD;AACA;AACA,uBAAuB,yCAAyC,2BAA2B;AAC3F;AACA;AACA;AACA,iEAAe,8EAA4B;AAC3C;AACA;AACA;AACA,MAAM,gBAAgB;AACtB;AACA;AACA,SAAS,eAAe;AACxB;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,2BAA2B,8CAA8C;AACzE;AACA;AACA;AACA,EAAE,EAAC;AACH;;;;;;;;;;;;;;;;AClG+E;AACb;AAClE,2BAA2B,uFAAgB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAe,8EAA4B;AAC3C;AACA;AACA;AACA,sBAAsB,0CAA0C,2BAA2B;AAC3F;AACA,EAAE,EAAC;AACH;;;;;;;;;;;;;;;;ACjB2D;AACqB;AAChF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,wFAAuB;AAC3D;AACA,iEAAe,uEAAqB;AACpC;AACA,EAAE,EAAC;AACH;;;;;;;;;;;;;;;ACfuF;AACvF,4BAA4B,iEAAmB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAe,8EAA4B;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,EAAC;AACH;;;;;;;;;;;;;;;;ACrBsF;AAC/E,2BAA2B,gEAAkB;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,wBAAwB;AACvD;AACA;AACA,iEAAe,8EAA4B;AAC3C;AACA;AACA,sBAAsB,0CAA0C,2BAA2B;AAC3F;AACA,EAAE,EAAC;AACH;;;;;;;;;;;;;;;AC1BuF;AACvF,gCAAgC,iEAAmB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAe,8EAA4B;AAC3C;AACA;AACA;AACA;AACA;AACA,uBAAuB,yCAAyC,2BAA2B;AAC3F;AACA;AACA,EAAE,EAAC;AACH;;;;;;;;;;;;;;;;ACtCuF;AAChF,8BAA8B,iEAAmB;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAe,8EAA4B;AAC3C;AACA;AACA,SAAS,aAAa;AACtB,EAAE,EAAC;AACH;;;;;;;;;;;;;;;ACjBa;AAC0E;AACvF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,iEAAmB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,4BAA4B;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,UAAU,+BAA+B;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAe,8EAA4B;AAC3C;AACA,EAAE,EAAC;AACH;;;;;;;;;;;;;;;;;;;;;;;;ACpK4D;AAC5D,cAAc,4EAAuB;AACrC,yBAAyB,uFAAkC;AAC3D,cAAc,4EAAuB;AAC9B;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uFAAuF,WAAW;AAClG;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;AC5RA;AACA;AACA;AACA;AACA;AACO;AACP,iIAAiI;AACjI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","sources":["webpack:///./extras/zod/lib/index.js","webpack:///./extras/modules/admin-customizer/admin-customizer.ts","webpack:///./extras/modules/admin-customizer/admin-customizer-base.js","webpack:///./extras/modules/admin-customizer/ko-components/ame-ac-content-section.js","webpack:///./extras/modules/admin-customizer/ko-components/ame-ac-control-group.js","webpack:///./extras/modules/admin-customizer/ko-components/ame-ac-control.js","webpack:///./extras/modules/admin-customizer/ko-components/ame-ac-section-link.js","webpack:///./extras/modules/admin-customizer/ko-components/ame-ac-section.js","webpack:///./extras/modules/admin-customizer/ko-components/ame-ac-separator.js","webpack:///./extras/modules/admin-customizer/ko-components/ame-ac-structure.js","webpack:///./extras/modules/admin-customizer/ko-components/ame-ac-validation-errors.js","webpack:///./extras/pro-customizables/ko-components/ame-box-dimensions/ame-box-dimensions.js","webpack:///./extras/pro-customizables/ko-components/ame-choice-control/ame-choice-control.js","webpack:///./extras/pro-customizables/ko-components/ame-code-editor/ame-code-editor.js","webpack:///./extras/pro-customizables/ko-components/ame-color-picker/ame-color-picker.js","webpack:///./extras/pro-customizables/ko-components/ame-components.js","webpack:///./extras/pro-customizables/ko-components/ame-description/ame-description.js","webpack:///./extras/pro-customizables/ko-components/ame-font-style-picker/ame-font-style-picker.js","webpack:///./extras/pro-customizables/ko-components/ame-horizontal-separator/ame-horizontal-separator.js","webpack:///./extras/pro-customizables/ko-components/ame-image-selector/ame-image-selector.js","webpack:///./extras/pro-customizables/ko-components/ame-nested-description/ame-nested-description.js","webpack:///./extras/pro-customizables/ko-components/ame-number-input/ame-number-input.js","webpack:///./extras/pro-customizables/ko-components/ame-radio-button-bar/ame-radio-button-bar.js","webpack:///./extras/pro-customizables/ko-components/ame-radio-group/ame-radio-group.js","webpack:///./extras/pro-customizables/ko-components/ame-select-box/ame-select-box.js","webpack:///./extras/pro-customizables/ko-components/ame-sibling-description/ame-sibling-description.js","webpack:///./extras/pro-customizables/ko-components/ame-static-html/ame-static-html.js","webpack:///./extras/pro-customizables/ko-components/ame-text-input/ame-text-input.js","webpack:///./extras/pro-customizables/ko-components/ame-toggle-checkbox/ame-toggle-checkbox.js","webpack:///./extras/pro-customizables/ko-components/ame-unit-dropdown/ame-unit-dropdown.js","webpack:///./extras/pro-customizables/ko-components/ame-wp-editor/ame-wp-editor.js","webpack:///./extras/pro-customizables/ko-components/control-base.js","webpack:///./extras/pro-customizables/ko-components/lazy-popup-slider-adapter.js"],"sourcesContent":["var util;\n(function (util) {\n util.assertEqual = (val) => val;\n function assertIs(_arg) { }\n util.assertIs = assertIs;\n function assertNever(_x) {\n throw new Error();\n }\n util.assertNever = assertNever;\n util.arrayToEnum = (items) => {\n const obj = {};\n for (const item of items) {\n obj[item] = item;\n }\n return obj;\n };\n util.getValidEnumValues = (obj) => {\n const validKeys = util.objectKeys(obj).filter((k) => typeof obj[obj[k]] !== \"number\");\n const filtered = {};\n for (const k of validKeys) {\n filtered[k] = obj[k];\n }\n return util.objectValues(filtered);\n };\n util.objectValues = (obj) => {\n return util.objectKeys(obj).map(function (e) {\n return obj[e];\n });\n };\n util.objectKeys = typeof Object.keys === \"function\" // eslint-disable-line ban/ban\n ? (obj) => Object.keys(obj) // eslint-disable-line ban/ban\n : (object) => {\n const keys = [];\n for (const key in object) {\n if (Object.prototype.hasOwnProperty.call(object, key)) {\n keys.push(key);\n }\n }\n return keys;\n };\n util.find = (arr, checker) => {\n for (const item of arr) {\n if (checker(item))\n return item;\n }\n return undefined;\n };\n util.isInteger = typeof Number.isInteger === \"function\"\n ? (val) => Number.isInteger(val) // eslint-disable-line ban/ban\n : (val) => typeof val === \"number\" && isFinite(val) && Math.floor(val) === val;\n function joinValues(array, separator = \" | \") {\n return array\n .map((val) => (typeof val === \"string\" ? `'${val}'` : val))\n .join(separator);\n }\n util.joinValues = joinValues;\n util.jsonStringifyReplacer = (_, value) => {\n if (typeof value === \"bigint\") {\n return value.toString();\n }\n return value;\n };\n})(util || (util = {}));\nvar objectUtil;\n(function (objectUtil) {\n objectUtil.mergeShapes = (first, second) => {\n return {\n ...first,\n ...second, // second overwrites first\n };\n };\n})(objectUtil || (objectUtil = {}));\nconst ZodParsedType = util.arrayToEnum([\n \"string\",\n \"nan\",\n \"number\",\n \"integer\",\n \"float\",\n \"boolean\",\n \"date\",\n \"bigint\",\n \"symbol\",\n \"function\",\n \"undefined\",\n \"null\",\n \"array\",\n \"object\",\n \"unknown\",\n \"promise\",\n \"void\",\n \"never\",\n \"map\",\n \"set\",\n]);\nconst getParsedType = (data) => {\n const t = typeof data;\n switch (t) {\n case \"undefined\":\n return ZodParsedType.undefined;\n case \"string\":\n return ZodParsedType.string;\n case \"number\":\n return isNaN(data) ? ZodParsedType.nan : ZodParsedType.number;\n case \"boolean\":\n return ZodParsedType.boolean;\n case \"function\":\n return ZodParsedType.function;\n case \"bigint\":\n return ZodParsedType.bigint;\n case \"symbol\":\n return ZodParsedType.symbol;\n case \"object\":\n if (Array.isArray(data)) {\n return ZodParsedType.array;\n }\n if (data === null) {\n return ZodParsedType.null;\n }\n if (data.then &&\n typeof data.then === \"function\" &&\n data.catch &&\n typeof data.catch === \"function\") {\n return ZodParsedType.promise;\n }\n if (typeof Map !== \"undefined\" && data instanceof Map) {\n return ZodParsedType.map;\n }\n if (typeof Set !== \"undefined\" && data instanceof Set) {\n return ZodParsedType.set;\n }\n if (typeof Date !== \"undefined\" && data instanceof Date) {\n return ZodParsedType.date;\n }\n return ZodParsedType.object;\n default:\n return ZodParsedType.unknown;\n }\n};\n\nconst ZodIssueCode = util.arrayToEnum([\n \"invalid_type\",\n \"invalid_literal\",\n \"custom\",\n \"invalid_union\",\n \"invalid_union_discriminator\",\n \"invalid_enum_value\",\n \"unrecognized_keys\",\n \"invalid_arguments\",\n \"invalid_return_type\",\n \"invalid_date\",\n \"invalid_string\",\n \"too_small\",\n \"too_big\",\n \"invalid_intersection_types\",\n \"not_multiple_of\",\n \"not_finite\",\n]);\nconst quotelessJson = (obj) => {\n const json = JSON.stringify(obj, null, 2);\n return json.replace(/\"([^\"]+)\":/g, \"$1:\");\n};\nclass ZodError extends Error {\n constructor(issues) {\n super();\n this.issues = [];\n this.addIssue = (sub) => {\n this.issues = [...this.issues, sub];\n };\n this.addIssues = (subs = []) => {\n this.issues = [...this.issues, ...subs];\n };\n const actualProto = new.target.prototype;\n if (Object.setPrototypeOf) {\n // eslint-disable-next-line ban/ban\n Object.setPrototypeOf(this, actualProto);\n }\n else {\n this.__proto__ = actualProto;\n }\n this.name = \"ZodError\";\n this.issues = issues;\n }\n get errors() {\n return this.issues;\n }\n format(_mapper) {\n const mapper = _mapper ||\n function (issue) {\n return issue.message;\n };\n const fieldErrors = { _errors: [] };\n const processError = (error) => {\n for (const issue of error.issues) {\n if (issue.code === \"invalid_union\") {\n issue.unionErrors.map(processError);\n }\n else if (issue.code === \"invalid_return_type\") {\n processError(issue.returnTypeError);\n }\n else if (issue.code === \"invalid_arguments\") {\n processError(issue.argumentsError);\n }\n else if (issue.path.length === 0) {\n fieldErrors._errors.push(mapper(issue));\n }\n else {\n let curr = fieldErrors;\n let i = 0;\n while (i < issue.path.length) {\n const el = issue.path[i];\n const terminal = i === issue.path.length - 1;\n if (!terminal) {\n curr[el] = curr[el] || { _errors: [] };\n // if (typeof el === \"string\") {\n // curr[el] = curr[el] || { _errors: [] };\n // } else if (typeof el === \"number\") {\n // const errorArray: any = [];\n // errorArray._errors = [];\n // curr[el] = curr[el] || errorArray;\n // }\n }\n else {\n curr[el] = curr[el] || { _errors: [] };\n curr[el]._errors.push(mapper(issue));\n }\n curr = curr[el];\n i++;\n }\n }\n }\n };\n processError(this);\n return fieldErrors;\n }\n toString() {\n return this.message;\n }\n get message() {\n return JSON.stringify(this.issues, util.jsonStringifyReplacer, 2);\n }\n get isEmpty() {\n return this.issues.length === 0;\n }\n flatten(mapper = (issue) => issue.message) {\n const fieldErrors = {};\n const formErrors = [];\n for (const sub of this.issues) {\n if (sub.path.length > 0) {\n fieldErrors[sub.path[0]] = fieldErrors[sub.path[0]] || [];\n fieldErrors[sub.path[0]].push(mapper(sub));\n }\n else {\n formErrors.push(mapper(sub));\n }\n }\n return { formErrors, fieldErrors };\n }\n get formErrors() {\n return this.flatten();\n }\n}\nZodError.create = (issues) => {\n const error = new ZodError(issues);\n return error;\n};\n\nconst errorMap = (issue, _ctx) => {\n let message;\n switch (issue.code) {\n case ZodIssueCode.invalid_type:\n if (issue.received === ZodParsedType.undefined) {\n message = \"Required\";\n }\n else {\n message = `Expected ${issue.expected}, received ${issue.received}`;\n }\n break;\n case ZodIssueCode.invalid_literal:\n message = `Invalid literal value, expected ${JSON.stringify(issue.expected, util.jsonStringifyReplacer)}`;\n break;\n case ZodIssueCode.unrecognized_keys:\n message = `Unrecognized key(s) in object: ${util.joinValues(issue.keys, \", \")}`;\n break;\n case ZodIssueCode.invalid_union:\n message = `Invalid input`;\n break;\n case ZodIssueCode.invalid_union_discriminator:\n message = `Invalid discriminator value. Expected ${util.joinValues(issue.options)}`;\n break;\n case ZodIssueCode.invalid_enum_value:\n message = `Invalid enum value. Expected ${util.joinValues(issue.options)}, received '${issue.received}'`;\n break;\n case ZodIssueCode.invalid_arguments:\n message = `Invalid function arguments`;\n break;\n case ZodIssueCode.invalid_return_type:\n message = `Invalid function return type`;\n break;\n case ZodIssueCode.invalid_date:\n message = `Invalid date`;\n break;\n case ZodIssueCode.invalid_string:\n if (typeof issue.validation === \"object\") {\n if (\"includes\" in issue.validation) {\n message = `Invalid input: must include \"${issue.validation.includes}\"`;\n if (typeof issue.validation.position === \"number\") {\n message = `${message} at one or more positions greater than or equal to ${issue.validation.position}`;\n }\n }\n else if (\"startsWith\" in issue.validation) {\n message = `Invalid input: must start with \"${issue.validation.startsWith}\"`;\n }\n else if (\"endsWith\" in issue.validation) {\n message = `Invalid input: must end with \"${issue.validation.endsWith}\"`;\n }\n else {\n util.assertNever(issue.validation);\n }\n }\n else if (issue.validation !== \"regex\") {\n message = `Invalid ${issue.validation}`;\n }\n else {\n message = \"Invalid\";\n }\n break;\n case ZodIssueCode.too_small:\n if (issue.type === \"array\")\n message = `Array must contain ${issue.exact ? \"exactly\" : issue.inclusive ? `at least` : `more than`} ${issue.minimum} element(s)`;\n else if (issue.type === \"string\")\n message = `String must contain ${issue.exact ? \"exactly\" : issue.inclusive ? `at least` : `over`} ${issue.minimum} character(s)`;\n else if (issue.type === \"number\")\n message = `Number must be ${issue.exact\n ? `exactly equal to `\n : issue.inclusive\n ? `greater than or equal to `\n : `greater than `}${issue.minimum}`;\n else if (issue.type === \"date\")\n message = `Date must be ${issue.exact\n ? `exactly equal to `\n : issue.inclusive\n ? `greater than or equal to `\n : `greater than `}${new Date(Number(issue.minimum))}`;\n else\n message = \"Invalid input\";\n break;\n case ZodIssueCode.too_big:\n if (issue.type === \"array\")\n message = `Array must contain ${issue.exact ? `exactly` : issue.inclusive ? `at most` : `less than`} ${issue.maximum} element(s)`;\n else if (issue.type === \"string\")\n message = `String must contain ${issue.exact ? `exactly` : issue.inclusive ? `at most` : `under`} ${issue.maximum} character(s)`;\n else if (issue.type === \"number\")\n message = `Number must be ${issue.exact\n ? `exactly`\n : issue.inclusive\n ? `less than or equal to`\n : `less than`} ${issue.maximum}`;\n else if (issue.type === \"bigint\")\n message = `BigInt must be ${issue.exact\n ? `exactly`\n : issue.inclusive\n ? `less than or equal to`\n : `less than`} ${issue.maximum}`;\n else if (issue.type === \"date\")\n message = `Date must be ${issue.exact\n ? `exactly`\n : issue.inclusive\n ? `smaller than or equal to`\n : `smaller than`} ${new Date(Number(issue.maximum))}`;\n else\n message = \"Invalid input\";\n break;\n case ZodIssueCode.custom:\n message = `Invalid input`;\n break;\n case ZodIssueCode.invalid_intersection_types:\n message = `Intersection results could not be merged`;\n break;\n case ZodIssueCode.not_multiple_of:\n message = `Number must be a multiple of ${issue.multipleOf}`;\n break;\n case ZodIssueCode.not_finite:\n message = \"Number must be finite\";\n break;\n default:\n message = _ctx.defaultError;\n util.assertNever(issue);\n }\n return { message };\n};\n\nlet overrideErrorMap = errorMap;\nfunction setErrorMap(map) {\n overrideErrorMap = map;\n}\nfunction getErrorMap() {\n return overrideErrorMap;\n}\n\nconst makeIssue = (params) => {\n const { data, path, errorMaps, issueData } = params;\n const fullPath = [...path, ...(issueData.path || [])];\n const fullIssue = {\n ...issueData,\n path: fullPath,\n };\n let errorMessage = \"\";\n const maps = errorMaps\n .filter((m) => !!m)\n .slice()\n .reverse();\n for (const map of maps) {\n errorMessage = map(fullIssue, { data, defaultError: errorMessage }).message;\n }\n return {\n ...issueData,\n path: fullPath,\n message: issueData.message || errorMessage,\n };\n};\nconst EMPTY_PATH = [];\nfunction addIssueToContext(ctx, issueData) {\n const issue = makeIssue({\n issueData: issueData,\n data: ctx.data,\n path: ctx.path,\n errorMaps: [\n ctx.common.contextualErrorMap,\n ctx.schemaErrorMap,\n getErrorMap(),\n errorMap, // then global default map\n ].filter((x) => !!x),\n });\n ctx.common.issues.push(issue);\n}\nclass ParseStatus {\n constructor() {\n this.value = \"valid\";\n }\n dirty() {\n if (this.value === \"valid\")\n this.value = \"dirty\";\n }\n abort() {\n if (this.value !== \"aborted\")\n this.value = \"aborted\";\n }\n static mergeArray(status, results) {\n const arrayValue = [];\n for (const s of results) {\n if (s.status === \"aborted\")\n return INVALID;\n if (s.status === \"dirty\")\n status.dirty();\n arrayValue.push(s.value);\n }\n return { status: status.value, value: arrayValue };\n }\n static async mergeObjectAsync(status, pairs) {\n const syncPairs = [];\n for (const pair of pairs) {\n syncPairs.push({\n key: await pair.key,\n value: await pair.value,\n });\n }\n return ParseStatus.mergeObjectSync(status, syncPairs);\n }\n static mergeObjectSync(status, pairs) {\n const finalObject = {};\n for (const pair of pairs) {\n const { key, value } = pair;\n if (key.status === \"aborted\")\n return INVALID;\n if (value.status === \"aborted\")\n return INVALID;\n if (key.status === \"dirty\")\n status.dirty();\n if (value.status === \"dirty\")\n status.dirty();\n if (typeof value.value !== \"undefined\" || pair.alwaysSet) {\n finalObject[key.value] = value.value;\n }\n }\n return { status: status.value, value: finalObject };\n }\n}\nconst INVALID = Object.freeze({\n status: \"aborted\",\n});\nconst DIRTY = (value) => ({ status: \"dirty\", value });\nconst OK = (value) => ({ status: \"valid\", value });\nconst isAborted = (x) => x.status === \"aborted\";\nconst isDirty = (x) => x.status === \"dirty\";\nconst isValid = (x) => x.status === \"valid\";\nconst isAsync = (x) => typeof Promise !== \"undefined\" && x instanceof Promise;\n\nvar errorUtil;\n(function (errorUtil) {\n errorUtil.errToObj = (message) => typeof message === \"string\" ? { message } : message || {};\n errorUtil.toString = (message) => typeof message === \"string\" ? message : message === null || message === void 0 ? void 0 : message.message;\n})(errorUtil || (errorUtil = {}));\n\nclass ParseInputLazyPath {\n constructor(parent, value, path, key) {\n this._cachedPath = [];\n this.parent = parent;\n this.data = value;\n this._path = path;\n this._key = key;\n }\n get path() {\n if (!this._cachedPath.length) {\n if (this._key instanceof Array) {\n this._cachedPath.push(...this._path, ...this._key);\n }\n else {\n this._cachedPath.push(...this._path, this._key);\n }\n }\n return this._cachedPath;\n }\n}\nconst handleResult = (ctx, result) => {\n if (isValid(result)) {\n return { success: true, data: result.value };\n }\n else {\n if (!ctx.common.issues.length) {\n throw new Error(\"Validation failed but no issues detected.\");\n }\n return {\n success: false,\n get error() {\n if (this._error)\n return this._error;\n const error = new ZodError(ctx.common.issues);\n this._error = error;\n return this._error;\n },\n };\n }\n};\nfunction processCreateParams(params) {\n if (!params)\n return {};\n const { errorMap, invalid_type_error, required_error, description } = params;\n if (errorMap && (invalid_type_error || required_error)) {\n throw new Error(`Can't use \"invalid_type_error\" or \"required_error\" in conjunction with custom error map.`);\n }\n if (errorMap)\n return { errorMap: errorMap, description };\n const customMap = (iss, ctx) => {\n if (iss.code !== \"invalid_type\")\n return { message: ctx.defaultError };\n if (typeof ctx.data === \"undefined\") {\n return { message: required_error !== null && required_error !== void 0 ? required_error : ctx.defaultError };\n }\n return { message: invalid_type_error !== null && invalid_type_error !== void 0 ? invalid_type_error : ctx.defaultError };\n };\n return { errorMap: customMap, description };\n}\nclass ZodType {\n constructor(def) {\n /** Alias of safeParseAsync */\n this.spa = this.safeParseAsync;\n this._def = def;\n this.parse = this.parse.bind(this);\n this.safeParse = this.safeParse.bind(this);\n this.parseAsync = this.parseAsync.bind(this);\n this.safeParseAsync = this.safeParseAsync.bind(this);\n this.spa = this.spa.bind(this);\n this.refine = this.refine.bind(this);\n this.refinement = this.refinement.bind(this);\n this.superRefine = this.superRefine.bind(this);\n this.optional = this.optional.bind(this);\n this.nullable = this.nullable.bind(this);\n this.nullish = this.nullish.bind(this);\n this.array = this.array.bind(this);\n this.promise = this.promise.bind(this);\n this.or = this.or.bind(this);\n this.and = this.and.bind(this);\n this.transform = this.transform.bind(this);\n this.brand = this.brand.bind(this);\n this.default = this.default.bind(this);\n this.catch = this.catch.bind(this);\n this.describe = this.describe.bind(this);\n this.pipe = this.pipe.bind(this);\n this.isNullable = this.isNullable.bind(this);\n this.isOptional = this.isOptional.bind(this);\n }\n get description() {\n return this._def.description;\n }\n _getType(input) {\n return getParsedType(input.data);\n }\n _getOrReturnCtx(input, ctx) {\n return (ctx || {\n common: input.parent.common,\n data: input.data,\n parsedType: getParsedType(input.data),\n schemaErrorMap: this._def.errorMap,\n path: input.path,\n parent: input.parent,\n });\n }\n _processInputParams(input) {\n return {\n status: new ParseStatus(),\n ctx: {\n common: input.parent.common,\n data: input.data,\n parsedType: getParsedType(input.data),\n schemaErrorMap: this._def.errorMap,\n path: input.path,\n parent: input.parent,\n },\n };\n }\n _parseSync(input) {\n const result = this._parse(input);\n if (isAsync(result)) {\n throw new Error(\"Synchronous parse encountered promise.\");\n }\n return result;\n }\n _parseAsync(input) {\n const result = this._parse(input);\n return Promise.resolve(result);\n }\n parse(data, params) {\n const result = this.safeParse(data, params);\n if (result.success)\n return result.data;\n throw result.error;\n }\n safeParse(data, params) {\n var _a;\n const ctx = {\n common: {\n issues: [],\n async: (_a = params === null || params === void 0 ? void 0 : params.async) !== null && _a !== void 0 ? _a : false,\n contextualErrorMap: params === null || params === void 0 ? void 0 : params.errorMap,\n },\n path: (params === null || params === void 0 ? void 0 : params.path) || [],\n schemaErrorMap: this._def.errorMap,\n parent: null,\n data,\n parsedType: getParsedType(data),\n };\n const result = this._parseSync({ data, path: ctx.path, parent: ctx });\n return handleResult(ctx, result);\n }\n async parseAsync(data, params) {\n const result = await this.safeParseAsync(data, params);\n if (result.success)\n return result.data;\n throw result.error;\n }\n async safeParseAsync(data, params) {\n const ctx = {\n common: {\n issues: [],\n contextualErrorMap: params === null || params === void 0 ? void 0 : params.errorMap,\n async: true,\n },\n path: (params === null || params === void 0 ? void 0 : params.path) || [],\n schemaErrorMap: this._def.errorMap,\n parent: null,\n data,\n parsedType: getParsedType(data),\n };\n const maybeAsyncResult = this._parse({ data, path: ctx.path, parent: ctx });\n const result = await (isAsync(maybeAsyncResult)\n ? maybeAsyncResult\n : Promise.resolve(maybeAsyncResult));\n return handleResult(ctx, result);\n }\n refine(check, message) {\n const getIssueProperties = (val) => {\n if (typeof message === \"string\" || typeof message === \"undefined\") {\n return { message };\n }\n else if (typeof message === \"function\") {\n return message(val);\n }\n else {\n return message;\n }\n };\n return this._refinement((val, ctx) => {\n const result = check(val);\n const setError = () => ctx.addIssue({\n code: ZodIssueCode.custom,\n ...getIssueProperties(val),\n });\n if (typeof Promise !== \"undefined\" && result instanceof Promise) {\n return result.then((data) => {\n if (!data) {\n setError();\n return false;\n }\n else {\n return true;\n }\n });\n }\n if (!result) {\n setError();\n return false;\n }\n else {\n return true;\n }\n });\n }\n refinement(check, refinementData) {\n return this._refinement((val, ctx) => {\n if (!check(val)) {\n ctx.addIssue(typeof refinementData === \"function\"\n ? refinementData(val, ctx)\n : refinementData);\n return false;\n }\n else {\n return true;\n }\n });\n }\n _refinement(refinement) {\n return new ZodEffects({\n schema: this,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect: { type: \"refinement\", refinement },\n });\n }\n superRefine(refinement) {\n return this._refinement(refinement);\n }\n optional() {\n return ZodOptional.create(this, this._def);\n }\n nullable() {\n return ZodNullable.create(this, this._def);\n }\n nullish() {\n return this.nullable().optional();\n }\n array() {\n return ZodArray.create(this, this._def);\n }\n promise() {\n return ZodPromise.create(this, this._def);\n }\n or(option) {\n return ZodUnion.create([this, option], this._def);\n }\n and(incoming) {\n return ZodIntersection.create(this, incoming, this._def);\n }\n transform(transform) {\n return new ZodEffects({\n ...processCreateParams(this._def),\n schema: this,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect: { type: \"transform\", transform },\n });\n }\n default(def) {\n const defaultValueFunc = typeof def === \"function\" ? def : () => def;\n return new ZodDefault({\n ...processCreateParams(this._def),\n innerType: this,\n defaultValue: defaultValueFunc,\n typeName: ZodFirstPartyTypeKind.ZodDefault,\n });\n }\n brand() {\n return new ZodBranded({\n typeName: ZodFirstPartyTypeKind.ZodBranded,\n type: this,\n ...processCreateParams(this._def),\n });\n }\n catch(def) {\n const catchValueFunc = typeof def === \"function\" ? def : () => def;\n return new ZodCatch({\n ...processCreateParams(this._def),\n innerType: this,\n catchValue: catchValueFunc,\n typeName: ZodFirstPartyTypeKind.ZodCatch,\n });\n }\n describe(description) {\n const This = this.constructor;\n return new This({\n ...this._def,\n description,\n });\n }\n pipe(target) {\n return ZodPipeline.create(this, target);\n }\n isOptional() {\n return this.safeParse(undefined).success;\n }\n isNullable() {\n return this.safeParse(null).success;\n }\n}\nconst cuidRegex = /^c[^\\s-]{8,}$/i;\nconst cuid2Regex = /^[a-z][a-z0-9]*$/;\nconst ulidRegex = /[0-9A-HJKMNP-TV-Z]{26}/;\nconst uuidRegex = /^([a-f0-9]{8}-[a-f0-9]{4}-[1-5][a-f0-9]{3}-[a-f0-9]{4}-[a-f0-9]{12}|00000000-0000-0000-0000-000000000000)$/i;\n// from https://stackoverflow.com/a/46181/1550155\n// old version: too slow, didn't support unicode\n// const emailRegex = /^((([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+(\\.([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*)|((\\x22)((((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(([\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]|\\x21|[\\x23-\\x5b]|[\\x5d-\\x7e]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(\\\\([\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]))))*(((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(\\x22)))@((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))$/i;\n//old email regex\n// const emailRegex = /^(([^<>()[\\].,;:\\s@\"]+(\\.[^<>()[\\].,;:\\s@\"]+)*)|(\".+\"))@((?!-)([^<>()[\\].,;:\\s@\"]+\\.)+[^<>()[\\].,;:\\s@\"]{1,})[^-<>()[\\].,;:\\s@\"]$/i;\n// eslint-disable-next-line\nconst emailRegex = /^(([^<>()[\\]\\\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@((\\[(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\])|(\\[IPv6:(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))\\])|([A-Za-z0-9]([A-Za-z0-9-]*[A-Za-z0-9])*(\\.[A-Za-z]{2,})+))$/;\n// from https://thekevinscott.com/emojis-in-javascript/#writing-a-regular-expression\nconst emojiRegex = /^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$/u;\nconst ipv4Regex = /^(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))$/;\nconst ipv6Regex = /^(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))$/;\n// Adapted from https://stackoverflow.com/a/3143231\nconst datetimeRegex = (args) => {\n if (args.precision) {\n if (args.offset) {\n return new RegExp(`^\\\\d{4}-\\\\d{2}-\\\\d{2}T\\\\d{2}:\\\\d{2}:\\\\d{2}\\\\.\\\\d{${args.precision}}(([+-]\\\\d{2}(:?\\\\d{2})?)|Z)$`);\n }\n else {\n return new RegExp(`^\\\\d{4}-\\\\d{2}-\\\\d{2}T\\\\d{2}:\\\\d{2}:\\\\d{2}\\\\.\\\\d{${args.precision}}Z$`);\n }\n }\n else if (args.precision === 0) {\n if (args.offset) {\n return new RegExp(`^\\\\d{4}-\\\\d{2}-\\\\d{2}T\\\\d{2}:\\\\d{2}:\\\\d{2}(([+-]\\\\d{2}(:?\\\\d{2})?)|Z)$`);\n }\n else {\n return new RegExp(`^\\\\d{4}-\\\\d{2}-\\\\d{2}T\\\\d{2}:\\\\d{2}:\\\\d{2}Z$`);\n }\n }\n else {\n if (args.offset) {\n return new RegExp(`^\\\\d{4}-\\\\d{2}-\\\\d{2}T\\\\d{2}:\\\\d{2}:\\\\d{2}(\\\\.\\\\d+)?(([+-]\\\\d{2}(:?\\\\d{2})?)|Z)$`);\n }\n else {\n return new RegExp(`^\\\\d{4}-\\\\d{2}-\\\\d{2}T\\\\d{2}:\\\\d{2}:\\\\d{2}(\\\\.\\\\d+)?Z$`);\n }\n }\n};\nfunction isValidIP(ip, version) {\n if ((version === \"v4\" || !version) && ipv4Regex.test(ip)) {\n return true;\n }\n if ((version === \"v6\" || !version) && ipv6Regex.test(ip)) {\n return true;\n }\n return false;\n}\nclass ZodString extends ZodType {\n constructor() {\n super(...arguments);\n this._regex = (regex, validation, message) => this.refinement((data) => regex.test(data), {\n validation,\n code: ZodIssueCode.invalid_string,\n ...errorUtil.errToObj(message),\n });\n /**\n * @deprecated Use z.string().min(1) instead.\n * @see {@link ZodString.min}\n */\n this.nonempty = (message) => this.min(1, errorUtil.errToObj(message));\n this.trim = () => new ZodString({\n ...this._def,\n checks: [...this._def.checks, { kind: \"trim\" }],\n });\n this.toLowerCase = () => new ZodString({\n ...this._def,\n checks: [...this._def.checks, { kind: \"toLowerCase\" }],\n });\n this.toUpperCase = () => new ZodString({\n ...this._def,\n checks: [...this._def.checks, { kind: \"toUpperCase\" }],\n });\n }\n _parse(input) {\n if (this._def.coerce) {\n input.data = String(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.string) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.string,\n received: ctx.parsedType,\n }\n //\n );\n return INVALID;\n }\n const status = new ParseStatus();\n let ctx = undefined;\n for (const check of this._def.checks) {\n if (check.kind === \"min\") {\n if (input.data.length < check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: check.value,\n type: \"string\",\n inclusive: true,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n if (input.data.length > check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: check.value,\n type: \"string\",\n inclusive: true,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"length\") {\n const tooBig = input.data.length > check.value;\n const tooSmall = input.data.length < check.value;\n if (tooBig || tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n if (tooBig) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: check.value,\n type: \"string\",\n inclusive: true,\n exact: true,\n message: check.message,\n });\n }\n else if (tooSmall) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: check.value,\n type: \"string\",\n inclusive: true,\n exact: true,\n message: check.message,\n });\n }\n status.dirty();\n }\n }\n else if (check.kind === \"email\") {\n if (!emailRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"email\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"emoji\") {\n if (!emojiRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"emoji\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"uuid\") {\n if (!uuidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"uuid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"cuid\") {\n if (!cuidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"cuid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"cuid2\") {\n if (!cuid2Regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"cuid2\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"ulid\") {\n if (!ulidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"ulid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"url\") {\n try {\n new URL(input.data);\n }\n catch (_a) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"url\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"regex\") {\n check.regex.lastIndex = 0;\n const testResult = check.regex.test(input.data);\n if (!testResult) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"regex\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"trim\") {\n input.data = input.data.trim();\n }\n else if (check.kind === \"includes\") {\n if (!input.data.includes(check.value, check.position)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: { includes: check.value, position: check.position },\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"toLowerCase\") {\n input.data = input.data.toLowerCase();\n }\n else if (check.kind === \"toUpperCase\") {\n input.data = input.data.toUpperCase();\n }\n else if (check.kind === \"startsWith\") {\n if (!input.data.startsWith(check.value)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: { startsWith: check.value },\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"endsWith\") {\n if (!input.data.endsWith(check.value)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: { endsWith: check.value },\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"datetime\") {\n const regex = datetimeRegex(check);\n if (!regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: \"datetime\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"ip\") {\n if (!isValidIP(input.data, check.version)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"ip\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return { status: status.value, value: input.data };\n }\n _addCheck(check) {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n email(message) {\n return this._addCheck({ kind: \"email\", ...errorUtil.errToObj(message) });\n }\n url(message) {\n return this._addCheck({ kind: \"url\", ...errorUtil.errToObj(message) });\n }\n emoji(message) {\n return this._addCheck({ kind: \"emoji\", ...errorUtil.errToObj(message) });\n }\n uuid(message) {\n return this._addCheck({ kind: \"uuid\", ...errorUtil.errToObj(message) });\n }\n cuid(message) {\n return this._addCheck({ kind: \"cuid\", ...errorUtil.errToObj(message) });\n }\n cuid2(message) {\n return this._addCheck({ kind: \"cuid2\", ...errorUtil.errToObj(message) });\n }\n ulid(message) {\n return this._addCheck({ kind: \"ulid\", ...errorUtil.errToObj(message) });\n }\n ip(options) {\n return this._addCheck({ kind: \"ip\", ...errorUtil.errToObj(options) });\n }\n datetime(options) {\n var _a;\n if (typeof options === \"string\") {\n return this._addCheck({\n kind: \"datetime\",\n precision: null,\n offset: false,\n message: options,\n });\n }\n return this._addCheck({\n kind: \"datetime\",\n precision: typeof (options === null || options === void 0 ? void 0 : options.precision) === \"undefined\" ? null : options === null || options === void 0 ? void 0 : options.precision,\n offset: (_a = options === null || options === void 0 ? void 0 : options.offset) !== null && _a !== void 0 ? _a : false,\n ...errorUtil.errToObj(options === null || options === void 0 ? void 0 : options.message),\n });\n }\n regex(regex, message) {\n return this._addCheck({\n kind: \"regex\",\n regex: regex,\n ...errorUtil.errToObj(message),\n });\n }\n includes(value, options) {\n return this._addCheck({\n kind: \"includes\",\n value: value,\n position: options === null || options === void 0 ? void 0 : options.position,\n ...errorUtil.errToObj(options === null || options === void 0 ? void 0 : options.message),\n });\n }\n startsWith(value, message) {\n return this._addCheck({\n kind: \"startsWith\",\n value: value,\n ...errorUtil.errToObj(message),\n });\n }\n endsWith(value, message) {\n return this._addCheck({\n kind: \"endsWith\",\n value: value,\n ...errorUtil.errToObj(message),\n });\n }\n min(minLength, message) {\n return this._addCheck({\n kind: \"min\",\n value: minLength,\n ...errorUtil.errToObj(message),\n });\n }\n max(maxLength, message) {\n return this._addCheck({\n kind: \"max\",\n value: maxLength,\n ...errorUtil.errToObj(message),\n });\n }\n length(len, message) {\n return this._addCheck({\n kind: \"length\",\n value: len,\n ...errorUtil.errToObj(message),\n });\n }\n get isDatetime() {\n return !!this._def.checks.find((ch) => ch.kind === \"datetime\");\n }\n get isEmail() {\n return !!this._def.checks.find((ch) => ch.kind === \"email\");\n }\n get isURL() {\n return !!this._def.checks.find((ch) => ch.kind === \"url\");\n }\n get isEmoji() {\n return !!this._def.checks.find((ch) => ch.kind === \"emoji\");\n }\n get isUUID() {\n return !!this._def.checks.find((ch) => ch.kind === \"uuid\");\n }\n get isCUID() {\n return !!this._def.checks.find((ch) => ch.kind === \"cuid\");\n }\n get isCUID2() {\n return !!this._def.checks.find((ch) => ch.kind === \"cuid2\");\n }\n get isULID() {\n return !!this._def.checks.find((ch) => ch.kind === \"ulid\");\n }\n get isIP() {\n return !!this._def.checks.find((ch) => ch.kind === \"ip\");\n }\n get minLength() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min;\n }\n get maxLength() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max;\n }\n}\nZodString.create = (params) => {\n var _a;\n return new ZodString({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodString,\n coerce: (_a = params === null || params === void 0 ? void 0 : params.coerce) !== null && _a !== void 0 ? _a : false,\n ...processCreateParams(params),\n });\n};\n// https://stackoverflow.com/questions/3966484/why-does-modulus-operator-return-fractional-number-in-javascript/31711034#31711034\nfunction floatSafeRemainder(val, step) {\n const valDecCount = (val.toString().split(\".\")[1] || \"\").length;\n const stepDecCount = (step.toString().split(\".\")[1] || \"\").length;\n const decCount = valDecCount > stepDecCount ? valDecCount : stepDecCount;\n const valInt = parseInt(val.toFixed(decCount).replace(\".\", \"\"));\n const stepInt = parseInt(step.toFixed(decCount).replace(\".\", \"\"));\n return (valInt % stepInt) / Math.pow(10, decCount);\n}\nclass ZodNumber extends ZodType {\n constructor() {\n super(...arguments);\n this.min = this.gte;\n this.max = this.lte;\n this.step = this.multipleOf;\n }\n _parse(input) {\n if (this._def.coerce) {\n input.data = Number(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.number) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.number,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n let ctx = undefined;\n const status = new ParseStatus();\n for (const check of this._def.checks) {\n if (check.kind === \"int\") {\n if (!util.isInteger(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: \"integer\",\n received: \"float\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"min\") {\n const tooSmall = check.inclusive\n ? input.data < check.value\n : input.data <= check.value;\n if (tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: check.value,\n type: \"number\",\n inclusive: check.inclusive,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n const tooBig = check.inclusive\n ? input.data > check.value\n : input.data >= check.value;\n if (tooBig) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: check.value,\n type: \"number\",\n inclusive: check.inclusive,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"multipleOf\") {\n if (floatSafeRemainder(input.data, check.value) !== 0) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.not_multiple_of,\n multipleOf: check.value,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"finite\") {\n if (!Number.isFinite(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.not_finite,\n message: check.message,\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return { status: status.value, value: input.data };\n }\n gte(value, message) {\n return this.setLimit(\"min\", value, true, errorUtil.toString(message));\n }\n gt(value, message) {\n return this.setLimit(\"min\", value, false, errorUtil.toString(message));\n }\n lte(value, message) {\n return this.setLimit(\"max\", value, true, errorUtil.toString(message));\n }\n lt(value, message) {\n return this.setLimit(\"max\", value, false, errorUtil.toString(message));\n }\n setLimit(kind, value, inclusive, message) {\n return new ZodNumber({\n ...this._def,\n checks: [\n ...this._def.checks,\n {\n kind,\n value,\n inclusive,\n message: errorUtil.toString(message),\n },\n ],\n });\n }\n _addCheck(check) {\n return new ZodNumber({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n int(message) {\n return this._addCheck({\n kind: \"int\",\n message: errorUtil.toString(message),\n });\n }\n positive(message) {\n return this._addCheck({\n kind: \"min\",\n value: 0,\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n negative(message) {\n return this._addCheck({\n kind: \"max\",\n value: 0,\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n nonpositive(message) {\n return this._addCheck({\n kind: \"max\",\n value: 0,\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n nonnegative(message) {\n return this._addCheck({\n kind: \"min\",\n value: 0,\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n multipleOf(value, message) {\n return this._addCheck({\n kind: \"multipleOf\",\n value: value,\n message: errorUtil.toString(message),\n });\n }\n finite(message) {\n return this._addCheck({\n kind: \"finite\",\n message: errorUtil.toString(message),\n });\n }\n safe(message) {\n return this._addCheck({\n kind: \"min\",\n inclusive: true,\n value: Number.MIN_SAFE_INTEGER,\n message: errorUtil.toString(message),\n })._addCheck({\n kind: \"max\",\n inclusive: true,\n value: Number.MAX_SAFE_INTEGER,\n message: errorUtil.toString(message),\n });\n }\n get minValue() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min;\n }\n get maxValue() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max;\n }\n get isInt() {\n return !!this._def.checks.find((ch) => ch.kind === \"int\" ||\n (ch.kind === \"multipleOf\" && util.isInteger(ch.value)));\n }\n get isFinite() {\n let max = null, min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"finite\" ||\n ch.kind === \"int\" ||\n ch.kind === \"multipleOf\") {\n return true;\n }\n else if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n else if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return Number.isFinite(min) && Number.isFinite(max);\n }\n}\nZodNumber.create = (params) => {\n return new ZodNumber({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodNumber,\n coerce: (params === null || params === void 0 ? void 0 : params.coerce) || false,\n ...processCreateParams(params),\n });\n};\nclass ZodBigInt extends ZodType {\n constructor() {\n super(...arguments);\n this.min = this.gte;\n this.max = this.lte;\n }\n _parse(input) {\n if (this._def.coerce) {\n input.data = BigInt(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.bigint) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.bigint,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n let ctx = undefined;\n const status = new ParseStatus();\n for (const check of this._def.checks) {\n if (check.kind === \"min\") {\n const tooSmall = check.inclusive\n ? input.data < check.value\n : input.data <= check.value;\n if (tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n type: \"bigint\",\n minimum: check.value,\n inclusive: check.inclusive,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n const tooBig = check.inclusive\n ? input.data > check.value\n : input.data >= check.value;\n if (tooBig) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n type: \"bigint\",\n maximum: check.value,\n inclusive: check.inclusive,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"multipleOf\") {\n if (input.data % check.value !== BigInt(0)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.not_multiple_of,\n multipleOf: check.value,\n message: check.message,\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return { status: status.value, value: input.data };\n }\n gte(value, message) {\n return this.setLimit(\"min\", value, true, errorUtil.toString(message));\n }\n gt(value, message) {\n return this.setLimit(\"min\", value, false, errorUtil.toString(message));\n }\n lte(value, message) {\n return this.setLimit(\"max\", value, true, errorUtil.toString(message));\n }\n lt(value, message) {\n return this.setLimit(\"max\", value, false, errorUtil.toString(message));\n }\n setLimit(kind, value, inclusive, message) {\n return new ZodBigInt({\n ...this._def,\n checks: [\n ...this._def.checks,\n {\n kind,\n value,\n inclusive,\n message: errorUtil.toString(message),\n },\n ],\n });\n }\n _addCheck(check) {\n return new ZodBigInt({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n positive(message) {\n return this._addCheck({\n kind: \"min\",\n value: BigInt(0),\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n negative(message) {\n return this._addCheck({\n kind: \"max\",\n value: BigInt(0),\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n nonpositive(message) {\n return this._addCheck({\n kind: \"max\",\n value: BigInt(0),\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n nonnegative(message) {\n return this._addCheck({\n kind: \"min\",\n value: BigInt(0),\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n multipleOf(value, message) {\n return this._addCheck({\n kind: \"multipleOf\",\n value,\n message: errorUtil.toString(message),\n });\n }\n get minValue() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min;\n }\n get maxValue() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max;\n }\n}\nZodBigInt.create = (params) => {\n var _a;\n return new ZodBigInt({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodBigInt,\n coerce: (_a = params === null || params === void 0 ? void 0 : params.coerce) !== null && _a !== void 0 ? _a : false,\n ...processCreateParams(params),\n });\n};\nclass ZodBoolean extends ZodType {\n _parse(input) {\n if (this._def.coerce) {\n input.data = Boolean(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.boolean) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.boolean,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodBoolean.create = (params) => {\n return new ZodBoolean({\n typeName: ZodFirstPartyTypeKind.ZodBoolean,\n coerce: (params === null || params === void 0 ? void 0 : params.coerce) || false,\n ...processCreateParams(params),\n });\n};\nclass ZodDate extends ZodType {\n _parse(input) {\n if (this._def.coerce) {\n input.data = new Date(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.date) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.date,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n if (isNaN(input.data.getTime())) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_date,\n });\n return INVALID;\n }\n const status = new ParseStatus();\n let ctx = undefined;\n for (const check of this._def.checks) {\n if (check.kind === \"min\") {\n if (input.data.getTime() < check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n message: check.message,\n inclusive: true,\n exact: false,\n minimum: check.value,\n type: \"date\",\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n if (input.data.getTime() > check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n message: check.message,\n inclusive: true,\n exact: false,\n maximum: check.value,\n type: \"date\",\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return {\n status: status.value,\n value: new Date(input.data.getTime()),\n };\n }\n _addCheck(check) {\n return new ZodDate({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n min(minDate, message) {\n return this._addCheck({\n kind: \"min\",\n value: minDate.getTime(),\n message: errorUtil.toString(message),\n });\n }\n max(maxDate, message) {\n return this._addCheck({\n kind: \"max\",\n value: maxDate.getTime(),\n message: errorUtil.toString(message),\n });\n }\n get minDate() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min != null ? new Date(min) : null;\n }\n get maxDate() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max != null ? new Date(max) : null;\n }\n}\nZodDate.create = (params) => {\n return new ZodDate({\n checks: [],\n coerce: (params === null || params === void 0 ? void 0 : params.coerce) || false,\n typeName: ZodFirstPartyTypeKind.ZodDate,\n ...processCreateParams(params),\n });\n};\nclass ZodSymbol extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.symbol) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.symbol,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodSymbol.create = (params) => {\n return new ZodSymbol({\n typeName: ZodFirstPartyTypeKind.ZodSymbol,\n ...processCreateParams(params),\n });\n};\nclass ZodUndefined extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.undefined) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.undefined,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodUndefined.create = (params) => {\n return new ZodUndefined({\n typeName: ZodFirstPartyTypeKind.ZodUndefined,\n ...processCreateParams(params),\n });\n};\nclass ZodNull extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.null) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.null,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodNull.create = (params) => {\n return new ZodNull({\n typeName: ZodFirstPartyTypeKind.ZodNull,\n ...processCreateParams(params),\n });\n};\nclass ZodAny extends ZodType {\n constructor() {\n super(...arguments);\n // to prevent instances of other classes from extending ZodAny. this causes issues with catchall in ZodObject.\n this._any = true;\n }\n _parse(input) {\n return OK(input.data);\n }\n}\nZodAny.create = (params) => {\n return new ZodAny({\n typeName: ZodFirstPartyTypeKind.ZodAny,\n ...processCreateParams(params),\n });\n};\nclass ZodUnknown extends ZodType {\n constructor() {\n super(...arguments);\n // required\n this._unknown = true;\n }\n _parse(input) {\n return OK(input.data);\n }\n}\nZodUnknown.create = (params) => {\n return new ZodUnknown({\n typeName: ZodFirstPartyTypeKind.ZodUnknown,\n ...processCreateParams(params),\n });\n};\nclass ZodNever extends ZodType {\n _parse(input) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.never,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n}\nZodNever.create = (params) => {\n return new ZodNever({\n typeName: ZodFirstPartyTypeKind.ZodNever,\n ...processCreateParams(params),\n });\n};\nclass ZodVoid extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.undefined) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.void,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodVoid.create = (params) => {\n return new ZodVoid({\n typeName: ZodFirstPartyTypeKind.ZodVoid,\n ...processCreateParams(params),\n });\n};\nclass ZodArray extends ZodType {\n _parse(input) {\n const { ctx, status } = this._processInputParams(input);\n const def = this._def;\n if (ctx.parsedType !== ZodParsedType.array) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.array,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n if (def.exactLength !== null) {\n const tooBig = ctx.data.length > def.exactLength.value;\n const tooSmall = ctx.data.length < def.exactLength.value;\n if (tooBig || tooSmall) {\n addIssueToContext(ctx, {\n code: tooBig ? ZodIssueCode.too_big : ZodIssueCode.too_small,\n minimum: (tooSmall ? def.exactLength.value : undefined),\n maximum: (tooBig ? def.exactLength.value : undefined),\n type: \"array\",\n inclusive: true,\n exact: true,\n message: def.exactLength.message,\n });\n status.dirty();\n }\n }\n if (def.minLength !== null) {\n if (ctx.data.length < def.minLength.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: def.minLength.value,\n type: \"array\",\n inclusive: true,\n exact: false,\n message: def.minLength.message,\n });\n status.dirty();\n }\n }\n if (def.maxLength !== null) {\n if (ctx.data.length > def.maxLength.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: def.maxLength.value,\n type: \"array\",\n inclusive: true,\n exact: false,\n message: def.maxLength.message,\n });\n status.dirty();\n }\n }\n if (ctx.common.async) {\n return Promise.all([...ctx.data].map((item, i) => {\n return def.type._parseAsync(new ParseInputLazyPath(ctx, item, ctx.path, i));\n })).then((result) => {\n return ParseStatus.mergeArray(status, result);\n });\n }\n const result = [...ctx.data].map((item, i) => {\n return def.type._parseSync(new ParseInputLazyPath(ctx, item, ctx.path, i));\n });\n return ParseStatus.mergeArray(status, result);\n }\n get element() {\n return this._def.type;\n }\n min(minLength, message) {\n return new ZodArray({\n ...this._def,\n minLength: { value: minLength, message: errorUtil.toString(message) },\n });\n }\n max(maxLength, message) {\n return new ZodArray({\n ...this._def,\n maxLength: { value: maxLength, message: errorUtil.toString(message) },\n });\n }\n length(len, message) {\n return new ZodArray({\n ...this._def,\n exactLength: { value: len, message: errorUtil.toString(message) },\n });\n }\n nonempty(message) {\n return this.min(1, message);\n }\n}\nZodArray.create = (schema, params) => {\n return new ZodArray({\n type: schema,\n minLength: null,\n maxLength: null,\n exactLength: null,\n typeName: ZodFirstPartyTypeKind.ZodArray,\n ...processCreateParams(params),\n });\n};\nfunction deepPartialify(schema) {\n if (schema instanceof ZodObject) {\n const newShape = {};\n for (const key in schema.shape) {\n const fieldSchema = schema.shape[key];\n newShape[key] = ZodOptional.create(deepPartialify(fieldSchema));\n }\n return new ZodObject({\n ...schema._def,\n shape: () => newShape,\n });\n }\n else if (schema instanceof ZodArray) {\n return new ZodArray({\n ...schema._def,\n type: deepPartialify(schema.element),\n });\n }\n else if (schema instanceof ZodOptional) {\n return ZodOptional.create(deepPartialify(schema.unwrap()));\n }\n else if (schema instanceof ZodNullable) {\n return ZodNullable.create(deepPartialify(schema.unwrap()));\n }\n else if (schema instanceof ZodTuple) {\n return ZodTuple.create(schema.items.map((item) => deepPartialify(item)));\n }\n else {\n return schema;\n }\n}\nclass ZodObject extends ZodType {\n constructor() {\n super(...arguments);\n this._cached = null;\n /**\n * @deprecated In most cases, this is no longer needed - unknown properties are now silently stripped.\n * If you want to pass through unknown properties, use `.passthrough()` instead.\n */\n this.nonstrict = this.passthrough;\n // extend<\n // Augmentation extends ZodRawShape,\n // NewOutput extends util.flatten<{\n // [k in keyof Augmentation | keyof Output]: k extends keyof Augmentation\n // ? Augmentation[k][\"_output\"]\n // : k extends keyof Output\n // ? Output[k]\n // : never;\n // }>,\n // NewInput extends util.flatten<{\n // [k in keyof Augmentation | keyof Input]: k extends keyof Augmentation\n // ? Augmentation[k][\"_input\"]\n // : k extends keyof Input\n // ? Input[k]\n // : never;\n // }>\n // >(\n // augmentation: Augmentation\n // ): ZodObject<\n // extendShape,\n // UnknownKeys,\n // Catchall,\n // NewOutput,\n // NewInput\n // > {\n // return new ZodObject({\n // ...this._def,\n // shape: () => ({\n // ...this._def.shape(),\n // ...augmentation,\n // }),\n // }) as any;\n // }\n /**\n * @deprecated Use `.extend` instead\n * */\n this.augment = this.extend;\n }\n _getCached() {\n if (this._cached !== null)\n return this._cached;\n const shape = this._def.shape();\n const keys = util.objectKeys(shape);\n return (this._cached = { shape, keys });\n }\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.object) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.object,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const { status, ctx } = this._processInputParams(input);\n const { shape, keys: shapeKeys } = this._getCached();\n const extraKeys = [];\n if (!(this._def.catchall instanceof ZodNever &&\n this._def.unknownKeys === \"strip\")) {\n for (const key in ctx.data) {\n if (!shapeKeys.includes(key)) {\n extraKeys.push(key);\n }\n }\n }\n const pairs = [];\n for (const key of shapeKeys) {\n const keyValidator = shape[key];\n const value = ctx.data[key];\n pairs.push({\n key: { status: \"valid\", value: key },\n value: keyValidator._parse(new ParseInputLazyPath(ctx, value, ctx.path, key)),\n alwaysSet: key in ctx.data,\n });\n }\n if (this._def.catchall instanceof ZodNever) {\n const unknownKeys = this._def.unknownKeys;\n if (unknownKeys === \"passthrough\") {\n for (const key of extraKeys) {\n pairs.push({\n key: { status: \"valid\", value: key },\n value: { status: \"valid\", value: ctx.data[key] },\n });\n }\n }\n else if (unknownKeys === \"strict\") {\n if (extraKeys.length > 0) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.unrecognized_keys,\n keys: extraKeys,\n });\n status.dirty();\n }\n }\n else if (unknownKeys === \"strip\") ;\n else {\n throw new Error(`Internal ZodObject error: invalid unknownKeys value.`);\n }\n }\n else {\n // run catchall validation\n const catchall = this._def.catchall;\n for (const key of extraKeys) {\n const value = ctx.data[key];\n pairs.push({\n key: { status: \"valid\", value: key },\n value: catchall._parse(new ParseInputLazyPath(ctx, value, ctx.path, key) //, ctx.child(key), value, getParsedType(value)\n ),\n alwaysSet: key in ctx.data,\n });\n }\n }\n if (ctx.common.async) {\n return Promise.resolve()\n .then(async () => {\n const syncPairs = [];\n for (const pair of pairs) {\n const key = await pair.key;\n syncPairs.push({\n key,\n value: await pair.value,\n alwaysSet: pair.alwaysSet,\n });\n }\n return syncPairs;\n })\n .then((syncPairs) => {\n return ParseStatus.mergeObjectSync(status, syncPairs);\n });\n }\n else {\n return ParseStatus.mergeObjectSync(status, pairs);\n }\n }\n get shape() {\n return this._def.shape();\n }\n strict(message) {\n errorUtil.errToObj;\n return new ZodObject({\n ...this._def,\n unknownKeys: \"strict\",\n ...(message !== undefined\n ? {\n errorMap: (issue, ctx) => {\n var _a, _b, _c, _d;\n const defaultError = (_c = (_b = (_a = this._def).errorMap) === null || _b === void 0 ? void 0 : _b.call(_a, issue, ctx).message) !== null && _c !== void 0 ? _c : ctx.defaultError;\n if (issue.code === \"unrecognized_keys\")\n return {\n message: (_d = errorUtil.errToObj(message).message) !== null && _d !== void 0 ? _d : defaultError,\n };\n return {\n message: defaultError,\n };\n },\n }\n : {}),\n });\n }\n strip() {\n return new ZodObject({\n ...this._def,\n unknownKeys: \"strip\",\n });\n }\n passthrough() {\n return new ZodObject({\n ...this._def,\n unknownKeys: \"passthrough\",\n });\n }\n // const AugmentFactory =\n // (def: Def) =>\n // (\n // augmentation: Augmentation\n // ): ZodObject<\n // extendShape, Augmentation>,\n // Def[\"unknownKeys\"],\n // Def[\"catchall\"]\n // > => {\n // return new ZodObject({\n // ...def,\n // shape: () => ({\n // ...def.shape(),\n // ...augmentation,\n // }),\n // }) as any;\n // };\n extend(augmentation) {\n return new ZodObject({\n ...this._def,\n shape: () => ({\n ...this._def.shape(),\n ...augmentation,\n }),\n });\n }\n /**\n * Prior to zod@1.0.12 there was a bug in the\n * inferred type of merged objects. Please\n * upgrade if you are experiencing issues.\n */\n merge(merging) {\n const merged = new ZodObject({\n unknownKeys: merging._def.unknownKeys,\n catchall: merging._def.catchall,\n shape: () => ({\n ...this._def.shape(),\n ...merging._def.shape(),\n }),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n });\n return merged;\n }\n // merge<\n // Incoming extends AnyZodObject,\n // Augmentation extends Incoming[\"shape\"],\n // NewOutput extends {\n // [k in keyof Augmentation | keyof Output]: k extends keyof Augmentation\n // ? Augmentation[k][\"_output\"]\n // : k extends keyof Output\n // ? Output[k]\n // : never;\n // },\n // NewInput extends {\n // [k in keyof Augmentation | keyof Input]: k extends keyof Augmentation\n // ? Augmentation[k][\"_input\"]\n // : k extends keyof Input\n // ? Input[k]\n // : never;\n // }\n // >(\n // merging: Incoming\n // ): ZodObject<\n // extendShape>,\n // Incoming[\"_def\"][\"unknownKeys\"],\n // Incoming[\"_def\"][\"catchall\"],\n // NewOutput,\n // NewInput\n // > {\n // const merged: any = new ZodObject({\n // unknownKeys: merging._def.unknownKeys,\n // catchall: merging._def.catchall,\n // shape: () =>\n // objectUtil.mergeShapes(this._def.shape(), merging._def.shape()),\n // typeName: ZodFirstPartyTypeKind.ZodObject,\n // }) as any;\n // return merged;\n // }\n setKey(key, schema) {\n return this.augment({ [key]: schema });\n }\n // merge(\n // merging: Incoming\n // ): //ZodObject = (merging) => {\n // ZodObject<\n // extendShape>,\n // Incoming[\"_def\"][\"unknownKeys\"],\n // Incoming[\"_def\"][\"catchall\"]\n // > {\n // // const mergedShape = objectUtil.mergeShapes(\n // // this._def.shape(),\n // // merging._def.shape()\n // // );\n // const merged: any = new ZodObject({\n // unknownKeys: merging._def.unknownKeys,\n // catchall: merging._def.catchall,\n // shape: () =>\n // objectUtil.mergeShapes(this._def.shape(), merging._def.shape()),\n // typeName: ZodFirstPartyTypeKind.ZodObject,\n // }) as any;\n // return merged;\n // }\n catchall(index) {\n return new ZodObject({\n ...this._def,\n catchall: index,\n });\n }\n pick(mask) {\n const shape = {};\n util.objectKeys(mask).forEach((key) => {\n if (mask[key] && this.shape[key]) {\n shape[key] = this.shape[key];\n }\n });\n return new ZodObject({\n ...this._def,\n shape: () => shape,\n });\n }\n omit(mask) {\n const shape = {};\n util.objectKeys(this.shape).forEach((key) => {\n if (!mask[key]) {\n shape[key] = this.shape[key];\n }\n });\n return new ZodObject({\n ...this._def,\n shape: () => shape,\n });\n }\n /**\n * @deprecated\n */\n deepPartial() {\n return deepPartialify(this);\n }\n partial(mask) {\n const newShape = {};\n util.objectKeys(this.shape).forEach((key) => {\n const fieldSchema = this.shape[key];\n if (mask && !mask[key]) {\n newShape[key] = fieldSchema;\n }\n else {\n newShape[key] = fieldSchema.optional();\n }\n });\n return new ZodObject({\n ...this._def,\n shape: () => newShape,\n });\n }\n required(mask) {\n const newShape = {};\n util.objectKeys(this.shape).forEach((key) => {\n if (mask && !mask[key]) {\n newShape[key] = this.shape[key];\n }\n else {\n const fieldSchema = this.shape[key];\n let newField = fieldSchema;\n while (newField instanceof ZodOptional) {\n newField = newField._def.innerType;\n }\n newShape[key] = newField;\n }\n });\n return new ZodObject({\n ...this._def,\n shape: () => newShape,\n });\n }\n keyof() {\n return createZodEnum(util.objectKeys(this.shape));\n }\n}\nZodObject.create = (shape, params) => {\n return new ZodObject({\n shape: () => shape,\n unknownKeys: \"strip\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params),\n });\n};\nZodObject.strictCreate = (shape, params) => {\n return new ZodObject({\n shape: () => shape,\n unknownKeys: \"strict\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params),\n });\n};\nZodObject.lazycreate = (shape, params) => {\n return new ZodObject({\n shape,\n unknownKeys: \"strip\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params),\n });\n};\nclass ZodUnion extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const options = this._def.options;\n function handleResults(results) {\n // return first issue-free validation if it exists\n for (const result of results) {\n if (result.result.status === \"valid\") {\n return result.result;\n }\n }\n for (const result of results) {\n if (result.result.status === \"dirty\") {\n // add issues from dirty option\n ctx.common.issues.push(...result.ctx.common.issues);\n return result.result;\n }\n }\n // return invalid\n const unionErrors = results.map((result) => new ZodError(result.ctx.common.issues));\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_union,\n unionErrors,\n });\n return INVALID;\n }\n if (ctx.common.async) {\n return Promise.all(options.map(async (option) => {\n const childCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: [],\n },\n parent: null,\n };\n return {\n result: await option._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: childCtx,\n }),\n ctx: childCtx,\n };\n })).then(handleResults);\n }\n else {\n let dirty = undefined;\n const issues = [];\n for (const option of options) {\n const childCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: [],\n },\n parent: null,\n };\n const result = option._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: childCtx,\n });\n if (result.status === \"valid\") {\n return result;\n }\n else if (result.status === \"dirty\" && !dirty) {\n dirty = { result, ctx: childCtx };\n }\n if (childCtx.common.issues.length) {\n issues.push(childCtx.common.issues);\n }\n }\n if (dirty) {\n ctx.common.issues.push(...dirty.ctx.common.issues);\n return dirty.result;\n }\n const unionErrors = issues.map((issues) => new ZodError(issues));\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_union,\n unionErrors,\n });\n return INVALID;\n }\n }\n get options() {\n return this._def.options;\n }\n}\nZodUnion.create = (types, params) => {\n return new ZodUnion({\n options: types,\n typeName: ZodFirstPartyTypeKind.ZodUnion,\n ...processCreateParams(params),\n });\n};\n/////////////////////////////////////////////////////\n/////////////////////////////////////////////////////\n////////// //////////\n////////// ZodDiscriminatedUnion //////////\n////////// //////////\n/////////////////////////////////////////////////////\n/////////////////////////////////////////////////////\nconst getDiscriminator = (type) => {\n if (type instanceof ZodLazy) {\n return getDiscriminator(type.schema);\n }\n else if (type instanceof ZodEffects) {\n return getDiscriminator(type.innerType());\n }\n else if (type instanceof ZodLiteral) {\n return [type.value];\n }\n else if (type instanceof ZodEnum) {\n return type.options;\n }\n else if (type instanceof ZodNativeEnum) {\n // eslint-disable-next-line ban/ban\n return Object.keys(type.enum);\n }\n else if (type instanceof ZodDefault) {\n return getDiscriminator(type._def.innerType);\n }\n else if (type instanceof ZodUndefined) {\n return [undefined];\n }\n else if (type instanceof ZodNull) {\n return [null];\n }\n else {\n return null;\n }\n};\nclass ZodDiscriminatedUnion extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.object) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.object,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const discriminator = this.discriminator;\n const discriminatorValue = ctx.data[discriminator];\n const option = this.optionsMap.get(discriminatorValue);\n if (!option) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_union_discriminator,\n options: Array.from(this.optionsMap.keys()),\n path: [discriminator],\n });\n return INVALID;\n }\n if (ctx.common.async) {\n return option._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n }\n else {\n return option._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n }\n }\n get discriminator() {\n return this._def.discriminator;\n }\n get options() {\n return this._def.options;\n }\n get optionsMap() {\n return this._def.optionsMap;\n }\n /**\n * The constructor of the discriminated union schema. Its behaviour is very similar to that of the normal z.union() constructor.\n * However, it only allows a union of objects, all of which need to share a discriminator property. This property must\n * have a different value for each object in the union.\n * @param discriminator the name of the discriminator property\n * @param types an array of object schemas\n * @param params\n */\n static create(discriminator, options, params) {\n // Get all the valid discriminator values\n const optionsMap = new Map();\n // try {\n for (const type of options) {\n const discriminatorValues = getDiscriminator(type.shape[discriminator]);\n if (!discriminatorValues) {\n throw new Error(`A discriminator value for key \\`${discriminator}\\` could not be extracted from all schema options`);\n }\n for (const value of discriminatorValues) {\n if (optionsMap.has(value)) {\n throw new Error(`Discriminator property ${String(discriminator)} has duplicate value ${String(value)}`);\n }\n optionsMap.set(value, type);\n }\n }\n return new ZodDiscriminatedUnion({\n typeName: ZodFirstPartyTypeKind.ZodDiscriminatedUnion,\n discriminator,\n options,\n optionsMap,\n ...processCreateParams(params),\n });\n }\n}\nfunction mergeValues(a, b) {\n const aType = getParsedType(a);\n const bType = getParsedType(b);\n if (a === b) {\n return { valid: true, data: a };\n }\n else if (aType === ZodParsedType.object && bType === ZodParsedType.object) {\n const bKeys = util.objectKeys(b);\n const sharedKeys = util\n .objectKeys(a)\n .filter((key) => bKeys.indexOf(key) !== -1);\n const newObj = { ...a, ...b };\n for (const key of sharedKeys) {\n const sharedValue = mergeValues(a[key], b[key]);\n if (!sharedValue.valid) {\n return { valid: false };\n }\n newObj[key] = sharedValue.data;\n }\n return { valid: true, data: newObj };\n }\n else if (aType === ZodParsedType.array && bType === ZodParsedType.array) {\n if (a.length !== b.length) {\n return { valid: false };\n }\n const newArray = [];\n for (let index = 0; index < a.length; index++) {\n const itemA = a[index];\n const itemB = b[index];\n const sharedValue = mergeValues(itemA, itemB);\n if (!sharedValue.valid) {\n return { valid: false };\n }\n newArray.push(sharedValue.data);\n }\n return { valid: true, data: newArray };\n }\n else if (aType === ZodParsedType.date &&\n bType === ZodParsedType.date &&\n +a === +b) {\n return { valid: true, data: a };\n }\n else {\n return { valid: false };\n }\n}\nclass ZodIntersection extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n const handleParsed = (parsedLeft, parsedRight) => {\n if (isAborted(parsedLeft) || isAborted(parsedRight)) {\n return INVALID;\n }\n const merged = mergeValues(parsedLeft.value, parsedRight.value);\n if (!merged.valid) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_intersection_types,\n });\n return INVALID;\n }\n if (isDirty(parsedLeft) || isDirty(parsedRight)) {\n status.dirty();\n }\n return { status: status.value, value: merged.data };\n };\n if (ctx.common.async) {\n return Promise.all([\n this._def.left._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }),\n this._def.right._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }),\n ]).then(([left, right]) => handleParsed(left, right));\n }\n else {\n return handleParsed(this._def.left._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }), this._def.right._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }));\n }\n }\n}\nZodIntersection.create = (left, right, params) => {\n return new ZodIntersection({\n left: left,\n right: right,\n typeName: ZodFirstPartyTypeKind.ZodIntersection,\n ...processCreateParams(params),\n });\n};\nclass ZodTuple extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.array) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.array,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n if (ctx.data.length < this._def.items.length) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: this._def.items.length,\n inclusive: true,\n exact: false,\n type: \"array\",\n });\n return INVALID;\n }\n const rest = this._def.rest;\n if (!rest && ctx.data.length > this._def.items.length) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: this._def.items.length,\n inclusive: true,\n exact: false,\n type: \"array\",\n });\n status.dirty();\n }\n const items = [...ctx.data]\n .map((item, itemIndex) => {\n const schema = this._def.items[itemIndex] || this._def.rest;\n if (!schema)\n return null;\n return schema._parse(new ParseInputLazyPath(ctx, item, ctx.path, itemIndex));\n })\n .filter((x) => !!x); // filter nulls\n if (ctx.common.async) {\n return Promise.all(items).then((results) => {\n return ParseStatus.mergeArray(status, results);\n });\n }\n else {\n return ParseStatus.mergeArray(status, items);\n }\n }\n get items() {\n return this._def.items;\n }\n rest(rest) {\n return new ZodTuple({\n ...this._def,\n rest,\n });\n }\n}\nZodTuple.create = (schemas, params) => {\n if (!Array.isArray(schemas)) {\n throw new Error(\"You must pass an array of schemas to z.tuple([ ... ])\");\n }\n return new ZodTuple({\n items: schemas,\n typeName: ZodFirstPartyTypeKind.ZodTuple,\n rest: null,\n ...processCreateParams(params),\n });\n};\nclass ZodRecord extends ZodType {\n get keySchema() {\n return this._def.keyType;\n }\n get valueSchema() {\n return this._def.valueType;\n }\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.object) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.object,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const pairs = [];\n const keyType = this._def.keyType;\n const valueType = this._def.valueType;\n for (const key in ctx.data) {\n pairs.push({\n key: keyType._parse(new ParseInputLazyPath(ctx, key, ctx.path, key)),\n value: valueType._parse(new ParseInputLazyPath(ctx, ctx.data[key], ctx.path, key)),\n });\n }\n if (ctx.common.async) {\n return ParseStatus.mergeObjectAsync(status, pairs);\n }\n else {\n return ParseStatus.mergeObjectSync(status, pairs);\n }\n }\n get element() {\n return this._def.valueType;\n }\n static create(first, second, third) {\n if (second instanceof ZodType) {\n return new ZodRecord({\n keyType: first,\n valueType: second,\n typeName: ZodFirstPartyTypeKind.ZodRecord,\n ...processCreateParams(third),\n });\n }\n return new ZodRecord({\n keyType: ZodString.create(),\n valueType: first,\n typeName: ZodFirstPartyTypeKind.ZodRecord,\n ...processCreateParams(second),\n });\n }\n}\nclass ZodMap extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.map) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.map,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const keyType = this._def.keyType;\n const valueType = this._def.valueType;\n const pairs = [...ctx.data.entries()].map(([key, value], index) => {\n return {\n key: keyType._parse(new ParseInputLazyPath(ctx, key, ctx.path, [index, \"key\"])),\n value: valueType._parse(new ParseInputLazyPath(ctx, value, ctx.path, [index, \"value\"])),\n };\n });\n if (ctx.common.async) {\n const finalMap = new Map();\n return Promise.resolve().then(async () => {\n for (const pair of pairs) {\n const key = await pair.key;\n const value = await pair.value;\n if (key.status === \"aborted\" || value.status === \"aborted\") {\n return INVALID;\n }\n if (key.status === \"dirty\" || value.status === \"dirty\") {\n status.dirty();\n }\n finalMap.set(key.value, value.value);\n }\n return { status: status.value, value: finalMap };\n });\n }\n else {\n const finalMap = new Map();\n for (const pair of pairs) {\n const key = pair.key;\n const value = pair.value;\n if (key.status === \"aborted\" || value.status === \"aborted\") {\n return INVALID;\n }\n if (key.status === \"dirty\" || value.status === \"dirty\") {\n status.dirty();\n }\n finalMap.set(key.value, value.value);\n }\n return { status: status.value, value: finalMap };\n }\n }\n}\nZodMap.create = (keyType, valueType, params) => {\n return new ZodMap({\n valueType,\n keyType,\n typeName: ZodFirstPartyTypeKind.ZodMap,\n ...processCreateParams(params),\n });\n};\nclass ZodSet extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.set) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.set,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const def = this._def;\n if (def.minSize !== null) {\n if (ctx.data.size < def.minSize.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: def.minSize.value,\n type: \"set\",\n inclusive: true,\n exact: false,\n message: def.minSize.message,\n });\n status.dirty();\n }\n }\n if (def.maxSize !== null) {\n if (ctx.data.size > def.maxSize.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: def.maxSize.value,\n type: \"set\",\n inclusive: true,\n exact: false,\n message: def.maxSize.message,\n });\n status.dirty();\n }\n }\n const valueType = this._def.valueType;\n function finalizeSet(elements) {\n const parsedSet = new Set();\n for (const element of elements) {\n if (element.status === \"aborted\")\n return INVALID;\n if (element.status === \"dirty\")\n status.dirty();\n parsedSet.add(element.value);\n }\n return { status: status.value, value: parsedSet };\n }\n const elements = [...ctx.data.values()].map((item, i) => valueType._parse(new ParseInputLazyPath(ctx, item, ctx.path, i)));\n if (ctx.common.async) {\n return Promise.all(elements).then((elements) => finalizeSet(elements));\n }\n else {\n return finalizeSet(elements);\n }\n }\n min(minSize, message) {\n return new ZodSet({\n ...this._def,\n minSize: { value: minSize, message: errorUtil.toString(message) },\n });\n }\n max(maxSize, message) {\n return new ZodSet({\n ...this._def,\n maxSize: { value: maxSize, message: errorUtil.toString(message) },\n });\n }\n size(size, message) {\n return this.min(size, message).max(size, message);\n }\n nonempty(message) {\n return this.min(1, message);\n }\n}\nZodSet.create = (valueType, params) => {\n return new ZodSet({\n valueType,\n minSize: null,\n maxSize: null,\n typeName: ZodFirstPartyTypeKind.ZodSet,\n ...processCreateParams(params),\n });\n};\nclass ZodFunction extends ZodType {\n constructor() {\n super(...arguments);\n this.validate = this.implement;\n }\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.function) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.function,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n function makeArgsIssue(args, error) {\n return makeIssue({\n data: args,\n path: ctx.path,\n errorMaps: [\n ctx.common.contextualErrorMap,\n ctx.schemaErrorMap,\n getErrorMap(),\n errorMap,\n ].filter((x) => !!x),\n issueData: {\n code: ZodIssueCode.invalid_arguments,\n argumentsError: error,\n },\n });\n }\n function makeReturnsIssue(returns, error) {\n return makeIssue({\n data: returns,\n path: ctx.path,\n errorMaps: [\n ctx.common.contextualErrorMap,\n ctx.schemaErrorMap,\n getErrorMap(),\n errorMap,\n ].filter((x) => !!x),\n issueData: {\n code: ZodIssueCode.invalid_return_type,\n returnTypeError: error,\n },\n });\n }\n const params = { errorMap: ctx.common.contextualErrorMap };\n const fn = ctx.data;\n if (this._def.returns instanceof ZodPromise) {\n return OK(async (...args) => {\n const error = new ZodError([]);\n const parsedArgs = await this._def.args\n .parseAsync(args, params)\n .catch((e) => {\n error.addIssue(makeArgsIssue(args, e));\n throw error;\n });\n const result = await fn(...parsedArgs);\n const parsedReturns = await this._def.returns._def.type\n .parseAsync(result, params)\n .catch((e) => {\n error.addIssue(makeReturnsIssue(result, e));\n throw error;\n });\n return parsedReturns;\n });\n }\n else {\n return OK((...args) => {\n const parsedArgs = this._def.args.safeParse(args, params);\n if (!parsedArgs.success) {\n throw new ZodError([makeArgsIssue(args, parsedArgs.error)]);\n }\n const result = fn(...parsedArgs.data);\n const parsedReturns = this._def.returns.safeParse(result, params);\n if (!parsedReturns.success) {\n throw new ZodError([makeReturnsIssue(result, parsedReturns.error)]);\n }\n return parsedReturns.data;\n });\n }\n }\n parameters() {\n return this._def.args;\n }\n returnType() {\n return this._def.returns;\n }\n args(...items) {\n return new ZodFunction({\n ...this._def,\n args: ZodTuple.create(items).rest(ZodUnknown.create()),\n });\n }\n returns(returnType) {\n return new ZodFunction({\n ...this._def,\n returns: returnType,\n });\n }\n implement(func) {\n const validatedFunc = this.parse(func);\n return validatedFunc;\n }\n strictImplement(func) {\n const validatedFunc = this.parse(func);\n return validatedFunc;\n }\n static create(args, returns, params) {\n return new ZodFunction({\n args: (args\n ? args\n : ZodTuple.create([]).rest(ZodUnknown.create())),\n returns: returns || ZodUnknown.create(),\n typeName: ZodFirstPartyTypeKind.ZodFunction,\n ...processCreateParams(params),\n });\n }\n}\nclass ZodLazy extends ZodType {\n get schema() {\n return this._def.getter();\n }\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const lazySchema = this._def.getter();\n return lazySchema._parse({ data: ctx.data, path: ctx.path, parent: ctx });\n }\n}\nZodLazy.create = (getter, params) => {\n return new ZodLazy({\n getter: getter,\n typeName: ZodFirstPartyTypeKind.ZodLazy,\n ...processCreateParams(params),\n });\n};\nclass ZodLiteral extends ZodType {\n _parse(input) {\n if (input.data !== this._def.value) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n received: ctx.data,\n code: ZodIssueCode.invalid_literal,\n expected: this._def.value,\n });\n return INVALID;\n }\n return { status: \"valid\", value: input.data };\n }\n get value() {\n return this._def.value;\n }\n}\nZodLiteral.create = (value, params) => {\n return new ZodLiteral({\n value: value,\n typeName: ZodFirstPartyTypeKind.ZodLiteral,\n ...processCreateParams(params),\n });\n};\nfunction createZodEnum(values, params) {\n return new ZodEnum({\n values: values,\n typeName: ZodFirstPartyTypeKind.ZodEnum,\n ...processCreateParams(params),\n });\n}\nclass ZodEnum extends ZodType {\n _parse(input) {\n if (typeof input.data !== \"string\") {\n const ctx = this._getOrReturnCtx(input);\n const expectedValues = this._def.values;\n addIssueToContext(ctx, {\n expected: util.joinValues(expectedValues),\n received: ctx.parsedType,\n code: ZodIssueCode.invalid_type,\n });\n return INVALID;\n }\n if (this._def.values.indexOf(input.data) === -1) {\n const ctx = this._getOrReturnCtx(input);\n const expectedValues = this._def.values;\n addIssueToContext(ctx, {\n received: ctx.data,\n code: ZodIssueCode.invalid_enum_value,\n options: expectedValues,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n get options() {\n return this._def.values;\n }\n get enum() {\n const enumValues = {};\n for (const val of this._def.values) {\n enumValues[val] = val;\n }\n return enumValues;\n }\n get Values() {\n const enumValues = {};\n for (const val of this._def.values) {\n enumValues[val] = val;\n }\n return enumValues;\n }\n get Enum() {\n const enumValues = {};\n for (const val of this._def.values) {\n enumValues[val] = val;\n }\n return enumValues;\n }\n extract(values) {\n return ZodEnum.create(values);\n }\n exclude(values) {\n return ZodEnum.create(this.options.filter((opt) => !values.includes(opt)));\n }\n}\nZodEnum.create = createZodEnum;\nclass ZodNativeEnum extends ZodType {\n _parse(input) {\n const nativeEnumValues = util.getValidEnumValues(this._def.values);\n const ctx = this._getOrReturnCtx(input);\n if (ctx.parsedType !== ZodParsedType.string &&\n ctx.parsedType !== ZodParsedType.number) {\n const expectedValues = util.objectValues(nativeEnumValues);\n addIssueToContext(ctx, {\n expected: util.joinValues(expectedValues),\n received: ctx.parsedType,\n code: ZodIssueCode.invalid_type,\n });\n return INVALID;\n }\n if (nativeEnumValues.indexOf(input.data) === -1) {\n const expectedValues = util.objectValues(nativeEnumValues);\n addIssueToContext(ctx, {\n received: ctx.data,\n code: ZodIssueCode.invalid_enum_value,\n options: expectedValues,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n get enum() {\n return this._def.values;\n }\n}\nZodNativeEnum.create = (values, params) => {\n return new ZodNativeEnum({\n values: values,\n typeName: ZodFirstPartyTypeKind.ZodNativeEnum,\n ...processCreateParams(params),\n });\n};\nclass ZodPromise extends ZodType {\n unwrap() {\n return this._def.type;\n }\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.promise &&\n ctx.common.async === false) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.promise,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const promisified = ctx.parsedType === ZodParsedType.promise\n ? ctx.data\n : Promise.resolve(ctx.data);\n return OK(promisified.then((data) => {\n return this._def.type.parseAsync(data, {\n path: ctx.path,\n errorMap: ctx.common.contextualErrorMap,\n });\n }));\n }\n}\nZodPromise.create = (schema, params) => {\n return new ZodPromise({\n type: schema,\n typeName: ZodFirstPartyTypeKind.ZodPromise,\n ...processCreateParams(params),\n });\n};\nclass ZodEffects extends ZodType {\n innerType() {\n return this._def.schema;\n }\n sourceType() {\n return this._def.schema._def.typeName === ZodFirstPartyTypeKind.ZodEffects\n ? this._def.schema.sourceType()\n : this._def.schema;\n }\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n const effect = this._def.effect || null;\n if (effect.type === \"preprocess\") {\n const processed = effect.transform(ctx.data);\n if (ctx.common.async) {\n return Promise.resolve(processed).then((processed) => {\n return this._def.schema._parseAsync({\n data: processed,\n path: ctx.path,\n parent: ctx,\n });\n });\n }\n else {\n return this._def.schema._parseSync({\n data: processed,\n path: ctx.path,\n parent: ctx,\n });\n }\n }\n const checkCtx = {\n addIssue: (arg) => {\n addIssueToContext(ctx, arg);\n if (arg.fatal) {\n status.abort();\n }\n else {\n status.dirty();\n }\n },\n get path() {\n return ctx.path;\n },\n };\n checkCtx.addIssue = checkCtx.addIssue.bind(checkCtx);\n if (effect.type === \"refinement\") {\n const executeRefinement = (acc\n // effect: RefinementEffect\n ) => {\n const result = effect.refinement(acc, checkCtx);\n if (ctx.common.async) {\n return Promise.resolve(result);\n }\n if (result instanceof Promise) {\n throw new Error(\"Async refinement encountered during synchronous parse operation. Use .parseAsync instead.\");\n }\n return acc;\n };\n if (ctx.common.async === false) {\n const inner = this._def.schema._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (inner.status === \"aborted\")\n return INVALID;\n if (inner.status === \"dirty\")\n status.dirty();\n // return value is ignored\n executeRefinement(inner.value);\n return { status: status.value, value: inner.value };\n }\n else {\n return this._def.schema\n ._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx })\n .then((inner) => {\n if (inner.status === \"aborted\")\n return INVALID;\n if (inner.status === \"dirty\")\n status.dirty();\n return executeRefinement(inner.value).then(() => {\n return { status: status.value, value: inner.value };\n });\n });\n }\n }\n if (effect.type === \"transform\") {\n if (ctx.common.async === false) {\n const base = this._def.schema._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (!isValid(base))\n return base;\n const result = effect.transform(base.value, checkCtx);\n if (result instanceof Promise) {\n throw new Error(`Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.`);\n }\n return { status: status.value, value: result };\n }\n else {\n return this._def.schema\n ._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx })\n .then((base) => {\n if (!isValid(base))\n return base;\n return Promise.resolve(effect.transform(base.value, checkCtx)).then((result) => ({ status: status.value, value: result }));\n });\n }\n }\n util.assertNever(effect);\n }\n}\nZodEffects.create = (schema, effect, params) => {\n return new ZodEffects({\n schema,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect,\n ...processCreateParams(params),\n });\n};\nZodEffects.createWithPreprocess = (preprocess, schema, params) => {\n return new ZodEffects({\n schema,\n effect: { type: \"preprocess\", transform: preprocess },\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n ...processCreateParams(params),\n });\n};\nclass ZodOptional extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType === ZodParsedType.undefined) {\n return OK(undefined);\n }\n return this._def.innerType._parse(input);\n }\n unwrap() {\n return this._def.innerType;\n }\n}\nZodOptional.create = (type, params) => {\n return new ZodOptional({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodOptional,\n ...processCreateParams(params),\n });\n};\nclass ZodNullable extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType === ZodParsedType.null) {\n return OK(null);\n }\n return this._def.innerType._parse(input);\n }\n unwrap() {\n return this._def.innerType;\n }\n}\nZodNullable.create = (type, params) => {\n return new ZodNullable({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodNullable,\n ...processCreateParams(params),\n });\n};\nclass ZodDefault extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n let data = ctx.data;\n if (ctx.parsedType === ZodParsedType.undefined) {\n data = this._def.defaultValue();\n }\n return this._def.innerType._parse({\n data,\n path: ctx.path,\n parent: ctx,\n });\n }\n removeDefault() {\n return this._def.innerType;\n }\n}\nZodDefault.create = (type, params) => {\n return new ZodDefault({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodDefault,\n defaultValue: typeof params.default === \"function\"\n ? params.default\n : () => params.default,\n ...processCreateParams(params),\n });\n};\nclass ZodCatch extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n // newCtx is used to not collect issues from inner types in ctx\n const newCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: [],\n },\n };\n const result = this._def.innerType._parse({\n data: newCtx.data,\n path: newCtx.path,\n parent: {\n ...newCtx,\n },\n });\n if (isAsync(result)) {\n return result.then((result) => {\n return {\n status: \"valid\",\n value: result.status === \"valid\"\n ? result.value\n : this._def.catchValue({\n get error() {\n return new ZodError(newCtx.common.issues);\n },\n input: newCtx.data,\n }),\n };\n });\n }\n else {\n return {\n status: \"valid\",\n value: result.status === \"valid\"\n ? result.value\n : this._def.catchValue({\n get error() {\n return new ZodError(newCtx.common.issues);\n },\n input: newCtx.data,\n }),\n };\n }\n }\n removeCatch() {\n return this._def.innerType;\n }\n}\nZodCatch.create = (type, params) => {\n return new ZodCatch({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodCatch,\n catchValue: typeof params.catch === \"function\" ? params.catch : () => params.catch,\n ...processCreateParams(params),\n });\n};\nclass ZodNaN extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.nan) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.nan,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return { status: \"valid\", value: input.data };\n }\n}\nZodNaN.create = (params) => {\n return new ZodNaN({\n typeName: ZodFirstPartyTypeKind.ZodNaN,\n ...processCreateParams(params),\n });\n};\nconst BRAND = Symbol(\"zod_brand\");\nclass ZodBranded extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const data = ctx.data;\n return this._def.type._parse({\n data,\n path: ctx.path,\n parent: ctx,\n });\n }\n unwrap() {\n return this._def.type;\n }\n}\nclass ZodPipeline extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.common.async) {\n const handleAsync = async () => {\n const inResult = await this._def.in._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (inResult.status === \"aborted\")\n return INVALID;\n if (inResult.status === \"dirty\") {\n status.dirty();\n return DIRTY(inResult.value);\n }\n else {\n return this._def.out._parseAsync({\n data: inResult.value,\n path: ctx.path,\n parent: ctx,\n });\n }\n };\n return handleAsync();\n }\n else {\n const inResult = this._def.in._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (inResult.status === \"aborted\")\n return INVALID;\n if (inResult.status === \"dirty\") {\n status.dirty();\n return {\n status: \"dirty\",\n value: inResult.value,\n };\n }\n else {\n return this._def.out._parseSync({\n data: inResult.value,\n path: ctx.path,\n parent: ctx,\n });\n }\n }\n }\n static create(a, b) {\n return new ZodPipeline({\n in: a,\n out: b,\n typeName: ZodFirstPartyTypeKind.ZodPipeline,\n });\n }\n}\nconst custom = (check, params = {}, \n/*\n * @deprecated\n *\n * Pass `fatal` into the params object instead:\n *\n * ```ts\n * z.string().custom((val) => val.length > 5, { fatal: false })\n * ```\n *\n */\nfatal) => {\n if (check)\n return ZodAny.create().superRefine((data, ctx) => {\n var _a, _b;\n if (!check(data)) {\n const p = typeof params === \"function\"\n ? params(data)\n : typeof params === \"string\"\n ? { message: params }\n : params;\n const _fatal = (_b = (_a = p.fatal) !== null && _a !== void 0 ? _a : fatal) !== null && _b !== void 0 ? _b : true;\n const p2 = typeof p === \"string\" ? { message: p } : p;\n ctx.addIssue({ code: \"custom\", ...p2, fatal: _fatal });\n }\n });\n return ZodAny.create();\n};\nconst late = {\n object: ZodObject.lazycreate,\n};\nvar ZodFirstPartyTypeKind;\n(function (ZodFirstPartyTypeKind) {\n ZodFirstPartyTypeKind[\"ZodString\"] = \"ZodString\";\n ZodFirstPartyTypeKind[\"ZodNumber\"] = \"ZodNumber\";\n ZodFirstPartyTypeKind[\"ZodNaN\"] = \"ZodNaN\";\n ZodFirstPartyTypeKind[\"ZodBigInt\"] = \"ZodBigInt\";\n ZodFirstPartyTypeKind[\"ZodBoolean\"] = \"ZodBoolean\";\n ZodFirstPartyTypeKind[\"ZodDate\"] = \"ZodDate\";\n ZodFirstPartyTypeKind[\"ZodSymbol\"] = \"ZodSymbol\";\n ZodFirstPartyTypeKind[\"ZodUndefined\"] = \"ZodUndefined\";\n ZodFirstPartyTypeKind[\"ZodNull\"] = \"ZodNull\";\n ZodFirstPartyTypeKind[\"ZodAny\"] = \"ZodAny\";\n ZodFirstPartyTypeKind[\"ZodUnknown\"] = \"ZodUnknown\";\n ZodFirstPartyTypeKind[\"ZodNever\"] = \"ZodNever\";\n ZodFirstPartyTypeKind[\"ZodVoid\"] = \"ZodVoid\";\n ZodFirstPartyTypeKind[\"ZodArray\"] = \"ZodArray\";\n ZodFirstPartyTypeKind[\"ZodObject\"] = \"ZodObject\";\n ZodFirstPartyTypeKind[\"ZodUnion\"] = \"ZodUnion\";\n ZodFirstPartyTypeKind[\"ZodDiscriminatedUnion\"] = \"ZodDiscriminatedUnion\";\n ZodFirstPartyTypeKind[\"ZodIntersection\"] = \"ZodIntersection\";\n ZodFirstPartyTypeKind[\"ZodTuple\"] = \"ZodTuple\";\n ZodFirstPartyTypeKind[\"ZodRecord\"] = \"ZodRecord\";\n ZodFirstPartyTypeKind[\"ZodMap\"] = \"ZodMap\";\n ZodFirstPartyTypeKind[\"ZodSet\"] = \"ZodSet\";\n ZodFirstPartyTypeKind[\"ZodFunction\"] = \"ZodFunction\";\n ZodFirstPartyTypeKind[\"ZodLazy\"] = \"ZodLazy\";\n ZodFirstPartyTypeKind[\"ZodLiteral\"] = \"ZodLiteral\";\n ZodFirstPartyTypeKind[\"ZodEnum\"] = \"ZodEnum\";\n ZodFirstPartyTypeKind[\"ZodEffects\"] = \"ZodEffects\";\n ZodFirstPartyTypeKind[\"ZodNativeEnum\"] = \"ZodNativeEnum\";\n ZodFirstPartyTypeKind[\"ZodOptional\"] = \"ZodOptional\";\n ZodFirstPartyTypeKind[\"ZodNullable\"] = \"ZodNullable\";\n ZodFirstPartyTypeKind[\"ZodDefault\"] = \"ZodDefault\";\n ZodFirstPartyTypeKind[\"ZodCatch\"] = \"ZodCatch\";\n ZodFirstPartyTypeKind[\"ZodPromise\"] = \"ZodPromise\";\n ZodFirstPartyTypeKind[\"ZodBranded\"] = \"ZodBranded\";\n ZodFirstPartyTypeKind[\"ZodPipeline\"] = \"ZodPipeline\";\n})(ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {}));\nconst instanceOfType = (\n// const instanceOfType = any>(\ncls, params = {\n message: `Input not instance of ${cls.name}`,\n}) => custom((data) => data instanceof cls, params);\nconst stringType = ZodString.create;\nconst numberType = ZodNumber.create;\nconst nanType = ZodNaN.create;\nconst bigIntType = ZodBigInt.create;\nconst booleanType = ZodBoolean.create;\nconst dateType = ZodDate.create;\nconst symbolType = ZodSymbol.create;\nconst undefinedType = ZodUndefined.create;\nconst nullType = ZodNull.create;\nconst anyType = ZodAny.create;\nconst unknownType = ZodUnknown.create;\nconst neverType = ZodNever.create;\nconst voidType = ZodVoid.create;\nconst arrayType = ZodArray.create;\nconst objectType = ZodObject.create;\nconst strictObjectType = ZodObject.strictCreate;\nconst unionType = ZodUnion.create;\nconst discriminatedUnionType = ZodDiscriminatedUnion.create;\nconst intersectionType = ZodIntersection.create;\nconst tupleType = ZodTuple.create;\nconst recordType = ZodRecord.create;\nconst mapType = ZodMap.create;\nconst setType = ZodSet.create;\nconst functionType = ZodFunction.create;\nconst lazyType = ZodLazy.create;\nconst literalType = ZodLiteral.create;\nconst enumType = ZodEnum.create;\nconst nativeEnumType = ZodNativeEnum.create;\nconst promiseType = ZodPromise.create;\nconst effectsType = ZodEffects.create;\nconst optionalType = ZodOptional.create;\nconst nullableType = ZodNullable.create;\nconst preprocessType = ZodEffects.createWithPreprocess;\nconst pipelineType = ZodPipeline.create;\nconst ostring = () => stringType().optional();\nconst onumber = () => numberType().optional();\nconst oboolean = () => booleanType().optional();\nconst coerce = {\n string: ((arg) => ZodString.create({ ...arg, coerce: true })),\n number: ((arg) => ZodNumber.create({ ...arg, coerce: true })),\n boolean: ((arg) => ZodBoolean.create({\n ...arg,\n coerce: true,\n })),\n bigint: ((arg) => ZodBigInt.create({ ...arg, coerce: true })),\n date: ((arg) => ZodDate.create({ ...arg, coerce: true })),\n};\nconst NEVER = INVALID;\n\nvar z = /*#__PURE__*/Object.freeze({\n __proto__: null,\n defaultErrorMap: errorMap,\n setErrorMap: setErrorMap,\n getErrorMap: getErrorMap,\n makeIssue: makeIssue,\n EMPTY_PATH: EMPTY_PATH,\n addIssueToContext: addIssueToContext,\n ParseStatus: ParseStatus,\n INVALID: INVALID,\n DIRTY: DIRTY,\n OK: OK,\n isAborted: isAborted,\n isDirty: isDirty,\n isValid: isValid,\n isAsync: isAsync,\n get util () { return util; },\n get objectUtil () { return objectUtil; },\n ZodParsedType: ZodParsedType,\n getParsedType: getParsedType,\n ZodType: ZodType,\n ZodString: ZodString,\n ZodNumber: ZodNumber,\n ZodBigInt: ZodBigInt,\n ZodBoolean: ZodBoolean,\n ZodDate: ZodDate,\n ZodSymbol: ZodSymbol,\n ZodUndefined: ZodUndefined,\n ZodNull: ZodNull,\n ZodAny: ZodAny,\n ZodUnknown: ZodUnknown,\n ZodNever: ZodNever,\n ZodVoid: ZodVoid,\n ZodArray: ZodArray,\n ZodObject: ZodObject,\n ZodUnion: ZodUnion,\n ZodDiscriminatedUnion: ZodDiscriminatedUnion,\n ZodIntersection: ZodIntersection,\n ZodTuple: ZodTuple,\n ZodRecord: ZodRecord,\n ZodMap: ZodMap,\n ZodSet: ZodSet,\n ZodFunction: ZodFunction,\n ZodLazy: ZodLazy,\n ZodLiteral: ZodLiteral,\n ZodEnum: ZodEnum,\n ZodNativeEnum: ZodNativeEnum,\n ZodPromise: ZodPromise,\n ZodEffects: ZodEffects,\n ZodTransformer: ZodEffects,\n ZodOptional: ZodOptional,\n ZodNullable: ZodNullable,\n ZodDefault: ZodDefault,\n ZodCatch: ZodCatch,\n ZodNaN: ZodNaN,\n BRAND: BRAND,\n ZodBranded: ZodBranded,\n ZodPipeline: ZodPipeline,\n custom: custom,\n Schema: ZodType,\n ZodSchema: ZodType,\n late: late,\n get ZodFirstPartyTypeKind () { return ZodFirstPartyTypeKind; },\n coerce: coerce,\n any: anyType,\n array: arrayType,\n bigint: bigIntType,\n boolean: booleanType,\n date: dateType,\n discriminatedUnion: discriminatedUnionType,\n effect: effectsType,\n 'enum': enumType,\n 'function': functionType,\n 'instanceof': instanceOfType,\n intersection: intersectionType,\n lazy: lazyType,\n literal: literalType,\n map: mapType,\n nan: nanType,\n nativeEnum: nativeEnumType,\n never: neverType,\n 'null': nullType,\n nullable: nullableType,\n number: numberType,\n object: objectType,\n oboolean: oboolean,\n onumber: onumber,\n optional: optionalType,\n ostring: ostring,\n pipeline: pipelineType,\n preprocess: preprocessType,\n promise: promiseType,\n record: recordType,\n set: setType,\n strictObject: strictObjectType,\n string: stringType,\n symbol: symbolType,\n transformer: effectsType,\n tuple: tupleType,\n 'undefined': undefinedType,\n union: unionType,\n unknown: unknownType,\n 'void': voidType,\n NEVER: NEVER,\n ZodIssueCode: ZodIssueCode,\n quotelessJson: quotelessJson,\n ZodError: ZodError\n});\n\nexport { BRAND, DIRTY, EMPTY_PATH, INVALID, NEVER, OK, ParseStatus, ZodType as Schema, ZodAny, ZodArray, ZodBigInt, ZodBoolean, ZodBranded, ZodCatch, ZodDate, ZodDefault, ZodDiscriminatedUnion, ZodEffects, ZodEnum, ZodError, ZodFirstPartyTypeKind, ZodFunction, ZodIntersection, ZodIssueCode, ZodLazy, ZodLiteral, ZodMap, ZodNaN, ZodNativeEnum, ZodNever, ZodNull, ZodNullable, ZodNumber, ZodObject, ZodOptional, ZodParsedType, ZodPipeline, ZodPromise, ZodRecord, ZodType as ZodSchema, ZodSet, ZodString, ZodSymbol, ZodEffects as ZodTransformer, ZodTuple, ZodType, ZodUndefined, ZodUnion, ZodUnknown, ZodVoid, addIssueToContext, anyType as any, arrayType as array, bigIntType as bigint, booleanType as boolean, coerce, custom, dateType as date, z as default, errorMap as defaultErrorMap, discriminatedUnionType as discriminatedUnion, effectsType as effect, enumType as enum, functionType as function, getErrorMap, getParsedType, instanceOfType as instanceof, intersectionType as intersection, isAborted, isAsync, isDirty, isValid, late, lazyType as lazy, literalType as literal, makeIssue, mapType as map, nanType as nan, nativeEnumType as nativeEnum, neverType as never, nullType as null, nullableType as nullable, numberType as number, objectType as object, objectUtil, oboolean, onumber, optionalType as optional, ostring, pipelineType as pipeline, preprocessType as preprocess, promiseType as promise, quotelessJson, recordType as record, setType as set, setErrorMap, strictObjectType as strictObject, stringType as string, symbolType as symbol, effectsType as transformer, tupleType as tuple, undefinedType as undefined, unionType as union, unknownType as unknown, util, voidType as void, z };\n","'use strict';\n\n/// \n/// \n/// \n\nimport {AmeCustomizable, AmeCustomizableViewModel} from '../../pro-customizables/assets/customizable.js';\nimport {registerBaseComponents} from '../../pro-customizables/ko-components/ame-components.js';\nimport AmeAcStructure from './ko-components/ame-ac-structure.js';\nimport AmeAcSection from './ko-components/ame-ac-section.js';\nimport AmeAcSectionLink from './ko-components/ame-ac-section-link.js';\nimport AmeAcControl from './ko-components/ame-ac-control.js';\nimport AmeAcControlGroup from './ko-components/ame-ac-control-group.js';\nimport AmeAcContentSection from './ko-components/ame-ac-content-section.js';\nimport {AmeAdminCustomizerBase} from './admin-customizer-base.js';\nimport AmeAcSeparator from './ko-components/ame-ac-separator.js';\nimport AmeAcValidationErrors from './ko-components/ame-ac-validation-errors.js';\nimport z, {ZodError, ZodType} from '../../zod/lib/index.js';\n\ndeclare var wsAmeLodash: _.LoDashStatic;\ndeclare const wsAmeAdminCustomizerData: AmeAdminCustomizer.ScriptData;\n\nexport namespace AmeAdminCustomizer {\n\timport Setting = AmeCustomizable.Setting;\n\timport SettingCollection = AmeCustomizable.SettingCollection;\n\timport InterfaceStructureData = AmeCustomizable.InterfaceStructureData;\n\timport InterfaceStructure = AmeCustomizable.InterfaceStructure;\n\timport unserializeUiElement = AmeCustomizable.unserializeUiElement;\n\timport unserializeSetting = AmeCustomizable.unserializeSetting;\n\timport AnySpecificElementData = AmeCustomizable.AnySpecificElementData;\n\timport CustomizableVmInterface = AmeCustomizableViewModel.CustomizableVmInterface;\n\n\tconst $ = jQuery;\n\tconst _ = wsAmeLodash;\n\n\tregisterBaseComponents();\n\tko.components.register('ame-ac-structure', AmeAcStructure);\n\tko.components.register('ame-ac-section', AmeAcSection);\n\tko.components.register('ame-ac-section-link', AmeAcSectionLink);\n\tko.components.register('ame-ac-content-section', AmeAcContentSection);\n\tko.components.register('ame-ac-control-group', AmeAcControlGroup);\n\tko.components.register('ame-ac-control', AmeAcControl);\n\tko.components.register('ame-ac-separator', AmeAcSeparator);\n\tko.components.register('ame-ac-validation-errors', AmeAcValidationErrors);\n\n\texport interface ScriptData extends AmeAdminCustomizerBase.ScriptData, AdminThemeTexts {\n\t\tajaxUrl: string;\n\t\tsaveChangesetNonce: string;\n\t\ttrashChangesetNonce: string;\n\t\tchangesetItemCount: number;\n\t\tchangesetStatus: string;\n\t\tchangesetThemeMetadata: AdminThemeMetadata | null;\n\n\t\trefreshPreviewNonce: string;\n\t\tinitialPreviewUrl: string;\n\t\tinterfaceStructure: InterfaceStructureData;\n\n\t\t/**\n\t\t * The template to use when generating the URL for a changeset.\n\t\t *\n\t\t * By default, the changeset name is added as a query parameter. Alternatively,\n\t\t * you can use a path template that includes a \"{changeset}\" placeholder, which\n\t\t * will be replaced with the changeset name.\n\t\t */\n\t\tchangesetPathTemplate: string | null;\n\n\t\t/**\n\t\t * Whether to use pushState() to update the URL when the changeset name changes.\n\t\t *\n\t\t * By default, we discourage navigating to the old URL (no pushState()) because\n\t\t * the name is only expected to change when the old changeset becomes invalid\n\t\t * (e.g. it's deleted or published).\n\t\t */\n\t\tchangesetPushStateEnabled: boolean;\n\n\t\t/**\n\t\t * Admin Customizer base path. Defaults to the current URL path.\n\t\t *\n\t\t * Note that setting this to a non-empty value will also stop AC from\n\t\t * adding the \"page\" query parameter to the URL.\n\t\t */\n\t\tcustomBasePath: string | null;\n\n\t\texitPromptMode?: number;\n\n\t\t/**\n\t\t * Whether generating an admin theme requires the current changeset to be non-empty.\n\t\t *\n\t\t * By default, even if the current changeset is empty, the user can still generate an admin\n\t\t * theme from previously saved settings. If there are no settings, the generated theme just\n\t\t * won't change the admin interface at all.\n\t\t */\n\t\tdownloadOnlyIfChangesetIsNonEmpty?: boolean;\n\t}\n\n\tinterface AdminThemeTexts {\n\t\tgeneratorCreditPhrase?: string;\n\t\tstandalonePluginNote?: string;\n\t}\n\n\tconst reducedMotionQuery = window.matchMedia('(prefers-reduced-motion: reduce)');\n\tlet prefersReducedMotion = reducedMotionQuery && reducedMotionQuery.matches;\n\treducedMotionQuery.addEventListener('change', () => {\n\t\tprefersReducedMotion = reducedMotionQuery.matches;\n\t});\n\n\tclass CustomizerSettingsCollection extends SettingCollection {\n\t\t/**\n\t\t * Settings that have changed since the last save attempt.\n\t\t */\n\t\tprivate pendingSettings: Record = {};\n\t\t/**\n\t\t * Settings that in the process of being sent to the server to be saved.\n\t\t * They might not be saved yet.\n\t\t */\n\t\tprivate sentSettings: Record = {};\n\t\tprivate currentChangesetRequest: JQueryXHR | null = null;\n\t\tprivate saveTriggerTimeoutId: null | ReturnType = null;\n\n\t\tprivate readonly currentChangeset: KnockoutObservable;\n\t\tpublic readonly changesetName: KnockoutComputed;\n\n\t\tpublic readonly adminThemeMetadata: KnockoutObservable;\n\t\tprivate readonly underlyingMetadata: KnockoutObservable = ko.observable(null);\n\t\tprivate readonly metadataHasChanged: KnockoutObservable = ko.observable(false);\n\n\t\tpublic readonly isExclusiveOperationInProgress: KnockoutComputed;\n\t\tprivate readonly exclusiveOperation: KnockoutObservable = ko.observable(false);\n\n\t\tconstructor(\n\t\t\tpublic readonly ajaxUrl: string,\n\t\t\tpublic readonly saveChangesetNonce: string,\n\t\t\tpublic readonly trashChangesetNonce: string,\n\t\t\tchangesetName: string,\n\t\t\tchangesetItemCount: number = 0,\n\t\t\tchangesetStatus: string | null = null\n\t\t) {\n\t\t\tsuper();\n\t\t\tconst self = this;\n\n\t\t\tthis.currentChangeset = ko.observable(\n\t\t\t\tnew Changeset(changesetName, changesetItemCount, changesetStatus)\n\t\t\t);\n\t\t\tthis.changesetName = ko.pureComputed(() => {\n\t\t\t\treturn (self.currentChangeset()?.name()) || '';\n\t\t\t});\n\n\t\t\tthis.adminThemeMetadata = ko.computed({\n\t\t\t\tread: () => this.underlyingMetadata(),\n\t\t\t\twrite: (newValue) => {\n\t\t\t\t\tconst oldValue = this.underlyingMetadata.peek();\n\t\t\t\t\tif (!_.isEqual(newValue, oldValue)) {\n\t\t\t\t\t\tthis.underlyingMetadata(newValue);\n\t\t\t\t\t\tthis.metadataHasChanged(true);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t//Automatically save the changeset when any settings change.\n\t\t\tconst totalChangeCount = ko.pureComputed(() => {\n\t\t\t\tconst changeset = self.currentChangeset();\n\t\t\t\treturn (changeset ? changeset.currentSessionChanges() : 0);\n\t\t\t});\n\t\t\tconst debouncedSaveTrigger = _.debounce(\n\t\t\t\t() => {\n\t\t\t\t\t//Only save if there are changes. This may look like a duplicate check,\n\t\t\t\t\t//but it's not: the totalChangeCount() may change between the time\n\t\t\t\t\t//the debounced function is called and the time this code is executed.\n\t\t\t\t\t//\n\t\t\t\t\t//Also save if the metadata has changed, but only if the changeset\n\t\t\t\t\t//is not empty. Saving a changeset with only metadata is not useful.\n\t\t\t\t\tif (\n\t\t\t\t\t\t(totalChangeCount() > 0)\n\t\t\t\t\t\t|| (this.metadataHasChanged() && this.currentChangeset().isNonEmpty())\n\t\t\t\t\t) {\n\t\t\t\t\t\tself.queueChangesetUpdate()\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t3000,\n\t\t\t\t{leading: true, trailing: true}\n\t\t\t)\n\t\t\ttotalChangeCount.subscribe((counter) => {\n\t\t\t\tif (counter > 0) {\n\t\t\t\t\tdebouncedSaveTrigger();\n\t\t\t\t}\n\t\t\t});\n\t\t\t//Also save when theme metadata changes.\n\t\t\tthis.metadataHasChanged.subscribe((hasChanged) => {\n\t\t\t\tif (hasChanged) {\n\t\t\t\t\tdebouncedSaveTrigger();\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis.isExclusiveOperationInProgress = ko.pureComputed(() => {\n\t\t\t\treturn self.exclusiveOperation();\n\t\t\t});\n\n\t\t\t//Keep track of unsaved changes and changesets.\n\t\t\tthis.addChangeListener((setting: Setting) => {\n\t\t\t\tthis.pendingSettings[setting.id] = setting;\n\n\t\t\t\tlet changeset = this.currentChangeset();\n\t\t\t\t//If the current changeset cannot be modified, create a new one\n\t\t\t\t//for the changed setting(s).\n\t\t\t\tif (!changeset?.canBeModified()) {\n\t\t\t\t\tchangeset = new Changeset();\n\t\t\t\t\tthis.currentChangeset(changeset);\n\t\t\t\t}\n\t\t\t\t//Track the number of changes in the current session.\n\t\t\t\tchangeset.currentSessionChanges(changeset.currentSessionChanges() + 1);\n\t\t\t});\n\t\t}\n\n\t\tqueueChangesetUpdate(delay: number = 0) {\n\t\t\tif (delay > 0) {\n\t\t\t\tif (this.saveTriggerTimeoutId !== null) {\n\t\t\t\t\t//Replace the existing timeout with a new one.\n\t\t\t\t\tclearTimeout(this.saveTriggerTimeoutId);\n\t\t\t\t}\n\t\t\t\tthis.saveTriggerTimeoutId = setTimeout(() => {\n\t\t\t\t\tthis.saveTriggerTimeoutId = null;\n\t\t\t\t\tthis.queueChangesetUpdate(0);\n\t\t\t\t}, delay);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (this.saveTriggerTimeoutId !== null) {\n\t\t\t\treturn; //Another timeout is already waiting.\n\t\t\t}\n\n\t\t\tif (this.currentChangesetRequest !== null) {\n\t\t\t\t//There's an in-progress request, so wait until it's done.\n\t\t\t\tthis.currentChangesetRequest.always(() => {\n\t\t\t\t\t//Wait a bit to avoid hammering the server.\n\t\t\t\t\tthis.queueChangesetUpdate(1000);\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.saveChangeset();\n\t\t}\n\n\t\tprivate saveChangeset(status: string | null = null): JQueryPromise {\n\t\t\t//Do nothing if there are no changes.\n\t\t\tif (_.isEmpty(this.pendingSettings) && (status === null) && !this.metadataHasChanged()) {\n\t\t\t\treturn $.Deferred().reject(new Error('There are no changes to save.')).promise();\n\t\t\t}\n\n\t\t\tif (this.isExclusiveOperationInProgress()) {\n\t\t\t\treturn $.Deferred().reject(\n\t\t\t\t\tnew Error('Another exclusive changeset operation is in progress.')\n\t\t\t\t).promise();\n\t\t\t}\n\n\t\t\tlet isExclusiveRequest = (status === 'publish') || (status === 'trash');\n\t\t\tif (isExclusiveRequest) {\n\t\t\t\tthis.exclusiveOperation(true);\n\t\t\t}\n\n\t\t\tconst savedChangeset = this.currentChangeset();\n\n\t\t\t//Keep a local copy of the settings in case something changes instance\n\t\t\t//properties while the request is in progress (should never happen).\n\t\t\tconst settingsToSend = this.pendingSettings;\n\t\t\tthis.sentSettings = settingsToSend;\n\t\t\tthis.pendingSettings = {};\n\n\t\t\tconst modifiedSettings = _.mapValues(settingsToSend, setting => setting.value());\n\t\t\tconst requestData: Record = {\n\t\t\t\taction: 'ws_ame_ac_save_changeset',\n\t\t\t\t_ajax_nonce: this.saveChangesetNonce,\n\t\t\t\tchangeset: (savedChangeset?.name()) ?? '',\n\t\t\t\tmodified: JSON.stringify(modifiedSettings),\n\t\t\t};\n\t\t\tif (status !== null) {\n\t\t\t\trequestData['status'] = status;\n\t\t\t}\n\t\t\t//If the changeset doesn't have a name, it is new.\n\t\t\tif (!savedChangeset?.hasName()) {\n\t\t\t\trequestData['createNew'] = 1;\n\t\t\t}\n\n\t\t\t//Also send the metadata if it has changed.\n\t\t\tconst metadataWasChanged = this.metadataHasChanged();\n\t\t\tif (metadataWasChanged) {\n\t\t\t\tconst metadata = this.adminThemeMetadata();\n\t\t\t\trequestData['adminThemeMetadata'] = JSON.stringify(metadata);\n\t\t\t}\n\t\t\tthis.metadataHasChanged(false);\n\n\t\t\tconst request = $.ajax({\n\t\t\t\turl: this.ajaxUrl,\n\t\t\t\tmethod: 'POST',\n\t\t\t\tdata: requestData,\n\t\t\t\tdataType: 'json',\n\t\t\t\ttimeout: 20000,\n\t\t\t});\n\t\t\tthis.currentChangesetRequest = request;\n\n\t\t\tinterface ServerValidationResults {\n\t\t\t\t[settingId: string]: {\n\t\t\t\t\tisValid: boolean;\n\t\t\t\t\terrors: Array<{ code: string; message: string; }>;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst self = this;\n\n\t\t\tfunction storeValidationResultsFrom(serverResponse: any) {\n\t\t\t\tconst results: ServerValidationResults = _.get(\n\t\t\t\t\tserverResponse,\n\t\t\t\t\t['data', 'validationResults']\n\t\t\t\t);\n\t\t\t\tif (typeof results !== 'object') {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tfor (const settingId in results) {\n\t\t\t\t\tconst setting = self.get(settingId);\n\t\t\t\t\tif (!setting.isDefined()) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!modifiedSettings.hasOwnProperty(settingId)) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tconst sentValue = modifiedSettings[settingId];\n\n\t\t\t\t\tconst state = results[settingId];\n\t\t\t\t\tif (state.isValid) {\n\t\t\t\t\t\tsetting.get().clearValidationErrorsForValue(sentValue);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t//Since the server response is not fully validated, some typeof checks\n\t\t\t\t\t\t//are still useful.\n\t\t\t\t\t\t// noinspection SuspiciousTypeOfGuard\n\t\t\t\t\t\tsetting.get().addValidationErrorsForValue(\n\t\t\t\t\t\t\tsentValue,\n\t\t\t\t\t\t\t_.filter(state.errors, error => (typeof error.message === 'string'))\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfunction storeChangesetDetailsFrom(serverResponse: any) {\n\t\t\t\tif (!savedChangeset) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t//Store the returned changeset name in case a new changeset was created\n\t\t\t\t//or an existing changeset was forked due to permissions.\n\t\t\t\tconst newName = _.get(serverResponse, ['data', 'changeset']);\n\t\t\t\tif (!savedChangeset.hasName() || (newName !== savedChangeset.name())) {\n\t\t\t\t\tif (typeof newName === 'string') {\n\t\t\t\t\t\tsavedChangeset.name(newName);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t//Store the changeset status.\n\t\t\t\tconst newStatus = _.get(serverResponse, ['data', 'changesetStatus']);\n\t\t\t\tif (typeof newStatus === 'string') {\n\t\t\t\t\tsavedChangeset.status(newStatus);\n\t\t\t\t}\n\n\t\t\t\t//Store the number of changes in the changeset.\n\t\t\t\tconst newChangeCount = _.get(serverResponse, ['data', 'changesetItemCount']);\n\t\t\t\tif (typeof newChangeCount === 'number') {\n\t\t\t\t\tsavedChangeset.knownItemCount(newChangeCount);\n\t\t\t\t}\n\n\t\t\t\t//Was the changeset published? Because changesets are typically moved\n\t\t\t\t//to trash after publishing, \"status\" might be \"trash\" instead of \"publish\",\n\t\t\t\t//but we still want to know if it was successfully published.\n\t\t\t\tconst wasPublished = _.get(serverResponse, ['data', 'changesetWasPublished'], null);\n\t\t\t\tif (wasPublished) {\n\t\t\t\t\tsavedChangeset.wasPublished(wasPublished);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\trequest.done(function (response) {\n\t\t\t\tstoreChangesetDetailsFrom(response);\n\t\t\t\tstoreValidationResultsFrom(response);\n\n\t\t\t\t//After successfully publishing a changeset, it has no more\n\t\t\t\t//unsaved changes.\n\t\t\t\tconst isPublished =\n\t\t\t\t\t(savedChangeset.status() === 'publish')\n\t\t\t\t\t|| (savedChangeset.status() === 'future')\n\t\t\t\t\t|| (savedChangeset.wasPublished());\n\t\t\t\tif (isPublished) {\n\t\t\t\t\tsavedChangeset.currentSessionChanges(0);\n\t\t\t\t}\n\n\t\t\t\t//After a changeset is published or trashed, it can no longer\n\t\t\t\t//be edited. We may be able to replace it with a new changeset\n\t\t\t\t//that was created on the server.\n\t\t\t\tif (!self.currentChangeset().canBeModified()) {\n\t\t\t\t\tconst nextChangeset = _.get(response, ['data', 'nextChangeset']);\n\t\t\t\t\tif ((typeof nextChangeset === 'string') && (nextChangeset !== '')) {\n\t\t\t\t\t\tself.currentChangeset(new Changeset(nextChangeset));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\n\t\t\trequest.fail((requestObject: JQueryXHR) => {\n\t\t\t\tif (typeof requestObject.responseJSON === 'object') {\n\t\t\t\t\tstoreValidationResultsFrom(requestObject.responseJSON);\n\t\t\t\t\tstoreChangesetDetailsFrom(requestObject.responseJSON);\n\t\t\t\t}\n\n\t\t\t\t//Add the unsaved settings back to the pending list.\n\t\t\t\tfor (const id in settingsToSend) {\n\t\t\t\t\t//Keep only settings that still exist.\n\t\t\t\t\tif (this.get(id).isDefined()) {\n\t\t\t\t\t\tthis.pendingSettings[id] = settingsToSend[id];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t//We don't automatically retry because the problem might be something\n\t\t\t\t//that doesn't get better on its own, like missing permissions.\n\t\t\t});\n\n\t\t\trequest.always(() => {\n\t\t\t\tthis.currentChangesetRequest = null;\n\t\t\t\tthis.sentSettings = {};\n\t\t\t\tif (isExclusiveRequest) {\n\t\t\t\t\tthis.exclusiveOperation(false);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\treturn request;\n\t\t}\n\n\t\tpublic savePendingSettings(timeout: number = 20): JQueryPromise {\n\t\t\tif (this.isExclusiveOperationInProgress()) {\n\t\t\t\t//Wait for the exclusive operation to finish.\n\t\t\t\tconst deferred = $.Deferred();\n\t\t\t\tconst result = deferred.then(() => this.doSavePendingSettings());\n\n\t\t\t\tconst startTime = Date.now();\n\t\t\t\tconst timer = setInterval(() => {\n\t\t\t\t\tif (!this.isExclusiveOperationInProgress()) {\n\t\t\t\t\t\tclearInterval(timer);\n\t\t\t\t\t\tdeferred.resolve();\n\t\t\t\t\t} else if ((Date.now() - startTime) > timeout) {\n\t\t\t\t\t\tclearInterval(timer);\n\t\t\t\t\t\tdeferred.reject(new Error('Exclusive operation timed out.'));\n\t\t\t\t\t}\n\t\t\t\t}, 200);\n\n\t\t\t\treturn result;\n\t\t\t}\n\n\t\t\treturn this.doSavePendingSettings();\n\t\t}\n\n\t\tprivate doSavePendingSettings(): JQueryPromise {\n\t\t\t//If there are no changes, we don't need to do anything.\n\t\t\tif (_.isEmpty(this.pendingSettings)) {\n\t\t\t\treturn $.Deferred().resolve().promise();\n\t\t\t}\n\t\t\treturn this.saveChangeset();\n\t\t}\n\n\t\tpublic getCurrentChangeset(): Changeset {\n\t\t\treturn this.currentChangeset();\n\t\t}\n\n\t\t/**\n\t\t * Get any unsaved setting changes.\n\t\t *\n\t\t * @returns Object An object mapping setting IDs to their modified values.\n\t\t */\n\t\tpublic get unsavedChanges(): Record {\n\t\t\t//Include both pending settings and sent settings. Sent settings\n\t\t\t//might not be saved yet.\n\t\t\tlet unsavedSettings: Record = {};\n\t\t\t_.defaults(unsavedSettings, this.pendingSettings, this.sentSettings);\n\n\t\t\treturn _.mapValues(unsavedSettings, setting => setting.value());\n\t\t}\n\n\t\tpublic publishChangeset(): JQueryPromise {\n\t\t\tif (this.isExclusiveOperationInProgress()) {\n\t\t\t\treturn $.Deferred()\n\t\t\t\t\t.reject(new Error('Another exclusive changeset operation is already in progress.'))\n\t\t\t\t\t.promise();\n\t\t\t}\n\t\t\treturn this.saveChangeset('publish');\n\t\t}\n\n\t\tpublic trashChangeset(): JQueryPromise {\n\t\t\tif (this.isExclusiveOperationInProgress()) {\n\t\t\t\treturn $.Deferred()\n\t\t\t\t\t.reject(new Error('Another exclusive changeset operation is already in progress.'))\n\t\t\t\t\t.promise();\n\t\t\t}\n\n\t\t\tconst changeset = this.currentChangeset();\n\t\t\tif (!changeset.hasName()) {\n\t\t\t\t//The changeset hasn't been saved yet, so we can just mark it as trashed.\n\t\t\t\tchangeset.status('trash');\n\t\t\t\tchangeset.currentSessionChanges(0);\n\n\t\t\t\t//It's a success of sorts.\n\t\t\t\treturn $.Deferred().resolve(true).promise();\n\t\t\t}\n\n\t\t\tthis.exclusiveOperation(true);\n\n\t\t\tconst requestData: Record = {\n\t\t\t\taction: 'ws_ame_ac_trash_changeset',\n\t\t\t\t_ajax_nonce: this.trashChangesetNonce,\n\t\t\t\tchangeset: changeset.name\n\t\t\t};\n\n\t\t\tconst request = $.ajax({\n\t\t\t\turl: this.ajaxUrl,\n\t\t\t\tmethod: 'POST',\n\t\t\t\tdata: requestData,\n\t\t\t\tdataType: 'json',\n\t\t\t\ttimeout: 20000,\n\t\t\t});\n\t\t\tthis.currentChangesetRequest = request;\n\n\t\t\trequest.done(function () {\n\t\t\t\tchangeset.status('trash');\n\t\t\t\tchangeset.currentSessionChanges(0);\n\t\t\t});\n\n\t\t\t//Unfortunately, jQuery doesn't seem to allow us to create a custom\n\t\t\t//error object and pass it to other handlers, so code that uses this\n\t\t\t//method will have to parse the error response itself.\n\n\t\t\trequest.always(() => {\n\t\t\t\tthis.currentChangesetRequest = null;\n\t\t\t\tthis.exclusiveOperation(false);\n\t\t\t});\n\n\t\t\treturn request;\n\t\t}\n\n\t\tpublic addInitialThemeMetadata(metadata: AdminThemeMetadata | null) {\n\t\t\tthis.underlyingMetadata(metadata);\n\t\t\tthis.metadataHasChanged(false);\n\t\t}\n\t}\n\n\tclass Changeset {\n\t\tpublic readonly name: KnockoutObservable;\n\t\tpublic readonly knownItemCount: KnockoutObservable;\n\t\tpublic readonly status: KnockoutObservable;\n\n\t\t/**\n\t\t * The number of times settings have been changed in this changeset\n\t\t * during the current customizer session.\n\t\t *\n\t\t * Note that this is not the same as the number settings in the changeset:\n\t\t * if the same setting is changed X times, this counter will increase by X,\n\t\t * but the changeset will still only have one entry for that setting.\n\t\t */\n\t\tpublic readonly currentSessionChanges: KnockoutObservable = ko.observable(0);\n\n\t\t/**\n\t\t * Once a changeset has been published or deleted, its contents can't be modified any more.\n\t\t * @private\n\t\t */\n\t\tprivate readonly fixedContentStatuses: Record =\n\t\t\t{'publish': true, 'trash': true, 'future': true};\n\n\t\tpublic readonly wasPublished: KnockoutObservable = ko.observable(false);\n\n\t\tconstructor(name: string = '', knownItemCount: number = 0, initialStatus: string | null = '') {\n\t\t\tthis.name = ko.observable(name);\n\n\t\t\tthis.name.subscribe((newName) => {\n\t\t\t\t//In theory, the type system should ensure that the name is always a string,\n\t\t\t\t//but that only works on the TS side. I've previously run into a bug where\n\t\t\t\t//a null value was sent from the server. Let's add a check here to make it\n\t\t\t\t//easier to spot bugs like that in the future.\n\t\t\t\tif ((typeof (newName as unknown) !== 'string')) {\n\t\t\t\t\tthrow new Error('Changeset name must always be a string, found ' + (typeof newName));\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis.knownItemCount = ko.observable(knownItemCount);\n\t\t\tthis.status = ko.observable(initialStatus ?? '');\n\t\t}\n\n\t\tpublic hasName(): boolean {\n\t\t\tconst name = this.name();\n\t\t\treturn (name !== '');\n\t\t}\n\n\t\tpublic canBeModified(): boolean {\n\t\t\treturn !this.fixedContentStatuses.hasOwnProperty(this.status());\n\t\t}\n\n\t\tpublic isNonEmpty(): boolean {\n\t\t\treturn (this.currentSessionChanges() > 0) || (this.knownItemCount() > 0)\n\t\t}\n\t}\n\n\tconst TemporaryChangesetName = 'temporary000'; //Note: Must match the value used in PHP.\n\n\t//region Admin theme\n\tconst UrlOrEmpty = z.union([\n\t\tz.string().url().max(1000),\n\t\tz.literal('')\n\t]);\n\n\tconst AdminThemeMetadata = z.object({\n\t\tpluginName: z.string().max(100),\n\t\tshortDescription: z.string().max(500),\n\n\t\tpluginSlug: z.string().max(64).toLowerCase().default('')\n\t\t\t.refine(\n\t\t\t\tfunction (input: string) {\n\t\t\t\t\t//Only allow alphanumeric characters, underscores, and dashes.\n\t\t\t\t\t//Empty string is allowed.\n\t\t\t\t\treturn /^[a-z0-9_-]*$/.test(input);\n\t\t\t\t},\n\t\t\t\t{message: 'The slug can only contain letters (a-z), numbers, underscores, and dashes.'}\n\t\t\t),\n\t\tidentifierPrefix: z.string().max(20).optional(),\n\n\t\tpluginVersion: z.string().default('1.0').optional(),\n\t\tpluginUrl: UrlOrEmpty.optional(),\n\t\tauthorName: z.string().max(100).optional(),\n\t\tauthorUrl: UrlOrEmpty.optional(),\n\t\trequiredWpVersion: z.string().max(30).default('4.7').optional(),\n\t\ttestedWpVersion: z.string().max(30).optional(),\n\t\twasEverConfirmed: z.boolean().default(false).optional(),\n\t});\n\n\ttype AdminThemeMetadata = z.infer;\n\n\tconst AdminThemeSettings = z.record(\n\t\t//Key type\n\t\tz.string().min(1),\n\t\t//Value type\n\t\tz.any()\n\t);\n\n\tclass AdminThemeImportReport {\n\t\tpublic totalSettings: number = 0;\n\t\tpublic importedSettings: number = 0;\n\t\tpublic invalidSettings: number = 0;\n\t\tpublic skippedSettings: number = 0;\n\t\tpublic differentImportedSettings: number = 0;\n\n\t\tpublic readonly pluginName: string;\n\n\t\tconstructor(\n\t\t\tpublic readonly fileName: string,\n\t\t\tpublic readonly metadata: AdminThemeMetadata\n\t\t) {\n\t\t\tthis.pluginName = metadata.pluginName || '(Unnamed)';\n\t\t}\n\t}\n\n\tinterface WithZodValidationResults extends ObservableValidationFields {\n\t\tameZodValidationError: KnockoutObservable;\n\t}\n\n\ttype ZodValidatedObservable = KnockoutComputed & WithZodValidationResults;\n\n\tfunction observableWithZodValidation>(\n\t\tvalue: z.output,\n\t\tschema: S\n\t): ZodValidatedObservable> {\n\t\tconst underlyingObservable = ko.observable(value);\n\n\t\tconst observable: ZodValidatedObservable = ko.pureComputed({\n\t\t\tread: underlyingObservable,\n\t\t\twrite: (newValue: T) => {\n\t\t\t\tconst validationResult = schema.safeParse(newValue);\n\t\t\t\tif (validationResult.success) {\n\t\t\t\t\tunderlyingObservable(validationResult.data);\n\t\t\t\t\tobservable.ameZodValidationError(null);\n\t\t\t\t\tobservable.ameValidationErrors([]);\n\t\t\t\t} else {\n\t\t\t\t\tobservable.ameZodValidationError(validationResult.error);\n\t\t\t\t\t//Convert Zod issues to ObservableValidationErrors.\n\t\t\t\t\tobservable.ameValidationErrors(validationResult.error.issues.map(issue => {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tcode: issue.code,\n\t\t\t\t\t\t\tmessage: issue.message\n\t\t\t\t\t\t} satisfies ObservableValidationError;\n\t\t\t\t\t}));\n\t\t\t\t}\n\t\t\t}\n\t\t}) as ZodValidatedObservable;\n\n\t\tobservable.ameZodValidationError = ko.observable(null);\n\t\tobservable.ameValidationErrors = ko.observable([] as ObservableValidationError[]);\n\t\tobservable.ameIsValid = ko.pureComputed(() => {\n\t\t\tconst errors = observable.ameValidationErrors();\n\t\t\treturn !errors || errors.length === 0;\n\t\t});\n\n\t\treturn observable;\n\t}\n\n\tclass ObservableThemeMetadata {\n\t\tpublic readonly pluginName: ZodValidatedObservable;\n\t\tpublic readonly shortDescription: ZodValidatedObservable;\n\t\tpublic readonly pluginSlug: ZodValidatedObservable;\n\t\tpublic readonly identifierPrefix: ZodValidatedObservable;\n\t\tpublic readonly pluginVersion: ZodValidatedObservable;\n\t\tpublic readonly pluginUrl: ZodValidatedObservable;\n\t\tpublic readonly authorName: ZodValidatedObservable;\n\t\tpublic readonly authorUrl: ZodValidatedObservable;\n\t\tpublic readonly requiredWpVersion: ZodValidatedObservable;\n\t\tpublic readonly testedWpVersion: ZodValidatedObservable;\n\t\tpublic readonly wasEverConfirmed: ZodValidatedObservable;\n\n\t\tconstructor(metadata: AdminThemeMetadata) {\n\t\t\tthis.pluginName = observableWithZodValidation(\n\t\t\t\tmetadata.pluginName,\n\t\t\t\tAdminThemeMetadata.shape.pluginName\n\t\t\t);\n\t\t\tthis.shortDescription = observableWithZodValidation(\n\t\t\t\tmetadata.shortDescription,\n\t\t\t\tAdminThemeMetadata.shape.shortDescription\n\t\t\t);\n\n\t\t\tthis.pluginSlug = observableWithZodValidation(\n\t\t\t\tmetadata.pluginSlug ?? '',\n\t\t\t\tAdminThemeMetadata.shape.pluginSlug\n\t\t\t);\n\t\t\tthis.identifierPrefix = observableWithZodValidation(\n\t\t\t\tmetadata.identifierPrefix ?? '',\n\t\t\t\tAdminThemeMetadata.shape.identifierPrefix\n\t\t\t);\n\n\t\t\tthis.pluginVersion = observableWithZodValidation(\n\t\t\t\tmetadata.pluginVersion ?? '',\n\t\t\t\tAdminThemeMetadata.shape.pluginVersion\n\t\t\t);\n\t\t\tthis.pluginUrl = observableWithZodValidation(\n\t\t\t\tmetadata.pluginUrl ?? '',\n\t\t\t\tAdminThemeMetadata.shape.pluginUrl\n\t\t\t);\n\t\t\tthis.authorName = observableWithZodValidation(\n\t\t\t\tmetadata.authorName ?? '',\n\t\t\t\tAdminThemeMetadata.shape.authorName\n\t\t\t);\n\t\t\tthis.authorUrl = observableWithZodValidation(\n\t\t\t\tmetadata.authorUrl ?? '',\n\t\t\t\tAdminThemeMetadata.shape.authorUrl\n\t\t\t);\n\t\t\tthis.requiredWpVersion = observableWithZodValidation(\n\t\t\t\tmetadata.requiredWpVersion ?? '',\n\t\t\t\tAdminThemeMetadata.shape.requiredWpVersion\n\t\t\t);\n\t\t\tthis.testedWpVersion = observableWithZodValidation(\n\t\t\t\tmetadata.testedWpVersion ?? '',\n\t\t\t\tAdminThemeMetadata.shape.testedWpVersion\n\t\t\t);\n\n\t\t\tthis.wasEverConfirmed = observableWithZodValidation(\n\t\t\t\tmetadata.wasEverConfirmed ?? false,\n\t\t\t\tAdminThemeMetadata.shape.wasEverConfirmed\n\t\t\t);\n\t\t}\n\n\t\tpublic toObject(): AdminThemeMetadata {\n\t\t\treturn {\n\t\t\t\tpluginName: this.pluginName(),\n\t\t\t\tshortDescription: this.shortDescription(),\n\t\t\t\tpluginSlug: this.pluginSlug(),\n\t\t\t\tidentifierPrefix: this.identifierPrefix(),\n\t\t\t\tpluginVersion: this.pluginVersion(),\n\t\t\t\tpluginUrl: this.pluginUrl(),\n\t\t\t\tauthorName: this.authorName(),\n\t\t\t\tauthorUrl: this.authorUrl(),\n\t\t\t\trequiredWpVersion: this.requiredWpVersion(),\n\t\t\t\ttestedWpVersion: this.testedWpVersion(),\n\t\t\t\twasEverConfirmed: this.wasEverConfirmed()\n\t\t\t};\n\t\t}\n\n\t\tisValid(): boolean {\n\t\t\t//This seems really inelegant, but I can't think of a better way to do it.\n\t\t\treturn this.pluginName.ameIsValid()\n\t\t\t\t&& this.shortDescription.ameIsValid()\n\t\t\t\t&& this.pluginSlug.ameIsValid()\n\t\t\t\t&& this.identifierPrefix.ameIsValid()\n\t\t\t\t&& this.pluginVersion.ameIsValid()\n\t\t\t\t&& this.pluginUrl.ameIsValid()\n\t\t\t\t&& this.authorName.ameIsValid()\n\t\t\t\t&& this.authorUrl.ameIsValid()\n\t\t\t\t&& this.requiredWpVersion.ameIsValid()\n\t\t\t\t&& this.testedWpVersion.ameIsValid()\n\t\t\t\t&& this.wasEverConfirmed.ameIsValid();\n\t\t}\n\t}\n\n\tenum MetadataDialogMode {\n\t\tDownload,\n\t\tEdit\n\t}\n\n\tclass DownloadThemeDialog extends AmeBaseKnockoutDialog {\n\t\tpublic readonly meta: KnockoutObservable;\n\t\tpublic readonly areFieldsEditable: KnockoutComputed;\n\t\tpublic readonly isOperationInProgress: KnockoutObservable = ko.observable(false);\n\n\t\tpublic readonly mode: KnockoutObservable = ko.observable(MetadataDialogMode.Download);\n\n\t\tautoCancelButton: boolean = true;\n\t\tisConfirmButtonEnabled: KnockoutObservable;\n\t\treadonly confirmButtonLabel: KnockoutObservable;\n\n\t\tadvancedOptionsVisible: KnockoutObservable = ko.observable(false);\n\t\tadvancedOptionsToggleLabel: KnockoutComputed;\n\n\t\thelpVisible: KnockoutObservable = ko.observable(false);\n\t\thelpToggleLabel: KnockoutComputed;\n\t\thelpContainerVisible: KnockoutComputed;\n\n\t\tchangesetName: KnockoutObservable = ko.observable('');\n\t\tmetadataJson: KnockoutObservable = ko.observable('');\n\t\tdownloadCookieName: KnockoutObservable = ko.observable('');\n\n\t\tpublic readonly adminThemeTexts: Required;\n\n\t\tprivate cleanupCurrentDownload: () => void = () => {\n\t\t};\n\n\t\tconstructor(\n\t\t\tprivate readonly getChangesetName: () => string,\n\t\t\tprivate readonly savePendingChangesetData: () => JQueryPromise,\n\t\t\tprivate readonly metadataObservable: KnockoutObservable,\n\t\t\tcustomAdminThemeTexts: AdminThemeTexts\n\t\t) {\n\t\t\tsuper();\n\t\t\tthis.options.minWidth = 400;\n\n\t\t\tthis.adminThemeTexts = {\n\t\t\t\t...{\n\t\t\t\t\tgeneratorCreditPhrase: 'generated using the Admin Menu Editor Pro plugin.',\n\t\t\t\t\tstandalonePluginNote: 'The result is a standalone plugin that you can use without Admin Menu Editor Pro.',\n\t\t\t\t},\n\t\t\t\t...customAdminThemeTexts\n\t\t\t}\n\n\t\t\tlet initialMetadata = metadataObservable();\n\t\t\tif (initialMetadata === null) {\n\t\t\t\tinitialMetadata = this.getSampleMetadata();\n\t\t\t}\n\n\t\t\tthis.meta = ko.observable(new ObservableThemeMetadata(initialMetadata));\n\n\t\t\tthis.confirmButtonLabel = ko.computed(() => {\n\t\t\t\tif (this.mode() === MetadataDialogMode.Download) {\n\t\t\t\t\treturn 'Download Admin Theme';\n\t\t\t\t}\n\t\t\t\treturn 'OK';\n\t\t\t});\n\n\t\t\tthis.isConfirmButtonEnabled = ko.computed(() => {\n\t\t\t\tif (this.isOperationInProgress()) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tif (getChangesetName() === '') {\n\t\t\t\t\t//To generate an admin theme, the changeset must have already been saved.\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\treturn this.meta().isValid();\n\t\t\t});\n\n\t\t\tthis.areFieldsEditable = ko.computed(() => {\n\t\t\t\treturn !this.isOperationInProgress();\n\t\t\t});\n\n\t\t\tthis.advancedOptionsToggleLabel = ko.pureComputed((): string => {\n\t\t\t\treturn this.advancedOptionsVisible() ? 'Fewer options' : 'More options';\n\t\t\t});\n\t\t\tthis.helpToggleLabel = ko.pureComputed((): string => {\n\t\t\t\treturn this.helpVisible() ? 'Hide info' : 'How it works';\n\t\t\t});\n\n\t\t\t//Hide the help container in download mode.\n\t\t\tthis.helpContainerVisible = ko.pureComputed((): boolean => {\n\t\t\t\treturn this.mode() === MetadataDialogMode.Download;\n\t\t\t});\n\n\t\t\tthis.mode.subscribe((newMode: MetadataDialogMode) => {\n\t\t\t\tif (newMode === MetadataDialogMode.Download) {\n\t\t\t\t\tthis.title('Generate admin theme');\n\t\t\t\t} else if (newMode === MetadataDialogMode.Edit) {\n\t\t\t\t\tthis.title('Edit admin theme properties');\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tprivate getSampleMetadata() {\n\t\t\treturn AdminThemeMetadata.parse({\n\t\t\t\tpluginName: 'Custom Admin Theme',\n\t\t\t\tshortDescription: 'A custom admin theme ' + this.adminThemeTexts.generatorCreditPhrase,\n\t\t\t\tpluginVersion: '1.0',\n\t\t\t});\n\t\t}\n\n\t\tonOpen(event: JQueryEventObject, ui: any): void {\n\t\t\tlet latestMetadata = this.metadataObservable();\n\t\t\tif (latestMetadata === null) {\n\t\t\t\tlatestMetadata = this.getSampleMetadata();\n\t\t\t}\n\t\t\tthis.meta(new ObservableThemeMetadata(latestMetadata));\n\t\t}\n\n\t\ttoggleAdvancedOptions(): void {\n\t\t\tthis.advancedOptionsVisible(!this.advancedOptionsVisible());\n\t\t}\n\n\t\ttoggleHelp(): void {\n\t\t\tthis.helpVisible(!this.helpVisible());\n\t\t}\n\n\t\tonConfirm(event: JQueryEventObject) {\n\t\t\tif (!this.meta().isValid()) {\n\t\t\t\t//This should never happen because the confirm button is disabled\n\t\t\t\t//when the metadata is invalid.\n\t\t\t\talert('Error: The admin theme details are not valid.');\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst metadata = this.meta().toObject();\n\t\t\tmetadata.wasEverConfirmed = true;\n\t\t\tthis.metadataObservable(metadata);\n\n\t\t\tif (this.mode() === MetadataDialogMode.Edit) {\n\t\t\t\t//That's all we need to do in edit mode.\n\t\t\t\tthis.isOpen(false);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.triggerDownloadWithErrorReporting(metadata);\n\t\t}\n\n\t\tpublic triggerDownloadWithErrorReporting(metadata: AdminThemeMetadata) {\n\t\t\tif (this.isOperationInProgress()) {\n\t\t\t\talert('Error: Another operation is already in progress.');\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.triggerDownload(metadata)\n\t\t\t\t.fail((error: string) => {\n\t\t\t\t\tif (error !== '') {\n\t\t\t\t\t\talert('Error: ' + error);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t}\n\n\t\tprivate triggerDownload(metadata: AdminThemeMetadata): JQueryPromise {\n\t\t\tconst deferred = $.Deferred();\n\n\t\t\t//Sanity checks.\n\t\t\t//Download mode still requires a saved changeset.\n\t\t\tconst changesetName = this.getChangesetName();\n\t\t\tif (changesetName === '') {\n\t\t\t\treturn deferred.reject('The changeset has not been saved yet (name is empty).').promise();\n\t\t\t}\n\n\t\t\tthis.isOperationInProgress(true);\n\n\t\t\tconst $form = $('#ame-ac-theme-download-request-form');\n\t\t\tconst $frame = $('#ame-ac-theme-download-frame');\n\n\t\t\t//Cancel the operation and re-enable buttons if the request takes too long.\n\t\t\tlet isCancelledOrDone: boolean = false;\n\t\t\tconst requestTimeoutMs = 30000;\n\t\t\tconst requestStartTime = (new Date()).getTime();\n\t\t\tlet statusCheckInterval: ReturnType | null = null;\n\n\t\t\tconst cleanup = this.cleanupCurrentDownload = () => {\n\t\t\t\tisCancelledOrDone = true;\n\n\t\t\t\t$frame.off('load.ameAcDownloadAdminTheme');\n\t\t\t\tif (timeoutTimer) {\n\t\t\t\t\tclearTimeout(timeoutTimer);\n\t\t\t\t}\n\t\t\t\tif (statusCheckInterval) {\n\t\t\t\t\tclearInterval(statusCheckInterval);\n\t\t\t\t}\n\t\t\t\t$frame.attr('src', 'about:blank');\n\n\t\t\t\tthis.isOperationInProgress(false);\n\n\t\t\t\tif (this.cleanupCurrentDownload === cleanup) {\n\t\t\t\t\tthis.cleanupCurrentDownload = () => {\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst timeoutTimer = setTimeout(() => {\n\t\t\t\tdeferred.reject('The download operation timed out.');\n\t\t\t\tcleanup();\n\t\t\t}, requestTimeoutMs);\n\n\t\t\tthis.savePendingChangesetData().then(\n\t\t\t\t() => {\n\t\t\t\t\tif (isCancelledOrDone) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.changesetName(changesetName);\n\t\t\t\t\tthis.metadataJson(JSON.stringify(metadata));\n\n\t\t\t\t\t//The server will set a cookie with a unique name that can be used\n\t\t\t\t\t//to check if the download has been initiated. Note that the user\n\t\t\t\t\t//can still cancel the download.\n\t\t\t\t\tconst cookieName = ('ameAcFileDownload_'\n\t\t\t\t\t\t+ new Date().getTime()\n\t\t\t\t\t\t+ '_'\n\t\t\t\t\t\t+ Math.round(Math.random() * 10000) //No dots allowed in these cookie names.\n\t\t\t\t\t);\n\t\t\t\t\tthis.downloadCookieName(cookieName);\n\n\t\t\t\t\t//Clear the frame to prevent the old response from being read.\n\t\t\t\t\t$frame.attr('src', 'about:blank');\n\t\t\t\t\ttry {\n\t\t\t\t\t\t$frame.contents().find('body').html('');\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t//Ignore but log cross-origin errors. These should not happen in practice.\n\t\t\t\t\t\tif (console && console.error) {\n\t\t\t\t\t\t\tconsole.error(e);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tstatusCheckInterval = setInterval(() => {\n\t\t\t\t\t\tconst cookieValue = $.cookie(cookieName);\n\t\t\t\t\t\tif (cookieValue) {\n\t\t\t\t\t\t\tcleanup();\n\t\t\t\t\t\t\t$.removeCookie(cookieName);\n\n\t\t\t\t\t\t\t//Close the dialog when the download starts.\n\t\t\t\t\t\t\tthis.isOpen(false);\n\t\t\t\t\t\t\tdeferred.resolve();\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ((new Date()).getTime() - requestStartTime > requestTimeoutMs) {\n\t\t\t\t\t\t\tcleanup();\n\t\t\t\t\t\t\tdeferred.reject('The download operation timed out.');\n\t\t\t\t\t\t}\n\t\t\t\t\t}, 1000);\n\n\t\t\t\t\t$frame.on('load.ameAcDownloadAdminTheme', () => {\n\t\t\t\t\t\t//Get the response from the frame. It should be JSON displayed as text.\n\t\t\t\t\t\tconst responseText = String($frame.contents().text()).trim();\n\t\t\t\t\t\tconst response = JSON.parse(responseText);\n\n\t\t\t\t\t\tcleanup();\n\n\t\t\t\t\t\tif ((response === null) || (typeof response !== 'object')) {\n\t\t\t\t\t\t\tdeferred.reject('Received an invalid response from the server.');\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (!response.success) {\n\t\t\t\t\t\t\t\tlet errorMessage;\n\t\t\t\t\t\t\t\tif (response.data.message) {\n\t\t\t\t\t\t\t\t\terrorMessage = response.data.message;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\terrorMessage = 'An unknown error occurred on the server.';\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdeferred.reject(errorMessage);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t//This should never happen in practice.\n\t\t\t\t\t\t\t\tdeferred.reject('The server did not start the download correctly.');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\t$form.trigger('submit');\n\t\t\t\t},\n\t\t\t\t() => {\n\t\t\t\t\tif (isCancelledOrDone) {\n\t\t\t\t\t\tif (deferred.state() === 'pending') {\n\t\t\t\t\t\t\tdeferred.reject(''); //No error message; the user probably cancelled the operation.\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tcleanup();\n\t\t\t\t\tdeferred.reject('Could not save the changeset data before generating an admin theme.');\n\t\t\t\t}\n\t\t\t);\n\n\t\t\treturn deferred.promise();\n\t\t}\n\n\t\tonClose(event: JQueryEventObject, ui: any) {\n\t\t\tthis.cleanupCurrentDownload();\n\t\t}\n\t}\n\n\t//endregion\n\n\tclass SectionNavigation {\n\t\tprivate sectionNavStack: KnockoutObservableArray = ko.observableArray([] as string[]);\n\t\tprivate $sectionList: JQuery;\n\n\t\tpublic readonly breadcrumbs: KnockoutObservable;\n\n\t\tconstructor() {\n\t\t\tthis.$sectionList = $('#ame-ac-container-collection');\n\n\t\t\tthis.$sectionList.on('click', '.ame-ac-section-link', (event) => {\n\t\t\t\tevent.preventDefault()\n\n\t\t\t\tif (event.currentTarget === null) {\n\t\t\t\t\treturn; //Shouldn't happen in practice, but let's satisfy the type checker.\n\t\t\t\t}\n\n\t\t\t\tconst targetId = $(event.currentTarget).data('target-id');\n\t\t\t\tif (targetId) {\n\t\t\t\t\tthis.navigateToSection(targetId);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis.$sectionList.on('click', '.ame-ac-section-back-button', (event) => {\n\t\t\t\tevent.preventDefault()\n\t\t\t\tthis.navigateBack();\n\t\t\t});\n\n\t\t\tthis.breadcrumbs = ko.pureComputed(() => {\n\t\t\t\treturn this.sectionNavStack()\n\t\t\t\t\t.map((sectionId) => $('#' + sectionId))\n\t\t\t\t\t.filter(($section) => $section.length > 0)\n\t\t\t\t\t.map(($section) => {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\ttitle: $section.find('.ame-ac-section-title .ame-ac-section-own-title')\n\t\t\t\t\t\t\t\t.first().text()\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t});\n\t\t}\n\n\t\tnavigateToSection(sectionElementId: string) {\n\t\t\tconst $section = $('#' + sectionElementId);\n\t\t\tif ($section.length === 0) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ($section.hasClass('ame-ac-current-section')) {\n\t\t\t\treturn; //Already on this section.\n\t\t\t}\n\n\t\t\t//If the requested section is in the navigation stack, navigate back\n\t\t\t//to it instead of putting more sections on the stack.\n\t\t\tconst stackIndex = this.sectionNavStack.indexOf(sectionElementId);\n\t\t\tif (stackIndex !== -1) {\n\t\t\t\twhile (this.sectionNavStack().length > stackIndex) {\n\t\t\t\t\tthis.navigateBack();\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst $previousSection = this.$sectionList.find('.ame-ac-current-section');\n\t\t\tif ($previousSection.length > 0) {\n\t\t\t\tthis.expectTransition($previousSection, '.ame-ac-section');\n\t\t\t\t$previousSection\n\t\t\t\t\t.removeClass('ame-ac-current-section')\n\t\t\t\t\t.addClass('ame-ac-previous-section');\n\t\t\t\tthis.sectionNavStack.push($previousSection.attr('id'));\n\n\t\t\t\t$previousSection.trigger('adminMenuEditor:leaveSection');\n\t\t\t}\n\n\t\t\tthis.expectTransition($section, '.ame-ac-section');\n\t\t\t$section.addClass('ame-ac-current-section');\n\n\t\t\t$section.trigger('adminMenuEditor:enterSection');\n\t\t}\n\n\t\tnavigateBack() {\n\t\t\tif (this.sectionNavStack().length < 1) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst $newCurrentSection = $('#' + this.sectionNavStack.pop());\n\t\t\tif ($newCurrentSection.length === 0) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst $oldCurrentSection = this.$sectionList.find('.ame-ac-current-section');\n\t\t\tthis.expectTransition($oldCurrentSection, '.ame-ac-section');\n\t\t\t$oldCurrentSection.removeClass('ame-ac-current-section ame-ac-previous-section');\n\t\t\t$oldCurrentSection.trigger('adminMenuEditor:leaveSection');\n\n\t\t\tconst $oldPreviousSection = this.$sectionList.find('.ame-ac-previous-section');\n\t\t\t$oldPreviousSection.removeClass('ame-ac-previous-section');\n\n\t\t\t//Show the new current section.\n\t\t\tthis.expectTransition($newCurrentSection, '.ame-ac-section');\n\t\t\t$newCurrentSection.addClass('ame-ac-current-section');\n\t\t\t$newCurrentSection.trigger('adminMenuEditor:enterSection');\n\n\t\t\t//The next section in the stack becomes the previous section.\n\t\t\tif (this.sectionNavStack().length > 0) {\n\t\t\t\tthis.$sectionList.find('#' + this.sectionNavStack()[this.sectionNavStack().length - 1])\n\t\t\t\t\t.addClass('ame-ac-previous-section');\n\t\t\t}\n\t\t}\n\n\t\t//Add a special class to sections when they have an active CSS transition.\n\t\t//This is used to keep both sections visible while the previous section\n\t\t//slides out and the next section slides in.\n\t\texpectTransition($element: JQuery, requiredSelector: string) {\n\t\t\tif (prefersReducedMotion) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ($element.data('ameHasTransitionEvents')) {\n\t\t\t\treturn; //Event handler(s) already added.\n\t\t\t}\n\n\t\t\tconst transitionEvents = 'transitionend transitioncancel';\n\n\t\t\t$element.addClass('ame-ac-transitioning');\n\n\t\t\tfunction transitionEndCallback(event: JQueryEventObject) {\n\t\t\t\t//Ignore events that bubble from child elements.\n\t\t\t\tif (!$(event.target).is(requiredSelector)) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t$element\n\t\t\t\t\t.off(transitionEvents, transitionEndCallback)\n\t\t\t\t\t.data('ameHasTransitionEvents', null)\n\t\t\t\t\t.removeClass('ame-ac-transitioning');\n\t\t\t}\n\n\t\t\t$element.data('ameHasTransitionEvents', true);\n\t\t\t$element.on(transitionEvents, transitionEndCallback);\n\t\t}\n\t}\n\n\texport interface NavigationBreadcrumb {\n\t\ttitle: string;\n\t}\n\n\t/**\n\t * Whether to ask for confirmation when the user tries to exit the customizer.\n\t */\n\tenum ExitPromptMode {\n\t\t/**\n\t\t * Ask if there are unsaved changes.\n\t\t */\n\t\tUnsavedChanges = 1,\n\n\t\t/**\n\t\t * Ask if the current changeset hasn't been published yet.\n\t\t */\n\t\tUnpublishedChanges = 2\n\t}\n\n\texport class AdminCustomizer extends AmeAdminCustomizerBase.AdminCustomizerBase implements CustomizableVmInterface {\n\t\tprivate readonly exitPromptMessage = 'Unsaved changes will be lost if you navigate away from this page.';\n\t\t//Admin themes generated by this plugin should be fairly small.\n\t\tprivate readonly maxImportFileSize = 500 * 1024;\n\n\t\tsectionNavigation: SectionNavigation;\n\t\tsettings: CustomizerSettingsCollection;\n\t\tpublic readonly interfaceStructure: InterfaceStructure;\n\n\t\tprivate readonly $previewFrame: JQuery;\n\n\t\t/**\n\t\t * Preview frame URL.\n\t\t */\n\t\tprivate currentPreviewUrl: string | null = null;\n\t\t/**\n\t\t * The default preview URL that can be used when the current frame URL cannot be detected.\n\t\t */\n\t\tprivate readonly initialPreviewUrl: string;\n\t\tprivate previewConnection: ReturnType | null = null;\n\t\tprivate readonly refreshPreviewNonce: string;\n\n\t\tprivate readonly $saveButton: JQuery;\n\n\t\tpublic readonly downloadThemeDialog: DownloadThemeDialog;\n\t\tprivate $extraActionMenu: JQuery | null = null;\n\t\tprivate $extraActionButton: JQuery | null = null;\n\n\t\tprivate $importFileInput: JQuery | null = null;\n\t\tprivate isImporting: KnockoutObservable = ko.observable(false);\n\t\tprivate lastImportReport: KnockoutObservable = ko.observable(null);\n\t\tprivate isImportReportVisible: KnockoutObservable = ko.observable(true);\n\n\t\tprivate isDiscardingChanges: KnockoutObservable = ko.observable(false);\n\n\t\tpublic readonly isGeneralOverlayVisible: KnockoutObservable;\n\n\t\tprivate readonly importActionEnabled: KnockoutComputed;\n\t\tprivate readonly discardChangesActionEnabled: KnockoutComputed;\n\t\tprivate readonly downloadThemeActionEnabled: KnockoutComputed;\n\n\t\tprivate readonly customBasePath: string | null;\n\t\tprivate readonly consoleLoggingEnabled: boolean;\n\t\tprivate readonly exitPromptMode: ExitPromptMode;\n\n\t\tprivate readonly downloadOnlyIfChangesetIsNonEmpty: boolean;\n\n\t\tconstructor(scriptData: ScriptData) {\n\t\t\tsuper(scriptData);\n\n\t\t\tthis.settings = new CustomizerSettingsCollection(\n\t\t\t\tscriptData.ajaxUrl,\n\t\t\t\tscriptData.saveChangesetNonce,\n\t\t\t\tscriptData.trashChangesetNonce,\n\t\t\t\tscriptData.changesetName,\n\t\t\t\tscriptData.changesetItemCount,\n\t\t\t\tscriptData.changesetStatus\n\t\t\t);\n\t\t\t_.forOwn(scriptData.settings, (data, id) => {\n\t\t\t\tif (typeof id === 'string') {\n\t\t\t\t\tthis.settings.add(unserializeSetting(id, data));\n\t\t\t\t}\n\t\t\t});\n\t\t\tif (scriptData.changesetThemeMetadata) {\n\t\t\t\tthis.settings.addInitialThemeMetadata(scriptData.changesetThemeMetadata);\n\t\t\t}\n\n\t\t\tthis.customBasePath = scriptData.customBasePath || null;\n\t\t\tthis.consoleLoggingEnabled = scriptData.isWpDebugEnabled || false;\n\t\t\tthis.downloadOnlyIfChangesetIsNonEmpty = scriptData.downloadOnlyIfChangesetIsNonEmpty || false;\n\n\t\t\tif ((typeof scriptData.exitPromptMode === 'number') && (scriptData.exitPromptMode in ExitPromptMode)) {\n\t\t\t\tthis.exitPromptMode = scriptData.exitPromptMode;\n\t\t\t} else {\n\t\t\t\tthis.exitPromptMode = ExitPromptMode.UnpublishedChanges;\n\t\t\t}\n\n\t\t\tlet sectionIdCounter = 0;\n\n\t\t\tthis.interfaceStructure = unserializeUiElement(\n\t\t\t\tscriptData.interfaceStructure,\n\t\t\t\tthis.settings.get.bind(this.settings),\n\t\t\t\t(data: AnySpecificElementData) => {\n\t\t\t\t\tswitch (data.t) {\n\t\t\t\t\t\tcase 'section':\n\t\t\t\t\t\t\tdata.component = 'ame-ac-section';\n\t\t\t\t\t\t\t//All sections must have unique IDs for navigation to work.\n\t\t\t\t\t\t\tif (!data.id) {\n\t\t\t\t\t\t\t\tdata.id = 'autoID-' + (++sectionIdCounter);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'control-group':\n\t\t\t\t\t\t\tdata.component = 'ame-ac-control-group';\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'control':\n\t\t\t\t\t\t\t//Tell controls that use number inputs to position the popup\n\t\t\t\t\t\t\t//slider within the customizer sidebar.\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t(data.component === 'ame-number-input')\n\t\t\t\t\t\t\t\t|| (data.component === 'ame-box-dimensions')\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tdata.params = data.params || {};\n\t\t\t\t\t\t\t\tdata.params.popupSliderWithin = '#ame-ac-sidebar-content';\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t//Replace regular separators with AC-specific ones.\n\t\t\t\t\t\t\tif (data.component === 'ame-horizontal-separator') {\n\t\t\t\t\t\t\t\tdata.component = 'ame-ac-separator';\n\t\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t);\n\n\t\t\t//Remove the reload parameter from the URL. It is only used to avoid\n\t\t\t//caching issues, and is not needed otherwise.\n\t\t\tconst currentUrl = new URL(window.location.href);\n\t\t\tif (currentUrl.searchParams.get('_ame-ac-reload') !== null) {\n\t\t\t\tcurrentUrl.searchParams.delete('_ame-ac-reload');\n\t\t\t\twindow.history.replaceState({}, '', currentUrl.href);\n\t\t\t}\n\n\t\t\t//Also remove the \"request new changeset\" parameter.\n\t\t\tif (currentUrl.searchParams.get('_ame-ac-new-changeset') !== null) {\n\t\t\t\tcurrentUrl.searchParams.delete('_ame-ac-new-changeset');\n\t\t\t\twindow.history.replaceState({}, '', currentUrl.href);\n\t\t\t}\n\n\t\t\tconst changesetPathTemplate: string | null = scriptData.changesetPathTemplate;\n\t\t\tconst changesetPlaceholder = '{changeset}';\n\n\t\t\tfunction addChangesetToUrl(currentUrl: string, changesetName: string): URL {\n\t\t\t\tconst url = new URL(currentUrl);\n\t\t\t\tif (changesetPathTemplate) {\n\t\t\t\t\turl.pathname = changesetPathTemplate.replace(changesetPlaceholder, changesetName);\n\t\t\t\t\t//With a custom path, the \"page\" parameter that points to the AC\n\t\t\t\t\t//admin page is not necessary and would be confusing.\n\t\t\t\t\turl.searchParams.delete('page');\n\t\t\t\t\t//When the changeset name is stored in the path, the \"ame-ac-changeset\"\n\t\t\t\t\t//parameter is no longer needed, and could be out of sync with the path.\n\t\t\t\t\turl.searchParams.delete('ame-ac-changeset');\n\t\t\t\t} else {\n\t\t\t\t\turl.searchParams.set('ame-ac-changeset', changesetName);\n\t\t\t\t}\n\t\t\t\treturn url;\n\t\t\t}\n\n\t\t\tfunction getChangesetFromUrl(url: string): string {\n\t\t\t\tconst parsedUrl = new URL(url);\n\t\t\t\tif (changesetPathTemplate) {\n\t\t\t\t\tfunction escapeRegExp(input: string): string {\n\t\t\t\t\t\treturn input.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n\t\t\t\t\t}\n\n\t\t\t\t\tconst placeholderStart = changesetPathTemplate.indexOf(changesetPlaceholder);\n\t\t\t\t\tconst placeholderEnd = placeholderStart + changesetPlaceholder.length;\n\n\t\t\t\t\tconst changesetPathTemplateRegex = new RegExp(\n\t\t\t\t\t\t'^' + escapeRegExp(changesetPathTemplate.slice(0, placeholderStart))\n\t\t\t\t\t\t+ '([^a-zA-Z0-9]+)'\n\t\t\t\t\t\t+ escapeRegExp(changesetPathTemplate.slice(placeholderEnd))\n\t\t\t\t\t);\n\n\t\t\t\t\tconst match = parsedUrl.pathname.match(changesetPathTemplateRegex);\n\t\t\t\t\treturn match ? match[1] : '';\n\t\t\t\t} else {\n\t\t\t\t\treturn parsedUrl.searchParams.get('ame-ac-changeset') ?? '';\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t//Add the changeset name to the URL (if not already present).\n\t\t\tif (getChangesetFromUrl(window.location.href) !== this.settings.changesetName()) {\n\t\t\t\tconst newUrl = addChangesetToUrl(window.location.href, this.settings.changesetName());\n\t\t\t\twindow.history.replaceState({}, '', newUrl.href);\n\t\t\t}\n\n\t\t\t//When the changeset name changes, also change the URL.\n\t\t\tthis.settings.changesetName.subscribe((changesetName) => {\n\t\t\t\tconst url = addChangesetToUrl(window.location.href, changesetName);\n\t\t\t\tif (scriptData.changesetPushStateEnabled) {\n\t\t\t\t\twindow.history.pushState({}, '', url.href);\n\t\t\t\t} else {\n\t\t\t\t\twindow.history.replaceState({}, '', url.href);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis.$saveButton = $('#ame-ac-apply-changes');\n\n\t\t\t//The save button should be enabled when:\n\t\t\t// - There are non-zero changes in the current changeset.\n\t\t\t// - All settings are valid.\n\t\t\t// - The changeset is not in the process of being published, deleted, etc.\n\t\t\t// - The contents of the changeset can be modified (e.g. not already published).\n\t\t\tconst isSaveButtonEnabled = ko.pureComputed(() => {\n\t\t\t\tconst changeset = this.settings.getCurrentChangeset();\n\t\t\t\treturn (\n\t\t\t\t\tchangeset.isNonEmpty()\n\t\t\t\t\t&& changeset.canBeModified()\n\t\t\t\t\t&& !this.settings.isExclusiveOperationInProgress()\n\t\t\t\t\t&& !this.settings.hasValidationErrors()\n\t\t\t\t);\n\t\t\t});\n\t\t\t//Update button state when the customizer loads.\n\t\t\tthis.$saveButton.prop('disabled', !isSaveButtonEnabled());\n\t\t\t//And also on changes.\n\t\t\tisSaveButtonEnabled.subscribe((isEnabled) => {\n\t\t\t\tthis.$saveButton.prop('disabled', !isEnabled);\n\t\t\t\t//Change the text back to the default when the button is enabled.\n\t\t\t\tif (isEnabled) {\n\t\t\t\t\tthis.$saveButton.val(this.$saveButton.data('default-text') ?? 'Save Changes');\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t//Handle the \"Save Changes\" button.\n\t\t\tthis.$saveButton.on('click', () => {\n\t\t\t\t//Show the spinner.\n\t\t\t\tconst $spinner = $('#ame-ac-primary-actions .spinner');\n\t\t\t\t$spinner.css('visibility', 'visible').show();\n\n\t\t\t\tconst publishFailNoticeId = 'ame-ac-publish-failed-notice';\n\t\t\t\t//Remove the previous error notification, if any.\n\t\t\t\t$('#' + publishFailNoticeId).remove();\n\n\t\t\t\tconst promise = this.settings.publishChangeset();\n\n\t\t\t\tpromise.fail((error) => {\n\t\t\t\t\t//Show a dismissible error notification.\n\t\t\t\t\tlet message = 'An unexpected error occurred while saving changes.';\n\t\t\t\t\tif (typeof error === 'string') {\n\t\t\t\t\t\tmessage = error;\n\t\t\t\t\t} else if (error instanceof Error) {\n\t\t\t\t\t\tmessage = error.message;\n\t\t\t\t\t} else if (typeof error.responseJSON === 'object') {\n\t\t\t\t\t\tmessage = _.get(error.responseJSON, ['data', 'message'], message);\n\t\t\t\t\t}\n\n\t\t\t\t\tconst $notice = $('
    ')\n\t\t\t\t\t\t.attr('id', publishFailNoticeId)\n\t\t\t\t\t\t.addClass('notice notice-error is-dismissible')\n\t\t\t\t\t\t.text(message);\n\n\t\t\t\t\t//WordPress won't automatically add the dismiss button to a dynamically\n\t\t\t\t\t//generated notice like this, so we have to do it.\n\t\t\t\t\t$notice.append(\n\t\t\t\t\t\t$('')\n\t\t\t\t\t\t\t.append('Dismiss this notice')\n\t\t\t\t\t\t\t.on('click', (event) => {\n\t\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\t\t$notice.remove(); //Not as fancy as WP does it.\n\t\t\t\t\t\t\t})\n\t\t\t\t\t);\n\n\t\t\t\t\tconst $container = $('#ame-ac-global-notification-area');\n\t\t\t\t\t$container.append($notice);\n\t\t\t\t})\n\n\t\t\t\tpromise.done(() => {\n\t\t\t\t\tthis.$saveButton.val(this.$saveButton.data('published-text') ?? 'Saved');\n\n\t\t\t\t\t//The preview could be stale. For example, the color scheme module\n\t\t\t\t\t//switches between \"actual\" and \"preview\" color schemes dynamically,\n\t\t\t\t\t//but the \"actual\" scheme could change after applying new settings.\n\t\t\t\t\t//Let's reload the preview frame to make sure it's up-to-date.\n\t\t\t\t\tthis.queuePreviewFrameReload();\n\t\t\t\t});\n\n\t\t\t\tpromise.always(() => {\n\t\t\t\t\t$spinner.css('visibility', 'hidden');\n\t\t\t\t});\n\t\t\t});\n\n\t\t\t//Prevent the user from interacting with settings while the changeset is being modified.\n\t\t\tthis.settings.isExclusiveOperationInProgress.subscribe((isInProgress) => {\n\t\t\t\t$('#ame-ac-sidebar-blocker-overlay').toggle(isInProgress);\n\t\t\t});\n\n\t\t\t//Show a general overlay with a progress spinner while something is happening.\n\t\t\tthis.isGeneralOverlayVisible = ko.pureComputed(() => {\n\t\t\t\treturn this.isImporting() || this.isDiscardingChanges();\n\t\t\t});\n\n\t\t\t//Initialize the \"download admin theme\" dialog.\n\t\t\tthis.downloadThemeDialog = new DownloadThemeDialog(\n\t\t\t\t() => this.settings.getCurrentChangeset().name(),\n\t\t\t\t() => this.settings.savePendingSettings(),\n\t\t\t\tthis.settings.adminThemeMetadata,\n\t\t\t\tscriptData\n\t\t\t);\n\n\t\t\t//Toggle available extra actions based on changeset status.\n\t\t\tthis.importActionEnabled = ko.pureComputed(() => {\n\t\t\t\tconst changeset = this.settings.getCurrentChangeset();\n\t\t\t\treturn changeset && changeset.canBeModified()\n\t\t\t\t\t&& !this.settings.isExclusiveOperationInProgress();\n\t\t\t});\n\t\t\tthis.importActionEnabled.subscribe((isEnabled) => {\n\t\t\t\tif (this.$extraActionMenu) {\n\t\t\t\t\tthis.$extraActionMenu.find('.ame-ac-import-theme-action')\n\t\t\t\t\t\t.toggleClass('ui-state-disabled', !isEnabled);\n\t\t\t\t}\n\t\t\t});\n\t\t\tthis.discardChangesActionEnabled = ko.pureComputed(() => {\n\t\t\t\tconst changeset = this.settings.getCurrentChangeset();\n\t\t\t\treturn changeset && changeset.isNonEmpty() && changeset.canBeModified()\n\t\t\t\t\t&& !this.settings.isExclusiveOperationInProgress()\n\t\t\t});\n\t\t\tthis.discardChangesActionEnabled.subscribe((isEnabled) => {\n\t\t\t\tif (this.$extraActionMenu) {\n\t\t\t\t\tthis.$extraActionMenu.find('.ame-ac-discard-changes-action')\n\t\t\t\t\t\t.toggleClass('ui-state-disabled', !isEnabled);\n\t\t\t\t}\n\t\t\t});\n\t\t\tthis.downloadThemeActionEnabled = ko.pureComputed(() => {\n\t\t\t\treturn (\n\t\t\t\t\t!this.settings.isExclusiveOperationInProgress()\n\t\t\t\t\t&& !this.downloadThemeDialog.isOperationInProgress()\n\t\t\t\t\t//The changeset must already be saved for the download to work,\n\t\t\t\t\t//which means it should have a name.\n\t\t\t\t\t&& (this.settings.getCurrentChangeset().name() !== '')\n\t\t\t\t\t&& (\n\t\t\t\t\t\t//Optionally, the download can be restricted to non-empty changesets.\n\t\t\t\t\t\t!this.downloadOnlyIfChangesetIsNonEmpty\n\t\t\t\t\t\t|| this.settings.getCurrentChangeset().isNonEmpty()\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t\t});\n\t\t\tthis.downloadThemeActionEnabled.subscribe((isEnabled) => {\n\t\t\t\tif (this.$extraActionMenu) {\n\t\t\t\t\tthis.$extraActionMenu.find('.ame-ac-download-theme-action')\n\t\t\t\t\t\t.toggleClass('ui-state-disabled', !isEnabled);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis.sectionNavigation = new SectionNavigation();\n\n\t\t\t//Set up the preview frame.\n\t\t\tthis.$previewFrame = $('iframe#ame-ac-preview');\n\n\t\t\tthis.initialPreviewUrl = scriptData.initialPreviewUrl;\n\t\t\tthis.refreshPreviewNonce = scriptData.refreshPreviewNonce;\n\n\t\t\tthis.$previewFrame.on('load', () => {\n\t\t\t\tthis.isFrameLoading = false;\n\n\t\t\t\t//The URL that was actually loaded might not match the one that\n\t\t\t\t//was requested (e.g. because there was a redirect).\n\t\t\t\tthis.currentPreviewUrl = null;\n\n\t\t\t\t//Close the previous postMessage connection.\n\t\t\t\tif (this.previewConnection) {\n\t\t\t\t\tthis.previewConnection.disconnect();\n\t\t\t\t\tthis.previewConnection = null;\n\t\t\t\t}\n\n\t\t\t\tconst frame = this.$previewFrame.get(0) as HTMLIFrameElement;\n\t\t\t\tif (!frame || !(frame instanceof HTMLIFrameElement)) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t//Try to get the preview URL from the iframe.\n\t\t\t\ttry {\n\t\t\t\t\tconst url = frame.contentWindow?.location.href;\n\t\t\t\t\tif (url) {\n\t\t\t\t\t\tthis.currentPreviewUrl = url;\n\t\t\t\t\t}\n\t\t\t\t} catch (e) {\n\t\t\t\t\t//We can't get the URL directly, probably because it's a cross-origin iframe.\n\t\t\t\t}\n\n\t\t\t\tthis.previewConnection = AmeAcCommunicator.connectToChild(\n\t\t\t\t\tframe,\n\t\t\t\t\t{\n\t\t\t\t\t\t'setPreviewUrl': (url: string) => {\n\t\t\t\t\t\t\tif (this.isPreviewableUrl(url)) {\n\t\t\t\t\t\t\t\tthis.previewUrl = url;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t'notifyPreviewUrlChanged': (url: string) => {\n\t\t\t\t\t\t\tthis.currentPreviewUrl = url;\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tthis.allowedCommOrigins,\n\t\t\t\t\tscriptData.isWpDebugEnabled\n\t\t\t\t);\n\n\t\t\t\tthis.previewConnection.promise.then((connection) => {\n\t\t\t\t\tif (typeof connection === 'undefined') {\n\t\t\t\t\t\t//This should never happen, but the type checker doesn't know that.\n\t\t\t\t\t\tthrow new Error('Unexpected error: Connection apparently succeeded, but the connection object is undefined');\n\t\t\t\t\t}\n\n\t\t\t\t\tconnection.execute('getCurrentUrl').then((url) => {\n\t\t\t\t\t\tif (url && (typeof url === 'string')) {\n\t\t\t\t\t\t\tthis.currentPreviewUrl = url;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\t//Notify other scripts that the preview frame is loaded and\n\t\t\t\t\t//the postMessage connection is ready for use.\n\t\t\t\t\t$('body').trigger('adminMenuEditor:acPreviewConnectionReady');\n\t\t\t\t});\n\t\t\t});\n\n\t\t\tthis.previewUrl = this.initialPreviewUrl;\n\n\t\t\t//Notify other scripts. This lets them register custom controls and so on.\n\t\t\t$('#ame-ac-admin-customizer').trigger('adminMenuEditor:acRegister', [this]);\n\n\t\t\tconst throttledReloadPreview = _.throttle(\n\t\t\t\t() => {\n\t\t\t\t\tthis.queuePreviewFrameReload();\n\t\t\t\t},\n\t\t\t\t1000, //The reload method does its own throttling, so we use a low wait time here.\n\t\t\t\t{leading: true, trailing: true}\n\t\t\t);\n\n\t\t\t//Refresh the preview when any setting changes.\n\t\t\tthis.settings.addChangeListener((setting, newValue) => {\n\t\t\t\tif (\n\t\t\t\t\tsetting.supportsPostMessage\n\t\t\t\t\t&& this.previewConnection\n\t\t\t\t\t&& this.previewConnection.isConnected\n\t\t\t\t) {\n\t\t\t\t\tthis.previewConnection.execute('previewSetting', setting.id, newValue);\n\t\t\t\t} else {\n\t\t\t\t\tlet reason: string = 'Unknown';\n\t\t\t\t\tif (!setting.supportsPostMessage) {\n\t\t\t\t\t\treason = 'Setting \"' + setting.id + '\" does not support postMessage';\n\t\t\t\t\t} else if (!this.previewConnection) {\n\t\t\t\t\t\treason = 'No preview connection';\n\t\t\t\t\t} else if (!this.previewConnection.isConnected) {\n\t\t\t\t\t\treason = 'Preview connection is not connected';\n\t\t\t\t\t}\n\t\t\t\t\tthis.log('Reloading the preview frame because: ' + reason);\n\n\t\t\t\t\tthrottledReloadPreview();\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tconst registerUnloadPrompt = () => {\n\t\t\t\t//Ask for confirmation when the user tries to leave the page and the changeset\n\t\t\t\t//has unpublished/unsaved changes.\n\t\t\t\t$(window).on('beforeunload.ame-ac-exit-confirm', (event) => {\n\t\t\t\t\tif (this.isExitPromptNeeded()) {\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t//Note: The confirmation prompt will only be displayed if the user\n\t\t\t\t\t\t//has interacted with the page (e.g. clicked something).\n\n\t\t\t\t\t\t//As of this writing, MDN says that some browsers still don't support triggering\n\t\t\t\t\t\t//an \"unsaved changes\" prompt with event.preventDefault(). You need to set\n\t\t\t\t\t\t//event.returnValue to a string or return a string from the event handler.\n\t\t\t\t\t\t//Modern browsers will ignore the content and display their own generic message.\n\t\t\t\t\t\treturn this.exitPromptMessage;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t/*\n\t\t\t Allegedly, registering a beforeunload handler can cause the browser to\n\t\t\t disable some optimizations, so let's only do it when the user changes\n\t\t\t something or the changeset already contains some changes.\n\t\t\t */\n\t\t\tif (this.settings.getCurrentChangeset().isNonEmpty()) {\n\t\t\t\tregisterUnloadPrompt();\n\t\t\t} else {\n\t\t\t\tconst listenerId = this.settings.addChangeListener(() => {\n\t\t\t\t\t//Remove the listener after it has been triggered once.\n\t\t\t\t\tthis.settings.removeChangeListener(listenerId);\n\t\t\t\t\tregisterUnloadPrompt();\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tgetSettingObservable(settingId: string, defaultValue: any): KnockoutObservable {\n\t\t\t//Let's just implement this temporarily while working on refactoring this\n\t\t\t//stuff to use KO components.\n\t\t\treturn this.settings\n\t\t\t\t.get(settingId)\n\t\t\t\t.map(setting => setting.value)\n\t\t\t\t.getOrElse(ko.observable(defaultValue));\n\t\t}\n\n\t\tgetAllSettingValues(): Record {\n\t\t\tthrow new Error('Method not implemented.');\n\t\t}\n\n\t\tget previewUrl(): string | null {\n\t\t\treturn this.currentPreviewUrl;\n\t\t}\n\n\t\tset previewUrl(url: string | null) {\n\t\t\tif (url === this.currentPreviewUrl) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t//The URL starts out as null, but it cannot be set to NULL again after\n\t\t\t//the preview frame has been loaded.\n\t\t\tif (url === null) {\n\t\t\t\tthrow new Error('Cannot directly set preview URL to null');\n\t\t\t}\n\n\t\t\tif (this.isPreviewableUrl(url)) {\n\t\t\t\tthis.navigatePreviewFrame(url);\n\t\t\t}\n\t\t}\n\n\t\tprivate navigatePreviewFrame(url: string | null = null, forceReload: boolean = false) {\n\t\t\tconst oldUrl = this.previewUrl;\n\t\t\tif (url === null) {\n\t\t\t\turl = oldUrl ?? this.initialPreviewUrl;\n\t\t\t}\n\n\t\t\tconst isSameUrl = (oldUrl === url);\n\t\t\tif (isSameUrl && !forceReload) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t//If there are any unsaved changes, let's include them in the preview by simulating\n\t\t\t//a form submission and sending the changes as form data. The server-side component\n\t\t\t//will merge these changes with existing changeset data.\n\t\t\tconst unsavedChanges = this.settings.unsavedChanges;\n\t\t\tconst simulateFormSubmission = !_.isEmpty(unsavedChanges);\n\n\t\t\tconst parsedUrl = new URL(url);\n\n\t\t\t//If we're not using form submission, add a special parameter\n\t\t\t//to the URL to force a refresh.\n\t\t\tconst refreshParam = '_ame-ac-refresh-trigger';\n\t\t\tif (isSameUrl && !simulateFormSubmission) {\n\t\t\t\tparsedUrl.searchParams.set(refreshParam, Date.now() + '_' + Math.random());\n\t\t\t} else {\n\t\t\t\t//Otherwise, remove the parameter just to be safe.\n\t\t\t\tparsedUrl.searchParams.delete(refreshParam);\n\t\t\t}\n\n\t\t\t//Ensure that the changeset used in the preview matches the current\n\t\t\t//changeset and preview is enabled. This is just a precaution. Normally,\n\t\t\t//the preview script automatically changes link URLs.\n\t\t\tlet changesetName = this.settings.changesetName();\n\t\t\tif (changesetName === '') {\n\t\t\t\t//Use a special value if the changeset hasn't been saved yet.\n\t\t\t\tchangesetName = TemporaryChangesetName;\n\t\t\t}\n\t\t\tparsedUrl.searchParams.set('ame-ac-changeset', changesetName);\n\t\t\tparsedUrl.searchParams.set('ame-ac-preview', '1');\n\n\t\t\tthis.hasPendingPreviewReload = false; //Reloading now, so no longer pending.\n\t\t\tthis.isFrameLoading = true;\n\n\t\t\t//console.info('navigatePreviewFrame: Navigating to ' + parsedUrl.href);\n\t\t\tif (simulateFormSubmission) {\n\t\t\t\tconst formData = {\n\t\t\t\t\taction: 'ws_ame_ac_refresh_preview_frame',\n\t\t\t\t\t\"ame-ac-changeset\": changesetName,\n\t\t\t\t\tmodified: JSON.stringify(unsavedChanges),\n\t\t\t\t\tnonce: this.refreshPreviewNonce\n\t\t\t\t}\n\n\t\t\t\tconst $form = $('')\n\t\t\t\t\t.attr('method', 'post')\n\t\t\t\t\t.attr('action', parsedUrl.href)\n\t\t\t\t\t.attr('target', 'ame-ac-preview-frame')\n\t\t\t\t\t.appendTo('body');\n\n\t\t\t\tlet key: keyof typeof formData;\n\t\t\t\tfor (key in formData) {\n\t\t\t\t\tconst value = formData[key];\n\t\t\t\t\t$('')\n\t\t\t\t\t\t.attr('type', 'hidden')\n\t\t\t\t\t\t.attr('name', key)\n\t\t\t\t\t\t.val(value)\n\t\t\t\t\t\t.appendTo($form);\n\t\t\t\t}\n\n\t\t\t\tthis.currentPreviewUrl = parsedUrl.href;\n\t\t\t\t$form.trigger('submit');\n\t\t\t\t$form.remove();\n\t\t\t} else {\n\t\t\t\tthis.currentPreviewUrl = parsedUrl.href;\n\t\t\t\tthis.$previewFrame.attr('src', this.currentPreviewUrl);\n\t\t\t}\n\t\t}\n\n\t\tprivate _isFrameLoading: boolean = false;\n\t\tprivate frameLoadingTimeoutId: number | null = null;\n\t\tprivate lastPreviewLoadTimestamp: Date = new Date(0);\n\n\t\tprivate reloadWaitTimeoutId: number | null = null;\n\t\tprivate hasPendingPreviewReload: boolean = false;\n\n\t\tprivate set isFrameLoading(isLoading: boolean) {\n\t\t\tconst wasLoadingBefore = this._isFrameLoading;\n\t\t\tif (!isLoading && (isLoading === wasLoadingBefore)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t//In some circumstances, we may start to load a new URL before\n\t\t\t//the previous one has finished loading. This is valid and should\n\t\t\t//reset the load timeout.\n\n\t\t\t$('#ame-ac-preview-refresh-indicator').toggleClass('ame-ac-show-indicator', isLoading);\n\t\t\tif (this.frameLoadingTimeoutId) {\n\t\t\t\tclearTimeout(this.frameLoadingTimeoutId);\n\t\t\t\tthis.frameLoadingTimeoutId = null;\n\t\t\t}\n\n\t\t\tif (isLoading) {\n\t\t\t\t//As a precaution, we'll assume that if the frame doesn't load in a reasonable\n\t\t\t\t//time, it will never finish loading.\n\t\t\t\tthis.frameLoadingTimeoutId = window.setTimeout(() => {\n\t\t\t\t\tif (this.isFrameLoading) {\n\t\t\t\t\t\tthis.isFrameLoading = false;\n\t\t\t\t\t}\n\t\t\t\t}, 20000);\n\t\t\t}\n\t\t\tthis._isFrameLoading = isLoading;\n\n\t\t\tif (wasLoadingBefore && !isLoading) {\n\t\t\t\tthis.lastPreviewLoadTimestamp = new Date();\n\t\t\t}\n\n\t\t\t//Once the frame is loaded, trigger any pending reload.\n\t\t\tif (!isLoading && this.hasPendingPreviewReload) {\n\t\t\t\tthis.hasPendingPreviewReload = false;\n\t\t\t\tthis.queuePreviewFrameReload();\n\t\t\t}\n\t\t}\n\n\t\tpublic get isFrameLoading(): boolean {\n\t\t\treturn this._isFrameLoading;\n\t\t}\n\n\t\tprivate queuePreviewFrameReload() {\n\t\t\tif (this.reloadWaitTimeoutId) {\n\t\t\t\treturn; //The frame will reload soon.\n\t\t\t}\n\n\t\t\tif (this.isFrameLoading) {\n\t\t\t\tthis.hasPendingPreviewReload = true;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t//To avoid stressing the server, wait at least X ms after the last\n\t\t\t//load completes before reloading the frame.\n\t\t\tconst reloadWaitTime = 2000;\n\t\t\tconst now = new Date();\n\t\t\tconst timeSinceLastLoad = now.getTime() - this.lastPreviewLoadTimestamp.getTime();\n\t\t\tif (timeSinceLastLoad < reloadWaitTime) {\n\t\t\t\tthis.reloadWaitTimeoutId = window.setTimeout(() => {\n\t\t\t\t\tthis.reloadWaitTimeoutId = null;\n\t\t\t\t\tthis.queuePreviewFrameReload();\n\t\t\t\t}, reloadWaitTime - timeSinceLastLoad);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t//Actually reload the frame.\n\t\t\tthis.navigatePreviewFrame(null, true);\n\t\t}\n\n\t\tonBindingsApplied(rootElement: HTMLElement) {\n\t\t\t//Navigate to the root section. In the current implementation this can't happen\n\t\t\t//until bindings have been applied, so it's not part of the constructor.\n\t\t\tthis.navigateToRootSection();\n\n\t\t\t//Initialize the action menu.\n\t\t\tthis.$extraActionButton = jQuery('#ame-ac-extra-actions-trigger', rootElement);\n\t\t\tthis.$extraActionMenu = jQuery('#ame-ac-extra-actions-menu', rootElement).menu();\n\n\t\t\t//Update menu states.\n\t\t\tthis.importActionEnabled.notifySubscribers(this.importActionEnabled());\n\t\t\tthis.discardChangesActionEnabled.notifySubscribers(this.discardChangesActionEnabled());\n\t\t\tthis.downloadThemeActionEnabled.notifySubscribers(this.downloadThemeActionEnabled());\n\n\t\t\t//Get the file picker.\n\t\t\tthis.$importFileInput = jQuery('#ame-ac-import-admin-theme-file', rootElement);\n\t\t}\n\n\t\tnavigateToRootSection() {\n\t\t\tthis.sectionNavigation.navigateToSection('ame-ac-section-structure-root');\n\t\t}\n\n\t\t// noinspection JSUnusedGlobalSymbols -- Used in at least one add-on.\n\t\t/**\n\t\t * Execute an RPC method in the preview frame.\n\t\t *\n\t\t * @param {string} methodName\n\t\t * @param {*} args\n\t\t */\n\t\texecuteRpcMethod(methodName: string, ...args: any): JQueryPromise {\n\t\t\tif (!this.previewConnection || !this.previewConnection.isConnected) {\n\t\t\t\treturn $.Deferred().reject('The preview frame is not connected.').promise();\n\t\t\t}\n\t\t\treturn this.previewConnection.execute(methodName, ...args);\n\t\t}\n\n\t\tconfirmExit() {\n\t\t\tif (this.isExitPromptNeeded()) {\n\t\t\t\tif (window.confirm(this.exitPromptMessage)) {\n\t\t\t\t\t//Remove the confirmation prompt that appears when leaving the page.\n\t\t\t\t\t//We don't want to show two prompts.\n\t\t\t\t\t$(window).off('beforeunload.ame-ac-exit-confirm');\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\n\t\tprivate isExitPromptNeeded(): boolean {\n\t\t\tconst changeset = this.settings.getCurrentChangeset();\n\n\t\t\t//No need to save anything if the changeset is empty.\n\t\t\tif (!changeset.isNonEmpty()) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tswitch (this.exitPromptMode) {\n\t\t\t\tcase ExitPromptMode.UnpublishedChanges:\n\t\t\t\t\treturn (\n\t\t\t\t\t\t!changeset.wasPublished()\n\t\t\t\t\t\t&& (changeset.status() !== 'trash') //Can't publish a trashed changeset.\n\t\t\t\t\t);\n\t\t\t\tcase ExitPromptMode.UnsavedChanges:\n\t\t\t\t\tconst unsavedChanges = this.settings.unsavedChanges;\n\t\t\t\t\treturn !_.isEmpty(unsavedChanges);\n\t\t\t\tdefault:\n\t\t\t\t\treturn false;\n\t\t\t}\n\n\t\t}\n\n\t\t// noinspection JSUnusedGlobalSymbols -- Used in the Knockout template.\n\t\ttoggleExtraActionMenu() {\n\t\t\tif (!this.$extraActionMenu) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.$extraActionMenu.toggle();\n\n\t\t\tif (this.$extraActionMenu.is(':visible')) {\n\t\t\t\t//Position the menu below the button.\n\t\t\t\tconst $button = $('#ame-ac-extra-actions-trigger');\n\t\t\t\tthis.$extraActionMenu.position({\n\t\t\t\t\tmy: 'right top',\n\t\t\t\t\tat: 'right bottom',\n\t\t\t\t\tof: $button,\n\t\t\t\t\tcollision: 'flipfit'\n\t\t\t\t});\n\n\t\t\t\t//Hide the menu when the user clicks outside the menu or the button.\n\t\t\t\t$(document).on('mousedown.ameAcExtraMenuHide', this.handleClickOutsideActionMenu.bind(this));\n\t\t\t} else {\n\t\t\t\t//Remove the click listener if it's still active.\n\t\t\t\t$(document).off('mousedown.ameAcExtraMenuHide');\n\t\t\t}\n\t\t}\n\n\t\thandleClickOutsideActionMenu(event: JQueryEventObject) {\n\t\t\tif (\n\t\t\t\t!this.$extraActionMenu\n\t\t\t\t|| !this.$extraActionMenu.is(':visible')\n\t\t\t\t|| !this.$extraActionButton\n\t\t\t) {\n\t\t\t\t//The event listener should not be active if the menu is not visible.\n\t\t\t\t$(document).off('mousedown.ameAcExtraMenuHide');\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst menuElement = this.$extraActionMenu.get(0);\n\t\t\tconst buttonElement = this.$extraActionButton.get(0);\n\t\t\tconst isClickOutsideMenu = !menuElement.contains(event.target);\n\t\t\tconst isClickOutsideButton = !buttonElement.contains(event.target);\n\n\t\t\tif (isClickOutsideMenu && isClickOutsideButton) {\n\t\t\t\tthis.hideExtraActionMenu();\n\t\t\t}\n\t\t}\n\n\t\tprivate hideExtraActionMenu() {\n\t\t\tif (!this.$extraActionMenu) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.$extraActionMenu.hide();\n\t\t\t//Stop listening for clicks outside the menu.\n\t\t\t$(document).off('mousedown.ameAcExtraMenuHide');\n\t\t}\n\n\t\tprivate openMetadataDialog(mode: MetadataDialogMode) {\n\t\t\tthis.downloadThemeDialog.mode(mode);\n\t\t\tthis.downloadThemeDialog.isOpen(true);\n\t\t\tthis.isImportReportVisible(false);\n\t\t\tthis.hideExtraActionMenu();\n\t\t}\n\n\t\tactionOpenDownloadDialog() {\n\t\t\tif (!this.downloadThemeActionEnabled()) {\n\t\t\t\talert('Currently disabled because there are no changes to download.');\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.openMetadataDialog(MetadataDialogMode.Download);\n\t\t}\n\n\t\t// noinspection JSUnusedGlobalSymbols -- Used in another plugin.\n\t\tactionEditOrDownloadTheme() {\n\t\t\tif (!this.downloadThemeActionEnabled()) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t//If the user hasn't confirmed the theme metadata yet, show the dialog.\n\t\t\tconst metadata = this.settings.adminThemeMetadata();\n\t\t\tif ((metadata === null) || !metadata.wasEverConfirmed) {\n\t\t\t\tthis.openMetadataDialog(MetadataDialogMode.Download);\n\t\t\t} else {\n\t\t\t\tthis.downloadThemeDialog.triggerDownloadWithErrorReporting(metadata);\n\t\t\t}\n\t\t}\n\n\t\t// noinspection JSUnusedGlobalSymbols -- Used in another plugin.\n\t\tactionOpenMetadataDialog() {\n\t\t\tthis.openMetadataDialog(MetadataDialogMode.Edit);\n\t\t}\n\n\t\tactionOpenImportDialog() {\n\t\t\tif (!this.importActionEnabled()) {\n\t\t\t\t//Can't import if there is no changeset or the changeset can't be edited.\n\t\t\t\t//The menu item should be disabled in this case, but we'll check anyway.\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tthis.hideExtraActionMenu();\n\n\t\t\t//Allow the default action to proceed, which will open the file picker.\n\t\t\treturn true;\n\t\t}\n\n\t\tactionDiscardChanges() {\n\t\t\tif (!this.discardChangesActionEnabled()) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.hideExtraActionMenu();\n\n\t\t\tif (this.settings.isExclusiveOperationInProgress()) {\n\t\t\t\talert('Another operation is in progress. Please wait for it to complete before discarding changes.');\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (!confirm('Are you sure you want to discard your unsaved changes?')) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.isImportReportVisible(false);\n\t\t\tthis.isDiscardingChanges(true);\n\n\t\t\tthis.settings.trashChangeset()\n\t\t\t\t.then(() => {\n\t\t\t\t\t//Reload the customizer with a new changeset.\n\t\t\t\t\tconst url = new URL(window.location.href);\n\t\t\t\t\tif (this.customBasePath) {\n\t\t\t\t\t\turl.pathname = this.customBasePath;\n\t\t\t\t\t\turl.search = '';\n\t\t\t\t\t} else {\n\t\t\t\t\t\t//To get the customizer's base URL, get the current URL\n\t\t\t\t\t\t//and remove all query parameters except \"page\".\n\t\t\t\t\t\tconst page = url.searchParams.get('page');\n\t\t\t\t\t\turl.search = '';\n\t\t\t\t\t\turl.searchParams.set('page', page || 'ame-admin-customizer');\n\t\t\t\t\t}\n\t\t\t\t\t//Notify the customizer that we definitely want a new changeset;\n\t\t\t\t\t//don't try to load a draft.\n\t\t\t\t\turl.searchParams.set('_ame-ac-new-changeset', '1');\n\n\t\t\t\t\t//Don't need the hash.\n\t\t\t\t\turl.hash = '';\n\n\t\t\t\t\t//Add a random parameter to force a reload.\n\t\t\t\t\turl.searchParams.set('_ame-ac-reload', Math.random().toString(36).substring(7));\n\n\t\t\t\t\t//Navigate to the new URL.\n\t\t\t\t\twindow.location.href = url.toString();\n\n\t\t\t\t\t//Note that the isDiscardingChanges flag is not reset here,\n\t\t\t\t\t//so the progress overlay will stay visible until the page reloads.\n\t\t\t\t})\n\t\t\t\t.fail((requestObject) => {\n\t\t\t\t\tlet message: string = requestObject.statusText || 'Unknown error.';\n\n\t\t\t\t\tif (typeof requestObject.responseJSON === 'object') {\n\t\t\t\t\t\tconst customMessage = _.get(requestObject.responseJSON, ['data', 'message']);\n\t\t\t\t\t\tif (typeof customMessage === 'string') {\n\t\t\t\t\t\t\tmessage = customMessage;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\talert('Error: ' + message);\n\t\t\t\t\tthis.isDiscardingChanges(false);\n\t\t\t\t});\n\t\t}\n\n\t\thandleImportFileSelection() {\n\t\t\tif (!this.$importFileInput) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst fileInput = this.$importFileInput.get(0) as HTMLInputElement;\n\t\t\tif (!fileInput || !fileInput.files || (fileInput.files.length < 1)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t//Get the first file. Normally, there should only be one.\n\t\t\tconst selectedFile = fileInput.files.item(0);\n\t\t\tif (!selectedFile) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t//Limit the file size.\n\t\t\tif (selectedFile.size > this.maxImportFileSize) {\n\t\t\t\talert(\n\t\t\t\t\t'Error: The selected file is too large. The maximum file size is '\n\t\t\t\t\t+ Math.round(this.maxImportFileSize / 1024) + ' KiB'\n\t\t\t\t);\n\t\t\t\t//Clear the file input.\n\t\t\t\tthis.$importFileInput.val('');\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.isImporting(true);\n\t\t\tthis.lastImportReport(null);\n\n\t\t\tJSZip.loadAsync(selectedFile).then(\n\t\t\t\t(zip) => {\n\t\t\t\t\tconst metadataFileRegex = /^([\\\\/]?[a-zA-Z0-9_-]+[\\\\/])metadata\\.json$/;\n\t\t\t\t\tconst foundMetadataFiles = zip.file(metadataFileRegex);\n\t\t\t\t\tif (!foundMetadataFiles || (foundMetadataFiles.length < 1)) {\n\t\t\t\t\t\tthrow new Error('The selected file is not an admin theme generated by this tool.');\n\t\t\t\t\t}\n\t\t\t\t\tconst metadataFile = foundMetadataFiles[0];\n\n\t\t\t\t\t//Get the directory name and separator from the metadata file path.\n\t\t\t\t\t//The prefix will usually be something like \"admin-theme-slug/\".\n\t\t\t\t\tconst matches = metadataFileRegex.exec(metadataFile.name);\n\t\t\t\t\tlet directoryPrefix: string;\n\t\t\t\t\tif (!matches || (matches.length < 2)) {\n\t\t\t\t\t\tthrow new Error('The directory structure of this ZIP file is not recognized.');\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdirectoryPrefix = matches[1];\n\t\t\t\t\t}\n\n\t\t\t\t\tconst settingsFile = zip.file(directoryPrefix + 'settings.json');\n\t\t\t\t\tif (!settingsFile) {\n\t\t\t\t\t\tthrow new Error('The selected ZIP file is missing a settings.json file.');\n\t\t\t\t\t}\n\n\t\t\t\t\t//Read both files.\n\t\t\t\t\treturn Promise.all([\n\t\t\t\t\t\tmetadataFile.async('string'),\n\t\t\t\t\t\tsettingsFile.async('string')\n\t\t\t\t\t]);\n\t\t\t\t},\n\t\t\t\t(error) => {\n\t\t\t\t\tconst errorMessage = error.message || error;\n\t\t\t\t\tthrow new Error('Error reading \"' + selectedFile.name + '\": ' + errorMessage);\n\t\t\t\t}\n\t\t\t).then((fileContents) => {\n\t\t\t\tif (!fileContents) {\n\t\t\t\t\tthrow new Error('Failed to read settings and metadata from the ZIP file.');\n\t\t\t\t}\n\n\t\t\t\tconst metadata = this.parseImportedAdminThemeFile(\n\t\t\t\t\tfileContents[0],\n\t\t\t\t\t'metadata.json',\n\t\t\t\t\tAdminThemeMetadata\n\t\t\t\t);\n\t\t\t\tconst settings = this.parseImportedAdminThemeFile(\n\t\t\t\t\tfileContents[1],\n\t\t\t\t\t'settings.json',\n\t\t\t\t\tAdminThemeSettings\n\t\t\t\t);\n\t\t\t\tconst report = new AdminThemeImportReport(selectedFile.name, metadata);\n\n\t\t\t\t//Import metadata.\n\t\t\t\tthis.downloadThemeDialog.meta(new ObservableThemeMetadata(metadata));\n\n\t\t\t\t//Import settings.\n\t\t\t\tfor (const [settingId, value] of Object.entries(settings)) {\n\t\t\t\t\treport.totalSettings++;\n\n\t\t\t\t\tconst foundSetting = this.settings.get(settingId);\n\t\t\t\t\tfoundSetting.forEach((setting) => {\n\t\t\t\t\t\tconst oldValue = setting.value();\n\t\t\t\t\t\tconst errors = setting.tryUpdate(value);\n\t\t\t\t\t\tif (errors && errors.length) {\n\t\t\t\t\t\t\treport.invalidSettings++;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treport.importedSettings++;\n\t\t\t\t\t\t\tif (oldValue != value) {\n\t\t\t\t\t\t\t\treport.differentImportedSettings++;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\tif (foundSetting.isEmpty()) {\n\t\t\t\t\t\treport.skippedSettings++;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tthis.lastImportReport(report);\n\t\t\t\tthis.isImportReportVisible(true);\n\n\t\t\t}).catch((error) => {\n\t\t\t\t//Error handling: Show the error message to the user.\n\t\t\t\tlet errorMessage: string;\n\t\t\t\tif (error instanceof Error) {\n\t\t\t\t\terrorMessage = error.message;\n\t\t\t\t} else {\n\t\t\t\t\terrorMessage = String(error);\n\t\t\t\t}\n\t\t\t\talert('Error: ' + errorMessage);\n\t\t\t}).finally(() => {\n\t\t\t\tthis.isImporting(false);\n\t\t\t\tthis.$importFileInput?.val('');\n\t\t\t});\n\t\t}\n\n\t\tprivate parseImportedAdminThemeFile(\n\t\t\tcontent: string,\n\t\t\tname: string,\n\t\t\tschema: T\n\t\t): ReturnType {\n\t\t\ttry {\n\t\t\t\tconst parsedJson = JSON.parse(content);\n\t\t\t\treturn schema.parse(parsedJson);\n\t\t\t} catch (error) {\n\t\t\t\tlet errorMessage: string;\n\t\t\t\tif (error instanceof ZodError) {\n\t\t\t\t\t//Convert issues to a newline-separated string.\n\t\t\t\t\terrorMessage = error.issues.map((issue) => {\n\t\t\t\t\t\treturn issue.path.join('.') + ': ' + issue.message;\n\t\t\t\t\t}).join('\\n');\n\t\t\t\t} else if (error instanceof Error) {\n\t\t\t\t\terrorMessage = error.message;\n\t\t\t\t} else {\n\t\t\t\t\terrorMessage = String(error);\n\t\t\t\t}\n\t\t\t\t//Add the file name to the error message.\n\t\t\t\tthrow new Error('Error parsing ' + name + ':\\n' + errorMessage);\n\t\t\t}\n\t\t}\n\n\t\tdismissImportReport(): void {\n\t\t\tthis.isImportReportVisible(false);\n\t\t}\n\n\t\tlog(message: any): void {\n\t\t\tif (this.consoleLoggingEnabled && console && console.log) {\n\t\t\t\tconsole.log(message);\n\t\t\t}\n\t\t}\n\t}\n}\n\ndeclare global {\n\tinterface Window {\n\t\twsAdminCustomizer: AmeAdminCustomizer.AdminCustomizer;\n\t}\n}\n\njQuery(function () {\n\t//Give other scripts a chance to load before we start.\n\t//Some of them also use jQuery to run when the DOM is ready.\n\tsetTimeout(() => {\n\t\twindow.wsAdminCustomizer = new AmeAdminCustomizer.AdminCustomizer(wsAmeAdminCustomizerData);\n\t\tconst rootElement = document.getElementById('ame-ac-admin-customizer');\n\t\tif (rootElement === null) {\n\t\t\tthrow new Error('The root element for the admin customizer was not found.');\n\t\t}\n\n\t\tko.applyBindings(window.wsAdminCustomizer, rootElement);\n\n\t\t//Notify the customizer that bindings have been applied. It needs to do some\n\t\t//additional setup that can't be done until the DOM structure is ready.\n\t\tsetTimeout(() => {\n\t\t\twindow.wsAdminCustomizer.onBindingsApplied(rootElement);\n\t\t}, 5); //Components are rendered asynchronously.\n\t}, 20);\n});","'use strict';\nexport var AmeAdminCustomizerBase;\n(function (AmeAdminCustomizerBase) {\n class AdminCustomizerBase {\n constructor(scriptData) {\n this.allowedCommOrigins = scriptData.allowedCommOrigins;\n if (this.allowedCommOrigins.length === 0) {\n this.allowedCommOrigins = [window.location.origin];\n }\n this.allowedPreviewUrls = scriptData.allowedPreviewUrls;\n this.parsedAllowedUrls = this.allowedPreviewUrls.map(url => new URL(url));\n }\n isPreviewableUrl(url) {\n if (typeof url === 'string') {\n url = new URL(url);\n }\n if (typeof url.protocol === 'undefined') {\n return false;\n }\n //Only HTTP(S) links are previewable.\n if ((url.protocol !== 'http:') && (url.protocol !== 'https:')) {\n return false;\n }\n //Check against the list of allowed URLs.\n for (const allowedUrl of this.parsedAllowedUrls) {\n //Protocol and host must match. The path must start with the path\n //of the allowed URL (possibly without a trailing slash).\n if ((url.protocol === allowedUrl.protocol) && (url.host === allowedUrl.host)) {\n const allowedPath = allowedUrl.pathname.replace(/\\/$/, '');\n if (url.pathname.indexOf(allowedPath) === 0) {\n return true;\n }\n }\n }\n return false;\n }\n }\n AmeAdminCustomizerBase.AdminCustomizerBase = AdminCustomizerBase;\n})(AmeAdminCustomizerBase || (AmeAdminCustomizerBase = {}));\n//# sourceMappingURL=admin-customizer-base.js.map","import { AmeAcSection } from './ame-ac-section.js';\nimport { createComponentConfig } from '../../../pro-customizables/ko-components/control-base.js';\nclass AmeAcContentSection extends AmeAcSection {\n constructor(params, $element) {\n super(params, $element);\n if ((typeof params.parentSectionLevel === 'function') && ko.isObservable(params.parentSectionLevel)) {\n this.parentSectionLevel = params.parentSectionLevel;\n }\n else {\n this.parentSectionLevel = null;\n }\n this.contentSectionLevel = ko.pureComputed(() => {\n let parentLevel = 0;\n if (this.parentSectionLevel !== null) {\n parentLevel = this.parentSectionLevel();\n }\n return parentLevel + 1;\n });\n //Tell child sections about our section level.\n this.childComponents().forEach((child) => {\n if (child.name === 'ame-ac-content-section') {\n child.params.parentSectionLevel = this.contentSectionLevel;\n }\n });\n this.sectionLevelClass = ko.pureComputed(() => {\n const level = this.contentSectionLevel();\n return 'ame-ac-content-section-' + level;\n });\n }\n}\nexport default createComponentConfig(AmeAcContentSection, `\n\t
  • \n\t\t

    \t\n\t
  • \t\n\t\n\t\t\n\t\t\n`);\n//# sourceMappingURL=ame-ac-content-section.js.map","import { ComponentBindingOptions, createComponentConfig, KoContainerViewModel } from '../../../pro-customizables/ko-components/control-base.js';\nimport { AmeCustomizable } from '../../../pro-customizables/assets/customizable.js';\nvar ControlGroup = AmeCustomizable.ControlGroup;\nclass AmeAcControlGroup extends KoContainerViewModel {\n constructor(params, $element) {\n var _a, _b;\n super(params, $element);\n this.labelFor = (_b = ((_a = this.uiElement) === null || _a === void 0 ? void 0 : _a.labelFor)) !== null && _b !== void 0 ? _b : null;\n this.titleDisabled = (typeof params.titleDisabled !== 'undefined') ? (!!params.titleDisabled) : false;\n }\n getExpectedUiElementType() {\n return ControlGroup;\n }\n mapChildToComponentBinding(child) {\n if (child.component) {\n return ComponentBindingOptions.fromElement(child);\n }\n return super.mapChildToComponentBinding(child);\n }\n}\nexport default createComponentConfig(AmeAcControlGroup, `\n\t
  • \n\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\t
      \n\t\t\t
    • \n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t
    • \t\t\n\t\t
    \n\t
  • \n`);\n//# sourceMappingURL=ame-ac-control-group.js.map","import { createComponentConfig, KoControlViewModel } from '../../../pro-customizables/ko-components/control-base.js';\nimport { AmeCustomizable } from '../../../pro-customizables/assets/customizable.js';\nvar Control = AmeCustomizable.Control;\nclass MissingComponentError extends Error {\n constructor(uiElement) {\n super(`The UI element \"${uiElement.label}\" [${uiElement.id}] is missing a component name.`);\n this.uiElement = uiElement;\n }\n}\nclass AmeAcControl extends KoControlViewModel {\n constructor(params, $element) {\n super(params, $element);\n //uiElement is required for this component.\n if (!this.uiElement) {\n throw new Error('The uiElement parameter is required for AmeAcControl');\n }\n this.wrapperLabelEnabled = (this.uiElement.label !== '') && (!this.uiElement.includesOwnLabel);\n this.labelForId = this.uiElement.labelTargetId;\n if (!this.uiElement.component) {\n throw new MissingComponentError(this.uiElement);\n }\n }\n getExpectedUiElementType() {\n return Control;\n }\n}\nexport default createComponentConfig(AmeAcControl, `\n\t
  • \n\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t
  • \n`);\n//# sourceMappingURL=ame-ac-control.js.map","import { createComponentConfig, KoContainerViewModel } from '../../../pro-customizables/ko-components/control-base.js';\nimport { AmeCustomizable } from '../../../pro-customizables/assets/customizable.js';\nvar Section = AmeCustomizable.Section;\nimport { AmeAcSection } from './ame-ac-section.js';\nclass AmeAcSectionLink extends KoContainerViewModel {\n constructor(params, $element) {\n super(params, $element);\n //uiElement is required for this component.\n if (!this.uiElement) {\n throw new Error('The uiElement parameter is required for AmeAcSectionLink');\n }\n this.targetElementId = AmeAcSection.getSectionElementId(this.uiElement);\n this.elementId = AmeAcSection.getSectionLinkElementId(this.uiElement);\n }\n getExpectedUiElementType() {\n return Section;\n }\n}\nexport default createComponentConfig(AmeAcSectionLink, `\n\t
  • \n\t\t

    \n\t
  • \n`);\n//# sourceMappingURL=ame-ac-section-link.js.map","import { ComponentBindingOptions, createComponentConfig, KoContainerViewModel } from '../../../pro-customizables/ko-components/control-base.js';\nimport { AmeCustomizable } from '../../../pro-customizables/assets/customizable.js';\nvar Section = AmeCustomizable.Section;\nvar Control = AmeCustomizable.Control;\nvar ControlGroup = AmeCustomizable.ControlGroup;\nexport class AmeAcSection extends KoContainerViewModel {\n constructor(params, $element) {\n super(params, $element);\n //Must have an uiElement.\n if (this.uiElement === null) {\n throw new Error('AmeAcSection must have an uiElement.');\n }\n this.elementId = AmeAcSection.getSectionElementId(this.uiElement);\n if ((typeof params.breadcrumbs !== 'undefined') && ko.isObservable(params.breadcrumbs)) {\n this.breadcrumbs = params.breadcrumbs;\n }\n else {\n this.breadcrumbs = null;\n }\n //To keep the header text alignment consistent when navigating between sections,\n //let's show something even if there are no breadcrumbs.\n const defaultEmptyBreadcrumbText = 'Admin Menu Editor Pro';\n //Let other modules change the default text.\n let filteredEmptyBreadcrumbText = null;\n if (wp && wp.hooks && wp.hooks.applyFilters) {\n filteredEmptyBreadcrumbText = wp.hooks.applyFilters('adminMenuEditor.ac.emptyBreadcrumbText', defaultEmptyBreadcrumbText);\n }\n const emptyBreadcrumbText = ((typeof filteredEmptyBreadcrumbText === 'string')\n ? filteredEmptyBreadcrumbText\n : defaultEmptyBreadcrumbText);\n this.breadcrumbText = ko.pureComputed(() => {\n if (this.breadcrumbs === null) {\n return emptyBreadcrumbText;\n }\n const breadcrumbs = this.breadcrumbs();\n if (breadcrumbs.length < 1) {\n return emptyBreadcrumbText;\n }\n let titles = breadcrumbs.map(crumb => crumb.title);\n //Show the root section differently, \"Admin Customizer\" is too long.\n //Not sure about what text to use here, could matching the Theme Customizer be confusing?\n //Alternatives: 🛠️🎨, use \\uFE0E to render the emoji without colors (only works for some).\n //Alternatives: ⋯ and …\n titles[0] = 'Customizing';\n //Due to space constraints, show only the last 2 breadcrumbs.\n if (titles.length > 2) {\n titles = titles.slice(titles.length - 2);\n }\n return titles.join(' \\u25B8 ');\n });\n }\n getExpectedUiElementType() {\n return Section;\n }\n mapChildToComponentBinding(child) {\n if (child instanceof Section) {\n if (child.preferredRole === 'content') {\n return ComponentBindingOptions.fromElement(child, 'ame-ac-content-section');\n }\n else {\n return ComponentBindingOptions.fromElement(child, 'ame-ac-section-link');\n }\n }\n else if (child instanceof ControlGroup) {\n return ComponentBindingOptions.fromElement(child, 'ame-ac-control-group');\n }\n else if ((child instanceof Control)\n && (['ame-ac-separator', 'ame-horizontal-separator'].indexOf(child.component) < 0)) {\n //Wrap each control in a control group if it's not already in one.\n //Separators are an exception because they're cosmetic and need different styling.\n const controlGroup = child.createControlGroup();\n return this.mapChildToComponentBinding(controlGroup);\n }\n else {\n return ComponentBindingOptions.fromElement(child);\n }\n }\n static getSectionElementId(section) {\n return AmeAcSection.generateSectionElementId(section, 'ame-ac-section-');\n }\n static getSectionLinkElementId(section) {\n return AmeAcSection.generateSectionElementId(section, 'ame-ac-slink-');\n }\n static generateSectionElementId(section, prefix) {\n if (section.id) {\n return prefix + section.id;\n }\n const slug = section.title.toLowerCase().replace(/[^a-z0-9]/g, '-');\n if (slug !== '') {\n return prefix + slug;\n }\n throw new Error('Cannot generate a section element ID because the section does not have an ID or a title.');\n }\n dispose() {\n super.dispose();\n this.childComponents.dispose();\n }\n}\nexport default createComponentConfig(AmeAcSection, `\n\t
      \n\t\t\n\t\t\n\t\t\t\n\t\t\n\t
    \n`);\n//# sourceMappingURL=ame-ac-section.js.map","import { createComponentConfig, KoStandaloneControl } from '../../../pro-customizables/ko-components/control-base.js';\nclass AmeAcSeparator extends KoStandaloneControl {\n constructor(params, $element) {\n super(params, $element);\n }\n}\nexport default createComponentConfig(AmeAcSeparator, `\n\t
  • \n`);\n//# sourceMappingURL=ame-ac-separator.js.map","import { createRendererComponentConfig, KoRendererViewModel } from '../../../pro-customizables/ko-components/control-base.js';\nimport { AmeCustomizable } from '../../../pro-customizables/assets/customizable.js';\nvar Section = AmeCustomizable.Section;\nclass AmeAcStructure extends KoRendererViewModel {\n constructor(params, $element) {\n var _a;\n super(params, $element);\n this.allNavigationSections = [];\n const rootSection = new Section({\n t: 'section',\n id: 'structure-root',\n title: (_a = this.structure.title) !== null && _a !== void 0 ? _a : 'Root',\n }, this.structure.children);\n //Recursively collect all navigable sections. Don't include content\n //sections: their parents will output them, not this component.\n function collectChildSections(section, accumulator = []) {\n if (section.preferredRole === 'navigation') {\n accumulator.push(section);\n }\n for (const child of section.children) {\n if (child instanceof Section) {\n collectChildSections(child, accumulator);\n }\n }\n return accumulator;\n }\n this.allNavigationSections = collectChildSections(rootSection);\n //Give the breadcrumb list to each section, if available.\n if (typeof params.breadcrumbs !== 'undefined') {\n for (const section of this.allNavigationSections) {\n section.componentParams.breadcrumbs = params.breadcrumbs;\n }\n }\n }\n}\nexport default createRendererComponentConfig(AmeAcStructure, `\n\t\n\t\t\n\t\n`);\n//# sourceMappingURL=ame-ac-structure.js.map","import { createComponentConfig, KoStandaloneControl } from '../../../pro-customizables/ko-components/control-base.js';\nclass AmeAcValidationErrors extends KoStandaloneControl {\n constructor(params, $element) {\n super(params, $element);\n if (typeof params.errors !== 'undefined') {\n if (Array.isArray(params.errors)) {\n this.errors = params.errors;\n }\n else if (ko.isObservable(params.errors)) {\n this.errors = params.errors;\n }\n else {\n throw new Error('The \"errors\" parameter must be an array or an observable array.');\n }\n }\n else {\n console.log('Params:', params);\n throw new Error('The \"errors\" parameter is required for the AmeAcValidationErrors component.');\n }\n }\n}\nexport default createComponentConfig(AmeAcValidationErrors, `\n\t
      \n\t\t
    • \n\t\t\t\n\t\t
    • \n\t
    \n`);\n//# sourceMappingURL=ame-ac-validation-errors.js.map","'use strict';\nimport { createControlComponentConfig, KoStandaloneControl } from '../control-base.js';\nimport { LazyPopupSliderAdapter } from '../lazy-popup-slider-adapter.js';\nconst allDimensionKeys = [\n 'top', 'bottom', 'left', 'right',\n 'topLeft', 'topRight', 'bottomLeft', 'bottomRight'\n];\nfunction isDimensionKey(key) {\n return allDimensionKeys.includes(key);\n}\nconst DefaultDimensionsInOrder = [\n ['top', 'Top'],\n ['bottom', 'Bottom'],\n ['left', 'Left'],\n ['right', 'Right'],\n];\nconst SideDimensions = ['top', 'bottom', 'left', 'right'];\nconst SymmetricDimensionMap = {\n 'vertical': ['top', 'bottom'],\n 'horizontal': ['left', 'right'],\n};\nfunction isSymmetricDimensionKey(key) {\n return SymmetricDimensionMap.hasOwnProperty(key);\n}\nlet nextId = 0;\nclass AmeBoxDimensions extends KoStandaloneControl {\n constructor(params, $element) {\n super(params, $element);\n this.inputIdPrefix = '_ame-box-dimensions-c-input-' + (nextId++);\n this.unitElementId = '_ame-box-dimensions-c-unit-' + (nextId++);\n this.wrapperAttributes = {};\n if ((typeof params.id === 'string') && (params.id !== '')) {\n this.wrapperAttributes['id'] = '_ame-box-dimensions-w-' + params.id;\n }\n if ((typeof params['dimensionNames'] !== 'undefined') && Array.isArray(params['dimensionNames'])) {\n this.dimensionsInOrder = params['dimensionNames'];\n }\n else {\n this.dimensionsInOrder = DefaultDimensionsInOrder;\n }\n //Make observable proxies for the individual dimension settings.\n const temp = {};\n for (const [dimensionKey, dimensionName] of this.dimensionsInOrder) {\n const setting = this.settings['value.' + dimensionKey];\n if (!setting || (typeof setting !== 'object')) {\n throw new Error(`Missing setting for the \"${dimensionName}\" side.`);\n }\n temp[dimensionKey] = ko.computed({\n read: () => {\n return setting.value();\n },\n write: (newValue) => {\n if (newValue === '') {\n newValue = null;\n }\n setting.value(newValue);\n },\n deferEvaluation: true,\n }).extend({ 'ameNumericInput': true });\n }\n this.dimensions = temp;\n //Similarly, make an observable for the unit setting.\n const unitSetting = this.settings['value.unit'];\n if (!unitSetting || (typeof unitSetting !== 'object')) {\n throw new Error('Missing setting for the unit.');\n }\n this.unitSetting = unitSetting;\n const defaultDropdownOptions = {\n options: [],\n optionsText: 'text',\n optionsValue: 'value'\n };\n if (params.unitDropdownOptions && (typeof params.unitDropdownOptions === 'object')) {\n const unitDropdownOptions = params.unitDropdownOptions;\n this.unitDropdownOptions = {\n options: unitDropdownOptions['options'] || defaultDropdownOptions.options,\n optionsText: unitDropdownOptions['optionsText'] || defaultDropdownOptions.optionsText,\n optionsValue: unitDropdownOptions['optionsValue'] || defaultDropdownOptions.optionsValue,\n };\n }\n else {\n this.unitDropdownOptions = defaultDropdownOptions;\n }\n this.isLinkActive = ko.observable(false);\n //Enable the link button by default if all dimensions are equal. Exception: null values.\n //Dimensions can have different defaults, so null doesn't necessarily mean that they\n //are actually equal.\n const firstKey = Object.keys(this.dimensions)[0];\n const firstValue = this.dimensions[firstKey]();\n if ((firstValue !== null) && (firstValue !== '')) {\n let areAllDimensionsEqual = true;\n for (const [dimensionKey] of this.dimensionsInOrder) {\n if (this.dimensions[dimensionKey]() !== firstValue) {\n areAllDimensionsEqual = false;\n break;\n }\n }\n this.isLinkActive(areAllDimensionsEqual);\n }\n //When \"link\" mode is enabled, keep all dimensions in sync.\n let isUpdatingAllDimensions = false; //Prevent infinite loops.\n const updateAllDimensions = (newValue) => {\n if (!isUpdatingAllDimensions && this.isLinkActive()) {\n isUpdatingAllDimensions = true;\n newValue = this.normalizeValue(newValue);\n for (const observable of Object.values(this.dimensions)) {\n observable(newValue);\n }\n isUpdatingAllDimensions = false;\n }\n };\n for (const dimensionKey of Object.keys(this.dimensions)) {\n this.dimensions[dimensionKey].subscribe(updateAllDimensions);\n }\n //In \"symmetric\" mode, the top/bottom and left/right dimensions are always equal.\n //The control will only show \"vertical\" and \"horizontal\" inputs.\n this.symmetricModeEnabled = ko.observable(this.decideSymmetricMode(params));\n //Create computed observables for the \"vertical\" and \"horizontal\" dimensions.\n this.symmetricValues = {};\n for (const name in SymmetricDimensionMap) {\n if (!isSymmetricDimensionKey(name) || !SymmetricDimensionMap.hasOwnProperty(name)) {\n continue;\n }\n const sides = SymmetricDimensionMap[name];\n this.symmetricValues[name] = ko.computed({\n read: () => {\n if (this.symmetricModeEnabled()) {\n return this.dimensions[sides[0]]();\n }\n else {\n return null;\n }\n },\n write: (newValue) => {\n if (this.symmetricModeEnabled()) {\n newValue = this.normalizeValue(newValue);\n for (const side of sides) {\n this.dimensions[side](newValue);\n }\n }\n },\n deferEvaluation: true\n }).extend({ 'ameNumericInput': true });\n }\n //The control displays a different set of inputs depending on the current mode.\n this.inputsInOrder = ko.pureComputed(() => {\n let result;\n if (this.symmetricModeEnabled()) {\n result = [\n ['vertical', 'Vertical'],\n ['horizontal', 'Horizontal'],\n ];\n }\n else {\n result = this.dimensionsInOrder;\n }\n return result;\n });\n let sliderOptions = {\n 'positionParentSelector': '.ame-single-box-dimension',\n 'verticalOffset': -2,\n };\n if (typeof params.popupSliderWithin === 'string') {\n sliderOptions.positionWithinClosest = params.popupSliderWithin;\n }\n this.sliderAdapter = new LazyPopupSliderAdapter(params.sliderRanges ? params.sliderRanges : null, '.ame-box-dimensions-control', 'input.ame-box-dimensions-input', sliderOptions);\n }\n get classes() {\n return ['ame-box-dimensions-control', ...super.classes];\n }\n //noinspection JSUnusedGlobalSymbols -- Used in the template.\n /**\n * Get an observable for a specific dimension or a pair of dimensions.\n *\n * Unfortunately, Knockout doesn't seem to support nested indexed accessors\n * like \"dimensions[$data[0]]\", so we have to use a method instead.\n */\n getInputObservable(key) {\n if (this.symmetricModeEnabled() && isSymmetricDimensionKey(key)) {\n return this.symmetricValues[key];\n }\n if (isDimensionKey(key)) {\n return this.dimensions[key];\n }\n throw new Error('Invalid input key for the current mode: ' + key);\n }\n getInputIdFor(key) {\n return this.inputIdPrefix + '-' + key;\n }\n // noinspection JSUnusedGlobalSymbols -- Used in the template.\n getInputAttributes(key) {\n return {\n id: this.getInputIdFor(key),\n 'data-unit-element-id': this.unitElementId,\n 'data-ame-box-dimension': key,\n };\n }\n // noinspection JSUnusedGlobalSymbols -- Used in the template.\n getSettingFor(key) {\n const settingName = 'value.' + key;\n if (settingName in this.settings) {\n return this.settings[settingName];\n }\n if (this.symmetricModeEnabled() && isSymmetricDimensionKey(key)) {\n for (const dimension of SymmetricDimensionMap[key]) {\n //Since both symmetric dimensions are always equal, we can use\n //either of the two settings.\n const settingName = 'value.' + dimension;\n if (settingName in this.settings) {\n return this.settings[dimension];\n }\n }\n }\n return null;\n }\n // noinspection JSUnusedGlobalSymbols -- Actually used in the template.\n toggleLink() {\n this.isLinkActive(!this.isLinkActive());\n //When enabling \"link\" mode, fill all inputs with the same value.\n //Use the first non-empty value.\n if (this.isLinkActive()) {\n let firstValue = null;\n for (const dimensionObservable of Object.values(this.dimensions)) {\n const value = dimensionObservable();\n if ((value !== null) && (value !== '')) {\n firstValue = value;\n break;\n }\n }\n if (firstValue !== null) {\n firstValue = this.normalizeValue(firstValue);\n for (const dimensionObservable of Object.values(this.dimensions)) {\n dimensionObservable(firstValue);\n }\n }\n }\n }\n normalizeValue(value) {\n if (value === null) {\n return null;\n }\n //Convert strings to numbers, and invalid strings to null.\n if (typeof value === 'string') {\n value = parseFloat(value);\n if (isNaN(value)) {\n return null;\n }\n }\n return value;\n }\n /**\n * Determine whether the control should be in \"symmetric\" mode.\n */\n decideSymmetricMode(componentParams) {\n //This mode is off by default and can be enabled by setting the \"symmetricMode\" parameter.\n let enableMode = (typeof componentParams['symmetricMode'] !== 'undefined')\n ? (!!componentParams['symmetricMode'])\n : false;\n if (!enableMode) {\n return false;\n }\n //Symmetric mode can't be enabled if the control doesn't have all side dimensions.\n const hasAllSideDimensions = SideDimensions.every((key) => {\n return (key in this.dimensions);\n });\n if (!hasAllSideDimensions) {\n return false;\n }\n //It also can only be enabled if top/bottom and left/right dimensions are equal.\n return ((this.dimensions['top']() === this.dimensions['bottom']())\n && (this.dimensions['left']() === this.dimensions['right']()));\n }\n}\nexport default createControlComponentConfig(AmeBoxDimensions, `\n\t
    \n\t\t\n\t\t\t
    \n\t\t\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t
    \n\t\t\n\t\t\n\t\t\n\t
    \n`);\n//# sourceMappingURL=ame-box-dimensions.js.map","import { KoStandaloneControl } from '../control-base.js';\nexport class ChoiceControlOption {\n constructor(data) {\n this.value = data.value;\n this.label = data.label;\n this.description = data.description || '';\n this.enabled = (typeof data.enabled === 'undefined') || data.enabled;\n this.icon = data.icon || '';\n }\n}\nexport class AmeChoiceControl extends KoStandaloneControl {\n constructor(params, $element) {\n super(params, $element);\n this.options = ko.observableArray([]);\n if ((typeof params['options'] !== 'undefined') && Array.isArray(params.options)) {\n this.options(params.options.map((optionData) => new ChoiceControlOption(optionData)));\n }\n }\n}\n//# sourceMappingURL=ame-choice-control.js.map","'use strict';\nimport { createControlComponentConfig, KoStandaloneControl } from '../control-base.js';\n/**\n * Code editor control with syntax highlighting.\n *\n * This control uses the custom Knockout binding \"ameCodeMirror\" to do the heavy\n * lifting. The binding is defined in ko-extensions.ts.\n *\n * Note: The user can disable syntax highlighting. In that case, this control\n * should behave like a normal textarea.\n */\nclass AmeCodeEditor extends KoStandaloneControl {\n constructor(params, $element) {\n super(params, $element);\n if ((typeof params.editorSettings === 'object') && (params.editorSettings !== null)) {\n this.editorSettings = params.editorSettings;\n }\n else {\n this.editorSettings = false;\n }\n }\n}\nexport default createControlComponentConfig(AmeCodeEditor, `\n\t
    \n\t\t\n\t
    \n\t\n\t\t\n\t\n`);\n//# sourceMappingURL=ame-code-editor.js.map","import { createControlComponentConfig, KoStandaloneControl } from '../control-base.js';\n/**\n * A wrapper for the WordPress color picker.\n *\n * Note that the custom 'ameColorPicker' binding must be available when this component\n * is used. You must enqueue the 'ame-ko-extensions' script for this to work.\n */\nclass AmeColorPicker extends KoStandaloneControl {\n constructor(params, $element) {\n super(params, $element);\n }\n koDescendantsComplete(node) {\n //Make the color picker input visible. Its visibility is set to hidden by default.\n if (node.nodeType === Node.COMMENT_NODE) {\n //The component was bound to a comment node. The real element\n //should be the next non-comment sibling.\n let nextElement;\n do {\n nextElement = node.nextElementSibling;\n } while (nextElement && (nextElement.nodeType === Node.COMMENT_NODE));\n if (!nextElement) {\n return; //This should never happen.\n }\n node = nextElement;\n }\n if (!node || (node.nodeType !== Node.ELEMENT_NODE)) {\n return; //This should never happen.\n }\n const $picker = jQuery(node);\n //This should be a .wp-picker-container element that contains an input.\n const $input = $picker.find('input.ame-color-picker');\n if ($input.length > 0) {\n $input.css('visibility', 'visible');\n }\n }\n get classes() {\n return ['ame-color-picker', 'ame-color-picker-component', ...super.classes];\n }\n}\nexport default createControlComponentConfig(AmeColorPicker, `\n\t\n`);\n//# sourceMappingURL=ame-color-picker.js.map","/*\n * This utility module imports all the base Knockout components and exports\n * a function that can be used to register the components with Knockout.\n */\nimport ameBoxDimensions from './ame-box-dimensions/ame-box-dimensions.js';\nimport ameColorPicker from './ame-color-picker/ame-color-picker.js';\nimport ameFontStylePicker from './ame-font-style-picker/ame-font-style-picker.js';\nimport ameImageSelector from './ame-image-selector/ame-image-selector.js';\nimport ameNumberInput from './ame-number-input/ame-number-input.js';\nimport ameNestedDescription from './ame-nested-description/ame-nested-description.js';\nimport ameRadioButtonBar from './ame-radio-button-bar/ame-radio-button-bar.js';\nimport ameRadioGroup from './ame-radio-group/ame-radio-group.js';\nimport ameSelectBox from './ame-select-box/ame-select-box.js';\nimport ameSiblingDescription from './ame-sibling-description/ame-sibling-description.js';\nimport ameStaticHtml from './ame-static-html/ame-static-html.js';\nimport ameTextInput from './ame-text-input/ame-text-input.js';\nimport ameToggleCheckbox from './ame-toggle-checkbox/ame-toggle-checkbox.js';\nimport ameUnitDropdown from './ame-unit-dropdown/ame-unit-dropdown.js';\nimport ameWpEditor from './ame-wp-editor/ame-wp-editor.js';\nimport ameHorizontalSeparator from './ame-horizontal-separator/ame-horizontal-separator.js';\nimport ameCodeEditor from './ame-code-editor/ame-code-editor.js';\nlet componentsRegistered = false;\n/**\n * Register the base Knockout components that are part of AME.\n *\n * It's safe to call this function multiple times. It will only register the components once.\n */\nexport function registerBaseComponents() {\n if (componentsRegistered) {\n return;\n }\n ko.components.register('ame-box-dimensions', ameBoxDimensions);\n ko.components.register('ame-color-picker', ameColorPicker);\n ko.components.register('ame-font-style-picker', ameFontStylePicker);\n ko.components.register('ame-image-selector', ameImageSelector);\n ko.components.register('ame-number-input', ameNumberInput);\n ko.components.register('ame-nested-description', ameNestedDescription);\n ko.components.register('ame-radio-button-bar', ameRadioButtonBar);\n ko.components.register('ame-radio-group', ameRadioGroup);\n ko.components.register('ame-select-box', ameSelectBox);\n ko.components.register('ame-sibling-description', ameSiblingDescription);\n ko.components.register('ame-static-html', ameStaticHtml);\n ko.components.register('ame-text-input', ameTextInput);\n ko.components.register('ame-toggle-checkbox', ameToggleCheckbox);\n ko.components.register('ame-unit-dropdown', ameUnitDropdown);\n ko.components.register('ame-wp-editor', ameWpEditor);\n ko.components.register('ame-horizontal-separator', ameHorizontalSeparator);\n ko.components.register('ame-code-editor', ameCodeEditor);\n componentsRegistered = true;\n}\n//# sourceMappingURL=ame-components.js.map","import { KoComponentViewModel } from '../control-base.js';\n/**\n * Base class for description components.\n */\nexport class AmeDescriptionComponent extends KoComponentViewModel {\n constructor(params, $element) {\n super(params, $element);\n this.description = params.description || '';\n }\n}\n//# sourceMappingURL=ame-description.js.map","import { createControlComponentConfig, KoStandaloneControl } from '../control-base.js';\n//Note: Font style picker CSS is already included in the main 'controls.scss' file\n//and won't be duplicated or included here. Instead, load that stylesheet when\n//using any control components.\n/**\n * Font style options that can be selected in the picker component.\n *\n * Regrettably, these are duplicated from the PHP version of the control.\n * Once browsers support importing JSON files, we can move this to a separate\n * file and use that file in both places.\n */\nconst fontStyleOptions = {\n \"font-style\": [\n {\n \"value\": null,\n \"text\": \"Default font style\",\n \"label\": \"—\"\n },\n {\n \"value\": \"italic\",\n \"text\": \"Italic\",\n \"label\": \"\"\n }\n ],\n \"text-transform\": [\n {\n \"value\": null,\n \"text\": \"Default letter case\",\n \"label\": \"—\"\n },\n {\n \"value\": \"uppercase\",\n \"text\": \"Uppercase\",\n \"label\": {\n 'text-transform': 'uppercase'\n }\n },\n {\n \"value\": \"lowercase\",\n \"text\": \"Lowercase\",\n \"label\": {\n 'text-transform': 'lowercase'\n }\n },\n {\n \"value\": \"capitalize\",\n \"text\": \"Capitalize each word\",\n \"label\": {\n 'text-transform': 'capitalize'\n }\n }\n ],\n \"font-variant\": [\n {\n \"value\": null,\n \"text\": \"Default font variant\",\n \"label\": \"—\"\n },\n {\n \"value\": \"small-caps\",\n \"text\": \"Small caps\",\n \"label\": {\n 'font-variant': 'small-caps'\n }\n }\n ],\n \"text-decoration\": [\n {\n \"value\": null,\n \"text\": \"Default text decoration\",\n \"label\": \"—\"\n },\n {\n \"value\": \"underline\",\n \"text\": \"Underline\",\n \"label\": \"\"\n },\n {\n \"value\": \"line-through\",\n \"text\": \"Strikethrough\",\n \"label\": \"\"\n }\n ]\n};\n//Generate label HTML for options that don't have it yet.\nfunction makeFontSample(styles) {\n let styleString = '';\n for (const [property, value] of Object.entries(styles)) {\n styleString += `${property}: ${value};`;\n }\n return `ab`;\n}\nlet flattenedOptions = [];\nfor (const [property, options] of Object.entries(fontStyleOptions)) {\n options.forEach((option) => {\n //Skip null values. They're used to indicate the default option,\n //and we don't need those in the Knockout version of this control.\n if (option.value === null) {\n return;\n }\n let labelString;\n if (typeof option.label === 'object') {\n labelString = makeFontSample(option.label);\n }\n else {\n labelString = option.label;\n }\n flattenedOptions.push({\n 'value': option.value,\n 'text': option.text || '',\n 'property': property,\n 'label': labelString\n });\n });\n}\nclass AmeFontStylePicker extends KoStandaloneControl {\n constructor(params, $element) {\n super(params, $element);\n this.options = flattenedOptions;\n }\n get classes() {\n return ['ame-font-style-control', ...super.classes];\n }\n // noinspection JSUnusedGlobalSymbols -- Used in the template, below.\n isOptionSelected(property, value) {\n if (this.settings.hasOwnProperty(property)) {\n return (this.settings[property].value() === value);\n }\n return false;\n }\n // noinspection JSUnusedGlobalSymbols -- Used in the template.\n toggleOption(property, value) {\n if (!this.settings.hasOwnProperty(property)) {\n return;\n }\n const targetSetting = this.settings[property];\n if (targetSetting.value() === value) {\n //When the user clicks on the currently selected option, reset it to the default.\n targetSetting.tryUpdate(null);\n }\n else {\n //Otherwise, set the new value.\n targetSetting.tryUpdate(value);\n }\n }\n}\n//Note: This weird spacing in the template string is intentional. It's used to\n//remove whitespace nodes from the DOM, which would otherwise slightly change\n//the layout of the control.\nexport default createControlComponentConfig(AmeFontStylePicker, `\n\t
    \n\t\t\n\t
    \n`);\n//# sourceMappingURL=ame-font-style-picker.js.map","import { createControlComponentConfig, KoStandaloneControl } from '../control-base.js';\nclass AmeHorizontalSeparator extends KoStandaloneControl {\n constructor(params, $element) {\n super(params, $element);\n }\n}\nexport default createControlComponentConfig(AmeHorizontalSeparator, `\n\t
    \n`);\n//# sourceMappingURL=ame-horizontal-separator.js.map","'use strict';\nimport { createControlComponentConfig, KoStandaloneControl } from '../control-base.js';\n/**\n * Image selector control.\n *\n * This implementation hands off the work to the existing AmeImageSelectorApi.ImageSelector\n * class to avoid duplicating the effort. That class is not a module because it is also\n * used for the more progressive-enhancement-y PHP-rendered controls, so we can't import it.\n */\nclass AmeImageSelector extends KoStandaloneControl {\n constructor(params, $element) {\n super(params, $element);\n this.selectorInstance = null;\n //Verify that our dependencies are available.\n if (typeof AmeImageSelectorApi === 'undefined') {\n throw new Error('AmeImageSelectorApi is not available. Remember to enqueue \"ame-image-selector-control-v2\".');\n }\n if (typeof AmeImageSelectorApi.ImageSelector === 'undefined') {\n throw new Error('AmeImageSelectorApi.ImageSelector is not available. This is probably a bug.');\n }\n this.externalUrlsAllowed = !!params.externalUrlsAllowed;\n this.canSelectMedia = !!params.canSelectMedia;\n this.imageProxy = this.settings.value.value;\n }\n get classes() {\n return [\n 'ame-image-selector-v2',\n ...super.classes,\n ];\n }\n koDescendantsComplete() {\n const $container = this.findChild('.ame-image-selector-v2');\n if ($container.length === 0) {\n return;\n }\n this.selectorInstance = new AmeImageSelectorApi.ImageSelector($container, {\n externalUrlsAllowed: this.externalUrlsAllowed,\n canSelectMedia: this.canSelectMedia,\n }, this.imageProxy());\n }\n}\nexport default createControlComponentConfig(AmeImageSelector, `\n\t
    \n\t\t\n\t
    \n`);\n//# sourceMappingURL=ame-image-selector.js.map","import { createComponentConfig } from '../control-base.js';\nimport { AmeDescriptionComponent } from '../ame-description/ame-description.js';\n/**\n * A simple component that displays the description of a UI element.\n *\n * Like AmeSiblingDescription, but intended to be rendered inside\n * the parent control or container, not as a sibling.\n */\nclass AmeNestedDescription extends AmeDescriptionComponent {\n}\nexport default createComponentConfig(AmeNestedDescription, `\n\t
    \t\n`);\n//# sourceMappingURL=ame-nested-description.js.map","/// \nimport { createControlComponentConfig, KoDependentControl } from '../control-base.js';\nimport { AmeCustomizable } from '../../assets/customizable.js';\nvar Control = AmeCustomizable.Control;\nexport class AmeNumberInput extends KoDependentControl {\n constructor(params, $element) {\n super(params, $element);\n this.sliderRanges = null;\n this.slider = null;\n this.numericValue = this.valueProxy.extend({ 'ameNumericInput': true });\n this.unitText = params.unitText || '';\n this.hasUnitDropdown = params.hasUnitDropdown || false;\n this.unitElementId = params.unitElementId || '';\n if (this.hasUnitDropdown && params.unitDropdownOptions) {\n this.unitDropdownOptions = {\n options: params.unitDropdownOptions.options || [],\n optionsText: params.unitDropdownOptions.optionsText || 'text',\n optionsValue: params.unitDropdownOptions.optionsValue || 'value'\n };\n }\n else {\n this.unitDropdownOptions = null;\n }\n this.min = params.min || null;\n this.max = params.max || null;\n this.step = params.step || null;\n if (params.sliderRanges) {\n this.sliderRanges = params.sliderRanges;\n }\n this.popupSliderWithin = (typeof params.popupSliderWithin === 'string') ? params.popupSliderWithin : null;\n this.inputClasses.unshift('ame-input-with-popup-slider', 'ame-number-input');\n }\n get classes() {\n const classes = ['ame-number-input-control'];\n if (this.sliderRanges !== null) {\n classes.push('ame-container-with-popup-slider');\n }\n classes.push(...super.classes);\n return classes;\n }\n get inputClasses() {\n const classes = ['ame-input-with-popup-slider', 'ame-number-input'];\n classes.push(...super.inputClasses);\n return classes;\n }\n getAdditionalInputAttributes() {\n let attributes = super.getAdditionalInputAttributes();\n if (this.min !== null) {\n attributes['min'] = this.min.toString();\n }\n if (this.max !== null) {\n attributes['max'] = this.max.toString();\n }\n if (this.step !== null) {\n attributes['step'] = this.step.toString();\n }\n if (this.unitElementId) {\n attributes['data-unit-element-id'] = this.unitElementId;\n }\n return attributes;\n }\n // noinspection JSUnusedGlobalSymbols -- Used in the Knockout template in this same file.\n showPopupSlider($data, event) {\n if ((this.sliderRanges === null) || (typeof AmePopupSlider === 'undefined')) {\n return;\n }\n //Some sanity checks.\n if (!event.target) {\n return;\n }\n const $input = jQuery(event.target);\n if ($input.is(':disabled') || !$input.is('input')) {\n return;\n }\n const $container = $input.closest('.ame-container-with-popup-slider');\n if ($container.length < 1) {\n return;\n }\n //Initialize the slider if it's not already initialized.\n if (!this.slider) {\n let sliderOptions = {};\n if (this.popupSliderWithin) {\n sliderOptions.positionWithinClosest = this.popupSliderWithin;\n }\n //In HTML, we would pass the range data as a \"data-slider-ranges\" attribute,\n //but here we can just set the data directly.\n $input.data('slider-ranges', this.sliderRanges);\n this.slider = AmePopupSlider.createSlider($container, sliderOptions);\n }\n this.slider.showForInput($input);\n }\n getExpectedUiElementType() {\n return Control;\n }\n}\nexport default createControlComponentConfig(AmeNumberInput, `\n\t
    \n\t\t
    \n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t
    \n\t
    \t\n`);\n//# sourceMappingURL=ame-number-input.js.map","'use strict';\nimport { createControlComponentConfig } from '../control-base.js';\nimport { AmeChoiceControl } from '../ame-choice-control/ame-choice-control.js';\nclass AmeRadioButtonBar extends AmeChoiceControl {\n constructor(params, $element) {\n super(params, $element);\n }\n get classes() {\n return ['ame-radio-button-bar-control', ...super.classes];\n }\n}\nexport default createControlComponentConfig(AmeRadioButtonBar, `\n\t
    \n\t\t\n\t\t\n\t\t\n\t
    \n`);\n//# sourceMappingURL=ame-radio-button-bar.js.map","'use strict';\nimport { createControlComponentConfig } from '../control-base.js';\nimport { AmeChoiceControl } from '../ame-choice-control/ame-choice-control.js';\n// noinspection JSUnusedGlobalSymbols -- Enum keys like \"Paragraph\" are used when serializing wrapStyle in PHP.\nvar WrapStyle;\n(function (WrapStyle) {\n WrapStyle[\"LineBreak\"] = \"br\";\n WrapStyle[\"Paragraph\"] = \"p\";\n WrapStyle[\"None\"] = \"\";\n})(WrapStyle || (WrapStyle = {}));\nfunction isWrapStyle(value) {\n if (typeof value !== 'string') {\n return false;\n }\n return (typeof WrapStyle[value] === 'string');\n}\nlet nextRadioGroupId = 1;\nclass AmeRadioGroup extends AmeChoiceControl {\n constructor(params, $element) {\n super(params, $element);\n this.wrapStyle = WrapStyle.None;\n this.childByValue = new Map();\n if ((typeof params['valueChildIndexes'] === 'object') && Array.isArray(params.valueChildIndexes)) {\n const children = ko.unwrap(this.inputChildren);\n for (const [value, index] of params.valueChildIndexes) {\n if (!children || !children[index]) {\n throw new Error('The \"' + this.label + '\" radio group has no children, but its valueChildIndexes'\n + ' requires child #' + index + ' to be associated with value \"' + value + '\".');\n }\n this.childByValue.set(value, children[index]);\n }\n }\n this.wrapStyle = isWrapStyle(params.wrapStyle) ? WrapStyle[params.wrapStyle] : WrapStyle.None;\n if (this.childByValue.size > 0) {\n this.wrapStyle = WrapStyle.None;\n }\n this.radioInputPrefix = (typeof params.radioInputPrefix === 'string')\n ? params.radioInputPrefix\n : ('ame-rg-input-' + nextRadioGroupId++ + '-');\n }\n get classes() {\n const result = ['ame-radio-group-component', ...super.classes];\n if (this.childByValue.size > 0) {\n result.push('ame-rg-has-nested-controls');\n }\n return result;\n }\n // noinspection JSUnusedGlobalSymbols -- Used in the template below.\n getChoiceChild(value) {\n return this.childByValue.get(value) || null;\n }\n // noinspection JSUnusedGlobalSymbols -- Used in the template.\n /**\n * Get the ID attribute for a radio input.\n *\n * Note: This must match the algorithm used by the PHP version of this control\n * to work correctly with the BorderStyleSelector control that adds style samples\n * to each choice and uses the ID to link them to the inputs (so that clicking\n * the sample selects the option).\n */\n getRadioInputId(choice) {\n let sanitizedValue = (choice.value !== null) ? choice.value.toString() : '';\n //Emulate the sanitize_key() function from WordPress core.\n sanitizedValue = sanitizedValue.toLowerCase().replace(/[^a-z0-9_\\-]/gi, '');\n return this.radioInputPrefix + sanitizedValue;\n }\n}\nconst choiceTemplate = `\n\t\n`;\nexport default createControlComponentConfig(AmeRadioGroup, `\n\t
    \n\t\t\n\t\t\t\n\t\t\t\t${choiceTemplate}
    \n\t\t\t\n\t\t\t\n\t\t\t\t

    ${choiceTemplate}

    \n\t\t\t\n\t\t\t\n\t\t\t\t${choiceTemplate}\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t
    \n`);\n//# sourceMappingURL=ame-radio-group.js.map","import { AmeChoiceControl } from '../ame-choice-control/ame-choice-control.js';\nimport { createControlComponentConfig } from '../control-base.js';\nclass AmeSelectBox extends AmeChoiceControl {\n constructor(params, $element) {\n super(params, $element);\n }\n get classes() {\n return ['ame-select-box-control', ...super.classes];\n }\n}\nexport default createControlComponentConfig(AmeSelectBox, `\n\t\n\t\n\t\t\n\t\t\n`);\n//# sourceMappingURL=ame-select-box.js.map","import { createComponentConfig } from '../control-base.js';\nimport { AmeDescriptionComponent } from '../ame-description/ame-description.js';\n/**\n * A simple component that displays the description of a UI element.\n *\n * This should be rendered as a sibling of the UI element's component,\n * typically immediately after it.\n *\n * Caution: HTML is allowed in the description.\n */\nclass AmeSiblingDescription extends AmeDescriptionComponent {\n}\nexport default createComponentConfig(AmeSiblingDescription, `\n\t

    \t\n`);\n//# sourceMappingURL=ame-sibling-description.js.map","import { createControlComponentConfig, KoStandaloneControl } from '../control-base.js';\nclass AmeStaticHtml extends KoStandaloneControl {\n constructor(params, $element) {\n super(params, $element);\n this.containerType = 'span';\n this.htmlContent = (typeof params.html === 'string') ? params.html : '';\n if (typeof params.container === 'string') {\n this.containerType = params.container;\n }\n }\n}\n//Note: The HTML content has to be in a container element because Knockout doesn't allow\n//using the \"html\" binding with virtual elements.\nexport default createControlComponentConfig(AmeStaticHtml, `\n\t\n\t\t
    \n\t\n\t\n\t\t\n\t\n`);\n//# sourceMappingURL=ame-static-html.js.map","import { createControlComponentConfig, KoDependentControl } from '../control-base.js';\nexport class AmeTextInput extends KoDependentControl {\n constructor(params, $element) {\n super(params, $element);\n this.inputType = 'text';\n this.isCode = params.isCode || false;\n this.inputType = params.inputType || 'text';\n }\n get inputClasses() {\n const classes = ['regular-text'];\n if (this.isCode) {\n classes.push('code');\n }\n classes.push('ame-text-input-control', ...super.inputClasses);\n return classes;\n }\n getAdditionalInputAttributes() {\n return Object.assign({ 'type': this.inputType }, super.getAdditionalInputAttributes());\n }\n}\nexport default createControlComponentConfig(AmeTextInput, `\n\t\n\t\n\t\t\n\t\t\n`);\n//# sourceMappingURL=ame-text-input.js.map","import { createControlComponentConfig, KoStandaloneControl } from '../control-base.js';\nclass AmeToggleCheckbox extends KoStandaloneControl {\n constructor(params, $element) {\n super(params, $element);\n this.onValue = (typeof params.onValue !== 'undefined') ? params.onValue : true;\n this.offValue = (typeof params.offValue !== 'undefined') ? params.offValue : false;\n if (typeof this.settings['value'] === 'undefined') {\n this.isChecked = ko.pureComputed(() => false);\n }\n else {\n this.isChecked = ko.computed({\n read: () => {\n return this.settings.value.value() === ko.unwrap(this.onValue);\n },\n write: (newValue) => {\n this.settings.value.value(ko.unwrap(newValue ? this.onValue : this.offValue));\n },\n deferEvaluation: true\n });\n }\n }\n get classes() {\n return ['ame-toggle-checkbox-control', ...super.classes];\n }\n}\n//Unlike the HTML version of this control, the Knockout version doesn't have\n//a second, hidden checkbox. This is because the component is entirely JS-based\n//and doesn't need to be submitted as part of a form.\nexport default createControlComponentConfig(AmeToggleCheckbox, `\n\t\t\n`);\n//# sourceMappingURL=ame-toggle-checkbox.js.map","import { createControlComponentConfig, KoStandaloneControl } from '../control-base.js';\nexport class AmeUnitDropdown extends KoStandaloneControl {\n constructor(params, $element) {\n super(params, $element);\n this.dropdownData = params.optionData || {\n options: [],\n optionsText: 'text',\n optionsValue: 'value'\n };\n this.selectId = params.id || '';\n }\n}\nexport default createControlComponentConfig(AmeUnitDropdown, `\n\t\n`);\n//# sourceMappingURL=ame-unit-dropdown.js.map","'use strict';\nimport { createControlComponentConfig, KoStandaloneControl } from '../control-base.js';\n//Note: Requires Lodash, but does not explicitly import it because this plugin\n//already uses Lodash as a global variable (wsAmeLodash) in many places. Code\n//that uses this component should make sure that Lodash is loaded.\nlet autoAssignedIdCounter = 0;\n/**\n * List of visual editor buttons that are visible in the \"teeny\" mode.\n *\n * Found in /wp-includes/class-wp-editor.php, the editor_settings() method.\n * The relevant code is around line #601 (as of WP 6.1.1).\n */\nconst TeenyButtons = [\n 'bold',\n 'italic',\n 'underline',\n 'blockquote',\n 'strikethrough',\n 'bullist',\n 'numlist',\n 'alignleft',\n 'aligncenter',\n 'alignright',\n 'undo',\n 'redo',\n 'link',\n 'fullscreen'\n];\n/**\n * List of Quicktags editor buttons that are visible by default.\n *\n * The default list of text editor buttons used by wp.editor.initialize()\n * doesn't match the defaults used by wp_editor() in PHP. Let's copy the list\n * from /includes/class-wp-editor.php.\n */\nconst DefaultQuicktagsButtons = [\n 'strong', 'em', 'link', 'block', 'del', 'ins', 'img', 'ul', 'ol', 'li', 'code', 'more', 'close'\n];\nclass AmeWpEditor extends KoStandaloneControl {\n constructor(params, $element) {\n super(params, $element);\n this.editorId = null;\n this.isWpEditorInitialized = false;\n const textSetting = this.settings.value;\n if (typeof textSetting === 'undefined') {\n throw new Error('Visual Editor control is missing the required setting');\n }\n this.rows = params.rows || 6;\n this.isTeeny = !!params.teeny;\n }\n getAdditionalInputAttributes() {\n return Object.assign({ rows: this.rows.toString() }, super.getAdditionalInputAttributes());\n }\n koDescendantsComplete() {\n const $textArea = this.findChild('textarea.ame-wp-editor-textarea');\n if ($textArea.length === 0) {\n return;\n }\n const currentValue = this.valueProxy();\n $textArea.val((currentValue === null) ? '' : currentValue.toString());\n //The textarea must have an ID for wp.editor.initialize() to work.\n {\n let editorId = $textArea.attr('id');\n if (!editorId) {\n editorId = 'ws-ame-wp-editor-aid-' + (autoAssignedIdCounter++);\n $textArea.attr('id', editorId);\n }\n this.editorId = editorId;\n }\n //Update the setting when the contents of the underlying textarea change.\n //This happens when the user selects the \"Text\" tab in the editor, or when\n //TinyMCE is unavailable (e.g. if the \"Disable the visual editor when writing\"\n //option is checked in the user's profile).\n $textArea.on('change input', this.throttleUpdates(() => $textArea.val()));\n let editorSettings = {\n tinymce: {\n wpautop: true\n },\n quicktags: {\n //The default list of text editor buttons used by wp.editor.initialize()\n //doesn't match the defaults used by wp_editor() in PHP. Let's copy the list\n //from /includes/class-wp-editor.php.\n buttons: DefaultQuicktagsButtons.join(','),\n },\n //Include the \"Add Media\" button.\n mediaButtons: true,\n };\n if (typeof window['tinymce'] === 'undefined') {\n //TinyMCE is disabled or not available.\n editorSettings.tinymce = false;\n }\n if (this.isTeeny && (typeof editorSettings.tinymce === 'object')) {\n editorSettings.tinymce.toolbar1 = TeenyButtons.join(',');\n editorSettings.tinymce.toolbar2 = '';\n }\n const $document = jQuery(document);\n const self = this;\n //After the editor finishes initializing, add an event listener to update\n //the setting when the contents of the visual editor change.\n $document.on('tinymce-editor-init', function addMceChangeListener(event, editor) {\n if (editor.id !== self.editorId) {\n return; //Not our editor.\n }\n //According to the TinyMCE documentation, the \"Change\" event is fired\n //when \"changes [...] cause an undo level to be added\". This could be\n //too frequent for our purposes, so we'll throttle the callback.\n editor.on('Change', self.throttleUpdates(() => editor.getContent()));\n $document.off('tinymce-editor-init', addMceChangeListener);\n });\n //Unfortunately, as of WP 6.2-beta, wp.editor.initialize() doesn't add\n //the \"wp-editor-container\" wrapper when only the Quicktags editor is used.\n //This means the editor won't be styled correctly. Let's fix that.\n $document.on('quicktags-init', function maybeAddEditorWrapper(event, editor) {\n if (!editor || (editor.id !== self.editorId)) {\n return;\n }\n if (editor.canvas) {\n const $textarea = jQuery(editor.canvas);\n const $wrapper = $textarea.closest('.wp-editor-container');\n if ($wrapper.length === 0) {\n //Also include the toolbar in the wrapper.\n const $toolbar = $textarea.prevAll('.quicktags-toolbar').first();\n $textarea.add($toolbar).wrapAll('
    ');\n }\n }\n $document.off('quicktags-init', maybeAddEditorWrapper);\n });\n //Finally, initialize the editor.\n wp.editor.initialize($textArea.attr('id'), editorSettings);\n this.isWpEditorInitialized = true;\n }\n /**\n * Create a throttled function that updates the setting.\n *\n * There are multiple ways to get the contents of the editor (e.g. TinyMCE mode\n * vs a plain textarea), so using a utility function helps avoid code duplication.\n *\n * @param valueGetter\n * @protected\n */\n throttleUpdates(valueGetter) {\n const textSetting = this.settings.value;\n return wsAmeLodash.throttle(function () {\n textSetting.value(valueGetter());\n return void 0;\n }, 1000, { leading: true, trailing: true });\n }\n dispose() {\n //Destroy the editor. It's not clear whether this is necessary, but it's\n //probably a good idea to give WP a chance to clean up.\n if (this.isWpEditorInitialized && (this.editorId !== null)) {\n wp.editor.remove(this.editorId);\n this.isWpEditorInitialized = false;\n }\n super.dispose();\n }\n}\n//Note: The class of the textarea element is set directly instead of using a binding\n//because it must always have the \"wp-editor-area\" class for it to render correctly\n//(apparently, wp.editor.initialize() does not automatically add that class).\n//Knockout should not be able to remove the class.\nexport default createControlComponentConfig(AmeWpEditor, `\n\t\t\n`);\n//# sourceMappingURL=ame-wp-editor.js.map","import { AmeCustomizable } from '../assets/customizable.js';\nvar Setting = AmeCustomizable.Setting;\nvar InterfaceStructure = AmeCustomizable.InterfaceStructure;\nvar Control = AmeCustomizable.Control;\nexport class KoComponentViewModel {\n constructor(params, $element) {\n var _a;\n this.params = params;\n this.$element = $element;\n this.isBoundToComment = ($element[0]) && ($element[0].nodeType === Node.COMMENT_NODE);\n this.uiElement = null;\n const expectedType = this.getExpectedUiElementType();\n if (expectedType !== null) {\n if ((typeof params.uiElement !== 'undefined')\n && (params.uiElement instanceof expectedType)) {\n this.uiElement = params.uiElement;\n }\n else {\n throw new Error('uiElement is not a ' + expectedType.name + ' instance.');\n }\n }\n else if ((typeof params.uiElement !== 'undefined') && !(this instanceof KoStandaloneControl)) {\n console.warn('Unexpected \"uiElement\" parameter for ' + this.constructor.name\n + ' that did not expect an UI element. Did you forget to override getExpectedUiElementType() ?', params.uiElement);\n }\n if (typeof params.children !== 'undefined') {\n if (Array.isArray(params.children) || this.isObservableArray(params.children)) {\n this.inputChildren = params.children;\n }\n else {\n throw new Error('Invalid \"children\" parameter: expected an array or an observable array.');\n }\n }\n else {\n this.inputChildren = [];\n }\n this.customClasses = ((typeof params.classes === 'object') && Array.isArray(params.classes)) ? params.classes : [];\n this.customStyles = ((typeof params.styles === 'object') && (params.styles !== null)) ? params.styles : {};\n if (typeof params.enabled !== 'undefined') {\n if (ko.isObservable(params.enabled)) {\n this.isEnabled = params.enabled;\n }\n else {\n this.isEnabled = ko.pureComputed(() => !!params.enabled);\n }\n }\n else {\n this.isEnabled = ko.pureComputed(() => true);\n }\n //Get the description either from the \"description\" parameter or from the UI element.\n this.description = params.description\n ? ko.unwrap(params.description.toString())\n : (((_a = this.uiElement) === null || _a === void 0 ? void 0 : _a.description) || '');\n }\n dispose() {\n //Does nothing by default.\n }\n getExpectedUiElementType() {\n return null;\n }\n get classes() {\n return [].concat(this.customClasses);\n }\n // noinspection JSUnusedGlobalSymbols -- Used in Knockout templates.\n get classString() {\n return this.classes.join(' ');\n }\n get styles() {\n return Object.assign({}, this.customStyles);\n }\n findChild(selector, allowSiblingSearch = null) {\n if (allowSiblingSearch === null) {\n //Enable only if the component is bound to a comment (i.e. \"\").\n allowSiblingSearch = this.isBoundToComment;\n }\n if (this.isBoundToComment) {\n if (allowSiblingSearch) {\n return this.$element.nextAll(selector).first();\n }\n else {\n //We would never find anything because a comment node has no children.\n return jQuery();\n }\n }\n return this.$element.find(selector);\n }\n isObservableArray(value) {\n return (typeof value === 'object')\n && (value !== null)\n && (typeof value.slice === 'function')\n && (typeof value.indexOf === 'function')\n && (ko.isObservable(value));\n }\n}\nfunction makeCreateVmFunctionForComponent(ctor) {\n return function (params, componentInfo) {\n const $element = jQuery(componentInfo.element);\n return new ctor(params, $element);\n };\n}\nexport function createComponentConfig(ctor, templateString) {\n return {\n viewModel: {\n createViewModel: makeCreateVmFunctionForComponent(ctor),\n },\n template: templateString,\n };\n}\n//endregion\n//region Container\nexport class ComponentBindingOptions {\n // noinspection JSUnusedGlobalSymbols -- the uiElement property is used in the KO template of AC control groups.\n constructor(name, params, uiElement) {\n this.name = name;\n this.params = params;\n this.uiElement = uiElement;\n if (name === '') {\n throw new Error('Component name cannot be empty.');\n }\n }\n static fromElement(element, overrideComponentName = null) {\n if (!element.component && (overrideComponentName === null)) {\n throw new Error(`Cannot create component binding options for UI element \"${element.id}\" without a component name.`);\n }\n return new ComponentBindingOptions(overrideComponentName || element.component, element.getComponentParams(), element);\n }\n}\nexport class KoContainerViewModel extends KoComponentViewModel {\n constructor(params, $element) {\n if (typeof params.children === 'undefined') {\n throw new Error('Missing \"children\" parameter.');\n }\n super(params, $element);\n this.title = ko.pureComputed(() => {\n if (typeof params.title !== 'undefined') {\n let title = ko.unwrap(params.title);\n if ((title !== null) && (typeof title !== 'undefined')) {\n return title.toString();\n }\n }\n if (this.uiElement) {\n return this.uiElement.title;\n }\n return '';\n });\n this.childComponents = ko.pureComputed(() => {\n const result = ko.unwrap(this.inputChildren)\n .map(child => this.mapChildToComponentBinding(child))\n .filter(binding => binding !== null);\n //TypeScript does not recognize that the filter() call above removes\n //all null values, so we need an explicit cast.\n return result;\n });\n }\n mapChildToComponentBinding(child) {\n //Does not map any children by default.\n return null;\n }\n dispose() {\n super.dispose();\n this.childComponents.dispose();\n }\n}\n//endregion\n//region Control\nexport class KoControlViewModel extends KoComponentViewModel {\n constructor(params, $element) {\n var _a;\n super(params, $element);\n this.settings =\n ((typeof params.settings === 'object') && isSettingMap(params.settings))\n ? params.settings\n : {};\n if (typeof this.settings.value !== 'undefined') {\n this.valueProxy = this.settings.value.value;\n }\n else {\n this.valueProxy = ko.pureComputed(() => {\n console.error('Missing \"value\" setting for a control component.', this.settings, params);\n return '';\n });\n }\n //Input ID will be provided by the server if applicable.\n this.primaryInputId = (typeof params.primaryInputId === 'string') ? params.primaryInputId : null;\n this.inputAttributes = ko.pureComputed(() => {\n var _a;\n const attributes = ((_a = this.uiElement) === null || _a === void 0 ? void 0 : _a.inputAttributes) || {};\n const inputId = this.getPrimaryInputId();\n if ((inputId !== null) && (inputId !== '')) {\n attributes.id = inputId;\n }\n //Note: The \"name\" field is not used because these controls are entirely JS-driven.\n const additionalAttributes = this.getAdditionalInputAttributes();\n for (const key in additionalAttributes) {\n if (!additionalAttributes.hasOwnProperty(key)) {\n continue;\n }\n attributes[key] = additionalAttributes[key];\n }\n return attributes;\n });\n if ((typeof params.label !== 'undefined') && (params.label !== null)) {\n const unwrappedLabel = ko.unwrap(params.label);\n this.label = (typeof unwrappedLabel === 'undefined') ? '' : unwrappedLabel.toString();\n }\n else {\n this.label = ((_a = this.uiElement) === null || _a === void 0 ? void 0 : _a.label) || '';\n }\n }\n get inputClasses() {\n var _a;\n return ((_a = this.uiElement) === null || _a === void 0 ? void 0 : _a.inputClasses) || [];\n }\n // noinspection JSUnusedGlobalSymbols -- Used in Knockout templates.\n get inputClassString() {\n return this.inputClasses.join(' ');\n }\n getAdditionalInputAttributes() {\n return {};\n }\n getPrimaryInputId() {\n return this.primaryInputId;\n }\n}\nfunction isSettingMap(value) {\n if (value === null) {\n return false;\n }\n if (typeof value !== 'object') {\n return false;\n }\n const valueAsRecord = value;\n for (const key in valueAsRecord) {\n if (!valueAsRecord.hasOwnProperty(key)) {\n continue;\n }\n if (!(valueAsRecord[key] instanceof Setting)) {\n return false;\n }\n }\n return true;\n}\n/**\n * A control that doesn't use or need a UI element instance, but can still have\n * settings and other parameters typically associated with controls.\n */\nexport class KoStandaloneControl extends KoControlViewModel {\n}\n/**\n * A control that requires a UI element of the \"Control\" class.\n */\nexport class KoDependentControl extends KoControlViewModel {\n getExpectedUiElementType() {\n return Control;\n }\n}\nexport function createControlComponentConfig(ctor, templateString) {\n return {\n viewModel: {\n createViewModel: makeCreateVmFunctionForComponent(ctor),\n },\n template: templateString,\n };\n}\n//endregion\n//region Renderer\nexport class KoRendererViewModel extends KoComponentViewModel {\n constructor(params, $element) {\n super(params, $element);\n if ((typeof params.structure !== 'object') || !(params.structure instanceof InterfaceStructure)) {\n throw new Error('Invalid interface structure for a renderer component.');\n }\n this.structure = params.structure;\n }\n}\nexport function createRendererComponentConfig(ctor, templateString) {\n return {\n viewModel: {\n createViewModel: makeCreateVmFunctionForComponent(ctor),\n },\n template: templateString,\n };\n}\n//endregion\n//# sourceMappingURL=control-base.js.map","/// \n/**\n * This is a wrapper for the popup slider that initializes the slider on first use.\n * It's useful for Knockout components.\n */\nexport class LazyPopupSliderAdapter {\n constructor(sliderRanges, containerSelector = '.ame-container-with-popup-slider', inputSelector = 'input', sliderOptions = {}) {\n this.sliderRanges = sliderRanges;\n this.containerSelector = containerSelector;\n this.inputSelector = inputSelector;\n this.sliderOptions = sliderOptions;\n this.slider = null;\n if (!sliderOptions.hasOwnProperty('ranges')) {\n sliderOptions.ranges = sliderRanges;\n }\n this.handleKoClickEvent = ($data, event) => {\n //Verify that this is one of the inputs we're interested in.\n //Also, disabled inputs should not trigger the slider.\n if (event.target === null) {\n return;\n }\n const $input = jQuery(event.target);\n if ($input.is(':disabled') || !$input.is(this.inputSelector)) {\n return;\n }\n //Short-circuit if the slider is already initialized.\n if (this.slider) {\n this.slider.showForInput($input);\n return;\n }\n //Some sanity checks.\n if (typeof AmePopupSlider === 'undefined') {\n return;\n }\n const $container = $input.closest(this.containerSelector);\n if ($container.length < 1) {\n return;\n }\n this.initSlider($container);\n if (this.slider !== null) {\n //TS doesn't realize that this.initSlider() will initialize the slider.\n this.slider.showForInput($input);\n }\n };\n }\n /**\n * Initialize the slider if it's not already initialized.\n */\n initSlider($container) {\n if (this.slider) {\n return;\n }\n //In HTML, we would pass the range data as a \"data-slider-ranges\" attribute,\n //but here they are passed via the \"ranges\" option (see the constructor).\n this.slider = AmePopupSlider.createSlider($container, this.sliderOptions);\n }\n}\n//# sourceMappingURL=lazy-popup-slider-adapter.js.map"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/dist/customizable.bundle.js.map b/dist/customizable.bundle.js.map index 6c93b75..7714519 100644 --- a/dist/customizable.bundle.js.map +++ b/dist/customizable.bundle.js.map @@ -1 +1 @@ -{"version":3,"file":"customizable.bundle.js","mappings":";;;;;;;;;;;;;;AAAa;AACN;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA,kDAAkD,YAAY;AAC9D;AACA,qBAAqB;AACrB;AACA;AACA;AACA,kDAAkD,YAAY;AAC9D;AACA,qBAAqB;AACrB;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2DAA2D,SAAS;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD,eAAe;AACnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD,2BAA2B,kIAAkI;AAC9M;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD,iCAAiC,uBAAuB;AACzG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,iDAAiD,iCAAiC,wGAAwG;AAC1L;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,kBAAkB;AACvD;AACA;AACA;AACA;AACA;AACA,yBAAyB,mBAAmB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,0CAA0C;AACpC;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,4DAA4D;AAC7D","sources":["webpack:///./extras/pro-customizables/assets/customizable.js"],"sourcesContent":["'use strict';\r\nexport var AmeCustomizable;\r\n(function (AmeCustomizable) {\r\n var some = AmeMiniFunc.some;\r\n var none = AmeMiniFunc.none;\r\n var Either = AmeMiniFunc.Either;\r\n const _ = wsAmeLodash;\r\n class Setting {\r\n constructor(id, value = null, defaultValue = null, supportsPostMessage = false, groupTitle = null, validator = null) {\r\n this.validator = validator;\r\n this.groupTitle = null;\r\n /**\r\n * The last value that was tried to be set. This is used to ignore server-side\r\n * validation errors when the input value has changed since the request was sent.\r\n *\r\n * Displayed validation errors should be relevant to what the user tried\r\n * to enter, not the currently stored setting value.\r\n */\r\n this.lastTriedNewValue = null;\r\n this.id = id;\r\n this.underlyingValue = ko.observable(value);\r\n this.defaultValue = defaultValue;\r\n this.supportsPostMessage = supportsPostMessage;\r\n this.groupTitle = groupTitle;\r\n this.lastTriedNewValue = value;\r\n this.value = ko.computed({\r\n read: () => this.underlyingValue(),\r\n write: (newValue) => {\r\n const errors = this.tryUpdate(newValue);\r\n if (errors && (errors.length > 0)) {\r\n /*\r\n We could revert to the previous value here, but there are some cases where\r\n that would interfere with the user's input. For example, if the user is\r\n manually typing in a URL, the value will be temporarily invalid until they\r\n finish entering the protocol and domain name. If we revert to the previous\r\n value, the user will have to start over.\r\n\r\n Instead, let's leave the invalid value in place and let the user fix it.\r\n */\r\n }\r\n },\r\n owner: this\r\n });\r\n this.validationErrors = ko.observableArray();\r\n this.isValid = ko.computed(() => {\r\n return (this.validationErrors().length === 0);\r\n });\r\n }\r\n tryUpdate(newValue) {\r\n this.lastTriedNewValue = newValue;\r\n const oldValue = this.underlyingValue();\r\n //Clear validation errors.\r\n this.validationErrors.removeAll();\r\n //Validate and sanitize the new value.\r\n const [sanitizedValue, errors] = this.validate(newValue);\r\n this.validationErrors.push(...errors);\r\n if (errors.length > 0) {\r\n return errors;\r\n }\r\n //Remember the last validation subject so that server-side validation results\r\n //can be ignored if the value has changed since the request was sent.\r\n this.lastTriedNewValue = sanitizedValue;\r\n //Only update the underlying value if it has changed.\r\n if (sanitizedValue !== oldValue) {\r\n this.underlyingValue(sanitizedValue);\r\n }\r\n return [];\r\n }\r\n validate(newValue) {\r\n if (this.validator !== null) {\r\n const result = this.validator.check(newValue);\r\n if (result.isLeft()) {\r\n return [newValue, [result.value]];\r\n }\r\n else if (result.isRight()) {\r\n newValue = result.value;\r\n }\r\n }\r\n return [newValue, []];\r\n }\r\n /**\r\n * Add validation errors to the setting if the current value still\r\n * matches the given value.\r\n *\r\n * This is intended as a way to add validation errors that were produced\r\n * asynchronously, such as by sending the value to the server for validation.\r\n * The setting's value can change while the validation is in progress,\r\n * so we need to check that the validated value matches the current one.\r\n *\r\n * @param subjectValue\r\n * @param errors\r\n */\r\n addValidationErrorsForValue(subjectValue, errors) {\r\n if (this.lastTriedNewValue !== subjectValue) {\r\n return;\r\n }\r\n //Add the error(s) only if there is no existing error with the same code.\r\n const existingCodes = _.keyBy(this.validationErrors(), 'code');\r\n for (const error of errors) {\r\n if ((typeof error.code === 'undefined') || !existingCodes.hasOwnProperty(error.code)) {\r\n this.validationErrors.push(error);\r\n }\r\n }\r\n }\r\n clearValidationErrorsForValue(subjectValue) {\r\n if (this.lastTriedNewValue !== subjectValue) {\r\n return;\r\n }\r\n this.validationErrors.removeAll();\r\n }\r\n }\r\n AmeCustomizable.Setting = Setting;\r\n function unserializeSettingMap(settings) {\r\n const collection = new SettingCollection();\r\n for (const settingId in settings) {\r\n if (!settings.hasOwnProperty(settingId)) {\r\n continue;\r\n }\r\n const definition = settings[settingId];\r\n collection.add(unserializeSetting(settingId, definition));\r\n }\r\n return collection;\r\n }\r\n AmeCustomizable.unserializeSettingMap = unserializeSettingMap;\r\n function unserializeSetting(settingId, definition) {\r\n return new Setting(settingId, (typeof definition.value !== 'undefined') ? definition.value : null, (typeof definition.defaultValue !== 'undefined') ? definition.defaultValue : null, (typeof definition.supportsPostMessage !== 'undefined') ? definition.supportsPostMessage : false, (typeof definition.groupTitle !== 'undefined') ? definition.groupTitle : null, (typeof definition.validation !== 'undefined') ? (new Validator(definition.validation)) : null);\r\n }\r\n AmeCustomizable.unserializeSetting = unserializeSetting;\r\n const BuiltinParsers = {\r\n 'numeric': (value, config) => {\r\n //In some UI controls the observable value is updated as the user types,\r\n //so this parser/validator should be tolerant and accept partial values.\r\n let parsed;\r\n let sanitized;\r\n if (typeof value === 'number') {\r\n parsed = sanitized = value;\r\n }\r\n else {\r\n sanitized = (typeof value === 'string') ? value : String(value);\r\n sanitized = AmeMiniFunc.sanitizeNumericString(sanitized);\r\n parsed = parseFloat(sanitized);\r\n if (isNaN(parsed)) {\r\n return Either.left({\r\n message: 'Value must be a number.',\r\n code: 'invalid_number'\r\n });\r\n }\r\n }\r\n if (config) {\r\n if ((typeof config.min !== 'undefined') && parsed < config.min) {\r\n return Either.left({\r\n message: `Value must be ${config.min} or greater`,\r\n code: 'min_value'\r\n });\r\n }\r\n if (typeof config.max !== 'undefined' && parsed > config.max) {\r\n return Either.left({\r\n message: `Value must be ${config.max} or lower`,\r\n code: 'max_value'\r\n });\r\n }\r\n }\r\n return Either.right(sanitized);\r\n },\r\n 'int': (value) => {\r\n let parsed = (typeof value === 'number') ? value : parseInt(String(value), 10);\r\n if (isNaN(parsed)) {\r\n return Either.left({\r\n message: 'Value must be a number.',\r\n code: 'invalid_type'\r\n });\r\n }\r\n parsed = Math.floor(parsed);\r\n return Either.right(parsed);\r\n }\r\n };\r\n class Validator {\r\n constructor(config) {\r\n this.config = config;\r\n this.parsers = [];\r\n //Converting to null is only allowed if the setting is nullable.\r\n if (config.convertEsToNull && !config.isNullable) {\r\n throw new Error('convertEsToNull is only allowed if the setting is nullable.');\r\n }\r\n if (config.parsers) {\r\n for (const [parserId, parserConfig] of config.parsers) {\r\n if (!BuiltinParsers.hasOwnProperty(parserId)) {\r\n throw new Error(`Unknown parser: ${parserId}`);\r\n }\r\n this.parsers.push([BuiltinParsers[parserId], parserConfig]);\r\n }\r\n }\r\n }\r\n check(value) {\r\n if (value === null) {\r\n if (this.config.isNullable) {\r\n return Either.right(value);\r\n }\r\n else {\r\n return Either.left({\r\n message: 'This setting cannot be null.'\r\n });\r\n }\r\n }\r\n if (typeof value === 'string') {\r\n if (this.config.convertEsToNull && (value === '')) {\r\n return Either.right(null);\r\n }\r\n }\r\n for (const [parser, parserConfig] of this.parsers) {\r\n const result = parser(value, (parserConfig === null) ? undefined : parserConfig);\r\n if (result.isLeft()) {\r\n return result;\r\n }\r\n else if (result.isRight()) {\r\n value = result.value;\r\n }\r\n }\r\n return Either.right(value);\r\n }\r\n }\r\n class SettingCollection {\r\n constructor() {\r\n this.settings = {};\r\n /**\r\n * Adding settings to an observable array makes it easier to automatically\r\n * update computed values like \"are any settings invalid?\".\r\n */\r\n this.observableSettings = ko.observableArray();\r\n const self = this;\r\n this.hasValidationErrors = ko.pureComputed(() => {\r\n return _.some(self.observableSettings(), (setting) => {\r\n return !setting.isValid();\r\n });\r\n });\r\n this.changeListeners = new Map();\r\n }\r\n get(id) {\r\n if (this.settings.hasOwnProperty(id)) {\r\n return some(this.settings[id]);\r\n }\r\n return none;\r\n }\r\n add(setting) {\r\n this.settings[setting.id] = setting;\r\n this.observableSettings.push(setting);\r\n setting.value.subscribe((newValue) => this.onSettingChanged(setting, newValue));\r\n }\r\n onSettingChanged(setting, newValue) {\r\n this.notifyChangeListeners(setting, newValue);\r\n }\r\n /**\r\n * Add a callback that will be called whenever the value of a setting changes.\r\n *\r\n * @param callback\r\n */\r\n addChangeListener(callback) {\r\n const id = Symbol();\r\n this.changeListeners.set(id, callback);\r\n return id;\r\n }\r\n removeChangeListener(id) {\r\n this.changeListeners.delete(id);\r\n }\r\n notifyChangeListeners(setting, newValue) {\r\n for (const listener of this.changeListeners.values()) {\r\n listener(setting, newValue);\r\n }\r\n }\r\n getAllSettingIds() {\r\n return Object.keys(this.settings);\r\n }\r\n getAllSettingValues() {\r\n const values = {};\r\n for (const id in this.settings) {\r\n if (this.settings.hasOwnProperty(id)) {\r\n values[id] = this.settings[id].value();\r\n }\r\n }\r\n return values;\r\n }\r\n }\r\n AmeCustomizable.SettingCollection = SettingCollection;\r\n function isSettingConditionData(data) {\r\n if ((typeof data !== 'object') || (data === null)) {\r\n return false;\r\n }\r\n const dataAsRecord = data;\r\n return (typeof dataAsRecord.settingId === 'string'\r\n && typeof dataAsRecord.op === 'string'\r\n && typeof dataAsRecord.value !== 'undefined');\r\n }\r\n class SettingCondition {\r\n constructor(setting, op, value) {\r\n this.setting = setting;\r\n this.op = op;\r\n this.value = value;\r\n }\r\n evaluate() {\r\n const settingValue = this.setting.value();\r\n switch (this.op) {\r\n case '==':\r\n //Note the intentional use of == instead of ===.\r\n return settingValue == this.value;\r\n case '!=':\r\n return settingValue != this.value;\r\n case '>':\r\n return settingValue > this.value;\r\n case '<':\r\n return settingValue < this.value;\r\n case '>=':\r\n return settingValue >= this.value;\r\n case '<=':\r\n return settingValue <= this.value;\r\n case 'falsy':\r\n return !settingValue;\r\n case 'truthy':\r\n return !!settingValue;\r\n }\r\n }\r\n static fromData(data, findSetting) {\r\n const setting = findSetting(data.settingId);\r\n if (!setting || setting.isEmpty()) {\r\n throw new Error(`Setting with ID \"${data.settingId}\" not found for SettingCondition`);\r\n }\r\n return new SettingCondition(setting.get(), data.op, data.value);\r\n }\r\n }\r\n AmeCustomizable.SettingCondition = SettingCondition;\r\n class UiElement {\r\n constructor(data, children = []) {\r\n this.component = data.component || '';\r\n this.id = data.id || '';\r\n this.description = data.description || '';\r\n this.classes = data.classes || [];\r\n this.styles = data.styles || {};\r\n this.componentParams = data.params || {};\r\n this.children = children;\r\n }\r\n getComponentParams() {\r\n return Object.assign(Object.assign({}, this.componentParams), { uiElement: this, id: this.id, description: this.description, classes: this.classes, styles: this.styles, children: this.children });\r\n }\r\n }\r\n AmeCustomizable.UiElement = UiElement;\r\n class Container extends UiElement {\r\n constructor(data, children = []) {\r\n super(data, children);\r\n this.title = data.title;\r\n }\r\n replaceChild(oldChild, newChild) {\r\n const index = this.children.indexOf(oldChild);\r\n if (index === -1) {\r\n throw new Error('Child not found');\r\n }\r\n this.children[index] = newChild;\r\n }\r\n replaceChildByIndex(index, newChild) {\r\n this.children[index] = newChild;\r\n }\r\n }\r\n AmeCustomizable.Container = Container;\r\n class Section extends Container {\r\n constructor(data, children = []) {\r\n super(data, children);\r\n this.preferredRole = data.preferredRole || 'navigation';\r\n }\r\n }\r\n AmeCustomizable.Section = Section;\r\n class ControlGroup extends Container {\r\n constructor(data, children = [], enabled = null) {\r\n super(data, children);\r\n this.enabled = enabled || ko.observable(true);\r\n this.labelFor = data.labelFor || null;\r\n }\r\n getComponentParams() {\r\n return Object.assign(Object.assign({}, super.getComponentParams()), { enabled: this.enabled });\r\n }\r\n }\r\n AmeCustomizable.ControlGroup = ControlGroup;\r\n class InterfaceStructure extends Container {\r\n constructor(data, children = []) {\r\n super(data, children);\r\n }\r\n getAsSections() {\r\n let currentAnonymousSection = null;\r\n let sections = [];\r\n for (const child of this.children) {\r\n if (child instanceof Section) {\r\n sections.push(child);\r\n currentAnonymousSection = null;\r\n }\r\n else {\r\n if (!currentAnonymousSection) {\r\n currentAnonymousSection = new Section({\r\n t: 'section',\r\n title: '',\r\n children: []\r\n });\r\n sections.push(currentAnonymousSection);\r\n }\r\n currentAnonymousSection.children.push(child);\r\n }\r\n }\r\n return sections;\r\n }\r\n }\r\n AmeCustomizable.InterfaceStructure = InterfaceStructure;\r\n class Control extends UiElement {\r\n constructor(data, settings = {}, enabled = null, children = []) {\r\n super(data, children);\r\n this.label = data.label;\r\n this.settings = settings;\r\n this.inputClasses = data.inputClasses || [];\r\n this.inputAttributes = data.inputAttributes || {};\r\n this.enabled = enabled || ko.observable(true);\r\n // noinspection PointlessBooleanExpressionJS -- Might not actually be a boolean if sent from the server.\r\n this.includesOwnLabel = (typeof data.includesOwnLabel !== 'undefined') ? (!!data.includesOwnLabel) : false;\r\n this.labelTargetId = data.labelTargetId || '';\r\n this.primaryInputId = data.primaryInputId || '';\r\n this.settingValidationErrors = ko.pureComputed(() => {\r\n const errors = [];\r\n for (const [settingId, setting] of Object.entries(this.settings)) {\r\n const settingErrors = setting.validationErrors();\r\n if (settingErrors.length > 0) {\r\n for (const error of settingErrors) {\r\n errors.push([settingId, error]);\r\n }\r\n }\r\n }\r\n return errors;\r\n });\r\n }\r\n getComponentParams() {\r\n return Object.assign(Object.assign({}, super.getComponentParams()), { settings: this.settings, enabled: this.enabled, label: this.label, primaryInputId: this.primaryInputId });\r\n }\r\n getAutoGroupTitle() {\r\n if (this.settings['value']) {\r\n const customGroupTitle = this.settings['value'].groupTitle;\r\n if (customGroupTitle) {\r\n return customGroupTitle;\r\n }\r\n }\r\n return this.label;\r\n }\r\n /**\r\n * Create a control group wrapper with this control as its only child.\r\n */\r\n createControlGroup() {\r\n let title = this.getAutoGroupTitle();\r\n //Some controls like the checkbox already show their own label.\r\n //Don't add a group title in that case.\r\n if (this.includesOwnLabel) {\r\n title = '';\r\n }\r\n const data = {\r\n t: 'control-group',\r\n title: title\r\n };\r\n if (this.labelTargetId) {\r\n data.labelFor = this.labelTargetId;\r\n }\r\n return new ControlGroup(data, [this], this.enabled);\r\n }\r\n }\r\n AmeCustomizable.Control = Control;\r\n function unserializeUiElement(data, findSetting, dataCustomizer) {\r\n if (typeof dataCustomizer === 'function') {\r\n dataCustomizer(data);\r\n }\r\n const dataAsRecord = data;\r\n //Unserialize children recursively.\r\n let children = [];\r\n if ((typeof dataAsRecord['children'] !== 'undefined') && Array.isArray(dataAsRecord['children'])) {\r\n for (const childData of dataAsRecord['children']) {\r\n children.push(unserializeUiElement(childData, findSetting, dataCustomizer));\r\n }\r\n }\r\n //Unserialize the \"enabled\" condition.\r\n let enabled = null;\r\n if ((data.t === 'control') || (data.t === 'control-group')) {\r\n if (typeof data.enabled !== 'undefined') {\r\n if (isSettingConditionData(data.enabled)) {\r\n const condition = SettingCondition.fromData(data.enabled, findSetting);\r\n enabled = ko.pureComputed(() => condition.evaluate());\r\n }\r\n else {\r\n enabled = ko.pureComputed(() => !!data.enabled);\r\n }\r\n }\r\n else {\r\n enabled = ko.observable(true);\r\n }\r\n }\r\n switch (data.t) {\r\n case 'section':\r\n return new Section(data, children);\r\n case 'control-group':\r\n return new ControlGroup(data, children, enabled);\r\n case 'structure':\r\n return new InterfaceStructure(data, children);\r\n case 'control':\r\n let settings = {};\r\n if (data.settings) {\r\n for (const childName in data.settings) {\r\n if (data.settings.hasOwnProperty(childName)) {\r\n const settingId = data.settings[childName];\r\n const setting = findSetting(settingId);\r\n if (setting.isDefined()) {\r\n settings[childName] = setting.get();\r\n }\r\n else {\r\n throw new Error('Unknown setting \"' + settingId + '\" referenced by control \"' + data.label + '\".');\r\n }\r\n }\r\n }\r\n }\r\n return new Control(data, settings, enabled, children);\r\n }\r\n }\r\n AmeCustomizable.unserializeUiElement = unserializeUiElement;\r\n class SettingReaderRegistry {\r\n constructor() {\r\n this.notFound = {};\r\n this.valueReaders = [];\r\n }\r\n registerValueReader(getter, idPrefix = null) {\r\n this.valueReaders.push({ getter, idPrefix });\r\n }\r\n /**\r\n * Try to find a setting in a registered setting reader.\r\n */\r\n getValue(settingId) {\r\n for (const { getter, idPrefix } of this.valueReaders) {\r\n if ((idPrefix !== null) && !(settingId.startsWith(idPrefix))) {\r\n continue;\r\n }\r\n const result = getter(settingId, this.notFound);\r\n if (result !== this.notFound) {\r\n return some(result);\r\n }\r\n }\r\n return none;\r\n }\r\n }\r\n AmeCustomizable.SettingReaderRegistry = SettingReaderRegistry;\r\n class PreviewRegistry {\r\n constructor(previewValueGetter) {\r\n this.previewValueGetter = previewValueGetter;\r\n this.settingPreviewUpdaters = {};\r\n this.notFound = {};\r\n this.allPreviewUpdaters = ko.observableArray([]);\r\n }\r\n preview(settingId, value) {\r\n if (!this.settingPreviewUpdaters.hasOwnProperty(settingId)) {\r\n return;\r\n }\r\n const updaters = this.settingPreviewUpdaters[settingId];\r\n for (const updater of updaters) {\r\n updater.preview(settingId, value, this.previewValueGetter);\r\n }\r\n }\r\n clearPreview() {\r\n for (const updater of this.allPreviewUpdaters()) {\r\n updater.clearPreview();\r\n }\r\n }\r\n registerPreviewUpdater(settingIds, updater) {\r\n for (const settingId of settingIds) {\r\n if (!this.settingPreviewUpdaters.hasOwnProperty(settingId)) {\r\n this.settingPreviewUpdaters[settingId] = [];\r\n }\r\n this.settingPreviewUpdaters[settingId].push(updater);\r\n }\r\n if (this.allPreviewUpdaters.indexOf(updater) < 0) {\r\n this.allPreviewUpdaters.push(updater);\r\n }\r\n }\r\n registerPreviewCallback(settingId, callback) {\r\n this.registerPreviewUpdater([settingId], new PreviewCallbackWrapper(callback));\r\n }\r\n canPreview(settingId) {\r\n return (this.settingPreviewUpdaters.hasOwnProperty(settingId)\r\n && (this.settingPreviewUpdaters[settingId].length > 0));\r\n }\r\n }\r\n AmeCustomizable.PreviewRegistry = PreviewRegistry;\r\n class PreviewCallbackWrapper {\r\n constructor(callback) {\r\n this.callback = callback;\r\n }\r\n preview(settingId, value, getSettingValue) {\r\n this.callback(value);\r\n }\r\n clearPreview() {\r\n //Nothing to do in this case.\r\n }\r\n }\r\n class ThrottledPreviewRegistry extends PreviewRegistry {\r\n constructor(previewValueGetter, minPreviewRefreshInterval = 40) {\r\n super(previewValueGetter);\r\n this.minPreviewRefreshInterval = minPreviewRefreshInterval;\r\n this.pendingSettings = {};\r\n this.throttledUpdate = throttleAnimationFrame(this.applyPendingUpdates.bind(this), this.minPreviewRefreshInterval);\r\n }\r\n queuePreview(settingId) {\r\n this.pendingSettings[settingId] = true;\r\n this.throttledUpdate();\r\n }\r\n applyPendingUpdates() {\r\n //Cancel any pending updates in case this method was called directly.\r\n this.throttledUpdate.cancel();\r\n const pendingSettingIds = Object.keys(this.pendingSettings);\r\n if (pendingSettingIds.length === 0) {\r\n return;\r\n }\r\n this.updatePreview(pendingSettingIds);\r\n this.pendingSettings = {};\r\n }\r\n /**\r\n * Update the preview for the specified settings.\r\n *\r\n * This method is called by the throttled update function, but it can also be called\r\n * directly if necessary, e.g. to update the preview for all settings when the user\r\n * opens a settings screen for the first time. Note that calling it will *not* cancel\r\n * pending updates.\r\n *\r\n * @param settingIds\r\n */\r\n updatePreview(settingIds) {\r\n if (settingIds.length < 1) {\r\n return;\r\n }\r\n for (const settingId of settingIds) {\r\n const value = this.previewValueGetter(settingId, this.notFound);\r\n if (value !== this.notFound) {\r\n this.preview(settingId, value);\r\n }\r\n }\r\n }\r\n clearPreview() {\r\n this.throttledUpdate.cancel();\r\n this.pendingSettings = {};\r\n super.clearPreview();\r\n }\r\n }\r\n AmeCustomizable.ThrottledPreviewRegistry = ThrottledPreviewRegistry;\r\n /**\r\n * Creates a throttled function that runs the specified callback at most once\r\n * every `minInterval` milliseconds.\r\n *\r\n * The callback is always invoked using `requestAnimationFrame()`, so it will be delayed\r\n * until the next frame even if the required interval has already passed.\r\n */\r\n function throttleAnimationFrame(callback, minInterval = 0) {\r\n /**\r\n * Expected time between animation frames. Intervals shorter than this will be ineffective.\r\n */\r\n const expectedFrameTime = 1000 / 60;\r\n /**\r\n * The threshold at which we will use `setTimeout()` instead of `requestAnimationFrame()`.\r\n */\r\n const timeoutThreshold = Math.max(1000 / 20, expectedFrameTime * 2 + 1);\r\n const epsilon = 0.001;\r\n let requestAnimationFrameId = null;\r\n let timerId = null;\r\n let lastCallTimestamp = 0;\r\n let nextCallTimestamp = 0;\r\n function animationCallback() {\r\n requestAnimationFrameId = null;\r\n const now = Date.now();\r\n if (nextCallTimestamp <= now) {\r\n lastCallTimestamp = now;\r\n callback();\r\n return;\r\n }\r\n else {\r\n requestAnimationFrameId = window.requestAnimationFrame(animationCallback);\r\n }\r\n }\r\n const invoke = () => {\r\n if ((requestAnimationFrameId !== null) || (timerId !== null)) {\r\n return; //Already scheduled.\r\n }\r\n nextCallTimestamp = lastCallTimestamp + minInterval;\r\n const now = Date.now();\r\n if (nextCallTimestamp <= now) {\r\n nextCallTimestamp = now + expectedFrameTime - epsilon;\r\n }\r\n //Two-stage throttling: If the remaining time is large, use setTimeout().\r\n //If it's small, use requestAnimationFrame() and go frame by frame.\r\n const remainingTime = nextCallTimestamp - now;\r\n if (remainingTime > timeoutThreshold) {\r\n timerId = window.setTimeout(() => {\r\n timerId = null;\r\n requestAnimationFrameId = window.requestAnimationFrame(animationCallback);\r\n }, remainingTime - (expectedFrameTime / 2));\r\n }\r\n else {\r\n //Use requestAnimationFrame.\r\n requestAnimationFrameId = window.requestAnimationFrame(animationCallback);\r\n }\r\n };\r\n invoke.cancel = () => {\r\n if (requestAnimationFrameId !== null) {\r\n window.cancelAnimationFrame(requestAnimationFrameId);\r\n requestAnimationFrameId = null;\r\n }\r\n if (timerId !== null) {\r\n window.clearTimeout(timerId);\r\n timerId = null;\r\n }\r\n };\r\n return invoke;\r\n }\r\n //endregion\r\n})(AmeCustomizable || (AmeCustomizable = {}));\r\nexport var AmeCustomizableViewModel;\r\n(function (AmeCustomizableViewModel) {\r\n var SettingCollection = AmeCustomizable.SettingCollection;\r\n var Setting = AmeCustomizable.Setting;\r\n var ThrottledPreviewRegistry = AmeCustomizable.ThrottledPreviewRegistry;\r\n var SettingReaderRegistry = AmeCustomizable.SettingReaderRegistry;\r\n var lift = AmeMiniFunc.lift;\r\n class SimpleVm extends ThrottledPreviewRegistry {\r\n constructor(extraPreviewCondition = null) {\r\n const getSettingValue = (settingId, defaultResult) => {\r\n const setting = this.getOrCreateKnownSetting(settingId);\r\n if (setting !== null) {\r\n return setting.value();\r\n }\r\n return defaultResult;\r\n };\r\n super(getSettingValue, 40);\r\n this.previewDesired = ko.observable(false);\r\n this.settings = new SettingCollection();\r\n this.settingReaders = new SettingReaderRegistry();\r\n this.isPreviewPossible = ko.pureComputed(() => {\r\n return this.allPreviewUpdaters().length > 0;\r\n });\r\n this.isPreviewEnabled = ko.computed({\r\n read: () => {\r\n if (extraPreviewCondition !== null) {\r\n if (!extraPreviewCondition()) {\r\n return false;\r\n }\r\n }\r\n return this.getPreviewActiveState();\r\n },\r\n write: (newValue) => {\r\n this.previewDesired(newValue);\r\n if (newValue && !this.getPreviewActiveState()) {\r\n //Can't actually enable preview. Reset the checkbox/other input.\r\n this.isPreviewEnabled.notifySubscribers();\r\n }\r\n }\r\n });\r\n this.isPreviewEnabled.subscribe((newValue) => {\r\n if (newValue) {\r\n this.updatePreview(this.settings.getAllSettingIds());\r\n }\r\n else {\r\n this.clearPreview();\r\n }\r\n });\r\n this.settings.addChangeListener((setting) => {\r\n if (!this.isPreviewEnabled()) {\r\n return;\r\n }\r\n this.queuePreview(setting.id);\r\n });\r\n }\r\n getSettingObservable(settingId, unusedDefaultValue = null) {\r\n const result = this.getOrCreateKnownSetting(settingId);\r\n if (result !== null) {\r\n return result.value;\r\n }\r\n throw new Error('Unknown setting ID: ' + settingId);\r\n }\r\n getOrCreateKnownSetting(settingId) {\r\n const result = this.settings.get(settingId);\r\n if (result.isDefined()) {\r\n return result.get();\r\n }\r\n const foundValue = this.settingReaders.getValue(settingId);\r\n if (foundValue.isDefined()) {\r\n const setting = new Setting(settingId, foundValue.get());\r\n this.settings.add(setting);\r\n return setting;\r\n }\r\n return null;\r\n }\r\n registerSettingReader(reader, idPrefix = null) {\r\n this.settingReaders.registerValueReader(reader, idPrefix);\r\n }\r\n getPreviewActiveState() {\r\n return this.previewDesired() && this.isPreviewPossible();\r\n }\r\n getAllSettingValues() {\r\n return this.settings.getAllSettingValues();\r\n }\r\n /**\r\n * Reread all settings from the value readers. This will be used to reload settings\r\n * in case the underlying configuration is reset or a new configuration is loaded.\r\n */\r\n reloadAllSettings() {\r\n for (const settingId of this.settings.getAllSettingIds()) {\r\n lift([this.settings.get(settingId), this.settingReaders.getValue(settingId)], (setting, newValue) => setting.value(newValue));\r\n }\r\n }\r\n }\r\n AmeCustomizableViewModel.SimpleVm = SimpleVm;\r\n // noinspection JSUnusedGlobalSymbols -- Not used right now, but kept for testing and prototyping purposes.\r\n class NullVm {\r\n constructor() {\r\n this.settings = new SettingCollection();\r\n }\r\n getSettingObservable(settingId, defaultValue = null) {\r\n const existingSetting = this.settings.get(settingId);\r\n if (existingSetting.isDefined()) {\r\n return existingSetting.get().value;\r\n }\r\n const setting = new Setting(settingId, defaultValue);\r\n this.settings.add(setting);\r\n return setting.value;\r\n }\r\n getAllSettingValues() {\r\n return this.settings.getAllSettingValues();\r\n }\r\n }\r\n AmeCustomizableViewModel.NullVm = NullVm;\r\n})(AmeCustomizableViewModel || (AmeCustomizableViewModel = {}));\r\n//# sourceMappingURL=customizable.js.map"],"names":[],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"customizable.bundle.js","mappings":";;;;;;;;;;;;;;AAAa;AACN;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA,kDAAkD,YAAY;AAC9D;AACA,qBAAqB;AACrB;AACA;AACA;AACA,kDAAkD,YAAY;AAC9D;AACA,qBAAqB;AACrB;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2DAA2D,SAAS;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD,eAAe;AACnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD,2BAA2B,kIAAkI;AAC9M;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD,iCAAiC,uBAAuB;AACzG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,iDAAiD,iCAAiC,wGAAwG;AAC1L;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,kBAAkB;AACvD;AACA;AACA;AACA;AACA;AACA,yBAAyB,mBAAmB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,0CAA0C;AACpC;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,4DAA4D;AAC7D","sources":["webpack:///./extras/pro-customizables/assets/customizable.js"],"sourcesContent":["'use strict';\nexport var AmeCustomizable;\n(function (AmeCustomizable) {\n var some = AmeMiniFunc.some;\n var none = AmeMiniFunc.none;\n var Either = AmeMiniFunc.Either;\n const _ = wsAmeLodash;\n class Setting {\n constructor(id, value = null, defaultValue = null, supportsPostMessage = false, groupTitle = null, validator = null) {\n this.validator = validator;\n this.groupTitle = null;\n /**\n * The last value that was tried to be set. This is used to ignore server-side\n * validation errors when the input value has changed since the request was sent.\n *\n * Displayed validation errors should be relevant to what the user tried\n * to enter, not the currently stored setting value.\n */\n this.lastTriedNewValue = null;\n this.id = id;\n this.underlyingValue = ko.observable(value);\n this.defaultValue = defaultValue;\n this.supportsPostMessage = supportsPostMessage;\n this.groupTitle = groupTitle;\n this.lastTriedNewValue = value;\n this.value = ko.computed({\n read: () => this.underlyingValue(),\n write: (newValue) => {\n const errors = this.tryUpdate(newValue);\n if (errors && (errors.length > 0)) {\n /*\n We could revert to the previous value here, but there are some cases where\n that would interfere with the user's input. For example, if the user is\n manually typing in a URL, the value will be temporarily invalid until they\n finish entering the protocol and domain name. If we revert to the previous\n value, the user will have to start over.\n\n Instead, let's leave the invalid value in place and let the user fix it.\n */\n }\n },\n owner: this\n });\n this.validationErrors = ko.observableArray();\n this.isValid = ko.computed(() => {\n return (this.validationErrors().length === 0);\n });\n }\n tryUpdate(newValue) {\n this.lastTriedNewValue = newValue;\n const oldValue = this.underlyingValue();\n //Clear validation errors.\n this.validationErrors.removeAll();\n //Validate and sanitize the new value.\n const [sanitizedValue, errors] = this.validate(newValue);\n this.validationErrors.push(...errors);\n if (errors.length > 0) {\n return errors;\n }\n //Remember the last validation subject so that server-side validation results\n //can be ignored if the value has changed since the request was sent.\n this.lastTriedNewValue = sanitizedValue;\n //Only update the underlying value if it has changed.\n if (sanitizedValue !== oldValue) {\n this.underlyingValue(sanitizedValue);\n }\n return [];\n }\n validate(newValue) {\n if (this.validator !== null) {\n const result = this.validator.check(newValue);\n if (result.isLeft()) {\n return [newValue, [result.value]];\n }\n else if (result.isRight()) {\n newValue = result.value;\n }\n }\n return [newValue, []];\n }\n /**\n * Add validation errors to the setting if the current value still\n * matches the given value.\n *\n * This is intended as a way to add validation errors that were produced\n * asynchronously, such as by sending the value to the server for validation.\n * The setting's value can change while the validation is in progress,\n * so we need to check that the validated value matches the current one.\n *\n * @param subjectValue\n * @param errors\n */\n addValidationErrorsForValue(subjectValue, errors) {\n if (this.lastTriedNewValue !== subjectValue) {\n return;\n }\n //Add the error(s) only if there is no existing error with the same code.\n const existingCodes = _.keyBy(this.validationErrors(), 'code');\n for (const error of errors) {\n if ((typeof error.code === 'undefined') || !existingCodes.hasOwnProperty(error.code)) {\n this.validationErrors.push(error);\n }\n }\n }\n clearValidationErrorsForValue(subjectValue) {\n if (this.lastTriedNewValue !== subjectValue) {\n return;\n }\n this.validationErrors.removeAll();\n }\n }\n AmeCustomizable.Setting = Setting;\n function unserializeSettingMap(settings) {\n const collection = new SettingCollection();\n for (const settingId in settings) {\n if (!settings.hasOwnProperty(settingId)) {\n continue;\n }\n const definition = settings[settingId];\n collection.add(unserializeSetting(settingId, definition));\n }\n return collection;\n }\n AmeCustomizable.unserializeSettingMap = unserializeSettingMap;\n function unserializeSetting(settingId, definition) {\n return new Setting(settingId, (typeof definition.value !== 'undefined') ? definition.value : null, (typeof definition.defaultValue !== 'undefined') ? definition.defaultValue : null, (typeof definition.supportsPostMessage !== 'undefined') ? definition.supportsPostMessage : false, (typeof definition.groupTitle !== 'undefined') ? definition.groupTitle : null, (typeof definition.validation !== 'undefined') ? (new Validator(definition.validation)) : null);\n }\n AmeCustomizable.unserializeSetting = unserializeSetting;\n const BuiltinParsers = {\n 'numeric': (value, config) => {\n //In some UI controls the observable value is updated as the user types,\n //so this parser/validator should be tolerant and accept partial values.\n let parsed;\n let sanitized;\n if (typeof value === 'number') {\n parsed = sanitized = value;\n }\n else {\n sanitized = (typeof value === 'string') ? value : String(value);\n sanitized = AmeMiniFunc.sanitizeNumericString(sanitized);\n parsed = parseFloat(sanitized);\n if (isNaN(parsed)) {\n return Either.left({\n message: 'Value must be a number.',\n code: 'invalid_number'\n });\n }\n }\n if (config) {\n if ((typeof config.min !== 'undefined') && parsed < config.min) {\n return Either.left({\n message: `Value must be ${config.min} or greater`,\n code: 'min_value'\n });\n }\n if (typeof config.max !== 'undefined' && parsed > config.max) {\n return Either.left({\n message: `Value must be ${config.max} or lower`,\n code: 'max_value'\n });\n }\n }\n return Either.right(sanitized);\n },\n 'int': (value) => {\n let parsed = (typeof value === 'number') ? value : parseInt(String(value), 10);\n if (isNaN(parsed)) {\n return Either.left({\n message: 'Value must be a number.',\n code: 'invalid_type'\n });\n }\n parsed = Math.floor(parsed);\n return Either.right(parsed);\n }\n };\n class Validator {\n constructor(config) {\n this.config = config;\n this.parsers = [];\n //Converting to null is only allowed if the setting is nullable.\n if (config.convertEsToNull && !config.isNullable) {\n throw new Error('convertEsToNull is only allowed if the setting is nullable.');\n }\n if (config.parsers) {\n for (const [parserId, parserConfig] of config.parsers) {\n if (!BuiltinParsers.hasOwnProperty(parserId)) {\n throw new Error(`Unknown parser: ${parserId}`);\n }\n this.parsers.push([BuiltinParsers[parserId], parserConfig]);\n }\n }\n }\n check(value) {\n if (value === null) {\n if (this.config.isNullable) {\n return Either.right(value);\n }\n else {\n return Either.left({\n message: 'This setting cannot be null.'\n });\n }\n }\n if (typeof value === 'string') {\n if (this.config.convertEsToNull && (value === '')) {\n return Either.right(null);\n }\n }\n for (const [parser, parserConfig] of this.parsers) {\n const result = parser(value, (parserConfig === null) ? undefined : parserConfig);\n if (result.isLeft()) {\n return result;\n }\n else if (result.isRight()) {\n value = result.value;\n }\n }\n return Either.right(value);\n }\n }\n class SettingCollection {\n constructor() {\n this.settings = {};\n /**\n * Adding settings to an observable array makes it easier to automatically\n * update computed values like \"are any settings invalid?\".\n */\n this.observableSettings = ko.observableArray();\n const self = this;\n this.hasValidationErrors = ko.pureComputed(() => {\n return _.some(self.observableSettings(), (setting) => {\n return !setting.isValid();\n });\n });\n this.changeListeners = new Map();\n }\n get(id) {\n if (this.settings.hasOwnProperty(id)) {\n return some(this.settings[id]);\n }\n return none;\n }\n add(setting) {\n this.settings[setting.id] = setting;\n this.observableSettings.push(setting);\n setting.value.subscribe((newValue) => this.onSettingChanged(setting, newValue));\n }\n onSettingChanged(setting, newValue) {\n this.notifyChangeListeners(setting, newValue);\n }\n /**\n * Add a callback that will be called whenever the value of a setting changes.\n *\n * @param callback\n */\n addChangeListener(callback) {\n const id = Symbol();\n this.changeListeners.set(id, callback);\n return id;\n }\n removeChangeListener(id) {\n this.changeListeners.delete(id);\n }\n notifyChangeListeners(setting, newValue) {\n for (const listener of this.changeListeners.values()) {\n listener(setting, newValue);\n }\n }\n getAllSettingIds() {\n return Object.keys(this.settings);\n }\n getAllSettingValues() {\n const values = {};\n for (const id in this.settings) {\n if (this.settings.hasOwnProperty(id)) {\n values[id] = this.settings[id].value();\n }\n }\n return values;\n }\n }\n AmeCustomizable.SettingCollection = SettingCollection;\n function isSettingConditionData(data) {\n if ((typeof data !== 'object') || (data === null)) {\n return false;\n }\n const dataAsRecord = data;\n return (typeof dataAsRecord.settingId === 'string'\n && typeof dataAsRecord.op === 'string'\n && typeof dataAsRecord.value !== 'undefined');\n }\n class SettingCondition {\n constructor(setting, op, value) {\n this.setting = setting;\n this.op = op;\n this.value = value;\n }\n evaluate() {\n const settingValue = this.setting.value();\n switch (this.op) {\n case '==':\n //Note the intentional use of == instead of ===.\n return settingValue == this.value;\n case '!=':\n return settingValue != this.value;\n case '>':\n return settingValue > this.value;\n case '<':\n return settingValue < this.value;\n case '>=':\n return settingValue >= this.value;\n case '<=':\n return settingValue <= this.value;\n case 'falsy':\n return !settingValue;\n case 'truthy':\n return !!settingValue;\n }\n }\n static fromData(data, findSetting) {\n const setting = findSetting(data.settingId);\n if (!setting || setting.isEmpty()) {\n throw new Error(`Setting with ID \"${data.settingId}\" not found for SettingCondition`);\n }\n return new SettingCondition(setting.get(), data.op, data.value);\n }\n }\n AmeCustomizable.SettingCondition = SettingCondition;\n class UiElement {\n constructor(data, children = []) {\n this.component = data.component || '';\n this.id = data.id || '';\n this.description = data.description || '';\n this.classes = data.classes || [];\n this.styles = data.styles || {};\n this.componentParams = data.params || {};\n this.children = children;\n }\n getComponentParams() {\n return Object.assign(Object.assign({}, this.componentParams), { uiElement: this, id: this.id, description: this.description, classes: this.classes, styles: this.styles, children: this.children });\n }\n }\n AmeCustomizable.UiElement = UiElement;\n class Container extends UiElement {\n constructor(data, children = []) {\n super(data, children);\n this.title = data.title;\n }\n replaceChild(oldChild, newChild) {\n const index = this.children.indexOf(oldChild);\n if (index === -1) {\n throw new Error('Child not found');\n }\n this.children[index] = newChild;\n }\n replaceChildByIndex(index, newChild) {\n this.children[index] = newChild;\n }\n }\n AmeCustomizable.Container = Container;\n class Section extends Container {\n constructor(data, children = []) {\n super(data, children);\n this.preferredRole = data.preferredRole || 'navigation';\n }\n }\n AmeCustomizable.Section = Section;\n class ControlGroup extends Container {\n constructor(data, children = [], enabled = null) {\n super(data, children);\n this.enabled = enabled || ko.observable(true);\n this.labelFor = data.labelFor || null;\n }\n getComponentParams() {\n return Object.assign(Object.assign({}, super.getComponentParams()), { enabled: this.enabled });\n }\n }\n AmeCustomizable.ControlGroup = ControlGroup;\n class InterfaceStructure extends Container {\n constructor(data, children = []) {\n super(data, children);\n }\n getAsSections() {\n let currentAnonymousSection = null;\n let sections = [];\n for (const child of this.children) {\n if (child instanceof Section) {\n sections.push(child);\n currentAnonymousSection = null;\n }\n else {\n if (!currentAnonymousSection) {\n currentAnonymousSection = new Section({\n t: 'section',\n title: '',\n children: []\n });\n sections.push(currentAnonymousSection);\n }\n currentAnonymousSection.children.push(child);\n }\n }\n return sections;\n }\n }\n AmeCustomizable.InterfaceStructure = InterfaceStructure;\n class Control extends UiElement {\n constructor(data, settings = {}, enabled = null, children = []) {\n super(data, children);\n this.label = data.label;\n this.settings = settings;\n this.inputClasses = data.inputClasses || [];\n this.inputAttributes = data.inputAttributes || {};\n this.enabled = enabled || ko.observable(true);\n // noinspection PointlessBooleanExpressionJS -- Might not actually be a boolean if sent from the server.\n this.includesOwnLabel = (typeof data.includesOwnLabel !== 'undefined') ? (!!data.includesOwnLabel) : false;\n this.labelTargetId = data.labelTargetId || '';\n this.primaryInputId = data.primaryInputId || '';\n this.settingValidationErrors = ko.pureComputed(() => {\n const errors = [];\n for (const [settingId, setting] of Object.entries(this.settings)) {\n const settingErrors = setting.validationErrors();\n if (settingErrors.length > 0) {\n for (const error of settingErrors) {\n errors.push([settingId, error]);\n }\n }\n }\n return errors;\n });\n }\n getComponentParams() {\n return Object.assign(Object.assign({}, super.getComponentParams()), { settings: this.settings, enabled: this.enabled, label: this.label, primaryInputId: this.primaryInputId });\n }\n getAutoGroupTitle() {\n if (this.settings['value']) {\n const customGroupTitle = this.settings['value'].groupTitle;\n if (customGroupTitle) {\n return customGroupTitle;\n }\n }\n return this.label;\n }\n /**\n * Create a control group wrapper with this control as its only child.\n */\n createControlGroup() {\n let title = this.getAutoGroupTitle();\n //Some controls like the checkbox already show their own label.\n //Don't add a group title in that case.\n if (this.includesOwnLabel) {\n title = '';\n }\n const data = {\n t: 'control-group',\n title: title\n };\n if (this.labelTargetId) {\n data.labelFor = this.labelTargetId;\n }\n return new ControlGroup(data, [this], this.enabled);\n }\n }\n AmeCustomizable.Control = Control;\n function unserializeUiElement(data, findSetting, dataCustomizer) {\n if (typeof dataCustomizer === 'function') {\n dataCustomizer(data);\n }\n const dataAsRecord = data;\n //Unserialize children recursively.\n let children = [];\n if ((typeof dataAsRecord['children'] !== 'undefined') && Array.isArray(dataAsRecord['children'])) {\n for (const childData of dataAsRecord['children']) {\n children.push(unserializeUiElement(childData, findSetting, dataCustomizer));\n }\n }\n //Unserialize the \"enabled\" condition.\n let enabled = null;\n if ((data.t === 'control') || (data.t === 'control-group')) {\n if (typeof data.enabled !== 'undefined') {\n if (isSettingConditionData(data.enabled)) {\n const condition = SettingCondition.fromData(data.enabled, findSetting);\n enabled = ko.pureComputed(() => condition.evaluate());\n }\n else {\n enabled = ko.pureComputed(() => !!data.enabled);\n }\n }\n else {\n enabled = ko.observable(true);\n }\n }\n switch (data.t) {\n case 'section':\n return new Section(data, children);\n case 'control-group':\n return new ControlGroup(data, children, enabled);\n case 'structure':\n return new InterfaceStructure(data, children);\n case 'control':\n let settings = {};\n if (data.settings) {\n for (const childName in data.settings) {\n if (data.settings.hasOwnProperty(childName)) {\n const settingId = data.settings[childName];\n const setting = findSetting(settingId);\n if (setting.isDefined()) {\n settings[childName] = setting.get();\n }\n else {\n throw new Error('Unknown setting \"' + settingId + '\" referenced by control \"' + data.label + '\".');\n }\n }\n }\n }\n return new Control(data, settings, enabled, children);\n }\n }\n AmeCustomizable.unserializeUiElement = unserializeUiElement;\n class SettingReaderRegistry {\n constructor() {\n this.notFound = {};\n this.valueReaders = [];\n }\n registerValueReader(getter, idPrefix = null) {\n this.valueReaders.push({ getter, idPrefix });\n }\n /**\n * Try to find a setting in a registered setting reader.\n */\n getValue(settingId) {\n for (const { getter, idPrefix } of this.valueReaders) {\n if ((idPrefix !== null) && !(settingId.startsWith(idPrefix))) {\n continue;\n }\n const result = getter(settingId, this.notFound);\n if (result !== this.notFound) {\n return some(result);\n }\n }\n return none;\n }\n }\n AmeCustomizable.SettingReaderRegistry = SettingReaderRegistry;\n class PreviewRegistry {\n constructor(previewValueGetter) {\n this.previewValueGetter = previewValueGetter;\n this.settingPreviewUpdaters = {};\n this.notFound = {};\n this.allPreviewUpdaters = ko.observableArray([]);\n }\n preview(settingId, value) {\n if (!this.settingPreviewUpdaters.hasOwnProperty(settingId)) {\n return;\n }\n const updaters = this.settingPreviewUpdaters[settingId];\n for (const updater of updaters) {\n updater.preview(settingId, value, this.previewValueGetter);\n }\n }\n clearPreview() {\n for (const updater of this.allPreviewUpdaters()) {\n updater.clearPreview();\n }\n }\n registerPreviewUpdater(settingIds, updater) {\n for (const settingId of settingIds) {\n if (!this.settingPreviewUpdaters.hasOwnProperty(settingId)) {\n this.settingPreviewUpdaters[settingId] = [];\n }\n this.settingPreviewUpdaters[settingId].push(updater);\n }\n if (this.allPreviewUpdaters.indexOf(updater) < 0) {\n this.allPreviewUpdaters.push(updater);\n }\n }\n registerPreviewCallback(settingId, callback) {\n this.registerPreviewUpdater([settingId], new PreviewCallbackWrapper(callback));\n }\n canPreview(settingId) {\n return (this.settingPreviewUpdaters.hasOwnProperty(settingId)\n && (this.settingPreviewUpdaters[settingId].length > 0));\n }\n }\n AmeCustomizable.PreviewRegistry = PreviewRegistry;\n class PreviewCallbackWrapper {\n constructor(callback) {\n this.callback = callback;\n }\n preview(settingId, value, getSettingValue) {\n this.callback(value);\n }\n clearPreview() {\n //Nothing to do in this case.\n }\n }\n class ThrottledPreviewRegistry extends PreviewRegistry {\n constructor(previewValueGetter, minPreviewRefreshInterval = 40) {\n super(previewValueGetter);\n this.minPreviewRefreshInterval = minPreviewRefreshInterval;\n this.pendingSettings = {};\n this.throttledUpdate = throttleAnimationFrame(this.applyPendingUpdates.bind(this), this.minPreviewRefreshInterval);\n }\n queuePreview(settingId) {\n this.pendingSettings[settingId] = true;\n this.throttledUpdate();\n }\n applyPendingUpdates() {\n //Cancel any pending updates in case this method was called directly.\n this.throttledUpdate.cancel();\n const pendingSettingIds = Object.keys(this.pendingSettings);\n if (pendingSettingIds.length === 0) {\n return;\n }\n this.updatePreview(pendingSettingIds);\n this.pendingSettings = {};\n }\n /**\n * Update the preview for the specified settings.\n *\n * This method is called by the throttled update function, but it can also be called\n * directly if necessary, e.g. to update the preview for all settings when the user\n * opens a settings screen for the first time. Note that calling it will *not* cancel\n * pending updates.\n *\n * @param settingIds\n */\n updatePreview(settingIds) {\n if (settingIds.length < 1) {\n return;\n }\n for (const settingId of settingIds) {\n const value = this.previewValueGetter(settingId, this.notFound);\n if (value !== this.notFound) {\n this.preview(settingId, value);\n }\n }\n }\n clearPreview() {\n this.throttledUpdate.cancel();\n this.pendingSettings = {};\n super.clearPreview();\n }\n }\n AmeCustomizable.ThrottledPreviewRegistry = ThrottledPreviewRegistry;\n /**\n * Creates a throttled function that runs the specified callback at most once\n * every `minInterval` milliseconds.\n *\n * The callback is always invoked using `requestAnimationFrame()`, so it will be delayed\n * until the next frame even if the required interval has already passed.\n */\n function throttleAnimationFrame(callback, minInterval = 0) {\n /**\n * Expected time between animation frames. Intervals shorter than this will be ineffective.\n */\n const expectedFrameTime = 1000 / 60;\n /**\n * The threshold at which we will use `setTimeout()` instead of `requestAnimationFrame()`.\n */\n const timeoutThreshold = Math.max(1000 / 20, expectedFrameTime * 2 + 1);\n const epsilon = 0.001;\n let requestAnimationFrameId = null;\n let timerId = null;\n let lastCallTimestamp = 0;\n let nextCallTimestamp = 0;\n function animationCallback() {\n requestAnimationFrameId = null;\n const now = Date.now();\n if (nextCallTimestamp <= now) {\n lastCallTimestamp = now;\n callback();\n return;\n }\n else {\n requestAnimationFrameId = window.requestAnimationFrame(animationCallback);\n }\n }\n const invoke = () => {\n if ((requestAnimationFrameId !== null) || (timerId !== null)) {\n return; //Already scheduled.\n }\n nextCallTimestamp = lastCallTimestamp + minInterval;\n const now = Date.now();\n if (nextCallTimestamp <= now) {\n nextCallTimestamp = now + expectedFrameTime - epsilon;\n }\n //Two-stage throttling: If the remaining time is large, use setTimeout().\n //If it's small, use requestAnimationFrame() and go frame by frame.\n const remainingTime = nextCallTimestamp - now;\n if (remainingTime > timeoutThreshold) {\n timerId = window.setTimeout(() => {\n timerId = null;\n requestAnimationFrameId = window.requestAnimationFrame(animationCallback);\n }, remainingTime - (expectedFrameTime / 2));\n }\n else {\n //Use requestAnimationFrame.\n requestAnimationFrameId = window.requestAnimationFrame(animationCallback);\n }\n };\n invoke.cancel = () => {\n if (requestAnimationFrameId !== null) {\n window.cancelAnimationFrame(requestAnimationFrameId);\n requestAnimationFrameId = null;\n }\n if (timerId !== null) {\n window.clearTimeout(timerId);\n timerId = null;\n }\n };\n return invoke;\n }\n //endregion\n})(AmeCustomizable || (AmeCustomizable = {}));\nexport var AmeCustomizableViewModel;\n(function (AmeCustomizableViewModel) {\n var SettingCollection = AmeCustomizable.SettingCollection;\n var Setting = AmeCustomizable.Setting;\n var ThrottledPreviewRegistry = AmeCustomizable.ThrottledPreviewRegistry;\n var SettingReaderRegistry = AmeCustomizable.SettingReaderRegistry;\n var lift = AmeMiniFunc.lift;\n class SimpleVm extends ThrottledPreviewRegistry {\n constructor(extraPreviewCondition = null) {\n const getSettingValue = (settingId, defaultResult) => {\n const setting = this.getOrCreateKnownSetting(settingId);\n if (setting !== null) {\n return setting.value();\n }\n return defaultResult;\n };\n super(getSettingValue, 40);\n this.previewDesired = ko.observable(false);\n this.settings = new SettingCollection();\n this.settingReaders = new SettingReaderRegistry();\n this.isPreviewPossible = ko.pureComputed(() => {\n return this.allPreviewUpdaters().length > 0;\n });\n this.isPreviewEnabled = ko.computed({\n read: () => {\n if (extraPreviewCondition !== null) {\n if (!extraPreviewCondition()) {\n return false;\n }\n }\n return this.getPreviewActiveState();\n },\n write: (newValue) => {\n this.previewDesired(newValue);\n if (newValue && !this.getPreviewActiveState()) {\n //Can't actually enable preview. Reset the checkbox/other input.\n this.isPreviewEnabled.notifySubscribers();\n }\n }\n });\n this.isPreviewEnabled.subscribe((newValue) => {\n if (newValue) {\n this.updatePreview(this.settings.getAllSettingIds());\n }\n else {\n this.clearPreview();\n }\n });\n this.settings.addChangeListener((setting) => {\n if (!this.isPreviewEnabled()) {\n return;\n }\n this.queuePreview(setting.id);\n });\n }\n getSettingObservable(settingId, unusedDefaultValue = null) {\n const result = this.getOrCreateKnownSetting(settingId);\n if (result !== null) {\n return result.value;\n }\n throw new Error('Unknown setting ID: ' + settingId);\n }\n getOrCreateKnownSetting(settingId) {\n const result = this.settings.get(settingId);\n if (result.isDefined()) {\n return result.get();\n }\n const foundValue = this.settingReaders.getValue(settingId);\n if (foundValue.isDefined()) {\n const setting = new Setting(settingId, foundValue.get());\n this.settings.add(setting);\n return setting;\n }\n return null;\n }\n registerSettingReader(reader, idPrefix = null) {\n this.settingReaders.registerValueReader(reader, idPrefix);\n }\n getPreviewActiveState() {\n return this.previewDesired() && this.isPreviewPossible();\n }\n getAllSettingValues() {\n return this.settings.getAllSettingValues();\n }\n /**\n * Reread all settings from the value readers. This will be used to reload settings\n * in case the underlying configuration is reset or a new configuration is loaded.\n */\n reloadAllSettings() {\n for (const settingId of this.settings.getAllSettingIds()) {\n lift([this.settings.get(settingId), this.settingReaders.getValue(settingId)], (setting, newValue) => setting.value(newValue));\n }\n }\n }\n AmeCustomizableViewModel.SimpleVm = SimpleVm;\n // noinspection JSUnusedGlobalSymbols -- Not used right now, but kept for testing and prototyping purposes.\n class NullVm {\n constructor() {\n this.settings = new SettingCollection();\n }\n getSettingObservable(settingId, defaultValue = null) {\n const existingSetting = this.settings.get(settingId);\n if (existingSetting.isDefined()) {\n return existingSetting.get().value;\n }\n const setting = new Setting(settingId, defaultValue);\n this.settings.add(setting);\n return setting.value;\n }\n getAllSettingValues() {\n return this.settings.getAllSettingValues();\n }\n }\n AmeCustomizableViewModel.NullVm = NullVm;\n})(AmeCustomizableViewModel || (AmeCustomizableViewModel = {}));\n//# sourceMappingURL=customizable.js.map"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/dist/menu-styler-features.bundle.js b/dist/menu-styler-features.bundle.js index c98bc06..d45c998 100644 --- a/dist/menu-styler-features.bundle.js +++ b/dist/menu-styler-features.bundle.js @@ -168,6 +168,12 @@ var AmeMenuStylerJsFeatures; const linkUrl = (typeof config.linkUrl === 'string') ? config.linkUrl.trim() : ''; if (linkUrl) { $link.show().attr('href', linkUrl); + if (config.openInNewTab) { + $link.attr('target', '_blank'); + } + else { + $link.removeAttr('target'); + } } else { $link.hide().removeAttr('href'); diff --git a/dist/menu-styler-features.bundle.js.map b/dist/menu-styler-features.bundle.js.map index d6fcd2b..d4efb08 100644 --- a/dist/menu-styler-features.bundle.js.map +++ b/dist/menu-styler-features.bundle.js.map @@ -1 +1 @@ -{"version":3,"file":"menu-styler-features.bundle.js","mappings":"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","sources":["webpack:///./extras/modules/menu-styler/menu-styler-features.ts"],"sourcesContent":["'use strict';\n\nimport {AmeCustomizable, AmeCustomizableViewModel} from '../../pro-customizables/assets/customizable.js';\n\ndeclare const ameMenuStylerFeatureConfig: AmeMenuStylerJsFeatures.FeatureScriptConfig;\n\nexport namespace AmeMenuStylerJsFeatures {\n\timport PreviewUpdater = AmeCustomizable.PreviewUpdater;\n\timport SimpleVm = AmeCustomizableViewModel.SimpleVm;\n\tconst $ = jQuery;\n\n\tinterface FeatureConfig {\n\t\tsettings: T;\n\t\tsettingMap: SettingMap;\n\t}\n\n\tinterface FeatureSettings {\n\t}\n\n\tinterface SettingMap {\n\t\t[settingId: string]: keyof T;\n\t}\n\n\tabstract class StylerJsFeature implements PreviewUpdater {\n\t\tprotected readonly initialSettings: S;\n\t\tprotected readonly settingMap: SettingMap;\n\n\t\tprotected activeSettings: S;\n\n\t\tprotected constructor(config: FeatureConfig) {\n\t\t\tthis.initialSettings = config.settings;\n\t\t\tthis.activeSettings = this.initialSettings;\n\t\t\tthis.settingMap = config.settingMap;\n\t\t\t//Note: Subclasses should call `this.update(this.initialSettings)` in their constructor.\n\t\t\t//It is not done here because the subclass constructor may need to do some setup first.\n\t\t}\n\n\t\tclearPreview(): void {\n\t\t\tthis.update(this.initialSettings);\n\t\t};\n\n\t\tpreview(settingId: string, value: any, getSettingValue: AmeCustomizable.SettingValueReader): void {\n\t\t\tconst localKey = this.settingMap[settingId];\n\t\t\tif (typeof localKey === 'undefined') {\n\t\t\t\tif (console.warn) {\n\t\t\t\t\tconsole.warn(\n\t\t\t\t\t\t'Preview failed: The feature \"' + this.getFeatureId()\n\t\t\t\t\t\t+ '\" does not use the setting \"' + settingId + '\".'\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlet newSettings: S = {...this.activeSettings};\n\t\t\tnewSettings[localKey] = value;\n\n\t\t\t//Get any known but missing settings using the callback.\n\t\t\tfor (const settingId in this.settingMap) {\n\t\t\t\tif (this.settingMap.hasOwnProperty(settingId)) {\n\t\t\t\t\tconst localKey = this.settingMap[settingId];\n\t\t\t\t\tif (!newSettings.hasOwnProperty(localKey)) {\n\t\t\t\t\t\tnewSettings[localKey] = getSettingValue(settingId, null);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.update(newSettings);\n\t\t}\n\n\t\tprotected update(settings: S): void {\n\t\t\tthis.activeSettings = settings;\n\t\t}\n\n\t\t/**\n\t\t * Get the setting IDs that this feature uses. The feature can preview any of these settings.\n\t\t */\n\t\tgetPreviewableSettingIds(): string[] {\n\t\t\treturn Object.keys(this.settingMap);\n\t\t}\n\n\t\tabstract getFeatureId(): string;\n\t}\n\n\tinterface CollapseButtonTextSettings extends FeatureSettings {\n\t\tlabel: string;\n\t}\n\n\texport class CollapseButtonTextFeature extends StylerJsFeature {\n\t\tprotected originalLabel: string | null = null;\n\n\t\tconstructor(config: FeatureConfig) {\n\t\t\tsuper(config);\n\t\t\tthis.update(this.initialSettings);\n\t\t}\n\n\t\tprotected update(settings: CollapseButtonTextSettings): void {\n\t\t\tsuper.update(settings);\n\n\t\t\tconst $label = $('#adminmenu #collapse-button .collapse-button-label');\n\t\t\tif (this.originalLabel === null) {\n\t\t\t\tthis.originalLabel = $label.text();\n\t\t\t}\n\n\t\t\tif ((typeof settings['label'] === 'undefined') || (settings.label === '') || (settings.label === null)) {\n\t\t\t\t$label.text(this.originalLabel);\n\t\t\t} else {\n\t\t\t\t$label.text(settings.label);\n\t\t\t}\n\t\t}\n\n\t\tgetFeatureId(): string {\n\t\t\treturn 'CollapseButtonTextFeature';\n\t\t}\n\t}\n\n\tinterface ImageSettingValue {\n\t\tattachmentId: number | null;\n\t\tattachmentSiteId: number | null;\n\t\tattachmentUrl: string;\n\t\texternalUrl: string | null;\n\t\twidth: number | null;\n\t\theight: number | null;\n\t}\n\n\tinterface MenuLogoSettings extends FeatureSettings {\n\t\tbaseImage: ImageSettingValue | null;\n\t\tcollapsedImage: ImageSettingValue | null;\n\t\tlinkUrl: string | null;\n\t\tbackgroundColor: string | null;\n\t\tbaseHeight: number | null;\n\t\tcollapsedHeight: number | null;\n\t}\n\n\texport class MenuLogoFeature extends StylerJsFeature {\n\t\tprotected $container: JQuery | null = null;\n\t\tprotected $link: JQuery | null = null;\n\t\tprotected $styleElement: JQuery | null = null;\n\n\t\tprivate readonly logoId = 'ame_ms_admin_menu_logo';\n\t\tprivate readonly linkId = 'ame_ms_menu_logo_link';\n\n\t\t/*\n\t\t * Note: The logo container is set up so that the logo image is inside the content\n\t\t * box (i.e. it does not overlap the padding or the margin), but the logo link covers\n\t\t * the padding area. This way the user can control the clickable (padding) area and\n\t\t * the unclickable (margin) area separately.\n\t\t */\n\n\t\tprivate readonly staticLogoStyles = [\n\t\t\t'background-size: contain;',\n\t\t\t'background-repeat: no-repeat;',\n\t\t\t'background-position: 0;',\n\t\t\t'background-origin: content-box;',\n\t\t\t'min-height: 10px;',\n\t\t\t'position: relative;',\n\t\t\t'display: block;',\n\t\t\t'box-sizing: content-box;',\n\t\t];\n\n\t\tprivate readonly staticLinkCss = `#adminmenu #${this.linkId} {\n\t\t\tdisplay: block;\n\t\t\tposition: absolute;\n\t\t\ttop: 0; left: 0; right: 0; bottom: 0;\n\t\t\tmargin: 0;\n\t\t\tpadding: 0;\n\t\t\tbackground: transparent;\n\t\t\ttext-decoration: none;\n\t\t}\n\t\t#adminmenu #${this.linkId}:hover, #adminmenu #${this.linkId}:focus {\n\t\t\tbox-shadow: none;\n\t\t\ttransition: none;\n\t\t\tcolor: transparent;\n\t\t}`;\n\n\t\tprivate defaultMenuMarginTop: number | null = null;\n\t\tprivate defaultMenuMarginBottom: number | null = null;\n\n\t\tconstructor(config: FeatureConfig) {\n\t\t\tsuper(config);\n\t\t\tthis.update(this.initialSettings);\n\t\t}\n\n\t\tprotected update(config: MenuLogoSettings) {\n\t\t\tsuper.update(config);\n\t\t\tthis.updateFromActiveSettings();\n\t\t}\n\n\t\tprivate updateFromActiveSettings(): void {\n\t\t\tconst config = this.activeSettings; //Local reference in case the config changes while loading images.\n\n\t\t\tconst hasBaseImage = this.settingContainsImage(config.baseImage);\n\t\t\tconst hasCollapsedImage = this.settingContainsImage(config.collapsedImage);\n\t\t\tif (!hasBaseImage && !hasCollapsedImage) {\n\t\t\t\tthis.removeLogo();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.withLogoImages(config, (baseImageUrl, collapsedImageUrl) => {\n\t\t\t\tconst [$styleElement, $link] = this.getOrCreateElements();\n\t\t\t\tlet baseLogoStyles = [];\n\t\t\t\tlet collapsedLogoStyles = [];\n\n\t\t\t\tlet hasBaseLogo = false;\n\t\t\t\tlet hasCollapsedLogo = false;\n\n\t\t\t\tif (baseImageUrl) {\n\t\t\t\t\thasBaseLogo = true;\n\t\t\t\t\tbaseLogoStyles.push(`background-image: url(\"${baseImageUrl}\");`);\n\n\t\t\t\t\tconst baseHeight = Math.max(config.baseHeight ? config.baseHeight : 10, 10);\n\t\t\t\t\tbaseLogoStyles.push(`height: ${baseHeight}px;`);\n\t\t\t\t} else {\n\t\t\t\t\tbaseLogoStyles.push('display: none;')\n\t\t\t\t}\n\t\t\t\tif (collapsedImageUrl) {\n\t\t\t\t\thasCollapsedLogo = true;\n\t\t\t\t\tcollapsedLogoStyles.push(`background-image: url(\"${collapsedImageUrl}\");`);\n\t\t\t\t\tcollapsedLogoStyles.push('display: block;');\n\n\t\t\t\t\tconst collapsedHeight = Math.max(config.collapsedHeight ? config.collapsedHeight : 10, 10);\n\t\t\t\t\tcollapsedLogoStyles.push(`height: ${collapsedHeight}px;`);\n\t\t\t\t} else {\n\t\t\t\t\tcollapsedLogoStyles.push('display: none;');\n\t\t\t\t}\n\n\t\t\t\tif (config.backgroundColor) {\n\t\t\t\t\tbaseLogoStyles.push(`background-color: ${config.backgroundColor};`);\n\t\t\t\t}\n\n\t\t\t\tconst linkUrl = (typeof config.linkUrl === 'string') ? config.linkUrl.trim() : '';\n\t\t\t\tif (linkUrl) {\n\t\t\t\t\t$link.show().attr('href', linkUrl);\n\t\t\t\t} else {\n\t\t\t\t\t$link.hide().removeAttr('href');\n\t\t\t\t}\n\n\t\t\t\tbaseLogoStyles.unshift(...this.staticLogoStyles);\n\n\t\t\t\tconst baseStyle = `#adminmenu #${this.logoId} {\\n${baseLogoStyles.join('\\n')} }`;\n\t\t\t\tconst collapsedStyle = `.folded #adminmenu #${this.logoId} {\\n${collapsedLogoStyles.join('\\n')} }`;\n\n\t\t\t\t//Remove the top margin from the admin menu when the logo is visible.\n\t\t\t\t//We also need to let other AME components know that the vertical margin has changed.\n\t\t\t\t//This affects the \"Collapse button position\" setting.\n\t\t\t\tconst [, menuMarginBottom] = this.getDefaultVerticalMenuMargins();\n\t\t\t\tlet wrapperCss = `#adminmenuwrap { --ame-ms-menu-margin-bottom: ${menuMarginBottom}px; }`;\n\t\t\t\tif (hasBaseLogo) {\n\t\t\t\t\twrapperCss += `body:not(.folded) #adminmenu { margin-top: 0; }\\n`;\n\t\t\t\t\twrapperCss += `body:not(.folded) #adminmenuwrap { --ame-ms-menu-margin-top: 0px; }\\n`;\n\t\t\t\t}\n\t\t\t\tif (hasCollapsedLogo) {\n\t\t\t\t\twrapperCss += `.folded #adminmenu { margin-top: 0; }\\n`;\n\t\t\t\t\twrapperCss += `.folded #adminmenuwrap { --ame-ms-menu-margin-top: 0px; }\\n`;\n\t\t\t\t}\n\n\t\t\t\t$styleElement.text(baseStyle + \"\\n\" + collapsedStyle + \"\\n\" + this.staticLinkCss + \"\\n\" + wrapperCss);\n\t\t\t});\n\t\t}\n\n\t\tprivate settingContainsImage(setting: ImageSettingValue | null): boolean {\n\t\t\tif (setting === null) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn !!(((setting.attachmentId !== null) && (setting.attachmentId > 0)) || setting.externalUrl);\n\t\t}\n\n\t\tprivate withLogoImages(\n\t\t\tconfig: MenuLogoSettings,\n\t\t\tcallback: (baseImageUrl: string | null, collapsedImageUrl: string | null) => void\n\t\t): void {\n\t\t\tlet imageUrls = [\n\t\t\t\tthis.getImageUrl(config.baseImage),\n\t\t\t\tthis.getImageUrl(config.collapsedImage),\n\t\t\t];\n\n\t\t\t//Add the logo as quickly as possible to prevent the menu from visibly shifting.\n\t\t\t//Promises are usually asynchronous, so let's avoid them when possible and call\n\t\t\t//the callback immediately if both URLs are already known or invalid.\n\t\t\tif ((typeof imageUrls[0] === 'string') && (typeof imageUrls[1] === 'string')) {\n\t\t\t\tcallback(imageUrls[0], imageUrls[1]);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t//Assume that ES2020 is not available, so we can't use Promise.allSettled().\n\t\t\t//However, we want to wait for all promises to resolve, even if some fail.\n\t\t\tPromise.all(\n\t\t\t\timageUrls.map((p) => {\n\t\t\t\t\t//Convert known values to resolved promises.\n\t\t\t\t\tif ((typeof p === 'string') || (p === null)) {\n\t\t\t\t\t\treturn Promise.resolve(p);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn p.then(\n\t\t\t\t\t\t(value) => (typeof value === 'string') ? value : null,\n\t\t\t\t\t\t() => null //Convert errors to null.\n\t\t\t\t\t) as JQueryPromise;\n\t\t\t\t})\n\t\t\t).then((results) => {\n\t\t\t\t//If the active config has changed, don't apply the results.\n\t\t\t\t//The URLs that we just loaded might not be relevant any more.\n\t\t\t\tif (this.activeSettings !== config) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst [baseImageUrl, collapsedImageUrl] = results;\n\t\t\t\tcallback(baseImageUrl ?? null, collapsedImageUrl ?? null);\n\t\t\t});\n\t\t}\n\n\t\tprivate getOrCreateElements(): [JQuery, JQuery] {\n\t\t\tif (!this.$container) {\n\t\t\t\tthis.$container = $(`
  • `);\n\t\t\t\tthis.$link = $(``).appendTo(this.$container);\n\t\t\t\tthis.$container.prependTo('#adminmenu');\n\t\t\t}\n\t\t\tif (!this.$styleElement) {\n\t\t\t\tthis.$styleElement = $('').appendTo('head');\n\t\t\t}\n\t\t\treturn [this.$styleElement, this.$link!];\n\t\t}\n\n\t\tprivate getImageUrl(imageSetting: ImageSettingValue | null): JQueryPromise | string | null {\n\t\t\tif (imageSetting === null) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tconst externalUrl = (typeof imageSetting.externalUrl === 'string') ? imageSetting.externalUrl.trim() : '';\n\t\t\tif (externalUrl) {\n\t\t\t\treturn externalUrl;\n\t\t\t}\n\n\t\t\tconst attachmentId = imageSetting.attachmentId || 0;\n\t\t\t//const attachmentSiteId = imageSetting.attachmentSiteId || 0;\n\t\t\tif (attachmentId > 0) {\n\t\t\t\t//Use the cached attachment URL if possible.\n\t\t\t\tif (imageSetting.attachmentUrl) {\n\t\t\t\t\treturn imageSetting.attachmentUrl;\n\t\t\t\t}\n\n\t\t\t\t//Load the attachment URL from the server.\n\t\t\t\tif ((typeof wp !== 'undefined') && wp.media && wp.media.attachment) {\n\t\t\t\t\t//Maybe it's already loaded?\n\t\t\t\t\tlet attachmentUrl = wp.media.attachment(attachmentId).get('url');\n\t\t\t\t\tif (attachmentUrl) {\n\t\t\t\t\t\treturn attachmentUrl;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst deferredLoader = $.Deferred();\n\t\t\t\t\twp.media.attachment(attachmentId).fetch().then(\n\t\t\t\t\t\t//Success\n\t\t\t\t\t\t(attachment: any) => {\n\t\t\t\t\t\t\tif (attachment && attachment.url) {\n\t\t\t\t\t\t\t\tdeferredLoader.resolve(attachment.url);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tdeferredLoader.reject();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t//Error\n\t\t\t\t\t\t() => deferredLoader.reject()\n\t\t\t\t\t);\n\t\t\t\t\treturn deferredLoader.promise();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t//No image.\n\t\t\treturn null;\n\t\t}\n\n\t\tprivate getDefaultVerticalMenuMargins(): [number, number] {\n\t\t\tif ((this.defaultMenuMarginTop === null) || (this.defaultMenuMarginBottom === null)) {\n\t\t\t\t//Get the vertical margins of the admin menu. The value includes the \"px\" suffix,\n\t\t\t\t//but parseInt() will ignore it.\n\t\t\t\tconst $adminmenu = $('#adminmenu');\n\t\t\t\tthis.defaultMenuMarginTop = parseInt($adminmenu.css('margin-top'), 10);\n\t\t\t\tthis.defaultMenuMarginBottom = parseInt($adminmenu.css('margin-bottom'), 10);\n\t\t\t\tif (isNaN(this.defaultMenuMarginTop)) {\n\t\t\t\t\tthis.defaultMenuMarginTop = 0;\n\t\t\t\t}\n\t\t\t\tif (isNaN(this.defaultMenuMarginBottom)) {\n\t\t\t\t\tthis.defaultMenuMarginBottom = 0;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn [this.defaultMenuMarginTop, this.defaultMenuMarginBottom];\n\t\t}\n\n\t\tprivate removeLogo(): void {\n\t\t\tif (this.$container) {\n\t\t\t\tthis.$container.remove();\n\t\t\t\tthis.$container = null;\n\t\t\t\tthis.$link = null;\n\t\t\t}\n\t\t\tif (this.$styleElement) {\n\t\t\t\tthis.$styleElement.remove();\n\t\t\t\tthis.$styleElement = null;\n\t\t\t}\n\t\t}\n\n\t\tgetFeatureId(): string {\n\t\t\treturn 'MenuLogoFeature';\n\t\t}\n\t}\n\n\texport interface FeatureScriptConfig {\n\t\tcollapseButtonText?: FeatureConfig;\n\t\tmenuLogo?: FeatureConfig;\n\t}\n\n\t//Always initialize the features if their config is available.\n\t//They work normally on most admin pages, and are used for preview on the settings page.\n\texport let collapseButtonFeature: CollapseButtonTextFeature | null = null;\n\texport let menuLogoFeature: MenuLogoFeature | null = null;\n\tconst collapseButtonFeatureKey = 'ameMenuStyler_collapseButtonTextFt';\n\tconst menuLogoFeatureKey = 'ameMenuStyler_menuLogoFt';\n\n\tlet isInitialized = false;\n\n\tfunction createFeatureInstances() {\n\t\tif (isInitialized) {\n\t\t\treturn;\n\t\t}\n\t\tisInitialized = true;\n\n\t\t//If the script is loaded multiple times, the features might already exist.\n\t\t//This can happen because the script is both enqueued normally and imported\n\t\t//as a module on the settings page.\n\t\t//We want each feature to be initialized only once, so we'll store them\n\t\t//in the window object and reuse them.\n\t\tif (ameMenuStylerFeatureConfig.collapseButtonText) {\n\t\t\tif (window[collapseButtonFeatureKey]) {\n\t\t\t\tcollapseButtonFeature = window[collapseButtonFeatureKey];\n\t\t\t} else {\n\t\t\t\tcollapseButtonFeature = new CollapseButtonTextFeature(ameMenuStylerFeatureConfig.collapseButtonText);\n\t\t\t\twindow[collapseButtonFeatureKey] = collapseButtonFeature;\n\t\t\t}\n\t\t}\n\t\tif (ameMenuStylerFeatureConfig.menuLogo) {\n\t\t\tif (window[menuLogoFeatureKey]) {\n\t\t\t\tmenuLogoFeature = window[menuLogoFeatureKey];\n\t\t\t} else {\n\t\t\t\tmenuLogoFeature = new MenuLogoFeature(ameMenuStylerFeatureConfig.menuLogo);\n\t\t\t\twindow[menuLogoFeatureKey] = menuLogoFeature;\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * Register the features with the Admin Customizer preview handler, if active.\n\t\t *\n\t\t * @param {AmeAdminCustomizerPreview.PreviewHandler} previewHandler\n\t\t */\n\t\tfunction registerFeaturePreview(previewHandler: any) {\n\t\t\t//Both features should exist in the AC preview, but let's check just in case.\n\t\t\tif (!collapseButtonFeature || !menuLogoFeature) {\n\t\t\t\tconsole.warn('Menu Styler: One or more features are not initialized in AC preview.');\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tpreviewHandler.registerPreviewUpdater(\n\t\t\t\tcollapseButtonFeature.getPreviewableSettingIds(),\n\t\t\t\tcollapseButtonFeature\n\t\t\t);\n\t\t\tpreviewHandler.registerPreviewUpdater(\n\t\t\t\tmenuLogoFeature.getPreviewableSettingIds(),\n\t\t\t\tmenuLogoFeature\n\t\t\t);\n\t\t}\n\n\t\tif (typeof window['wsAdminCustomizerPreview'] !== 'undefined') {\n\t\t\tregisterFeaturePreview(window['wsAdminCustomizerPreview']);\n\t\t} else {\n\t\t\t$(document).on('adminMenuEditor:acPreviewStart', (event, previewHandler) => {\n\t\t\t\tregisterFeaturePreview(previewHandler);\n\t\t\t});\n\t\t}\n\t}\n\n\t//The #adminmenu element must be available before initialization. The DOMContentLoaded event\n\t//works, but we can better avoid a visible change/FOUC by using a custom event that the plugin\n\t//triggers immediately after WordPress outputs the admin menu.\n\n\t$(document).one('adminMenuEditor:menuDomReady', createFeatureInstances);\n\t$(createFeatureInstances);\n\n\t//Register the features with the menu styler dialog.\n\t$(document).on(\n\t\t'adminMenuEditor:menuStylerUiRegister',\n\t\tfunction (_unused, vm: SimpleVm) {\n\t\t\tif (!vm) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tcreateFeatureInstances();\n\n\t\t\tif (collapseButtonFeature) {\n\t\t\t\tvm.registerPreviewUpdater(collapseButtonFeature.getPreviewableSettingIds(), collapseButtonFeature);\n\t\t\t}\n\t\t\tif (menuLogoFeature) {\n\t\t\t\tvm.registerPreviewUpdater(menuLogoFeature.getPreviewableSettingIds(), menuLogoFeature);\n\t\t\t}\n\t\t}\n\t);\n}\n\ndeclare global {\n\tinterface Window {\n\t\tameMenuStyler_menuLogoFt?: AmeMenuStylerJsFeatures.MenuLogoFeature;\n\t\tameMenuStyler_collapseButtonTextFt?: AmeMenuStylerJsFeatures.CollapseButtonTextFeature;\n\t}\n}"],"names":[],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"menu-styler-features.bundle.js","mappings":"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","sources":["webpack:///./extras/modules/menu-styler/menu-styler-features.ts"],"sourcesContent":["'use strict';\n\nimport {AmeCustomizable, AmeCustomizableViewModel} from '../../pro-customizables/assets/customizable.js';\n\ndeclare const ameMenuStylerFeatureConfig: AmeMenuStylerJsFeatures.FeatureScriptConfig;\n\nexport namespace AmeMenuStylerJsFeatures {\n\timport PreviewUpdater = AmeCustomizable.PreviewUpdater;\n\timport SimpleVm = AmeCustomizableViewModel.SimpleVm;\n\tconst $ = jQuery;\n\n\tinterface FeatureConfig {\n\t\tsettings: T;\n\t\tsettingMap: SettingMap;\n\t}\n\n\tinterface FeatureSettings {\n\t}\n\n\tinterface SettingMap {\n\t\t[settingId: string]: keyof T;\n\t}\n\n\tabstract class StylerJsFeature implements PreviewUpdater {\n\t\tprotected readonly initialSettings: S;\n\t\tprotected readonly settingMap: SettingMap;\n\n\t\tprotected activeSettings: S;\n\n\t\tprotected constructor(config: FeatureConfig) {\n\t\t\tthis.initialSettings = config.settings;\n\t\t\tthis.activeSettings = this.initialSettings;\n\t\t\tthis.settingMap = config.settingMap;\n\t\t\t//Note: Subclasses should call `this.update(this.initialSettings)` in their constructor.\n\t\t\t//It is not done here because the subclass constructor may need to do some setup first.\n\t\t}\n\n\t\tclearPreview(): void {\n\t\t\tthis.update(this.initialSettings);\n\t\t};\n\n\t\tpreview(settingId: string, value: any, getSettingValue: AmeCustomizable.SettingValueReader): void {\n\t\t\tconst localKey = this.settingMap[settingId];\n\t\t\tif (typeof localKey === 'undefined') {\n\t\t\t\tif (console.warn) {\n\t\t\t\t\tconsole.warn(\n\t\t\t\t\t\t'Preview failed: The feature \"' + this.getFeatureId()\n\t\t\t\t\t\t+ '\" does not use the setting \"' + settingId + '\".'\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlet newSettings: S = {...this.activeSettings};\n\t\t\tnewSettings[localKey] = value;\n\n\t\t\t//Get any known but missing settings using the callback.\n\t\t\tfor (const settingId in this.settingMap) {\n\t\t\t\tif (this.settingMap.hasOwnProperty(settingId)) {\n\t\t\t\t\tconst localKey = this.settingMap[settingId];\n\t\t\t\t\tif (!newSettings.hasOwnProperty(localKey)) {\n\t\t\t\t\t\tnewSettings[localKey] = getSettingValue(settingId, null);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.update(newSettings);\n\t\t}\n\n\t\tprotected update(settings: S): void {\n\t\t\tthis.activeSettings = settings;\n\t\t}\n\n\t\t/**\n\t\t * Get the setting IDs that this feature uses. The feature can preview any of these settings.\n\t\t */\n\t\tgetPreviewableSettingIds(): string[] {\n\t\t\treturn Object.keys(this.settingMap);\n\t\t}\n\n\t\tabstract getFeatureId(): string;\n\t}\n\n\tinterface CollapseButtonTextSettings extends FeatureSettings {\n\t\tlabel: string;\n\t}\n\n\texport class CollapseButtonTextFeature extends StylerJsFeature {\n\t\tprotected originalLabel: string | null = null;\n\n\t\tconstructor(config: FeatureConfig) {\n\t\t\tsuper(config);\n\t\t\tthis.update(this.initialSettings);\n\t\t}\n\n\t\tprotected update(settings: CollapseButtonTextSettings): void {\n\t\t\tsuper.update(settings);\n\n\t\t\tconst $label = $('#adminmenu #collapse-button .collapse-button-label');\n\t\t\tif (this.originalLabel === null) {\n\t\t\t\tthis.originalLabel = $label.text();\n\t\t\t}\n\n\t\t\tif ((typeof settings['label'] === 'undefined') || (settings.label === '') || (settings.label === null)) {\n\t\t\t\t$label.text(this.originalLabel);\n\t\t\t} else {\n\t\t\t\t$label.text(settings.label);\n\t\t\t}\n\t\t}\n\n\t\tgetFeatureId(): string {\n\t\t\treturn 'CollapseButtonTextFeature';\n\t\t}\n\t}\n\n\tinterface ImageSettingValue {\n\t\tattachmentId: number | null;\n\t\tattachmentSiteId: number | null;\n\t\tattachmentUrl: string;\n\t\texternalUrl: string | null;\n\t\twidth: number | null;\n\t\theight: number | null;\n\t}\n\n\tinterface MenuLogoSettings extends FeatureSettings {\n\t\tbaseImage: ImageSettingValue | null;\n\t\tcollapsedImage: ImageSettingValue | null;\n\t\tlinkUrl: string | null;\n\t\topenInNewTab: boolean;\n\t\tbackgroundColor: string | null;\n\t\tbaseHeight: number | null;\n\t\tcollapsedHeight: number | null;\n\t}\n\n\texport class MenuLogoFeature extends StylerJsFeature {\n\t\tprotected $container: JQuery | null = null;\n\t\tprotected $link: JQuery | null = null;\n\t\tprotected $styleElement: JQuery | null = null;\n\n\t\tprivate readonly logoId = 'ame_ms_admin_menu_logo';\n\t\tprivate readonly linkId = 'ame_ms_menu_logo_link';\n\n\t\t/*\n\t\t * Note: The logo container is set up so that the logo image is inside the content\n\t\t * box (i.e. it does not overlap the padding or the margin), but the logo link covers\n\t\t * the padding area. This way the user can control the clickable (padding) area and\n\t\t * the unclickable (margin) area separately.\n\t\t */\n\n\t\tprivate readonly staticLogoStyles = [\n\t\t\t'background-size: contain;',\n\t\t\t'background-repeat: no-repeat;',\n\t\t\t'background-position: 0;',\n\t\t\t'background-origin: content-box;',\n\t\t\t'min-height: 10px;',\n\t\t\t'position: relative;',\n\t\t\t'display: block;',\n\t\t\t'box-sizing: content-box;',\n\t\t];\n\n\t\tprivate readonly staticLinkCss = `#adminmenu #${this.linkId} {\n\t\t\tdisplay: block;\n\t\t\tposition: absolute;\n\t\t\ttop: 0; left: 0; right: 0; bottom: 0;\n\t\t\tmargin: 0;\n\t\t\tpadding: 0;\n\t\t\tbackground: transparent;\n\t\t\ttext-decoration: none;\n\t\t}\n\t\t#adminmenu #${this.linkId}:hover, #adminmenu #${this.linkId}:focus {\n\t\t\tbox-shadow: none;\n\t\t\ttransition: none;\n\t\t\tcolor: transparent;\n\t\t}`;\n\n\t\tprivate defaultMenuMarginTop: number | null = null;\n\t\tprivate defaultMenuMarginBottom: number | null = null;\n\n\t\tconstructor(config: FeatureConfig) {\n\t\t\tsuper(config);\n\t\t\tthis.update(this.initialSettings);\n\t\t}\n\n\t\tprotected update(config: MenuLogoSettings) {\n\t\t\tsuper.update(config);\n\t\t\tthis.updateFromActiveSettings();\n\t\t}\n\n\t\tprivate updateFromActiveSettings(): void {\n\t\t\tconst config = this.activeSettings; //Local reference in case the config changes while loading images.\n\n\t\t\tconst hasBaseImage = this.settingContainsImage(config.baseImage);\n\t\t\tconst hasCollapsedImage = this.settingContainsImage(config.collapsedImage);\n\t\t\tif (!hasBaseImage && !hasCollapsedImage) {\n\t\t\t\tthis.removeLogo();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.withLogoImages(config, (baseImageUrl, collapsedImageUrl) => {\n\t\t\t\tconst [$styleElement, $link] = this.getOrCreateElements();\n\t\t\t\tlet baseLogoStyles = [];\n\t\t\t\tlet collapsedLogoStyles = [];\n\n\t\t\t\tlet hasBaseLogo = false;\n\t\t\t\tlet hasCollapsedLogo = false;\n\n\t\t\t\tif (baseImageUrl) {\n\t\t\t\t\thasBaseLogo = true;\n\t\t\t\t\tbaseLogoStyles.push(`background-image: url(\"${baseImageUrl}\");`);\n\n\t\t\t\t\tconst baseHeight = Math.max(config.baseHeight ? config.baseHeight : 10, 10);\n\t\t\t\t\tbaseLogoStyles.push(`height: ${baseHeight}px;`);\n\t\t\t\t} else {\n\t\t\t\t\tbaseLogoStyles.push('display: none;')\n\t\t\t\t}\n\t\t\t\tif (collapsedImageUrl) {\n\t\t\t\t\thasCollapsedLogo = true;\n\t\t\t\t\tcollapsedLogoStyles.push(`background-image: url(\"${collapsedImageUrl}\");`);\n\t\t\t\t\tcollapsedLogoStyles.push('display: block;');\n\n\t\t\t\t\tconst collapsedHeight = Math.max(config.collapsedHeight ? config.collapsedHeight : 10, 10);\n\t\t\t\t\tcollapsedLogoStyles.push(`height: ${collapsedHeight}px;`);\n\t\t\t\t} else {\n\t\t\t\t\tcollapsedLogoStyles.push('display: none;');\n\t\t\t\t}\n\n\t\t\t\tif (config.backgroundColor) {\n\t\t\t\t\tbaseLogoStyles.push(`background-color: ${config.backgroundColor};`);\n\t\t\t\t}\n\n\t\t\t\tconst linkUrl = (typeof config.linkUrl === 'string') ? config.linkUrl.trim() : '';\n\t\t\t\tif (linkUrl) {\n\t\t\t\t\t$link.show().attr('href', linkUrl);\n\n\t\t\t\t\tif (config.openInNewTab) {\n\t\t\t\t\t\t$link.attr('target', '_blank');\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$link.removeAttr('target');\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t$link.hide().removeAttr('href');\n\t\t\t\t}\n\n\t\t\t\tbaseLogoStyles.unshift(...this.staticLogoStyles);\n\n\t\t\t\tconst baseStyle = `#adminmenu #${this.logoId} {\\n${baseLogoStyles.join('\\n')} }`;\n\t\t\t\tconst collapsedStyle = `.folded #adminmenu #${this.logoId} {\\n${collapsedLogoStyles.join('\\n')} }`;\n\n\t\t\t\t//Remove the top margin from the admin menu when the logo is visible.\n\t\t\t\t//We also need to let other AME components know that the vertical margin has changed.\n\t\t\t\t//This affects the \"Collapse button position\" setting.\n\t\t\t\tconst [, menuMarginBottom] = this.getDefaultVerticalMenuMargins();\n\t\t\t\tlet wrapperCss = `#adminmenuwrap { --ame-ms-menu-margin-bottom: ${menuMarginBottom}px; }`;\n\t\t\t\tif (hasBaseLogo) {\n\t\t\t\t\twrapperCss += `body:not(.folded) #adminmenu { margin-top: 0; }\\n`;\n\t\t\t\t\twrapperCss += `body:not(.folded) #adminmenuwrap { --ame-ms-menu-margin-top: 0px; }\\n`;\n\t\t\t\t}\n\t\t\t\tif (hasCollapsedLogo) {\n\t\t\t\t\twrapperCss += `.folded #adminmenu { margin-top: 0; }\\n`;\n\t\t\t\t\twrapperCss += `.folded #adminmenuwrap { --ame-ms-menu-margin-top: 0px; }\\n`;\n\t\t\t\t}\n\n\t\t\t\t$styleElement.text(baseStyle + \"\\n\" + collapsedStyle + \"\\n\" + this.staticLinkCss + \"\\n\" + wrapperCss);\n\t\t\t});\n\t\t}\n\n\t\tprivate settingContainsImage(setting: ImageSettingValue | null): boolean {\n\t\t\tif (setting === null) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn !!(((setting.attachmentId !== null) && (setting.attachmentId > 0)) || setting.externalUrl);\n\t\t}\n\n\t\tprivate withLogoImages(\n\t\t\tconfig: MenuLogoSettings,\n\t\t\tcallback: (baseImageUrl: string | null, collapsedImageUrl: string | null) => void\n\t\t): void {\n\t\t\tlet imageUrls = [\n\t\t\t\tthis.getImageUrl(config.baseImage),\n\t\t\t\tthis.getImageUrl(config.collapsedImage),\n\t\t\t];\n\n\t\t\t//Add the logo as quickly as possible to prevent the menu from visibly shifting.\n\t\t\t//Promises are usually asynchronous, so let's avoid them when possible and call\n\t\t\t//the callback immediately if both URLs are already known or invalid.\n\t\t\tif ((typeof imageUrls[0] === 'string') && (typeof imageUrls[1] === 'string')) {\n\t\t\t\tcallback(imageUrls[0], imageUrls[1]);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t//Assume that ES2020 is not available, so we can't use Promise.allSettled().\n\t\t\t//However, we want to wait for all promises to resolve, even if some fail.\n\t\t\tPromise.all(\n\t\t\t\timageUrls.map((p) => {\n\t\t\t\t\t//Convert known values to resolved promises.\n\t\t\t\t\tif ((typeof p === 'string') || (p === null)) {\n\t\t\t\t\t\treturn Promise.resolve(p);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn p.then(\n\t\t\t\t\t\t(value) => (typeof value === 'string') ? value : null,\n\t\t\t\t\t\t() => null //Convert errors to null.\n\t\t\t\t\t) as JQueryPromise;\n\t\t\t\t})\n\t\t\t).then((results) => {\n\t\t\t\t//If the active config has changed, don't apply the results.\n\t\t\t\t//The URLs that we just loaded might not be relevant any more.\n\t\t\t\tif (this.activeSettings !== config) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst [baseImageUrl, collapsedImageUrl] = results;\n\t\t\t\tcallback(baseImageUrl ?? null, collapsedImageUrl ?? null);\n\t\t\t});\n\t\t}\n\n\t\tprivate getOrCreateElements(): [JQuery, JQuery] {\n\t\t\tif (!this.$container) {\n\t\t\t\tthis.$container = $(`
  • `);\n\t\t\t\tthis.$link = $(``).appendTo(this.$container);\n\t\t\t\tthis.$container.prependTo('#adminmenu');\n\t\t\t}\n\t\t\tif (!this.$styleElement) {\n\t\t\t\tthis.$styleElement = $('').appendTo('head');\n\t\t\t}\n\t\t\treturn [this.$styleElement, this.$link!];\n\t\t}\n\n\t\tprivate getImageUrl(imageSetting: ImageSettingValue | null): JQueryPromise | string | null {\n\t\t\tif (imageSetting === null) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tconst externalUrl = (typeof imageSetting.externalUrl === 'string') ? imageSetting.externalUrl.trim() : '';\n\t\t\tif (externalUrl) {\n\t\t\t\treturn externalUrl;\n\t\t\t}\n\n\t\t\tconst attachmentId = imageSetting.attachmentId || 0;\n\t\t\t//const attachmentSiteId = imageSetting.attachmentSiteId || 0;\n\t\t\tif (attachmentId > 0) {\n\t\t\t\t//Use the cached attachment URL if possible.\n\t\t\t\tif (imageSetting.attachmentUrl) {\n\t\t\t\t\treturn imageSetting.attachmentUrl;\n\t\t\t\t}\n\n\t\t\t\t//Load the attachment URL from the server.\n\t\t\t\tif ((typeof wp !== 'undefined') && wp.media && wp.media.attachment) {\n\t\t\t\t\t//Maybe it's already loaded?\n\t\t\t\t\tlet attachmentUrl = wp.media.attachment(attachmentId).get('url');\n\t\t\t\t\tif (attachmentUrl) {\n\t\t\t\t\t\treturn attachmentUrl;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst deferredLoader = $.Deferred();\n\t\t\t\t\twp.media.attachment(attachmentId).fetch().then(\n\t\t\t\t\t\t//Success\n\t\t\t\t\t\t(attachment: any) => {\n\t\t\t\t\t\t\tif (attachment && attachment.url) {\n\t\t\t\t\t\t\t\tdeferredLoader.resolve(attachment.url);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tdeferredLoader.reject();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t//Error\n\t\t\t\t\t\t() => deferredLoader.reject()\n\t\t\t\t\t);\n\t\t\t\t\treturn deferredLoader.promise();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t//No image.\n\t\t\treturn null;\n\t\t}\n\n\t\tprivate getDefaultVerticalMenuMargins(): [number, number] {\n\t\t\tif ((this.defaultMenuMarginTop === null) || (this.defaultMenuMarginBottom === null)) {\n\t\t\t\t//Get the vertical margins of the admin menu. The value includes the \"px\" suffix,\n\t\t\t\t//but parseInt() will ignore it.\n\t\t\t\tconst $adminmenu = $('#adminmenu');\n\t\t\t\tthis.defaultMenuMarginTop = parseInt($adminmenu.css('margin-top'), 10);\n\t\t\t\tthis.defaultMenuMarginBottom = parseInt($adminmenu.css('margin-bottom'), 10);\n\t\t\t\tif (isNaN(this.defaultMenuMarginTop)) {\n\t\t\t\t\tthis.defaultMenuMarginTop = 0;\n\t\t\t\t}\n\t\t\t\tif (isNaN(this.defaultMenuMarginBottom)) {\n\t\t\t\t\tthis.defaultMenuMarginBottom = 0;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn [this.defaultMenuMarginTop, this.defaultMenuMarginBottom];\n\t\t}\n\n\t\tprivate removeLogo(): void {\n\t\t\tif (this.$container) {\n\t\t\t\tthis.$container.remove();\n\t\t\t\tthis.$container = null;\n\t\t\t\tthis.$link = null;\n\t\t\t}\n\t\t\tif (this.$styleElement) {\n\t\t\t\tthis.$styleElement.remove();\n\t\t\t\tthis.$styleElement = null;\n\t\t\t}\n\t\t}\n\n\t\tgetFeatureId(): string {\n\t\t\treturn 'MenuLogoFeature';\n\t\t}\n\t}\n\n\texport interface FeatureScriptConfig {\n\t\tcollapseButtonText?: FeatureConfig;\n\t\tmenuLogo?: FeatureConfig;\n\t}\n\n\t//Always initialize the features if their config is available.\n\t//They work normally on most admin pages, and are used for preview on the settings page.\n\texport let collapseButtonFeature: CollapseButtonTextFeature | null = null;\n\texport let menuLogoFeature: MenuLogoFeature | null = null;\n\tconst collapseButtonFeatureKey = 'ameMenuStyler_collapseButtonTextFt';\n\tconst menuLogoFeatureKey = 'ameMenuStyler_menuLogoFt';\n\n\tlet isInitialized = false;\n\n\tfunction createFeatureInstances() {\n\t\tif (isInitialized) {\n\t\t\treturn;\n\t\t}\n\t\tisInitialized = true;\n\n\t\t//If the script is loaded multiple times, the features might already exist.\n\t\t//This can happen because the script is both enqueued normally and imported\n\t\t//as a module on the settings page.\n\t\t//We want each feature to be initialized only once, so we'll store them\n\t\t//in the window object and reuse them.\n\t\tif (ameMenuStylerFeatureConfig.collapseButtonText) {\n\t\t\tif (window[collapseButtonFeatureKey]) {\n\t\t\t\tcollapseButtonFeature = window[collapseButtonFeatureKey];\n\t\t\t} else {\n\t\t\t\tcollapseButtonFeature = new CollapseButtonTextFeature(ameMenuStylerFeatureConfig.collapseButtonText);\n\t\t\t\twindow[collapseButtonFeatureKey] = collapseButtonFeature;\n\t\t\t}\n\t\t}\n\t\tif (ameMenuStylerFeatureConfig.menuLogo) {\n\t\t\tif (window[menuLogoFeatureKey]) {\n\t\t\t\tmenuLogoFeature = window[menuLogoFeatureKey];\n\t\t\t} else {\n\t\t\t\tmenuLogoFeature = new MenuLogoFeature(ameMenuStylerFeatureConfig.menuLogo);\n\t\t\t\twindow[menuLogoFeatureKey] = menuLogoFeature;\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * Register the features with the Admin Customizer preview handler, if active.\n\t\t *\n\t\t * @param {AmeAdminCustomizerPreview.PreviewHandler} previewHandler\n\t\t */\n\t\tfunction registerFeaturePreview(previewHandler: any) {\n\t\t\t//Both features should exist in the AC preview, but let's check just in case.\n\t\t\tif (!collapseButtonFeature || !menuLogoFeature) {\n\t\t\t\tconsole.warn('Menu Styler: One or more features are not initialized in AC preview.');\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tpreviewHandler.registerPreviewUpdater(\n\t\t\t\tcollapseButtonFeature.getPreviewableSettingIds(),\n\t\t\t\tcollapseButtonFeature\n\t\t\t);\n\t\t\tpreviewHandler.registerPreviewUpdater(\n\t\t\t\tmenuLogoFeature.getPreviewableSettingIds(),\n\t\t\t\tmenuLogoFeature\n\t\t\t);\n\t\t}\n\n\t\tif (typeof window['wsAdminCustomizerPreview'] !== 'undefined') {\n\t\t\tregisterFeaturePreview(window['wsAdminCustomizerPreview']);\n\t\t} else {\n\t\t\t$(document).on('adminMenuEditor:acPreviewStart', (event, previewHandler) => {\n\t\t\t\tregisterFeaturePreview(previewHandler);\n\t\t\t});\n\t\t}\n\t}\n\n\t//The #adminmenu element must be available before initialization. The DOMContentLoaded event\n\t//works, but we can better avoid a visible change/FOUC by using a custom event that the plugin\n\t//triggers immediately after WordPress outputs the admin menu.\n\n\t$(document).one('adminMenuEditor:menuDomReady', createFeatureInstances);\n\t$(createFeatureInstances);\n\n\t//Register the features with the menu styler dialog.\n\t$(document).on(\n\t\t'adminMenuEditor:menuStylerUiRegister',\n\t\tfunction (_unused, vm: SimpleVm) {\n\t\t\tif (!vm) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tcreateFeatureInstances();\n\n\t\t\tif (collapseButtonFeature) {\n\t\t\t\tvm.registerPreviewUpdater(collapseButtonFeature.getPreviewableSettingIds(), collapseButtonFeature);\n\t\t\t}\n\t\t\tif (menuLogoFeature) {\n\t\t\t\tvm.registerPreviewUpdater(menuLogoFeature.getPreviewableSettingIds(), menuLogoFeature);\n\t\t\t}\n\t\t}\n\t);\n}\n\ndeclare global {\n\tinterface Window {\n\t\tameMenuStyler_menuLogoFt?: AmeMenuStylerJsFeatures.MenuLogoFeature;\n\t\tameMenuStyler_collapseButtonTextFt?: AmeMenuStylerJsFeatures.CollapseButtonTextFeature;\n\t}\n}"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/dist/menu-styler-ui.bundle.js.map b/dist/menu-styler-ui.bundle.js.map index be8d0f6..a27aed3 100644 --- a/dist/menu-styler-ui.bundle.js.map +++ b/dist/menu-styler-ui.bundle.js.map @@ -1 +1 @@ -{"version":3,"file":"menu-styler-ui.bundle.js","mappings":"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AAI,MAAM,IAAI,KAAK,IAAI,QAAQ;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD;AACtD,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,WAAW,KAAK,SAAS,KAAK,KAAK,KAAK,OAAO;AAC9E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,sBAAsB;AACzD,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,SAAS,IAAI,MAAM,EAAE,MAAM;AAChE;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,sDAAsD,kCAAkC;AACxF,SAAS;AACT;AACA;AACA;AACA,sDAAsD,iCAAiC;AACvF,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD,SAAS;AAClE;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6EAA6E,gBAAgB;AAC7F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,WAAW,gBAAgB;AAC5C;AACA;AACA;AACA;AACA,uBAAuB,iBAAiB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,WAAW,gBAAgB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,gBAAgB,EAAE,SAAS;AACjF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD,wCAAwC;AAC1F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD,kCAAkC;AACnF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA,iBAAiB,WAAW,gBAAgB;AAC5C;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,wEAAwE;AAC7E,CAAC,8CAA8C;AAC/C","sources":["webpack:///./extras/modules/menu-styler/menu-styler-ui.ts","webpack:///./extras/style-generator/style-generator.js"],"sourcesContent":["///\n///\n\nimport {AmeStyleGenerator} from '../../style-generator/style-generator.js';\nimport {AmeCustomizableViewModel} from '../../pro-customizables/assets/customizable.js';\n\ndeclare var wsAmeLodash: _.LoDashStatic;\n\ndeclare const ameMenuStylerConfig: {\n\tdefaults: Record,\n\tstylePreviewConfigs: AmeStyleGenerator.Preview.StyleGeneratorPreviewConfig[]\n};\n\njQuery(function ($: JQueryStatic) {\n\tconst _ = wsAmeLodash;\n\n\tconst styleConfigKey = 'menu_styles';\n\n\t/**\n\t * Utility class that tells WordPress to pin or unpin the admin menu as needed\n\t * when the menu dimensions or the top margin change.\n\t *\n\t * Uses throttling to avoid excessive updates.\n\t */\n\tclass StickyMenuUpdater {\n\t\tprivate readonly $document = $(document);\n\t\tprivate readonly $adminmenu = $('#adminmenu');\n\n\t\tprivate previousHeight: number | null = null;\n\t\tprivate previousWidth: number | null = null;\n\t\tprivate previousTopMargin: number | null = null;\n\n\t\tprivate readonly updateMenuPinState = _.throttle(() => {\n\t\t\tconst menuHeight = this.$adminmenu.outerHeight();\n\t\t\tconst menuWidth = this.$adminmenu.outerWidth();\n\t\t\tconst topMargin = parseInt(this.$adminmenu.css('margin-top'), 10);\n\n\t\t\tif (\n\t\t\t\t(menuHeight !== this.previousHeight)\n\t\t\t\t|| (menuWidth !== this.previousWidth)\n\t\t\t\t|| (topMargin !== this.previousTopMargin)\n\t\t\t) {\n\t\t\t\tthis.previousHeight = menuHeight;\n\t\t\t\tthis.previousWidth = menuWidth;\n\t\t\t\tthis.previousTopMargin = topMargin;\n\n\t\t\t\t//In practice, this update doesn't always work if done immediately.\n\t\t\t\t//Not sure why, maybe menu dimensions don't change instantly when, for example,\n\t\t\t\t//the user adds a logo image. Adding a small delay seems to help.\n\t\t\t\twindow.requestAnimationFrame(() => {\n\t\t\t\t\t//The custom \"wp-pin-menu\" event was added to WP core in 2015. It can be used to update\n\t\t\t\t\t//the menu \"sticky\" state. I'm using triggerHandler() instead of trigger() because this\n\t\t\t\t\t//is what /wp-admin/js/widgets.js does. Hopefully, that will improve compatibility.\n\t\t\t\t\tthis.$document.triggerHandler('wp-pin-menu');\n\t\t\t\t});\n\t\t\t}\n\t\t}, 1000, {leading: true, trailing: true});\n\n\t\tpublic queueUpdate(): void {\n\t\t\tthis.updateMenuPinState();\n\t\t}\n\t}\n\n\tclass MenuStylerViewModel extends AmeCustomizableViewModel.SimpleVm {\n\t\tprivate readonly dialogOpenObservable: KnockoutObservable;\n\t\tprivate isFirstOpen = true;\n\t\tprivate $dialog: JQuery | null = null;\n\n\t\tprivate previewPreference: WsAmePreferenceCookie;\n\n\t\tprivate stickyMenuUpdater: StickyMenuUpdater = new StickyMenuUpdater();\n\n\t\tconstructor() {\n\t\t\t/**\n\t\t\t * This observable is initially stored in a local variable because TypeScript doesn't\n\t\t\t * allow accessing `this` in the constructor before calling super(), but we still\n\t\t\t * want to establish a dependency on the dialog open state so that preview gets enabled\n\t\t\t * when the dialog is open. The observable will get updated later.\n\t\t\t */\n\t\t\tconst extraPreviewCondition = ko.observable(false);\n\n\t\t\tsuper(extraPreviewCondition);\n\n\t\t\tthis.dialogOpenObservable = extraPreviewCondition;\n\t\t\tthis.previewPreference = new WsAmePreferenceCookie('MsPreviewEnabled', 90, true);\n\n\t\t\t//Read settings from the currently loaded admin menu configuration\n\t\t\t//using the aux-data API. Setting ID prefixes should already be registered.\n\t\t\tconst auxDataSettingReader = (settingId: string, defaultValue: any): any => {\n\t\t\t\tconst path = AmeEditorApi.configDataAdapter.mapSettingIdToPath(settingId);\n\t\t\t\tif (path === null) {\n\t\t\t\t\treturn defaultValue;\n\t\t\t\t}\n\n\t\t\t\tconst value = AmeEditorApi.configDataAdapter.getPath(path, this.notFound);\n\t\t\t\tif (value !== this.notFound) {\n\t\t\t\t\treturn value;\n\t\t\t\t} else if (ameMenuStylerConfig.defaults.hasOwnProperty(settingId)) {\n\t\t\t\t\treturn ameMenuStylerConfig.defaults[settingId];\n\t\t\t\t} else {\n\t\t\t\t\tthrow new Error('Unknown aux config setting ID: ' + settingId);\n\t\t\t\t}\n\t\t\t};\n\t\t\tfor (const auxPrefix of AmeEditorApi.configDataAdapter.getKnownPrefixes()) {\n\t\t\t\tthis.registerSettingReader(auxDataSettingReader, auxPrefix);\n\t\t\t}\n\n\t\t\tfor (const previewConfig of ameMenuStylerConfig.stylePreviewConfigs) {\n\t\t\t\tconst previewInstance = new AmeStyleGenerator.Preview.StyleGeneratorPreview(previewConfig);\n\t\t\t\tthis.registerPreviewUpdater(previewInstance.getPreviewableSettingIDs(), previewInstance);\n\t\t\t}\n\n\t\t\t$(document).trigger('adminMenuEditor:menuStylerUiRegister', [this]);\n\t\t}\n\n\t\tsaveChanges() {\n\t\t\tconst settingsById = this.getAllSettingValues();\n\n\t\t\t//Sort by length of the setting ID and then by the ID itself to ensure parent settings\n\t\t\t//are updated before their children. For example, this matters for color presets where\n\t\t\t//the \"activePreset\" setting maps to the \"[global]\" property of the \"colorPresets\" setting.\n\t\t\tconst sortedIds = Object.keys(settingsById);\n\t\t\tsortedIds.sort((a, b) => {\n\t\t\t\tif (a.length !== b.length) {\n\t\t\t\t\treturn a.length - b.length;\n\t\t\t\t}\n\t\t\t\treturn a.localeCompare(b);\n\t\t\t});\n\n\t\t\t//Write all settings into a new object, then save the top-level properties\n\t\t\t//of that. This way stale and empty settings will automatically be removed.\n\t\t\tconst updatedConfig: Record = {};\n\t\t\tfor (const settingId of sortedIds) {\n\t\t\t\tconst path = AmeEditorApi.configDataAdapter.mapSettingIdToPath(settingId);\n\t\t\t\tif (path === null) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tconst value = settingsById[settingId];\n\t\t\t\t//To save space, don't store null values. This could be extended by using\n\t\t\t\t//the \"deleteWhenBlank\" property of the setting definition.\n\t\t\t\tif (value === null) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\t_.set(updatedConfig, path, value);\n\t\t\t}\n\n\t\t\t//Special: Update the last modified timestamp for menu styles.\n\t\t\t_.set(updatedConfig, [styleConfigKey, '_lastModified'], (new Date()).toISOString());\n\n\t\t\t//Special: Remove empty color presets.\n\t\t\tconst colorPresets: Record = _.get(updatedConfig, ['color_presets'], {});\n\t\t\tfor (const presetName of Object.keys(colorPresets)) {\n\t\t\t\t//Remove empty string values (i.e. no color selected). This also\n\t\t\t\t//covers nulls and empty arrays/objects, but that shouldn't happen.\n\t\t\t\tcolorPresets[presetName] = _.omitBy(colorPresets[presetName], _.isEmpty);\n\t\t\t\t//Remove the preset if it's empty.\n\t\t\t\tif (_.isEmpty(colorPresets[presetName])) {\n\t\t\t\t\tdelete colorPresets[presetName];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t//Finally, write the top-level properties to the menu configuration.\n\t\t\tfor (const key in updatedConfig) {\n\t\t\t\tif (!updatedConfig.hasOwnProperty(key)) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tconst value = updatedConfig[key];\n\t\t\t\tAmeEditorApi.configDataAdapter.setPath(key, value);\n\t\t\t}\n\n\t\t\t$(document).trigger('adminMenuEditor:menuConfigChanged');\n\t\t}\n\n\t\tprotected isDialogOpen(newValue: boolean | null = null): boolean {\n\t\t\tif (!this.dialogOpenObservable) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tif (newValue !== null) {\n\t\t\t\tthis.dialogOpenObservable(newValue);\n\t\t\t\treturn newValue;\n\t\t\t}\n\t\t\treturn this.dialogOpenObservable();\n\t\t}\n\n\t\tprotected getPreviewActiveState(): boolean {\n\t\t\t//Disable preview when the dialog is not open.\n\t\t\tif (!this.isDialogOpen()) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn super.getPreviewActiveState();\n\t\t}\n\n\t\tupdatePreview(settingIds: string[]) {\n\t\t\tsuper.updatePreview(settingIds);\n\t\t\tthis.stickyMenuUpdater.queueUpdate();\n\t\t}\n\n\t\tsetDialog($dialog: JQuery) {\n\t\t\tthis.$dialog = $dialog;\n\n\t\t\tlet $overlay: JQuery | null = null;\n\n\t\t\t$dialog.on('dialogopen', () => {\n\t\t\t\tthis.isDialogOpen(true);\n\t\t\t\tthis.onOpenDialog();\n\n\t\t\t\t//Add a custom class to the overlay so that we can style it.\n\t\t\t\t$overlay = $dialog.closest('.ui-dialog').nextAll('.ui-widget-overlay').first();\n\t\t\t\t$overlay.addClass('ame-ms-dialog-overlay');\n\t\t\t});\n\t\t\t$dialog.on('dialogclose', () => {\n\t\t\t\tthis.isDialogOpen(false);\n\n\t\t\t\tif ($overlay) {\n\t\t\t\t\t$overlay.removeClass('ame-ms-dialog-overlay');\n\t\t\t\t\t$overlay = null;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tprotected onOpenDialog() {\n\t\t\tif (!this.isFirstOpen) {\n\t\t\t\tthis.reloadAllSettings();\n\t\t\t}\n\n\t\t\tif (this.isFirstOpen) {\n\t\t\t\tthis.isFirstOpen = false;\n\t\t\t\t//Load the preview state from a cookie.\n\t\t\t\tthis.isPreviewEnabled(this.previewPreference.readAndRefresh(true));\n\t\t\t}\n\t\t}\n\n\t\t// noinspection JSUnusedGlobalSymbols -- Used in the KO template.\n\t\tonConfirmDialog() {\n\t\t\t//Save the preview state in a cookie.\n\t\t\tthis.previewPreference.write(this.isPreviewEnabled());\n\n\t\t\tthis.saveChanges();\n\t\t\tthis.closeDialog();\n\t\t}\n\n\t\tonCancelDialog() {\n\t\t\tthis.closeDialog();\n\t\t}\n\n\t\tprotected closeDialog() {\n\t\t\tif (this.$dialog !== null) {\n\t\t\t\tthis.$dialog.dialog('close');\n\t\t\t}\n\t\t}\n\t}\n\n\tconst $styleDialog = $('#ws-ame-menu-style-settings');\n\tlet isDialogInitialized = false;\n\n\tfunction initializeDialog() {\n\t\t$styleDialog.dialog({\n\t\t\tautoOpen: false,\n\t\t\tcloseText: ' ',\n\t\t\tdraggable: false,\n\t\t\tmodal: true,\n\t\t\t//Dialog dimensions and position are set in CSS.\n\t\t\tminWidth: 300,\n\t\t\theight: 400,\n\t\t\tclasses: {\n\t\t\t\t'ui-dialog': 'ui-corner-all ws-ame-menu-style-dialog',\n\t\t\t}\n\t\t});\n\n\t\tisDialogInitialized = true;\n\n\t\tconst vm = new MenuStylerViewModel();\n\t\t(window as any)['ameMenuStylerVm'] = vm;\n\n\t\tko.applyBindings(vm, $styleDialog[0]);\n\t\tvm.setDialog($styleDialog);\n\t}\n\n\t//Open the dialog when the user clicks the style button.\n\t$('#ws_edit_menu_styles').on('click', () => {\n\t\t//Optimization: Initialize the dialog on the first click.\n\t\tif (!isDialogInitialized) {\n\t\t\tinitializeDialog();\n\t\t}\n\n\t\t//Reset the scroll position of the tab content area.\n\t\t$styleDialog.find('.ame-tp-content').scrollTop(0);\n\n\t\t$styleDialog.dialog('open');\n\t});\n});","export var AmeStyleGenerator;\r\n(function (AmeStyleGenerator) {\r\n const $ = jQuery;\r\n class ValueDescriptor {\r\n }\r\n class ConstantValue extends ValueDescriptor {\r\n constructor(value) {\r\n super();\r\n this.value = value;\r\n }\r\n getValue() {\r\n return this.value;\r\n }\r\n }\r\n class ArrayValue extends ValueDescriptor {\r\n constructor(items) {\r\n super();\r\n this.items = items;\r\n }\r\n getValue() {\r\n return this.items.map(item => item.getValue());\r\n }\r\n getItemDescriptors() {\r\n return this.items;\r\n }\r\n }\r\n class SettingReference extends ValueDescriptor {\r\n constructor(settingId, valueGetter) {\r\n super();\r\n this.settingId = settingId;\r\n this.valueGetter = valueGetter;\r\n }\r\n getValue() {\r\n return this.valueGetter(this.settingId);\r\n }\r\n }\r\n class VariableReference extends ValueDescriptor {\r\n constructor(name, valueGetter) {\r\n super();\r\n this.name = name;\r\n this.valueGetter = valueGetter;\r\n }\r\n getValue() {\r\n return this.valueGetter(this.name);\r\n }\r\n }\r\n class FunctionCall extends ValueDescriptor {\r\n constructor(args, callback) {\r\n super();\r\n this.args = args;\r\n this.callback = callback;\r\n }\r\n getValue() {\r\n return this.callback(this.resolveArgs(this.args));\r\n }\r\n resolveArgs(args) {\r\n if (Array.isArray(args)) {\r\n return args.map(arg => arg.getValue());\r\n }\r\n return Object.keys(args).reduce((result, key) => {\r\n result[key] = args[key].getValue();\r\n return result;\r\n }, {});\r\n }\r\n }\r\n //endregion\r\n function isEmptyCssValue(value) {\r\n return (typeof value === 'undefined') || (value === '') || (value === null);\r\n }\r\n function convertToRgba(color, opacity = 1.0) {\r\n color = color.trim();\r\n if (color === '') {\r\n return 'transparent';\r\n }\r\n //Strip the leading hash, if any.\r\n if (color[0] === '#') {\r\n color = color.substring(1);\r\n }\r\n //If the color is in the shorthand format, expand it.\r\n if (color.length === 3) {\r\n color = color[0] + color[0] + color[1] + color[1] + color[2] + color[2];\r\n }\r\n //The color should now be in the full 6-digit format. Convert it to RGBA.\r\n if (color.length === 6) {\r\n const red = parseInt(color.substring(0, 2), 16);\r\n const green = parseInt(color.substring(2, 4), 16);\r\n const blue = parseInt(color.substring(4, 6), 16);\r\n return `rgba(${red}, ${green}, ${blue}, ${opacity})`;\r\n }\r\n //The color may be invalid, or it's not in a hex format we recognize.\r\n return color;\r\n }\r\n function uniqueArrayValues(array) {\r\n return array.filter((value, index) => array.indexOf(value) === index);\r\n }\r\n function constrain(value, min, max) {\r\n return Math.min(Math.max(value, min), max);\r\n }\r\n function modifyHexColorAsHsl(args, operation) {\r\n const color = args.color || '';\r\n if (isEmptyCssValue(color)) {\r\n return '';\r\n }\r\n const hue = args.hue || null;\r\n const saturation = args.saturation || null;\r\n const lightness = args.lightness || null;\r\n if ((hue === null) && (saturation === null) && (lightness === null)) {\r\n return color;\r\n }\r\n let output = $.Color(color);\r\n output = operation(output, hue, saturation, lightness);\r\n return output.toHexString();\r\n }\r\n // noinspection JSUnusedGlobalSymbols -- Used dynamically by declaration generators received from the server.\r\n const builtinFunctions = {\r\n simpleProperty: function (args) {\r\n if (isEmptyCssValue(args.value)) {\r\n return [];\r\n }\r\n return [args.name + ': ' + args.value + ';'];\r\n },\r\n formatLength: function (args) {\r\n if (isEmptyCssValue(args.value)) {\r\n return '';\r\n }\r\n //Normalize numeric values. For example, while JS accepts \"1.\" as a number,\r\n //\"1.px\" is not a valid CSS length value, so it should be converted to \"1px\".\r\n const numericValue = parseFloat(String(args.value));\r\n if (isNaN(numericValue)) {\r\n return '';\r\n }\r\n return '' + numericValue + (args.unit || '');\r\n },\r\n shadow: function (args) {\r\n const mode = args.mode || 'default';\r\n const color = args.color || '';\r\n if (mode === 'default') {\r\n return [];\r\n }\r\n if ((mode === 'none') || (color === '') || (color === null) || (color === 'transparent')) {\r\n return ['box-shadow: none;'];\r\n }\r\n if (mode !== 'custom') {\r\n return [];\r\n }\r\n const components = [];\r\n if (args.inset) {\r\n components.push('inset');\r\n }\r\n const horizontal = args['offset-x'] || 0;\r\n const vertical = args['offset-y'] || 0;\r\n const blur = args.blur || 0;\r\n const spread = args.spread || 0;\r\n components.push(`${horizontal}px ${vertical}px ${blur}px ${spread}px`);\r\n const colorOpacity = args.colorOpacity || 1.0;\r\n if (colorOpacity < 1.0) {\r\n components.push(convertToRgba(color, colorOpacity));\r\n }\r\n else {\r\n components.push(color);\r\n }\r\n return [`box-shadow: ${components.join(' ')};`];\r\n },\r\n boxSides: function (args) {\r\n if (typeof args.cssPropertyPrefix !== 'string') {\r\n throw new Error('Invalid config for the boxSides generator: missing cssPropertyPrefix');\r\n }\r\n const compositeValue = args.value || {};\r\n const unit = compositeValue.unit || '';\r\n const declarations = [];\r\n for (const side of ['top', 'right', 'bottom', 'left']) {\r\n const value = compositeValue[side];\r\n if (isEmptyCssValue(value)) {\r\n continue;\r\n }\r\n const property = args.cssPropertyPrefix + side;\r\n declarations.push(`${property}: ${value}${unit};`);\r\n }\r\n return declarations;\r\n },\r\n firstNonEmpty(args) {\r\n for (const arg of args) {\r\n if (!isEmptyCssValue(arg)) {\r\n return arg;\r\n }\r\n }\r\n return null;\r\n },\r\n /**\r\n * Take a HEX color, convert it to HSL to edit its components,\r\n * then convert back to HEX.\r\n *\r\n * @param args\r\n */\r\n editHexAsHsl: function (args) {\r\n return modifyHexColorAsHsl(args, (color, hue, saturation, lightness) => {\r\n if (hue !== null) {\r\n color = color.hue(hue);\r\n }\r\n if (saturation !== null) {\r\n color = color.saturation(saturation);\r\n }\r\n if (lightness !== null) {\r\n color = color.lightness(lightness);\r\n }\r\n return color;\r\n });\r\n },\r\n adjustHexAsHsl: function (args) {\r\n return modifyHexColorAsHsl(args, (color, hue, saturation, lightness) => {\r\n if (hue !== null) {\r\n color = color.hue(constrain(color.hue() + hue, 0, 360));\r\n }\r\n if (saturation !== null) {\r\n color = color.saturation(constrain(color.saturation() + saturation, 0, 1.0));\r\n }\r\n if (lightness !== null) {\r\n color = color.lightness(constrain(color.lightness() + lightness, 0, 1.0));\r\n }\r\n return color;\r\n });\r\n },\r\n mixColors: function (args) {\r\n const color1 = args.color1 || '';\r\n const color2 = args.color2 || '';\r\n if (isEmptyCssValue(color1) || isEmptyCssValue(color2)) {\r\n return '';\r\n }\r\n const weight = args.weight || 50;\r\n if (weight <= 0) {\r\n return color2;\r\n }\r\n else if (weight >= 100) {\r\n return color1;\r\n }\r\n return $.Color(color2).transition($.Color(color1), weight / 100).toHexString();\r\n },\r\n changeLightness: function (args) {\r\n const color = args.color || '';\r\n if (isEmptyCssValue(color)) {\r\n return '';\r\n }\r\n const amount = args.amount || 0;\r\n if (amount === 0) {\r\n return color;\r\n }\r\n let output = $.Color(color);\r\n //Amount is a number between 0 and 100, while lightness is between 0.0 and 1.0.\r\n let newLightness = output.lightness() + (amount / 100);\r\n //Clamp to 0.0 - 1.0.\r\n newLightness = constrain(newLightness, 0.0, 1.0);\r\n return output.lightness(newLightness).toHexString();\r\n },\r\n darken: function (args) {\r\n const color = args.color || '';\r\n const amount = args.amount || 0;\r\n return builtinFunctions.changeLightness({ color, amount: -Math.abs(amount) });\r\n },\r\n lighten: function (args) {\r\n const color = args.color || '';\r\n const amount = args.amount || 0;\r\n return builtinFunctions.changeLightness({ color, amount: Math.abs(amount) });\r\n },\r\n compare: function (args) {\r\n const value1 = args.value1;\r\n const value2 = args.value2;\r\n const operator = args.op;\r\n const thenResult = (typeof args.thenResult !== 'undefined') ? args.thenResult : true;\r\n const elseResult = (typeof args.elseResult !== 'undefined') ? args.elseResult : null;\r\n let result;\r\n switch (operator) {\r\n case '==':\r\n result = value1 == value2;\r\n break;\r\n case '!=':\r\n result = value1 != value2;\r\n break;\r\n case '>':\r\n result = value1 > value2;\r\n break;\r\n case '>=':\r\n result = value1 >= value2;\r\n break;\r\n case '<':\r\n result = value1 < value2;\r\n break;\r\n case '<=':\r\n result = value1 <= value2;\r\n break;\r\n default:\r\n throw new Error(`Unknown operator: ${operator}`);\r\n }\r\n return result ? thenResult : elseResult;\r\n },\r\n ifTruthy: function (args) {\r\n const value = args.value;\r\n const thenResult = (typeof args.thenResult !== 'undefined') ? args.thenResult : true;\r\n const elseResult = (typeof args.elseResult !== 'undefined') ? args.elseResult : null;\r\n return value ? thenResult : elseResult;\r\n },\r\n ifSome: function (args) {\r\n const values = args.values;\r\n const thenResult = args.thenResult;\r\n const elseResult = (typeof args.elseResult !== 'undefined') ? args.elseResult : null;\r\n for (const value of values) {\r\n if (!!value) {\r\n return thenResult;\r\n }\r\n }\r\n return elseResult;\r\n },\r\n ifAll: function (args) {\r\n const values = args.values;\r\n const thenResult = args.thenResult;\r\n const elseResult = args.elseResult !== undefined ? args.elseResult : null;\r\n if (!values || (values.length === 0)) {\r\n return elseResult;\r\n }\r\n for (const value of values) {\r\n if (!value) {\r\n return elseResult;\r\n }\r\n }\r\n return thenResult;\r\n },\r\n ifImageSettingContainsImage: function (args) {\r\n const thenResult = args.thenResult !== undefined ? args.thenResult : true;\r\n const elseResult = args.elseResult !== undefined ? args.elseResult : null;\r\n if ((typeof args.value !== 'object') || !args.value) {\r\n return elseResult;\r\n }\r\n const image = args.value;\r\n const hasAttachment = !!image.attachmentId;\r\n const hasExternalUrl = !!image.externalUrl;\r\n const hasImage = hasAttachment || hasExternalUrl;\r\n return hasImage ? thenResult : elseResult;\r\n }\r\n };\r\n let Preview;\r\n (function (Preview) {\r\n const $ = jQuery;\r\n function isConditionalAtRuleConfig(config) {\r\n if ((typeof config !== 'object') || (config === null)) {\r\n return false;\r\n }\r\n const configAsRecord = config;\r\n return ((typeof configAsRecord['t'] === 'string')\r\n && (configAsRecord['t'] === 'conditionalAtRule')\r\n && (typeof configAsRecord['identifier'] === 'string'));\r\n }\r\n function isRuleSetConfig(config) {\r\n return ((config !== null)\r\n && (Array.isArray(config['selectors']))\r\n && (Array.isArray(config['generators'])));\r\n }\r\n const inactiveSettingMarker = { '_ame_inactive_setting': true };\r\n class PreviewSession {\r\n constructor(config) {\r\n this.settings = {};\r\n this.valueReaders = new Set();\r\n this.notFound = {};\r\n this.variables = {};\r\n this.styleBlocks = [];\r\n this.stylesheetsToDisable = [];\r\n this.stylesheetWasEnabled = {};\r\n /**\r\n * Whether this is the first time the preview is being updated.\r\n * This is set to false after preview() is called for the first time.\r\n */\r\n this._isBeforeFirstUpdate = true;\r\n //Optimization: Create bound getters once instead of every time we need\r\n //to create a setting or variable reference.\r\n this.settingValueGetter = this.getSettingPreviewValue.bind(this);\r\n this.variableValueGetter = (variableName) => {\r\n if (variableName in this.variables) {\r\n return this.variables[variableName].getValue();\r\n }\r\n return null;\r\n };\r\n //Optionally, disable already generated custom stylesheets while the preview\r\n //is active to prevent old settings from interfering with the preview of new settings.\r\n if (Array.isArray(config.stylesheetsToDisable)) {\r\n this.stylesheetsToDisable = config.stylesheetsToDisable;\r\n }\r\n //Variables\r\n for (const variableName in config.variables) {\r\n if (!config.variables.hasOwnProperty(variableName)) {\r\n continue;\r\n }\r\n this.variables[variableName] = this.createValueDescriptor(config.variables[variableName], true);\r\n }\r\n //CSS statement groups\r\n for (const conditionConfig of config.statementGroups) {\r\n const statements = this.createCssStatements(conditionConfig.statements);\r\n if (statements.length < 1) {\r\n continue;\r\n }\r\n const condition = this.createValueDescriptor(conditionConfig.expression, true);\r\n const usedSettingIds = this.getSettingIdsUsedBy(condition);\r\n const conditionCallback = () => {\r\n //For performance, conditions that reference settings should\r\n //only be checked when at least one setting is active.\r\n if (usedSettingIds.length > 0) {\r\n if (!usedSettingIds.some((id) => this.isSettingActive(id))) {\r\n return false;\r\n }\r\n }\r\n const isTruthy = condition.getValue();\r\n return !!isTruthy; //Convert to boolean.\r\n };\r\n this.styleBlocks.push(new PreviewStyleBlock(statements, conditionCallback));\r\n }\r\n }\r\n createValueDescriptor(data, allowUnknownVariables = false) {\r\n switch (data.t) {\r\n case 'constant':\r\n return new ConstantValue(data.value);\r\n case 'array':\r\n return new ArrayValue(data.items.map((valueData) => this.createValueDescriptor(valueData, allowUnknownVariables)));\r\n case 'setting':\r\n this.registerPreviewableSettingId(data.id);\r\n return new SettingReference(data.id, this.settingValueGetter);\r\n case 'var':\r\n if (!this.variables.hasOwnProperty(data.name) && !allowUnknownVariables) {\r\n throw new Error('Unknown variable: ' + data.name);\r\n }\r\n return new VariableReference(data.name, this.variableValueGetter);\r\n case 'funcCall':\r\n let functionName;\r\n if (data.name in builtinFunctions) {\r\n functionName = data.name;\r\n }\r\n else {\r\n throw new Error('Unknown function: ' + data.name);\r\n }\r\n const func = builtinFunctions[functionName];\r\n //Initialize the function arguments.\r\n let args;\r\n if (Array.isArray(data.args)) {\r\n args = data.args.map(arg => this.createValueDescriptor(arg, allowUnknownVariables));\r\n }\r\n else {\r\n args = {};\r\n for (const argName in data.args) {\r\n if (!data.args.hasOwnProperty(argName)) {\r\n continue;\r\n }\r\n args[argName] = this.createValueDescriptor(data.args[argName], allowUnknownVariables);\r\n }\r\n }\r\n // @ts-ignore - Can't really statically check this since the values come from the server.\r\n return new FunctionCall(args, func);\r\n }\r\n }\r\n /**\r\n * Get the IDs of all settings that are referenced by the given descriptor.\r\n *\r\n * @param descriptor\r\n * @private\r\n */\r\n getSettingIdsUsedBy(descriptor) {\r\n if (descriptor instanceof SettingReference) {\r\n return [descriptor.settingId];\r\n }\r\n if (descriptor instanceof ArrayValue) {\r\n let result = [];\r\n for (const item of descriptor.getItemDescriptors()) {\r\n result = result.concat(this.getSettingIdsUsedBy(item));\r\n }\r\n return uniqueArrayValues(result);\r\n }\r\n if (descriptor instanceof FunctionCall) {\r\n let result = [];\r\n const args = descriptor.args;\r\n if (Array.isArray(args)) {\r\n for (const arg of args) {\r\n result = result.concat(this.getSettingIdsUsedBy(arg));\r\n }\r\n }\r\n else {\r\n for (const argName in args) {\r\n if (args.hasOwnProperty(argName)) {\r\n result = result.concat(this.getSettingIdsUsedBy(args[argName]));\r\n }\r\n }\r\n }\r\n return uniqueArrayValues(result);\r\n }\r\n if (descriptor instanceof VariableReference) {\r\n const varDef = this.getVariableDefinition(descriptor.name);\r\n if (varDef === null) {\r\n return [];\r\n }\r\n return this.getSettingIdsUsedBy(varDef);\r\n }\r\n return [];\r\n }\r\n getVariableDefinition(variableName) {\r\n if (!this.variables.hasOwnProperty(variableName)) {\r\n return null;\r\n }\r\n return this.variables[variableName];\r\n }\r\n createCssStatements(configs) {\r\n let results = [];\r\n for (const config of configs) {\r\n if (isRuleSetConfig(config)) {\r\n results.push(this.createRuleSetFromConfig(config));\r\n }\r\n else if (isConditionalAtRuleConfig(config)) {\r\n results.push(new ConditionalAtRule(config.identifier, config.condition, (typeof config.nestedStatements === 'undefined')\r\n ? []\r\n : this.createCssStatements(config.nestedStatements)));\r\n }\r\n else {\r\n console.error('Unknown CSS statement type: ', config);\r\n }\r\n }\r\n return results;\r\n }\r\n createRuleSetFromConfig(config, parent = null) {\r\n const generatorWrappers = this.makeGeneratorWrappers(config.generators);\r\n const ruleSet = new CssRuleSet(config.selectors, generatorWrappers, parent);\r\n const nestedRuleSets = this.createNestedRuleSets(config.nestedStatements, ruleSet);\r\n ruleSet.setNestedRuleSets(nestedRuleSets);\r\n return ruleSet;\r\n }\r\n createNestedRuleSets(configs, parent = null) {\r\n let results = [];\r\n if (!configs) {\r\n return results;\r\n }\r\n for (const config of configs) {\r\n if (!isRuleSetConfig(config)) {\r\n throw new Error('A CSS rule set can only contain other rule sets, not other types of statements.');\r\n }\r\n results.push(this.createRuleSetFromConfig(config, parent));\r\n }\r\n return results;\r\n }\r\n getPreviewableSettingIDs() {\r\n return Object.keys(this.settings);\r\n }\r\n preview(settingId, value, otherSettingReader) {\r\n if (this._isBeforeFirstUpdate) {\r\n this._isBeforeFirstUpdate = false;\r\n this.disableAssociatedStylesheets();\r\n }\r\n this.valueReaders.add(otherSettingReader);\r\n if (!this.settings.hasOwnProperty(settingId)) {\r\n this.settings[settingId] = ko.observable(value);\r\n }\r\n else {\r\n this.settings[settingId](value);\r\n }\r\n }\r\n dispose() {\r\n //Dispose of all style blocks.\r\n for (const block of this.styleBlocks) {\r\n block.dispose();\r\n }\r\n this.reEnableAssociatedStylesheets();\r\n }\r\n disableAssociatedStylesheets() {\r\n for (const stylesheetSelector of this.stylesheetsToDisable) {\r\n const $link = $(stylesheetSelector);\r\n if ($link.length > 0) {\r\n this.stylesheetWasEnabled[stylesheetSelector] = $link.prop('disabled');\r\n $link.prop('disabled', true);\r\n }\r\n }\r\n }\r\n reEnableAssociatedStylesheets() {\r\n for (const stylesheetSelector of this.stylesheetsToDisable) {\r\n const $link = $(stylesheetSelector);\r\n if (($link.length > 0) && this.stylesheetWasEnabled.hasOwnProperty(stylesheetSelector)) {\r\n $link.prop('disabled', this.stylesheetWasEnabled[stylesheetSelector]);\r\n }\r\n }\r\n }\r\n isSettingActive(settingId) {\r\n if (this.settings.hasOwnProperty(settingId)) {\r\n return this.settings[settingId]() !== inactiveSettingMarker;\r\n }\r\n return false;\r\n }\r\n getSettingPreviewValue(settingId) {\r\n if (!this.settings.hasOwnProperty(settingId)) {\r\n const value = this.getSettingFromReaders(settingId);\r\n this.settings[settingId] = ko.observable(value).extend({ deferred: true });\r\n }\r\n const observable = this.settings[settingId];\r\n let value = observable();\r\n if (value === inactiveSettingMarker) {\r\n value = this.getSettingFromReaders(settingId);\r\n observable(value);\r\n }\r\n return value;\r\n }\r\n getSettingFromReaders(settingId) {\r\n for (const reader of this.valueReaders) {\r\n const value = reader(settingId, this.notFound);\r\n if (value !== this.notFound) {\r\n return value;\r\n }\r\n }\r\n throw new Error('Setting not found for preview: ' + settingId);\r\n }\r\n makeGeneratorWrappers(generatorConfigs) {\r\n let generatorWrappers = [];\r\n for (const generatorConfig of generatorConfigs) {\r\n const wrapper = this.makeDeclarationGeneratorWrapper(generatorConfig);\r\n if (wrapper !== null) {\r\n generatorWrappers.push(wrapper);\r\n }\r\n }\r\n return generatorWrappers;\r\n }\r\n makeDeclarationGeneratorWrapper(config) {\r\n const generator = this.createValueDescriptor(config);\r\n return new DeclarationGeneratorWrapper(generator, this);\r\n }\r\n registerPreviewableSettingId(settingId) {\r\n if (!this.settings.hasOwnProperty(settingId)) {\r\n this.settings[settingId] = ko.observable(inactiveSettingMarker);\r\n }\r\n }\r\n get isBeforeFirstUpdate() {\r\n return this._isBeforeFirstUpdate;\r\n }\r\n }\r\n /**\r\n * Preview manager for the style generator.\r\n *\r\n * This is a thin wrapper around the PreviewSession class. It initializes the session\r\n * as needed and destroys it when the preview is cleared. This makes it simpler to manage\r\n * active settings, style blocks, and CSS rule-sets: instead of having to carefully\r\n * track dependencies and deactivate/reactivate them in the right order whenever the preview\r\n * is disabled/enabled, we can just destroy the session and start over.\r\n */\r\n class StyleGeneratorPreview {\r\n constructor(config) {\r\n this.config = config;\r\n this.currentSession = null;\r\n }\r\n getOrCreateSession() {\r\n if (this.currentSession === null) {\r\n this.currentSession = new PreviewSession(this.config);\r\n }\r\n return this.currentSession;\r\n }\r\n getPreviewableSettingIDs() {\r\n return this.getOrCreateSession().getPreviewableSettingIDs();\r\n }\r\n preview(settingId, value, otherSettingReader) {\r\n const session = this.getOrCreateSession();\r\n const shouldPreviewAll = (this.config.previewAllOnFirstUpdate && session.isBeforeFirstUpdate);\r\n session.preview(settingId, value, otherSettingReader);\r\n if (shouldPreviewAll) {\r\n //Preview all registered settings the first time the preview is updated.\r\n const notFound = {};\r\n for (const otherId of session.getPreviewableSettingIDs()) {\r\n const otherValue = otherSettingReader(otherId, notFound);\r\n if ((otherId !== settingId) && (otherValue !== notFound)) {\r\n session.preview(otherId, otherValue, otherSettingReader);\r\n }\r\n }\r\n }\r\n }\r\n clearPreview() {\r\n if (this.currentSession !== null) {\r\n this.currentSession.dispose();\r\n this.currentSession = null;\r\n }\r\n }\r\n }\r\n Preview.StyleGeneratorPreview = StyleGeneratorPreview;\r\n class DeclarationGeneratorWrapper {\r\n constructor(generator, settingSource) {\r\n this.generator = generator;\r\n this.settingSource = settingSource;\r\n //Introspect the generator and see which settings it uses.\r\n //This will be useful to determine if the generator is active.\r\n this.usedSettingIds = DeclarationGeneratorWrapper.findReferencedSettingIds(generator, settingSource);\r\n this.cssDeclarations = ko.computed({\r\n read: () => this.getDeclarations(),\r\n deferEvaluation: true,\r\n }).extend({ deferred: true });\r\n }\r\n /**\r\n * Recursively find all settings used by a value descriptor (such as a function call).\r\n *\r\n * @param {ValueDescriptor} thing\r\n * @param variableSource Needed to get variable definitions and not just the final values.\r\n */\r\n static findReferencedSettingIds(thing, variableSource) {\r\n let settingIds = [];\r\n if (thing instanceof SettingReference) {\r\n settingIds.push(thing.settingId);\r\n }\r\n else if (thing instanceof FunctionCall) {\r\n if (Array.isArray(thing.args)) {\r\n for (const arg of thing.args) {\r\n settingIds = settingIds.concat(DeclarationGeneratorWrapper.findReferencedSettingIds(arg, variableSource));\r\n }\r\n }\r\n else {\r\n for (const key in thing.args) {\r\n settingIds = settingIds.concat(DeclarationGeneratorWrapper.findReferencedSettingIds(thing.args[key], variableSource));\r\n }\r\n }\r\n }\r\n else if (thing instanceof VariableReference) {\r\n const value = variableSource.getVariableDefinition(thing.name);\r\n if (value !== null) {\r\n settingIds = settingIds.concat(DeclarationGeneratorWrapper.findReferencedSettingIds(value, variableSource));\r\n }\r\n }\r\n return settingIds;\r\n }\r\n isActive() {\r\n //Check if any of the input settings are active.\r\n let hasSettingLookups = false;\r\n for (const settingId of this.usedSettingIds) {\r\n hasSettingLookups = true;\r\n if (this.settingSource.isSettingActive(settingId)) {\r\n return true;\r\n }\r\n }\r\n //If there are no input settings, the generator is always active: it just\r\n //generates a fixed declaration.\r\n return !hasSettingLookups;\r\n }\r\n getDeclarations() {\r\n return this.generator.getValue();\r\n }\r\n dispose() {\r\n this.cssDeclarations.dispose();\r\n }\r\n }\r\n class CssStatement {\r\n constructor() {\r\n this.cssText = ko.computed({\r\n read: () => this.generateCss(),\r\n deferEvaluation: true,\r\n }).extend({ deferred: true });\r\n }\r\n dispose() {\r\n //Dispose the CSS text observable.\r\n this.cssText.dispose();\r\n }\r\n }\r\n class CssRuleSet extends CssStatement {\r\n constructor(selectors, declarationSources, parent = null) {\r\n super();\r\n this.declarationSources = declarationSources;\r\n this.nestedRuleSets = ko.observableArray([]);\r\n if (parent === null) {\r\n this.effectiveSelectors = selectors;\r\n }\r\n else {\r\n this.effectiveSelectors = CssRuleSet.combineSelectors(selectors, parent.effectiveSelectors);\r\n }\r\n this.selectorText = this.effectiveSelectors.join(', ');\r\n }\r\n static combineSelectors(selectors, parentSelectors) {\r\n const combinedSelectors = [];\r\n for (const selector of selectors) {\r\n if (selector === '') {\r\n continue;\r\n }\r\n if (selector.includes('&')) {\r\n //Insert the parent selectors into the current selector at the position of the \"&\".\r\n for (const parentSelector of parentSelectors) {\r\n combinedSelectors.push(selector.replace('&', parentSelector.trim()));\r\n }\r\n }\r\n else {\r\n //Just append the current selector to the parent selectors.\r\n for (const parentSelector of parentSelectors) {\r\n combinedSelectors.push(`${parentSelector} ${selector}`);\r\n }\r\n }\r\n }\r\n return combinedSelectors;\r\n }\r\n setNestedRuleSets(ruleSets) {\r\n //Dispose the old rule sets that are not part of the new list.\r\n for (const oldRuleSet of this.nestedRuleSets()) {\r\n if (ruleSets.indexOf(oldRuleSet) === -1) {\r\n oldRuleSet.dispose();\r\n }\r\n }\r\n this.nestedRuleSets(ruleSets);\r\n }\r\n generateCss() {\r\n const declarations = this.getDeclarations();\r\n const nestedRuleSetParts = [];\r\n for (const ruleSet of this.nestedRuleSets()) {\r\n if (ruleSet.isActive()) {\r\n nestedRuleSetParts.push(ruleSet.cssText());\r\n }\r\n }\r\n let css = '';\r\n if (declarations.length > 0) {\r\n css += this.selectorText + ' {\\n\\t' + declarations.join('\\n\\t') + '\\n}\\n';\r\n }\r\n if (nestedRuleSetParts.length > 0) {\r\n css += nestedRuleSetParts.join('\\n');\r\n }\r\n return css;\r\n }\r\n isActive() {\r\n for (const source of this.declarationSources) {\r\n if (source.isActive()) {\r\n return true;\r\n }\r\n }\r\n for (const ruleSet of this.nestedRuleSets()) {\r\n if (ruleSet.isActive()) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n getDeclarations() {\r\n const declarations = [];\r\n for (const source of this.declarationSources) {\r\n if (source.isActive()) {\r\n declarations.push(...source.cssDeclarations());\r\n }\r\n }\r\n return declarations;\r\n }\r\n dispose() {\r\n //Dispose declaration sources.\r\n for (const source of this.declarationSources) {\r\n source.dispose();\r\n }\r\n //Dispose nested rule sets.\r\n for (const ruleSet of this.nestedRuleSets()) {\r\n ruleSet.dispose();\r\n }\r\n super.dispose();\r\n }\r\n }\r\n class ConditionalAtRule extends CssStatement {\r\n constructor(identifier, condition, nestedStatements) {\r\n super();\r\n this.identifier = identifier;\r\n this.condition = condition;\r\n this.nestedStatements = nestedStatements;\r\n }\r\n generateCss() {\r\n const pieces = [];\r\n for (const statement of this.nestedStatements) {\r\n const css = statement.cssText();\r\n if (css !== '') {\r\n pieces.push(css);\r\n }\r\n }\r\n if (pieces.length === 0) {\r\n return '';\r\n }\r\n return this.getAtRuleText() + ' {\\n\\t' + pieces.join('\\n\\t') + '\\n}';\r\n }\r\n getAtRuleText() {\r\n return '@' + this.identifier + ' ' + this.condition;\r\n }\r\n isActive() {\r\n for (const statement of this.nestedStatements) {\r\n if (statement.isActive()) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n dispose() {\r\n //Dispose nested statements.\r\n for (const statement of this.nestedStatements) {\r\n statement.dispose();\r\n }\r\n super.dispose();\r\n }\r\n }\r\n class PreviewStyleBlock {\r\n constructor(statements, condition = null) {\r\n this.statements = statements;\r\n this.condition = condition;\r\n this.$styleElement = null;\r\n this.cssText = ko.computed({\r\n read: () => {\r\n if ((condition !== null) && !condition()) {\r\n return '';\r\n }\r\n let pieces = [];\r\n for (const statement of this.statements) {\r\n if (statement.isActive()) {\r\n const css = statement.cssText();\r\n if (css !== '') {\r\n pieces.push(css);\r\n }\r\n }\r\n }\r\n if (pieces.length === 0) {\r\n return '';\r\n }\r\n return pieces.join('\\n');\r\n },\r\n deferEvaluation: true,\r\n }).extend({ deferred: true });\r\n this.updateStyleElement(this.cssText());\r\n this.cssChangeSubscription = this.cssText.subscribe((cssText) => {\r\n this.updateStyleElement(cssText);\r\n });\r\n }\r\n updateStyleElement(cssText) {\r\n if (cssText === '') {\r\n if (this.$styleElement) {\r\n this.$styleElement.remove();\r\n this.$styleElement = null;\r\n }\r\n return;\r\n }\r\n if (!this.$styleElement) {\r\n this.$styleElement = $('').appendTo('head');\r\n }\r\n this.$styleElement.text(cssText);\r\n }\r\n clear() {\r\n if (this.$styleElement) {\r\n this.$styleElement.remove();\r\n this.$styleElement = null;\r\n }\r\n }\r\n dispose() {\r\n //Stop listening for CSS changes.\r\n this.cssChangeSubscription.dispose();\r\n this.cssText.dispose();\r\n //Dispose rule sets.\r\n for (const ruleset of this.statements) {\r\n ruleset.dispose();\r\n }\r\n //Remove the style element.\r\n this.clear();\r\n }\r\n }\r\n })(Preview = AmeStyleGenerator.Preview || (AmeStyleGenerator.Preview = {}));\r\n})(AmeStyleGenerator || (AmeStyleGenerator = {}));\r\n//# sourceMappingURL=style-generator.js.map"],"names":[],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"menu-styler-ui.bundle.js","mappings":"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AAI,MAAM,IAAI,KAAK,IAAI,QAAQ;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD;AACtD,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,WAAW,KAAK,SAAS,KAAK,KAAK,KAAK,OAAO;AAC9E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,sBAAsB;AACzD,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,SAAS,IAAI,MAAM,EAAE,MAAM;AAChE;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,sDAAsD,kCAAkC;AACxF,SAAS;AACT;AACA;AACA;AACA,sDAAsD,iCAAiC;AACvF,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD,SAAS;AAClE;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6EAA6E,gBAAgB;AAC7F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,WAAW,gBAAgB;AAC5C;AACA;AACA;AACA;AACA,uBAAuB,iBAAiB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,WAAW,gBAAgB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,gBAAgB,EAAE,SAAS;AACjF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD,wCAAwC;AAC1F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD,kCAAkC;AACnF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA,iBAAiB,WAAW,gBAAgB;AAC5C;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,wEAAwE;AAC7E,CAAC,8CAA8C;AAC/C","sources":["webpack:///./extras/modules/menu-styler/menu-styler-ui.ts","webpack:///./extras/style-generator/style-generator.js"],"sourcesContent":["///\n///\n\nimport {AmeStyleGenerator} from '../../style-generator/style-generator.js';\nimport {AmeCustomizableViewModel} from '../../pro-customizables/assets/customizable.js';\n\ndeclare var wsAmeLodash: _.LoDashStatic;\n\ndeclare const ameMenuStylerConfig: {\n\tdefaults: Record,\n\tstylePreviewConfigs: AmeStyleGenerator.Preview.StyleGeneratorPreviewConfig[]\n};\n\njQuery(function ($: JQueryStatic) {\n\tconst _ = wsAmeLodash;\n\n\tconst styleConfigKey = 'menu_styles';\n\n\t/**\n\t * Utility class that tells WordPress to pin or unpin the admin menu as needed\n\t * when the menu dimensions or the top margin change.\n\t *\n\t * Uses throttling to avoid excessive updates.\n\t */\n\tclass StickyMenuUpdater {\n\t\tprivate readonly $document = $(document);\n\t\tprivate readonly $adminmenu = $('#adminmenu');\n\n\t\tprivate previousHeight: number | null = null;\n\t\tprivate previousWidth: number | null = null;\n\t\tprivate previousTopMargin: number | null = null;\n\n\t\tprivate readonly updateMenuPinState = _.throttle(() => {\n\t\t\tconst menuHeight = this.$adminmenu.outerHeight();\n\t\t\tconst menuWidth = this.$adminmenu.outerWidth();\n\t\t\tconst topMargin = parseInt(this.$adminmenu.css('margin-top'), 10);\n\n\t\t\tif (\n\t\t\t\t(menuHeight !== this.previousHeight)\n\t\t\t\t|| (menuWidth !== this.previousWidth)\n\t\t\t\t|| (topMargin !== this.previousTopMargin)\n\t\t\t) {\n\t\t\t\tthis.previousHeight = menuHeight;\n\t\t\t\tthis.previousWidth = menuWidth;\n\t\t\t\tthis.previousTopMargin = topMargin;\n\n\t\t\t\t//In practice, this update doesn't always work if done immediately.\n\t\t\t\t//Not sure why, maybe menu dimensions don't change instantly when, for example,\n\t\t\t\t//the user adds a logo image. Adding a small delay seems to help.\n\t\t\t\twindow.requestAnimationFrame(() => {\n\t\t\t\t\t//The custom \"wp-pin-menu\" event was added to WP core in 2015. It can be used to update\n\t\t\t\t\t//the menu \"sticky\" state. I'm using triggerHandler() instead of trigger() because this\n\t\t\t\t\t//is what /wp-admin/js/widgets.js does. Hopefully, that will improve compatibility.\n\t\t\t\t\tthis.$document.triggerHandler('wp-pin-menu');\n\t\t\t\t});\n\t\t\t}\n\t\t}, 1000, {leading: true, trailing: true});\n\n\t\tpublic queueUpdate(): void {\n\t\t\tthis.updateMenuPinState();\n\t\t}\n\t}\n\n\tclass MenuStylerViewModel extends AmeCustomizableViewModel.SimpleVm {\n\t\tprivate readonly dialogOpenObservable: KnockoutObservable;\n\t\tprivate isFirstOpen = true;\n\t\tprivate $dialog: JQuery | null = null;\n\n\t\tprivate previewPreference: WsAmePreferenceCookie;\n\n\t\tprivate stickyMenuUpdater: StickyMenuUpdater = new StickyMenuUpdater();\n\n\t\tconstructor() {\n\t\t\t/**\n\t\t\t * This observable is initially stored in a local variable because TypeScript doesn't\n\t\t\t * allow accessing `this` in the constructor before calling super(), but we still\n\t\t\t * want to establish a dependency on the dialog open state so that preview gets enabled\n\t\t\t * when the dialog is open. The observable will get updated later.\n\t\t\t */\n\t\t\tconst extraPreviewCondition = ko.observable(false);\n\n\t\t\tsuper(extraPreviewCondition);\n\n\t\t\tthis.dialogOpenObservable = extraPreviewCondition;\n\t\t\tthis.previewPreference = new WsAmePreferenceCookie('MsPreviewEnabled', 90, true);\n\n\t\t\t//Read settings from the currently loaded admin menu configuration\n\t\t\t//using the aux-data API. Setting ID prefixes should already be registered.\n\t\t\tconst auxDataSettingReader = (settingId: string, defaultValue: any): any => {\n\t\t\t\tconst path = AmeEditorApi.configDataAdapter.mapSettingIdToPath(settingId);\n\t\t\t\tif (path === null) {\n\t\t\t\t\treturn defaultValue;\n\t\t\t\t}\n\n\t\t\t\tconst value = AmeEditorApi.configDataAdapter.getPath(path, this.notFound);\n\t\t\t\tif (value !== this.notFound) {\n\t\t\t\t\treturn value;\n\t\t\t\t} else if (ameMenuStylerConfig.defaults.hasOwnProperty(settingId)) {\n\t\t\t\t\treturn ameMenuStylerConfig.defaults[settingId];\n\t\t\t\t} else {\n\t\t\t\t\tthrow new Error('Unknown aux config setting ID: ' + settingId);\n\t\t\t\t}\n\t\t\t};\n\t\t\tfor (const auxPrefix of AmeEditorApi.configDataAdapter.getKnownPrefixes()) {\n\t\t\t\tthis.registerSettingReader(auxDataSettingReader, auxPrefix);\n\t\t\t}\n\n\t\t\tfor (const previewConfig of ameMenuStylerConfig.stylePreviewConfigs) {\n\t\t\t\tconst previewInstance = new AmeStyleGenerator.Preview.StyleGeneratorPreview(previewConfig);\n\t\t\t\tthis.registerPreviewUpdater(previewInstance.getPreviewableSettingIDs(), previewInstance);\n\t\t\t}\n\n\t\t\t$(document).trigger('adminMenuEditor:menuStylerUiRegister', [this]);\n\t\t}\n\n\t\tsaveChanges() {\n\t\t\tconst settingsById = this.getAllSettingValues();\n\n\t\t\t//Sort by length of the setting ID and then by the ID itself to ensure parent settings\n\t\t\t//are updated before their children. For example, this matters for color presets where\n\t\t\t//the \"activePreset\" setting maps to the \"[global]\" property of the \"colorPresets\" setting.\n\t\t\tconst sortedIds = Object.keys(settingsById);\n\t\t\tsortedIds.sort((a, b) => {\n\t\t\t\tif (a.length !== b.length) {\n\t\t\t\t\treturn a.length - b.length;\n\t\t\t\t}\n\t\t\t\treturn a.localeCompare(b);\n\t\t\t});\n\n\t\t\t//Write all settings into a new object, then save the top-level properties\n\t\t\t//of that. This way stale and empty settings will automatically be removed.\n\t\t\tconst updatedConfig: Record = {};\n\t\t\tfor (const settingId of sortedIds) {\n\t\t\t\tconst path = AmeEditorApi.configDataAdapter.mapSettingIdToPath(settingId);\n\t\t\t\tif (path === null) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tconst value = settingsById[settingId];\n\t\t\t\t//To save space, don't store null values. This could be extended by using\n\t\t\t\t//the \"deleteWhenBlank\" property of the setting definition.\n\t\t\t\tif (value === null) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\t_.set(updatedConfig, path, value);\n\t\t\t}\n\n\t\t\t//Special: Update the last modified timestamp for menu styles.\n\t\t\t_.set(updatedConfig, [styleConfigKey, '_lastModified'], (new Date()).toISOString());\n\n\t\t\t//Special: Remove empty color presets.\n\t\t\tconst colorPresets: Record = _.get(updatedConfig, ['color_presets'], {});\n\t\t\tfor (const presetName of Object.keys(colorPresets)) {\n\t\t\t\t//Remove empty string values (i.e. no color selected). This also\n\t\t\t\t//covers nulls and empty arrays/objects, but that shouldn't happen.\n\t\t\t\tcolorPresets[presetName] = _.omitBy(colorPresets[presetName], _.isEmpty);\n\t\t\t\t//Remove the preset if it's empty.\n\t\t\t\tif (_.isEmpty(colorPresets[presetName])) {\n\t\t\t\t\tdelete colorPresets[presetName];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t//Finally, write the top-level properties to the menu configuration.\n\t\t\tfor (const key in updatedConfig) {\n\t\t\t\tif (!updatedConfig.hasOwnProperty(key)) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tconst value = updatedConfig[key];\n\t\t\t\tAmeEditorApi.configDataAdapter.setPath(key, value);\n\t\t\t}\n\n\t\t\t$(document).trigger('adminMenuEditor:menuConfigChanged');\n\t\t}\n\n\t\tprotected isDialogOpen(newValue: boolean | null = null): boolean {\n\t\t\tif (!this.dialogOpenObservable) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tif (newValue !== null) {\n\t\t\t\tthis.dialogOpenObservable(newValue);\n\t\t\t\treturn newValue;\n\t\t\t}\n\t\t\treturn this.dialogOpenObservable();\n\t\t}\n\n\t\tprotected getPreviewActiveState(): boolean {\n\t\t\t//Disable preview when the dialog is not open.\n\t\t\tif (!this.isDialogOpen()) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn super.getPreviewActiveState();\n\t\t}\n\n\t\tupdatePreview(settingIds: string[]) {\n\t\t\tsuper.updatePreview(settingIds);\n\t\t\tthis.stickyMenuUpdater.queueUpdate();\n\t\t}\n\n\t\tsetDialog($dialog: JQuery) {\n\t\t\tthis.$dialog = $dialog;\n\n\t\t\tlet $overlay: JQuery | null = null;\n\n\t\t\t$dialog.on('dialogopen', () => {\n\t\t\t\tthis.isDialogOpen(true);\n\t\t\t\tthis.onOpenDialog();\n\n\t\t\t\t//Add a custom class to the overlay so that we can style it.\n\t\t\t\t$overlay = $dialog.closest('.ui-dialog').nextAll('.ui-widget-overlay').first();\n\t\t\t\t$overlay.addClass('ame-ms-dialog-overlay');\n\t\t\t});\n\t\t\t$dialog.on('dialogclose', () => {\n\t\t\t\tthis.isDialogOpen(false);\n\n\t\t\t\tif ($overlay) {\n\t\t\t\t\t$overlay.removeClass('ame-ms-dialog-overlay');\n\t\t\t\t\t$overlay = null;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tprotected onOpenDialog() {\n\t\t\tif (!this.isFirstOpen) {\n\t\t\t\tthis.reloadAllSettings();\n\t\t\t}\n\n\t\t\tif (this.isFirstOpen) {\n\t\t\t\tthis.isFirstOpen = false;\n\t\t\t\t//Load the preview state from a cookie.\n\t\t\t\tthis.isPreviewEnabled(this.previewPreference.readAndRefresh(true));\n\t\t\t}\n\t\t}\n\n\t\t// noinspection JSUnusedGlobalSymbols -- Used in the KO template.\n\t\tonConfirmDialog() {\n\t\t\t//Save the preview state in a cookie.\n\t\t\tthis.previewPreference.write(this.isPreviewEnabled());\n\n\t\t\tthis.saveChanges();\n\t\t\tthis.closeDialog();\n\t\t}\n\n\t\tonCancelDialog() {\n\t\t\tthis.closeDialog();\n\t\t}\n\n\t\tprotected closeDialog() {\n\t\t\tif (this.$dialog !== null) {\n\t\t\t\tthis.$dialog.dialog('close');\n\t\t\t}\n\t\t}\n\t}\n\n\tconst $styleDialog = $('#ws-ame-menu-style-settings');\n\tlet isDialogInitialized = false;\n\n\tfunction initializeDialog() {\n\t\t$styleDialog.dialog({\n\t\t\tautoOpen: false,\n\t\t\tcloseText: ' ',\n\t\t\tdraggable: false,\n\t\t\tmodal: true,\n\t\t\t//Dialog dimensions and position are set in CSS.\n\t\t\tminWidth: 300,\n\t\t\theight: 400,\n\t\t\tclasses: {\n\t\t\t\t'ui-dialog': 'ui-corner-all ws-ame-menu-style-dialog',\n\t\t\t}\n\t\t});\n\n\t\tisDialogInitialized = true;\n\n\t\tconst vm = new MenuStylerViewModel();\n\t\t(window as any)['ameMenuStylerVm'] = vm;\n\n\t\tko.applyBindings(vm, $styleDialog[0]);\n\t\tvm.setDialog($styleDialog);\n\t}\n\n\t//Open the dialog when the user clicks the style button.\n\t$('#ws_edit_menu_styles').on('click', () => {\n\t\t//Optimization: Initialize the dialog on the first click.\n\t\tif (!isDialogInitialized) {\n\t\t\tinitializeDialog();\n\t\t}\n\n\t\t//Reset the scroll position of the tab content area.\n\t\t$styleDialog.find('.ame-tp-content').scrollTop(0);\n\n\t\t$styleDialog.dialog('open');\n\t});\n});","export var AmeStyleGenerator;\n(function (AmeStyleGenerator) {\n const $ = jQuery;\n class ValueDescriptor {\n }\n class ConstantValue extends ValueDescriptor {\n constructor(value) {\n super();\n this.value = value;\n }\n getValue() {\n return this.value;\n }\n }\n class ArrayValue extends ValueDescriptor {\n constructor(items) {\n super();\n this.items = items;\n }\n getValue() {\n return this.items.map(item => item.getValue());\n }\n getItemDescriptors() {\n return this.items;\n }\n }\n class SettingReference extends ValueDescriptor {\n constructor(settingId, valueGetter) {\n super();\n this.settingId = settingId;\n this.valueGetter = valueGetter;\n }\n getValue() {\n return this.valueGetter(this.settingId);\n }\n }\n class VariableReference extends ValueDescriptor {\n constructor(name, valueGetter) {\n super();\n this.name = name;\n this.valueGetter = valueGetter;\n }\n getValue() {\n return this.valueGetter(this.name);\n }\n }\n class FunctionCall extends ValueDescriptor {\n constructor(args, callback) {\n super();\n this.args = args;\n this.callback = callback;\n }\n getValue() {\n return this.callback(this.resolveArgs(this.args));\n }\n resolveArgs(args) {\n if (Array.isArray(args)) {\n return args.map(arg => arg.getValue());\n }\n return Object.keys(args).reduce((result, key) => {\n result[key] = args[key].getValue();\n return result;\n }, {});\n }\n }\n //endregion\n function isEmptyCssValue(value) {\n return (typeof value === 'undefined') || (value === '') || (value === null);\n }\n function convertToRgba(color, opacity = 1.0) {\n color = color.trim();\n if (color === '') {\n return 'transparent';\n }\n //Strip the leading hash, if any.\n if (color[0] === '#') {\n color = color.substring(1);\n }\n //If the color is in the shorthand format, expand it.\n if (color.length === 3) {\n color = color[0] + color[0] + color[1] + color[1] + color[2] + color[2];\n }\n //The color should now be in the full 6-digit format. Convert it to RGBA.\n if (color.length === 6) {\n const red = parseInt(color.substring(0, 2), 16);\n const green = parseInt(color.substring(2, 4), 16);\n const blue = parseInt(color.substring(4, 6), 16);\n return `rgba(${red}, ${green}, ${blue}, ${opacity})`;\n }\n //The color may be invalid, or it's not in a hex format we recognize.\n return color;\n }\n function uniqueArrayValues(array) {\n return array.filter((value, index) => array.indexOf(value) === index);\n }\n function constrain(value, min, max) {\n return Math.min(Math.max(value, min), max);\n }\n function modifyHexColorAsHsl(args, operation) {\n const color = args.color || '';\n if (isEmptyCssValue(color)) {\n return '';\n }\n const hue = args.hue || null;\n const saturation = args.saturation || null;\n const lightness = args.lightness || null;\n if ((hue === null) && (saturation === null) && (lightness === null)) {\n return color;\n }\n let output = $.Color(color);\n output = operation(output, hue, saturation, lightness);\n return output.toHexString();\n }\n // noinspection JSUnusedGlobalSymbols -- Used dynamically by declaration generators received from the server.\n const builtinFunctions = {\n simpleProperty: function (args) {\n if (isEmptyCssValue(args.value)) {\n return [];\n }\n return [args.name + ': ' + args.value + ';'];\n },\n formatLength: function (args) {\n if (isEmptyCssValue(args.value)) {\n return '';\n }\n //Normalize numeric values. For example, while JS accepts \"1.\" as a number,\n //\"1.px\" is not a valid CSS length value, so it should be converted to \"1px\".\n const numericValue = parseFloat(String(args.value));\n if (isNaN(numericValue)) {\n return '';\n }\n return '' + numericValue + (args.unit || '');\n },\n shadow: function (args) {\n const mode = args.mode || 'default';\n const color = args.color || '';\n if (mode === 'default') {\n return [];\n }\n if ((mode === 'none') || (color === '') || (color === null) || (color === 'transparent')) {\n return ['box-shadow: none;'];\n }\n if (mode !== 'custom') {\n return [];\n }\n const components = [];\n if (args.inset) {\n components.push('inset');\n }\n const horizontal = args['offset-x'] || 0;\n const vertical = args['offset-y'] || 0;\n const blur = args.blur || 0;\n const spread = args.spread || 0;\n components.push(`${horizontal}px ${vertical}px ${blur}px ${spread}px`);\n const colorOpacity = args.colorOpacity || 1.0;\n if (colorOpacity < 1.0) {\n components.push(convertToRgba(color, colorOpacity));\n }\n else {\n components.push(color);\n }\n return [`box-shadow: ${components.join(' ')};`];\n },\n boxSides: function (args) {\n if (typeof args.cssPropertyPrefix !== 'string') {\n throw new Error('Invalid config for the boxSides generator: missing cssPropertyPrefix');\n }\n const compositeValue = args.value || {};\n const unit = compositeValue.unit || '';\n const declarations = [];\n for (const side of ['top', 'right', 'bottom', 'left']) {\n const value = compositeValue[side];\n if (isEmptyCssValue(value)) {\n continue;\n }\n const property = args.cssPropertyPrefix + side;\n declarations.push(`${property}: ${value}${unit};`);\n }\n return declarations;\n },\n firstNonEmpty(args) {\n for (const arg of args) {\n if (!isEmptyCssValue(arg)) {\n return arg;\n }\n }\n return null;\n },\n /**\n * Take a HEX color, convert it to HSL to edit its components,\n * then convert back to HEX.\n *\n * @param args\n */\n editHexAsHsl: function (args) {\n return modifyHexColorAsHsl(args, (color, hue, saturation, lightness) => {\n if (hue !== null) {\n color = color.hue(hue);\n }\n if (saturation !== null) {\n color = color.saturation(saturation);\n }\n if (lightness !== null) {\n color = color.lightness(lightness);\n }\n return color;\n });\n },\n adjustHexAsHsl: function (args) {\n return modifyHexColorAsHsl(args, (color, hue, saturation, lightness) => {\n if (hue !== null) {\n color = color.hue(constrain(color.hue() + hue, 0, 360));\n }\n if (saturation !== null) {\n color = color.saturation(constrain(color.saturation() + saturation, 0, 1.0));\n }\n if (lightness !== null) {\n color = color.lightness(constrain(color.lightness() + lightness, 0, 1.0));\n }\n return color;\n });\n },\n mixColors: function (args) {\n const color1 = args.color1 || '';\n const color2 = args.color2 || '';\n if (isEmptyCssValue(color1) || isEmptyCssValue(color2)) {\n return '';\n }\n const weight = args.weight || 50;\n if (weight <= 0) {\n return color2;\n }\n else if (weight >= 100) {\n return color1;\n }\n return $.Color(color2).transition($.Color(color1), weight / 100).toHexString();\n },\n changeLightness: function (args) {\n const color = args.color || '';\n if (isEmptyCssValue(color)) {\n return '';\n }\n const amount = args.amount || 0;\n if (amount === 0) {\n return color;\n }\n let output = $.Color(color);\n //Amount is a number between 0 and 100, while lightness is between 0.0 and 1.0.\n let newLightness = output.lightness() + (amount / 100);\n //Clamp to 0.0 - 1.0.\n newLightness = constrain(newLightness, 0.0, 1.0);\n return output.lightness(newLightness).toHexString();\n },\n darken: function (args) {\n const color = args.color || '';\n const amount = args.amount || 0;\n return builtinFunctions.changeLightness({ color, amount: -Math.abs(amount) });\n },\n lighten: function (args) {\n const color = args.color || '';\n const amount = args.amount || 0;\n return builtinFunctions.changeLightness({ color, amount: Math.abs(amount) });\n },\n compare: function (args) {\n const value1 = args.value1;\n const value2 = args.value2;\n const operator = args.op;\n const thenResult = (typeof args.thenResult !== 'undefined') ? args.thenResult : true;\n const elseResult = (typeof args.elseResult !== 'undefined') ? args.elseResult : null;\n let result;\n switch (operator) {\n case '==':\n result = value1 == value2;\n break;\n case '!=':\n result = value1 != value2;\n break;\n case '>':\n result = value1 > value2;\n break;\n case '>=':\n result = value1 >= value2;\n break;\n case '<':\n result = value1 < value2;\n break;\n case '<=':\n result = value1 <= value2;\n break;\n default:\n throw new Error(`Unknown operator: ${operator}`);\n }\n return result ? thenResult : elseResult;\n },\n ifTruthy: function (args) {\n const value = args.value;\n const thenResult = (typeof args.thenResult !== 'undefined') ? args.thenResult : true;\n const elseResult = (typeof args.elseResult !== 'undefined') ? args.elseResult : null;\n return value ? thenResult : elseResult;\n },\n ifSome: function (args) {\n const values = args.values;\n const thenResult = args.thenResult;\n const elseResult = (typeof args.elseResult !== 'undefined') ? args.elseResult : null;\n for (const value of values) {\n if (!!value) {\n return thenResult;\n }\n }\n return elseResult;\n },\n ifAll: function (args) {\n const values = args.values;\n const thenResult = args.thenResult;\n const elseResult = args.elseResult !== undefined ? args.elseResult : null;\n if (!values || (values.length === 0)) {\n return elseResult;\n }\n for (const value of values) {\n if (!value) {\n return elseResult;\n }\n }\n return thenResult;\n },\n ifImageSettingContainsImage: function (args) {\n const thenResult = args.thenResult !== undefined ? args.thenResult : true;\n const elseResult = args.elseResult !== undefined ? args.elseResult : null;\n if ((typeof args.value !== 'object') || !args.value) {\n return elseResult;\n }\n const image = args.value;\n const hasAttachment = !!image.attachmentId;\n const hasExternalUrl = !!image.externalUrl;\n const hasImage = hasAttachment || hasExternalUrl;\n return hasImage ? thenResult : elseResult;\n }\n };\n let Preview;\n (function (Preview) {\n const $ = jQuery;\n function isConditionalAtRuleConfig(config) {\n if ((typeof config !== 'object') || (config === null)) {\n return false;\n }\n const configAsRecord = config;\n return ((typeof configAsRecord['t'] === 'string')\n && (configAsRecord['t'] === 'conditionalAtRule')\n && (typeof configAsRecord['identifier'] === 'string'));\n }\n function isRuleSetConfig(config) {\n return ((config !== null)\n && (Array.isArray(config['selectors']))\n && (Array.isArray(config['generators'])));\n }\n const inactiveSettingMarker = { '_ame_inactive_setting': true };\n class PreviewSession {\n constructor(config) {\n this.settings = {};\n this.valueReaders = new Set();\n this.notFound = {};\n this.variables = {};\n this.styleBlocks = [];\n this.stylesheetsToDisable = [];\n this.stylesheetWasEnabled = {};\n /**\n * Whether this is the first time the preview is being updated.\n * This is set to false after preview() is called for the first time.\n */\n this._isBeforeFirstUpdate = true;\n //Optimization: Create bound getters once instead of every time we need\n //to create a setting or variable reference.\n this.settingValueGetter = this.getSettingPreviewValue.bind(this);\n this.variableValueGetter = (variableName) => {\n if (variableName in this.variables) {\n return this.variables[variableName].getValue();\n }\n return null;\n };\n //Optionally, disable already generated custom stylesheets while the preview\n //is active to prevent old settings from interfering with the preview of new settings.\n if (Array.isArray(config.stylesheetsToDisable)) {\n this.stylesheetsToDisable = config.stylesheetsToDisable;\n }\n //Variables\n for (const variableName in config.variables) {\n if (!config.variables.hasOwnProperty(variableName)) {\n continue;\n }\n this.variables[variableName] = this.createValueDescriptor(config.variables[variableName], true);\n }\n //CSS statement groups\n for (const conditionConfig of config.statementGroups) {\n const statements = this.createCssStatements(conditionConfig.statements);\n if (statements.length < 1) {\n continue;\n }\n const condition = this.createValueDescriptor(conditionConfig.expression, true);\n const usedSettingIds = this.getSettingIdsUsedBy(condition);\n const conditionCallback = () => {\n //For performance, conditions that reference settings should\n //only be checked when at least one setting is active.\n if (usedSettingIds.length > 0) {\n if (!usedSettingIds.some((id) => this.isSettingActive(id))) {\n return false;\n }\n }\n const isTruthy = condition.getValue();\n return !!isTruthy; //Convert to boolean.\n };\n this.styleBlocks.push(new PreviewStyleBlock(statements, conditionCallback));\n }\n }\n createValueDescriptor(data, allowUnknownVariables = false) {\n switch (data.t) {\n case 'constant':\n return new ConstantValue(data.value);\n case 'array':\n return new ArrayValue(data.items.map((valueData) => this.createValueDescriptor(valueData, allowUnknownVariables)));\n case 'setting':\n this.registerPreviewableSettingId(data.id);\n return new SettingReference(data.id, this.settingValueGetter);\n case 'var':\n if (!this.variables.hasOwnProperty(data.name) && !allowUnknownVariables) {\n throw new Error('Unknown variable: ' + data.name);\n }\n return new VariableReference(data.name, this.variableValueGetter);\n case 'funcCall':\n let functionName;\n if (data.name in builtinFunctions) {\n functionName = data.name;\n }\n else {\n throw new Error('Unknown function: ' + data.name);\n }\n const func = builtinFunctions[functionName];\n //Initialize the function arguments.\n let args;\n if (Array.isArray(data.args)) {\n args = data.args.map(arg => this.createValueDescriptor(arg, allowUnknownVariables));\n }\n else {\n args = {};\n for (const argName in data.args) {\n if (!data.args.hasOwnProperty(argName)) {\n continue;\n }\n args[argName] = this.createValueDescriptor(data.args[argName], allowUnknownVariables);\n }\n }\n // @ts-ignore - Can't really statically check this since the values come from the server.\n return new FunctionCall(args, func);\n }\n }\n /**\n * Get the IDs of all settings that are referenced by the given descriptor.\n *\n * @param descriptor\n * @private\n */\n getSettingIdsUsedBy(descriptor) {\n if (descriptor instanceof SettingReference) {\n return [descriptor.settingId];\n }\n if (descriptor instanceof ArrayValue) {\n let result = [];\n for (const item of descriptor.getItemDescriptors()) {\n result = result.concat(this.getSettingIdsUsedBy(item));\n }\n return uniqueArrayValues(result);\n }\n if (descriptor instanceof FunctionCall) {\n let result = [];\n const args = descriptor.args;\n if (Array.isArray(args)) {\n for (const arg of args) {\n result = result.concat(this.getSettingIdsUsedBy(arg));\n }\n }\n else {\n for (const argName in args) {\n if (args.hasOwnProperty(argName)) {\n result = result.concat(this.getSettingIdsUsedBy(args[argName]));\n }\n }\n }\n return uniqueArrayValues(result);\n }\n if (descriptor instanceof VariableReference) {\n const varDef = this.getVariableDefinition(descriptor.name);\n if (varDef === null) {\n return [];\n }\n return this.getSettingIdsUsedBy(varDef);\n }\n return [];\n }\n getVariableDefinition(variableName) {\n if (!this.variables.hasOwnProperty(variableName)) {\n return null;\n }\n return this.variables[variableName];\n }\n createCssStatements(configs) {\n let results = [];\n for (const config of configs) {\n if (isRuleSetConfig(config)) {\n results.push(this.createRuleSetFromConfig(config));\n }\n else if (isConditionalAtRuleConfig(config)) {\n results.push(new ConditionalAtRule(config.identifier, config.condition, (typeof config.nestedStatements === 'undefined')\n ? []\n : this.createCssStatements(config.nestedStatements)));\n }\n else {\n console.error('Unknown CSS statement type: ', config);\n }\n }\n return results;\n }\n createRuleSetFromConfig(config, parent = null) {\n const generatorWrappers = this.makeGeneratorWrappers(config.generators);\n const ruleSet = new CssRuleSet(config.selectors, generatorWrappers, parent);\n const nestedRuleSets = this.createNestedRuleSets(config.nestedStatements, ruleSet);\n ruleSet.setNestedRuleSets(nestedRuleSets);\n return ruleSet;\n }\n createNestedRuleSets(configs, parent = null) {\n let results = [];\n if (!configs) {\n return results;\n }\n for (const config of configs) {\n if (!isRuleSetConfig(config)) {\n throw new Error('A CSS rule set can only contain other rule sets, not other types of statements.');\n }\n results.push(this.createRuleSetFromConfig(config, parent));\n }\n return results;\n }\n getPreviewableSettingIDs() {\n return Object.keys(this.settings);\n }\n preview(settingId, value, otherSettingReader) {\n if (this._isBeforeFirstUpdate) {\n this._isBeforeFirstUpdate = false;\n this.disableAssociatedStylesheets();\n }\n this.valueReaders.add(otherSettingReader);\n if (!this.settings.hasOwnProperty(settingId)) {\n this.settings[settingId] = ko.observable(value);\n }\n else {\n this.settings[settingId](value);\n }\n }\n dispose() {\n //Dispose of all style blocks.\n for (const block of this.styleBlocks) {\n block.dispose();\n }\n this.reEnableAssociatedStylesheets();\n }\n disableAssociatedStylesheets() {\n for (const stylesheetSelector of this.stylesheetsToDisable) {\n const $link = $(stylesheetSelector);\n if ($link.length > 0) {\n this.stylesheetWasEnabled[stylesheetSelector] = $link.prop('disabled');\n $link.prop('disabled', true);\n }\n }\n }\n reEnableAssociatedStylesheets() {\n for (const stylesheetSelector of this.stylesheetsToDisable) {\n const $link = $(stylesheetSelector);\n if (($link.length > 0) && this.stylesheetWasEnabled.hasOwnProperty(stylesheetSelector)) {\n $link.prop('disabled', this.stylesheetWasEnabled[stylesheetSelector]);\n }\n }\n }\n isSettingActive(settingId) {\n if (this.settings.hasOwnProperty(settingId)) {\n return this.settings[settingId]() !== inactiveSettingMarker;\n }\n return false;\n }\n getSettingPreviewValue(settingId) {\n if (!this.settings.hasOwnProperty(settingId)) {\n const value = this.getSettingFromReaders(settingId);\n this.settings[settingId] = ko.observable(value).extend({ deferred: true });\n }\n const observable = this.settings[settingId];\n let value = observable();\n if (value === inactiveSettingMarker) {\n value = this.getSettingFromReaders(settingId);\n observable(value);\n }\n return value;\n }\n getSettingFromReaders(settingId) {\n for (const reader of this.valueReaders) {\n const value = reader(settingId, this.notFound);\n if (value !== this.notFound) {\n return value;\n }\n }\n throw new Error('Setting not found for preview: ' + settingId);\n }\n makeGeneratorWrappers(generatorConfigs) {\n let generatorWrappers = [];\n for (const generatorConfig of generatorConfigs) {\n const wrapper = this.makeDeclarationGeneratorWrapper(generatorConfig);\n if (wrapper !== null) {\n generatorWrappers.push(wrapper);\n }\n }\n return generatorWrappers;\n }\n makeDeclarationGeneratorWrapper(config) {\n const generator = this.createValueDescriptor(config);\n return new DeclarationGeneratorWrapper(generator, this);\n }\n registerPreviewableSettingId(settingId) {\n if (!this.settings.hasOwnProperty(settingId)) {\n this.settings[settingId] = ko.observable(inactiveSettingMarker);\n }\n }\n get isBeforeFirstUpdate() {\n return this._isBeforeFirstUpdate;\n }\n }\n /**\n * Preview manager for the style generator.\n *\n * This is a thin wrapper around the PreviewSession class. It initializes the session\n * as needed and destroys it when the preview is cleared. This makes it simpler to manage\n * active settings, style blocks, and CSS rule-sets: instead of having to carefully\n * track dependencies and deactivate/reactivate them in the right order whenever the preview\n * is disabled/enabled, we can just destroy the session and start over.\n */\n class StyleGeneratorPreview {\n constructor(config) {\n this.config = config;\n this.currentSession = null;\n }\n getOrCreateSession() {\n if (this.currentSession === null) {\n this.currentSession = new PreviewSession(this.config);\n }\n return this.currentSession;\n }\n getPreviewableSettingIDs() {\n return this.getOrCreateSession().getPreviewableSettingIDs();\n }\n preview(settingId, value, otherSettingReader) {\n const session = this.getOrCreateSession();\n const shouldPreviewAll = (this.config.previewAllOnFirstUpdate && session.isBeforeFirstUpdate);\n session.preview(settingId, value, otherSettingReader);\n if (shouldPreviewAll) {\n //Preview all registered settings the first time the preview is updated.\n const notFound = {};\n for (const otherId of session.getPreviewableSettingIDs()) {\n const otherValue = otherSettingReader(otherId, notFound);\n if ((otherId !== settingId) && (otherValue !== notFound)) {\n session.preview(otherId, otherValue, otherSettingReader);\n }\n }\n }\n }\n clearPreview() {\n if (this.currentSession !== null) {\n this.currentSession.dispose();\n this.currentSession = null;\n }\n }\n }\n Preview.StyleGeneratorPreview = StyleGeneratorPreview;\n class DeclarationGeneratorWrapper {\n constructor(generator, settingSource) {\n this.generator = generator;\n this.settingSource = settingSource;\n //Introspect the generator and see which settings it uses.\n //This will be useful to determine if the generator is active.\n this.usedSettingIds = DeclarationGeneratorWrapper.findReferencedSettingIds(generator, settingSource);\n this.cssDeclarations = ko.computed({\n read: () => this.getDeclarations(),\n deferEvaluation: true,\n }).extend({ deferred: true });\n }\n /**\n * Recursively find all settings used by a value descriptor (such as a function call).\n *\n * @param {ValueDescriptor} thing\n * @param variableSource Needed to get variable definitions and not just the final values.\n */\n static findReferencedSettingIds(thing, variableSource) {\n let settingIds = [];\n if (thing instanceof SettingReference) {\n settingIds.push(thing.settingId);\n }\n else if (thing instanceof FunctionCall) {\n if (Array.isArray(thing.args)) {\n for (const arg of thing.args) {\n settingIds = settingIds.concat(DeclarationGeneratorWrapper.findReferencedSettingIds(arg, variableSource));\n }\n }\n else {\n for (const key in thing.args) {\n settingIds = settingIds.concat(DeclarationGeneratorWrapper.findReferencedSettingIds(thing.args[key], variableSource));\n }\n }\n }\n else if (thing instanceof VariableReference) {\n const value = variableSource.getVariableDefinition(thing.name);\n if (value !== null) {\n settingIds = settingIds.concat(DeclarationGeneratorWrapper.findReferencedSettingIds(value, variableSource));\n }\n }\n return settingIds;\n }\n isActive() {\n //Check if any of the input settings are active.\n let hasSettingLookups = false;\n for (const settingId of this.usedSettingIds) {\n hasSettingLookups = true;\n if (this.settingSource.isSettingActive(settingId)) {\n return true;\n }\n }\n //If there are no input settings, the generator is always active: it just\n //generates a fixed declaration.\n return !hasSettingLookups;\n }\n getDeclarations() {\n return this.generator.getValue();\n }\n dispose() {\n this.cssDeclarations.dispose();\n }\n }\n class CssStatement {\n constructor() {\n this.cssText = ko.computed({\n read: () => this.generateCss(),\n deferEvaluation: true,\n }).extend({ deferred: true });\n }\n dispose() {\n //Dispose the CSS text observable.\n this.cssText.dispose();\n }\n }\n class CssRuleSet extends CssStatement {\n constructor(selectors, declarationSources, parent = null) {\n super();\n this.declarationSources = declarationSources;\n this.nestedRuleSets = ko.observableArray([]);\n if (parent === null) {\n this.effectiveSelectors = selectors;\n }\n else {\n this.effectiveSelectors = CssRuleSet.combineSelectors(selectors, parent.effectiveSelectors);\n }\n this.selectorText = this.effectiveSelectors.join(', ');\n }\n static combineSelectors(selectors, parentSelectors) {\n const combinedSelectors = [];\n for (const selector of selectors) {\n if (selector === '') {\n continue;\n }\n if (selector.includes('&')) {\n //Insert the parent selectors into the current selector at the position of the \"&\".\n for (const parentSelector of parentSelectors) {\n combinedSelectors.push(selector.replace('&', parentSelector.trim()));\n }\n }\n else {\n //Just append the current selector to the parent selectors.\n for (const parentSelector of parentSelectors) {\n combinedSelectors.push(`${parentSelector} ${selector}`);\n }\n }\n }\n return combinedSelectors;\n }\n setNestedRuleSets(ruleSets) {\n //Dispose the old rule sets that are not part of the new list.\n for (const oldRuleSet of this.nestedRuleSets()) {\n if (ruleSets.indexOf(oldRuleSet) === -1) {\n oldRuleSet.dispose();\n }\n }\n this.nestedRuleSets(ruleSets);\n }\n generateCss() {\n const declarations = this.getDeclarations();\n const nestedRuleSetParts = [];\n for (const ruleSet of this.nestedRuleSets()) {\n if (ruleSet.isActive()) {\n nestedRuleSetParts.push(ruleSet.cssText());\n }\n }\n let css = '';\n if (declarations.length > 0) {\n css += this.selectorText + ' {\\n\\t' + declarations.join('\\n\\t') + '\\n}\\n';\n }\n if (nestedRuleSetParts.length > 0) {\n css += nestedRuleSetParts.join('\\n');\n }\n return css;\n }\n isActive() {\n for (const source of this.declarationSources) {\n if (source.isActive()) {\n return true;\n }\n }\n for (const ruleSet of this.nestedRuleSets()) {\n if (ruleSet.isActive()) {\n return true;\n }\n }\n return false;\n }\n getDeclarations() {\n const declarations = [];\n for (const source of this.declarationSources) {\n if (source.isActive()) {\n declarations.push(...source.cssDeclarations());\n }\n }\n return declarations;\n }\n dispose() {\n //Dispose declaration sources.\n for (const source of this.declarationSources) {\n source.dispose();\n }\n //Dispose nested rule sets.\n for (const ruleSet of this.nestedRuleSets()) {\n ruleSet.dispose();\n }\n super.dispose();\n }\n }\n class ConditionalAtRule extends CssStatement {\n constructor(identifier, condition, nestedStatements) {\n super();\n this.identifier = identifier;\n this.condition = condition;\n this.nestedStatements = nestedStatements;\n }\n generateCss() {\n const pieces = [];\n for (const statement of this.nestedStatements) {\n const css = statement.cssText();\n if (css !== '') {\n pieces.push(css);\n }\n }\n if (pieces.length === 0) {\n return '';\n }\n return this.getAtRuleText() + ' {\\n\\t' + pieces.join('\\n\\t') + '\\n}';\n }\n getAtRuleText() {\n return '@' + this.identifier + ' ' + this.condition;\n }\n isActive() {\n for (const statement of this.nestedStatements) {\n if (statement.isActive()) {\n return true;\n }\n }\n return false;\n }\n dispose() {\n //Dispose nested statements.\n for (const statement of this.nestedStatements) {\n statement.dispose();\n }\n super.dispose();\n }\n }\n class PreviewStyleBlock {\n constructor(statements, condition = null) {\n this.statements = statements;\n this.condition = condition;\n this.$styleElement = null;\n this.cssText = ko.computed({\n read: () => {\n if ((condition !== null) && !condition()) {\n return '';\n }\n let pieces = [];\n for (const statement of this.statements) {\n if (statement.isActive()) {\n const css = statement.cssText();\n if (css !== '') {\n pieces.push(css);\n }\n }\n }\n if (pieces.length === 0) {\n return '';\n }\n return pieces.join('\\n');\n },\n deferEvaluation: true,\n }).extend({ deferred: true });\n this.updateStyleElement(this.cssText());\n this.cssChangeSubscription = this.cssText.subscribe((cssText) => {\n this.updateStyleElement(cssText);\n });\n }\n updateStyleElement(cssText) {\n if (cssText === '') {\n if (this.$styleElement) {\n this.$styleElement.remove();\n this.$styleElement = null;\n }\n return;\n }\n if (!this.$styleElement) {\n this.$styleElement = $('').appendTo('head');\n }\n this.$styleElement.text(cssText);\n }\n clear() {\n if (this.$styleElement) {\n this.$styleElement.remove();\n this.$styleElement = null;\n }\n }\n dispose() {\n //Stop listening for CSS changes.\n this.cssChangeSubscription.dispose();\n this.cssText.dispose();\n //Dispose rule sets.\n for (const ruleset of this.statements) {\n ruleset.dispose();\n }\n //Remove the style element.\n this.clear();\n }\n }\n })(Preview = AmeStyleGenerator.Preview || (AmeStyleGenerator.Preview = {}));\n})(AmeStyleGenerator || (AmeStyleGenerator = {}));\n//# sourceMappingURL=style-generator.js.map"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/extras.php b/extras.php index 95d8e9b..9820c47 100644 --- a/extras.php +++ b/extras.php @@ -1,5 +1,8 @@ embedded_wp_pages)); + $slug_unique_salt = ameMenuItem::get($item, 'local_id', ''); + if ( empty($slug_unique_salt) ) { + $slug_unique_salt = (string)count($this->embedded_wp_pages); + } + $slug = 'embedded-page-' . md5($page_id . '|' . $blog_id . '|' . $slug_unique_salt); $this->embedded_wp_pages[$slug] = $item; //Used by the callback function. //Add a virtual menu. @@ -1068,7 +1068,7 @@ function menu_editor_header($action = ''){ } //Merge the imported menu with the current one. - $menu['tree'] = $wp_menu_editor->menu_merge($menu['tree']); + $menu['tree'] = $wp_menu_editor->menu_merge(isset($menu['tree']) ? $menu['tree'] : []); //Everything looks okay, send back the menu data $this->output_for_jquery_form( ameMenu::to_json($menu) ); @@ -1802,13 +1802,6 @@ public function get_new_menu_grant_access(/** @noinspection PhpUnusedParameterIn return $grantAccess; } - function output_menu_dropzone($type = 'menu') { - printf( - '
    ', - ($type == 'menu') ? 'top_menu' : 'sub_menu' - ); - } - function pro_page_title(){ return 'Menu Editor Pro'; } diff --git a/extras/modules/admin-customizer/admin-customizer.js b/extras/modules/admin-customizer/admin-customizer.js index 758e730..8283514 100644 --- a/extras/modules/admin-customizer/admin-customizer.js +++ b/extras/modules/admin-customizer/admin-customizer.js @@ -941,6 +941,7 @@ export var AmeAdminCustomizer; } this.customBasePath = scriptData.customBasePath || null; this.consoleLoggingEnabled = scriptData.isWpDebugEnabled || false; + this.downloadOnlyIfChangesetIsNonEmpty = scriptData.downloadOnlyIfChangesetIsNonEmpty || false; if ((typeof scriptData.exitPromptMode === 'number') && (scriptData.exitPromptMode in ExitPromptMode)) { this.exitPromptMode = scriptData.exitPromptMode; } @@ -1150,8 +1151,10 @@ export var AmeAdminCustomizer; //The changeset must already be saved for the download to work, //which means it should have a name. && (this.settings.getCurrentChangeset().name() !== '') - //The changeset should probably be non-empty. - && this.settings.getCurrentChangeset().isNonEmpty()); + && ( + //Optionally, the download can be restricted to non-empty changesets. + !this.downloadOnlyIfChangesetIsNonEmpty + || this.settings.getCurrentChangeset().isNonEmpty())); }); this.downloadThemeActionEnabled.subscribe((isEnabled) => { if (this.$extraActionMenu) { diff --git a/extras/modules/admin-customizer/admin-customizer.js.map b/extras/modules/admin-customizer/admin-customizer.js.map index 8eb0904..5b77a6f 100644 --- a/extras/modules/admin-customizer/admin-customizer.js.map +++ b/extras/modules/admin-customizer/admin-customizer.js.map @@ -1 +1 @@ -{"version":3,"file":"admin-customizer.js","sourceRoot":"","sources":["admin-customizer.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"admin-customizer.js","sourceRoot":"","sources":["admin-customizer.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/extras/modules/admin-customizer/admin-customizer.php b/extras/modules/admin-customizer/admin-customizer.php index 270e76b..1edf441 100644 --- a/extras/modules/admin-customizer/admin-customizer.php +++ b/extras/modules/admin-customizer/admin-customizer.php @@ -1039,10 +1039,19 @@ private function saveChangeset(AcChangeset $changeset, $status = null) { //Prevent WordPress from corrupting JSON data by "sanitizing" it. add_filter('wp_insert_post_data', [$this, 'preserveUnsanitizedPostContent'], 20, 3); - if ( $existingPostId ) { - $postId = wp_update_post(wp_slash($postArray), true); - } else { - $postId = wp_insert_post(wp_slash($postArray), true); + //Convert exceptions to WP_Error instances. Normally, exceptions should not happen, + //but if they do, this will give the user an error message they can report to me. + try { + if ( $existingPostId ) { + $postId = wp_update_post(wp_slash($postArray), true); + } else { + $postId = wp_insert_post(wp_slash($postArray), true); + } + } catch (\Exception $e) { + $postId = new \WP_Error( + 'ame_changeset_save_failed', + 'Unexpected exception: ' . $e->getMessage() + ); } remove_filter('wp_insert_post_data', [$this, 'preserveUnsanitizedPostContent'], 20); diff --git a/extras/modules/admin-customizer/admin-customizer.ts b/extras/modules/admin-customizer/admin-customizer.ts index 124b0ee..fbc1332 100644 --- a/extras/modules/admin-customizer/admin-customizer.ts +++ b/extras/modules/admin-customizer/admin-customizer.ts @@ -82,6 +82,15 @@ export namespace AmeAdminCustomizer { customBasePath: string | null; exitPromptMode?: number; + + /** + * Whether generating an admin theme requires the current changeset to be non-empty. + * + * By default, even if the current changeset is empty, the user can still generate an admin + * theme from previously saved settings. If there are no settings, the generated theme just + * won't change the admin interface at all. + */ + downloadOnlyIfChangesetIsNonEmpty?: boolean; } interface AdminThemeTexts { @@ -1292,6 +1301,8 @@ export namespace AmeAdminCustomizer { private readonly consoleLoggingEnabled: boolean; private readonly exitPromptMode: ExitPromptMode; + private readonly downloadOnlyIfChangesetIsNonEmpty: boolean; + constructor(scriptData: ScriptData) { super(scriptData); @@ -1314,6 +1325,7 @@ export namespace AmeAdminCustomizer { this.customBasePath = scriptData.customBasePath || null; this.consoleLoggingEnabled = scriptData.isWpDebugEnabled || false; + this.downloadOnlyIfChangesetIsNonEmpty = scriptData.downloadOnlyIfChangesetIsNonEmpty || false; if ((typeof scriptData.exitPromptMode === 'number') && (scriptData.exitPromptMode in ExitPromptMode)) { this.exitPromptMode = scriptData.exitPromptMode; @@ -1561,8 +1573,11 @@ export namespace AmeAdminCustomizer { //The changeset must already be saved for the download to work, //which means it should have a name. && (this.settings.getCurrentChangeset().name() !== '') - //The changeset should probably be non-empty. - && this.settings.getCurrentChangeset().isNonEmpty() + && ( + //Optionally, the download can be restricted to non-empty changesets. + !this.downloadOnlyIfChangesetIsNonEmpty + || this.settings.getCurrentChangeset().isNonEmpty() + ) ); }); this.downloadThemeActionEnabled.subscribe((isEnabled) => { diff --git a/extras/modules/admin-menu-colors/admin-menu-colors.php b/extras/modules/admin-menu-colors/admin-menu-colors.php index cb85947..1532fba 100644 --- a/extras/modules/admin-menu-colors/admin-menu-colors.php +++ b/extras/modules/admin-menu-colors/admin-menu-colors.php @@ -42,10 +42,12 @@ class MenuColorsModule extends \ameModule { 'menu-current-icon' => 'Current icon', 'menu-current-background' => 'Current background', - 'menu-submenu-text' => 'Submenu text', - 'menu-submenu-background' => 'Submenu background', - 'menu-submenu-focus-text' => 'Submenu highlight text', - 'menu-submenu-current-text' => 'Submenu current text', + 'menu-submenu-text' => 'Submenu text', + 'menu-submenu-background' => 'Submenu background', + 'menu-submenu-focus-text' => 'Submenu highlight text', + 'menu-submenu-focus-background' => 'Submenu highlight background', + 'menu-submenu-current-text' => 'Submenu current text', + 'menu-submenu-current-background' => 'Submenu current background', 'menu-bubble-text' => 'Bubble text', 'menu-bubble-background' => 'Bubble background', @@ -267,7 +269,7 @@ private function setColorVariablesOn(StyleGenerator $g, $colorValueGetter) { $g->variable('menu-highlight-background'), ], - 'menu-submenu-text' => [ + 'menu-submenu-text' => [ $colorValueGetter('menu-submenu-text'), $g->mixColors( $g->variable('base-color'), @@ -277,18 +279,24 @@ private function setColorVariablesOn(StyleGenerator $g, $colorValueGetter) { 29.5 ), ], - 'menu-submenu-background' => [ + 'menu-submenu-background' => [ $colorValueGetter('menu-submenu-background'), $g->darken($g->variable('base-color'), 7), ], - 'menu-submenu-focus-text' => [ + 'menu-submenu-focus-text' => [ $colorValueGetter('menu-submenu-focus-text'), $g->variable('highlight-color'), ], - 'menu-submenu-current-text' => [ + 'menu-submenu-focus-background' => [ + $colorValueGetter('menu-submenu-focus-background'), + ], + 'menu-submenu-current-text' => [ $colorValueGetter('menu-submenu-current-text'), $g->variable('text-color'), ], + 'menu-submenu-current-background' => [ + $colorValueGetter('menu-submenu-current-background'), + ], 'menu-bubble-text' => [ $colorValueGetter('menu-bubble-text'), @@ -405,7 +413,10 @@ private function getPartialStyleGenerator($isForAllMenus = true) { $li . '.wp-has-current-submenu.opensub .wp-submenu a:focus', $li . '.wp-has-current-submenu.opensub .wp-submenu a:hover', ], - ['color' => $g->variable('menu-submenu-focus-text')] + [ + 'color' => $g->variable('menu-submenu-focus-text'), + 'background-color' => $g->variable('menu-submenu-focus-background'), + ] ); $g->addRuleSet( @@ -414,7 +425,10 @@ private function getPartialStyleGenerator($isForAllMenus = true) { $li . ' a.wp-has-current-submenu:focus + .wp-submenu li.current a', $li . '.wp-has-current-submenu.opensub .wp-submenu li.current a', ], - ['color' => $g->variable('menu-submenu-current-text')] + [ + 'color' => $g->variable('menu-submenu-current-text'), + 'background-color' => $g->variable('menu-submenu-current-background'), + ] ); $g->addRuleSet( @@ -426,7 +440,10 @@ private function getPartialStyleGenerator($isForAllMenus = true) { $li . '.wp-has-current-submenu.opensub .wp-submenu li.current a:hover', $li . '.wp-has-current-submenu.opensub .wp-submenu li.current a:focus', ], - ['color' => $g->variable('menu-submenu-focus-text')] + [ + 'color' => $g->variable('menu-submenu-focus-text'), + 'background-color' => $g->variable('menu-submenu-focus-background'), + ] ); $g->addRuleSet( diff --git a/extras/modules/admin-menu-colors/menu-colors-ui.css b/extras/modules/admin-menu-colors/menu-colors-ui.css index 61a458f..cd843be 100644 --- a/extras/modules/admin-menu-colors/menu-colors-ui.css +++ b/extras/modules/admin-menu-colors/menu-colors-ui.css @@ -42,6 +42,10 @@ a.ame-mc-delete-color-preset:hover { flex-grow: 1; } +.ame-tp-section.ame-mc-color-section .ame-mc-color-group .ame-tp-control-group-title { + width: 210px; +} + #ws-ame-mc-menu-color-settings .ame-tp-tabs { display: none; } diff --git a/extras/modules/admin-menu-colors/menu-colors-ui.css.map b/extras/modules/admin-menu-colors/menu-colors-ui.css.map index a62c2ca..7860db8 100644 --- a/extras/modules/admin-menu-colors/menu-colors-ui.css.map +++ b/extras/modules/admin-menu-colors/menu-colors-ui.css.map @@ -1 +1 @@ -{"version":3,"sourceRoot":"","sources":["menu-colors-ui.scss"],"names":[],"mappings":"AAAA;EACC;;;AAGD;EACC;EAEA;EACA;;AAEA;EACC;;;AAIF;EACC;EACA;;;AAGD;AAAA;AAAA;AAAA;AAIA;EACC;EACA;EACA;;AAEA;EACC;EACA;EACA;EAEA;EACA;;AAEA;EACC;EACA;;AAOD;EACC;EACA;EACA;;;AAOF;EACC;;AAGD;EACC;;AAID;EACC;;AAGD;EACC;;AAGD;EACC;;AAGD;EACC;EACA","file":"menu-colors-ui.css"} \ No newline at end of file +{"version":3,"sourceRoot":"","sources":["menu-colors-ui.scss"],"names":[],"mappings":"AAAA;EACC;;;AAGD;EACC;EAEA;EACA;;AAEA;EACC;;;AAIF;EACC;EACA;;;AAGD;AAAA;AAAA;AAAA;AAIA;EACC;EACA;EACA;;AAEA;EACC;EACA;EACA;EAEA;EACA;;AAEA;EACC;EACA;;AAOD;EACC;EACA;EACA;;;AAOF;EACC;;;AAMD;EACC;;AAGD;EACC;;AAID;EACC;;AAGD;EACC;;AAGD;EACC;;AAGD;EACC;EACA","file":"menu-colors-ui.css"} \ No newline at end of file diff --git a/extras/modules/admin-menu-colors/menu-colors-ui.scss b/extras/modules/admin-menu-colors/menu-colors-ui.scss index 9be9316..9a43320 100644 --- a/extras/modules/admin-menu-colors/menu-colors-ui.scss +++ b/extras/modules/admin-menu-colors/menu-colors-ui.scss @@ -52,6 +52,13 @@ a.ame-mc-delete-color-preset { } } +//Increase the width of color labels to accommodate longer color names. +.ame-tp-section.ame-mc-color-section .ame-mc-color-group { + .ame-tp-control-group-title { + width: 210px; + } +} + #ws-ame-mc-menu-color-settings { //Hide the sidebar in the color dialog. .ame-tp-tabs { diff --git a/extras/modules/dashboard-styler/dashboard-styler.php b/extras/modules/dashboard-styler/dashboard-styler.php index f25c1e7..ce053c8 100644 --- a/extras/modules/dashboard-styler/dashboard-styler.php +++ b/extras/modules/dashboard-styler/dashboard-styler.php @@ -263,6 +263,7 @@ function (SettingFactory $cf) { $cf->cssColor('itemHoverBackgroundColor', 'background-color', 'Item hover background color'), $cf->cssColor('submenuTextColor', 'color', 'Submenu text color'), $cf->cssColor('submenuTextHoverColor', 'color', 'Submenu text hover color'), + $cf->cssColor('submenuHoverBackgroundColor', 'color', 'Submenu item hover background color'), $cf->cssLength( 'submenuItemHeight', @@ -421,7 +422,8 @@ public function getInterfaceStructure() { $b->auto('toolbar.textHoverColor'), $b->auto('toolbar.itemHoverBackgroundColor'), $b->auto('toolbar.submenuTextColor'), - $b->auto('toolbar.submenuTextHoverColor') + $b->auto('toolbar.submenuTextHoverColor'), + $b->auto('toolbar.submenuHoverBackgroundColor') ), $b->section( 'Submenus', @@ -1385,6 +1387,19 @@ private function addToolbarStyles(StyleGenerator $g, AbstractSettingsDictionary '.wp-admin-bar-arrow', ], ['padding-top' => 'calc(4px + (var(--wp-admin--admin-bar--height, 32px) - 32px) / 2)'] + ), + //Move Gutenberg editor's header and top toolbar down. + new CssRuleSet( + [ + '.interface-interface-skeleton', + '.edit-post-visual-editor .block-editor-block-contextual-toolbar.is-fixed', + ], + ['top' => 'var(--wp-admin--admin-bar--height, 32px)'] + ), + //Move the WooCommerce header. + new CssRuleSet( + ['.woocommerce-layout .woocommerce-layout__header'], + ['top' => 'var(--wp-admin--admin-bar--height, 32px)'] ) ); @@ -1610,6 +1625,17 @@ private function addToolbarStyles(StyleGenerator $g, AbstractSettingsDictionary ], ['color' => $g->variable('submenuTextHoverColor')] ); + + //Submenu item hover background color. + $g->addRuleSet( + [ + '#wpadminbar .quicklinks .menupop ul li a:hover', + '#wpadminbar .quicklinks .menupop ul li a:focus', + '#wpadminbar .quicklinks .menupop ul li > .ab-item:hover', + ], + ['background-color' => $s->getSetting('toolbar.submenuHoverBackgroundColor')] + ); + //"My Account" has its own text color rules. //The display name uses the base text color, not the submenu text color. $g->addRuleSet( diff --git a/extras/modules/dashboard-widget-editor/dashboard-widget-editor.css.map b/extras/modules/dashboard-widget-editor/dashboard-widget-editor.css.map index 5163672..9478de1 100644 --- a/extras/modules/dashboard-widget-editor/dashboard-widget-editor.css.map +++ b/extras/modules/dashboard-widget-editor/dashboard-widget-editor.css.map @@ -1 +1 @@ -{"version":3,"sourceRoot":"","sources":["dashboard-widget-editor.scss","../../../css/_indeterminate-checkbox.scss"],"names":[],"mappings":";AAKA;EACC;;;AAGD;EACC;EAGA;EACA;;;AAGD;EACC;EACA;;AAEA;EAEC;;AAEA;EACC;;AAGD;EACC;;AAGD;EACC;EACA;;AAGD;EACC;;AAGD;EACC;;AAIF;EACC;;AAIA;EACC;;;AAKH;EACC;EACA;EACA;EAEA;EACA;EAEA;EACA;EACA;;AAEA;EACC;;AAIA;EACC;EACA;;AAFD;EACC;EACA;;AAFD;EACC;EACA;;;AAKH;EACC;EACA;EACA;;AAEA;EACC;EACA;;AAGD;EACC;EACA;;AAGD;EACC;;;AAIF;AAAA;EAEC;EAEA;EACA;EACA;;;AAGD;EACC;EACA;EACA;;;AAGD;EACC;EACA;;;AAGD;EACC;EACA;;;AAGD;EACC;EACA;EACA;EAEA;EACA;EACA;EACA,KApIoB;;;AAuIrB;EAEC;EACA;;;AAGD;EACC;EACA;EACA;;AAEA;EACC;;;AAOF;EACC;EACA;EACA;EAEA;EACA;EACA;EAEA;EACA;;AAEA;EACC;EACA,cAhBa;EAiBb;;AAGD;EACC;EACA;EACA;EAEA;EACA;EAEA;EACA;EACA;;AAGD;EACC;EACA;EACA;EACA;EAEA,OAxCiB;EAyCjB;EAEA;EACA;EAEA;EACA;EACA;;AAEA;EACC;EACA;EACA;EACA;;AAGD;EACC;EACA;EACA;EACA;;AAGD;EACC;;AAIF;EACC;EACA;;AAGD;EACC;EACA;;AAGD;EACC;EACA,OAjFiB;EAkFjB;EACA;EACA;EACA;;AAEA;EACC;EACA;EACA;EACA;;AAMF;EACC,QAHU;EAIV,OAJU;EAKV;EACA;;AAEA;EACC;EACA,OAVS;EAWT,QAXS;EAYT;EACA;EACA;;;AAMF;EACC;;;AAIF;EACC;;;AAGD;EACC;EACA;EAEA;EAEA;EACA;EAEA;;AAEA;EACC;EACA;EACA;;AAGD;EACC;;AAGD;AAAA;AAAA;AAAA;EAIC;;AAGD;EACC;EACA;EACA;;;AAKD;EACC;;AAGD;EACC;;AAGD;EACC;;;AAKF;EAKC;EACA;;;AC7UA;AAAA;AAAA;EACC;EACA,OAH4C;EAU5C;EACA;EAMA;EACA;EACA;EACA;EACA;;AAGD;EACC;AAAA;AAAA;IAEC,QADU;IAEV,OAFU;IAGV,aAHU;IAIV;IAEA;IACA;IACA;;;;ADuTH;AAAA;AAAA;AAIA;EACC;;;AAGD;EACC","file":"dashboard-widget-editor.css"} \ No newline at end of file +{"version":3,"sourceRoot":"","sources":["dashboard-widget-editor.scss","../../../css/_indeterminate-checkbox.scss"],"names":[],"mappings":";AAMA;EACC;;;AAGD;EACC;EAGA;EACA;;;AAGD;EACC;EACA;;AAEA;EAEC;;AAEA;EACC;;AAGD;EACC;;AAGD;EACC;EACA;;AAGD;EACC;;AAGD;EACC;;AAIF;EACC;;AAIA;EACC;;;AAKH;EACC;EACA;EACA;EAEA;EACA;EAEA;EACA;EACA;;AAEA;EACC;;AAIA;EACC;EACA;;AAFD;EACC;EACA;;AAFD;EACC;EACA;;;AAKH;EACC;EACA;EACA;;AAEA;EACC;EACA;;AAGD;EACC;EACA;;AAGD;EACC;;;AAIF;AAAA;EAEC;EAEA;EACA;EACA;;;AAGD;EACC;EACA;EACA;;;AAGD;EACC;EACA;;;AAGD;EACC;EACA;;;AAGD;EACC;EACA;EACA;EAEA;EACA;EACA;EACA,KApIoB;;;AAuIrB;EAEC;EACA;;;AAGD;EACC;EACA;EACA;;AAEA;EACC;;;AAOF;EACC;EACA;EACA;EAEA;EACA;EACA;EAEA;EACA;;AAEA;EACC;EACA,cAhBa;EAiBb;;AAGD;EACC;EACA;EACA;EAEA;EACA;EAEA;EACA;EACA;;AAGD;EACC;EACA;EACA;EACA;EAEA,OAxCiB;EAyCjB;EAEA;EACA;EAEA;EACA;EACA;;AAEA;EACC;EACA;EACA;EACA;;AAGD;EACC;EACA;EACA;EACA;;AAGD;EACC;;AAIF;EACC;EACA;;AAGD;EACC;EACA;;AAGD;EACC;EACA,OAjFiB;EAkFjB;EACA;EACA;EACA;;AAEA;EACC;EACA;EACA;EACA;;AAMF;EACC,QAHU;EAIV,OAJU;EAKV;EACA;;AAEA;EACC;EACA,OAVS;EAWT,QAXS;EAYT;EACA;EACA;;;AAMF;EACC;;;AAIF;EACC;;;AAGD;EACC;EACA;EAEA;EAEA;EACA;EAEA;;AAEA;EACC;EACA;EACA;;AAGD;EACC;;AAGD;AAAA;AAAA;AAAA;EAIC;;AAGD;EACC;EACA;EACA;;;AAKD;EACC;;AAGD;EACC;;AAGD;EACC;;;AAKF;EAKC;EACA;;;AC9UA;AAAA;AAAA;EACC;EACA,OAH4C;EAU5C;EACA;EAMA;EACA;EACA;EACA;EACA;;AAGD;EACC;AAAA;AAAA;IAEC,QADU;IAEV,OAFU;IAGV,aAHU;IAIV;IAEA;IACA;IACA;;;;ADwTH;AAAA;AAAA;AAIA;EACC;;;AAGD;EACC","file":"dashboard-widget-editor.css"} \ No newline at end of file diff --git a/extras/modules/dashboard-widget-editor/dashboard-widget-editor.scss b/extras/modules/dashboard-widget-editor/dashboard-widget-editor.scss index 0580975..13c8851 100644 --- a/extras/modules/dashboard-widget-editor/dashboard-widget-editor.scss +++ b/extras/modules/dashboard-widget-editor/dashboard-widget-editor.scss @@ -1,4 +1,5 @@ @import "../../../css/boxes"; +@import "../../../css/ui-constants"; $widgetBorderColor: $amePostboxBorderColor; $widgetBottomMargin: 10px; @@ -65,7 +66,7 @@ $widgetBottomMargin: 10px; grid-template-columns: 1fr; padding: 10px 8px 10px 8px; - margin: 2px 0 0 0; + margin: $smallActorSelectorToUiGap 0 0 0; gap: 16px; //The dashboard has 16px gaps, but 8px could also work here as it's consistent with the widget padding. &.ame-widget-preview-columns-1 { @@ -82,7 +83,7 @@ $widgetBottomMargin: 10px; #ame-major-widget-actions { padding: 10px 8px; - margin: 2px 0 0 0; + margin: $smallActorSelectorToUiGap 0 0 0; width: 150px; input.button.button-primary { diff --git a/extras/modules/easy-hide/easy-hide.js b/extras/modules/easy-hide/easy-hide.js index aae5fea..e96d872 100644 --- a/extras/modules/easy-hide/easy-hide.js +++ b/extras/modules/easy-hide/easy-hide.js @@ -104,7 +104,9 @@ var AmeEasyHide; //Sort items alphabetically if requested. if (this.itemSortOrder === SortOrder.SORT_ALPHA) { results.sort(function (a, b) { - return a.label.localeCompare(b.label); + const unquotedA = _.trim(a.label, ' "\''); + const unquotedB = _.trim(b.label, ' "\''); + return unquotedA.localeCompare(unquotedB); }); } return results; diff --git a/extras/modules/easy-hide/easy-hide.js.map b/extras/modules/easy-hide/easy-hide.js.map index fda6487..c277a05 100644 --- a/extras/modules/easy-hide/easy-hide.js.map +++ b/extras/modules/easy-hide/easy-hide.js.map @@ -1 +1 @@ -{"version":3,"file":"easy-hide.js","sourceRoot":"","sources":["easy-hide.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"easy-hide.js","sourceRoot":"","sources":["easy-hide.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/extras/modules/easy-hide/easy-hide.ts b/extras/modules/easy-hide/easy-hide.ts index 2bf24e0..5e0907c 100644 --- a/extras/modules/easy-hide/easy-hide.ts +++ b/extras/modules/easy-hide/easy-hide.ts @@ -167,7 +167,9 @@ namespace AmeEasyHide { //Sort items alphabetically if requested. if (this.itemSortOrder === SortOrder.SORT_ALPHA) { results.sort(function (a, b) { - return a.label.localeCompare(b.label); + const unquotedA = _.trim(a.label, ' "\''); + const unquotedB = _.trim(b.label, ' "\''); + return unquotedA.localeCompare(unquotedB); }); } diff --git a/extras/modules/hide-admin-bar/hide-admin-bar.php b/extras/modules/hide-admin-bar/hide-admin-bar.php index b4833ab..c23dbc9 100644 --- a/extras/modules/hide-admin-bar/hide-admin-bar.php +++ b/extras/modules/hide-admin-bar/hide-admin-bar.php @@ -2,6 +2,10 @@ /** * Hides the Admin Bar / Toolbar. + * + * phpcs:disable WordPressVIPMinimum.UserExperience.AdminBarRemoval + * ^- That's the whole point of this feature, hiding is disabled by default, + * and the admin can choose the roles that will be affected. */ class ameAdminBarHider { const HIDEABLE_ITEM_ID = 'hide_admin_bar'; @@ -57,6 +61,8 @@ private function hide_admin_bar() { add_filter('wp_admin_bar_class', array($this, 'filter_admin_bar_class')); add_action('admin_print_scripts-profile.php', array($this, 'hide_toolbar_settings')); add_action('admin_bar_init', array($this, 'remove_bump_css')); + add_action('admin_bar_init', array($this, 'override_admin_bar_height_css')); + add_action('enqueue_block_editor_assets', array($this, 'add_gutenberg_styles')); } /** @@ -97,7 +103,7 @@ public function filter_admin_bar_class($className) { public function hide_toolbar_settings() { ?> - + print_gutenberg_styles(); + } else { + add_action('admin_print_styles', array($this, 'print_gutenberg_styles')); + } + } + + /** + * Output extra CSS for the Gutenberg editor interface. + */ + public function print_gutenberg_styles() { + //By default, the Gutenberg editor interface is offset from the top of the screen by + //32px or 46px (depending on media queries) to make space for the Admin Bar. Let's remove + //this offset when the Admin Bar is hidden. + ?> + + + isRelevantQuery($query) ) { + $relevantPostTypes = $this->getRelevantPostTypes($query); + if ( empty($relevantPostTypes) ) { return; } //Note: The tweak manager will only call our "enable..." callback if it determines that @@ -34,15 +35,15 @@ public function filterPostQuery($query) { if ( empty($currentUser) || empty($currentUser->ID) ) { return; } - $postType = $query->get('post_type'); - if ( empty($postType) ) { - return; //Should never happen because isRelevantQuery() checks the post type. - } + //getRelevantPostTypes() should have already checked is_main_query(). + //phpcs:ignore WordPressVIPMinimum.Hooks.PreGetPosts.PreGetPosts $query->set('author', $currentUser->ID); //Filter the number of posts by status to exclude posts that the user can't see. - $this->countFilterEnabled[$postType] = true; + foreach ($relevantPostTypes as $postType) { + $this->countFilterEnabled[$postType] = true; + } if ( !$this->postCountHooksAdded ) { add_filter('wp_count_posts', [$this, 'filterPostCounts'], 10, 3); @@ -131,7 +132,7 @@ public function maybeClearPostCountCache($newStatus, $oldStatus, $post) { * @param \ameTweakManager $manager */ public function registerTweaks($manager) { - $section = $manager->addSection(self::TWEAK_SECTION_ID, 'Hide Other Users\' Posts', 100); + $section = $manager->addSection(self::TWEAK_SECTION_ID, 'Hide Other Users\' Posts', 60); $notes = [ 'Applies to post listings in the admin dashboard, like "Posts -> All Posts".', @@ -181,36 +182,53 @@ private function isSupportedAdminPage() { /** * @param \WP_Query $query - * @return bool + * @return string[] */ - private function isRelevantQuery($query) { + private function getRelevantPostTypes($query) { if ( //Sanity check: Is it even a real query? !($query instanceof WP_Query) //We only care about queries made on admin pages. || !$query->is_admin ) { - return false; + return []; } - //Is the restriction enabled for this post type? - $postType = $query->get('post_type'); - if ( empty($postType) || empty($this->postFilterEnabledForPostType[$postType]) ) { - return false; + //The post type can be a string or an array of strings. + $postTypeQueryVar = $query->get('post_type'); + if ( empty($postTypeQueryVar) ) { + return []; + } + $postTypes = is_array($postTypeQueryVar) ? $postTypeQueryVar : [$postTypeQueryVar]; + + //Is the restriction enabled for all of these post types? + //(Usually, there will be only one, but let's support multiple just in case.) + foreach ($postTypes as $postType) { + if ( + empty($postType) || !is_scalar($postType) //Sanity check. + || empty($this->postFilterEnabledForPostType[$postType]) + ) { + return []; + } } //Special case: Retrieving media in grid mode. WordPress uses AJAX to load the media. if ( - ($postType === 'attachment') + ($postTypeQueryVar === 'attachment') && wp_doing_ajax() + //phpcs:disable WordPress.Security.NonceVerification.Recommended -- Not taking actions, just filtering. && isset($_REQUEST['action']) && ($_REQUEST['action'] === 'query-attachments') + //phpcs:enable WordPress.Security.NonceVerification.Recommended ) { - return true; + return $postTypes; } //Normal case: An admin page with a list of posts. - return $query->is_main_query() && $this->isSupportedAdminPage(); + if ( $query->is_main_query() && $this->isSupportedAdminPage() ) { + return $postTypes; + } + return []; } public function addSectionToHideableSections($sections) { diff --git a/extras/modules/menu-styler/menu-styler-features.js b/extras/modules/menu-styler/menu-styler-features.js index 5e7fc72..1b45788 100644 --- a/extras/modules/menu-styler/menu-styler-features.js +++ b/extras/modules/menu-styler/menu-styler-features.js @@ -155,6 +155,12 @@ export var AmeMenuStylerJsFeatures; const linkUrl = (typeof config.linkUrl === 'string') ? config.linkUrl.trim() : ''; if (linkUrl) { $link.show().attr('href', linkUrl); + if (config.openInNewTab) { + $link.attr('target', '_blank'); + } + else { + $link.removeAttr('target'); + } } else { $link.hide().removeAttr('href'); diff --git a/extras/modules/menu-styler/menu-styler-features.js.map b/extras/modules/menu-styler/menu-styler-features.js.map index 3a3dc41..bda091d 100644 --- a/extras/modules/menu-styler/menu-styler-features.js.map +++ b/extras/modules/menu-styler/menu-styler-features.js.map @@ -1 +1 @@ -{"version":3,"file":"menu-styler-features.js","sourceRoot":"","sources":["menu-styler-features.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"menu-styler-features.js","sourceRoot":"","sources":["menu-styler-features.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/extras/modules/menu-styler/menu-styler-features.ts b/extras/modules/menu-styler/menu-styler-features.ts index e4c9734..609370c 100644 --- a/extras/modules/menu-styler/menu-styler-features.ts +++ b/extras/modules/menu-styler/menu-styler-features.ts @@ -126,6 +126,7 @@ export namespace AmeMenuStylerJsFeatures { baseImage: ImageSettingValue | null; collapsedImage: ImageSettingValue | null; linkUrl: string | null; + openInNewTab: boolean; backgroundColor: string | null; baseHeight: number | null; collapsedHeight: number | null; @@ -230,6 +231,12 @@ export namespace AmeMenuStylerJsFeatures { const linkUrl = (typeof config.linkUrl === 'string') ? config.linkUrl.trim() : ''; if (linkUrl) { $link.show().attr('href', linkUrl); + + if (config.openInNewTab) { + $link.attr('target', '_blank'); + } else { + $link.removeAttr('target'); + } } else { $link.hide().removeAttr('href'); } diff --git a/extras/modules/menu-styler/menu-styler.php b/extras/modules/menu-styler/menu-styler.php index 873e4d1..e62ce9b 100644 --- a/extras/modules/menu-styler/menu-styler.php +++ b/extras/modules/menu-styler/menu-styler.php @@ -7,7 +7,7 @@ use YahnisElsts\AdminMenuEditor\Customizable\Rendering\TabbedPanelRenderer; use YahnisElsts\AdminMenuEditor\Customizable\Settings\AbstractSetting; use YahnisElsts\AdminMenuEditor\Customizable\Storage\AbstractSettingsDictionary; -use YahnisElsts\AdminMenuEditor\Customizable\Storage\LazyArrayStorage; +use YahnisElsts\AdminMenuEditor\Customizable\Storage\MenuConfigurationWrapper; use YahnisElsts\AdminMenuEditor\Customizable\Storage\StorageInterface; use YahnisElsts\AdminMenuEditor\DynamicStylesheets\MenuScopedStylesheetHelper; use YahnisElsts\AdminMenuEditor\StyleGenerator\CssRuleSet; @@ -74,7 +74,8 @@ protected function getSettings($menuConfigId = null) { } $this->settings = new StyleSettings( - new MenuStylerStorage($this->menuEditor, $menuConfigId) + MenuConfigurationWrapper::getStore($menuConfigId, $this->menuEditor) + ->buildSlot(StyleSettings::CONFIG_KEY) ); return $this->settings; } @@ -117,6 +118,7 @@ protected function getInterfaceStructure() { $b->auto('logo.collapsedHeight')->params(['step' => 1]), $b->auto('logo.backgroundColor'), $b->auto('logo.linkUrl'), + $b->auto('logo.openInNewTab')->asGroup('New tab'), $b->auto('logo.spacing') ), $b->section( @@ -248,6 +250,7 @@ private function getStyleGenerator(StyleSettings $s, $onlyAdminThemeStyles = fal ['#adminmenu .wp-submenu'], ['left' => $s->getSetting('menuBar.menuWidth')] ); + //Collapsed menu width. $g->addRuleSet( [ '.folded #adminmenuback', @@ -257,6 +260,47 @@ private function getStyleGenerator(StyleSettings $s, $onlyAdminThemeStyles = fal ], [$s->getSetting('menuBar.collapsedMenuWidth')] ); + $g->addRuleSet( + ['.folded #wpcontent', '.folded #wpfooter'], + ['margin-left' => $s->getSetting('menuBar.collapsedMenuWidth')] + ); + $g->addRuleSet( + [ + '.folded #adminmenu .opensub .wp-submenu', + '.folded #adminmenu a.menu-top:focus + .wp-submenu', + ], + ['left' => $s->getSetting('menuBar.collapsedMenuWidth')] + ); + //The menu will auto-collapse at or below 960px. + $g->addMediaQuery( + $g->ifTruthy($s->getSetting('menuBar.collapsedMenuWidth')), + 'screen and (max-width: 960px) and (min-width: 783px)', + new CssRuleSet( + [ + '.auto-fold #adminmenuback', + '.auto-fold #adminmenuwrap', + '.auto-fold #adminmenu', + '.auto-fold #adminmenu li.menu-top', + ], + [$s->getSetting('menuBar.collapsedMenuWidth')] + ) + ); + $g->addMediaQuery( + $g->ifTruthy($s->getSetting('menuBar.collapsedMenuWidth')), + 'screen and (max-width: 960px) and (min-width: 783px)', + new CssRuleSet( + ['.auto-fold #wpcontent', '.auto-fold #wpfooter'], + ['margin-left' => $s->getSetting('menuBar.collapsedMenuWidth')] + ), + new CssRuleSet( + [ + '.auto-fold #adminmenu .opensub .wp-submenu', + '.auto-fold #adminmenu a.menu-top:focus + .wp-submenu', + ], + ['left' => $s->getSetting('menuBar.collapsedMenuWidth')] + ) + ); + //Submenu width. $g->addRuleSet( [ '#adminmenu .wp-not-current-submenu .wp-submenu', @@ -275,7 +319,8 @@ private function getStyleGenerator(StyleSettings $s, $onlyAdminThemeStyles = fal ] ); - //Push the new theme widget editor to the right to make room for the menu. + //Offset the Gutenberg editor and the new theme widget editor from the left to make room + //for the admin menu. By default, WP hard-codes the left position as 160px. $g->addMediaQuery( $g->ifSome([ $s->getSetting('menuBar.collapsedMenuWidth'), @@ -283,11 +328,26 @@ private function getStyleGenerator(StyleSettings $s, $onlyAdminThemeStyles = fal ]), 'screen and (min-width: 783px)', new CssRuleSet( - ['body:not(.folded) #widgets-editor .interface-interface-skeleton'], + [ + 'body:not(.folded) .block-editor__container .interface-interface-skeleton', + 'body:not(.folded) #widgets-editor .interface-interface-skeleton', + ], ['left' => $s->getSetting('menuBar.menuWidth')] ), new CssRuleSet( - ['body.folded #widgets-editor .interface-interface-skeleton'], + [ + 'body.folded .block-editor__container .interface-interface-skeleton', + 'body.folded #widgets-editor .interface-interface-skeleton', + ], + ['left' => $s->getSetting('menuBar.collapsedMenuWidth')] + ), + //Offset the fixed-positioned top toolbar. + new CssRuleSet( + ['body:not(.folded) .edit-post-visual-editor .block-editor-block-contextual-toolbar.is-fixed'], + ['left' => $s->getSetting('menuBar.menuWidth')] + ), + new CssRuleSet( + ['body.folded .edit-post-visual-editor .block-editor-block-contextual-toolbar.is-fixed'], ['left' => $s->getSetting('menuBar.collapsedMenuWidth')] ) ); @@ -299,10 +359,42 @@ private function getStyleGenerator(StyleSettings $s, $onlyAdminThemeStyles = fal ]), 'screen and (max-width: 960px) and (min-width: 783px)', new CssRuleSet( - ['body.auto-fold #widgets-editor .interface-interface-skeleton'], + [ + 'body.auto-fold .block-editor__container .interface-interface-skeleton', + 'body.auto-fold #widgets-editor .interface-interface-skeleton', + ], ['left' => 'var(--ame-ms-collapsed-menu-width, 36px)'] ) ); + + //Adjust the width of the WooCommerce header. + $g->addMediaQuery( + $g->ifSome([ + $s->getSetting('menuBar.collapsedMenuWidth'), + $s->getSetting('menuBar.menuWidth'), + ]), + 'screen and (min-width: 783px)', + new CssRuleSet( + ['body:not(.folded) .woocommerce-layout .woocommerce-layout__header'], + ['width' => 'calc(100% - var(--ame-ms-menu-width, 160px))'] + ), + new CssRuleSet( + ['body.folded .woocommerce-layout .woocommerce-layout__header'], + ['width' => 'calc(100% - var(--ame-ms-collapsed-menu-width, 36px))'] + ) + ); + + $g->addMediaQuery( + $g->ifSome([ + $s->getSetting('menuBar.collapsedMenuWidth'), + $s->getSetting('menuBar.menuWidth'), + ]), + 'screen and (max-width: 960px) and (min-width: 783px)', + new CssRuleSet( + ['body.auto-fold .woocommerce-layout .woocommerce-layout__header'], + ['width' => 'calc(100% - var(--ame-ms-collapsed-menu-width, 36px))'] + ) + ); //endregion //region Menu bar: Full height @@ -624,6 +716,7 @@ public function enqueueFeatureScript($isRequired = false) { 'logo.baseImage' => 'baseImage', 'logo.collapsedImage' => 'collapsedImage', 'logo.linkUrl' => 'linkUrl', + 'logo.openInNewTab' => 'openInNewTab', 'logo.backgroundColor' => 'backgroundColor', 'logo.baseHeight' => 'baseHeight', 'logo.collapsedHeight' => 'collapsedHeight', @@ -879,6 +972,7 @@ function (SettingFactory $cf) { ), $cf->cssColor('backgroundColor', 'background-color', 'Background color'), $cf->url('linkUrl', 'Logo link URL'), + $cf->boolean('openInNewTab', 'Open the logo link in a new tab', ['default' => false]), $cf->cssSpacing('spacing', 'Logo Spacing'), ]; } @@ -901,55 +995,3 @@ function (SettingFactory $cf) { ]; } } - -class MenuStylerStorage extends LazyArrayStorage implements StorageInterface { - - private $menuEditor; - private $configId; - - public function __construct(\WPMenuEditor $menuEditor, $menuConfigId = null) { - $this->menuEditor = $menuEditor; - $this->configId = $menuConfigId; - parent::__construct(); - } - - private function getMenuConfigId() { - if ( $this->configId === null ) { - $this->configId = $this->menuEditor->get_loaded_menu_config_id(); - } - return $this->configId; - } - - protected function loadData() { - $configId = $this->getMenuConfigId(); - $customMenu = $this->menuEditor->load_custom_menu($configId); - if ( ($customMenu !== null) && !empty($customMenu[StyleSettings::CONFIG_KEY]) ) { - return $customMenu[StyleSettings::CONFIG_KEY]; - } - return []; - } - - protected function storeData($newData) { - $configId = $this->getMenuConfigId(); - - $customMenu = $this->menuEditor->load_custom_menu($configId); - if ( $customMenu === null ) { - //Design problem: Can't save menu styles without a custom menu. - //Note that this will throw an exception if the menu has not been initialized yet. - //For example, it might not work in an AJAX request. - $customMenu = $this->menuEditor->get_active_admin_menu(); - $configId = null; - } - $customMenu[StyleSettings::CONFIG_KEY] = $newData; - $this->menuEditor->set_custom_menu($customMenu, $configId); - } - - protected function deleteStoredData() { - $customMenu = $this->menuEditor->load_custom_menu($this->getMenuConfigId()); - if ( ($customMenu === null) || (empty($customMenu[StyleSettings::CONFIG_KEY])) ) { - return; - } - unset($customMenu[StyleSettings::CONFIG_KEY]); - $this->menuEditor->set_custom_menu($customMenu, $this->getMenuConfigId()); - } -} \ No newline at end of file diff --git a/extras/modules/metaboxes/metabox-editor.css b/extras/modules/metaboxes/metabox-editor.css index 529050e..78fa408 100644 --- a/extras/modules/metaboxes/metabox-editor.css +++ b/extras/modules/metaboxes/metabox-editor.css @@ -15,6 +15,7 @@ #ws_actor_selector_container { margin-right: 130px; + margin-bottom: 2px; } #ame-mb-screen-list { diff --git a/extras/modules/metaboxes/metabox-editor.css.map b/extras/modules/metaboxes/metabox-editor.css.map index dd1efe0..bda0431 100644 --- a/extras/modules/metaboxes/metabox-editor.css.map +++ b/extras/modules/metaboxes/metabox-editor.css.map @@ -1 +1 @@ -{"version":3,"sourceRoot":"","sources":["metabox-editor.scss"],"names":[],"mappings":"AAGC;EACC;EAEA;EACA;;AAGD;EACC;;AAEA;EACC;;AAIF;EACC;;;AAKF;EACC;;;AAYD;EACC;EATA;EAEA;EACA;EAEA;EAQA;;AAEA;EACC;;AAEA;EACC;;AAGD;EACC;;;AAKH;EACC;EACA;;;AAGD;EAjCC;EAEA;EACA;EAEA;EA+BA;EAEA;EACA;EACA;;AAEA;EACC;;AAGD;EACC;;;AAIF;AAEC;EACC;EACA;;AAGD;EACC","file":"metabox-editor.css"} \ No newline at end of file +{"version":3,"sourceRoot":"","sources":["metabox-editor.scss","../../../css/_ui-constants.scss"],"names":[],"mappings":"AAIC;EACC;EAEA;EACA;;AAGD;EACC;;AAEA;EACC;;AAIF;EACC;;;AAKF;EACC;EACA,eC3B2B;;;ADuC5B;EACC;EATA;EAEA;EACA;EAEA;EAQA;;AAEA;EACC;;AAEA;EACC;;AAGD;EACC;;;AAKH;EACC;EACA;;;AAGD;EAjCC;EAEA;EACA;EAEA;EA+BA;EAEA;EACA;EACA;;AAEA;EACC;;AAGD;EACC;;;AAIF;AAEC;EACC;EACA;;AAGD;EACC","file":"metabox-editor.css"} \ No newline at end of file diff --git a/extras/modules/metaboxes/metabox-editor.scss b/extras/modules/metaboxes/metabox-editor.scss index a17c5ff..d79424a 100644 --- a/extras/modules/metaboxes/metabox-editor.scss +++ b/extras/modules/metaboxes/metabox-editor.scss @@ -1,4 +1,5 @@ @import "../../../css/boxes"; +@import "../../../css/ui-constants"; #ame-meta-box-editor { .ame-mb-check-column { @@ -24,6 +25,7 @@ #ws_actor_selector_container { margin-right: 130px; + margin-bottom: $smallActorSelectorToUiGap; } @mixin wp-generic-box { diff --git a/extras/modules/nav-menu-visibility/custom-block-attributes.js b/extras/modules/nav-menu-visibility/custom-block-attributes.js new file mode 100644 index 0000000..381f216 --- /dev/null +++ b/extras/modules/nav-menu-visibility/custom-block-attributes.js @@ -0,0 +1,49 @@ +"use strict"; +(function (globalContext) { + //Fetch the global wp object. + if ((typeof globalContext.wp !== 'object') || (globalContext.wp === null)) { + return; + } + const wp = globalContext.wp; + if (typeof wp.hooks !== 'object') { + return; //Missing hooks API. Should never happen in practice. + } + /** + * Loosely verify that the input is an object and ensure it has the "attributes" property. + * + * @param settings + */ + function parseBlockTypeSettings(settings) { + if ((typeof settings !== 'object') || (settings === null)) { + return null; + } + const settingsAsRecord = settings; + if (typeof settingsAsRecord.attributes === 'undefined') { + settingsAsRecord.attributes = {}; + return settingsAsRecord; + } + else { + if ((typeof settingsAsRecord.attributes === 'object') && (settingsAsRecord.attributes !== null)) { + return settingsAsRecord; + } + } + //Unsupported settings object. + return null; + } + //Add our custom attribute to block types. There's no UI for it in the block editor, + //we just want to ensure it gets saved and loaded properly. + wp.hooks.addFilter('blocks.registerBlockType', 'admin-menu-editor/nav-menu-visibility', function (settings) { + const parsedSettings = parseBlockTypeSettings(settings); + if (parsedSettings === null) { + return settings; + } + parsedSettings.attributes = Object.assign(parsedSettings.attributes, { + ameNavMenuVisibility: { + type: 'string', + default: '', + } + }); + return parsedSettings; + }); +})(window); +//# sourceMappingURL=custom-block-attributes.js.map \ No newline at end of file diff --git a/extras/modules/nav-menu-visibility/custom-block-attributes.js.map b/extras/modules/nav-menu-visibility/custom-block-attributes.js.map new file mode 100644 index 0000000..4e983f3 --- /dev/null +++ b/extras/modules/nav-menu-visibility/custom-block-attributes.js.map @@ -0,0 +1 @@ +{"version":3,"file":"custom-block-attributes.js","sourceRoot":"","sources":["custom-block-attributes.ts"],"names":[],"mappings":";AAAA,CAAC,UAAU,aAAsC;IAChD,6BAA6B;IAC7B,IAAI,CAAC,OAAO,aAAa,CAAC,EAAE,KAAK,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE;QAC1E,OAAO;KACP;IACD,MAAM,EAAE,GAAG,aAAa,CAAC,EAAwB,CAAC;IAElD,IAAI,OAAO,EAAE,CAAC,KAAK,KAAK,QAAQ,EAAE;QACjC,OAAO,CAAC,qDAAqD;KAC7D;IAOD;;;;OAIG;IACH,SAAS,sBAAsB,CAAC,QAAiB;QAChD,IAAI,CAAC,OAAO,QAAQ,KAAK,QAAQ,CAAC,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,EAAE;YAC1D,OAAO,IAAI,CAAC;SACZ;QAED,MAAM,gBAAgB,GAAG,QAAmC,CAAC;QAC7D,IAAI,OAAO,gBAAgB,CAAC,UAAU,KAAK,WAAW,EAAE;YACvD,gBAAgB,CAAC,UAAU,GAAG,EAAE,CAAC;YACjC,OAAO,gBAA0C,CAAC;SAClD;aAAM;YACN,IAAI,CAAC,OAAO,gBAAgB,CAAC,UAAU,KAAK,QAAQ,CAAC,IAAI,CAAC,gBAAgB,CAAC,UAAU,KAAK,IAAI,CAAC,EAAE;gBAChG,OAAO,gBAA0C,CAAC;aAClD;SACD;QAED,8BAA8B;QAC9B,OAAO,IAAI,CAAC;IACb,CAAC;IAED,oFAAoF;IACpF,2DAA2D;IAC3D,EAAE,CAAC,KAAK,CAAC,SAAS,CACjB,0BAA0B,EAC1B,uCAAuC,EACvC,UAAU,QAAiB;QAC1B,MAAM,cAAc,GAAG,sBAAsB,CAAC,QAAQ,CAAC,CAAC;QACxD,IAAI,cAAc,KAAK,IAAI,EAAE;YAC5B,OAAO,QAAQ,CAAC;SAChB;QAED,cAAc,CAAC,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,UAAU,EAAE;YACpE,oBAAoB,EAAE;gBACrB,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,EAAE;aACX;SACD,CAAC,CAAC;QACH,OAAO,cAAc,CAAC;IACvB,CAAC,CACD,CAAC;AAEH,CAAC,CAAC,CAAC,MAAgE,CAAC,CAAC"} \ No newline at end of file diff --git a/extras/modules/nav-menu-visibility/custom-block-attributes.ts b/extras/modules/nav-menu-visibility/custom-block-attributes.ts new file mode 100644 index 0000000..fa7d569 --- /dev/null +++ b/extras/modules/nav-menu-visibility/custom-block-attributes.ts @@ -0,0 +1,62 @@ +(function (globalContext: Record) { + //Fetch the global wp object. + if ((typeof globalContext.wp !== 'object') || (globalContext.wp === null)) { + return; + } + const wp = globalContext.wp as AmePartialWpGlobal; + + if (typeof wp.hooks !== 'object') { + return; //Missing hooks API. Should never happen in practice. + } + + type SettingsWithAttributes = { + attributes: Record; + [key: string]: unknown; + }; + + /** + * Loosely verify that the input is an object and ensure it has the "attributes" property. + * + * @param settings + */ + function parseBlockTypeSettings(settings: unknown): SettingsWithAttributes | null { + if ((typeof settings !== 'object') || (settings === null)) { + return null; + } + + const settingsAsRecord = settings as Record; + if (typeof settingsAsRecord.attributes === 'undefined') { + settingsAsRecord.attributes = {}; + return settingsAsRecord as SettingsWithAttributes; + } else { + if ((typeof settingsAsRecord.attributes === 'object') && (settingsAsRecord.attributes !== null)) { + return settingsAsRecord as SettingsWithAttributes; + } + } + + //Unsupported settings object. + return null; + } + + //Add our custom attribute to block types. There's no UI for it in the block editor, + //we just want to ensure it gets saved and loaded properly. + wp.hooks.addFilter( + 'blocks.registerBlockType', + 'admin-menu-editor/nav-menu-visibility', + function (settings: unknown) { + const parsedSettings = parseBlockTypeSettings(settings); + if (parsedSettings === null) { + return settings; + } + + parsedSettings.attributes = Object.assign(parsedSettings.attributes, { + ameNavMenuVisibility: { + type: 'string', + default: '', + } + }); + return parsedSettings; + } + ); + +})(window as (Window & typeof globalThis & Record)); \ No newline at end of file diff --git a/extras/modules/nav-menu-visibility/nav-menu-visibility-template.php b/extras/modules/nav-menu-visibility/nav-menu-visibility-template.php new file mode 100644 index 0000000..a24f825 --- /dev/null +++ b/extras/modules/nav-menu-visibility/nav-menu-visibility-template.php @@ -0,0 +1,68 @@ + + +
    + + + + +installAdapterHooks(); + + //todo: "Easy Hide" integration. + } + + public function installAdapterHooks() { + foreach ($this->getAllNavMenuAdapters() as $adapter) { + $adapter->installHooks(); + } + } + + public function displaySettingsPage() { + if ( !current_user_can(self::REQUIRED_CAPABILITY) ) { + wp_die('Error: You do not have permission to edit navigation menus.'); + } + parent::displaySettingsPage(); + } + + + public function enqueueTabScripts() { + parent::enqueueTabScripts(); + + $scriptHandle = 'ame-nv-settings'; + wp_enqueue_auto_versioned_script( + $scriptHandle, + plugins_url('nav-settings.js', __FILE__), + ['jquery', 'ame-knockout', 'ame-actor-manager', 'ame-actor-selector'] + ); + + //Tell the script to re-select the previously selected actor. + $previouslySelectedActor = \ameUtils::get($this->menuEditor->get_query_params(), 'selectedActor', null); + if ( !is_string($previouslySelectedActor) && ($previouslySelectedActor !== null) ) { + $previouslySelectedActor = null; + } + + //Does the current theme use full site editing? + $isFseTheme = function_exists('wp_is_block_theme') && wp_is_block_theme(); + if ( $isFseTheme ) { + $activeAdapter = $this->getNavMenuAdapterFor('block'); + } else { + $activeAdapter = $this->getNavMenuAdapterFor('classic'); + } + + $scriptData = [ + 'navigationMenus' => $activeAdapter->getNavigationMenus(), + 'saveNonce' => wp_create_nonce(self::SAVE_SETTINGS_ACTION), + 'selectedActor' => $previouslySelectedActor, + ]; + wp_add_inline_script( + $scriptHandle, + 'var wsAmeNavMenuVisibilityData = ' . wp_json_encode($scriptData) . ';', 'before' + ); + } + + public function enqueueTabStyles() { + parent::enqueueTabStyles(); + + wp_enqueue_auto_versioned_style( + 'ame-nv-settings', + plugins_url('nav-settings.css', __FILE__) + ); + } + + public function handleSettingsForm($post = []) { + if ( !current_user_can(self::REQUIRED_CAPABILITY) ) { + wp_die('Error: You do not have permission to edit navigation menus.'); + } + + parent::handleSettingsForm($post); + + $submittedSettings = json_decode($post['settings'], true); + if ( !is_array($submittedSettings) || !is_array($submittedSettings['menus']) ) { + wp_die('Error: Invalid settings data. The "menus" field is missing or not an array.'); + } + + $updatedMenus = 0; + foreach ($submittedSettings['menus'] as $menu) { + $menuType = (string)\ameUtils::get($menu, 'type', ''); + $adapter = $this->getNavMenuAdapterFor($menuType); + if ( !$adapter ) { + wp_die('Error: Unsupported navigation menu type "' . esc_html($menuType) . '".'); + } + + $menuId = (int)\ameUtils::get($menu, 'id', 0); + if ( $menuId <= 0 ) { + wp_die('Error: Invalid menu ID.'); + } + + $items = array_map( + function ($item) { + return StorableNavigationItemData::fromJs($item); + }, + \ameUtils::get($menu, 'items', []) + ); + + try { + $adapter->updateNavigationMenuVisibility($menuId, $items); + } catch (\RuntimeException $e) { + wp_die(esc_html($e->getMessage())); + } + + $updatedMenus++; + } + + //Redirect back to the settings page. + $redirectParams = ['updated' => 1, 'updatedMenus' => $updatedMenus]; + + //Re-select the previously selected actor, if any. + $actorId = (string)\ameUtils::get($post, 'selectedActor', ''); + if ( !empty($actorId) ) { + $redirectParams['selectedActor'] = $actorId; + } + + wp_safe_redirect(add_query_arg($redirectParams, $this->getTabUrl())); + exit; + } + + private function getAllNavMenuAdapters() { + if ( !empty($this->adapters) ) { + return $this->adapters; + } + + $cleanupEnabled = (bool)$this->menuEditor->get_plugin_option('delete_orphan_actor_settings'); + + $adapters = [ + new ClassicNavigationMenuAdapter([$this, 'currentUserCanSeeItem'], $cleanupEnabled), + new BlockMenuAdapter([$this, 'currentUserCanSeeItem'], $cleanupEnabled), + ]; + foreach ($adapters as $adapter) { + $this->adapters[$adapter->getMenuType()] = $adapter; + } + + return $this->adapters; + } + + /** + * @param string $type + * @return MenuAdapter|null + */ + private function getNavMenuAdapterFor($type) { + $adapters = $this->getAllNavMenuAdapters(); + if ( isset($adapters[$type]) ) { + return $adapters[$type]; + } + return null; + } + + public function currentUserCanSeeItem(VisibilitySettings $visibilitySettings) { + static $visibilityChecker = null; + + if ( is_user_logged_in() ) { + if ( !$visibilitySettings->loggedInUsersEnabled() ) { + return false; + } + + if ( $visibilityChecker === null ) { + $visibilityChecker = \ameAccessEvaluatorBuilder::create($this->menuEditor) + ->roleDefault(true) //All roles can see all nav items by default. + ->superAdminDefault(null) //No special treatment for super admins. + ->defaultResult(true) //If no other rules apply, the item is visible. + ->buildForUser(wp_get_current_user()); + } + + return $visibilityChecker->userHasAccess($visibilitySettings->getGrantAccess()); + } else { + return $visibilitySettings->anonymousUsersEnabled(); + } + } +} + +class VisibilitySettings implements \JsonSerializable { + private $grantAccess; + private $loggedInUsers; + private $anonymousUsers; + + public function __construct($grantAccess = [], $loggedInUsers = true, $anonymousUsers = true) { + $this->grantAccess = $grantAccess; + $this->loggedInUsers = $loggedInUsers; + $this->anonymousUsers = $anonymousUsers; + } + + /** + * @param array $data + * @return self + */ + public static function fromArray($data) { + //The IDE thinks these ternaries are suboptimal, but it's more readable this way. + /** @noinspection PhpTernaryExpressionCanBeReplacedWithConditionInspection */ + return new self( + isset($data['grantAccess']) ? (array)$data['grantAccess'] : [], + isset($data['loggedInUsers']) ? (bool)($data['loggedInUsers']) : true, + isset($data['anonymousUsers']) ? (bool)($data['anonymousUsers']) : true + ); + } + + /** + * @return array|mixed + */ + public function getGrantAccess() { + return $this->grantAccess; + } + + /** + * @return mixed|true + */ + public function loggedInUsersEnabled() { + return $this->loggedInUsers; + } + + /** + * @return mixed|true + */ + public function anonymousUsersEnabled() { + return $this->anonymousUsers; + } + + /** + * Check if all settings are at their default values. + * + * @return bool + */ + public function isDefault() { + return empty($this->grantAccess) && $this->loggedInUsers && $this->anonymousUsers; + } + + /** + * Remove any actor settings that are the same as the defaults. + * + * Optionally, you can pass in a $cleaner object to also remove references to missing + * or invalid actors, such as deleted users. + * + * @param \ameActorAccessCleaner $cleaner + * @return void + */ + public function prune($cleaner = null) { + foreach (array_keys($this->grantAccess) as $actorId) { + $value = $this->grantAccess[$actorId]; + + //All roles can see all nav items by default, so we don't need to store "true" + //values for roles. + if ( $value && \ameUtils::stringStartsWith($actorId, 'role:') ) { + unset($this->grantAccess[$actorId]); + } + } + + if ( $cleaner ) { + $this->grantAccess = $cleaner->cleanUpDictionary($this->grantAccess); + } + } + + /** @noinspection PhpLanguageLevelInspection */ + #[\ReturnTypeWillChange] + public function jsonSerialize() { + $data = new \stdClass(); + + if ( !empty($this->grantAccess) ) { + $data->grantAccess = (object)$this->grantAccess; + } + + //To save space, store the logged-in/out settings only if they're different from the defaults. + if ( !$this->loggedInUsers ) { + $data->loggedInUsers = false; + } + if ( !$this->anonymousUsers ) { + $data->anonymousUsers = false; + } + + return $data; + } +} + +/** + * Internal representation of a navigation menu. + */ +class NavigationMenu implements \JsonSerializable { + private $id; + private $label; + private $type; + private $items; + + /** + * @param int $id + * @param string $label + * @param string $type + * @param NavigationMenuItem[] $items + */ + public function __construct($id, $label, $type, $items) { + $this->id = $id; + $this->label = $label; + $this->type = $type; + $this->items = $items; + } + + /** @noinspection PhpLanguageLevelInspection */ + #[\ReturnTypeWillChange] + public function jsonSerialize() { + return [ + 'id' => $this->id, + 'label' => $this->label, + 'type' => $this->type, + 'items' => $this->items, + ]; + } +} + +/** + * Internal representation of a navigation menu item. + */ +class NavigationMenuItem implements \JsonSerializable { + private $label; + private $type; + private $settings; + private $children; + private $passThroughProps; + + /** + * @param string $label + * @param string $type + * @param VisibilitySettings $settings + * @param NavigationMenuItem[] $children + * @param array $passThroughProps + */ + public function __construct($label, $type, $settings, $children, $passThroughProps) { + $this->label = $label; + $this->type = $type; + $this->settings = $settings; + $this->children = $children; + $this->passThroughProps = $passThroughProps; + } + + /** + * @param NavigationMenuItem $child + */ + public function addChild($child) { + $this->children[] = $child; + } + + public function getProp($name, $default = null) { + return isset($this->passThroughProps[$name]) ? $this->passThroughProps[$name] : $default; + } + + /** @noinspection PhpLanguageLevelInspection */ + #[\ReturnTypeWillChange] + public function jsonSerialize() { + return [ + 'label' => $this->label, + 'type' => $this->type, + 'settings' => $this->settings, + 'children' => $this->children, + 'passThroughProps' => $this->passThroughProps, + ]; + } +} + +class StorableNavigationItemData { + private $settings; + private $passThroughProps; + + public function __construct($settings, $passThroughProps) { + $this->settings = $settings; + $this->passThroughProps = $passThroughProps; + } + + public static function fromJs($data) { + $data = (array)$data; + return new self( + VisibilitySettings::fromArray($data['settings']), + $data['passThroughProps'] + ); + } + + /** + * @return VisibilitySettings + */ + public function getSettings() { + return $this->settings; + } + + public function getProp($name, $default = null) { + return isset($this->passThroughProps[$name]) ? $this->passThroughProps[$name] : $default; + } +} + +abstract class MenuAdapter { + /** @var callable */ + protected $checkVisibilityCallback; + /** + * @var bool + */ + private $deleteOrphansOnSave; + + /** + * @var \ameActorAccessCleaner|null + */ + private $accessCleaner = null; + + public function __construct($checkVisibilityCallback, $deleteOrphansOnSave = false) { + $this->checkVisibilityCallback = $checkVisibilityCallback; + $this->deleteOrphansOnSave = $deleteOrphansOnSave; + } + + protected function isItemVisible(VisibilitySettings $visibilitySettings) { + return call_user_func($this->checkVisibilityCallback, $visibilitySettings); + } + + /** + * @return \ameActorAccessCleaner|null + */ + protected function getAccessCleaner() { + if ( !$this->deleteOrphansOnSave ) { + return null; + } + + if ( $this->accessCleaner === null ) { + $this->accessCleaner = new \ameActorAccessCleaner(); + } + return $this->accessCleaner; + } + + /** + * @return NavigationMenu[] + */ + abstract public function getNavigationMenus(); + + /** + * @param int $menuId + * @param StorableNavigationItemData[] $newItemData + */ + abstract public function updateNavigationMenuVisibility($menuId, $newItemData); + + /** + * @return string + */ + abstract public function getMenuType(); + + abstract public function installHooks(); +} + +class BlockMenuAdapter extends MenuAdapter { + const BLOCK_VISIBILITY_ATTRIBUTE = 'ameNavMenuVisibility'; + const IDENTIFYING_BLOCK_PROPERTIES = [ + 'blockName', + 'attrs.id', + 'attrs.type', + 'attrs.kind', + 'attrs.url', + ]; + + public function getNavigationMenus() { + $navs = get_posts([ + 'post_type' => 'wp_navigation', + 'post_status' => 'publish', + 'orderby' => 'date', + 'order' => 'DESC', + 'posts_per_page' => -1, + ]); + + $menus = []; + foreach ($navs as $navigationMenu) { + $blocks = parse_blocks($navigationMenu->post_content); + $items = self::navigationBlockListToItemList($blocks); + + if ( !empty($items) ) { + $menus[] = new NavigationMenu( + $navigationMenu->ID, + $navigationMenu->post_title, + $this->getMenuType(), + $items + ); + } + } + return $menus; + } + + public function updateNavigationMenuVisibility($menuId, $newItemData) { + //echo 'Attempting to update navigation menu visibility for block menu ', $menuId, '...
    '; + + //Fetch the post. + $navigationMenu = get_post($menuId); + if ( !$navigationMenu ) { + throw new \RuntimeException(sprintf('Error: Could not retrieve navigation menu %d', $menuId)); + } + //Is this actually a navigation menu? + if ( $navigationMenu->post_type !== 'wp_navigation' ) { + throw new \RuntimeException(sprintf('Error: Post %d is not a navigation menu.', $menuId)); + } + + //echo 'Original post content:
    ', esc_html($navigationMenu->post_content), '

    '; + + //Parse the blocks. + $blocks = parse_blocks($navigationMenu->post_content); + if ( empty($blocks) ) { + throw new \RuntimeException(sprintf('Error: Navigation menu %d has no blocks.', $menuId)); + } + + //Depending on plugin configuration, we might clean up orphaned settings before saving. + $cleaner = $this->getAccessCleaner(); + + foreach ($newItemData as $item) { + $path = $item->getProp('path'); + $block = self::getBlockByPath($blocks, $path); + if ( $block === null ) { + throw new \RuntimeException(sprintf('Error: Could not find block at path %s.', wp_json_encode($path))); + } + + $settings = $item->getSettings(); + $settings->prune($cleaner); + + if ( $settings->isDefault() ) { + //If using the default settings, we can remove the attribute entirely to save space. + unset($block['attrs'][self::BLOCK_VISIBILITY_ATTRIBUTE]); + } else { + //Otherwise, serialize the settings and store them in the attribute. + $block['attrs'][self::BLOCK_VISIBILITY_ATTRIBUTE] = wp_json_encode($settings); + } + + $success = self::replaceBlockByPath($blocks, $path, $block); + if ( !$success ) { + throw new \RuntimeException(sprintf('Error: Could not update block at path %s.', wp_json_encode($path))); + } + } + + //Save the updated blocks back to the post. + $navigationMenu->post_content = serialize_blocks($blocks); + //echo 'New post content:
    ', esc_html($navigationMenu->post_content), '

    '; + + wp_update_post($navigationMenu); + } + + private static function navigationBlockListToItemList($blocks, $parentPath = []) { + $results = []; + foreach ($blocks as $index => $block) { + //Skip empty "null" blocks. We don't filter them out beforehand because we need + //to keep the indexes in sync with the original block list. + if ( !isset($block['blockName']) ) { + continue; + } + + $results[] = self::parseNavigationMenuBlock($block, $index, $parentPath); + } + return $results; + } + + private static function parseNavigationMenuBlock($block, $index, $parentPath = []) { + $path = array_merge($parentPath, [$index]); + $blockName = $block['blockName']; + + if ( !empty($block['attrs']['label']) ) { + $label = $block['attrs']['label']; + } else if ( $blockName === 'core/social-link' ) { + $label = 'Social Link'; + $service = ucwords(\ameUtils::get($block, ['attrs', 'service'], '')); + if ( !empty($service) ) { + $label .= ' (' . $service . ')'; + } + } else { + $defaultLabels = [ + 'core/search' => 'Search', + 'core/site-title' => 'Site Title', + 'core/site-logo' => 'Site Logo', + 'core/home-link' => 'Home Link', + 'core/social-links' => 'Social Icons', + 'core/page-list' => 'Page List', + 'core/spacer' => '⸻ Spacer ⸻', + ]; + $label = isset($defaultLabels[$blockName]) ? $defaultLabels[$blockName] : $blockName; + } + + //The UI can safely display HTML, but it's probably usually unimportant formatting, + //like or . Where possible, let's strip tags to keep labels short. + $strippedLabel = trim(wp_strip_all_tags($label)); + if ( !empty($strippedLabel) ) { + $label = $strippedLabel; + } + + $type = isset($block['attrs']['type']) ? $block['attrs']['type'] : $blockName; + + if ( !empty($block['attrs'][self::BLOCK_VISIBILITY_ATTRIBUTE]) ) { + $data = $block['attrs'][self::BLOCK_VISIBILITY_ATTRIBUTE]; + if ( is_string($data) ) { + $settings = VisibilitySettings::fromArray(json_decode($data, true)); + } else { + $settings = VisibilitySettings::fromArray($data); + } + } else { + $settings = new VisibilitySettings(); + } + + $children = []; + if ( !empty($block['innerBlocks']) ) { + $children = self::navigationBlockListToItemList($block['innerBlocks'], $path); + } + + //Let's store some block properties so that we can verify that the path still + //points to the same block when it comes time to save the visibility settings. + $passThroughProps = []; + foreach (self::IDENTIFYING_BLOCK_PROPERTIES as $propertyPath) { + $value = \ameMultiDictionary::get($block, $propertyPath, null); + if ( $value !== null ) { + \ameMultiDictionary::set($passThroughProps, $propertyPath, $value); + } + } + $passThroughProps['path'] = $path; + + return new NavigationMenuItem( + $label, + $type, + $settings, + $children, + $passThroughProps + ); + } + + public function getMenuType() { + return 'block'; + } + + public function installHooks() { + add_filter('block_core_navigation_render_inner_blocks', [$this, 'filterNavigationMenuBlocks'], 199); + + //Register the custom attribute in the block editor. + add_action('enqueue_block_editor_assets', [$this, 'enqueueAttributeScript']); + + //Also register the custom attribute for the REST API. If we don't, it can cause REST API + //errors when rendering block previews. The API complains that "ameNavMenuVisibility is not + //a valid property of Object". + add_filter('register_block_type_args', [$this, 'addAttributeToBlockType']); + + //Remove the custom attribute just before rendering the block in case it interferes + //with any plugins or themes. + add_filter('render_block_data', [$this, 'removeAttributeBeforeRendering']); + } + + public function filterNavigationMenuBlocks($innerBlocks) { + if ( is_admin() ) { + return $innerBlocks; + } + + return $this->filterBlockCollection($innerBlocks); + } + + /** + * @param array|\WP_Block_List $blocks + * @return array|\WP_Block_List + */ + private function filterBlockCollection($blocks) { + if ( !is_array($blocks) && !($blocks instanceof \Traversable) ) { + return $blocks; + } + + $keysToRemove = []; + foreach ($blocks as $index => $block) { + //We expect the block to be a WP_Block instance. For forward-compatibility, + //we only check properties that we actually use, not the class name. + $isSupportedBlock = isset($block->parsed_block, $block->inner_blocks); + if ( !$isSupportedBlock ) { + continue; + } + + if ( $this->isBlockVisible($block) ) { + //Filter inner blocks, if any. + if ( !empty($block->inner_blocks) ) { + $block->inner_blocks = $this->filterBlockCollection($block->inner_blocks); + } + } else { + $keysToRemove[$index] = $index; + } + } + unset($index); + + if ( !empty($keysToRemove) ) { + /* + Removing the blocks would be complicated because: + 1. Some code in WordPress and other plugins expects sequential indexes. + For example, WP_Block::render() does `++$index` in a loop. + 2. Reindexing the array is hard because WP_Block_List doesn't allow direct + access to the "blocks" property. + 3. The "inner_content" property of a block must stay in sync with the + "inner_blocks" property, so that's another array to reindex. + 4. "inner_content" can have additional string values that don't correspond to + inner blocks, making index updates even more complicated. + + Instead, let's replace hidden blocks with empty placeholders. + */ + foreach ($keysToRemove as $index) { + $blocks[$index] = new \WP_Block([ + //Dummy block name that won't match any real block. + 'blockName' => 'admin-menu-editor/empty-placeholder', + 'attrs' => [], + 'innerBlocks' => [], + 'innerHTML' => '', + 'innerContent' => [], + ]); + } + } + + return $blocks; + } + + /** + * @param \WP_Block $block + * @return boolean + */ + private function isBlockVisible($block) { + $serializedSettings = \ameUtils::get($block->parsed_block, ['attrs', self::BLOCK_VISIBILITY_ATTRIBUTE], ''); + if ( empty($serializedSettings) || !is_string($serializedSettings) ) { + return true; + } + + $asArray = json_decode($serializedSettings, true); + if ( empty($asArray) || !is_array($asArray) ) { + return true; + } + + $settings = VisibilitySettings::fromArray($asArray); + return $this->isItemVisible($settings); + } + + + /** + * @param array $blocks + * @param array $path + * @return array|null + */ + private static function getBlockByPath($blocks, $path) { + if ( empty($path) ) { + return null; + } + + $result = null; + $currentList = $blocks; + foreach ($path as $index) { + if ( !isset($currentList[$index]) ) { + return null; + } + $result = $currentList[$index]; + $currentList = isset($result['innerBlocks']) ? $result['innerBlocks'] : []; + } + return $result; + } + + private static function replaceBlockByPath(&$blocks, $path, $newBlock) { + if ( empty($path) ) { + return false; + } + + $currentList = &$blocks; + $lastIndex = array_pop($path); + foreach ($path as $index) { + if ( !isset($currentList[$index]) ) { + return false; + } + $currentList = &$currentList[$index]['innerBlocks']; + } + + $currentList[$lastIndex] = $newBlock; + return true; + } + + public function enqueueAttributeScript() { + wp_enqueue_auto_versioned_script( + 'ame-nv-block-attributes', + plugins_url('custom-block-attributes.js', __FILE__), + ['wp-blocks', 'wp-dom-ready'] + ); + } + + public function addAttributeToBlockType($args) { + if ( !isset($args['attributes']) ) { + $args['attributes'] = []; + } + + $args['attributes'][self::BLOCK_VISIBILITY_ATTRIBUTE] = [ + 'type' => 'string', + 'default' => '', + ]; + + return $args; + } + + public function removeAttributeBeforeRendering($blockData) { + if ( isset($blockData['attrs'][BlockMenuAdapter::BLOCK_VISIBILITY_ATTRIBUTE]) ) { + unset($blockData['attrs'][BlockMenuAdapter::BLOCK_VISIBILITY_ATTRIBUTE]); + } + return $blockData; + } +} + +class ClassicNavigationMenuAdapter extends MenuAdapter { + const SETTINGS_META_KEY = '_ame_nav_menu_visibility'; + + public function getNavigationMenus() { + $classicNavMenus = wp_get_nav_menus([ + 'hide_empty' => true, + ]); + + $results = []; + foreach ($classicNavMenus as $classicNavMenu) { + $navMenu = wp_get_nav_menu_object($classicNavMenu->term_id); + $navMenuItems = wp_get_nav_menu_items($navMenu->term_id); + if ( empty($navMenuItems) ) { + continue; + } + + //Generate wrappers. + $itemById = []; + /** @var NavigationMenuItem[] $itemById */ + foreach ($navMenuItems as $navMenuItem) { + $type = 'nav-menu-item'; + if ( !empty($navMenuItem->type) ) { + $type = $navMenuItem->type; + } else if ( !empty($navMenuItem->object) ) { + $type = $navMenuItem->object; + } + + $settings = $this->loadItemSettings($navMenuItem->ID); + if ( $settings === null ) { + $settings = new VisibilitySettings(); + } + + $child = new NavigationMenuItem( + $navMenuItem->title, + $type, + $settings, + [], + [ + 'id' => $navMenuItem->ID, + 'parent' => isset($navMenuItem->menu_item_parent) ? $navMenuItem->menu_item_parent : 0, + ] + ); + $itemById[(string)$navMenuItem->ID] = $child; + } + + //Reconstruct the menu hierarchy. + $children = []; + foreach ($itemById as $item) { + $parentId = $item->getProp('parent', 0); + if ( isset($itemById[$parentId]) ) { + $itemById[$parentId]->addChild($item); + } else { + $children[] = $item; + } + } + + $results[] = new NavigationMenu( + $classicNavMenu->term_id, + $classicNavMenu->name, + $this->getMenuType(), + $children + ); + } + + return $results; + } + + public function updateNavigationMenuVisibility($menuId, $newItemData) { + $navMenuItems = wp_get_nav_menu_items($menuId); + if ( $navMenuItems === false ) { + throw new \RuntimeException(sprintf('Error: Could not retrieve navigation menu %d', $menuId)); + } + + //Index by ID. + $navMenuItemsById = []; + foreach ($navMenuItems as $navMenuItem) { + if ( isset($navMenuItem->ID) ) { + $navMenuItemsById[$navMenuItem->ID] = $navMenuItem; + } + } + + //Find the corresponding nav menu items and update their settings. + foreach ($newItemData as $itemData) { + $id = $itemData->getProp('id'); + if ( !isset($navMenuItemsById[$id]) ) { + continue; //Silently skip non-existent items. + } + + $navMenuItem = $navMenuItemsById[$id]; + $settings = $itemData->getSettings(); + $settings->prune($this->getAccessCleaner()); + + if ( $settings->isDefault() ) { + delete_post_meta($navMenuItem->ID, self::SETTINGS_META_KEY); + } else { + update_post_meta($navMenuItem->ID, self::SETTINGS_META_KEY, wp_json_encode($settings)); + } + } + } + + public function getMenuType() { + return 'classic'; + } + + public function installHooks() { + //While "wp_nav_menu_objects" would normally be the most appropriate filter to use, + //"wp_get_nav_menu_items" is more reliable because it should work even with themes + //that don't use wp_nav_menu() to render their menus. + add_filter('wp_get_nav_menu_items', [$this, 'filterNavigationMenuItems'], 199); + } + + public function filterNavigationMenuItems($items) { + //Don't change anything on normal admin pages. This is only for the front end. + if ( is_admin() ) { + return $items; + } + + //Filter out items that are not visible. + $filteredItems = array_filter($items, function ($item) { + $settings = $this->loadItemSettings($item->ID); + if ( $settings === null ) { + return true; + } + return $this->isItemVisible($settings); + }); + + //Just to be safe, let's only replace the original items if we actually removed some. + if ( count($filteredItems) < count($items) ) { + //Not sure if array indexes matter here; WordPress itself doesn't seem to care. + $items = array_values($filteredItems); + } + + return $items; + } + + /** + * Load visibility settings for a navigation menu item. + * + * Returns NULL if the item has no settings or the settings are invalid. + * + * @param int $menuItemId + * @return VisibilitySettings|null + */ + private function loadItemSettings($menuItemId) { + $serializedSettings = get_post_meta($menuItemId, self::SETTINGS_META_KEY, true); + if ( empty($serializedSettings) ) { + return null; + } + + $asArray = json_decode($serializedSettings, true); + if ( empty($asArray) || !is_array($asArray) ) { + return null; + } + + return VisibilitySettings::fromArray($asArray); + } +} \ No newline at end of file diff --git a/extras/modules/nav-menu-visibility/nav-settings.css b/extras/modules/nav-menu-visibility/nav-settings.css new file mode 100644 index 0000000..6d73320 --- /dev/null +++ b/extras/modules/nav-menu-visibility/nav-settings.css @@ -0,0 +1,146 @@ +#ame-nav-menu-visibility-editor { + margin-top: 8px; +} + +#ame-nv-navigation-menu-list { + font-size: 14px; + max-width: 630px; +} + +.ame-nv-navigation-menu { + position: relative; + box-shadow: 0 1px 1px rgba(0, 0, 0, 0.04); + background: #fff; + margin-bottom: 20px; + border: 1px solid #ccd0d4; +} +.ame-nv-navigation-menu .ws-ame-postbox-header { + position: relative; + font-size: 14px; + margin: 0; + line-height: 1.4; + border-bottom: 1px solid #ccd0d4; +} +.ame-nv-navigation-menu .ws-ame-postbox-header h3 { + padding: 10px 12px; + margin: 0; + font-size: 1em; + line-height: 1; + white-space: nowrap; + text-overflow: ellipsis; + overflow: hidden; +} +.ame-nv-navigation-menu .ws-ame-postbox-header .ws_tooltip_trigger .dashicons { + height: 14px; + line-height: 14px; +} +.ame-nv-navigation-menu .ws-ame-postbox-toggle { + color: #72777c; + background: transparent; + display: block; + font: normal 20px/1 dashicons; + text-align: center; + cursor: pointer; + border: none; + position: absolute; + top: 0; + right: 0; + bottom: 0; + height: 100%; + padding: 0; +} +.ame-nv-navigation-menu .ws-ame-postbox-toggle:hover { + color: #23282d; +} +.ame-nv-navigation-menu .ws-ame-postbox-toggle:active, .ame-nv-navigation-menu .ws-ame-postbox-toggle:focus { + outline: none; + padding: 0; +} +.ame-nv-navigation-menu .ws-ame-postbox-toggle:before { + content: "\f142"; + display: inline-block; + vertical-align: middle; +} +.ame-nv-navigation-menu .ws-ame-postbox-toggle:after { + display: inline-block; + content: ""; + vertical-align: middle; + height: 100%; +} +.ame-nv-navigation-menu .ws-ame-postbox-content { + border-top: none; + padding: 12px; +} +.ame-nv-navigation-menu.ws-ame-closed-postbox .ws-ame-postbox-content { + display: none; +} +.ame-nv-navigation-menu.ws-ame-closed-postbox .ws-ame-postbox-toggle:before { + content: "\f140"; +} +.ame-nv-navigation-menu.ws-ame-closed-postbox .ws-ame-postbox-header { + border-bottom: none; +} +.ame-nv-navigation-menu .ws-ame-postbox-content { + padding-top: 8px; + padding-left: 10px; +} + +.ame-nv-nav-item-title { + line-height: 1.6428571429; + text-wrap: nowrap; + overflow: hidden; + text-overflow: ellipsis; + padding-left: 2px; +} + +.ame-nv-nav-item-title-text { + text-wrap: nowrap; +} + +.ame-nv-nav-item-children { + padding-left: 1.7em; +} + +.ame-nv-hidden > .ame-nv-nav-item-title { + color: #646970; +} + +input[type=checkbox].ame-nv-locked-checkbox:before { + display: block; + font-family: "dashicons", sans-serif; + content: "\f160"; + color: #3c434a; + line-height: 1rem; + font-size: 1.125rem; +} +input[type=checkbox].ame-nv-locked-checkbox:disabled, input[type=checkbox].ame-nv-locked-checkbox:disabled:before { + opacity: 0.9; +} + +@media screen and (min-width: 783px) { + input[type=checkbox].ame-nv-locked-checkbox { + border-color: transparent; + box-shadow: none; + background: transparent; + } + input[type=checkbox].ame-nv-locked-checkbox:before { + line-height: 1rem; + font-size: 1.25rem; + height: 1.3125rem; + width: 1.3125rem; + margin-left: -0.1875rem; + margin-top: -0.125rem; + } +} +@media screen and (max-width: 782px) { + input[type=checkbox].ame-nv-locked-checkbox:before { + line-height: 1.875rem; + font-size: 1.375rem; + width: 1.875rem; + height: 1.875rem; + margin-left: -0.1875rem; + margin-top: inherit; + } +} + +/*# sourceMappingURL=nav-settings.css.map */ diff --git a/extras/modules/nav-menu-visibility/nav-settings.css.map b/extras/modules/nav-menu-visibility/nav-settings.css.map new file mode 100644 index 0000000..0280e6f --- /dev/null +++ b/extras/modules/nav-menu-visibility/nav-settings.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["nav-settings.scss","../../../css/_ui-constants.scss","../../../css/_boxes.scss"],"names":[],"mappings":"AAIA;EACC,YCJ2B;;;ADO5B;EACC;EACA;;;AAKD;EERC;EACA,YAPkB;EAQlB,YAJmB;EAMnB;EAEA;;AAEA;EAGC;EACA,WAHiB;EAIjB;EACA;EAEA;;AAEA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;;AAIA;EACC,QArBe;EAsBf,aAtBe;;AA2BlB;EACC;EACA;EAEA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EAEA;EACA;;AAEA;EACC;;AAGD;EACC;EACA;;AAGD;EACC;EACA;EACA;;AAGD;EACC;EACA;EACA;EACA;;AAIF;EACC;EAEA,SFvEmB;;AE2EnB;EACC;;AAGD;EACC;;AAGD;EACC;;AFhFF;EACC;EACA;;;AAIF;EACC;EAEA;EACA;EACA;EAIA,cAtBuB;;;AAyBxB;EACC;;;AAID;EACC;;;AAGD;EACC,OC3CqB;;;ADgDrB;EACC;EACA;EACA;EACA;EAEA;EACA;;AAGD;EACC;;;AAIF;EACC;IACC;IACA;IACA;;EAEA;IACC;IACA;IAEA;IACA;IAEA;IACA;;;AAOH;EAEE;IACC;IACA;IAEA;IACA;IAEA;IACA","file":"nav-settings.css"} \ No newline at end of file diff --git a/extras/modules/nav-menu-visibility/nav-settings.js b/extras/modules/nav-menu-visibility/nav-settings.js new file mode 100644 index 0000000..30cce34 --- /dev/null +++ b/extras/modules/nav-menu-visibility/nav-settings.js @@ -0,0 +1,148 @@ +"use strict"; +var AmeNavMenuVisibilityUi; +(function (AmeNavMenuVisibilityUi) { + const loggedInUserActor = new class extends AmeBaseActor { + constructor() { + super('special:logged_in_user', 'Logged In Users', {}); + } + hasOwnCap(capability) { + //The only capability that *all* roles and users have is the special "exist" capability. + return (capability === 'exist'); + } + }; + const anonymousUserActor = new class extends AmeBaseActor { + constructor() { + super('special:anonymous_user', 'Logged Out Users', {}); + } + hasOwnCap(capability) { + //The only capability that *all* roles and users have is the special "exist" capability. + return (capability === 'exist'); + } + }; + class NavigationItem { + constructor(data, selectedActor) { + var _a, _b; + this.label = data.label; + this.type = data.type; + this.enabledForActor = new AmeObservableActorFeatureMap(data.settings.grantAccess); + this.loggedInUsersEnabled = ko.observable((_a = data.settings.loggedInUsers) !== null && _a !== void 0 ? _a : true); + this.anonymousUsersEnabled = ko.observable((_b = data.settings.anonymousUsers) !== null && _b !== void 0 ? _b : true); + this.children = data.children.map(childData => new NavigationItem(childData, selectedActor)); + this.passThroughProps = data.passThroughProps; + this.isChecked = ko.computed({ + read: () => { + const currentActor = selectedActor(); + if (currentActor === null) { + return false; + } + if (currentActor === loggedInUserActor) { + return this.loggedInUsersEnabled(); + } + else if (currentActor === anonymousUserActor) { + return this.anonymousUsersEnabled(); + } + return this.enabledForActor.isEnabledFor(currentActor, null, true, null, true); + }, + write: (value) => { + const currentActor = selectedActor(); + if (currentActor === null) { + return; + } + if (currentActor === loggedInUserActor) { + this.loggedInUsersEnabled(value); + } + else if (currentActor === anonymousUserActor) { + this.anonymousUsersEnabled(value); + } + else { + this.enabledForActor.setEnabledFor(currentActor, value, null, true); + } + //Check/uncheck all children when the parent is checked/unchecked. + this.children.forEach(child => child.isChecked(value)); + }, + owner: this + }); + this.isLocked = ko.pureComputed(() => { + //If the item is disabled for "logged-in users", lock the checkbox when a role + //or user (or Super Admin) is selected. Those settings have no effect if logged-in + //users can't see the item at all. + const currentActor = selectedActor(); + if ((currentActor === null) + || (currentActor === loggedInUserActor) + || (currentActor === anonymousUserActor)) { + return false; + } + return !this.loggedInUsersEnabled(); + }); + this.isHidden = ko.pureComputed(() => { + return !this.isChecked() || this.isLocked(); + }); + } + toJs() { + const results = [{ + settings: { + grantAccess: this.enabledForActor.getAll(), + loggedInUsers: this.loggedInUsersEnabled(), + anonymousUsers: this.anonymousUsersEnabled() + }, + passThroughProps: this.passThroughProps + }]; + const children = this.children.map(child => child.toJs()); + return results.concat(...children); + } + } + class NavigationMenu { + constructor(data, selectedActor) { + this.id = data.id; + this.label = data.label; + this.type = data.type; + this.items = data.items.map(itemData => new NavigationItem(itemData, selectedActor)); + } + toJs() { + return { + id: this.id, + type: this.type, + items: this.items.map(item => item.toJs()).flat() + }; + } + } + class VisibilityEditor { + constructor(data) { + this.isSaving = ko.observable(false); + this.settingsToSave = ko.observable(''); + AmeActors.addSpecialActor(loggedInUserActor); + AmeActors.addSpecialActor(anonymousUserActor); + const actorSelector = new AmeActorSelector(AmeActors, true, false); + actorSelector.addSpecialActor(loggedInUserActor); + actorSelector.addSpecialActor(anonymousUserActor); + const selectedActor = actorSelector.createActorObservable(ko); + //Reselect the previously selected actor, or the first one if none was selected. + if (data.selectedActor && AmeActors.actorExists(data.selectedActor)) { + selectedActor(AmeActors.getActor(data.selectedActor)); + } + else { + selectedActor(loggedInUserActor); + } + this.selectedActorId = ko.pureComputed(() => { + const actor = selectedActor(); + return actor ? actor.getId() : ''; + }); + this.navigationMenus = data.navigationMenus.map(menuData => { + return new NavigationMenu(menuData, selectedActor); + }); + } + saveChanges() { + this.isSaving(true); + this.settingsToSave(JSON.stringify({ + menus: this.navigationMenus.map(menu => menu.toJs()) + })); + return true; + } + } + AmeNavMenuVisibilityUi.VisibilityEditor = VisibilityEditor; +})(AmeNavMenuVisibilityUi || (AmeNavMenuVisibilityUi = {})); +jQuery(function (_) { + const ui = new AmeNavMenuVisibilityUi.VisibilityEditor(wsAmeNavMenuVisibilityData); + ko.applyBindings(ui, document.getElementById('ame-nav-menu-visibility-editor')); +}); +//# sourceMappingURL=nav-settings.js.map \ No newline at end of file diff --git a/extras/modules/nav-menu-visibility/nav-settings.js.map b/extras/modules/nav-menu-visibility/nav-settings.js.map new file mode 100644 index 0000000..7108b60 --- /dev/null +++ b/extras/modules/nav-menu-visibility/nav-settings.js.map @@ -0,0 +1 @@ +{"version":3,"file":"nav-settings.js","sourceRoot":"","sources":["nav-settings.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/extras/modules/nav-menu-visibility/nav-settings.scss b/extras/modules/nav-menu-visibility/nav-settings.scss new file mode 100644 index 0000000..8c9be69 --- /dev/null +++ b/extras/modules/nav-menu-visibility/nav-settings.scss @@ -0,0 +1,105 @@ +@use "sass:math"; +@import "../../../css/boxes"; +@import "../../../css/ui-constants"; + +#ame-nav-menu-visibility-editor { + margin-top: $largeActorSelectorToUiGap; //A little extra space between the actor list and the menu UI. +} + +#ame-nv-navigation-menu-list { + font-size: 14px; + max-width: 630px; +} + +$itemLeftPaddingBuffer: 2px; + +.ame-nv-navigation-menu { + $horizontalPadding: 12px; + + @include ame-emulated-postbox(null, $horizontalPadding); + + .ws-ame-postbox-content { + padding-top: 8px; + padding-left: $horizontalPadding - $itemLeftPaddingBuffer; + } +} + +.ame-nv-nav-item-title { + line-height: math.div(23, 14); + + text-wrap: nowrap; + overflow: hidden; + text-overflow: ellipsis; + + //Leave space for the checkbox focus outline that would otherwise be cut off + //by the "overflow: hidden". + padding-left: $itemLeftPaddingBuffer; +} + +.ame-nv-nav-item-title-text { + text-wrap: nowrap; + +} + +.ame-nv-nav-item-children { + padding-left: 1.7em; +} + +.ame-nv-hidden > .ame-nv-nav-item-title { + color: $ameUiTextMutedColor; +} + +//region Locked checkbox +input[type="checkbox"].ame-nv-locked-checkbox { + &:before { + display: block; + font-family: 'dashicons', sans-serif; + content: '\f160'; + color: #3c434a; //#D81536; + + line-height: 1rem; + font-size: 1.125rem; + } + + &:disabled, &:disabled:before { + opacity: 0.9; + } +} + +@media screen and (min-width: 783px) { + input[type="checkbox"].ame-nv-locked-checkbox { + border-color: transparent; + box-shadow: none; + background: transparent; + + &:before { + line-height: 1rem; + font-size: 1.25rem; + + height: 1.3125rem; + width: 1.3125rem; + + margin-left: -1rem * 3/16; + margin-top: -1rem * 2/16; + } + } +} + +//WordPress makes checkboxes bigger on small screens, so we need to adjust the +//size and position of the lock icon. +@media screen and (max-width: 782px) { + input[type="checkbox"].ame-nv-locked-checkbox { + &:before { + line-height: 1.875rem; + font-size: 1.375rem; + + width: 1.875rem; + height: 1.875rem; + + margin-left: -1rem * 3/16; + margin-top: inherit; + } + } +} + +//endregion \ No newline at end of file diff --git a/extras/modules/nav-menu-visibility/nav-settings.ts b/extras/modules/nav-menu-visibility/nav-settings.ts new file mode 100644 index 0000000..3ebabec --- /dev/null +++ b/extras/modules/nav-menu-visibility/nav-settings.ts @@ -0,0 +1,253 @@ +namespace AmeNavMenuVisibilityUi { + interface VisibilitySettingsData { + grantAccess?: Record; + loggedInUsers?: boolean; + anonymousUsers?: boolean; + } + + type NavigationItemType = string; + + interface NavigationItemData { + label: string; + type: NavigationItemType; + settings: VisibilitySettingsData; + children: NavigationItemData[]; + + //Properties used to match up the item with the underlying block or menu item. + //The UI doesn't need to know what they are, just pass them back to the server. + passThroughProps: Record; + } + + interface NavigationMenuData { + id: number; + type: 'classic' | 'block'; + label: string; + items: NavigationItemData[]; + } + + export interface ScriptData { + navigationMenus: NavigationMenuData[]; + saveNonce: string; + selectedActor: string | null; + } + + interface StorableNavigationMenuData { + id: number; + type: NavigationMenuData['type']; + items: StorableNavigationItemData[]; + } + + interface StorableNavigationItemData { + settings: VisibilitySettingsData; + passThroughProps: NavigationItemData['passThroughProps']; + } + + interface StorableNavigationMenuData { + id: number; + type: NavigationMenuData['type']; + items: StorableNavigationItemData[]; + } + + const loggedInUserActor = new class extends AmeBaseActor { + constructor() { + super('special:logged_in_user', 'Logged In Users', {}); + } + + hasOwnCap(capability: string): boolean | null { + //The only capability that *all* roles and users have is the special "exist" capability. + return (capability === 'exist'); + } + } + + const anonymousUserActor = new class extends AmeBaseActor { + constructor() { + super('special:anonymous_user', 'Logged Out Users', {}); + } + + hasOwnCap(capability: string): boolean | null { + //The only capability that *all* roles and users have is the special "exist" capability. + return (capability === 'exist'); + } + } + + class NavigationItem { + public readonly label: string; + public readonly type: NavigationItemType; + public readonly children: NavigationItem[]; + + private readonly passThroughProps: NavigationItemData['passThroughProps']; + + private readonly enabledForActor: AmeObservableActorFeatureMap; + private readonly loggedInUsersEnabled: KnockoutObservable; + private readonly anonymousUsersEnabled: KnockoutObservable; + + public readonly isChecked: KnockoutComputed; + public readonly isLocked: KnockoutComputed; + + /** + * Whether the navigation item would be hidden from the currently selected actor. + * + * This is generally the opposite of `isChecked`, unless the current actor is a user/role + * and the item is disabled for logged-in users. In that case, the item can stay checked + * (i.e. existing user/role settings are preserved), but the item will be hidden. + */ + public readonly isHidden: KnockoutComputed; + + constructor(data: NavigationItemData, selectedActor: KnockoutObservable) { + this.label = data.label; + this.type = data.type; + + this.enabledForActor = new AmeObservableActorFeatureMap(data.settings.grantAccess); + this.loggedInUsersEnabled = ko.observable(data.settings.loggedInUsers ?? true); + this.anonymousUsersEnabled = ko.observable(data.settings.anonymousUsers ?? true); + + this.children = data.children.map( + childData => new NavigationItem(childData, selectedActor) + ); + this.passThroughProps = data.passThroughProps; + + this.isChecked = ko.computed({ + read: () => { + const currentActor = selectedActor(); + if (currentActor === null) { + return false; + } + + if (currentActor === loggedInUserActor) { + return this.loggedInUsersEnabled(); + } else if (currentActor === anonymousUserActor) { + return this.anonymousUsersEnabled(); + } + + return this.enabledForActor.isEnabledFor(currentActor, null, true, null, true); + }, + write: (value: boolean) => { + const currentActor = selectedActor(); + if (currentActor === null) { + return; + } + + if (currentActor === loggedInUserActor) { + this.loggedInUsersEnabled(value); + } else if (currentActor === anonymousUserActor) { + this.anonymousUsersEnabled(value); + } else { + this.enabledForActor.setEnabledFor(currentActor, value, null, true); + } + + //Check/uncheck all children when the parent is checked/unchecked. + this.children.forEach(child => child.isChecked(value)); + }, + owner: this + }); + + this.isLocked = ko.pureComputed(() => { + //If the item is disabled for "logged-in users", lock the checkbox when a role + //or user (or Super Admin) is selected. Those settings have no effect if logged-in + //users can't see the item at all. + const currentActor = selectedActor(); + if ( + (currentActor === null) + || (currentActor === loggedInUserActor) + || (currentActor === anonymousUserActor) + ) { + return false; + } + + return !this.loggedInUsersEnabled(); + }); + + this.isHidden = ko.pureComputed(() => { + return !this.isChecked() || this.isLocked(); + }); + } + + toJs(): StorableNavigationItemData[] { + const results: StorableNavigationItemData[] = [{ + settings: { + grantAccess: this.enabledForActor.getAll(), + loggedInUsers: this.loggedInUsersEnabled(), + anonymousUsers: this.anonymousUsersEnabled() + }, + passThroughProps: this.passThroughProps + }]; + + const children = this.children.map(child => child.toJs()); + + return results.concat(...children); + } + } + + class NavigationMenu { + private readonly id: number; + public readonly label: string; + public readonly type: NavigationMenuData['type']; + public readonly items: NavigationItem[]; + + constructor(data: NavigationMenuData, selectedActor: KnockoutObservable) { + this.id = data.id; + this.label = data.label; + this.type = data.type; + this.items = data.items.map(itemData => new NavigationItem(itemData, selectedActor)); + } + + toJs(): StorableNavigationMenuData { + return { + id: this.id, + type: this.type, + items: this.items.map(item => item.toJs()).flat() + }; + } + } + + export class VisibilityEditor { + public readonly navigationMenus: NavigationMenu[]; + + public readonly isSaving = ko.observable(false); + public readonly settingsToSave = ko.observable(''); + public readonly selectedActorId: KnockoutObservable + + constructor(data: ScriptData) { + AmeActors.addSpecialActor(loggedInUserActor); + AmeActors.addSpecialActor(anonymousUserActor); + + const actorSelector = new AmeActorSelector(AmeActors, true, false); + actorSelector.addSpecialActor(loggedInUserActor); + actorSelector.addSpecialActor(anonymousUserActor); + + const selectedActor = actorSelector.createActorObservable(ko); + //Reselect the previously selected actor, or the first one if none was selected. + if (data.selectedActor && AmeActors.actorExists(data.selectedActor)) { + selectedActor(AmeActors.getActor(data.selectedActor)); + } else { + selectedActor(loggedInUserActor); + } + + this.selectedActorId = ko.pureComputed(() => { + const actor = selectedActor(); + return actor ? actor.getId() : ''; + }); + + this.navigationMenus = data.navigationMenus.map(menuData => { + return new NavigationMenu(menuData, selectedActor); + }); + } + + saveChanges() { + this.isSaving(true); + + this.settingsToSave(JSON.stringify({ + menus: this.navigationMenus.map(menu => menu.toJs()) + })); + + return true; + } + } +} + +declare const wsAmeNavMenuVisibilityData: AmeNavMenuVisibilityUi.ScriptData; + +jQuery(function (_) { + const ui = new AmeNavMenuVisibilityUi.VisibilityEditor(wsAmeNavMenuVisibilityData); + ko.applyBindings(ui, document.getElementById('ame-nav-menu-visibility-editor')); +}); \ No newline at end of file diff --git a/extras/modules/nav-menu-visibility/uninstall.php b/extras/modules/nav-menu-visibility/uninstall.php new file mode 100644 index 0000000..9ce5945 --- /dev/null +++ b/extras/modules/nav-menu-visibility/uninstall.php @@ -0,0 +1,11 @@ +menuEditor->get_active_admin_menu(); - if ( !empty($menu['tree']) ) { - foreach ($menu['tree'] as $item) { + $tree = $this->menuEditor->get_active_admin_menu_tree(); + if ( !empty($tree) ) { + foreach ($tree as $item) { $this->analyseMenuItem($item); } } diff --git a/extras/modules/role-editor/data/capability-excerpt.sqlite3 b/extras/modules/role-editor/data/capability-excerpt.sqlite3 index 914c113..f096957 100644 Binary files a/extras/modules/role-editor/data/capability-excerpt.sqlite3 and b/extras/modules/role-editor/data/capability-excerpt.sqlite3 differ diff --git a/extras/modules/role-editor/data/core-categories.txt b/extras/modules/role-editor/data/core-categories.txt index 7ef3256..1d7b211 100644 --- a/extras/modules/role-editor/data/core-categories.txt +++ b/extras/modules/role-editor/data/core-categories.txt @@ -47,7 +47,11 @@ Other [default/other] upload_files manage_links unfiltered_upload - + resume_plugins + resume_themes + install_languages + view_site_health_checks + Deprecated [default/deprecated] edit_files level_0 diff --git a/extras/modules/role-editor/data/update-cap-db.php b/extras/modules/role-editor/data/update-cap-db.php index ccf8e22..0e59197 100644 --- a/extras/modules/role-editor/data/update-cap-db.php +++ b/extras/modules/role-editor/data/update-cap-db.php @@ -66,7 +66,11 @@ FROM plugins JOIN componentTypes - WHERE componentTypes.prefix = 'plugin:' + JOIN users ON (plugins.directory_id = users.user_id) + WHERE + (componentTypes.prefix = 'plugin:') + AND (plugins.active_installs IS NOT NULL) + AND (users.slug = 'wporg') ON CONFLICT DO NOTHING "); diff --git a/extras/modules/role-editor/role-editor.js b/extras/modules/role-editor/role-editor.js index 88f3ebd..2ac8fd9 100644 --- a/extras/modules/role-editor/role-editor.js +++ b/extras/modules/role-editor/role-editor.js @@ -139,6 +139,9 @@ class RexBaseActor { getOwnCapabilityState(capability) { return this.capabilities.getCapabilityState(capability); } + hasOwnCap(capability) { + return this.getOwnCapabilityState(capability); + } setCap(capability, enabled) { this.capabilities.setCapabilityState(capability, enabled); } diff --git a/extras/modules/role-editor/role-editor.js.map b/extras/modules/role-editor/role-editor.js.map index 02263ed..51dde52 100644 --- a/extras/modules/role-editor/role-editor.js.map +++ b/extras/modules/role-editor/role-editor.js.map @@ -1 +1 @@ -{"version":3,"file":"role-editor.js","sourceRoot":"","sources":["role-editor.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"role-editor.js","sourceRoot":"","sources":["role-editor.ts"],"names":[],"mappings":";AAAA,kDAAkD;AAElD,uCAAuC;AAEvC,gDAAgD;AAChD,qDAAqD;AACrD,gDAAgD;AAChD,kDAAkD;AAClD,0EAA0E;AAC1E,+CAA+C;AAE/C,MAAM,aAAa;IAclB,YAAY,MAAqB,EAAE,UAAyB;QAVlD,mBAAc,GAAkB,IAAI,CAAC;QAE/C,oBAAe,GAAW,EAAE,CAAC;QAE7B,gBAAW,GAAY,KAAK,CAAC;QAO5B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAE7B,MAAM,IAAI,GAAG,IAAI,CAAC;QAElB,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC,YAAY,CAAC;YAChC,IAAI,EAAE,IAAI,CAAC,YAAY;YACvB,eAAe,EAAE,IAAI;YACrB,KAAK,EAAE,IAAI;SACX,CAAC,CAAC;QACH,+GAA+G;QAC/G,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAC,SAAS,EAAE,EAAC,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,uBAAuB,EAAC,EAAC,CAAC,CAAC;QAEnF,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC,QAAQ,CAAC;YAC5B,IAAI,EAAE;gBACL,IAAI,CAAC,MAAM,CAAC,wBAAwB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;oBACtD,OAAO,KAAK,CAAC;iBACb;gBAED,6EAA6E;gBAC7E,IAAI,MAAM,CAAC,gBAAgB,EAAE,KAAK,aAAa,CAAC,QAAQ,EAAE;oBACzD,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;wBACvD,OAAO,KAAK,CAAC;qBACb;iBACD;gBAED,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,EAAE;oBAChC,OAAO,KAAK,CAAC;iBACb;gBAED,OAAO,CAAC,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,MAAM,CAAC,oBAAoB,EAAE,CAAC,CAAC;YAE9D,CAAC;YACD,KAAK,EAAE,IAAI;YACX,eAAe,EAAE,IAAI;SACrB,CAAC,CAAC;IACJ,CAAC;IAES,YAAY;QACrB,IAAI,IAAI,CAAC;QAET,IAAI,CAAC,IAAI,CAAC,cAAc,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,oBAAoB,EAAE,EAAE;YACzE,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC;SAC3B;aAAM;YACN,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC;SACrC;QAED,IAAI,IAAI,GAAG,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACpC,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;YACrB,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC;SACjD;QAED,6CAA6C;QAC7C,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QAEpC,OAAO,IAAI,CAAC;IACb,CAAC;CACD;AAQD;;;GAGG;AACH,MAAM,qBAAqB;IAK1B,YAAY,EAAU,EAAE,IAAY;QACnC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IAClB,CAAC;IAED,MAAM,CAAC,MAAM,CAAC,EAAU,EAAE,OAAyB;QAClD,MAAM,QAAQ,GAAG,IAAI,qBAAqB,CAAC,EAAE,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACjF,IAAI,OAAO,CAAC,0BAA0B,EAAE;YACvC,QAAQ,CAAC,0BAA0B,GAAG,OAAO,CAAC,0BAA0B,CAAC;SACzE;QACD,OAAO,QAAQ,CAAC;IACjB,CAAC;CACD;AAED,MAAM,0BAA0B;IAI/B,YAAY,mBAAkC;QAFtC,iBAAY,GAAqE,EAAE,CAAC;QAG3F,IAAI,mBAAmB,EAAE;YACxB,IAAI,CAAC,mBAAmB,GAAG,WAAW,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;SAClE;aAAM;YACN,IAAI,CAAC,mBAAmB,GAAG,EAAE,CAAC;SAC9B;IACF,CAAC;IAED,kBAAkB,CAAC,cAAsB;QACxC,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC;QACtD,OAAO,UAAU,EAAE,CAAC;IACrB,CAAC;IAED,kBAAkB,CAAC,cAAsB,EAAE,KAAqB;QAC/D,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC;QACtD,UAAU,CAAC,KAAK,CAAC,CAAC;IACnB,CAAC;IAED,kBAAkB;QACjB,MAAM,CAAC,GAAG,WAAW,CAAC;QAEtB,IAAI,MAAM,GAAG,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/E,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,UAAU,UAAU,EAAE,IAAI;YACtD,IAAI,OAAO,IAAI,KAAK,WAAW,EAAE;gBAChC,OAAO;aACP;YAED,MAAM,SAAS,GAAG,UAAU,EAAE,CAAC;YAC/B,IAAI,SAAS,KAAK,IAAI,EAAE;gBACvB,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC;aACpB;iBAAM;gBACN,MAAM,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC;aACzB;QACF,CAAC,CAAC,CAAC;QACH,OAAO,MAAM,CAAC;IACf,CAAC;IAEO,aAAa,CAAC,cAAsB;QAC3C,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE;YACtD,IAAI,YAAY,GAAG,IAAI,CAAC;YACxB,IAAI,IAAI,CAAC,mBAAmB,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE;gBAC5D,YAAY,GAAG,IAAI,CAAC,mBAAmB,CAAC,cAAc,CAAC,CAAC;aACxD;YACD,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;SAChE;QACD,OAAO,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC;IAC1C,CAAC;CACD;AAED,MAAe,YAAY;IAoB1B,YAAsB,EAAU,EAAE,IAAY,EAAE,WAAmB,EAAE,YAA4B;QAJjG,iBAAY,GAAY,KAAK,CAAC;QAK7B,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QAC5B,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAChC,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;QAC9C,IAAI,CAAC,YAAY,GAAG,IAAI,0BAA0B,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC;IACxE,CAAC;IAED,MAAM,CAAC,UAAkB;QACxB,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC,UAAU,CAAC,KAAK,IAAI,CAAC,CAAC;IACpE,CAAC;IAED,kBAAkB,CAAC,UAAkB;QACpC,OAAO,IAAI,CAAC,qBAAqB,CAAC,UAAU,CAAC,CAAC;IAC/C,CAAC;IAED,qBAAqB,CAAC,UAAkB;QACvC,OAAO,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAC;IACzD,CAAC;IAED,SAAS,CAAC,UAAkB;QAC3B,OAAO,IAAI,CAAC,qBAAqB,CAAC,UAAU,CAAC,CAAC;IAC/C,CAAC;IAED,MAAM,CAAC,UAAkB,EAAE,OAAgB;QAC1C,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IAC3D,CAAC;IAED,SAAS,CAAC,UAAkB;QAC3B,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;IACxD,CAAC;IAED,cAAc;QACb,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC;IAC3B,CAAC;IAED,KAAK;QACJ,OAAO,IAAI,CAAC,EAAE,EAAE,CAAC;IAClB,CAAC;IAED;;;OAGG;IACH,kBAAkB;QACjB,OAAO,IAAI,CAAC,YAAY,CAAC,kBAAkB,EAAE,CAAC;IAC/C,CAAC;IAED,MAAM;QACL,OAAO,KAAK,CAAC;IACd,CAAC;CACD;AAED,MAAM,OAAQ,SAAQ,YAAY;IAKjC,YAAmB,IAAY,EAAE,WAAmB,EAAE,YAA4B;QACjF,KAAK,CAAC,OAAO,GAAG,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;QAHxD,aAAQ,GAAY,KAAK,CAAC;IAI1B,CAAC;IAEM,MAAM,CAAC,YAAY,CAAC,IAAiB;QAC3C,MAAM,IAAI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;QACzE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC9B,OAAO,IAAI,CAAC;IACb,CAAC;IAED;;;;;OAKG;IACH,SAAS;QACR,OAAO,OAAO,CAAC,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC;IAC3D,CAAC;IAED,IAAI;QACH,OAAO;YACN,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE;YACjB,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE;YAC/B,YAAY,EAAE,IAAI,CAAC,kBAAkB,EAAE;SACvC,CAAC;IACH,CAAC;;AA9Be,wBAAgB,GAAG,CAAC,eAAe,EAAE,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,aAAa,CAAC,CAAC;AAiCvG,MAAM,aAAc,SAAQ,YAAY;IAGvC;QACC,KAAK,CAAC,qBAAqB,EAAE,aAAa,EAAE,aAAa,CAAC,CAAC;IAC5D,CAAC;IAED,MAAM,CAAC,WAAW;QACjB,IAAI,aAAa,CAAC,QAAQ,KAAK,IAAI,EAAE;YACpC,aAAa,CAAC,QAAQ,GAAG,IAAI,aAAa,EAAE,CAAC;SAC7C;QACD,OAAO,aAAa,CAAC,QAAQ,CAAC;IAC/B,CAAC;;AAXc,sBAAQ,GAAyB,IAAI,CAAC;AActD,MAAM,OAAQ,SAAQ,YAAY;IAMjC,YAAY,KAAa,EAAE,WAAmB,EAAE,YAA4B,EAAE,MAAe;QAC5F,KAAK,CAAC,OAAO,GAAG,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;QAL1D,iBAAY,GAAY,KAAK,CAAC;QAM7B,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QACvB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QACzB,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,eAAe,CAAC,EAAe,CAAC,CAAC;QACjD,IAAI,CAAC,MAAM,GAAG,MAAM,IAAI,CAAC,CAAC;IAC3B,CAAC;IAED,MAAM,CAAC,UAAkB,EAAE,YAA6B;QACvD,OAAO,CAAC,IAAI,CAAC,kBAAkB,CAAC,UAAU,EAAE,YAAY,CAAC,KAAK,IAAI,CAAC,CAAC;IACrE,CAAC;IAED,kBAAkB,CAAC,UAAkB,EAAE,YAA6B;QACnE,IAAI,UAAU,KAAK,cAAc,EAAE;YAClC,OAAO,KAAK,CAAC;SACb;QAED,IAAI,IAAI,CAAC,YAAY,EAAE;YACtB,IAAI,YAAY,EAAE;gBACjB,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,CAAC,CAAC;aAC/C;YACD,OAAO,CAAC,UAAU,KAAK,cAAc,CAAC,CAAC;SACvC;QAED,IAAI,MAAM,GAAG,KAAK,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAC;QAClD,IAAI,MAAM,KAAK,IAAI,EAAE;YACpB,IAAI,YAAY,EAAE;gBACjB,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aACxB;YACD,OAAO,MAAM,CAAC;SACd;QAED,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE;YACvC,MAAM,UAAU,GAAG,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAC;YACvD,IAAI,UAAU,KAAK,IAAI,EAAE;gBACxB,IAAI,YAAY,EAAE;oBACjB,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;iBACxB;gBACD,MAAM,GAAG,UAAU,CAAC;aACpB;QACF,CAAC,CAAC,CAAC;QAEH,OAAO,MAAM,CAAC;IACf,CAAC;IAED,2DAA2D;IAC3D,qBAAqB,CAAC,UAAyB;QAC9C,MAAM,CAAC,GAAG,WAAW,CAAC;QACtB,IAAI,OAAO,GAKL,EAAE,CAAC;QACT,oEAAoE;QAEpE,IAAI,IAAI,CAAC,YAAY,EAAE;YACtB,MAAM,UAAU,GAAG,aAAa,CAAC,WAAW,EAAE,CAAC;YAC/C,IAAI,WAAW,GAAG,kBAAkB,CAAC;YACrC,IAAI,UAAU,CAAC,IAAI,KAAK,cAAc,EAAE;gBACvC,WAAW,GAAG,MAAM,CAAC;aACrB;YACD,OAAO,CAAC,IAAI,CAAC;gBACZ,KAAK,EAAE,UAAU;gBACjB,IAAI,EAAE,UAAU,CAAC,WAAW,EAAE;gBAC9B,WAAW,EAAE,WAAW;aACxB,CAAC,CAAC;SACH;QAED,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE;YAC7B,MAAM,UAAU,GAAG,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YAC5D,IAAI,WAAW,CAAC;YAChB,IAAI,UAAU,EAAE;gBACf,WAAW,GAAG,OAAO,CAAC;aACtB;iBAAM,IAAI,UAAU,KAAK,IAAI,EAAE;gBAC/B,WAAW,GAAG,GAAG,CAAC;aAClB;iBAAM;gBACN,WAAW,GAAG,MAAM,CAAC;aACrB;YACD,OAAO,CAAC,IAAI,CAAC;gBACZ,KAAK,EAAE,IAAI;gBACX,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE;gBACxB,WAAW,EAAE,WAAW;aACxB,CAAC,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,IAAI,SAAS,GAAG,KAAK,CAAC,kBAAkB,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAC1D,IAAI,WAAW,CAAC;QAChB,IAAI,SAAS,EAAE;YACd,WAAW,GAAG,OAAO,CAAC;SACtB;aAAM,IAAI,SAAS,KAAK,IAAI,EAAE;YAC9B,WAAW,GAAG,GAAG,CAAC;SAClB;aAAM;YACN,WAAW,GAAG,MAAM,CAAC;SACrB;QACD,OAAO,CAAC,IAAI,CAAC;YACZ,KAAK,EAAE,IAAI;YACX,IAAI,EAAE,uBAAuB;YAC7B,WAAW,EAAE,WAAW;SACxB,CAAC,CAAC;QAEH,IAAI,cAAc,GAAmB,EAAE,CAAC;QACxC,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;QACzD,MAAM,aAAa,GAAG,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAC7C,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,IAAI;YAC7B,IAAI,CAAC,UAAU,GAAG,CAAC,IAAI,CAAC,KAAK,KAAK,aAAa,CAAC,CAAC;QAClD,CAAC,CAAC,CAAC;QAEH,OAAO,OAAO,CAAC;IAChB,CAAC;IAED,MAAM;QACL,OAAO,IAAI,CAAC;IACb,CAAC;IAED,MAAM,CAAC,WAAW,CAAC,IAAa,EAAE,MAAqB;QACtD,MAAM,IAAI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAC3F,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,MAAM;YAC/C,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YACpC,IAAI,IAAI,EAAE;gBACT,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aACtB;QACF,CAAC,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IACb,CAAC;IAED,MAAM,CAAC,qBAAqB,CAAC,UAA8B,EAAE,MAAqB;QACjF,MAAM,IAAI,GAAG,IAAI,OAAO,CAAC,UAAU,CAAC,UAAU,EAAE,UAAU,CAAC,YAAY,EAAE,UAAU,CAAC,YAAY,CAAC,CAAC;QAClG,IAAI,UAAU,CAAC,EAAE,EAAE;YAClB,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,EAAE,CAAC;SAC5B;QACD,WAAW,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,EAAE,UAAU,MAAM;YACrD,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YACpC,IAAI,IAAI,EAAE;gBACT,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aACtB;QACF,CAAC,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IACb,CAAC;IAED,IAAI;QACH,MAAM,CAAC,GAAG,WAAW,CAAC;QACtB,IAAI,KAAK,GAAG,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,MAAM,CAAC,CAAC;QAC9C,OAAO;YACN,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE;YAC/B,YAAY,EAAE,IAAI,CAAC,kBAAkB,EAAE;YACvC,KAAK,EAAE,KAAK;SACZ,CAAC;IACH,CAAC;IAED,UAAU;QACT,OAAO,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,MAAM,CAAC,CAAC;IACpD,CAAC;CACD;AA0BD,MAAM,WAAW;IAoDhB,YAAY,IAAY,EAAE,MAAqB,EAAE,OAAsB,IAAI,EAAE,eAAyB,EAAE;QAnD/F,SAAI,GAAkB,IAAI,CAAC;QAIpC,WAAM,GAAiC,IAAI,CAAC;QAC5C,aAAQ,GAAkB,IAAI,CAAC;QAC/B,WAAM,GAAkB,IAAI,CAAC;QAE7B,WAAM,GAAuB,IAAI,CAAC;QAElC,kBAAa,GAAkB,EAAE,CAAC;QAuCxB,eAAU,GAAkB,EAAE,CAAC;QAGxC,MAAM,CAAC,GAAG,WAAW,CAAC;QACtB,MAAM,IAAI,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QAErB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,EAAE,CAAC,EAAE;YAC/C,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;SAC1C;QAED,IAAI,kBAAkB,GAAG,CAAC,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC,cAAc,EAAE,EAAE;YAC/D,OAAO,IAAI,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC,CAAC;QACxE,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC,eAAe,CAAC,kBAAkB,CAAC,CAAC;QAC1D,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC,UAAU,CAAC,uCAAuC,CAAC,CAAC;QAE9E,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QAEvC,IAAI,CAAC,sBAAsB,GAAG,EAAE,CAAC,YAAY,CAAC;YAC7C,IAAI,EAAE;gBACL,OAAO,IAAI,CAAC,uBAAuB,CAAC,EAAE,EAAE,UAAU,UAAyB;oBAC1E,OAAO,UAAU,CAAC,yBAAyB,EAAE,CAAC;gBAC/C,CAAC,CAAC,CAAC;YACJ,CAAC;YACD,eAAe,EAAE,IAAI;YACrB,KAAK,EAAE,IAAI;SACX,CAAC,CAAC;QACH,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,EAAC,SAAS,EAAE,EAAC,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,uBAAuB,EAAC,EAAC,CAAC,CAAC;QAE/F,IAAI,CAAC,oBAAoB,GAAG,EAAE,CAAC,YAAY,CAAC;YAC3C,IAAI,EAAE;gBACL,OAAO,IAAI,CAAC,uBAAuB,EAAE,CAAC;YACvC,CAAC;YACD,eAAe,EAAE,IAAI;YACrB,KAAK,EAAE,IAAI;SACX,CAAC,CAAC;QAEH,IAAI,CAAC,iBAAiB,GAAG,EAAE,CAAC,YAAY,CAAC;YACxC,IAAI,EAAE;gBACL,IAAI,CAAC,MAAM,CAAC,uBAAuB,EAAE,EAAE;oBACtC,OAAO,KAAK,CAAC;iBACb;gBAED,MAAM,SAAS,GAAG,IAAI,CAAC,oBAAoB,EAAE,EAC5C,WAAW,GAAG,IAAI,CAAC,sBAAsB,EAAE,CAAC;gBAC7C,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAC,SAAS,KAAK,CAAC,CAAC,IAAI,CAAC,WAAW,KAAK,CAAC,CAAC,CAAC,EAAE;oBAC7E,OAAO,KAAK,CAAC;iBACb;gBAED,OAAO,MAAM,CAAC,wBAAwB,EAAE,IAAI,IAAI,CAAC,wBAAwB,EAAE,CAAC;YAC7E,CAAC;YACD,eAAe,EAAE,IAAI;YACrB,KAAK,EAAE,IAAI;SACX,CAAC,CAAC;QACH,IAAI,CAAC,wBAAwB,GAAG,EAAE,CAAC,YAAY,CAAC;YAC/C,IAAI,EAAE;gBACL,IAAI,CAAC,MAAM,CAAC,0BAA0B,EAAE,EAAE;oBACzC,OAAO,KAAK,CAAC;iBACb;gBACD,OAAO,CAAC,IAAI,CAAC,sBAAsB,EAAE,GAAG,CAAC,CAAC,IAAI,MAAM,CAAC,gBAAgB,EAAE,CAAC;YACzE,CAAC;YACD,eAAe,EAAE,IAAI;YACrB,KAAK,EAAE,IAAI;SACX,CAAC,CAAC;QAEH,IAAI,CAAC,wBAAwB,GAAG,EAAE,CAAC,QAAQ,CAAC;YAC3C,IAAI,EAAE;gBACL,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;gBACjC,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC;gBAEzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;oBAC7B,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,yBAAyB,EAAE,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,UAAU,EAAE,EAAE;wBACzF,OAAO,KAAK,CAAC;qBACb;iBACD;gBAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBACnD,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,wBAAwB,EAAE,EAAE;wBACtD,OAAO,KAAK,CAAC;qBACb;iBACD;gBAED,OAAO,IAAI,CAAC;YACb,CAAC;YACD,KAAK,EAAE,UAAU,OAAO;gBACvB,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;gBACjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBACtC,IAAI,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;oBACpB,IAAI,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,EAAE;wBACjC,IAAI,CAAC,UAAU,CAAC,yBAAyB,CAAC,OAAO,CAAC,CAAC;qBACnD;iBACD;gBAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBACnD,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,wBAAwB,CAAC,OAAO,CAAC,CAAC;iBACxD;YACF,CAAC;YACD,eAAe,EAAE,IAAI;YACrB,KAAK,EAAE,IAAI;SACX,CAAC,CAAC;QACH,IAAI,CAAC,wBAAwB,CAAC,MAAM,CAAC,EAAC,SAAS,EAAE,EAAC,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,uBAAuB,EAAC,EAAC,CAAC,CAAC;QAEjG,IAAI,CAAC,yBAAyB,GAAG,EAAE,CAAC,YAAY,CAAC;YAChD,IAAI,EAAE,GAAG,EAAE;gBACV,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;gBACjC,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC;gBAEzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;oBAC7B,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,UAAU,EAAE,EAAE;wBACrC,OAAO,IAAI,CAAC;qBACZ;iBACD;gBAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBACnD,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,yBAAyB,EAAE,EAAE;wBACvD,OAAO,IAAI,CAAC;qBACZ;iBACD;gBAED,OAAO,KAAK,CAAC;YACd,CAAC;YACD,eAAe,EAAE,IAAI;YACrB,KAAK,EAAE,IAAI;SACX,CAAC,CAAC;QACH,IAAI,CAAC,yBAAyB,CAAC,MAAM,CAAC,EAAC,SAAS,EAAE,EAAC,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,uBAAuB,EAAC,EAAC,CAAC,CAAC;QAElG,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC,QAAQ,CAAC;YAC5B,IAAI,EAAE;gBACL,IAAI,OAAO,GAAG,KAAK,CAAC;gBAEpB,IAAI,uBAAuB,GAAG,KAAK,CAAC;gBACpC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,EAAE,UAAU,QAAQ;oBAC/C,IAAI,QAAQ,CAAC,SAAS,EAAE,EAAE;wBACzB,uBAAuB,GAAG,IAAI,CAAC;wBAC/B,OAAO,KAAK,CAAC;qBACb;gBACF,CAAC,CAAC,CAAC;gBAEH,8CAA8C;gBAC9C,IAAI,oBAAoB,GAAG,KAAK,EAC/B,IAAI,GAAuB,IAAI,CAAC;gBACjC,OAAO,IAAI,KAAK,IAAI,EAAE;oBACrB,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE;wBACtB,oBAAoB,GAAG,IAAI,CAAC;wBAC5B,MAAM;qBACN;oBACD,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC;iBACnB;gBAED,iEAAiE;gBACjE,uCAAuC;gBACvC,IACC,CAAC,oBAAoB;uBAClB,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC;uBAC5B,CAAC,MAAM,CAAC,gBAAgB,EAAE,KAAK,aAAa,CAAC,kBAAkB,CAAC,EAClE;oBACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;wBAChD,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;wBAC1B,OAAO,IAAI,KAAK,IAAI,EAAE;4BACrB,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE;gCACtB,oBAAoB,GAAG,IAAI,CAAC;gCAC5B,MAAM;6BACN;4BACD,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC;yBACnB;wBACD,IAAI,oBAAoB,EAAE;4BACzB,MAAM;yBACN;qBACD;iBACD;gBAED,IAAI,CAAC,oBAAoB,IAAI,CAAC,uBAAuB,EAAE;oBACtD,OAAO,KAAK,CAAC;iBACb;gBAED,4EAA4E;gBAC5E,OAAO,GAAG,uBAAuB,CAAC;gBAClC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,UAAU,UAAU;oBACjD,IAAI,UAAU,CAAC,SAAS,EAAE,EAAE;wBAC3B,OAAO,GAAG,IAAI,CAAC;wBACf,OAAO,KAAK,CAAC;qBACb;gBACF,CAAC,CAAC,CAAC;gBAEH,OAAO,OAAO,CAAC;YAChB,CAAC;YACD,eAAe,EAAE,IAAI;YACrB,KAAK,EAAE,IAAI;SACX,CAAC,CAAC;QACH,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;YACrB,SAAS,EAAE;gBACV,OAAO,EAAE,EAAE;gBACX,MAAM,EAAE,uBAAuB;aAC/B;SACD,CAAC,CAAC;QAEH,IAAI,CAAC,kBAAkB,GAAG,EAAE,CAAC,QAAQ,CAAC;YACrC,IAAI,EAAE;gBACL,IAAI,kBAAkB,GAAG,CAAC,CAAC;gBAC3B,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,UAAU,UAAU;oBACjD,IAAI,UAAU,CAAC,SAAS,EAAE,EAAE;wBAC3B,kBAAkB,EAAE,CAAC;qBACrB;gBACF,CAAC,CAAC,CAAC;gBAEH,IAAI,iBAAiB,GAAG,EAAE,CAAC;gBAC3B,IAAI,MAAM,CAAC,iBAAiB,EAAE,KAAK,MAAM,EAAE;oBAC1C,iBAAiB,GAAG,CAAC,CAAC;iBACtB;gBAED,IAAI,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,GAAG,iBAAiB,CAAC,EAAE,CAAC,CAAC,CAAC;gBACpF,uEAAuE;gBACvE,IAAI,CAAC,cAAc,IAAI,CAAC,CAAC,IAAI,CAAC,kBAAkB,GAAG,iBAAiB,KAAK,CAAC,CAAC,EAAE;oBAC5E,cAAc,EAAE,CAAC;iBACjB;gBACD,IAAI,cAAc,GAAG,CAAC,EAAE;oBACvB,OAAO,KAAK,CAAC;iBACb;gBAED,OAAO,cAAc,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;YACpC,CAAC;YACD,eAAe,EAAE,IAAI;SACrB,CAAC,CAAC;QAEH,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC,YAAY,CAAC;YACnC,IAAI,EAAE;gBACL,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,EAAE;oBACzB,OAAO,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;iBACtC;gBACD,OAAO,CAAC,CAAC;YACV,CAAC;YACD,eAAe,EAAE,IAAI;SACrB,CAAC,CAAC;QAEH,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC,UAAU,CACjC,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,eAAe,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CACzF,CAAC;QAEF,IAAI,IAAI,CAAC,IAAI,EAAE;YACd,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,QAAiB,EAAE,EAAE;gBAClD,gFAAgF;gBAChF,4CAA4C;gBAC5C,MAAM,CAAC,eAAe,CAAC,mBAAmB,CAAC,MAAM,CAAC,IAAI,CAAC,IAAK,EAAE,CAAC,QAAQ,CAAC,CAAC;YAC1E,CAAC,CAAC,CAAC;SACH;QAED,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC,YAAY,CAAC;YACnC,IAAI,EAAE;gBACL,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,EAAE;oBACzB,OAAO,IAAI,CAAC;iBACZ;gBACD,OAAO,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,IAAI,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC;gBACjE,kFAAkF;YACnF,CAAC;YACD,eAAe,EAAE,IAAI;SACrB,CAAC,CAAC;QAEH,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC,QAAQ,CAAC;YAC7B,IAAI,EAAE;gBACL,IAAI,OAAO,GAAG,EAAE,CAAC;gBACjB,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE;oBAClC,OAAO,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;iBACtC;gBACD,IAAI,IAAI,CAAC,MAAM,EAAE;oBAChB,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,CAAC,YAAY,EAAE;wBACxC,OAAO,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;qBACjC;yBAAM;wBACN,OAAO,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;qBACjC;iBACD;gBAED,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE;oBAClC,OAAO,CAAC,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC;iBACjE;gBACD,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC1B,CAAC;YACD,eAAe,EAAE,IAAI;SACrB,CAAC,CAAC;QAEH,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC,YAAY,CAAC;YACpC,IAAI,EAAE;gBACL,IAAI,OAAO,GAAG,EAAE,CAAC;gBACjB,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE;oBACtB,OAAO,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;iBACtC;gBACD,IAAI,IAAI,CAAC,aAAa,EAAE,EAAE;oBACzB,OAAO,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;iBACpC;gBACD,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE;oBAClC,OAAO,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;iBACrC;gBACD,OAAO,CAAC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;gBACrD,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC1B,CAAC;YACD,eAAe,EAAE,IAAI;SACrB,CAAC,CAAC;QAEH,IAAI,CAAC,2BAA2B,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QAC5E,IAAI,CAAC,mBAAmB,GAAG,EAAE,CAAC,YAAY,CAAC;YAC1C,IAAI,EAAE,GAAG,EAAE;gBACV,+DAA+D;gBAC/D,IAAI,CAAC,2BAA2B,EAAE,CAAC;gBACnC,OAAO,IAAI,CAAC,sBAAsB,EAAE,CAAC;YACtC,CAAC;YACD,eAAe,EAAE,IAAI;SACrB,CAAC,CAAC;QAEH,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC,YAAY,CAAC;YACvC,IAAI,EAAE,GAAG,EAAE;gBACV,IAAI,CAAC,2BAA2B,EAAE,CAAC;gBACnC,OAAO,IAAI,CAAC,aAAa,CAAC;YAC3B,CAAC;YACD,eAAe,EAAE,IAAI;SACrB,CAAC,CAAC;QAEH,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC,YAAY,CAAC;YACjC,IAAI,EAAE,GAAG,EAAE;gBACV,OAAO,IAAI,CAAC,kBAAkB,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC7C,CAAC;YACD,eAAe,EAAE,IAAI;SACrB,CAAC,CAAC;IACJ,CAAC;IAED,cAAc,CAAC,QAAqB,EAAE,SAAkB;QACvD,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC;QACvB,IAAI,SAAS,EAAE;YACd,MAAM,KAAK,GAAG,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,EAAE,EAAC,MAAM,EAAE,SAAS,EAAC,CAAC,CAAC;YAC7E,IAAI,KAAK,GAAG,CAAC,CAAC,EAAE;gBACf,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC;gBAClD,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;gBAC5D,OAAO;aACP;SACD;QACD,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAClC,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IAC7D,CAAC;IAED,2DAA2D;IAC3D,mBAAmB;QAClB,IAAI,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC;IAC3C,CAAC;IAES,sBAAsB;QAC/B,sGAAsG;QACtG,gGAAgG;QAChG,OAAO,IAAI,CAAC,aAAa,CAAC;IAC3B,CAAC;IAED;;;OAGG;IACH,eAAe;QACd,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YAC9B,OAAO,IAAI,CAAC,uBAAuB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;IACJ,CAAC;IAES,uBAAuB,CAAC,CAAgB,EAAE,CAAgB;QACnE,OAAO,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;IACvF,CAAC;IAED,uBAAuB,CAAC,cAAsC,EAAE,EAAE,YAA6B,IAAI;QAClG,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QAEvC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAC5C,MAAM,UAAU,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC;YAC7C,IAAI,WAAW,CAAC,cAAc,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;gBAChD,SAAS;aACT;YACD,IAAI,SAAS,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE;gBACxC,SAAS;aACT;YACD,IAAI,UAAU,CAAC,SAAS,EAAE,EAAE;gBAC3B,SAAS;aACT;YAED,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;YACpC,KAAK,EAAE,CAAC;SACR;QAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACnD,KAAK,GAAG,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,uBAAuB,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;SACtF;QAED,OAAO,KAAK,CAAC;IACd,CAAC;IAES,kBAAkB,CAAC,IAAY;QACxC,IAAI,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE;YACtD,OAAO,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;SAC1C;QACD,OAAO,IAAI,CAAC;IACb,CAAC;IAED,MAAM,CAAC,MAAM,CAAC,OAA2B,EAAE,MAAqB;;QAC/D,IAAI,QAAqB,CAAC;QAC1B,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE;YACrB,QAAQ,GAAG,IAAI,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;SACrF;aAAM,IAAI,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO,KAAK,WAAW,EAAE;YAC9D,QAAQ,GAAG,IAAI,mBAAmB,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,aAAa,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;SACnH;aAAM,IAAI,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO,KAAK,UAAU,EAAE;YAC7D,QAAQ,GAAG,IAAI,mBAAmB,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,aAAa,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;SACnH;aAAM;YACN,MAAM,IAAI,KAAK,CAAC,iCAAiC,GAAG,CAAC,MAAC,OAAe,CAAC,OAAO,mCAAI,WAAW,CAAC,CAAC,CAAC;SAC/F;QAED,IAAI,OAAO,CAAC,WAAW,EAAE;YACxB,QAAQ,CAAC,MAAM,GAAG,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;SAC3D;QAED,IAAI,OAAO,CAAC,aAAa,EAAE;YAC1B,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC,YAAY,EAAE,EAAE;gBAC3D,MAAM,WAAW,GAAG,WAAW,CAAC,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;gBAC7D,QAAQ,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;YACtC,CAAC,CAAC,CAAC;SACH;QAED,OAAO,QAAQ,CAAC;IACjB,CAAC;IAED,oBAAoB;QACnB,OAAO,KAAK,CAAC;IACd,CAAC;IAED,mBAAmB;;QAClB,IAAI,GAAG,GAAG,MAAA,IAAI,CAAC,IAAI,mCAAI,IAAI,CAAC,IAAI,CAAC;QACjC,IAAI,IAAI,CAAC,MAAM,EAAE;YAChB,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,mBAAmB,EAAE,GAAG,GAAG,GAAG,GAAG,CAAC;SACpD;QACD,OAAO,GAAG,CAAC;IACZ,CAAC;IAED,YAAY,CAAC,QAAqB;QACjC,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE;YAC7C,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;SAC/B;IACF,CAAC;IAES,kBAAkB;QAC3B,IAAI,KAAK,GAAG,EAAE,CAAC;QACf,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,EAAE;YACzB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;SAC7B;QACD,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;YAC/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBAChD,IAAI,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;gBAClC,IAAI,QAAQ,CAAC,MAAM,EAAE;oBACpB,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;iBACjC;aACD;SACD;QACD,OAAO,KAAK,CAAC;IACd,CAAC;IAED,eAAe;QACd,IAAI,UAAU,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7B,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QACzB,OAAO,MAAM,KAAK,IAAI,EAAE;YACvB,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAChC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;SACvB;QACD,OAAO,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;;AAxfe,wCAA4B,GAAkC,UAAU,CAAC,EAAE,CAAC;IAC3F,OAAO,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;AACjE,CAAC,CAAC;AA6fH,MAAe,sBAAuB,SAAQ,WAAW;IAKxD,YAAsB,IAAY,EAAE,MAAqB,EAAE,OAAsB,IAAI;QACpF,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;QALpB,YAAO,GAAmD,EAAE,CAAC;QAC1D,qBAAgB,GAAkB,IAAI,CAAC;QAMhD,IAAI,CAAC,sBAAsB,GAAG,EAAE,CAAC,YAAY,CAAC;YAC7C,IAAI,EAAE,GAAG,EAAE;gBACV,IAAI,MAAM,CAAC,mBAAmB,EAAE,EAAE;oBACjC,OAAO,KAAK,CAAC;iBACb;gBACD,OAAO,IAAI,CAAC,oBAAoB,EAAE,CAAC;YACpC,CAAC;YACD,eAAe,EAAE,IAAI;SACrB,CAAC,CAAC;IACJ,CAAC;IAED;;;OAGG;IACH,oBAAoB;QACnB,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;QAC5C,IAAI,YAAY,KAAK,IAAI,IAAI,IAAI,KAAK,YAAY,EAAE;YACnD,OAAO,KAAK,CAAC;SACb;QAED,IAAI,YAAY,GAAG,IAAI,CAAC;QACxB,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,IAAI;YAC/C,IAAI,OAAO,GAAG,IAAI,CAAC,MAAM;mBACrB,YAAY,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC;mBAChD,CAAC,IAAI,CAAC,UAAU,KAAK,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,UAAU,CAAC,CAAC;YAEvE,IAAI,CAAC,OAAO,EAAE;gBACb,YAAY,GAAG,KAAK,CAAC;gBACrB,OAAO,KAAK,CAAC;aACb;QACF,CAAC,CAAC,CAAC;QACH,OAAO,YAAY,CAAC;IACrB,CAAC;IAES,eAAe;QACxB,IAAI,IAAI,CAAC,gBAAgB,KAAK,IAAI,EAAE;YACnC,IAAI,MAAM,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;YAC5D,IAAI,MAAM,YAAY,sBAAsB,EAAE;gBAC7C,OAAO,MAAM,CAAC;aACd;SACD;QACD,OAAO,IAAI,CAAC;IACb,CAAC;CACD;AAED,MAAM,qBAAsB,SAAQ,aAAa;IAkBhD,YAAY,MAAqB,EAAE,UAAyB,EAAE,MAAc,EAAE,aAAqB,EAAE;QACpG,KAAK,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QAE1B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,cAAc,GAAG,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;QAElG,IAAI,qBAAqB,CAAC,kBAAkB,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,UAAU,EAAE;YAClF,IAAI,CAAC,eAAe,GAAG,qBAAqB,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;SAClG;IACF,CAAC;;AAxBsB,wCAAkB,GAAoC;IAC5E,iBAAiB,EAAE,oBAAoB;IACvC,YAAY,EAAE,SAAS;IACvB,cAAc,EAAE,eAAe;IAC/B,sBAAsB,EAAE,mBAAmB;IAC3C,mBAAmB,EAAE,2BAA2B;IAChD,oBAAoB,EAAE,mCAAmC;IACzD,eAAe,EAAE,YAAY;IAC7B,oBAAoB,EAAE,iBAAiB;IACvC,cAAc,EAAE,WAAW;IAC3B,wBAAwB,EAAE,qBAAqB;IAC/C,qBAAqB,EAAE,6BAA6B;IACpD,sBAAsB,EAAE,qCAAqC;CAC7D,CAAC;AAcH,MAAM,mBAAoB,SAAQ,sBAAsB;IAqBvD,YACC,IAAY,EACZ,MAAqB,EACrB,UAAkB,EAClB,OAAsB,IAAI,EAC1B,WAAyC,EACzC,YAAqB,KAAK;QAE1B,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;QA5BlB,gBAAW,GAAW,EAAE,CAAC;QAE3B,YAAO,GAAgD,EAAE,CAAC;QA2BhE,MAAM,CAAC,GAAG,WAAW,CAAC;QAEtB,IAAI,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;QACzC,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC;QAC3B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC9B,IAAI,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,WAAW,EAAE;YAC7C,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,WAAW,CAAC;SAC5D;aAAM;YACN,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;SACtC;QAED,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE;YAC/E,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;gBAClC,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAC;aAC7E;YAED,MAAM,UAAU,GAAG,IAAI,qBAAqB,CAAC,MAAM,EAAE,MAAM,CAAC,aAAa,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;YAEjH,+FAA+F;YAC/F,IAAI,UAAU,KAAK,MAAM,EAAE;gBAC1B,UAAU,CAAC,WAAW,GAAG,IAAI,CAAC;aAC9B;YAED,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,UAAU,CAAC;YAClC,OAAO,UAA2B,CAAC;QACpC,CAAC,CAAC,CAAC,CAAC;QAEJ,IAAI,CAAC,eAAe,EAAE,CAAC;QAEvB,qEAAqE;QACrE,MAAM,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,EAAE,IAAI,CAAC,EACvD,UAAU,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,EAAE,IAAI,CAAC,CAAC;QACxD,IAAI,QAAQ,IAAI,UAAU,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,KAAK,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;YACxF,UAAU,CAAC,WAAW,GAAG,IAAI,CAAC;SAC9B;IACF,CAAC;IAGD,mBAAmB;QAClB,OAAO,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC;IACpC,CAAC;IAED,eAAe;QACd,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YAC9B,IAAI,CAAC,CAAC,YAAY,qBAAqB,CAAC,IAAI,CAAC,CAAC,YAAY,qBAAqB,CAAC,EAAE;gBACjF,MAAM,SAAS,GAAG,mBAAmB,CAAC,kBAAkB,CAAC,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC,kBAAkB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;gBAC5I,MAAM,SAAS,GAAG,mBAAmB,CAAC,kBAAkB,CAAC,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC,kBAAkB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;gBAE5I,IAAI,KAAK,GAAG,SAAS,GAAG,SAAS,CAAC;gBAClC,IAAI,KAAK,KAAK,CAAC,EAAE;oBAChB,OAAO,KAAK,CAAC;iBACb;gBAED,OAAO,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;aAC1D;YACD,OAAO,IAAI,CAAC,uBAAuB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;IACJ,CAAC;IAES,kBAAkB;QAC3B,IAAI,KAAK,GAAG,KAAK,CAAC,kBAAkB,EAAE,CAAC;QACvC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC1B,OAAO,KAAK,CAAC;IACd,CAAC;;AAvFuB,sCAAkB,GAAoC;IAC7E,YAAY,EAAE,CAAC;IACf,mBAAmB,EAAE,CAAC;IACtB,sBAAsB,EAAE,CAAC;IACzB,oBAAoB,EAAE,CAAC;IACvB,eAAe,EAAE,CAAC;IAClB,cAAc,EAAE,CAAC;IACjB,qBAAqB,EAAE,CAAC;IACxB,wBAAwB,EAAE,CAAC;IAC3B,sBAAsB,EAAE,CAAC;IACzB,oBAAoB,EAAE,EAAE;IACxB,cAAc,EAAE,EAAE;CAClB,CAAC;AA8EH,MAAM,qBAAsB,SAAQ,aAAa;IAUhD,YAAY,MAAqB,EAAE,UAAyB,EAAE,MAAc,EAAE,aAAqB,EAAE;QACpG,KAAK,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QAE1B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,cAAc,GAAG,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;QAElG,IAAI,qBAAqB,CAAC,kBAAkB,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,UAAU,EAAE;YAClF,IAAI,CAAC,eAAe,GAAG,qBAAqB,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;SAClG;IACF,CAAC;;AAhBsB,wCAAkB,GAAoC;IAC5E,cAAc,EAAE,WAAW;IAC3B,YAAY,EAAE,SAAS;IACvB,cAAc,EAAE,WAAW;IAC3B,cAAc,EAAE,WAAW;CAC3B,CAAC;AAcH,MAAM,mBAAoB,SAAQ,sBAAsB;IAWvD,YACC,IAAY,EACZ,MAAqB,EACrB,UAAkB,EAClB,OAAsB,IAAI,EAC1B,WAAyC;QAEzC,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;QAjBpB,YAAO,GAAgD,EAAE,CAAC;QAkBhE,MAAM,CAAC,GAAG,WAAW,CAAC;QAEtB,IAAI,CAAC,gBAAgB,GAAG,qBAAqB,CAAC;QAC9C,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC;QAC3B,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC;QAE3B,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QAChC,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC,eAAe,CAAgB,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE;YAC9F,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;gBAClC,6DAA6D;gBAC7D,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAC;aAC7E;YAED,MAAM,UAAU,GAAG,IAAI,qBAAqB,CAAC,MAAM,EAAE,MAAM,CAAC,aAAa,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;YACrG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,UAAU,CAAC;YAClC,OAAO,UAAU,CAAC;QACnB,CAAC,CAAC,CAAC,CAAC;QAEJ,IAAI,CAAC,eAAe,EAAE,CAAC;QAEvB,0FAA0F;QAC1F,IAAI,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE;YAC9B,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC;YAC5D,KAAK,IAAI,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE;gBAChC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE;oBACzC,SAAS;iBACT;gBACD,IAAI,CAAC,MAAM,KAAK,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,UAAU,CAAC,IAAI,KAAK,SAAS,CAAC,EAAE;oBACxF,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,WAAW,GAAG,IAAI,CAAC;iBACxC;aACD;SACD;IACF,CAAC;IAED,mBAAmB;QAClB,OAAO,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC;IACpC,CAAC;IAED,eAAe;QACd,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAgB,EAAE,CAAgB,EAAE,EAAE;YAC5D,IAAI,CAAC,CAAC,YAAY,qBAAqB,CAAC,IAAI,CAAC,CAAC,YAAY,qBAAqB,CAAC,EAAE;gBACjF,MAAM,SAAS,GAAG,mBAAmB,CAAC,kBAAkB,CAAC,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC,kBAAkB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;gBAC5I,MAAM,SAAS,GAAG,mBAAmB,CAAC,kBAAkB,CAAC,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC,kBAAkB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;gBAE5I,IAAI,KAAK,GAAG,SAAS,GAAG,SAAS,CAAC;gBAClC,IAAI,KAAK,KAAK,CAAC,EAAE;oBAChB,OAAO,KAAK,CAAC;iBACb;gBAED,OAAO,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;aAC1D;YACD,OAAO,IAAI,CAAC,uBAAuB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;IACJ,CAAC;IAES,kBAAkB;QAC3B,IAAI,KAAK,GAAG,KAAK,CAAC,kBAAkB,EAAE,CAAC;QACvC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC1B,OAAO,KAAK,CAAC;IACd,CAAC;;AA1EuB,sCAAkB,GAAoC;IAC7E,cAAc,EAAE,CAAC;IACjB,YAAY,EAAE,CAAC;IACf,cAAc,EAAE,CAAC;IACjB,cAAc,EAAE,CAAC;CACjB,CAAC;AA6EH,MAAe,oBAAqB,SAAQ,WAAW;IAItD,YAAsB,IAAY,EAAE,MAAqB,EAAE,OAAsB,IAAI;QACpF,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;QAE1B,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC,YAAY,CAAC;YACtC,IAAI,MAAM,CAAC,gBAAgB,EAAE,KAAK,aAAa,CAAC,aAAa,EAAE;gBAC9D,OAAO,+BAA+B,CAAC;aACvC;YACD,OAAO,uCAAuC,CAAC;QAChD,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,6BAA6B,GAAG,WAAW,CAAC,4BAA4B,CAAC;IAC/E,CAAC;IAES,sBAAsB;QAC/B,IAAI,IAAI,CAAC,MAAM,CAAC,mBAAmB,EAAE,EAAE;YACtC,OAAO,KAAK,CAAC,sBAAsB,EAAE,CAAC;SACtC;QAED,IAAI,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACjD,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YACzB,qEAAqE;YACrE,MAAM,WAAW,GAAG,CAAC,CAAC,oBAAoB,EAAE,CAAC;YAC7C,MAAM,WAAW,GAAG,CAAC,CAAC,oBAAoB,EAAE,CAAC;YAC7C,IAAI,WAAW,IAAI,CAAC,WAAW,EAAE;gBAChC,OAAO,CAAC,CAAC;aACT;iBAAM,IAAI,CAAC,WAAW,IAAI,WAAW,EAAE;gBACvC,OAAO,CAAC,CAAC,CAAC;aACV;YAED,2CAA2C;YAC3C,OAAO,IAAI,CAAC,6BAA6B,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACjD,CAAC,CAAC,CAAC;IACJ,CAAC;IAED;;OAEG;IACI,iBAAiB;QACvB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;IAC7D,CAAC;CACD;AAED,MAAM,4BAA6B,SAAQ,oBAAoB;IAG9D,YAAY,IAAY,EAAE,MAAqB,EAAE,OAAsB,IAAI;QAC1E,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;QAE1B,IAAI,CAAC,MAAM,GAAG,+BAA+B,CAAC;QAE9C,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC,YAAY,CAAC;YACnC,IAAI,EAAE,GAAG,EAAE;gBACV,MAAM,CAAC,GAAG,WAAW,CAAC;gBACtB,MAAM,sBAAsB,GAAG,CAAC,cAAc,EAAE,cAAc,EAAE,YAAY,EAAE,cAAc,CAAC,CAAC;gBAE9F,IAAI,OAAO,GAAG;oBACb;wBACC,KAAK,EAAE,QAAQ;wBACf,OAAO,EAAE,CAAC,cAAc,CAAC;qBACzB;oBACD;wBACC,KAAK,EAAE,QAAQ;wBACf,OAAO,EAAE,CAAC,cAAc,CAAC;qBACzB;oBACD;wBACC,KAAK,EAAE,MAAM;wBACb,OAAO,EAAE,CAAC,YAAY,CAAC;qBACvB;oBACD;wBACC,KAAK,EAAE,QAAQ;wBACf,OAAO,EAAE,CAAC,cAAc,CAAC;qBACzB;iBACD,CAAC;gBACF,IAAI,UAAU,GAAoC,IAAI,CAAC;gBAEvD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBACnD,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;oBACvC,IAAI,CAAC,CAAC,QAAQ,YAAY,mBAAmB,CAAC,EAAE;wBAC/C,SAAS;qBACT;oBAED,sDAAsD;oBACtD,MAAM,aAAa,GAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,sBAAsB,CAAC,CAAC;oBACvE,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE;wBAC9B,IAAI,CAAC,UAAU,EAAE;4BAChB,UAAU,GAAG,EAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAC,CAAC;4BAC1C,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;yBACzB;wBACD,UAAU,CAAC,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;qBACxE;iBACD;gBAED,OAAO,OAAO,CAAC;YAChB,CAAC;YACD,eAAe,EAAE,IAAI;SACrB,CAAC,CAAC;IACJ,CAAC;CACD;AAED,MAAM,4BAA6B,SAAQ,oBAAoB;IAG9D,YAAY,IAAY,EAAE,MAAqB,EAAE,OAAsB,IAAI;QAC1E,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;QAE1B;;;WAGG;QAEH,IAAI,CAAC,6BAA6B,GAAG,UAAU,CAAC,EAAE,CAAC;YAClD,IAAI,CAAC,CAAC,YAAY,mBAAmB,CAAC,IAAI,CAAC,CAAC,YAAY,mBAAmB,CAAC,EAAE;gBAC7E,uCAAuC;gBACvC,IAAI,CAAC,CAAC,QAAQ,KAAK,MAAM,EAAE;oBAC1B,OAAO,CAAC,CAAC,CAAC;iBACV;qBAAM,IAAI,CAAC,CAAC,QAAQ,KAAK,MAAM,EAAE;oBACjC,OAAO,CAAC,CAAC;iBACT;gBAED,wDAAwD;gBACxD,IAAI,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC,SAAS,EAAE;oBAChC,OAAO,CAAC,CAAC,CAAC;iBACV;qBAAM,IAAI,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC,SAAS,EAAE;oBACvC,OAAO,CAAC,CAAC;iBACT;gBAED,IAAI,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;gBACjE,OAAO,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;aACpC;YAED,OAAO,WAAW,CAAC,4BAA4B,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACvD,CAAC,CAAC;QAEF,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC,YAAY,CAAC;YACnC,IAAI,EAAE,GAAG,EAAE;gBACV,MAAM,CAAC,GAAG,WAAW,CAAC;gBACtB,MAAM,sBAAsB,GAAG,CAAC,CAAC,IAAI,CAAC,qBAAqB,CAAC,kBAAkB,CAAC,CAAC;gBAEhF,IAAI,OAAO,GAAG;oBACb;wBACC,KAAK,EAAE,WAAW;wBAClB,OAAO,EAAE,CAAC,cAAc,EAAE,YAAY,EAAE,cAAc,EAAE,eAAe,EAAE,sBAAsB,EAAE,wBAAwB,CAAC;qBAC1H;oBACD;wBACC,KAAK,EAAE,gBAAgB;wBACvB,OAAO,EAAE,CAAC,mBAAmB,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,oBAAoB,CAAC;qBACzH;iBACD,CAAC;gBACF,IAAI,UAAU,GAAG;oBAChB,KAAK,EAAE,MAAM;oBACb,OAAO,EAAE,CAAC,WAAW,EAAE,aAAa,EAAE,WAAW,CAAC;iBAClD,CAAC;gBACF,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;gBAEzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBACnD,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;oBACvC,IAAI,CAAC,CAAC,QAAQ,YAAY,mBAAmB,CAAC,EAAE;wBAC/C,SAAS;qBACT;oBAED,sDAAsD;oBACtD,MAAM,aAAa,GAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,sBAAsB,CAAC,CAAC;oBACvE,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE;wBAC9B,UAAU,CAAC,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;qBACxE;iBACD;gBAED,OAAO,OAAO,CAAC;YAChB,CAAC;YACD,eAAe,EAAE,IAAI;SACrB,CAAC,CAAC;IACJ,CAAC;CACD;AAaD,MAAM,aAAa;IA8BlB,YAAY,IAAY,EAAE,MAAqB;QAd/C,oBAAe,GAAiC,IAAI,CAAC;QACrD,qBAAgB,GAA4B,EAAE,CAAC;QAE/C,cAAS,GAAa,EAAE,CAAC;QACzB,0BAAqB,GAA0D,EAAE,CAAC;QAClF,0BAAqB,GAA0D,EAAE,CAAC;QAClF,0BAAqB,GAAa,EAAE,CAAC;QAG3B,qBAAgB,GAAkB,IAAI,CAAC;QACjD,UAAK,GAAkB,IAAI,CAAC;QAK3B,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;QACzB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QAErB,MAAM,IAAI,GAAG,IAAI,CAAC;QAElB,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,CAAC;QAChF,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC,YAAY,CAAC;YAClC,IAAI,EAAE;gBACL,OAAO,MAAM,CAAC,oBAAoB,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;YACtE,CAAC;YACD,eAAe,EAAE,IAAI;YACrB,KAAK,EAAE,IAAI;SACX,CAAC,CAAC;QACH,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QAEtC,IAAI,CAAC,iBAAiB,GAAG,EAAE,CAAC,QAAQ,CAAC;YACpC,IAAI,EAAE;gBACL,IAAI,KAAK,GAAG,MAAM,CAAC,aAAa,EAAE,EAAE,IAAI,GAAmB,EAAE,CAAC;gBAC9D,IAAI,KAAK,YAAY,OAAO,EAAE;oBAC7B,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;iBAC9B;gBACD,OAAO,IAAI,CAAC;YACb,CAAC;YACD,KAAK,EAAE,IAAI;YACX,eAAe,EAAE,IAAI;SACrB,CAAC,CAAC;QAEH,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC,QAAQ,CAAC;YAC9B,IAAI,EAAE;gBACL,MAAM,KAAK,GAAG,MAAM,CAAC,aAAa,EAAE,CAAC;gBACrC,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE;oBACxB,OAAO,KAAK,CAAC;iBACb;gBAED,MAAM,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;gBACnD,OAAO,iBAAiB;uBACpB,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,CAAC;uBAC9B,CAAC,WAAW,CAAC,OAAO,CAAC,iBAAiB,EAAE,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAA;YACrF,CAAC;YACD,KAAK,EAAE,IAAI;YACX,eAAe,EAAE,IAAI;SACrB,CAAC,CAAC;QAEH,IAAI,CAAC,kBAAkB,GAAG,EAAE,CAAC,YAAY,CAAC;YACzC,IAAI,EAAE;gBACL,gEAAgE;gBAChE,MAAM,KAAK,GAAG,MAAM,CAAC,aAAa,EAAE,CAAC;gBACrC,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE;oBACxB,OAAO,KAAK,CAAC;iBACb;gBACD,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YAC5B,CAAC;YACD,KAAK,EAAE,IAAI;YACX,eAAe,EAAE,IAAI;SACrB,CAAC,CAAC;QAEH,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC,YAAY,CAAC;YACjC,IAAI,EAAE;gBACL,IAAI,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,0BAA0B,EAAE,EAAE;oBAC/D,OAAO,KAAK,CAAC;iBACb;gBAED,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YAC1B,CAAC;YACD,eAAe,EAAE,IAAI;SACrB,CAAC,CAAC;QAEH,IAAI,CAAC,yBAAyB,GAAG,EAAE,CAAC,QAAQ,CAAC;YAC5C,IAAI,EAAE;gBACL,OAAO,MAAM,CAAC,aAAa,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACjD,CAAC;YACD,KAAK,EAAE,UAAU,QAAiB;gBACjC,MAAM,KAAK,GAAG,MAAM,CAAC,aAAa,EAAE,CAAC;gBACrC,IAAI,MAAM,CAAC,cAAc,EAAE,EAAE;oBAC5B,6EAA6E;oBAC7E,mCAAmC;oBACnC,MAAM,QAAQ,GAAG,KAAK,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBACxD,IAAI,QAAQ,EAAE;wBACb,IAAI,QAAQ,KAAK,KAAK,EAAE;4BACvB,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,wBAAwB;yBACpD;6BAAM,IAAI,QAAQ,KAAK,IAAI,EAAE;4BAC7B,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,yBAAyB;yBACxD;qBACD;yBAAM;wBACN,IAAI,QAAQ,KAAK,IAAI,EAAE;4BACtB,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,oBAAoB;yBACpD;6BAAM,IAAI,QAAQ,KAAK,IAAI,EAAE;4BAC7B,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,+CAA+C;yBAC9E;qBACD;oBACD,4BAA4B;oBAC5B,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,QAAQ,EAAE;wBACzC,IAAI,CAAC,yBAAyB,CAAC,iBAAiB,EAAE,CAAC;qBACnD;oBACD,OAAO;iBACP;gBAED,IAAI,QAAQ,EAAE;oBACb,uFAAuF;oBACvF,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;iBAClC;qBAAM;oBACN,oFAAoF;oBACpF,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBAE3B,gFAAgF;oBAChF,+DAA+D;oBAC/D,IAAI,KAAK,CAAC,YAAY,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;wBAClD,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;qBAClC;iBACD;YACF,CAAC;YACD,KAAK,EAAE,IAAI;YACX,eAAe,EAAE,IAAI;SACrB,CAAC,CAAC;QACH,qGAAqG;QAErG,IAAI,CAAC,kBAAkB,GAAG,EAAE,CAAC,YAAY,CAAC;YACzC,IAAI,EAAE;gBACL,MAAM,KAAK,GAAG,MAAM,CAAC,aAAa,EAAE,CAAC;gBACrC,IAAI,KAAK,EAAE;oBACV,OAAO,CAAC,KAAK,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,CAAC;iBACvD;gBACD,OAAO,KAAK,CAAC;YACd,CAAC;YACD,eAAe,EAAE,IAAI;SACrB,CAAC,CAAC;QAEH,IAAI,CAAC,kBAAkB,GAAG,EAAE,CAAC,QAAQ,CAAC;YACrC,IAAI,EAAE,GAAG,EAAE;gBACV,MAAM,CAAC,GAAG,WAAW,CAAC;gBACtB,IAAI,OAAO,GAAa,EAAE,CAAC;gBAE3B,IAAI,IAAI,CAAC,qBAAqB,CAAC,MAAM,GAAG,CAAC,EAAE;oBAC1C,OAAO,GAAG,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,CAAC;iBAC7C;gBAED,SAAS,kBAAkB,CAAC,CAAS,EAAE,CAAS;oBAC/C,OAAO,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;gBAC3B,CAAC;gBAED,SAAS,oBAAoB,CAC5B,YAAqC,EACrC,QAA2C,EAC3C,YAAmC;oBAEnC,OAAO,CAAC,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;wBAC1C,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;4BAClC,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;yBAC/D;wBAED,IAAI,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC;6BACvD,IAAI,CAAC,kBAAkB,CAAC,CAAC;wBAC3B,IAAI,QAAQ,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;wBACpC,IAAI,CAAC,QAAQ,EAAE;4BACd,QAAQ,GAAG,MAAM,GAAG,MAAM,CAAC;yBAC3B;wBACD,OAAO,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,aAAa,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC;oBACrE,CAAC,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;gBAC7B,CAAC;gBAED,mBAAmB;gBACnB,IAAI,gBAAgB,GAAG,CAAC,CAAC,SAAS,CACjC,IAAI,CAAC,qBAAqB,EAC1B,UAAU,WAA2C,EAAE,OAAO,EAAE,QAAQ;oBACvE,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE;wBACpC,OAAO;qBACP;oBAED,IAAI,UAAU,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;oBAEjC,uFAAuF;oBACvF,MAAM,gBAAgB,GAAG,OAAO,CAAC,cAAc,CAAC,YAAY,CAAC,IAAI,OAAO,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC;oBACxG,IAAI,gBAAgB,EAAE;wBACrB,UAAU,GAAG,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,YAAY,EAAE,cAAc,CAAC,CAAC;wBACjE,UAAU,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;qBACtC;oBAED,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,UAAU,MAAM;wBACrC,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE;4BACxC,WAAW,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;yBACzB;wBACD,WAAW,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;oBACpC,CAAC,CAAC,CAAC;gBACJ,CAAC,EAAE,EAAE,CACL,CAAC;gBAEF,IAAI,eAAe,GAAG,oBAAoB,CACzC,gBAAgB,EAChB,IAAI,CAAC,MAAM,CAAC,SAAS,EACrB,qBAAqB,CAAC,kBAAkB,CACxC,CAAC;gBACF,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;gBAErD,uBAAuB;gBACvB,IAAI,oBAAoB,GAAG,CAAC,CAAC,SAAS,CACrC,IAAI,CAAC,qBAAqB,EAC1B,UAAU,WAA2C,EAAE,OAAO,EAAE,QAAQ;oBACvE,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE;wBACpC,OAAO;qBACP;oBAED,IAAI,UAAU,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;oBAEjC,yFAAyF;oBACzF,+CAA+C;oBAC/C,IAAI,OAAO,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE;wBAC3C,UAAU,GAAG,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,YAAY,EAAE,cAAc,CAAC,CAAC;qBACjE;oBAED,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,UAAU,MAAM;wBACrC,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE;4BACxC,WAAW,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;yBACzB;wBACD,WAAW,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;oBACpC,CAAC,CAAC,CAAC;gBACJ,CAAC,EAAE,EAAE,CACL,CAAC;gBAEF,IAAI,mBAAmB,GAAG,oBAAoB,CAC7C,oBAAoB,EACpB,IAAI,CAAC,MAAM,CAAC,UAAU,EACtB,qBAAqB,CAAC,kBAAkB,CACxC,CAAC;gBACF,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,mBAAmB,CAAC,CAAC;gBAEzD,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;gBACpD,OAAO,OAAO,CAAC;YAChB,CAAC;YACD,eAAe,EAAE,IAAI;YACrB,KAAK,EAAE,IAAI;SACX,CAAC,CAAA;IACH,CAAC;IAED,2DAA2D;IAC3D,mBAAmB;QAClB,IAAI,IAAI,CAAC,gBAAgB,EAAE;YAC1B,OAAO,IAAI,CAAC,gBAAgB,CAAC;SAC7B;QACD,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,eAAe,CAAC,0BAA0B,EAAE;YAC5E,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,eAAe,CAAC,0BAA0B,CAAC;YACxE,OAAO,IAAI,CAAC,gBAAgB,CAAC;SAC7B;QACD,OAAO,IAAI,CAAC;IACb,CAAC;IAED,MAAM,CAAC,MAAM,CAAC,IAAY,EAAE,IAAuB,EAAE,MAAqB;QACzE,MAAM,UAAU,GAAG,IAAI,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACnD,UAAU,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;YACxD,OAAO,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;QAC3B,CAAC,CAAC,CAAC;QAEH,IAAI,IAAI,CAAC,WAAW,EAAE;YACrB,UAAU,CAAC,eAAe,GAAG,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;SACnE;QACD,IAAI,IAAI,CAAC,gBAAgB,EAAE;YAC1B,KAAK,IAAI,EAAE,IAAI,IAAI,CAAC,gBAAgB,EAAE;gBACrC,MAAM,SAAS,GAAG,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;gBAC1C,IAAI,SAAS,EAAE;oBACd,UAAU,CAAC,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;iBAC5C;aACD;SACD;QAED,IAAI,IAAI,CAAC,gBAAgB,EAAE;YAC1B,UAAU,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC;SACpD;QAED,IAAI,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE;YACtD,UAAU,CAAC,qBAAqB,GAAG,IAAI,CAAC,WAAW,CAAC;SACpD;QAED,IAAI,CAAC,UAAU,CAAC,eAAe,KAAK,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,gBAAgB,KAAK,IAAI,CAAC,EAAE;YACpG,UAAU,CAAC,gBAAgB,GAAG,gEAAgE;kBAC3F,kBAAkB,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;SACvC;QAED,IAAI,IAAI,CAAC,YAAY,EAAE;YACtB,UAAU,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;SAC5C;QAED,OAAO,UAAU,CAAC;IACnB,CAAC;IAED,MAAM,CAAC,cAAc,CAAC,KAAe;QACpC,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,EAAE;YACtB,OAAO,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;SAC3B;QACD,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC3E,CAAC;CACD;AAED,MAAM,uBAAwB,SAAQ,aAAa;IAClD,YAAY,MAAqB;QAChC,KAAK,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;QAC9B,IAAI,CAAC,KAAK,GAAG,0CAA0C;cACpD,kEAAkE;cAClE,4DAA4D,CAAC;QAEhE,4FAA4F;QAC5F,sDAAsD;QACtD,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC,QAAQ,CAAC,GAAG,EAAE;YAClC,OAAO,IAAI,CAAC,yBAAyB,EAAE,CAAC;QACzC,CAAC,CAAC,CAAC;IACJ,CAAC;CACD;AAED,MAAM,kBAAmB,SAAQ,aAAa;IAC7C,YAAY,MAAqB;QAChC,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACvB,IAAI,CAAC,KAAK,GAAG,mCAAmC;cAC7C,uEAAuE;cACvE,6EAA6E;cAC7E,sCAAsC,CAAC;QAE1C,iFAAiF;QACjF,+BAA+B;QAC/B,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC,QAAQ,CAAC,GAAG,EAAE;YAClC,OAAO,CAAC,IAAI,CAAC,yBAAyB,EAAE,CAAC;QAC1C,CAAC,CAAC,CAAC;IACJ,CAAC;CACD;AAED,MAAM,oBAAqB,SAAQ,aAAa;IAC/C,YAAY,QAAgB,EAAE,KAAU,EAAE,MAAqB;QAC9D,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACxB,MAAM,eAAe,GAAG,WAAW,CAAC;QACpC,IAAI,OAAO,GAAG,CAAC,OAAO,KAAK,CAAC,CAAC;QAC7B,MAAM,UAAU,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,OAAO,CAAC;QAEhF,IAAI,CAAC,KAAK,GAAG,iFAAiF;cAC3F,eAAe,GAAG,UAAU,GAAG,gEAAgE,CAAC;QAEnG,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC,QAAQ,CAAC,GAAG,EAAE;YAClC,OAAO,KAAK,CAAC;QACd,CAAC,CAAC,CAAC;IACJ,CAAC;CACD;AAED,MAAM,kBAAkB;IAQvB,YAAY,kBAAuC,EAAE,OAAgB,EAAE,WAAoB;QAC1F,MAAM,CAAC,GAAG,WAAW,CAAC;QAEtB,kBAAkB,GAAG,kBAAkB,IAAI,EAAE,CAAC;QAC9C,IAAI,CAAC,CAAC,OAAO,CAAC,kBAAkB,CAAC,EAAE;YAClC,kBAAkB,GAAG,EAAE,CAAC;SACxB;QAED,IAAI,CAAC,qBAAqB,GAAG,CAAC,CAAC,SAAS,CAAC,kBAAkB,EAAE,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;QAC5F,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC;QAEzE,IAAI,CAAC,mBAAmB,GAAG,IAAI,uBAAuB,CAAC,CAAC,CAAC,GAAG,CAAC,kBAAkB,EAAE,qBAAqB,EAAE,EAAE,CAAC,CAAC,CAAC;QAE7G,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC,QAAQ,CAAC,GAAG,EAAE;YACxC,2GAA2G;YAC3G,4CAA4C;YAC5C,IAAI,CAAC,eAAe,EAAE,CAAC;YAEvB,4GAA4G;YAC5G,IAAI,MAAM,GAAG,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,qBAAqB,EAAE,UAAU,UAAU;gBACxE,OAAO,UAAU,EAAE,CAAC;YACrB,CAAC,CAAC,CAAC;YAEH,MAAM,CAAC,mBAAmB,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,CAAC;YAE7D,OAAO,MAAM,CAAC;QACf,CAAC,CAAC,CAAC;QAEH,gCAAgC;QAChC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAAC,SAAS,EAAE,EAAC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,uBAAuB,EAAC,EAAC,CAAC,CAAC;QAE5F,oCAAoC;QACpC,IAAI,OAAO,IAAI,WAAW,EAAE;YAC3B,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,EAAE;gBAC/C,uDAAuD;gBACvD,MAAM,CAAC,IAAI,CACV,OAAO,EACP;oBACC,MAAM,EAAE,oCAAoC;oBAC5C,WAAW,EAAE,WAAW;oBACxB,WAAW,EAAE,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC;iBACnC,CACD,CAAA;YACF,CAAC,CAAC,CAAC;SACH;IACF,CAAC;IAED,aAAa,CAAI,IAAY,EAAE,YAAe;QAC7C,IAAI,IAAI,CAAC,qBAAqB,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE;YACpD,OAAO,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;SACxC;QAED,MAAM,aAAa,GAAG,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;QAClD,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC;QACjD,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,eAAe,EAAE,GAAG,CAAC,CAAC,CAAC;QAEjD,OAAO,aAAa,CAAC;IACtB,CAAC;CACD;AAED;;GAEG;AACH,MAAM,uBAAuB;IAI5B,YAAY,QAAkB,EAAE;QAFxB,gBAAW,GAA+C,EAAE,CAAC;QAGpE,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAChC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACtC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;SACjD;QACD,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;IACxC,CAAC;IAEO,iBAAiB,CAAC,IAAY;QACrC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE;YAC3C,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;SAC9C;QACD,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IAED,GAAG,CAAC,IAAY;QACf,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;YACzB,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;YACnC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SACtB;IACF,CAAC;IAED,MAAM,CAAC,IAAY;QAClB,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;YACxB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC;YAC9B,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;SACxB;IACF,CAAC;IAED,MAAM,CAAC,IAAY,EAAE,QAAiB;QACrC,IAAI,QAAQ,EAAE;YACb,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;SACf;aAAM;YACN,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;SAClB;IACF,CAAC;IAED,QAAQ,CAAC,IAAY;QACpB,OAAO,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC;IACvC,CAAC;IAED,IAAI,CAAC,IAAY;QAChB,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE;YAC3C,OAAO,KAAK,CAAC;SACb;QACD,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;IACtC,CAAC;IAED,IAAI;QACH,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;CACD;AA+CD,MAAM,2BAA2B,GAA4B,MAAM,CAAC;AA4CpE,MAAM,aAAa;IASlB;QARA,WAAM,GAAgC,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QAC3D,eAAU,GAAgC,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QAC/D,iBAAY,GAAkB,IAAI,CAAC;QACnC,UAAK,GAAsC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAC/D,YAAO,GAAuB;YAC7B,OAAO,EAAE,EAAE;SACX,CAAC;QAGD,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,SAAS,EAAE,EAAE;YACnC,IAAI,SAAS,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE;gBACpC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;aACtB;QACF,CAAC,CAAC,CAAC;IACJ,CAAC;IAED,sBAAsB,CAAC,aAAqB,EAAE,OAAmC;QAChF,IAAI,IAAI,CAAC,YAAY,KAAK,IAAI,EAAE;YAC/B,OAAO;SACP;QAED,sDAAsD;QACtD,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC;YAC1D,SAAS,EAAE,KAAK;YAChB,OAAO,EAAE,uCAAuC;YAEhD,6CAA6C;YAC7C,IAAI,EAAE;gBACL,KAAK,EAAE,EAAE;gBACT,KAAK,EAAE,KAAK;gBACZ,MAAM,EAAE,KAAK;aACb;YACD,IAAI,EAAE;gBACL,KAAK,EAAE,EAAE;gBACT,MAAM,EAAE,KAAK;aACb;YAED,QAAQ,EAAE;gBACT,EAAE,EAAE,aAAa;gBACjB,EAAE,EAAE,cAAc;gBAClB,MAAM,EAAE,KAAK;aACb;YACD,KAAK,EAAE;gBACN,OAAO,EAAE,wCAAwC;aACjD;SACD,CAAC,CAAC;QAEH,OAAO,CAAC,SAAS,CAAC,CAAC,UAAU,EAAE,EAAE;YAChC,IAAI,UAAU,IAAI,EAAE,EAAE;gBACrB,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,cAAc,EAAE,IAAI,CAAC,CAAC;gBAC7C,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC;gBACzC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;aACrB;iBAAM;gBACN,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,cAAc,EAAE,UAAU,CAAC,CAAC;gBACnD,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC;gBAC9C,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;aACrB;QACF,CAAC,CAAC,CAAC;QAEH,4FAA4F;QAC5F,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,YAAY,EAAE,EAAE;YACtC,IAAI,CAAC,YAAY,EAAE;gBAClB,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC;gBACzC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;aACrB;QACF,CAAC,CAAC,CAAC;IACJ,CAAC;IAAA,CAAC;CACF;AAOD,MAAM,kBAAmB,SAAQ,aAAa;IAY7C,YAAY,MAAqB;QAChC,KAAK,EAAE,CAAC;QAZT,YAAO,GAAG;YACT,OAAO,EAAE,EAAW;YACpB,QAAQ,EAAE,GAAG;SACb,CAAC;QAMM,gBAAW,GAAgC,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QAIvE,MAAM,CAAC,GAAG,WAAW,CAAC;QAEtB,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC;YACzB,IAAI,EAAE,mBAAmB;YACzB,OAAO,EAAE,gDAAgD;YACzD,KAAK,EAAE,GAAG,EAAE;gBACX,IAAI,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;qBACvD,MAAM,CAAC,UAAU,IAAI;oBACrB,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC;gBAC1B,CAAC,CAAC;qBACD,GAAG,CAAC,YAAY,CAAC;qBACjB,KAAK,EAAE,CAAC;gBAEV,iEAAiE;gBACjE,MAAM,IAAI,GAAG,CAAC,oBAAoB,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,cAAc,CAAC;gBACjF,MAAM,OAAO,GAAG,kFAAkF;sBAC/F,SAAS,GAAG,oBAAoB,CAAC,MAAM,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,CAAC;gBAC9D,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;oBACtB,OAAO;iBACP;gBAED,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBAEnB,MAAM,CAAC,kBAAkB,CAAC,oBAAoB,CAAC,CAAC;gBAEhD,KAAK,CAAC,oBAAoB,CAAC,MAAM,GAAG,uBAAuB,CAAC,CAAC;YAC9D,CAAC;YACD,QAAQ,EAAE,IAAI;SACd,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE;YAC9B,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE;gBAChC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;aACvB;QACF,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC,YAAY,CAAC;YACrC,IAAI,EAAE,GAAG,EAAE;gBACV,MAAM,MAAM,GAAG,MAAM,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC;gBAClD,OAAO,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC;qBACjC,MAAM,CAAC,UAAU,UAAyB;oBAC1C,IAAI,UAAU,CAAC,eAAe,KAAK,MAAM,EAAE;wBAC1C,OAAO,KAAK,CAAC;qBACb;oBACD,OAAO,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC;gBAChC,CAAC,CAAC;oBACF,6FAA6F;qBAC5F,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;qBACvC,MAAM,CAAC,UAAU,UAAU;oBAC3B,OAAO,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;gBACtC,CAAC,CAAC;qBACD,GAAG,CAAC,UAAU,UAAU;oBACxB,OAAO;wBACN,YAAY,EAAE,UAAU;wBACxB,YAAY,EAAE,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC;qBAClC,CAAC;gBACH,CAAC,CAAC;qBACD,KAAK,EAAE,CAAC;YACX,CAAC;YACD,eAAe,EAAE,IAAI;SACrB,CAAC,CAAC;QAEH,IAAI,CAAC,iBAAiB,GAAG,EAAE,CAAC,YAAY,CAAC;YACxC,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,UAAU,IAAI;gBACzD,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC;YAC1B,CAAC,CAAC,CAAC,MAAM;YACT,eAAe,EAAE,IAAI;SACrB,CAAC,CAAC;QAEH,MAAM,gBAAgB,GAAG,EAAE,CAAC,YAAY,CAAC;YACxC,IAAI,EAAE,GAAG,EAAE;gBACV,MAAM,KAAK,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;gBACvC,IAAI,KAAK,IAAI,CAAC,EAAE;oBACf,OAAO,mBAAmB,CAAC;iBAC3B;qBAAM;oBACN,IAAI,KAAK,KAAK,CAAC,EAAE;wBAChB,OAAO,qBAAqB,CAAC;qBAC7B;yBAAM;wBACN,OAAO,CAAC,SAAS,GAAG,KAAK,GAAG,eAAe,CAAC,CAAC;qBAC7C;iBACD;YACF,CAAC;YACD,eAAe,EAAE,IAAI;SACrB,CAAC,CAAC;QAEH,gBAAgB,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,EAAE;YACtC,IAAI,IAAI,CAAC,YAAY,KAAK,IAAI,EAAE;gBAC/B,OAAO;aACP;YAED,IAAI,CAAC,YAAY;iBACf,OAAO,CAAC,YAAY,CAAC;iBACrB,IAAI,CAAC,sDAAsD,CAAC;iBAC5D,IAAI,CAAC,OAAO,CAAC,CAAC;QACjB,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,qBAAqB,GAAG,EAAE,CAAC,YAAY,CAAC;YAC5C,IAAI,EAAE,GAAG,EAAE;gBACV,OAAO,IAAI,CAAC,iBAAiB,EAAE,GAAG,CAAC,CAAC;YACrC,CAAC;YACD,eAAe,EAAE,IAAI;SACrB,CAAC,CAAA;IACH,CAAC;IAED,MAAM;QACL,+CAA+C;QAC/C,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;QACpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACtC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,EAAE;gBAC1B,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;aAC3B;SACD;IACF,CAAC;CACD;AAED,MAAM,sBAAuB,SAAQ,aAAa;IAoBjD,YAAY,MAAqB;QAChC,KAAK,EAAE,CAAC;QAbT,qBAAgB,GAAY,IAAI,CAAC;QACjC,YAAO,GAAuB;YAC7B,QAAQ,EAAE,GAAG;SACb,CAAC;QAGF,oBAAe,GAA+B,EAAE,CAAC,UAAU,CAAC,sBAAsB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACjG,sBAAiB,GAA+B,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QAOjE,MAAM,CAAC,GAAG,WAAW,CAAC;QACtB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QAErB,MAAM,YAAY,GAAG,CAAC,cAAc,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;QAE5D,IAAI,iBAAiB,GAAG,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QAC1C,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC,QAAQ,CAAC;YACjC,IAAI,EAAE;gBACL,OAAO,iBAAiB,EAAE,CAAC;YAC5B,CAAC;YACD,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE;gBAChB,KAAK,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;gBAEzB,4CAA4C;gBAC5C,IAAI,KAAK,GAAG,IAAI,CAAC,eAAe,EAC/B,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC;gBAElC,8FAA8F;gBAC9F,qCAAqC;gBACrC,MAAM,iBAAiB,GAAG,cAAc,CAAC;gBACzC,qFAAqF;gBACrF,iFAAiF;gBACjF,MAAM,oBAAoB,GAAG,gBAAgB,CAAC;gBAC9C,0GAA0G;gBAC1G,MAAM,qBAAqB,GAAG,WAAW,CAAC;gBAE1C,IAAI,YAAY,GAAG,KAAK,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;gBAClD,IAAI,eAAe,GAAG,KAAK,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;gBAExD,IAAI,YAAY,KAAK,IAAI,EAAE;oBAC1B,KAAK,CAAC,sBAAsB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;oBAC3C,OAAO,CAAC,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,GAAG,8BAA8B,CAAC,CAAC;iBAE3F;qBAAM,IAAI,KAAK,CAAC,KAAK,CAAC,qBAAqB,CAAC,KAAK,IAAI,EAAE;oBACvD,KAAK,CAAC,sBAAsB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;oBAC3C,OAAO,CAAC,8DAA8D,CAAC,CAAC;iBAExE;qBAAM,IAAI,MAAM,CAAC,gBAAgB,CAAC,KAAK,CAAC,EAAE;oBAC1C,6BAA6B;oBAC7B,KAAK,CAAC,sBAAsB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;oBAC3C,OAAO,CAAC,iCAAiC,CAAC,CAAC;iBAE3C;qBAAM,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE;oBAC1C,KAAK,CAAC,sBAAsB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;oBAC3C,OAAO,CAAC,2DAA2D,CAAC,CAAC;iBAErE;qBAAM,IAAI,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;oBAC5C,KAAK,CAAC,sBAAsB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;oBAC3C,OAAO,CAAC,0DAA0D,CAAC,CAAC;iBAEpE;qBAAM,IAAI,eAAe,KAAK,IAAI,EAAE;oBACpC,KAAK,CAAC,sBAAsB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;oBAC5C,OAAO,CAAC,4FAA4F,CAAC,CAAC;iBAEtG;qBAAM,IAAI,KAAK,KAAK,EAAE,EAAE;oBACxB,mCAAmC;oBACnC,KAAK,CAAC,sBAAsB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;oBAC3C,OAAO,CAAC,EAAE,CAAC,CAAC;iBAEZ;qBAAM;oBACN,KAAK,CAAC,sBAAsB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;oBAC3C,OAAO,CAAC,EAAE,CAAC,CAAC;iBACZ;gBAED,iBAAiB,CAAC,KAAK,CAAC,CAAC;YAC1B,CAAC;SACD,CAAC,CAAC;QAEH,MAAM,gBAAgB,GAAG,CAAC,sBAAsB,CAAC,MAAM,CAAC,KAAK,EAAE,sBAAsB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACrG,IAAI,CAAC,kBAAkB,GAAG,EAAE,CAAC,YAAY,CAAC,GAAG,EAAE;YAC9C,OAAO,CAAC,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;QAChE,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,OAAO,CAAC,OAAO,GAAG,CAAC;gBACvB,IAAI,EAAE,gBAAgB;gBACtB,OAAO,EAAE,uBAAuB;gBAChC,KAAK,EAAE,GAAG,EAAE;oBACX,IAAI,CAAC,SAAS,EAAE,CAAC;gBAClB,CAAC;gBACD,QAAQ,EAAE,IAAI;aACd,CAAC,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,KAAwB,EAAE,EAAW;QAC3C,4CAA4C;QAC5C,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;IACzB,CAAC;IAED,SAAS;QACR,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,EAAE;YAC/B,OAAO;SACP;QACD,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;QACzE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAEnB,oDAAoD;QACpD,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,KAAK,aAAa,CAAC,QAAQ,CAAC,EAAE;YAC7E,KAAK,CAAC,kBAAkB,CAAC,CAAC;SAC1B;aAAM;YACN,KAAK,CAAC,2BAA2B,GAAG,QAAQ,CAAC,eAAe,EAAE,GAAG,aAAa,CAAC,CAAC;SAChF;IACF,CAAC;;AA1HsB,6BAAM,GAAG;IAC/B,KAAK,EAAE,OAAO;IACd,KAAK,EAAE,OAAO;IACd,MAAM,EAAE,QAAQ;IAChB,KAAK,EAAE,OAAO;CACd,CAAC;AAwHH,MAAM,gBAAiB,SAAQ,aAAa;IAiB3C,YAAY,MAAqB;QAChC,KAAK,EAAE,CAAC;QAjBT,aAAQ,GAA+B,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QACzD,oBAAe,GAA+B,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QAChE,mBAAc,GAAuC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAKzE,0BAAqB,GAA+B,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QAEtE,iCAA4B,GAA+B,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QAGrE,2BAAsB,GAAY,KAAK,CAAC;QAM/C,MAAM,CAAC,GAAG,WAAW,CAAC;QACtB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QAErB,IAAI,CAAC,OAAO,CAAC,QAAQ,GAAG,GAAG,CAAC;QAC5B,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC;YACzB,IAAI,EAAE,UAAU;YAChB,OAAO,EAAE,uBAAuB;YAChC,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;YAChC,QAAQ,EAAE,IAAI;SACd,CAAC,CAAC;QAEH,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,EAAC,SAAS,EAAE,EAAE,EAAC,CAAC,CAAC;QAC7C,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAC,SAAS,EAAE,EAAE,EAAC,CAAC,CAAC;QAEtC,gGAAgG;QAChG,MAAM,sBAAsB,GAAG,SAAS,CAAC;QACzC,MAAM,qBAAqB,GAAG,IAAI,MAAM,CAAC,IAAI,GAAG,sBAAsB,GAAG,GAAG,EAAE,GAAG,CAAC,CAAC;QACnF,MAAM,gBAAgB,GAAG,UAAU,CAAC;QAEpC,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC,QAAQ,CAAC,GAAG,EAAE;YACnC,IAAI,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC;YAClC,IAAI,OAAO,GAAG,IAAI,CAAC,qBAAqB,CAAC;YAEzC,yBAAyB;YACzB,IAAI,IAAI,KAAK,EAAE,EAAE;gBAChB,OAAO,CAAC,EAAE,CAAC,CAAC;gBACZ,OAAO,KAAK,CAAC;aACb;YAED,2CAA2C;YAC3C,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;YACvD,IAAI,YAAY,KAAK,IAAI,EAAE;gBAC1B,IAAI,eAAe,GAAG,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;gBAC3C,IAAI,eAAe,KAAK,GAAG,EAAE;oBAC5B,eAAe,GAAG,OAAO,CAAC;iBAC1B;gBACD,OAAO,CACN,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC,eAAe,CAAC,GAAG,kCAAkC;sBAC9E,wEAAwE,CAC1E,CAAC;gBACF,OAAO,KAAK,CAAC;aACb;YAED,6EAA6E;YAC7E,IAAI,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;gBAChC,OAAO,CAAC,8EAA8E,CAAC,CAAC;gBACxF,OAAO,KAAK,CAAC;aACb;YAED,+BAA+B;YAC/B,IAAI,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACxC,IAAI,YAAY,EAAE;gBACjB,OAAO,CAAC,sBAAsB,CAAC,CAAC;gBAChC,OAAO,KAAK,CAAC;aACb;YAED,sEAAsE;YACtE,oDAAoD;YACpD,IAAI,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE;gBAClC,OAAO,CAAC,oDAAoD,CAAC,CAAC;gBAC9D,OAAO,KAAK,CAAC;aACb;YAED,OAAO,CAAC,EAAE,CAAC,CAAC;YACZ,OAAO,IAAI,CAAC;QACb,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,kBAAkB,GAAG,EAAE,CAAC,QAAQ,CAAC,GAAG,EAAE;YAC1C,IAAI,IAAI,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;YAClC,IAAI,OAAO,GAAG,IAAI,CAAC,4BAA4B,CAAC;YAChD,OAAO,gBAAgB,CAAC,mBAAmB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC5D,CAAC,CAAC,CAAC;QAEH,2FAA2F;QAC3F,IAAI,gBAAgB,GAAkB,IAAI,CAAC;QAC3C,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,EAAE;YAC9C,IAAI,IAAI,GAAG,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;YAEpC,6EAA6E;YAC7E,IAAI,YAAY,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnC,IAAI,CAAC,YAAY,KAAK,EAAE,CAAC,IAAI,CAAC,YAAY,KAAK,gBAAgB,CAAC,EAAE;gBACjE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;aACpB;YACD,gBAAgB,GAAG,IAAI,CAAC;QACzB,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,kBAAkB,GAAG,EAAE,CAAC,YAAY,CAAC;YACzC,IAAI,EAAE,GAAG,EAAE;gBACV,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,KAAK,EAAE,CAAC;uBAC9D,IAAI,CAAC,WAAW,EAAE,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;YACrD,CAAC;YACD,eAAe,EAAE,IAAI;SACrB,CAAC,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,mBAAmB,CAAC,IAAY,EAAE,iBAA6C;QACrF,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAEnB,IAAI,IAAI,KAAK,EAAE,EAAE;YAChB,iBAAiB,CAAC,EAAE,CAAC,CAAC;YACtB,OAAO,KAAK,CAAC;SACb;QAED,2FAA2F;QAC3F,0EAA0E;QAC1E,IAAI,gBAAgB,CAAC,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YACxD,iBAAiB,CAAC,uEAAuE,CAAC,CAAC;YAC3F,OAAO,KAAK,CAAC;SACb;QAED,iBAAiB,CAAC,EAAE,CAAC,CAAC;QACtB,OAAO,IAAI,CAAC;IACb,CAAC;IAED,MAAM,CAAC,KAAwB,EAAE,EAAO;QACvC,uCAAuC;QACvC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QAClB,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;QACzB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QAE1B,IAAI,CAAC,IAAI,CAAC,sBAAsB,EAAE;YACjC,IAAI,CAAC,sBAAsB,CAAC,4BAA4B,EAAE,IAAI,CAAC,4BAA4B,CAAC,CAAC;YAC7F,IAAI,CAAC,sBAAsB,CAAC,oBAAoB,EAAE,IAAI,CAAC,qBAAqB,CAAC,CAAC;YAC9E,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC;SACnC;IACF,CAAC;IAED,SAAS;QACR,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,EAAE;YAC/B,OAAO;SACP;QAED,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAEnB,IAAI,IAAI,GAAG,EAAE,CAAC;QACd,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;QACzC,IAAI,UAAU,EAAE;YACf,IAAI,GAAG,UAAU,CAAC,kBAAkB,EAAE,CAAC;SACvC;QAED,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,eAAe,EAAE,EAAE,IAAI,CAAC,CAAC;IACpE,CAAC;;AAjJuB,wCAAuB,GAAG,aAAa,CAAC;AAoJjE,MAAM,mBAAoB,SAAQ,aAAa;IAM9C,YAAY,MAAqB;QAChC,KAAK,EAAE,CAAC;QAHD,mBAAc,GAA+C,EAAE,CAAC;QAIvE,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QAErB,IAAI,CAAC,OAAO,CAAC,QAAQ,GAAG,GAAG,CAAC;QAC5B,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC;YACzB,IAAI,EAAE,aAAa;YACnB,OAAO,EAAE,uBAAuB;YAChC,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;YAChC,QAAQ,EAAE,IAAI;SACd,CAAC,CAAC;QAEH,IAAI,CAAC,qBAAqB,GAAG,EAAE,CAAC,YAAY,CAAC;YAC5C,IAAI,EAAE,GAAG,EAAE;gBACV,OAAO,IAAI,CAAC,gBAAgB,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;YAC3C,CAAC;YACD,eAAe,EAAE,IAAI;SACrB,CAAC,CAAC;IACJ,CAAC;IAED,SAAS;QACR,MAAM,CAAC,GAAG,WAAW,CAAC;QACtB,IAAI,aAAa,GAAc,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAEvD,oDAAoD;QACpD,IAAI,oBAAoB,GAAc,CAAC,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC;QAClF,IAAI,oBAAoB,CAAC,MAAM,GAAG,CAAC,EAAE;YACpC,MAAM,SAAS,GAAG,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;YAE/C,MAAM,OAAO,GAAG,uCAAuC,GAAG,CAAC,CAAA,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,WAAW,EAAE,KAAI,QAAQ,CAAC;kBAC7F,6FAA6F;kBAC7F,qEAAqE;kBACrE,WAAW,GAAG,oBAAoB,CAAC,MAAM,GAAG,mBAAmB,CAAC;YACnE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;gBACtB,OAAO;aACP;SACD;QACD,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;QACvC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACpB,CAAC;IAED,MAAM,CAAC,KAAwB,EAAE,EAAO;QACvC,yCAAyC;QACzC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE,UAAU,UAAU;YAC5D,UAAU,CAAC,KAAK,CAAC,CAAC;QACnB,CAAC,CAAC,CAAC;IACJ,CAAC;IAED,iBAAiB,CAAC,QAAgB;QACjC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE;YAClD,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;SACrD;QACD,OAAO,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;IACtC,CAAC;IAEO,gBAAgB;QACvB,MAAM,CAAC,GAAG,WAAW,CAAC;QACtB,IAAI,aAAa,GAAc,EAAE,CAAC;QAClC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE;YACvC,IAAI,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;gBAC1C,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aACzB;QACF,CAAC,CAAC,CAAC;QACH,OAAO,aAAa,CAAC;IACtB,CAAC;CACD;AAED,MAAM,mBAAoB,SAAQ,aAAa;IAS9C,YAAY,MAAqB;QAChC,KAAK,EAAE,CAAC;QAPT,iBAAY,GAAuC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAEvE,mBAAc,GAA+B,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QAC/D,iCAA4B,GAA+B,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QAC7E,yBAAoB,GAAY,KAAK,CAAC;QAIrC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QAErB,IAAI,CAAC,OAAO,CAAC,QAAQ,GAAG,GAAG,CAAC;QAC5B,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC;YACzB,IAAI,EAAE,aAAa;YACnB,OAAO,EAAE,uBAAuB;YAChC,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;YAChC,QAAQ,EAAE,IAAI;SACd,CAAC,CAAC;QAEH,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE;YACpC,IAAI,IAAI,EAAE;gBACT,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;aACxC;QACF,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,sBAAsB,GAAG,EAAE,CAAC,QAAQ,CAAC;YACzC,IAAI,EAAE,GAAG,EAAE;gBACV,OAAO,gBAAgB,CAAC,mBAAmB,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,IAAI,CAAC,4BAA4B,CAAC,CAAC;YACvG,CAAC;YACD,eAAe,EAAE,IAAI;SACrB,CAAC,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,KAAwB,EAAE,EAAO;QACvC,MAAM,CAAC,GAAG,WAAW,CAAC;QAEtB,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE;YAC/B,IAAI,CAAC,sBAAsB,CAAC,+BAA+B,EAAE,IAAI,CAAC,4BAA4B,CAAC,CAAC;YAChG,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;SACjC;QAED,wEAAwE;QACxE,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC;QAClD,IAAI,aAAa,IAAI,CAAC,aAAa,YAAY,OAAO,CAAC,EAAE;YACxD,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC;SACjC;aAAM;YACN,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC;SACvD;IACF,CAAC;IAED,SAAS;QACR,IAAI,CAAC,IAAI,CAAC,sBAAsB,EAAE,EAAE;YACnC,OAAO;SACP;QACD,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QACzC,IAAI,YAAY,EAAE;YACjB,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC,IAAI,EAAE,CAAC;YAC1C,YAAY,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;YAC/B,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,UAAU,EAAE,CAAC;SACvC;QACD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACpB,CAAC;CACD;AAED,MAAM,2BAA2B;IAAjC;QACS,UAAK,GAAgD,EAAE,CAAC;IAwDjE,CAAC;IAtDO,QAAQ,CAAC,IAAY;QAC3B,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE;YACrC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;YACxC,OAAO,KAAK,CAAC;SACb;QACD,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;IAC3B,CAAC;IAEM,GAAG,CAAC,IAAY;QACtB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE;YACrC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;SACvC;aAAM;YACN,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;SACvB;IACF,CAAC;IAEM,MAAM,CAAC,IAAY;QACzB,IAAI,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE;YACpC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC;SACxB;IACF,CAAC;IAEM,KAAK;QACX,MAAM,CAAC,GAAG,WAAW,CAAC;QACtB,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,OAAO,EAAE,EAAE;YACjC,OAAO,CAAC,KAAK,CAAC,CAAC;QAChB,CAAC,CAAC,CAAC;IACJ,CAAC;IAEM,qBAAqB,CAAC,IAAY;QACxC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE;YACrC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;SACxC;QACD,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACzB,CAAC;IAEM,OAAO;QACb,MAAM,CAAC,GAAG,WAAW,CAAC;QACtB,mDAAmD;QACnD,OAAO,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,OAAO,EAAE,EAAE;YACtC,OAAO,CAAC,OAAO,EAAE,CAAC;QACnB,CAAC,CAAC,CAAC;IACJ,CAAC;IAEM,WAAW,CAAI,SAAY;QACjC,MAAM,CAAC,GAAG,WAAW,CAAC;QACtB,IAAI,MAAM,GAAsB,EAAE,CAAC;QACnC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE;YACvC,IAAI,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,KAAK,WAAW,CAAC,EAAE;gBAC/C,MAAM,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC;aACzB;QACF,CAAC,CAAC,CAAC;QACH,OAAO,MAAM,CAAC;IACf,CAAC;CACD;AAED,MAAM,iCAAiC;IAItC;QACC,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC,UAAU,CAA0B,2BAA2B,CAAC,CAAC;QACpF,IAAI,CAAC,eAAe,GAAG,IAAI,2BAA2B,EAAE,CAAC;IAC1D,CAAC;IAED,aAAa;QACZ,IAAI,QAAQ,GAAgC,IAAI,CAAC,eAAe,CAAC,WAAW,CAAO,IAAI,CAAC,CAAC;QACzF,IAAI,WAAW,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;YAClC,QAAQ,GAAG,IAAI,CAAC;SAChB;QACD,OAAO;YACN,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE;YACzB,eAAe,EAAE,QAAQ;SACzB,CAAC;IACH,CAAC;IAED;;OAEG;IACH,kBAAkB;QACjB,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,CAAC;IACxC,CAAC;CACD;AAED,MAAM,iBAAiB;IActB,YAAY,aAA+C,EAAE,KAAuC;QAZ5F,oBAAe,GAKnB,EAAE,CAAC;QAQN,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC,QAAQ,CAAC,GAAG,EAAE;YACnC,OAAO,KAAK,EAAE,CAAC;QAChB,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC,QAAQ,CAAC;YAC9B,IAAI,EAAE,GAAG,EAAE;gBACV,MAAM,KAAK,GAAG,aAAa,EAAE,CAAC;gBAC9B,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE;oBAC5C,OAAO,IAAI,CAAC;iBACZ;gBACD,IAAI,KAAK,YAAY,OAAO,EAAE;oBAC7B,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;oBAC5B,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;wBACrB,OAAO,IAAI,CAAC;qBACZ;oBACD,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;iBAChB;gBACD,OAAO,IAAI,CAAC;YACb,CAAC;YACD,KAAK,EAAE,CAAC,OAAuB,EAAE,EAAE;gBAClC,MAAM,KAAK,GAAG,aAAa,EAAE,CAAC;gBAC9B,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,IAAI,CAAC,CAAC,KAAK,YAAY,OAAO,CAAC,EAAE;oBAC3E,OAAO;iBACP;gBAED,oCAAoC;gBACpC,IAAI,OAAO,KAAK,IAAI,EAAE;oBACrB,KAAK,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;oBACxB,OAAO;iBACP;gBAED,eAAe;gBACf,IAAI,CAAC,CAAC,OAAO,YAAY,OAAO,CAAC,EAAE;oBAClC,OAAO;iBACP;gBAED,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,EAAE;oBACxC,OAAO;iBACP;gBAED,mCAAmC;gBACnC,MAAM,cAAc,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;gBAC5E,IAAI,cAAc,KAAK,IAAI,EAAE;oBAC5B,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;iBACnC;gBAED,8EAA8E;gBAC9E,IAAI,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE;oBACxC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;iBAC5B;gBACD,sCAAsC;gBACtC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YAC9B,CAAC;SACD,CAAC,CAAC;QAEH,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC,YAAY,CAAC,GAAG,EAAE;YACrC,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;YACnC,OAAO,CAAC,KAAK,KAAK,IAAI,CAAC,IAAI,KAAK,CAAC,YAAY,CAAC;QAC/C,CAAC,CAAC,CAAC;IACJ,CAAC;IAED,iEAAiE;IACjE,YAAY,CAAC,IAAa;QACzB,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;QACjC,IAAI,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE;YAC1G,OAAO,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC,oBAAoB,CAAC;SAC9D;QAED,IAAI,oBAAoB,GAAG,EAAE,CAAC,QAAQ,CAAU;YAC/C,IAAI,EAAE,GAAG,EAAE;gBACV,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;gBACnC,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE;oBAC5C,OAAO,KAAK,CAAC;iBACb;gBACD,IAAI,KAAK,YAAY,OAAO,EAAE;oBAC7B,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;iBAC1C;gBACD,OAAO,KAAK,CAAC;YACd,CAAC;YACD,KAAK,EAAE,CAAC,cAAc,EAAE,EAAE;gBACzB,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;gBACnC,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,IAAI,CAAC,CAAC,KAAK,YAAY,OAAO,CAAC,EAAE;oBAC3E,OAAO;iBACP;gBACD,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAE;oBACrC,OAAO;iBACP;gBAED,MAAM,cAAc,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBAC1D,IAAI,cAAc,KAAK,cAAc,EAAE;oBACtC,IAAI,cAAc,EAAE;wBACnB,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;qBACvB;yBAAM;wBACN,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;qBACzB;iBACD;YACF,CAAC;SACD,CAAC,CAAC;QAEH,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,GAAG;YACnC,IAAI,EAAE,IAAI;YACV,oBAAoB,EAAE,oBAAoB;SAC1C,CAAC;QAEF,OAAO,oBAAoB,CAAC;IAC7B,CAAC;IAED,oBAAoB,CAAC,IAAa;QACjC,8FAA8F;QAC9F,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;QACnC,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE;YAC5C,OAAO,KAAK,CAAC;SACb;QACD,OAAO,CAAC,IAAI,YAAY,OAAO,CAAC,CAAC;IAClC,CAAC;CACD;AAED,MAAM,sBAAuB,SAAQ,aAAa;IAkBjD,YAAY,MAAqB;QAChC,KAAK,EAAE,CAAC;QAhBT,kBAAa,GAA4C,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAErE,kBAAa,GAA8D,EAAE,CAAC;QAOrE,2BAAsB,GAA4C;YAClF,iEAAiE;YACjE,2CAA2C;YAC3C,oBAAoB,EAAE,MAAM;SAC5B,CAAC;QAID,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC,eAAe,CAAC,EAAiB,CAAC,CAAC;QAE3D,IAAI,CAAC,OAAO,CAAC,QAAQ,GAAG,GAAG,CAAC;QAC5B,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC;YACzB,IAAI,EAAE,cAAc;YACpB,OAAO,EAAE,uBAAuB;YAChC,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;YAChC,QAAQ,EAAE,KAAK;SACf,CAAC,CAAC;QAEH,wDAAwD;QACxD,0BAA0B;QAC1B,MAAM,UAAU,GAAG,MAAM,CAAC,aAAa,EAAE,CAAC;QAC1C,MAAM,kBAAkB,GAAG,IAAI,iCAAiC,EAAE,CAAC;QACnE,kBAAkB,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAEpC,MAAM,aAAa,GAAG,IAAI,iCAAiC,EAAE,CAAC;QAC9D,IAAI,CAAC,qBAAqB,GAAG,EAAE,CAAC,QAAQ,CAAC,GAAG,EAAE;YAC7C,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;YAC3C,IAAI,aAAa,KAAK,IAAI,EAAE;gBAC3B,OAAO,aAAa,CAAC;aACrB;YACD,IAAI,aAAa,KAAK,UAAU,EAAE;gBACjC,OAAO,kBAAkB,CAAC;aAC1B;YACD,MAAM,OAAO,GAAG,aAAa,CAAC,KAAK,EAAE,CAAC;YACtC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE;gBAChD,kEAAkE;gBAClE,MAAM,eAAe,GAAG,IAAI,iCAAiC,EAAE,CAAC;gBAEhE,2CAA2C;gBAC3C,IAAI,IAAI,CAAC,sBAAsB,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE;oBACxD,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC,CAAC;iBAC/D;gBAED,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,GAAG,eAAe,CAAC;aAC9C;YACD,OAAO,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QACpC,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,oBAAoB,GAAG,EAAE,CAAC,QAAQ,CAAC;YACvC,IAAI,EAAE,GAAG,EAAE;gBACV,OAAO,IAAI,CAAC,qBAAqB,EAAE,CAAC,QAAQ,EAAE,CAAC;YAChD,CAAC;YACD,KAAK,EAAE,CAAC,QAAgB,EAAE,EAAE;gBAC3B,IAAI,CAAC,qBAAqB,EAAE,CAAC,QAAQ,CAAC,QAAmC,CAAC,CAAC;YAC5E,CAAC;SACD,CAAC,CAAC;QAEH,IAAI,CAAC,qBAAqB,GAAG,EAAE,CAAC,QAAQ,CAAC,GAAG,EAAE;YAC7C,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;YACnC,IAAI,KAAK,IAAI,IAAI,EAAE;gBAClB,OAAO,IAAI,CAAC;aACZ;YACD,OAAO,CAAC,CACP,CAAC,KAAK,KAAK,UAAU,CAAC;mBACnB,CAAC,CAAC,KAAK,YAAY,OAAO,CAAC,IAAI,KAAK,CAAC,YAAY,CAAC,CACrD,CAAC;QACH,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,qBAAqB,CAAC;IACzD,CAAC;IAED,MAAM,CAAC,KAAwB,EAAE,EAAO;QACvC,MAAM,CAAC,GAAG,WAAW,CAAC;QAEtB,+CAA+C;QAC/C,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,kBAAkB,EAAE,CAAC,QAAiC,EAAE,OAAO,EAAE,EAAE;YACxF,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;gBAChC,OAAO;aACP;YACD,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE;gBAChD,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,GAAG,IAAI,iCAAiC,EAAE,CAAC;aACtE;YACD,MAAM,kBAAkB,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;YACvD,kBAAkB,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;YAC/C,kBAAkB,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;YAC3C,IAAI,QAAQ,CAAC,eAAe,KAAK,IAAI,EAAE;gBACtC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,eAAe,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;oBACvD,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;wBAC/B,OAAO;qBACP;oBACD,kBAAkB,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;gBAChD,CAAC,CAAC,CAAC;aACH;QACF,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,gBAAgB,EAAE,CAAC,CAAC;QAEjE,+DAA+D;QAC/D,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC;QAClD,IAAI,aAAa,EAAE;YAClB,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC;SAClC;aAAM;YACN,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC;SACxD;IACF,CAAC;IAED,SAAS;QACR,qBAAqB;QACrB,MAAM,CAAC,GAAG,WAAW,CAAC;QACtB,IAAI,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC;QAC9C,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,kBAAkB,EAAE,OAAO,EAAE,EAAE;;YAC7D,IAAI,OAAO,OAAO,KAAK,WAAW,EAAE;gBACnC,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;aACpE;YAED,MAAM,QAAQ,GAAG,kBAAkB,CAAC,QAAQ,EAAE,CAAC;YAC/C,MAAM,uBAAuB,GAAG,MAAA,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC,mCAAI,2BAA2B,CAAC;YACpG,IAAI,CAAC,QAAQ,KAAK,uBAAuB,CAAC,IAAI,CAAC,kBAAkB,CAAC,kBAAkB,EAAE,EAAE;gBACvF,+EAA+E;gBAC/E,4DAA4D;gBAC5D,OAAO,QAAQ,CAAC,OAAO,CAAC,CAAC;aACzB;iBAAM;gBACN,QAAQ,CAAC,OAAO,CAAC,GAAG,kBAAkB,CAAC,aAAa,EAAE,CAAC;aACvD;QACF,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACpB,CAAC;IAED,mBAAmB,CAAC,IAAkB;QACrC,OAAO,IAAI,CAAC,qBAAqB,EAAE,CAAC,eAAe,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IACxF,CAAC;IAED,aAAa,CAAC,IAAkB;QAC/B,OAAO,IAAI,CAAC,oBAAoB,EAAE,KAAK,mBAAmB,CAAC;IAC5D,CAAC;IAED,UAAU,CAAC,KAAmB;QAC7B,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAC3B,CAAC;IAED,WAAW,CAAC,KAAmB;QAC9B,OAAO,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IACrD,CAAC;CACD;AAED,MAAM,aAAa;IA+GlB,YAAY,IAAgB;QAnG5B,qCAAqC;QAC5B,wBAAmB,GAA4B;YACvD,aAAa,CAAC,aAAa;YAC3B,aAAa,CAAC,kBAAkB;YAChC,aAAa,CAAC,QAAQ;SACtB,CAAC;QAYM,2BAAsB,GAAkB,EAAE,CAAC;QAGlC,4BAAuB,GAAkB,EAAE,CAAC;QAO7D,qBAAgB,GAA+B,EAAE,CAAC;QAgB1C,gBAAW,GAAgC,EAAE,CAAC;QAyDrD,MAAM,IAAI,GAAG,IAAI,CAAC;QAClB,MAAM,CAAC,GAAG,WAAW,CAAC;QAEtB,IAAI,CAAC,kBAAkB,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QAC/C,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC,QAAQ,CAAC,GAAG,EAAE;YAChC,OAAO,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAClC,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,eAAe,GAAG,IAAI,kBAAkB,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,sBAAsB,CAAC,CAAC;QAEpH,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC;QACzC,IAAI,CAAC,qBAAqB,GAAG,WAAW,CAAC,aAAa,CAAC,uBAAuB,EAAE,IAAI,CAAC,CAAC;QACtF,IAAI,CAAC,oBAAoB,GAAG,WAAW,CAAC,aAAa,CAAC,sBAAsB,EAAE,KAAK,CAAC,CAAC;QACrF,IAAI,CAAC,mBAAmB,GAAG,EAAE,CAAC,QAAQ,CAAU,IAAI,CAAC,oBAAoB,CAAC,CAAC;QAC3E,IAAI,CAAC,sBAAsB,GAAG,WAAW,CAAC,aAAa,CAAC,wBAAwB,EAAE,KAAK,CAAC,CAAC;QACzF,IAAI,CAAC,iBAAiB,GAAG,WAAW,CAAC,aAAa,CAAS,mBAAmB,EAAE,UAAU,CAAC,CAAC;QAE5F,IAAI,CAAC,oBAAoB,GAAG,WAAW,CAAC,aAAa,CAAU,sBAAsB,EAAE,IAAI,CAAC,CAAC;QAE7F,IAAI,CAAC,uBAAuB,GAAG,WAAW,CAAC,aAAa,CAAC,yBAAyB,EAAE,IAAI,CAAC,CAAC;QAC1F,IAAI,CAAC,0BAA0B,GAAG,WAAW,CAAC,aAAa,CAAC,4BAA4B,EAAE,IAAI,CAAC,CAAC;QAChG,IAAI,CAAC,wBAAwB,GAAG,WAAW,CAAC,aAAa,CAAC,0BAA0B,EAAE,IAAI,CAAC,CAAC;QAC5F,IAAI,CAAC,gBAAgB,GAAG,WAAW,CAAC,aAAa,CAAC,kBAAkB,EAAE,KAAK,CAAC,CAAC;QAC7E,IAAI,CAAC,0BAA0B,GAAG,WAAW,CAAC,aAAa,CAAC,4BAA4B,EAAE,KAAK,CAAC,CAAC;QAEjG,8CAA8C;QAC9C,IAAI,UAAU,GAAG,WAAW,CAAC,aAAa,CAAC,iBAAiB,EAAE,WAAW,CAAC,CAAC;QAC3E,IAAI,eAAe,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC,CAAC,eAAe,CAAC,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC;QAC9F,IAAI,CAAC,eAAe,EAAE;YACrB,eAAe,GAAG,aAAa,CAAC,aAAa,CAAC;SAC9C;QACD,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;QACvD,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,UAAU,OAAO;YAChD,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACxB,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QAE3C,IAAI,CAAC,qBAAqB,GAAG,EAAE,CAAC,YAAY,CAAC;YAC5C,IAAI,EAAE,GAAG,EAAE;gBACV,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBACzC,IAAI,OAAO,GAAG,CAAC,yBAAyB,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;gBACxD,IAAI,QAAQ,KAAK,aAAa,CAAC,kBAAkB,EAAE;oBAClD,OAAO,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;iBAC9C;gBACD,IAAI,IAAI,CAAC,oBAAoB,EAAE,EAAE;oBAChC,OAAO,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;iBAC3C;gBACD,IAAI,IAAI,CAAC,iBAAiB,EAAE,KAAK,MAAM,EAAE;oBACxC,OAAO,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;iBAC1C;gBACD,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC1B,CAAC;YACD,eAAe,EAAE,IAAI;SACrB,CAAC,CAAC;QAEH,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,EAAC,SAAS,EAAE,EAAC,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,uBAAuB,EAAC,EAAC,CAAC,CAAC;QAC1G,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC,QAAQ,CAAC;YACjC,IAAI,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;YACtC,IAAI,KAAK,KAAK,EAAE,EAAE;gBACjB,OAAO,EAAE,CAAC;aACV;YAED,OAAO,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;iBAClC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;gBAChB,OAAO,OAAO,CAAC,IAAI,EAAE,CAAA;YACtB,CAAC,CAAC;iBACD,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE;gBACnB,OAAO,CAAC,OAAO,KAAK,EAAE,CAAC,CAAC;YACzB,CAAC,CAAC;iBACD,KAAK,EAAE,CAAC;QACX,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE;YACnE,IAAI,OAAO,EAAE,KAAK,WAAW,EAAE;gBAC9B,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;aACrE;YACD,OAAO,qBAAqB,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;QAClD,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,aAAa,GAAG,IAAI,qBAAqB,CAAC,aAAa,EAAE,gBAAgB,CAAC,CAAC;QAChF,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC;QAEpD,2BAA2B;QAC3B,MAAM,YAAY,GAAc,EAAE,CAAC;QACnC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,EAAE;YAClC,MAAM,IAAI,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,WAAW,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC;YACrF,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC;YAClC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACxB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC;QACpC,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;QAE9C,MAAM,YAAY,GAAc,EAAE,CAAC;QACnC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE;YACxC,MAAM,IAAI,GAAG,OAAO,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YAC7C,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACxB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC;QACpC,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;QAE9C,IAAI,CAAC,UAAU,GAAG,IAAI,OAAO,CAAC,kBAAkB,EAAE,cAAc,CAAC,CAAC;QAClE,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,eAAe,CAAC;QACnD,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,EAAE,UAAU,QAAQ;YACjF,OAAO,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC,CAAC;QAEJ,IAAI,CAAC,aAAa,GAAG,IAAI,gBAAgB,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;QAC7D,wFAAwF;QACxF,IAAI,cAAc,GAAG,EAAE,CAAC,UAAU,CACjC,CAAC,IAAI,CAAC,aAAa,CAAC,aAAa,KAAK,IAAI,CAAC;YAC1C,CAAC,CAAC,IAAI,CAAC,UAAU;YACjB,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,CAClD,CAAC;QACF,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC,QAAQ,CAAC;YAChC,IAAI,EAAE;gBACL,OAAO,cAAc,EAAE,CAAC;YACzB,CAAC;YACD,KAAK,EAAE,CAAC,QAAsB,EAAE,EAAE;gBACjC,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC;YACpD,CAAC;SACD,CAAC,CAAC;QACH,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,gBAA+B,EAAE,EAAE;YAC/D,IAAI,gBAAgB,KAAK,IAAI,EAAE;gBAC9B,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,uCAAuC;gBACxE,OAAO;aACP;YACD,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC;QACjD,CAAC,CAAC,CAAC;QAEH,6DAA6D;QAC7D,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;YACzB,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE,CAAC;QACjC,CAAC,CAAC,CAAC;QAEH,sDAAsD;QACtD,IAAI,YAAY,GAAwB,IAAI,CAAC;QAC7C,IAAI,IAAI,CAAC,aAAa,EAAE;YACvB,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;SACjD;QACD,IAAI,CAAC,YAAY,IAAI,CAAC,YAAY,KAAK,IAAI,CAAC,UAAU,CAAC,EAAE;YACxD,YAAY,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;SAC/B;QACD,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;QAEjC,wBAAwB;QACxB,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,sBAAsB,CAAC;QAC1D,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,UAAU,CAAC;QACzC,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,uBAAuB,CAAC;QAE5D,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,QAA2B,EAAE,IAAI,EAAE,EAAE;YACxF,IAAI,OAAO,IAAI,KAAK,WAAW,EAAE;gBAChC,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;aACxE;YACD,OAAO,aAAa,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;QAEH,8FAA8F;QAC9F,qEAAqE;QACrE,MAAM,UAAU,GAAG,IAAI,uBAAuB,CAAC,IAAI,CAAC,CAAC;QACrD,UAAU,CAAC,eAAe,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;QAC5D,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,GAAG,UAAU,CAAC;QAE/C,mFAAmF;QACnF,IAAI,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE;YAC9C,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,IAAI,kBAAkB,CAAC,IAAI,CAAC,CAAC;YAC1D,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,eAAe,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;SAC5E;QAED,uBAAuB;QACvB,IAAI,CAAC,kBAAkB,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC;QAErF,IAAI,CAAC,YAAY,GAAG,IAAI,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAEjD,MAAM,YAAY,GAAG,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;QACjE,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;QAE/C,MAAM,gBAAgB,GAAG,IAAI,4BAA4B,CAAC,YAAY,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;QAC3F,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QACjD,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,OAAwB,EAAE,EAAE,EAAE,EAAE;YAC1D,IAAI,OAAO,EAAE,KAAK,WAAW,EAAE;gBAC9B,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;aACrE;YAED,MAAM,QAAQ,GAAG,IAAI,mBAAmB,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,YAAY,GAAG,EAAE,EAAE,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;YAC7H,IAAI,OAAO,CAAC,WAAW,EAAE;gBACxB,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;aACzD;YACD,gBAAgB,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;YAE1C,+DAA+D;YAC/D,KAAK,IAAI,MAAM,IAAI,OAAO,CAAC,WAAW,EAAE;gBACvC,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC;gBACnE,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,qBAAqB,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC;aACtE;QACF,CAAC,CAAC,CAAC;QACH,oCAAoC;QACpC,gBAAgB,CAAC,iBAAiB,EAAE,CAAC;QACrC,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,gBAAgB,CAAC,CAAC;QAEnD,aAAa;QACb,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;QAClC,MAAM,gBAAgB,GAAG,IAAI,4BAA4B,CAAC,YAAY,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC;QAC5F,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE;YAC1C,IAAI,OAAO,EAAE,KAAK,WAAW,EAAE;gBAC9B,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;aACpE;YAED,MAAM,QAAQ,GAAG,IAAI,mBAAmB,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,aAAa,GAAG,EAAE,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;YAC3G,gBAAgB,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;YAE1C,+DAA+D;YAC/D,KAAK,IAAI,MAAM,IAAI,OAAO,CAAC,WAAW,EAAE;gBACvC,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC;gBACnE,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,qBAAqB,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC;aACtE;QACF,CAAC,CAAC,CAAC;QACH,gBAAgB,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YAC5C,OAAO,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;QACjE,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,gBAAgB,CAAC,CAAC;QAEnD,MAAM,oBAAoB,GAAG,IAAI,WAAW,CAAC,SAAS,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;QAExE,SAAS,kBAAkB,CAAC,OAA2B,EAAE,MAAmB;YAC3E,IAAI,QAAQ,GAAG,WAAW,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YAEjD,8BAA8B;YAC9B,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;gBACpC,yDAAyD;gBACzD,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,EAAE;oBACtB,OAAO,CAAC,CAAA;iBACR;qBAAM,IAAI,CAAC,CAAC,IAAI,KAAK,SAAS,EAAE;oBAChC,OAAO,CAAC,CAAC,CAAC;iBACV;qBAAM,IAAI,CAAC,CAAC,IAAI,KAAK,SAAS,EAAE;oBAChC,OAAO,CAAC,CAAC;iBACT;gBACD,OAAO,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YACrC,CAAC,CAAC,CAAC;YAEH,MAAM,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;QACjC,CAAC;QAED,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,OAAO,EAAE,EAAE;YAC5C,kBAAkB,CAAC,OAAO,EAAE,oBAAoB,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;QACH,oBAAoB,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YAChD,OAAO,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;QACjE,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,oBAAoB,CAAC,CAAC;QAEvD,mFAAmF;QACnF,MAAM,qBAAqB,GAAG,IAAI,WAAW,CAC5C,eAAe,EACf,IAAI,EACJ,sBAAsB,EACtB,IAAI,CAAC,yBAAyB,CAC9B,CAAC;QACF,oBAAoB,CAAC,cAAc,CAAC,qBAAqB,CAAC,CAAC;QAE3D,IAAI,iBAAiB,GAA2C,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QACpF,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC,QAAQ,CAAC;YACnC,IAAI,EAAE;gBACL,OAAO,iBAAiB,EAAE,CAAC;YAC5B,CAAC;YACD,KAAK,EAAE,UAAU,YAAyB;gBACzC,MAAM,YAAY,GAAG,iBAAiB,EAAE,CAAC;gBACzC,IAAI,YAAY,KAAK,YAAY,EAAE;oBAClC,OAAO;iBACP;gBAED,IAAI,YAAY,EAAE;oBACjB,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;iBAC9B;gBACD,IAAI,YAAY,EAAE;oBACjB,YAAY,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;iBAC/B;gBACD,iBAAiB,CAAC,YAAY,CAAC,CAAC;YACjC,CAAC;SACD,CAAC,CAAC;QACH,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAEzC,IAAI,CAAC,oBAAoB,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAEhD,IAAI,CAAC,4BAA4B,GAAG,EAAE,CAAC,YAAY,CAAC;YACnD,IAAI,EAAE,GAAG,EAAE;gBACV,8DAA8D;gBAC9D,iFAAiF;gBACjF,MAAM,YAAY,GAAG,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;gBAC/C,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC;qBACvC,GAAG,CAAC,UAAU,UAAyB;oBACvC,IAAI,YAAY,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;wBAC/C,OAAO,IAAI,CAAC;qBACZ;oBACD,OAAO,IAAI,aAAa,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;gBAC5C,CAAC,CAAC;qBACD,MAAM,CAAC,UAAU,KAAK;oBACtB,OAAO,KAAK,KAAK,IAAI,CAAA;gBACtB,CAAC,CAAC;qBACD,KAAK,EAAE,CAAC;gBAEV,iEAAiE;gBACjE,OAAO,MAAyB,CAAC;YAClC,CAAC;YACD,eAAe,EAAE,IAAI;SACrB,CAAC,CAAC;QAEH,IAAI,CAAC,sBAAsB,GAAG,EAAE,CAAC,YAAY,CAAC;YAC7C,IAAI,EAAE,GAAG,EAAE;gBACV,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBACzC,IAAI,CAAC,QAAQ,EAAE;oBACd,OAAO,EAAE,CAAC;iBACV;gBAED,IAAI,IAAI,GAAG,EAAE,CAAC;gBACd,QAAQ,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC;gBACvC,OAAO,IAAI,CAAC;YACb,CAAC;YACD,eAAe,EAAE,IAAI;SACrB,CAAC,CAAC;QAEH,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC,QAAQ,CAAC;YACjC,IAAI,EAAE,GAAG,EAAE;gBACV,uEAAuE;gBACvE,IAAI,OAAO,GAAkB,EAAE,CAAC;gBAChC,IAAI,qBAAqB,GAA+B,EAAE,CAAC;gBAE3D,SAAS,QAAQ,CAAC,QAAqB;oBACtC,IAAI,QAAQ,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE;wBACtC,+FAA+F;wBAC/F,IAAI,GAAG,GAAG,QAAQ,CAAC,mBAAmB,EAAE,CAAC;wBACzC,IAAI,CAAC,qBAAqB,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE;4BAC/C,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;4BACvB,qBAAqB,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC;yBACtC;6BAAM;4BACN,qBAAqB,CAAC,GAAG,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;yBAClD;wBACD,OAAO;qBACP;oBAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;wBACvD,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;qBACpC;gBACF,CAAC;gBAED,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;gBAE5B,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;oBAC1B,OAAO,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;gBACjE,CAAC,CAAC,CAAC;gBAEH,OAAO,OAAO,CAAC;YAChB,CAAC;YACD,eAAe,EAAE,IAAI;SACrB,CAAC,CAAC;QAEH,MAAM,uBAAuB,GAAG,UAAU,CAAU,EAAE,CAAU;YAC/D,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC,WAAW,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;QACnF,CAAC,CAAC;QACF,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC,YAAY,CAAC;YACnC,IAAI,EAAE;gBACL,OAAO,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,UAAU,IAAa;oBACpD,OAAO,IAAI,CAAC,SAAS,EAAE,CAAC;gBACzB,CAAC,CAAC,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;YAClC,CAAC;YACD,eAAe,EAAE,IAAI;SACrB,CAAC,CAAC;QACH,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC,QAAQ,CAAC;YAC9B,IAAI,EAAE;gBACL,OAAO,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;YACtF,CAAC;YACD,eAAe,EAAE,IAAI;SACrB,CAAC,CAAC;QAEH,IAAI,CAAC,sBAAsB,GAAG,IAAI,kBAAkB,CAAC,IAAI,CAAC,CAAC;QAC3D,IAAI,CAAC,mBAAmB,GAAG,IAAI,sBAAsB,CAAC,IAAI,CAAC,CAAC;QAC5D,IAAI,CAAC,aAAa,GAAG,IAAI,gBAAgB,CAAC,IAAI,CAAC,CAAC;QAChD,IAAI,CAAC,gBAAgB,GAAG,IAAI,mBAAmB,CAAC,IAAI,CAAC,CAAC;QACtD,IAAI,CAAC,gBAAgB,GAAG,IAAI,mBAAmB,CAAC,IAAI,CAAC,CAAC;QACtD,IAAI,CAAC,mBAAmB,GAAG,IAAI,sBAAsB,CAAC,IAAI,CAAC,CAAC;QAE5D,IAAI,CAAC,cAAc,GAAG,IAAI,iBAAiB,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QAE5E,IAAI,CAAC,iBAAiB,GAAG,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QAC3C,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QACrC,IAAI,CAAC,sBAAsB,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IACpD,CAAC;IAED,wBAAwB,CAAC,UAAyB;QACjD,IAAI,CAAC,IAAI,CAAC,qBAAqB,EAAE,IAAI,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;YACxE,OAAO,KAAK,CAAC;SACb;QAED,IAAI,IAAI,CAAC,sBAAsB,EAAE,IAAI,CAAC,UAAU,CAAC,yBAAyB,EAAE,EAAE;YAC7E,OAAO,KAAK,CAAC;SACb;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,EAAE,EACrC,cAAc,GAAG,UAAU,CAAC,IAAI,CAAC;QAClC,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;YACxB,MAAM,QAAQ,GAAG,cAAc,CAAC,WAAW,EAAE,CAAC;YAC9C,MAAM,eAAe,GAAG,WAAW,CAAC,KAAK,CACxC,QAAQ,EACR,UAAU,OAAO;gBAChB,OAAO,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACvC,CAAC,CACD,CAAC;YAEF,IAAI,CAAC,eAAe,EAAE;gBACrB,OAAO,KAAK,CAAC;aACb;SACD;QAED,OAAO,IAAI,CAAC;IACb,CAAC;IAED,YAAY,CAAC,UAAkB;QAC9B,OAAO,IAAI,CAAC,sBAAsB,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;IAC/D,CAAC;IAED,YAAY,CAAC,WAAmB;QAC/B,IAAI,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,WAAW,CAAC,EAAE;YAChD,OAAO,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;SACpC;QACD,OAAO,IAAI,CAAC;IACb,CAAC;IAED;;OAEG;IACH,aAAa,CAAC,cAAsB,EAAE,iBAAyB,CAAC;QAC/D,0CAA0C;QAC1C,IAAI,IAAI,CAAC,iBAAiB,CAAC,cAAc,CAAC,cAAc,CAAC,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC,EAAE;YACnF,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,iBAAiB,CAAC,cAAc,CAAC,EAAE,cAAc,GAAG,CAAC,CAAC,CAAC;SACtF;QAED,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE;YACtD,MAAM,CAAC,GAAG,WAAW,CAAC;YACtB,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE;gBAC/D,OAAO,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC,CAAC;aACjD;YAED,IAAI,OAAO,IAAI,OAAO,CAAC,IAAI,EAAE;gBAC5B,OAAO,CAAC,IAAI,CAAC,yBAAyB,GAAG,cAAc,GAAG,wBAAwB,CAAC,CAAC;aACpF;YACD,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC;YACxC,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,GAAG,IAAI,aAAa,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;SAC5E;QACD,OAAO,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC;IAC1C,CAAC;IAEO,oBAAoB,CAAC,WAAgB;QAC5C,MAAM,cAAc,GAAG,uBAAuB,GAAG,MAAM,CAAC,WAAW,CAAC,GAAG,GAAG,CAAC;QAC3E,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE;YACtD,IAAI,OAAO,IAAI,OAAO,CAAC,KAAK,EAAE;gBAC7B,OAAO,CAAC,KAAK,CAAC,gEAAgE,EAAE,WAAW,CAAC,CAAC;aAC7F;YACD,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,GAAG,IAAI,oBAAoB,CAAC,cAAc,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC;SAChG;QACD,OAAO,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC;IAC1C,CAAC;IAED,QAAQ,CAAC,OAAe;QACvB,IAAI,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE;YAC7C,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;SACjC;QACD,OAAO,IAAI,CAAC,UAAU,CAAC;IACxB,CAAC;IAED,OAAO,CAAC,IAAY;QACnB,MAAM,OAAO,GAAG,OAAO,GAAG,IAAI,CAAC;QAC/B,IAAI,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE;YAC7C,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;YACvC,IAAI,IAAI,YAAY,OAAO,EAAE;gBAC5B,OAAO,IAAI,CAAC;aACZ;SACD;QACD,OAAO,IAAI,CAAC;IACb,CAAC;IAED,0EAA0E;IAC1E,oBAAoB,CAAC,UAAyB;QAC7C,IAAI,CAAC,oBAAoB,CAAC,UAAU,CAAC,CAAC;IACvC,CAAC;IAED;;;;OAIG;IACH,uBAAuB,CAAC,WAAmB;QAC1C,MAAM,CAAC,GAAG,WAAW,CAAC;QACtB,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;QAC1C,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE;YAC7B,OAAO,WAAW,CAAC;SACnB;QAED,IAAI,YAAY,GAAG,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAChE,IAAI,KAAK,GAAG,IAAI,MAAM,CAAC,MAAM,GAAG,YAAY,GAAG,aAAa,EAAE,IAAI,CAAC,CAAC;QAEpE,OAAO,WAAW,CAAC,OAAO,CACzB,KAAK,EACL,UAAU,aAAa;YACtB,0DAA0D;YAC1D,IAAI,aAAa,GAAG,EAAE,CAAC;YACvB,IAAI,KAAK,GAAG,aAAa,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;YAChD,IAAI,KAAK,EAAE;gBACV,aAAa,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;gBACzB,aAAa,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;aACzB;YAED,OAAO,qCAAqC,GAAG,aAAa,GAAG,SAAS,GAAG,aAAa,CAAC;QAC1F,CAAC,CACD,CAAC;IACH,CAAC;IAED,WAAW,CAAC,OAAe;QAC1B,OAAO,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;IACjD,CAAC;IAED,QAAQ,CAAC,QAAoB;QAC5B,WAAW,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,EAAE;YACtC,IAAI,CAAC,CAAC,IAAI,YAAY,OAAO,CAAC,EAAE;gBAC/B,IAAI,OAAO,CAAC,KAAK,EAAE;oBAClB,OAAO,CAAC,KAAK,CAAC,+DAA+D,EAAE,IAAI,CAAC,CAAC;iBACrF;gBACD,OAAO;aACP;YACD,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE;gBACnD,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACtB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC;aACtC;QACF,CAAC,CAAC,CAAC;IACJ,CAAC;IAED,wBAAwB,CAAC,UAA8B;QACtD,OAAO,OAAO,CAAC,qBAAqB,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;IACxD,CAAC;IAED,QAAQ;QACP,OAAO,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,UAAU,IAAI;YACpD,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC;QACpB,CAAC,CAAC,CAAC;IACJ,CAAC;IAED,aAAa;QACZ,OAAO,aAAa,CAAC,WAAW,EAAE,CAAC;IACpC,CAAC;IAED,OAAO,CAAC,KAAa;QACpB,MAAM,OAAO,GAAG,OAAO,GAAG,KAAK,CAAC;QAChC,IAAI,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE;YAC7C,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;YACvC,IAAI,IAAI,YAAY,OAAO,EAAE;gBAC5B,OAAO,IAAI,CAAC;aACZ;SACD;QACD,OAAO,IAAI,CAAC;IACb,CAAC;IAED,QAAQ;QACP,OAAO,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,WAAW,CAAC,CAAC;IACrD,CAAC;IAED,oBAAoB,CAAC,cAAsB;QAC1C,IAAI,IAAI,GAAG,IAAI,CAAC,sBAAsB,EAAE,CAAC;QACzC,OAAO,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC;IAC5C,CAAC;IAED,aAAa,CAAC,cAAsB;QACnC,IAAI,UAAyB,CAAC;QAC9B,IAAI,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE;YACrD,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC;YAC/C,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,EAAE;gBAC5B,MAAM,yBAAyB,GAAG,cAAc,GAAG,8BAA8B,CAAC;aAClF;YACD,UAAU,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;YAE5B,IAAI,CAAC,uBAAuB,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC;YACpD,OAAO,IAAI,CAAC;SACZ;aAAM;YACN,UAAU,GAAG,IAAI,aAAa,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;YACrD,UAAU,CAAC,KAAK,GAAG,qFAAqF,CAAC;YACzG,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,GAAG,UAAU,CAAC;YAE/C,oEAAoE;YACpE,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,sBAAsB,CAAC,CAAC;YAC/D,MAAM,UAAU,GAAG,IAAI,aAAa,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;YACvD,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACtC,QAAQ,CAAC,eAAe,EAAE,CAAC;YAE3B,IAAI,CAAC,uBAAuB,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC;YACpD,OAAO,QAAQ,CAAC;SAChB;IACF,CAAC;IAED,kBAAkB,CAAC,oBAAqC;QACvD,MAAM,IAAI,GAAG,IAAI,EAAE,CAAC,GAAG,WAAW,CAAC;QACnC,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAe,IAAI,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;QAEvE,CAAC,CAAC,OAAO,CAAC,oBAAoB,EAAE,UAAU,UAAU;YACnD,6CAA6C;YAC7C,CAAC,CAAC,OAAO,CAAC,YAAY,EAAE,UAAU,KAAK;gBACtC,KAAK,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YAClC,CAAC,CAAC,CAAC;YACH,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YAE3B,OAAO,IAAI,CAAC,uBAAuB,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QACtD,CAAC,CAAC,CAAC;IACJ,CAAC;IAED,gBAAgB,CAAC,cAAsB;QACtC,OAAO,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC,SAAS,EAAE,CAAC;IAC3G,CAAC;IAED,OAAO,CAAC,IAAY,EAAE,WAAmB,EAAE,eAA8B,EAAE;QAC1E,IAAI,IAAI,GAAG,IAAI,OAAO,CAAC,IAAI,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;QACxD,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC;QACnC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEtB,sBAAsB;QACtB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QAEzB,OAAO,IAAI,CAAC;IACb,CAAC;IAED,WAAW,CAAC,KAAgB;QAC3B,MAAM,CAAC,GAAG,WAAW,CAAC;QACtB,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,EAAE;YACzB,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE;gBAC9B,MAAM,sBAAsB,GAAG,IAAI,CAAC,IAAI,EAAE,GAAG,GAAG,CAAC;aACjD;QACF,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAC5B,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;QACvD,sDAAsD;IACvD,CAAC;IAED,aAAa,CAAC,IAAa;QAC1B,wEAAwE;QACxE,IAAI,IAAI,CAAC,QAAQ,EAAE;YAClB,OAAO,KAAK,CAAC;SACb;QACD,kEAAkE;QAClE,0EAA0E;QAC1E,MAAM,CAAC,GAAG,WAAW,CAAC;QACtB,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,UAAU,IAAI;YACtC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC1C,CAAC,CAAC,EAAE;YACH,OAAO,KAAK,CAAC;SACb;QACD,OAAO,CAAC,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC;IAC7C,CAAC;IAED,wBAAwB,CAAC,IAAa;QACrC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,IAAI,CAAC,sBAAsB,CAAC,CAAC;IACtD,CAAC;IAED,2DAA2D;IAC3D,WAAW;QACV,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACpB,MAAM,CAAC,GAAG,WAAW,CAAC;QAEtB,IAAI,IAAI,GAAG;YACV,OAAO,EAAE,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,MAAM,CAAC;YAC1C,OAAO,EAAE,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,MAAM,CAAC;YAC1C,cAAc,EAAE,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,MAAM,CAAC;YACxD,iBAAiB,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC;YACvD,eAAe,EAAE,IAAI,CAAC,kBAAkB;SACxC,CAAC;QAEF,IAAI,CAAC,iBAAiB,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QACxC,MAAM,CAAC,yBAAyB,CAAC,CAAC,MAAM,EAAE,CAAC;IAC5C,CAAC;IAED,cAAc;QACb,IAAI,CAAC,OAAO,CAAC,yGAAyG,CAAC,EAAE;YACxH,OAAO,KAAK,CAAC;SACb;QACD,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC;QAClC,IAAI,CAAC,WAAW,EAAE,CAAC;IACpB,CAAC;;AAzxBsB,2BAAa,GAAG;IACtC,KAAK,EAAE,gBAAgB;IACvB,EAAE,EAAE,WAAW;IACf,YAAY,EAAE,6BAA6B;CAC3C,CAAC;AACqB,gCAAkB,GAAG;IAC3C,KAAK,EAAE,eAAe;IACtB,EAAE,EAAE,UAAU;IACd,YAAY,EAAE,mCAAmC;CACjD,CAAC;AACqB,sBAAQ,GAAG,EAAC,KAAK,EAAE,WAAW,EAAE,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,wBAAwB,EAAC,CAAC;AAoxB5G,CAAC;IACA,MAAM,CAAC,UAAU,CAAe;QAC/B,IAAI,mBAAmB,KAAK,IAAI,EAAE;YACjC,MAAM,wDAAwD,CAAC;SAC/D;QAED,MAAM,WAAW,GAAG,MAAM,CAAC,uBAAuB,CAAC,CAAC;QAEpD,6BAA6B;QAC7B,MAAM,GAAG,GAAG,IAAI,aAAa,CAAC,mBAAmB,CAAC,CAAC;QACnD,+FAA+F;QAC/F,mBAAmB,GAAG,IAAI,CAAC;QAE1B,MAAc,CAAC,eAAe,CAAC,GAAG,GAAG,CAAC;QAEvC,0CAA0C;QAC1C,iCAAiC;QACjC,EAAE,CAAC,aAAa,CAAC,GAAG,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1C,GAAG,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;QAC7B,6CAA6C;QAE7C,mCAAmC;QACnC,IAAI,cAAc,GAAG,KAAK,CAAC;QAE3B,SAAS,mBAAmB,CAAC,KAAwB;YACpD,MAAM,QAAQ,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YACpC,IAAI,QAAQ,KAAK,cAAc,EAAE;gBAChC,cAAc,GAAG,QAAQ,CAAC;gBAC1B,GAAG,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC;aACnC;QACF,CAAC;QAED,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,CACb,kFAAkF,EAClF,mBAAmB,CACnB,CAAC;QAEF,iCAAiC;QACjC,IAAI,yBAAyB,GAAU,EAAE,CAAC;QAE1C,WAAW,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,EAAE,CAAC,kBAAkB,EAAE,6BAA6B,EAAE,UAE9F,KAAK;YAEL,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC;gBACZ,SAAS,EAAE,KAAK;gBAChB,OAAO,EAAE;oBACR,IAAI,EAAE,YAAY;iBAClB;gBAED,4BAA4B;gBAC5B,IAAI,EAAE;oBACL,KAAK,EAAE,kBAAkB;oBACzB,KAAK,EAAE,EAAE;oBACT,IAAI,EAAE,uBAAuB;oBAC7B,KAAK,EAAE,IAAI;oBACX,MAAM,EAAE,KAAK;iBACb;gBACD,IAAI,EAAE;oBACL,KAAK,EAAE,oBAAoB;oBAC3B,KAAK,EAAE,IAAI;oBACX,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,KAAK;oBACZ,MAAM,EAAE,KAAK;iBACb;gBAED,QAAQ,EAAE;oBACT,EAAE,EAAE,aAAa;oBACjB,EAAE,EAAE,cAAc;oBAClB,MAAM,EAAE,KAAK;oBACb,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC;oBACnB,MAAM,EAAE;wBACP,MAAM,EAAE,kBAAkB;wBAC1B,MAAM,EAAE,KAAK;qBACb;iBACD;gBACD,KAAK,EAAE;oBACN,OAAO,EAAE,wCAAwC;iBACjD;gBAED,MAAM,EAAE;oBACP,IAAI,EAAE,UAAU,KAAwB,EAAE,GAAQ;wBACjD,iDAAiD;wBACjD,KAAK,IAAI,CAAC,GAAG,yBAAyB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;4BAC/D,yBAAyB,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;yBACpC;wBAED,IAAI,UAAU,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;wBAC/C,IAAI,UAAU,IAAI,CAAC,UAAU,YAAY,aAAa,CAAC,EAAE;4BACxD,GAAG,CAAC,oBAAoB,CAAC,UAAU,CAAC,CAAC;yBACrC;wBAED,oDAAoD;wBACpD,MAAM,UAAU,GAAG,CAAC,CAAC,qBAAqB,CAAC,CAAC;wBAC5C,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE;4BAChE,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;yBAChD;wBAED,yBAAyB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBACrC,CAAC;oBACD,IAAI,EAAE,UAAU,KAAwB,EAAE,GAAQ;wBACjD,MAAM,KAAK,GAAG,yBAAyB,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;wBACrD,IAAI,KAAK,IAAI,CAAC,EAAE;4BACf,yBAAyB,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;yBAC3C;oBACF,CAAC;iBACD;aACD,EAAE,KAAK,CAAC,CAAC;QACX,CAAC,CAAC,CAAC;QAEH,oFAAoF;QACpF,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;QAEtC,wBAAwB;QACxB,CAAC,CAAC,uBAAuB,CAAC,CAAC,EAAE,CAAC,OAAO,EAAE,UAA6B,KAAK;YACxE,MAAM,QAAQ,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;YACzB,MAAM,SAAS,GAAG,CAAC,CAAC,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC;YAE/D,KAAK,CAAC,eAAe,EAAE,CAAC;YACxB,KAAK,CAAC,cAAc,EAAE,CAAC;YAEvB,SAAS,gBAAgB,CAAC,KAAwB;gBACjD,gEAAgE;gBAChE,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBACnE,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE;oBAChC,SAAS,CAAC,IAAI,EAAE,CAAC;oBACjB,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC;iBAC3C;YACF,CAAC;YAED,IAAI,SAAS,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE;gBAC7B,SAAS,CAAC,IAAI,EAAE,CAAC;gBACjB,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC;gBAC3C,OAAO;aACP;YAED,SAAS,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC;gBACzB,EAAE,EAAE,UAAU;gBACd,EAAE,EAAE,aAAa;gBACjB,EAAE,EAAE,QAAQ;aACZ,CAAC,CAAC;YAEH,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC,EAAE,CAAC"} \ No newline at end of file diff --git a/extras/modules/role-editor/role-editor.ts b/extras/modules/role-editor/role-editor.ts index 56424d7..b99d20f 100644 --- a/extras/modules/role-editor/role-editor.ts +++ b/extras/modules/role-editor/role-editor.ts @@ -204,6 +204,10 @@ abstract class RexBaseActor implements IAmeActor { return this.capabilities.getCapabilityState(capability); } + hasOwnCap(capability: string): boolean | null { + return this.getOwnCapabilityState(capability); + } + setCap(capability: string, enabled: boolean) { this.capabilities.setCapabilityState(capability, enabled); } diff --git a/extras/modules/super-users/super-users.js b/extras/modules/super-users/super-users.js index 1084a06..68a6cac 100644 --- a/extras/modules/super-users/super-users.js +++ b/extras/modules/super-users/super-users.js @@ -66,7 +66,7 @@ class AmeSuperUsers { let displayNames = AmeSuperUsers._.map(user.roles, (roleId) => { var actor = AmeActors.getActor('role:' + roleId); if (actor) { - return actor.displayName; + return actor.getDisplayName(); } else { return '[Unknown role]'; diff --git a/extras/modules/super-users/super-users.js.map b/extras/modules/super-users/super-users.js.map index 612e8e0..8001e03 100644 --- a/extras/modules/super-users/super-users.js.map +++ b/extras/modules/super-users/super-users.js.map @@ -1 +1 @@ -{"version":3,"file":"super-users.js","sourceRoot":"","sources":["super-users.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"super-users.js","sourceRoot":"","sources":["super-users.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/extras/modules/super-users/super-users.ts b/extras/modules/super-users/super-users.ts index de5de06..e6f6de1 100644 --- a/extras/modules/super-users/super-users.ts +++ b/extras/modules/super-users/super-users.ts @@ -88,7 +88,7 @@ class AmeSuperUsers { let displayNames = AmeSuperUsers._.map(user.roles, (roleId) => { var actor = AmeActors.getActor('role:' + roleId); if (actor) { - return actor.displayName; + return actor.getDisplayName(); } else { return '[Unknown role]'; } diff --git a/extras/modules/tweaks/ameDisableRemotePatternsTweak.php b/extras/modules/tweaks/ameDisableRemotePatternsTweak.php new file mode 100644 index 0000000..0bf89c2 --- /dev/null +++ b/extras/modules/tweaks/ameDisableRemotePatternsTweak.php @@ -0,0 +1,7 @@ +addSection(self::SECTION_ID, 'Hide Gutenberg Blocks', 40); + $manager->addSection(self::SECTION_ID, 'Hide Gutenberg Blocks', 70); if ( $tweakFilter !== null ) { $filteredBlocks = array(); @@ -176,6 +189,13 @@ public function registerBlockTweaks($manager, $tweakFilter = null) { //Create stub tweaks that represent each block category. $categories = ameUtils::get($data, 'categories', array()); foreach ($categories as $catId => $category) { + //Skip the special "reusable" category because it will always be empty. + //Individual reusable blocks are not detected by our script and the "core/block" + //block that would appear in this category cannot be hidden for compat. reasons. + if ( $catId === 'reusable' ) { + continue; + } + $parentTweak = new ameDelegatedTweak( self::PARENT_PREFIX . $catId, ameUtils::get($category, 'title', $catId), @@ -188,6 +208,11 @@ public function registerBlockTweaks($manager, $tweakFilter = null) { $theCallback = array($this, 'flagBlockAsHidden'); foreach ($blocks as $id => $block) { + //Skip blocks that don't appear in the block inserter. + if ( isset($block['supportsInserter']) && !$block['supportsInserter'] ) { + continue; + } + $tweak = new ameDelegatedTweak( self::TWEAK_PREFIX . $id, ameUtils::get($block, 'title', $id), @@ -217,6 +242,12 @@ public function filterAllowedBlocks($allowedBlocks) { //Unfortunately, we can't get all available blocks via PHP, so we rely on the cached //list of registered blocks that was supplied by our JS script. $registeredBlocks = array_keys(ameUtils::get($this->getDetectedItems(), 'blocks', array())); + //Some blocks support core editor functionality and should be included even if not detected. + $registeredBlocks = array_unique(array_merge($registeredBlocks, [ + 'core/block', //Required for reusable blocks (a.k.a. synced patterns) to work. + 'core/pattern' //Not sure what this one does, but sounds important. + ])); + $result = array_diff($registeredBlocks, $this->hiddenBlocks); //Reindex the array. array_diff() can create "holes" in the array, which means that diff --git a/extras/modules/tweaks/ameMediaRestrictionsManager.php b/extras/modules/tweaks/ameMediaRestrictionsManager.php new file mode 100644 index 0000000..3f59c9e --- /dev/null +++ b/extras/modules/tweaks/ameMediaRestrictionsManager.php @@ -0,0 +1,106 @@ + true, + 'delete_post' => true, + ]; + + const SECTION_ID = 'media-restrictions'; + + private $enabledRestrictionsByUser = []; + + private $metaCapFilterAdded = false; + + public function __construct() { + add_action('admin-menu-editor-register_tweaks', [$this, 'registerTweaks']); + } + + public function mapMetaCap($caps, $cap, $userId, $args = []) { + if ( + //Do we care about this capability? + !array_key_exists($cap, self::RELEVANT_META_CAPS) + //Is the user ID provided? (Should always be.) + || !$userId + //Any restrictions for this user? + || empty($this->enabledRestrictionsByUser[$userId]) + //Is this specific capability restricted? + || empty($this->enabledRestrictionsByUser[$userId][$cap]) + ) { + return $caps; + } + + //Is the post an attachment (media)? + if ( empty($args[0]) ) { + return $caps; + } + $post = get_post($args[0]); + if ( !$post || !is_object($post) || ($post->post_type !== 'attachment') ) { + return $caps; + } + + //Prevent the user from editing/deleting media uploaded by other users. + //Note: As of this writing, the `post_author` doc-comment says that the value + //is a numeric string, so we cast both values to integers to be safe. + if ( (int)$post->post_author !== (int)$userId ) { + $caps = ['do_not_allow']; + } + return $caps; + } + + /** + * @param \ameTweakManager $tweakManager + * @return void + */ + public function registerTweaks($tweakManager) { + $tweakManager->addSection(self::SECTION_ID, 'Media Library Restrictions', 50); + + //Create a parent tweak for convenience. It makes it easier to enable/disable all + //restrictions at once. + $parentTweakId = 'mr-all-container'; + $tweak = new ameDelegatedTweak( + $parentTweakId, + 'Restrict access to media uploaded by other users', + '__return_false' + ); + $tweak->setSectionId(self::SECTION_ID); + $tweakManager->addTweak($tweak); + + $theCallback = [$this, 'enableRestriction']; + $options = [ + 'delete_post' => 'Prevent deletion', + 'edit_post' => 'Prevent editing', + ]; + foreach ($options as $cap => $label) { + $tweak = new ameDelegatedTweak('mr-others-' . $cap, $label, $theCallback, [$cap]); + $tweak->setSectionId(self::SECTION_ID)->setParentId($parentTweakId); + $tweakManager->addTweak($tweak); + } + + if ( class_exists(ameOtherUserPostHider::class) ) { + //Alias for the "Media" tweak in the "Hide Other Users' Posts" module. + $hideMediaAlias = new ameTweakAlias( + ameOtherUserPostHider::TWEAK_ID_PREFIX . 'attachment', + 'Hide other users\' uploads' + ); + $hideMediaAlias->setSectionId(self::SECTION_ID)->setParentId($parentTweakId); + $tweakManager->addAlias($hideMediaAlias); + } + } + + public function enableRestriction($cap) { + $userId = get_current_user_id(); + if ( !empty($userId) ) { + if ( !isset($this->enabledRestrictionsByUser) ) { + $this->enabledRestrictionsByUser = []; + } + $this->enabledRestrictionsByUser[$userId][$cap] = true; + + //Optimization: Only add the filter when there are restrictions to apply. + if ( !$this->metaCapFilterAdded ) { + $this->metaCapFilterAdded = true; + add_filter('map_meta_cap', [$this, 'mapMetaCap'], 10, 4); + } + } + } +} \ No newline at end of file diff --git a/extras/modules/tweaks/ameTweakAlias.php b/extras/modules/tweaks/ameTweakAlias.php new file mode 100644 index 0000000..984530d --- /dev/null +++ b/extras/modules/tweaks/ameTweakAlias.php @@ -0,0 +1,46 @@ +tweakId = $tweakId; + $this->label = $label; + } + + public function setParentId($parentId) { + $this->parentId = $parentId; + return $this; + } + + public function setSectionId($sectionId) { + $this->sectionId = $sectionId; + return $this; + } + + public function toArray() { + return [ + 'tweakId' => $this->tweakId, + 'label' => $this->label, + 'parentId' => $this->parentId, + 'sectionId' => $this->sectionId, + ]; + } +} \ No newline at end of file diff --git a/extras/modules/tweaks/ameUnregisterPatternsTweak.php b/extras/modules/tweaks/ameUnregisterPatternsTweak.php new file mode 100644 index 0000000..6c3a53f --- /dev/null +++ b/extras/modules/tweaks/ameUnregisterPatternsTweak.php @@ -0,0 +1,46 @@ +maybeRemovePatterns(); + } else { + add_action('init', [$this, 'maybeRemovePatterns'], 999); + } + } + + public function maybeRemovePatterns() { + //Let's only unregister patterns in the admin area and the block editor. Removing them + //from the frontend can break the site (e.g. parts that use patterns would disappear). + if ( is_admin() ) { + $this->removePatterns(); + } else { + //The Gutenberg editor loads patterns via the REST API, so intercept those requests + //and unregister the patterns there. + add_filter('rest_request_before_callbacks', [$this, 'removePatternsFromRestApi'], 1); + } + } + + public function removePatternsFromRestApi($response = null) { + if ( defined('REST_REQUEST') && REST_REQUEST ) { + $this->removePatterns(); + } + return $response; + } + + public function removePatterns() { + if ( !class_exists(WP_Block_Patterns_Registry::class) ) { + return; + } + + $patterns = WP_Block_Patterns_Registry::get_instance()->get_all_registered(); + foreach ($patterns as $pattern) { + if ( is_array($pattern) && isset($pattern['name']) ) { + $visibleInInserter = ameUtils::get($pattern, 'inserter', true); + if ( $visibleInInserter ) { + unregister_block_pattern($pattern['name']); + } + } + } + } +} \ No newline at end of file diff --git a/extras/modules/tweaks/default-tweaks.php b/extras/modules/tweaks/default-tweaks.php index 82782c6..4c5a124 100644 --- a/extras/modules/tweaks/default-tweaks.php +++ b/extras/modules/tweaks/default-tweaks.php @@ -1,10 +1,11 @@ [ - 'profile' => ['label' => 'Hide Profile Fields', 'priority' => 80], - 'sidebar-widgets' => ['label' => 'Hide Sidebar Widgets', 'priority' => 100], - 'sidebars' => ['label' => 'Hide Sidebars', 'priority' => 120], - 'environment-type' => ['label' => 'Environment Type', 'priority' => 30], + 'profile' => ['label' => 'Hide Profile Fields', 'priority' => 80], + 'sidebar-widgets' => ['label' => 'Hide Sidebar Widgets', 'priority' => 100], + 'sidebars' => ['label' => 'Hide Sidebars', 'priority' => 120], + 'gutenberg-general' => ['label' => 'Gutenberg (Block Editor)', 'priority' => 25], + 'environment-type' => ['label' => 'Environment Type', 'priority' => 30], ], 'tweaks' => [ @@ -36,13 +37,17 @@ ], 'hide-gutenberg-options' => [ - 'label' => 'Hide the Gutenberg options menu (three vertical dots)', - 'selector' => '#editor .edit-post-header__settings .edit-post-more-menu,' + 'label' => 'Hide the Gutenberg options menu (three vertical dots)', + 'selector' => '#editor .edit-post-header__settings .edit-post-more-menu,' . ' #editor .edit-post-header__settings .interface-more-menu-dropdown', + 'section' => 'gutenberg-general', + 'hideableLabel' => 'Gutenberg options menu', ], 'hide-gutenberg-fs-wp-logo' => [ - 'label' => 'Hide the WordPress logo in Gutenberg fullscreen mode', - 'selector' => '#editor .edit-post-header a.components-button[href^="edit.php"]', + 'label' => 'Hide the WordPress logo in Gutenberg fullscreen mode', + 'selector' => '#editor .edit-post-header a.components-button[href^="edit.php"]', + 'section' => 'gutenberg-general', + 'hideableLabel' => 'WordPress logo in Gutenberg fullscreen mode', ], 'show-environment-in-toolbar' => [ @@ -57,11 +62,46 @@ 'className' => 'ameEnvironmentColorTweak', 'includeFile' => __DIR__ . '/ameEnvironmentColorTweak.php', ], + + 'hide-inserter-media-tab' => [ + 'label' => 'Hide the "Media" tab in the block inserter', + 'selector' => '#editor #tab-panel-0-media', + 'section' => 'gutenberg-general', + 'hideableLabel' => '"Media" tab in the block inserter', + ], + + 'hide-block-patterns' => [ + 'label' => 'Hide block patterns', + 'isGroup' => true, + 'section' => 'gutenberg-general', + 'hideableLabel' => 'Block patterns', + ], + 'hide-patterns-tab-with-css' => [ + 'label' => 'Hide the "Patterns" tab in the block inserter', + 'selector' => '#editor #tab-panel-0-patterns', + 'parent' => 'hide-block-patterns', + 'section' => 'gutenberg-general', + 'hideableLabel' => '"Patterns" tab in the block inserter', + ], + 'disable-remote-patterns' => [ + 'label' => 'Disable remote patterns', + 'className' => ameDisableRemotePatternsTweak::class, + 'includeFile' => __DIR__ . '/ameDisableRemotePatternsTweak.php', + 'parent' => 'hide-block-patterns', + 'section' => 'gutenberg-general', + ], + 'unregister-all-patterns' => [ + 'label' => 'Unregister all visible patterns (Caution: Also affects "Appearance → Editor")', + 'className' => ameUnregisterPatternsTweak::class, + 'includeFile' => __DIR__ . '/ameUnregisterPatternsTweak.php', + 'parent' => 'hide-block-patterns', + 'section' => 'gutenberg-general', + ], ], ]; //region Profile tweaks -$profileScreens = ['profile']; +$profileScreens = ['profile', 'user-edit']; $profileSection = 'profile'; $profileTweaks = [ 'hide-profile-group-personal-info' => [ @@ -95,7 +135,7 @@ ], 'hide-profile-group-name' => [ - 'label' => 'Name', + 'label' => 'Name', 'jquery-js' => 'jQuery("#profile-page tr.user-user-login-wrap").closest("table").prev("h2").addBack().hide();', ], 'hide-profile-user-login' => [ @@ -125,7 +165,7 @@ ], 'hide-profile-group-contact-info' => [ - 'label' => 'Contact Info', + 'label' => 'Contact Info', 'jquery-js' => 'jQuery("#profile-page tr.user-email-wrap").closest("table").prev("h2").addBack().hide();', ], 'hide-profile-email' => [ @@ -155,7 +195,7 @@ //"About Yourself" section. $profileTweaks = array_merge($profileTweaks, [ 'hide-profile-group-about-yourself' => [ - 'label' => 'About Yourself', + 'label' => 'About Yourself', 'jquery-js' => 'jQuery("#profile-page tr.user-description-wrap").closest("table").prev("h2").addBack().hide();', ], diff --git a/extras/modules/tweaks/gutenberg-block-detector.js b/extras/modules/tweaks/gutenberg-block-detector.js index 895b9fb..a57a647 100644 --- a/extras/modules/tweaks/gutenberg-block-detector.js +++ b/extras/modules/tweaks/gutenberg-block-detector.js @@ -4,6 +4,7 @@ * @property wp.blocks * @property wp.blocks.getBlockTypes * @property wp.blocks.getCategories + * @property wp.blocks.hasBlockSupport * @property window._wpLoadBlockEditor * @property window._wpLoadGutenbergEditor */ @@ -49,11 +50,23 @@ if (typeof wp !== 'undefined' && typeof wp.domReady !== 'undefined') { const blocks = wp.blocks.getBlockTypes(); for (let i = 0; i < blocks.length; i++) { const block = blocks[i]; - registeredBlocks.push({ + + const blockInfo = { name: block.name, title: block.title, category: block.category - }); + }; + + //Keep track of which blocks don't appear in the inserter. We may need them + //for compatibility, but we won't offer the user the option to hide them. + if ( + wp.blocks.hasBlockSupport + && !wp.blocks.hasBlockSupport(block, 'inserter', true) + ) { + blockInfo.supportsInserter = false; + } + + registeredBlocks.push(blockInfo); if (!scriptData.knownBlocks.hasOwnProperty(block.name)) { hasNewData = true; diff --git a/extras/modules/tweaks/tweak-manager.js b/extras/modules/tweaks/tweak-manager.js index 5b50f95..38c714c 100644 --- a/extras/modules/tweaks/tweak-manager.js +++ b/extras/modules/tweaks/tweak-manager.js @@ -305,7 +305,8 @@ class AmeActorAccess { const childrenArray = children(); for (let i = 0; i < childrenArray.length; i++) { const child = childrenArray[i]; - if ((child instanceof AmeCompositeNode) && child.actorAccess) { + if (((child instanceof AmeCompositeNode) || (child instanceof AmeTweakAlias)) + && child.actorAccess) { child.actorAccess.isChecked(checked); } } @@ -314,6 +315,21 @@ class AmeActorAccess { }); } } +class AmeAliasActorAccess { + constructor(target) { + this.isChecked = ko.computed({ + read: () => { + return target.isChecked(); + }, + write: (checked) => { + target.isChecked(checked); + } + }); + this.isIndeterminate = ko.computed(() => { + return target.isIndeterminate(); + }); + } +} class AmeTweakItem extends AmeCompositeNode { constructor(properties, module) { super(properties, module, 'self'); @@ -396,6 +412,50 @@ class AmeTweakItem extends AmeCompositeNode { return null; } } +class AmeTweakAlias { + constructor(target, label) { + this.isUserDefined = false; + this.parent = null; + this.section = null; + this.label = label; + AmeTweakAlias.idCounter++; + this.id = 'alias-' + AmeTweakAlias.idCounter; + this.htmlId = 'ame-tweak_' + AmeTweakManagerModule.slugify(this.id); + if (target.actorAccess) { + this.actorAccess = new AmeAliasActorAccess(target.actorAccess); + } + else { + this.actorAccess = null; + } + this.tooltip = 'This is an alias for: "' + target.label() + '"'; + const targetSection = target.getSection(); + if (targetSection) { + this.tooltip += ' in the section "' + targetSection.label + '"'; + } + } + addChild(_) { + //No children allowed. + throw new Error('Aliases cannot have children.'); + } + removeChild(_) { + //No children allowed = nothing to remove. + } + getParent() { + return this.parent; + } + setParent(tweak) { + this.parent = tweak; + return this; + } + setSection(section) { + this.section = section; + return this; + } + getSection() { + return this.section; + } +} +AmeTweakAlias.idCounter = 0; class AmeTweakSection { constructor(properties) { this.description = ''; @@ -419,11 +479,11 @@ class AmeTweakSection { this.htmlId = ''; } } - addTweak(tweak) { + addTweakNode(tweak) { this.tweaks.push(tweak); tweak.setSection(this); } - removeTweak(tweak) { + removeTweakNode(tweak) { this.tweaks.remove(tweak); } hasContent() { @@ -469,19 +529,31 @@ class AmeTweakManagerModule { this.sections.push(section); }); const firstSection = this.sections[0]; - _.forEach(scriptData.tweaks, (properties) => { - const tweak = new AmeTweakItem(properties, this); - this.tweaksById[tweak.id] = tweak; + const addNodeToParent = (node, properties) => { if (properties.parentId && this.tweaksById.hasOwnProperty(properties.parentId)) { - this.tweaksById[properties.parentId].addChild(tweak); + this.tweaksById[properties.parentId].addChild(node); } else { let ownerSection = firstSection; if (properties.sectionId && this.sectionsById.hasOwnProperty(properties.sectionId)) { ownerSection = this.sectionsById[properties.sectionId]; } - ownerSection.addTweak(tweak); + ownerSection.addTweakNode(node); + } + }; + _.forEach(scriptData.tweaks, (properties) => { + const tweak = new AmeTweakItem(properties, this); + this.tweaksById[tweak.id] = tweak; + addNodeToParent(tweak, properties); + }); + _.forEach(scriptData.aliases, (properties) => { + //Does the target tweak exist? + if (!this.tweaksById.hasOwnProperty(properties.tweakId)) { + return; } + const target = this.tweaksById[properties.tweakId]; + const alias = new AmeTweakAlias(target, properties.label); + addNodeToParent(alias, properties); }); //Remove empty sections. this.sections = _.filter(this.sections, function (section) { @@ -577,7 +649,7 @@ class AmeTweakManagerModule { props.children.push(cssInput); const newTweak = new AmeTweakItem(props, this); this.tweaksById[newTweak.id] = newTweak; - this.sectionsById['admin-css'].addTweak(newTweak); + this.sectionsById['admin-css'].addTweakNode(newTweak); } static slugify(input) { const _ = AmeTweakManagerModule._; @@ -605,7 +677,7 @@ class AmeTweakManagerModule { deleteTweak(tweak) { const section = tweak.getSection(); if (section) { - section.removeTweak(tweak); + section.removeTweakNode(tweak); } const parent = tweak.getParent(); if (parent) { diff --git a/extras/modules/tweaks/tweak-manager.js.map b/extras/modules/tweaks/tweak-manager.js.map index d402bfe..a6d4d04 100644 --- a/extras/modules/tweaks/tweak-manager.js.map +++ b/extras/modules/tweaks/tweak-manager.js.map @@ -1 +1 @@ -{"version":3,"file":"tweak-manager.js","sourceRoot":"","sources":["tweak-manager.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"tweak-manager.js","sourceRoot":"","sources":["tweak-manager.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/extras/modules/tweaks/tweak-manager.ts b/extras/modules/tweaks/tweak-manager.ts index 0d7f578..2662aa5 100644 --- a/extras/modules/tweaks/tweak-manager.ts +++ b/extras/modules/tweaks/tweak-manager.ts @@ -13,6 +13,7 @@ interface AmeTweakManagerScriptData { isProVersion: boolean; tweaks: AmeTweakProperties[]; sections: AmeSectionProperties[]; + aliases: AmeAliasProperties[]; lastUserTweakSuffix: number; defaultCodeEditorSettings: Record; } @@ -22,7 +23,13 @@ interface AmeNamedNodeProperties { label: string; } -abstract class AmeNamedNode { +interface AmeNamedNodeInterface { + id: string; + label: string | KnockoutObservable; + htmlId: string; +} + +abstract class AmeNamedNode implements AmeNamedNodeInterface { id: string; label: string | KnockoutObservable; htmlId: string = ''; @@ -254,9 +261,9 @@ function isSettingStore(thing: object): thing is AmeSettingStore { } class AmeCompositeNode extends AmeNamedNode { - children: KnockoutObservableArray; + children: KnockoutObservableArray; propertyPath: string[] = []; - actorAccess: AmeActorAccess | null = null; + actorAccess: AmeActorAccessInterface | null = null; properties: AmeSettingStore | null = null; protected constructor( @@ -344,7 +351,12 @@ class AmeCompositeNode extends AmeNamedNode { } } -class AmeActorAccess { +interface AmeActorAccessInterface { + isChecked: KnockoutComputed; + isIndeterminate: KnockoutComputed; +} + +class AmeActorAccess implements AmeActorAccessInterface { isChecked: KnockoutComputed; protected enabledForActor: AmeObservableActorFeatureMap; protected module: AmeTweakManagerModule; @@ -436,7 +448,10 @@ class AmeActorAccess { const childrenArray = children(); for (let i = 0; i < childrenArray.length; i++) { const child = childrenArray[i]; - if ((child instanceof AmeCompositeNode) && child.actorAccess) { + if ( + ((child instanceof AmeCompositeNode) || (child instanceof AmeTweakAlias)) + && child.actorAccess + ) { child.actorAccess.isChecked(checked); } } @@ -446,15 +461,51 @@ class AmeActorAccess { } } +class AmeAliasActorAccess { + isChecked: KnockoutComputed; + isIndeterminate: KnockoutComputed; + + constructor(target: AmeActorAccessInterface) { + this.isChecked = ko.computed({ + read: () => { + return target.isChecked(); + }, + write: (checked: boolean) => { + target.isChecked(checked); + } + }); + this.isIndeterminate = ko.computed(() => { + return target.isIndeterminate(); + }); + } +} + +interface AmeTweakNode extends AmeNamedNodeInterface { + readonly isUserDefined: boolean; + actorAccess: AmeActorAccessInterface | null; + + setParent(tweak: AmeTweakNode): this; + getParent(): AmeTweakNode | null; + + addChild(tweak: AmeTweakNode): this; + removeChild(tweak: AmeTweakNode): void; + + setSection(section: AmeTweakSection): this; + getSection(): AmeTweakSection | null; +} + interface AmeSavedTweakProperties { id: string; enabledForActor?: AmeDictionary; } -interface AmeTweakProperties extends AmeSavedTweakProperties, AmeActorFeatureProperties { - description?: string; +interface AmeContainedNodeProperties { parentId?: string | null; sectionId?: string | null; +} + +interface AmeTweakProperties extends AmeSavedTweakProperties, AmeActorFeatureProperties, AmeContainedNodeProperties { + description?: string; isUserDefined?: boolean; typeId?: string; @@ -463,14 +514,14 @@ interface AmeTweakProperties extends AmeSavedTweakProperties, AmeActorFeaturePro [key: string]: any; } -class AmeTweakItem extends AmeCompositeNode { +class AmeTweakItem extends AmeCompositeNode implements AmeTweakNode { label: KnockoutObservable; public readonly isUserDefined: boolean; private readonly initialProperties: AmeSavedTweakProperties | null = null; private section: AmeTweakSection | null = null; - private parent: AmeTweakItem | null = null; + private parent: AmeTweakNode | null = null; constructor(properties: AmeTweakProperties, module: AmeTweakManagerModule) { super(properties, module, 'self'); @@ -525,7 +576,7 @@ class AmeTweakItem extends AmeCompositeNode { return this; } - setParent(tweak: AmeTweakItem) { + setParent(tweak: AmeTweakNode) { this.parent = tweak; return this; } @@ -534,17 +585,17 @@ class AmeTweakItem extends AmeCompositeNode { return this.section; } - getParent(): AmeTweakItem | null { + getParent(): AmeTweakNode | null { return this.parent; } - addChild(tweak: AmeTweakItem) { + addChild(tweak: AmeTweakNode) { this.children.push(tweak); tweak.setParent(this); return this; } - removeChild(tweak: AmeTweakItem) { + removeChild(tweak: AmeTweakNode) { this.children.remove(tweak); } @@ -567,6 +618,74 @@ class AmeTweakItem extends AmeCompositeNode { } } +interface AmeAliasProperties extends AmeContainedNodeProperties { + tweakId: string; + label: string; +} + +class AmeTweakAlias implements AmeTweakNode { + static idCounter = 0; + + id: string; + htmlId: string; + actorAccess: AmeActorAccessInterface | null; + + readonly isUserDefined: boolean = false; + label: string | KnockoutObservable; + + private parent: AmeTweakNode | null = null; + private section: AmeTweakSection | null = null; + + readonly tooltip: string; + + constructor(target: AmeTweakItem, label: string) { + this.label = label; + + AmeTweakAlias.idCounter++; + this.id = 'alias-' + AmeTweakAlias.idCounter; + this.htmlId = 'ame-tweak_' + AmeTweakManagerModule.slugify(this.id); + + if (target.actorAccess) { + this.actorAccess = new AmeAliasActorAccess(target.actorAccess); + } else { + this.actorAccess = null; + } + + this.tooltip = 'This is an alias for: "' + target.label() + '"'; + const targetSection = target.getSection(); + if (targetSection) { + this.tooltip += ' in the section "' + targetSection.label + '"'; + } + } + + addChild(_: AmeTweakNode): this { + //No children allowed. + throw new Error('Aliases cannot have children.'); + } + + removeChild(_: AmeTweakNode): void { + //No children allowed = nothing to remove. + } + + getParent(): AmeTweakNode | null { + return this.parent; + } + + setParent(tweak: AmeTweakNode): this { + this.parent = tweak; + return this; + } + + setSection(section: AmeTweakSection): this { + this.section = section; + return this; + } + + getSection(): AmeTweakSection | null { + return this.section; + } +} + interface AmeSectionProperties { id: string; label: string; @@ -578,7 +697,7 @@ class AmeTweakSection { id: string; label: string; description: string = ''; - tweaks: KnockoutObservableArray; + tweaks: KnockoutObservableArray; isOpen: KnockoutObservable; footerTemplateName: string | null = null; @@ -590,7 +709,7 @@ class AmeTweakSection { this.id = properties.id; this.label = properties.label; this.isOpen = ko.observable(true); - this.tweaks = ko.observableArray([] as AmeTweakItem[]); + this.tweaks = ko.observableArray([] as AmeTweakNode[]); if (properties.description) { this.description = properties.description; @@ -607,12 +726,12 @@ class AmeTweakSection { } } - addTweak(tweak: AmeTweakItem) { + addTweakNode(tweak: AmeTweakNode) { this.tweaks.push(tweak); tweak.setSection(this); } - removeTweak(tweak: AmeTweakItem) { + removeTweakNode(tweak: AmeTweakNode) { this.tweaks.remove(tweak); } @@ -687,19 +806,33 @@ class AmeTweakManagerModule { }); const firstSection = this.sections[0]; - _.forEach(scriptData.tweaks, (properties) => { - const tweak = new AmeTweakItem(properties, this); - this.tweaksById[tweak.id] = tweak; - + const addNodeToParent = (node: AmeTweakNode, properties: AmeContainedNodeProperties) => { if (properties.parentId && this.tweaksById.hasOwnProperty(properties.parentId)) { - this.tweaksById[properties.parentId].addChild(tweak); + this.tweaksById[properties.parentId].addChild(node); } else { let ownerSection = firstSection; if (properties.sectionId && this.sectionsById.hasOwnProperty(properties.sectionId)) { ownerSection = this.sectionsById[properties.sectionId]; } - ownerSection.addTweak(tweak); + ownerSection.addTweakNode(node); } + }; + + _.forEach(scriptData.tweaks, (properties) => { + const tweak = new AmeTweakItem(properties, this); + this.tweaksById[tweak.id] = tweak; + addNodeToParent(tweak, properties); + }); + + _.forEach(scriptData.aliases, (properties) => { + //Does the target tweak exist? + if (!this.tweaksById.hasOwnProperty(properties.tweakId)) { + return; + } + + const target = this.tweaksById[properties.tweakId]; + const alias = new AmeTweakAlias(target, properties.label); + addNodeToParent(alias, properties); }); //Remove empty sections. @@ -809,7 +942,7 @@ class AmeTweakManagerModule { const newTweak = new AmeTweakItem(props, this); this.tweaksById[newTweak.id] = newTweak; - this.sectionsById['admin-css'].addTweak(newTweak) + this.sectionsById['admin-css'].addTweakNode(newTweak) } static slugify(input: string): string { @@ -831,17 +964,17 @@ class AmeTweakManagerModule { } } - confirmDeleteTweak(tweak: AmeTweakItem) { + confirmDeleteTweak(tweak: AmeTweakNode) { if (!tweak.isUserDefined || !confirm('Delete this tweak?')) { return; } this.deleteTweak(tweak); } - protected deleteTweak(tweak: AmeTweakItem) { + protected deleteTweak(tweak: AmeTweakNode) { const section = tweak.getSection(); if (section) { - section.removeTweak(tweak); + section.removeTweakNode(tweak); } const parent = tweak.getParent(); if (parent) { diff --git a/extras/modules/tweaks/tweaks-template.php b/extras/modules/tweaks/tweaks-template.php index d97b9a2..5baa203 100644 --- a/extras/modules/tweaks/tweaks-template.php +++ b/extras/modules/tweaks/tweaks-template.php @@ -114,13 +114,20 @@
    + data-bind=" + css: { 'ame-twm-tweak': (($data instanceof AmeTweakItem) || ($data instanceof AmeTweakAlias)) }, + attr: { 'id': $data.htmlId }"> diff --git a/extras/modules/tweaks/tweaks.css b/extras/modules/tweaks/tweaks.css index 679c3b7..4035446 100644 --- a/extras/modules/tweaks/tweaks.css +++ b/extras/modules/tweaks/tweaks.css @@ -112,6 +112,12 @@ font-size: 14px; line-height: 1.65; } +.ws-ame-postbox .ame-twm-named-node .ws_tooltip_trigger .dashicons { + vertical-align: text-bottom; +} +.ws-ame-postbox .ame-twm-named-node .ws_tooltip_trigger .dashicons:hover { + color: inherit; +} #ame-tweak-manager #ws_actor_selector_container { margin-bottom: 8px; diff --git a/extras/modules/tweaks/tweaks.css.map b/extras/modules/tweaks/tweaks.css.map index 1ab9c0d..5252a37 100644 --- a/extras/modules/tweaks/tweaks.css.map +++ b/extras/modules/tweaks/tweaks.css.map @@ -1 +1 @@ -{"version":3,"sourceRoot":"","sources":["tweaks.scss","../../../css/_boxes.scss","../../../css/_indeterminate-checkbox.scss"],"names":[],"mappings":";AAMA;ECCC;EACA,YAPkB;EAQlB,YAJmB;EAMnB;EAEA;EDAA;;ACEA;EAGC;EACA,WAHiB;EAIjB;EACA;EAEA;;AAEA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;;AAIA;EACC,QArBe;EAsBf,aAtBe;;AA2BlB;EACC;EACA;EAEA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA,OAtDwC;EAuDxC;EACA;;AAEA;EACC;;AAGD;EACC;EACA;;AAGD;EACC;EACA;EACA;;AAGD;EACC;EACA;EACA;EACA;;AAIF;EACC;EAEA,SApFkE;;AAwFlE;EACC;;AAGD;EACC;;AAGD;EACC;;AD3FF;EACC;;;AAMF;EACC,aAbgB;;AAehB;EACC;;;AEnBD;EACC;EACA,OAH4C;EAU5C;EACA;EAMA;EACA;EACA;EACA;EACA;;AAGD;EACC;IAEC,QADU;IAEV,OAFU;IAGV,aAHU;IAIV;IAEA;IACA;IACA;;;;AFNH;EACC;EACA;;;AAGD;EACC;;;AAGD;EACC;;;AASD;EACC;EACA;EACA;;;AAGD;EACC;;;AAGD;EACC;EACA;EACA;EACA;;AAEA;EACC;;AAGD;EACC;;AAGD;EACC;;;AAIF;EACC;;;AAIA;EACC;EACA;EACA;EAEA;EAGA;;AAID;EACC;EACA;EACA;EACA;;AAID;EACC;EACA;;;AAIF;EACC;;;AAGD;EACC;EACA","file":"tweaks.css"} \ No newline at end of file +{"version":3,"sourceRoot":"","sources":["tweaks.scss","../../../css/_boxes.scss","../../../css/_indeterminate-checkbox.scss","../../../css/_ui-constants.scss"],"names":[],"mappings":";AAOA;ECAC;EACA,YAPkB;EAQlB,YAJmB;EAMnB;EAEA;EDCA;;ACCA;EAGC;EACA,WAHiB;EAIjB;EACA;EAEA;;AAEA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;;AAIA;EACC,QArBe;EAsBf,aAtBe;;AA2BlB;EACC;EACA;EAEA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA,OAtDwC;EAuDxC;EACA;;AAEA;EACC;;AAGD;EACC;EACA;;AAGD;EACC;EACA;EACA;;AAGD;EACC;EACA;EACA;EACA;;AAIF;EACC;EAEA,SApFkE;;AAwFlE;EACC;;AAGD;EACC;;AAGD;EACC;;AD1FF;EACC;;;AAMF;EACC,aAbgB;;AAehB;EACC;;;AEpBD;EACC;EACA,OAH4C;EAU5C;EACA;EAMA;EACA;EACA;EACA;EACA;;AAGD;EACC;IAEC,QADU;IAEV,OAFU;IAGV,aAHU;IAIV;IAEA;IACA;IACA;;;;AFLH;EACC;EACA;;AAEA;EACC;;AAGA;EACC;;;AAKH;EACC,eG3C2B;;;AH8C5B;EACC;;;AASD;EACC;EACA;EACA;;;AAGD;EACC;;;AAGD;EACC;EACA;EACA;EACA;;AAEA;EACC;;AAGD;EACC;;AAGD;EACC;;;AAIF;EACC;;;AAIA;EACC;EACA;EACA;EAEA;EAGA;;AAID;EACC;EACA;EACA;EACA;;AAID;EACC;EACA;;;AAIF;EACC;;;AAGD;EACC;EACA","file":"tweaks.css"} \ No newline at end of file diff --git a/extras/modules/tweaks/tweaks.php b/extras/modules/tweaks/tweaks.php index 939b94e..2bc3866 100644 --- a/extras/modules/tweaks/tweaks.php +++ b/extras/modules/tweaks/tweaks.php @@ -7,6 +7,7 @@ require_once __DIR__ . '/configurables.php'; require_once __DIR__ . '/ameBaseTweak.php'; +require_once __DIR__ . '/ameTweakAlias.php'; require_once __DIR__ . '/ameHideSelectorTweak.php'; require_once __DIR__ . '/ameHideSidebarTweak.php'; require_once __DIR__ . '/ameHideSidebarWidgetTweak.php'; @@ -15,6 +16,7 @@ require_once __DIR__ . '/ameTinyMceButtonManager.php'; require_once __DIR__ . '/ameAdminCssTweakManager.php'; require_once __DIR__ . '/ameGutenbergBlockManager.php'; +require_once __DIR__ . '/ameMediaRestrictionsManager.php'; /** @noinspection PhpUnused The class is actually used in extras.php */ @@ -55,6 +57,11 @@ class ameTweakManager extends amePersistentModule { */ private $sections = []; + /** + * @var ameTweakAlias[] + */ + private $aliases = []; + private $editorButtonManager; private $adminCssManager; private $gutenbergBlockManager; @@ -83,6 +90,7 @@ public function __construct($menuEditor) { $this->editorButtonManager = new ameTinyMceButtonManager(); $this->adminCssManager = new ameAdminCssTweakManager(); $this->gutenbergBlockManager = new ameGutenbergBlockManager($menuEditor); + new ameMediaRestrictionsManager(); $this->tweakBuilders['admin-css'] = [$this->adminCssManager, 'createTweak']; @@ -220,6 +228,14 @@ public function addTweak($tweak, $applicationMode = self::APPLY_TWEAK_AUTO) { } } + /** + * @param \ameTweakAlias $alias + * @return void + */ + public function addAlias($alias) { + $this->aliases[] = $alias; + } + /** * @param ameBaseTweak[] $tweaks */ @@ -454,9 +470,15 @@ protected function getScriptData() { $sectionData[] = $section->toArray(); } + $aliasData = []; + foreach ($this->aliases as $alias) { + $aliasData[] = $alias->toArray(); + } + return [ 'tweaks' => $tweakData, 'sections' => $sectionData, + 'aliases' => $aliasData, 'isProVersion' => $this->menuEditor->is_pro_version(), 'lastUserTweakSuffix' => ameUtils::get($settings, 'lastUserTweakSuffix', 0), ]; @@ -544,6 +566,7 @@ public function registerHideableItems($store) { 'profile' => null, 'sidebar-widgets' => null, 'sidebars' => null, + 'gutenberg-general' => 'Gutenberg Block Editor', ]; $enabledSections = apply_filters('admin_menu_editor-hideable_tweak_sections', $enabledSections); @@ -551,6 +574,7 @@ public function registerHideableItems($store) { $parentCategories = [ ameGutenbergBlockManager::SECTION_ID => $postEditorCategory, ameTinyMceButtonManager::SECTION_ID => $postEditorCategory, + 'gutenberg-general' => $postEditorCategory, ]; $categoriesBySection = []; diff --git a/extras/modules/tweaks/tweaks.scss b/extras/modules/tweaks/tweaks.scss index 91ab753..e8b6eb6 100644 --- a/extras/modules/tweaks/tweaks.scss +++ b/extras/modules/tweaks/tweaks.scss @@ -1,5 +1,6 @@ @import "../../../css/indeterminate-checkbox"; @import "../../../css/boxes"; +@import "../../../css/ui-constants"; $desiredChildTweakOffset: 2em; $childrenOffset: 1.7em; @@ -29,10 +30,19 @@ $childrenOffset: 1.7em; .ame-twm-named-node { font-size: 14px; line-height: 1.65; + + .ws-ame-postbox & .ws_tooltip_trigger .dashicons { + vertical-align: text-bottom; + //color: #777; + + &:hover { + color: inherit; + } + } } #ame-tweak-manager #ws_actor_selector_container { - margin-bottom: 8px; + margin-bottom: $largeActorSelectorToUiGap; } #ame-twm-new-css-tweak-code { diff --git a/includes/ame-utils.php b/includes/ame-utils.php index f69cb55..2a394c3 100644 --- a/includes/ame-utils.php +++ b/includes/ame-utils.php @@ -327,6 +327,17 @@ public static function withSelectedActor( return $outputQueryParams; } + + /** + * Check if a string starts with a specific substring. + * + * @param string $haystack + * @param string $needle + * @return bool + */ + public static function stringStartsWith($haystack, $needle) { + return (substr($haystack, 0, strlen($needle)) === $needle); + } } /** diff --git a/includes/editor-page.php b/includes/editor-page.php index e11ac42..8c9949c 100644 --- a/includes/editor-page.php +++ b/includes/editor-page.php @@ -233,6 +233,7 @@ function ame_register_sort_buttons($toolbar) {
    +
    @@ -434,13 +435,27 @@ class="button ws_main_button" /> $hint_id = 'ws_sidebar_pro_ad'; $show_pro_benefits = !apply_filters('admin_menu_editor_is_pro', false) && (!isset($editor_data['show_hints'][$hint_id]) || $editor_data['show_hints'][$hint_id]); - if ( $show_pro_benefits ): - //Decide whether to show the Pro version link, or a link to the free online tool - //that is based on the Pro version. + if ( $show_pro_benefits): + //Decide whether to show the Pro version link, or a link to one of our other WP tools. $hash_value = hexdec(substr(md5(get_site_url()), 0, 5)) % 100; - $pro_probability = 80; - if ($hash_value >= (100 - $pro_probability)): + //Pick one option proportionally to the weights. Weights should add up to 100. + $sidebar_ad_weights = [ + 'pro' => 80, + 'adminNoticesBoss' => 18, + 'adminThemeGenerator' => 2, + ]; + $chosen_ad = array_keys($sidebar_ad_weights)[0]; + $cumulative_weight = 0; + foreach ($sidebar_ad_weights as $ad => $weight) { + $cumulative_weight += $weight; + $chosen_ad = $ad; + if ($hash_value < $cumulative_weight) { + break; + } + } + + if ($chosen_ad === 'pro'): $benefit_variations = array( 'Hide dashboard widgets.', 'More menu icons.', @@ -472,7 +487,7 @@ class="button ws_main_button" />
    @@ -497,6 +512,26 @@ class="button ws_main_button" /> +
    + +
    +
    x
    +
    + Check out my other plugin: Admin Notices Boss +
      +
    • Hide individual admin notices permanently.
    • +
    • Move notices to an unobtrusive panel.
    • +
    • Hide notices for specific roles or users.
    • +
    • Hide notices based on type (warning, info, etc).
    • +
    + + AdminNoticesBoss.com + +
    +
    + diff --git a/includes/generate-menu-dashicons.php b/includes/generate-menu-dashicons.php index 570d666..ac2fb9d 100644 --- a/includes/generate-menu-dashicons.php +++ b/includes/generate-menu-dashicons.php @@ -18,7 +18,7 @@ $allDashiconDefinitions = ''; -$ignoreIcons = array('dashboard', 'editor-bold', 'editor-italic'); +$ignoreIcons = array('dashboard'); $ignoreIcons = array_flip($ignoreIcons); // phpcs:ignore WordPressVIPMinimum.Performance.FetchingRemoteData.FileGetContentsUnknown -- Not fetching remote data. diff --git a/includes/menu-editor-core.php b/includes/menu-editor-core.php index bea9f77..cec8a6c 100644 --- a/includes/menu-editor-core.php +++ b/includes/menu-editor-core.php @@ -32,8 +32,6 @@ class WPMenuEditor extends MenuEd_ShadowPluginFramework { private $old_wp_menu; private $old_wp_submenu; - private $title_lookups = array(); //A list of page titles indexed by $item['file']. Used to - //fix the titles of moved plugin pages. private $reverse_item_lookup = array(); //Contains the final (merged & filtered) list of admin menu items, //indexed by URL. @@ -201,7 +199,7 @@ function init(){ //the current site but did not exist on the site where the user last edited the menu configuration. 'unused_item_position' => 'relative', //"relative" or "bottom". - //Permissions for menu items that are not part of the save menu configuration. + //Permissions for menu items that are not part of the saved menu configuration. //The default is to leave the permissions unchanged. 'unused_item_permissions' => 'unchanged', //"unchanged" or "match_plugin_access". @@ -212,6 +210,9 @@ function init(){ //but adds decompression overhead to very admin page. 'compress_custom_menu' => false, + //Automatically clean up data associated with missing roles and users. Only applies to some settings. + 'delete_orphan_actor_settings' => !is_multisite(), + //Make custom menu and page titles translatable with WPML. They will appear in the "Strings" section. //This only applies to custom (i.e. changed) titles. 'wpml_support_enabled' => true, @@ -357,6 +358,8 @@ function init(){ 'admin.php?page=email-builder' => true, //Email Marketing Automation - Mail Mint 1.2.5 'admin.php?page=mint-mail-automation-editor' => true, + //Enable Media Replace 4.1.5 + 'upload.php?page=enable-media-replace/enable-media-replace.php' => true, ); //AJAXify screen options @@ -459,7 +462,7 @@ function init_finish() { $this->save_options(); } else { //Yes, this method can actually run before WP updates the list of active plugins. That means functions - //like is_plugin_active_for_network() will return false. As as result, we can't determine whether + //like is_plugin_active_for_network() will return false. As a result, we can't determine whether //the plugin has been network-activated yet, so lets skip setting up the default config until //the next page load. } @@ -726,9 +729,23 @@ function hook_admin_menu(){ } //Replace the admin menu just before it is displayed and restore it afterwards. - //The fact that replace_wp_menu() is attached to the 'parent_file' hook is incidental; + //The fact that replace_wp_menu() is attached to the 'submenu_file' hook is incidental; //there just wasn't any other, more suitable hook available. - add_filter('parent_file', array($this, 'replace_wp_menu'), 1001); + $replacementFilter = 'submenu_file'; + /* Compatibility workaround for UIPress 3.3.100. + * + * UIPress also replaces the admin menu, but it does so using the 'parent_file' filter + * (conditionally, requires at least one active UIPress template, etc). If we want our + * menu settings to be applied, we need to replace the admin menu *before* UIPress does. + * So let's use the 'parent_file' filter when UIPress is active. + */ + if ( + (defined('uip_plugin_path_name') && (uip_plugin_path_name === 'uipress-lite')) + || $this->is_plugin_active('uipress/uipress.php') + ) { + $replacementFilter = 'parent_file'; + } + add_filter($replacementFilter, array($this, 'replace_wp_menu'), 1001); add_action('adminmenu', array($this, 'restore_wp_menu')); //A compatibility hack for Ozh's Admin Drop Down Menu. Make sure it also sees the modified menu. @@ -759,10 +776,10 @@ function hook_admin_menu(){ /** * Replace the current WP menu with our custom one. * - * @param string $parent_file Ignored. Required because this method is a hook for the 'parent_file' filter. - * @return string Returns the $parent_file argument. + * @param string $submenu_file Unused. Required because this method is a hook for the 'submenu_file' filter. + * @return string Returns the $submenu_file argument. */ - public function replace_wp_menu($parent_file = '') { + public function replace_wp_menu($submenu_file = '') { global $menu, $submenu; $this->old_wp_menu = $menu; @@ -778,7 +795,7 @@ public function replace_wp_menu($parent_file = '') { $this->user_cap_cache_enabled = false; do_action('admin_menu_editor-menu_replaced'); - return $parent_file; + return $submenu_file; } /** @@ -822,6 +839,7 @@ private function filter_global_menu() { foreach ($items as $index => $data) { if ( ! $this->current_user_can($data[1]) ) { unset($submenu[$parent][$index]); + /** @noinspection PhpArrayUsedOnlyForWriteInspection -- It's a global variable used by WP. */ $_wp_submenu_nopriv[$parent][$data[2]] = true; } else { //The menu might be set to some kind of special capability that is only valid @@ -1317,7 +1335,7 @@ public function move_editor_scripts_to_top() { $wp_scripts = wp_scripts(); //Requires WordPress 4.2.0+ //Sanity check. If the wp_scripts implementation has changed significantly, don't touch it. - if ( !isset($wp_scripts->queue) || (!is_array($wp_scripts->queue) || ($wp_scripts->queue instanceof Traversable)) ) { + if ( !isset($wp_scripts->queue) || !is_array($wp_scripts->queue) ) { return; } @@ -1385,7 +1403,7 @@ public function remove_ultimate_tinymce_qtags() { * @return void */ function enqueue_styles(){ - wp_enqueue_auto_versioned_style('jquery-qtip-syle', plugins_url('css/jquery.qtip.min.css', $this->plugin_file), array()); + wp_enqueue_auto_versioned_style('jquery-qtip-syle', plugins_url('css/jquery.qtip.min.css', $this->plugin_file)); wp_register_auto_versioned_style( 'menu-editor-colours-classic', @@ -1671,6 +1689,8 @@ public function maybe_reset_plugin_access(/** @noinspection PhpUnusedParameterIn * @param string $admin_title The current admin title (full). * @param string $title The current page title. * @return string New admin title. + * + * @noinspection PhpUnused -- The parent class automatically sets up hooks for all "hook_" methods. */ function hook_admin_title($admin_title, $title){ $item = $this->get_current_menu_item(); @@ -1906,8 +1926,8 @@ function menu_merge($tree){ //Move orphaned items back to their original parents. foreach($orphans as $item) { - $defaultParent = $item['defaults']['parent']; - //TODO: Apparently 'parent' might not exist in some configurations. Unknown bug. + //Apparently, 'parent' might not exist in some configurations. Unknown why. + $defaultParent = isset($item['defaults']['parent']) ? $item['defaults']['parent'] : null; if ( isset($defaultParent) && isset($tree[$defaultParent]) ) { $tree[$defaultParent]['items'][] = $item; } else { @@ -2038,7 +2058,6 @@ public function get_new_menu_grant_access() { * @uses WPMenuEditor::$custom_wp_menu Stores the generated top-level menu here. * @uses WPMenuEditor::$custom_wp_submenu Stores the generated sub-menu here. * - * @uses WPMenuEditor::$title_lookups Generates a lookup list of page titles. * @uses WPMenuEditor::$reverse_item_lookup Generates a lookup list of url => menu item relationships. * * @param array $tree The new menu, in the internal tree format. @@ -2048,7 +2067,6 @@ function build_custom_wp_menu($tree){ $new_tree = array(); $new_menu = array(); $new_submenu = array(); - $this->title_lookups = array(); $this->custom_menu_is_deep = false; //Prepare the top menu @@ -2065,10 +2083,6 @@ function build_custom_wp_menu($tree){ $topmenu = $this->prepare_for_output($topmenu, 'menu'); - if ( empty($topmenu['separator']) ) { - $this->title_lookups[$topmenu['file']] = !empty($topmenu['page_title']) ? $topmenu['page_title'] : $topmenu['menu_title']; - } - //Prepare the submenu of this menu $topmenu['items'] = $this->prepare_children_for_output($topmenu); $new_tree[] = $topmenu; @@ -2113,9 +2127,6 @@ private function prepare_children_for_output($menu, $is_deep = null) { foreach ($menu['items'] as $item) { $item = $this->prepare_for_output($item, 'submenu', $menu, ($is_deep === true)); - //Make a note of the page's correct title so we can fix it later if necessary. - $this->title_lookups[$item['file']] = !empty($item['page_title']) ? $item['page_title'] : $item['menu_title']; - if ( !empty($item['items']) ) { $item['items'] = $this->prepare_children_for_output($item, true); } @@ -2271,7 +2282,7 @@ private function build_nested_submenu(&$item, &$wpMenu, &$wpSubmenu) { */ private function convert_to_wp_format($item) { //Build the menu structure that WP expects - $wp_item = array( + return array( $item['menu_title'], $item['access_level'], $item['file'], @@ -2280,8 +2291,6 @@ private function convert_to_wp_format($item) { $item['hookname'], //ID isset($item['wp_icon_url']) ? $item['wp_icon_url'] : $item['icon_url'], ); - - return $wp_item; } /** @@ -2764,18 +2773,37 @@ private function handle_form_submission($post, $action = '') { // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Escaped above, see sprintf() call. . $debugOutput ); - - return; // phpcs:enable } //Sanitize menu item properties. $menu['tree'] = ameMenu::sanitize($menu['tree']); + $deleteOrphanActorSettings = !empty($this->options['delete_orphan_actor_settings']); + $actorCleaner = new ameActorAccessCleaner(); + //Discard capabilities that refer to unregistered post types or taxonomies. if ( !empty($menu['granted_capabilities']) ) { $capFilter = new ameGrantedCapabilityFilter(); $menu['granted_capabilities'] = $capFilter->clean_up($menu['granted_capabilities']); + + //Optionally, do the same for missing roles and users. + if ( $deleteOrphanActorSettings ) { + $menu['granted_capabilities'] = $actorCleaner->cleanUpDictionary($menu['granted_capabilities']); + } + } + + //Remove menu permissions associated with missing roles and users. + if ( $deleteOrphanActorSettings ) { + $menu['tree'] = ameMenu::map_items( + $menu['tree'], + function ($item) use ($actorCleaner) { + if ( !empty($item['grant_access']) ) { + $item['grant_access'] = $actorCleaner->cleanUpDictionary($item['grant_access']); + } + return $item; + } + ); } //Remember if the user has changed any menu icons to different Dashicons. @@ -2956,6 +2984,9 @@ private function handle_form_submission($post, $action = '') { } } + //Whether to delete settings associated with roles/users that no longer exist. + $this->options['delete_orphan_actor_settings'] = !empty($this->post['delete_orphan_actor_settings']); + //Menu data compression. $this->options['compress_custom_menu'] = !empty($this->post['compress_custom_menu']); @@ -3012,6 +3043,9 @@ private function update_nesting_settings($post) { return false; } + /** + * @noinspection PhpArrayWriteIsNotUsedInspection -- $editor_data is used in the editor-page.php template. + */ private function display_editor_ui() { //Prepare a bunch of parameters for the editor. $editor_data = array( @@ -3030,11 +3064,27 @@ private function display_editor_ui() { $default_menu = $this->get_default_menu(); //Is there a custom menu? - if (!empty($this->merged_custom_menu)){ + $custom_menu = null; + if ( !empty($this->merged_custom_menu) ) { $custom_menu = $this->merged_custom_menu; } else { - //Start out with the default menu if there is no user-created one - $custom_menu = $default_menu; + if ( $this->loaded_menu_config_id ) { + //It's possible that we might have a custom configuration that just doesn't have + //a menu tree, so the merged config would be uninitialized. In that case, keep + //the custom config but take the default menu tree. + $stored_custom_config = $this->load_custom_menu($this->loaded_menu_config_id); + if ( $stored_custom_config ) { + if ( empty($stored_custom_config['tree']) ) { + $stored_custom_config['tree'] = $default_menu['tree'] ?: []; + } + $custom_menu = $stored_custom_config; + } + } + + if ( $custom_menu === null ) { + //Start out with the default menu if there is no user-created one. + $custom_menu = $default_menu; + } } //Encode both menus as JSON @@ -3094,16 +3144,17 @@ private function get_default_menu() { * * @return array */ - public function get_active_admin_menu() { + public function get_active_admin_menu_tree() { if ( !did_action('admin_menu') && !did_action('network_admin_menu') ) { throw new LogicException(__METHOD__ . ' was called too early. You must only call it after the admin menu is ready.'); } if (!empty($this->merged_custom_menu)){ - return $this->merged_custom_menu; + $config = $this->merged_custom_menu; } else { - return $this->get_default_menu(); + $config = $this->get_default_menu(); } + return $config['tree'] ?: array(); } /** @@ -3165,13 +3216,9 @@ public function display_editor_tabs() { */ private function display_plugin_settings_ui() { //These variables are used by settings-page.php. - /** @noinspection PhpUnusedLocalVariableInspection */ $settings = $this->options; - /** @noinspection PhpUnusedLocalVariableInspection */ $settings_page_url = $this->get_settings_page_url(); - /** @noinspection PhpUnusedLocalVariableInspection */ $editor_page_url = admin_url($this->settings_link); - /** @noinspection PhpUnusedLocalVariableInspection */ $db_option_name = $this->option_name; require dirname(__FILE__) . '/settings-page.php'; @@ -4218,7 +4265,7 @@ private function update_wpml_strings($old_menu, $custom_menu) { * @return array Associative array of strings that can be translated, indexed by unique name. */ private function get_wpml_strings($custom_menu) { - if ( empty($custom_menu) ) { + if ( empty($custom_menu) || empty($custom_menu['tree']) ) { return array(); } @@ -4236,7 +4283,7 @@ private function get_wpml_strings($custom_menu) { } } - if ( isset($top_menu['items']) && !empty($top_menu['items']) ) { + if ( !empty($top_menu['items']) ) { foreach($top_menu['items'] as $item) { if ( $item['separator'] ) { continue; @@ -4307,26 +4354,30 @@ private function apply_bbpress_compat_fix() { } /** - * Compatibility fix for WooCommerce 2.2.1+. - * Summary: When AME is active, an unusable WooCommerce -> WooCommerce menu item shows up. Here we remove it. - * - * WooCommerce creates a top level "WooCommerce" menu with no callback. By default, WordPress automatically adds - * a submenu item with the same name. However, since the item doesn't have a callback, it is unusable and clicking - * it just triggers a "Cannot load woocommerce" error. So WooCommerce removes this item in an admin_head hook to - * hide it. With AME active, the item shows up anyway, and users get confused by the error. - * - * Fix it by removing the problematic menu item. - * - * Caution: If the user hides all WooCommerce submenus but not the top level menu, the WooCommerce menu will still - * show up but be inaccessible. This may be slightly counter-intuitive, but seems reasonable. + * Compatibility fixes for WooCommerce. */ private function apply_woocommerce_compat_fix() { if ( !isset($this->default_wp_submenu, $this->default_wp_submenu['woocommerce']) ) { return; } - $badSubmenuExists = isset($this->default_wp_submenu['woocommerce'][0]) - && isset($this->default_wp_submenu['woocommerce'][0][2]) + /* + * WooCommerce 2.2.1+ + * + * When AME is active, an unusable WooCommerce -> WooCommerce menu item shows up. Here we remove it. + * + * WooCommerce creates a top level "WooCommerce" menu with no callback. By default, WordPress + * automatically adds a submenu item with the same name. However, since the item doesn't have + * a callback, it is unusable and clicking it just triggers a "Cannot load woocommerce" error. + * So WooCommerce removes this item in an admin_head hook to hide it. With AME active, the item + * shows up anyway, and users get confused by the error. + * + * Fix it by removing the problematic menu item. + * + * Caution: If the user hides all WooCommerce submenus but not the top level menu, the WooCommerce menu will still + * show up but be inaccessible. This may be slightly counter-intuitive, but seems reasonable. + */ + $badSubmenuExists = isset($this->default_wp_submenu['woocommerce'][0][2]) && ($this->default_wp_submenu['woocommerce'][0][2] === 'woocommerce'); $anotherSubmenuExists = isset($this->default_wp_submenu['woocommerce'][1]); @@ -4334,6 +4385,41 @@ private function apply_woocommerce_compat_fix() { $this->default_wp_submenu['woocommerce'][0] = $this->default_wp_submenu['woocommerce'][1]; unset($this->default_wp_submenu['woocommerce'][1]); } + + /* + * WooCommerce 9.0.1 (and other versions) + * + * WooCommerce creates two "WooCommerce -> Orders" menu items. This has to do with different + * order storage types. WooCommerce removes the redundant item, but that doesn't work when AME + * is active because it happens in the admin_init hook. + * + * According to user reports, when the WooCommerce Subscriptions extension is active, the same + * problem happens with the "WooCommerce -> Subscriptions" item. + * + * Let's check if there are duplicate items and remove the ones that use custom post types. + */ + $potentialDuplicateItems = [ + 'edit.php?post_type=shop_order' => 'wc-orders', + 'edit.php?post_type=shop_subscription' => 'wc-orders--shop_subscription', + ]; + foreach ($potentialDuplicateItems as $redundantSlug => $goodSlug) { + $redundantItemIndex = null; + $goodItemIndex = null; + foreach ($this->default_wp_submenu['woocommerce'] as $index => $menu) { + //Skip menu items without a slug/URL in case someone adds a custom separator or something. + if ( !isset($menu[2]) ) { + continue; + } + if ( $menu[2] === $redundantSlug ) { + $redundantItemIndex = $index; + } elseif ( $menu[2] === $goodSlug ) { + $goodItemIndex = $index; + } + } + if ( ($goodItemIndex !== null) && ($redundantItemIndex !== null) ) { + unset($this->default_wp_submenu['woocommerce'][$redundantItemIndex]); + } + } } /** @@ -4347,7 +4433,7 @@ private function apply_woocommerce_compat_fix() { * hook. However, by that time AME has already processed the admin menu, so it doesn't see the change. * * Workaround: Run the relevant WooCommerce callback during the "admin_menu" action (before processing the menu). - * The now-redundant"admin_head" hook is then removed. + * The now-redundant "admin_head" hook is then removed. */ private function apply_woocommerce_order_count_fix() { global $wp_filter; @@ -4423,7 +4509,7 @@ private function apply_divi_training_fix() { } /** - * Compatibility fix for MailPoet 3. Last tested with MailPoet 3.44.0. + * Compatibility fix for MailPoet 3 and 4. Last tested with MailPoet 4.49.1. * * MailPoet deliberately removes all third-party stylesheets from its admin pages. * As a result, some AME features that use stylesheets - like custom menu icons and admin @@ -4439,7 +4525,8 @@ private function apply_mailpoet_compat_fix() { * @return array */ public function _whitelist_ame_styles_for_mailpoet($styles) { - $styles[] = 'ame_output_menu_color_css'; + $styles[] = 'ame-custom-menu-colors'; + $styles[] = 'ame-menu-style-bundle'; $styles[] = 'font-awesome\.css'; $styles[] = 'force-dashicons\.css'; return $styles; @@ -4659,6 +4746,11 @@ public function on_user_metadata_changed($unused_meta_id, $user_id, $meta_key) { //Did this update change user capabilities or roles? If so, refresh virtual caps. $user = $this->get_user_by_id($user_id); + if ( empty($user) ) { + //This should never happen for a non-empty ID, but a user reported that it does + //on their site. Not clear why, did not investigate in detail. + return; + } if ( $meta_key === $user->cap_key ) { $this->update_virtual_cap_cache($user); } @@ -4719,7 +4811,7 @@ private function get_post_type_details() { foreach($post_types as $id => $post_type) { $title = $id; - if (isset($post_type->labels, $post_type->labels->name) && !empty($post_type->labels->name)) { + if ( isset($post_type->labels->name) && !empty($post_type->labels->name) ) { $title = $post_type->labels->name; } @@ -4758,7 +4850,7 @@ private function get_taxonomy_details() { foreach($taxonomies as $id => $taxonomy) { $title = $id; - if (isset($taxonomy->labels, $taxonomy->labels->name) && !empty($taxonomy->labels->name)) { + if ( isset($taxonomy->labels->name) && !empty($taxonomy->labels->name) ) { $title = $taxonomy->labels->name; } @@ -4934,6 +5026,11 @@ public function get_available_modules() { 'requiredPhpVersion' => '5.3', 'title' => 'Dashboard Widgets', ), + 'nav-menu-visibility' => array( + 'relativePath' => 'extras/modules/nav-menu-visibility/nav-menu-visibility.php', + 'className' => '\\YahnisElsts\\AdminMenuEditor\\NavMenuVisibility\\NavMenuModule', + 'title' => 'Navigation Menu Visibility', + ), 'redirector' => array( 'relativePath' => 'modules/redirector/redirector.php', 'className' => '\\YahnisElsts\\AdminMenuEditor\\Redirects\\Module', @@ -5040,8 +5137,8 @@ public function is_custom_menu_deep() { */ public function register_hideable_items($store) { try { - $menu = $this->get_active_admin_menu(); - if ( empty($menu['tree']) ) { + $tree = $this->get_active_admin_menu_tree(); + if ( empty($tree) ) { return; } } catch (LogicException $ex) { @@ -5057,11 +5154,12 @@ public function register_hideable_items($store) { true ); - $this->register_menus_as_hideable($store, $menu['tree'], null, 1, $cat); + $this->register_menus_as_hideable($store, $tree, null, 1, $cat); //Also, register visible components. //The word "component" is used in at least two distinct senses here, which is not ideal. $componentsByItemId = apply_filters('admin_menu_editor-hideable_vis_components', array()); + $menuConfig = $this->load_custom_menu($this->loaded_menu_config_id); foreach($componentsByItemId as $itemId => $properties) { $store->addItem( $itemId, @@ -5073,7 +5171,7 @@ public function register_hideable_items($store) { true )->setSortPriority(1)), null, - ameUtils::get($menu, array('component_visibility', $properties['component']), array()), + ameUtils::get($menuConfig, array('component_visibility', $properties['component']), array()), 'admin-menu' ); } @@ -5128,8 +5226,8 @@ private function register_menus_as_hideable( */ public function save_hideable_items($errors, $items) { try { - $menu = $this->get_active_admin_menu(); - if ( empty($menu['tree']) ) { + $tree = $this->get_active_admin_menu_tree(); + if ( empty($tree) ) { return $errors; } } catch (LogicException $ex) { @@ -5137,12 +5235,20 @@ public function save_hideable_items($errors, $items) { return $errors; } - $hasChanged = $this->update_hideable_menu_items($items, $menu['tree'], 1); + $hasChanged = $this->update_hideable_menu_items($items, $tree, 1); + + $menuConfig = $this->load_custom_menu($this->loaded_menu_config_id); + if ( empty($menuConfig) ) { + $menuConfig = ameMenu::new_empty_config(); + } + if ( $hasChanged ) { + $menuConfig['tree'] = $tree; + } //Update component visibility. It's more efficient to do it here because we //don't need to re-save the whole menu configuration multiple times. - if ( !isset($menu['component_visibility']) ) { - $menu['component_visibility'] = array(); + if ( !isset($menuConfig['component_visibility']) ) { + $menuConfig['component_visibility'] = array(); } $componentsByItemId = apply_filters('admin_menu_editor-hideable_vis_components', array()); @@ -5150,16 +5256,16 @@ public function save_hideable_items($errors, $items) { $component = $properties['component']; if ( isset($items[$itemId]) ) { $enabled = ameUtils::get($items[$itemId], 'enabled', array()); - $oldAccess = ameUtils::get($menu, array('component_visibility', $component), array()); + $oldAccess = ameUtils::get($menuConfig, array('component_visibility', $component), array()); if ( !ameUtils::areAssocArraysEqual($enabled, $oldAccess) ) { - $menu['component_visibility'][$component] = $enabled; + $menuConfig['component_visibility'][$component] = $enabled; $hasChanged = true; } } } if ( $hasChanged ) { - if ( !$this->set_custom_menu($menu) ) { + if ( !$this->set_custom_menu($menuConfig) ) { $errors[] = new WP_Error('menu_update_failed', 'Failed to save the admin menu.'); } } @@ -5252,6 +5358,10 @@ public function build($menu, $submenu, $blacklist = array()){ $this->blacklist = $blacklist; if ( !empty($menu) ) { + if ( !is_array($menu) && ($menu instanceof Traversable) ) { + $menu = iterator_to_array($menu); + } + //At this point, the menu might not be sorted yet, especially if other plugins have made changes to it. //We need to know the relative order of menus to insert new items in the right place. ksort($menu, SORT_NUMERIC); diff --git a/includes/menu-item.php b/includes/menu-item.php index 5ccdcf4..891e78b 100644 --- a/includes/menu-item.php +++ b/includes/menu-item.php @@ -151,6 +151,7 @@ public static function basic_defaults() { 'url' => '', 'embedded_page_id' => 0, 'embedded_page_blog_id' => function_exists('get_current_blog_id') ? get_current_blog_id() : 1, + 'local_id' => '', ); return $basic_defaults; diff --git a/includes/menu.php b/includes/menu.php index a58d5f1..4dc39d2 100644 --- a/includes/menu.php +++ b/includes/menu.php @@ -1,7 +1,7 @@ $item) { - $menu['tree'][$file] = ameMenuItem::normalize($item); + if ( isset($arr['tree']) ) { + foreach ($arr['tree'] as $file => $item) { + $menu['tree'][$file] = ameMenuItem::normalize($item); + } } $menu['format']['is_normalized'] = true; } @@ -268,6 +272,16 @@ public static function to_json($menu) { return $result; } + /** + * Create a new, empty menu configuration. + * + * @return array + */ + public static function new_empty_config() { + $menu = array('tree' => array()); + return self::add_format_header($menu); + } + /** * Sort the menus and menu items of a given menu according to their positions * @@ -498,8 +512,10 @@ public static function decompress($menu) { return $menu; } - $common = $menu['format']['common']; - $menu['tree'] = self::decompress_list($menu['tree'], $common); + if ( !empty($menu['tree']) ) { + $common = $menu['format']['common']; + $menu['tree'] = self::decompress_list($menu['tree'], $common); + } unset($menu['format']['compressed'], $menu['format']['common']); return $menu; @@ -536,7 +552,7 @@ protected static function decompress_item($item, $common) { * @param array|null $extra_params Optional. An array of additional parameters to pass to the callback. * @return array */ - protected static function map_items($items, $callback, $extra_params = null) { + public static function map_items($items, $callback, $extra_params = null) { if ( $extra_params === null ) { $extra_params = array(); } @@ -629,7 +645,9 @@ class ameModifiedIconDetector { public static function detect($menu) { $detector = new self(); - ameMenu::for_each($menu['tree'], array($detector, 'checkItem')); + if ( !empty($menu['tree']) ) { + ameMenu::for_each($menu['tree'], array($detector, 'checkItem')); + } return $detector->getResult(); } diff --git a/includes/role-utils.php b/includes/role-utils.php index 85a20fa..440a6b6 100644 --- a/includes/role-utils.php +++ b/includes/role-utils.php @@ -1,4 +1,5 @@ roles as $role){ - if ( !empty($role['capabilities']) && is_array($role['capabilities']) ){ //Being defensive here + foreach ($wp_roles->roles as $role) { + if ( !empty($role['capabilities']) && is_array($role['capabilities']) ) { //Being defensive here //We use the "+" operator instead of array_merge() to combine arrays because we don't want //integer keys to be renumbered. Technically, capabilities should be strings and not integers, //but in practice some plugins do create integer capabilities. @@ -36,15 +37,15 @@ public static function get_all_capabilities($include_multisite_caps = null){ $regular_cache = $capabilities; //Add multisite-specific capabilities (not listed in any roles in WP 3.0) - if ($include_multisite_caps) { - $multisite_caps = array( - 'manage_sites' => 1, - 'manage_network' => 1, - 'manage_network_users' => 1, - 'manage_network_themes' => 1, + if ( $include_multisite_caps ) { + $multisite_caps = [ + 'manage_sites' => 1, + 'manage_network' => 1, + 'manage_network_users' => 1, + 'manage_network_themes' => 1, 'manage_network_options' => 1, 'manage_network_plugins' => 1, - ); + ]; $capabilities = $capabilities + $multisite_caps; $multisite_cache = $capabilities; } @@ -52,16 +53,16 @@ public static function get_all_capabilities($include_multisite_caps = null){ return $capabilities; } - /** - * Retrieve a list of all known roles and their names. - * - * @return array Associative array with role IDs as keys and role display names as values - */ - public static function get_role_names(){ + /** + * Retrieve a list of all known roles and their names. + * + * @return array Associative array with role IDs as keys and role display names as values + */ + public static function get_role_names() { $wp_roles = self::get_roles(); - $roles = array(); + $roles = []; - foreach($wp_roles->roles as $role_id => $role){ + foreach ($wp_roles->roles as $role_id => $role) { $roles[$role_id] = $role['name']; } @@ -71,11 +72,343 @@ public static function get_role_names(){ /** * Get the global WP_Roles instance. * - * @global WP_Roles $wp_roles * @return WP_Roles + * @global WP_Roles $wp_roles */ public static function get_roles() { //Requires WP 4.3.0. return wp_roles(); } -} \ No newline at end of file +} + +class ameActorAccessCleaner { + /** + * @var array + */ + private $userExistsCache = []; + + /** + * Remove non-existent actors from a dictionary where the keys are actor IDs. + * + * @param array|mixed $actorDictionary + * @return array|mixed + */ + public function cleanUpDictionary($actorDictionary) { + if ( !is_array($actorDictionary) ) { + return $actorDictionary; + } + if ( empty($actorDictionary) ) { + return $actorDictionary; + } + + $cleanedDictionary = []; + foreach ($actorDictionary as $actorId => $value) { + //Keep the entry if the actor exists. To reduce the risk of future bugs causing data + //loss, avoid removing data associated with unknown/unsupported actor IDs. + if ( $this->tryActorExists($actorId, true) ) { + $cleanedDictionary[$actorId] = $value; + } + } + return $cleanedDictionary; + } + + /** + * @param string $actorId + * @return bool + * @throws \ameUnsupportedActorIdException + */ + public function actorExists($actorId) { + $parts = explode(':', $actorId, 2); + if ( count($parts) !== 2 ) { + throw new ameUnsupportedActorIdException('Actor ID must contain a colon character.'); + } + + switch ($parts[0]) { + case 'user': + return $this->userExists($parts[1]); + case 'role': + return $this->roleExists($parts[1]); + case 'special': + return $parts[1] == 'super_admin'; + } + + throw new ameUnsupportedActorIdException('Unsupported actor ID prefix "' . $parts[0] . '".'); + } + + /** + * Like actorExists(), but returns a default value if it can't parse the actor ID + * instead of throwing an exception. + * + * @param string $actorId + * @param bool $defaultResult + * @return bool + */ + public function tryActorExists($actorId, $defaultResult) { + try { + return $this->actorExists($actorId); + } catch (ameUnsupportedActorIdException $e) { + return $defaultResult; + } + } + + /** + * Check if a role exists on the current site. + * + * @param string $roleId + * @return bool + */ + public function roleExists($roleId) { + $role = get_role($roleId); + return !empty($role); + } + + /** + * Check if a user exists in the database. + * + * @param $userLogin + * @return bool + */ + public function userExists($userLogin) { + //The admin menu (or other configuration) can contain multiple references to the same user, + //so we cache the results to avoid redundant trips the WP cache or, worse, the database. + if ( !isset($this->userExistsCache[$userLogin]) ) { + $user = get_user_by('login', $userLogin); + $this->userExistsCache[$userLogin] = !empty($user); + } + return $this->userExistsCache[$userLogin]; + } +} + +class ameUnsupportedActorIdException extends Exception { +} + +abstract class ameAccessEvaluatorConfigFields { + /** + * @var \WPMenuEditor + */ + protected $menuEditor = null; + + /** + * @var bool|null + */ + protected $superAdminDefaultAccess = null; + + /** + * @var bool|null + */ + protected $roleDefaultAccess = null; + + /** + * @var array + */ + protected $perRoleDefaultAccess = []; + + /** + * @var bool + */ + protected $defaultEvaluationResult = false; +} + +class ameAccessEvaluatorBuilder extends ameAccessEvaluatorConfigFields { + public function __construct($menuEditor) { + $this->menuEditor = $menuEditor; + } + + public static function create($menuEditor) { + return new ameAccessEvaluatorBuilder($menuEditor); + } + + public function superAdminDefault($defaultValue) { + $this->superAdminDefaultAccess = $defaultValue; + return $this; + } + + public function roleDefault($defaultValue) { + $this->roleDefaultAccess = $defaultValue; + return $this; + } + + public function roleDefaultFor($roleId, $defaultValue) { + $this->perRoleDefaultAccess[$roleId] = $defaultValue; + return $this; + } + + public function defaultResult($result) { + $this->defaultEvaluationResult = $result; + return $this; + } + + /** + * @return \ameActorAccessEvaluator + */ + public function build() { + return new ameActorAccessEvaluator($this); + } + + /** + * @param WP_User $user + * @return \ameAccessEvaluatorWithUser + */ + public function buildForUser($user) { + return new ameAccessEvaluatorWithUser($this, $user); + } +} + +abstract class ameBaseActorAccessEvaluator extends ameAccessEvaluatorConfigFields { + /** + * @param \ameAccessEvaluatorBuilder $builder + */ + public function __construct($builder) { + $this->superAdminDefaultAccess = $builder->superAdminDefaultAccess; + $this->roleDefaultAccess = $builder->roleDefaultAccess; + $this->perRoleDefaultAccess = $builder->perRoleDefaultAccess; + $this->defaultEvaluationResult = $builder->defaultEvaluationResult; + $this->menuEditor = $builder->menuEditor; + } + + /** + * @param array $enabledForActor + * @param string $userActorId + * @param bool $isSuperAdmin + * @param array $roleActors Role ID => Actor ID + * @return bool + */ + protected function evaluate($enabledForActor, $userActorId, $isSuperAdmin, $roleActors) { + //User-specific settings have the highest priority. + if ( isset($enabledForActor[$userActorId]) ) { + return $enabledForActor[$userActorId]; + } + + //Super Admin is next. + if ( $isSuperAdmin ) { + if ( isset($enabledForActor['special:super_admin']) ) { + return $enabledForActor['special:super_admin']; + } else if ( $this->superAdminDefaultAccess !== null ) { + return $this->superAdminDefaultAccess; + } + } + + //Finally, allow access if at least one role has access. + $hasAccess = null; + foreach ($roleActors as $roleId => $roleActorId) { + $roleHasAccess = null; + + if ( isset($enabledForActor[$roleActorId]) ) { + $roleHasAccess = $enabledForActor[$roleActorId]; + } else if ( $this->roleDefaultAccess !== null ) { + $roleHasAccess = $this->roleDefaultAccess; + } else if ( isset($this->perRoleDefaultAccess[$roleId]) ) { + $roleHasAccess = $this->perRoleDefaultAccess[$roleId]; + } + + if ( $roleHasAccess !== null ) { + if ( $hasAccess === null ) { + $hasAccess = $roleHasAccess; + } else { + $hasAccess = $hasAccess || $roleHasAccess; + } + } + } + + if ( $hasAccess !== null ) { + return $hasAccess; + } + return $this->defaultEvaluationResult; + } + + /** + * @param WP_User $user + * @return array Role ID => Actor ID + */ + protected function getUserRoleActors($user) { + $roles = $this->menuEditor->get_user_roles($user); + $roleActors = []; + foreach ($roles as $roleId) { + $roleActors[$roleId] = 'role:' . $roleId; + } + return $roleActors; + } +} + +class ameActorAccessEvaluator extends ameBaseActorAccessEvaluator { + /** + * @param \WP_User $user + * @param array $enabledForActor + * @return bool + */ + public function isEnabledForUser($user, $enabledForActor) { + return $this->evaluate( + $enabledForActor, + 'user:' . $user->user_login, + is_multisite() && is_super_admin($user->ID), + $this->getUserRoleActors($user) + ); + } + + /** + * Alias for isEnabledForUser(). + * + * @param \WP_User $user + * @param array $enabledForActor + * @return bool + */ + public function userHasAccess($user, $enabledForActor) { + return $this->isEnabledForUser($user, $enabledForActor); + } +} + +class ameAccessEvaluatorWithUser extends ameBaseActorAccessEvaluator { + /** + * @var WP_User + */ + private $user; + + private $userActorId; + private $isSuperAdmin; + private $roleActors; + + /** + * @param \ameAccessEvaluatorBuilder $builder + * @param \WP_User $user + */ + public function __construct($builder, $user) { + parent::__construct($builder); + $this->user = $user; + + $this->userActorId = 'user:' . $user->user_login; + $this->isSuperAdmin = is_multisite() && is_super_admin($user->ID); + $this->roleActors = $this->getUserRoleActors($user); + } + + /** + * @param array $enabledForActor + * @return bool + */ + public function isEnabled($enabledForActor) { + return $this->evaluate( + $enabledForActor, + $this->userActorId, + $this->isSuperAdmin, + $this->roleActors + ); + } + + /** + * Alias for isEnabled(). + * + * @param array $enabledForActor + * @return bool + */ + public function userHasAccess($enabledForActor) { + return $this->isEnabled($enabledForActor); + } + + /** + * Get the user for which this evaluator was created. + * + * @return WP_User + */ + public function getUser() { + return $this->user; + } +} diff --git a/includes/settings-page.php b/includes/settings-page.php index fac1eb7..e28af65 100644 --- a/includes/settings-page.php +++ b/includes/settings-page.php @@ -518,6 +518,18 @@

    +

    + +
    + Applies only to certain parts of the plugin. In Multisite, this option is disabled + by default because different sites can potentially have different roles. + +

    +

    ') @@ -1151,7 +1134,7 @@ function buildMenuItem(itemData, isTopLevel) { setMenuFlag(item, flags[i], getFieldValue(itemData, flags[i], false)); } - if ( isTopLevel && !itemData.separator ){ + if ( canHaveSubmenuItems ){ //Allow the user to drag menu items to top-level menus item.droppable({ 'hoverClass' : 'ws_menu_drop_hover', @@ -1685,8 +1668,7 @@ var knownMenuFields = { 'css_class' : $.extend({}, baseField, { caption: 'CSS classes', - advanced : true, - onlyForTopMenus: true + advanced : true }), 'hookname' : $.extend({}, baseField, { @@ -1921,6 +1903,23 @@ function getParentMenuNode(containerNode) { } } +/** + * Check if a menu item is the parent of another item or a submenu list. + * + * @param {JQuery} menuItem + * @param {JQuery} something + * @returns {boolean} + */ +function isParentMenuNodeOf(menuItem, something) { + const parent = getParentMenuNode(something) + if (menuItem.is(parent)) { + return true; + } else if (parent.length > 0) { + return isParentMenuNodeOf(menuItem, parent); + } + return false; +} + /** * Get all submenu items of a menu item. * @@ -2256,6 +2255,8 @@ function makeBoxSortable(menuBox){ placeholder: 'ws_container ws_sortable_placeholder', forcePlaceholderSize: true, + connectWith: '.ws_submenu', + stop: function(even, ui) { //Fix incorrect item overlap caused by jQuery.sortable applying the initial z-index as an inline style. ui.item.css('z-index', ''); @@ -2264,6 +2265,62 @@ function makeBoxSortable(menuBox){ if (ui.item.hasClass('ws_menu') && ui.item.hasClass('ws_active')) { AmeEditorApi.updateSubmenuBoxHeight(ui.item); } + }, + + over: function(event, ui) { + //Provide visual feedback if the user drags an unacceptable item over the list. + const $list = $(this); + const targetColumn = menuPresenter.getItemColumn($list); + if (!targetColumn) { + return; + } + + $list.closest('.ws_main_container').toggleClass( + 'ws_invalid_item_drop_target', + !targetColumn.canAcceptItem(ui.item) + ); + }, + + out: function() { + $(this).closest('.ws_main_container').removeClass('ws_invalid_item_drop_target'); + }, + + receive: function(event, ui) { + //Receive a menu item from another column. + const $sender = $(ui.sender); + + const $itemNode = ui.item; + const targetColumn = menuPresenter.getItemColumn($itemNode); + const sourceColumn = menuPresenter.getItemColumn($sender); + + if (!targetColumn || !sourceColumn) { + $sender.sortable('cancel'); + return; + } + if (!targetColumn.canAcceptItem($itemNode)) { + $sender.sortable('cancel'); + return; + } + + //The way that inter-column drag & drop actually works is that we copy the item + //to the target column and then delete the original item. This way all the internal + //data structures are updated correctly. + + //Remember where the item was dropped in the target column. + const $previousItem = $itemNode.prev('.ws_container'); + + //Move the original item back. + $sender.sortable('cancel'); + + //Copy & paste the item to the target column. + const droppedItemData = readItemState($itemNode); + targetColumn.pasteItem(droppedItemData, ($previousItem.length > 0) ? $previousItem : -1); + + //Delete the original. Optionally, the user can hold Ctrl to avoid this + //(i.e. to copy the item instead of moving it). + if ( !event.ctrlKey ) { + sourceColumn.destroyItem($itemNode); + } } }); } @@ -2401,6 +2458,33 @@ function readMenuTreeState(){ itemsByFilename[filename] = containerNode; }); + // Ensure items that need auto-generated slugs have unique IDs. The IDs only + // need to be unique within the same menu configuration, not globally. + let localIdCounter = 0; + const usedLocalIds = {}; + function ensureUniqueIdIfNeeded(menuItem) { + // Recurse into children. + if (menuItem.items) { + _.forEach(menuItem.items, ensureUniqueIdIfNeeded); + } + + const needsUniqueId = (menuItem.template_id === wsEditorData.embeddedPageTemplateId) + || (menuItem.open_in === 'iframe'); + const currentLocalId = (typeof menuItem.local_id === 'string') ? menuItem.local_id : ''; + + // Assign a new ID if the item needs one and doesn't have it, or if the current ID + // is a duplicate. IDs can get duplicated if the user copies and pastes items. + if ((needsUniqueId && (currentLocalId === '')) || usedLocalIds.hasOwnProperty(currentLocalId)) { + menuItem.local_id = randomMenuId(localIdCounter + 'C', 8); + } + + if (typeof menuItem.local_id === 'string') { + usedLocalIds[menuItem.local_id] = true; + localIdCounter++; + } + } + _.forEach(tree, ensureUniqueIdIfNeeded); + AmeCapabilityManager.pruneGrantedUserCapabilities(); var result = { @@ -4450,10 +4534,7 @@ function ameOnDomReady() { //Toggle all menus for the currently selected actor menuEditorNode.on( 'adminMenuEditor:action-toggle-all', - /** - * @param event - */ - function(event) { + function() { if ( actorSelectorWidget.selectedActor === null ) { alert("This button enables/disables all menus for the selected role. To use it, click a role and then click this button again."); return; @@ -4485,12 +4566,7 @@ function ameOnDomReady() { //The "Copy permissions" toolbar button. menuEditorNode.on( 'adminMenuEditor:action-copy-permissions', - /** - * @param event - * @param {JQuery|null} selectedItem - * @param {AmeEditorColumn} column - */ - function(event, selectedItem, column) { + function() { const previousSource = sourceActorList.val(); //Populate source/destination lists. @@ -4662,10 +4738,7 @@ function ameOnDomReady() { //Toggle the second row of toolbar buttons. menuEditorNode.on( 'adminMenuEditor:action-toggle-toolbar', - /** - * @param event - */ - function(event) { + function() { let visible = menuEditorNode.find('.ws_second_toolbar_row').toggle().is(':visible'); if (typeof $['cookie'] !== 'undefined') { $.cookie('ame-show-second-toolbar', visible ? '1' : '0', {expires: 90}); @@ -4980,50 +5053,48 @@ function ameOnDomReady() { Drag & drop items between menu levels *************************************************************************/ - if (wsEditorData.wsMenuEditorPro) { - //Allow the user to drag sub-menu items to the top level. - $('#ws_top_menu_dropzone').droppable({ - 'hoverClass' : 'ws_dropzone_hover', - 'activeClass' : 'ws_dropzone_active', + //Allow the user to drag sub-menu items to the top level. + $('#ws_top_menu_dropzone').droppable({ + 'hoverClass' : 'ws_dropzone_hover', + 'activeClass' : 'ws_dropzone_active', - 'accept' : (function(thing){ - return thing.hasClass('ws_item'); - }), + 'accept' : (function(thing){ + return thing.hasClass('ws_item'); + }), - 'drop' : (function(event, ui){ - const firstColumn = menuPresenter.getColumnImmediate(1); - if (!firstColumn) { - return; - } - const nextColumn = menuPresenter.getColumnImmediate(firstColumn.level + 1); + 'drop' : (function(event, ui){ + const firstColumn = menuPresenter.getColumnImmediate(1); + if (!firstColumn) { + return; + } + const nextColumn = menuPresenter.getColumnImmediate(firstColumn.level + 1); - const droppedItemData = readItemState(ui.draggable); - const newItemNodes = firstColumn.pasteItem(droppedItemData, null); - - //If the item was originally a top level menu, also move its original submenu items. - if ((getFieldValue(droppedItemData, 'parent') === null) && (newItemNodes.submenu)) { - const droppedItemFile = getFieldValue(droppedItemData, 'file'); - const nearbyItems = $(ui.draggable).siblings('.ws_item'); - nearbyItems.each(function() { - const containerNode = $(this), - submenuItem = containerNode.data('menu_item'); - - //Was this item originally a child of the dragged menu? - if (getFieldValue(submenuItem, 'parent') === droppedItemFile) { - nextColumn.pasteItem(submenuItem, null, newItemNodes.submenu); - if ( !event.ctrlKey ) { - menuPresenter.destroyItem(containerNode); - } + const droppedItemData = readItemState(ui.draggable); + const newItemNodes = firstColumn.pasteItem(droppedItemData, null); + + //If the item was originally a top level menu, also move its original submenu items. + if ((getFieldValue(droppedItemData, 'parent') === null) && (newItemNodes.submenu)) { + const droppedItemFile = getFieldValue(droppedItemData, 'file'); + const nearbyItems = $(ui.draggable).siblings('.ws_item'); + nearbyItems.each(function() { + const containerNode = $(this), + submenuItem = containerNode.data('menu_item'); + + //Was this item originally a child of the dragged menu? + if (getFieldValue(submenuItem, 'parent') === droppedItemFile) { + nextColumn.pasteItem(submenuItem, null, newItemNodes.submenu); + if ( !event.ctrlKey ) { + menuPresenter.destroyItem(containerNode); } - }); - } + } + }); + } - if ( !event.ctrlKey ) { - menuPresenter.destroyItem(ui.draggable); - } - }) - }); - } + if ( !event.ctrlKey ) { + menuPresenter.destroyItem(ui.draggable); + } + }) + }); /****************************************************************** Component visibility settings @@ -5577,8 +5648,7 @@ function ameOnDomReady() { testProgressText.text('Sending menu settings...'); var selectedOption = testMenuItemList.find('option:selected').first(), - selectedMenu = selectedOption.data('menu_item'), - menuUrl = selectedOption.val(); + selectedMenu = selectedOption.data('menu_item'); $.ajax( wsEditorData.adminAjaxUrl, @@ -5717,6 +5787,10 @@ function ameOnDomReady() { const editorToolbars = document.querySelectorAll('.ws_main_container .ws_toolbar'); for (const toolbar of editorToolbars) { + //Skip the toolbar that's inside the template column. + if (toolbar.closest && (toolbar.closest('#ame-submenu-column-template') !== null)) { + continue; + } observer.observe(toolbar); } } diff --git a/license-manager/BasicPluginLicensingUi.php b/license-manager/BasicPluginLicensingUi.php index 63b0843..5b77b57 100644 --- a/license-manager/BasicPluginLicensingUi.php +++ b/license-manager/BasicPluginLicensingUi.php @@ -536,8 +536,6 @@ function selectTab(tab) { } public function printPluginRowNotice() { - return; - //If there's anything wrong with the plugin's license, output a notice under the plugin row in "Plugins". $license = $this->licenseManager->getLicense(); if ( !$this->currentUserCanManageLicense() || ($license->getStatus() === 'valid') ) { diff --git a/license-manager/LicenseManager.php b/license-manager/LicenseManager.php index bddd4e0..ad94717 100644 --- a/license-manager/LicenseManager.php +++ b/license-manager/LicenseManager.php @@ -4,7 +4,7 @@ require dirname(__FILE__) . '/LicenseServer.php'; require dirname(__FILE__) . '/BasicPluginLicensingUi.php'; -use YahnisElsts\PluginUpdateChecker\v5p2\Plugin; +use YahnisElsts\PluginUpdateChecker\v5p4\Plugin; class Wslm_LicenseManagerClient { const LICENSE_SCOPE_SITE = 'site'; diff --git a/license-manager/LicenseServer.php b/license-manager/LicenseServer.php index 78e8abe..398dea3 100644 --- a/license-manager/LicenseServer.php +++ b/license-manager/LicenseServer.php @@ -291,7 +291,8 @@ public function verifyLicenseExists($productSlug, $licenseKey, $token = null, $s if ( !$this->isValidUrl($siteUrl) ) { return new WP_Error('invalid_site_url', 'You must specify a valid site URL when using a site token.', 400); } - if ( $siteUrl != $this->sanitizeSiteUrl($license['site_url']) ) { + $expectedUrl = $this->sanitizeSiteUrl($license['site_url']); + if ( $siteUrl != $expectedUrl ) { return new WP_Error('wrong_site', 'This token is associated with a different site.', 400); } } diff --git a/license-manager/PdoDatabase.php b/license-manager/PdoDatabase.php index ae9792b..5dd97c7 100644 --- a/license-manager/PdoDatabase.php +++ b/license-manager/PdoDatabase.php @@ -8,6 +8,8 @@ class Wslm_PdoDatabase extends Wslm_Database { function __construct($host, $dbname, $username, $password) { $dsn = 'mysql:dbname=' . $dbname . ';host=' . $host; $this->pdo = new PDO($dsn, $username, $password); + //Use UTF-8 (utf8mb4) for everything. + $this->pdo->query('SET NAMES \'utf8mb4\''); } public function getResults($query, $parameters = array()) { diff --git a/menu-editor.php b/menu-editor.php index bff268e..86d08ec 100644 --- a/menu-editor.php +++ b/menu-editor.php @@ -3,7 +3,7 @@ Plugin Name: Admin Menu Editor Pro Plugin URI: http://adminmenueditor.com/ Description: Lets you directly edit the WordPress admin menu. You can re-order, hide or rename existing menus, add custom menus and more. -Version: 2.23.3 +Version: 2.26.1 Author: Janis Elsts Author URI: http://w-shadow.com/ Requires PHP: 5.6 diff --git a/modules/actor-selector/actor-selector.js b/modules/actor-selector/actor-selector.js index c0d8613..0fe02fb 100644 --- a/modules/actor-selector/actor-selector.js +++ b/modules/actor-selector/actor-selector.js @@ -10,6 +10,7 @@ class AmeActorSelector { this.isProVersion = false; this.allOptionEnabled = true; this.cachedVisibleActors = null; + this.specialActors = []; this.selectorNode = null; this.isDomInitStarted = false; this.actorManager = actorManager; @@ -183,6 +184,11 @@ class AmeActorSelector { } const _ = AmeActorSelector._; let actors = []; + //Include special actors, if any. Note that these must also be added to the actor manager; + //the actor selector doesn't do that automatically. + _.forEach(this.specialActors, function (actor) { + actors.push(actor); + }); //Include all roles. //Idea: Sort roles either alphabetically or by typical privilege level (admin, editor, author, ...). _.forEach(this.actorManager.getRoles(), function (role) { @@ -211,6 +217,9 @@ class AmeActorSelector { this.cachedVisibleActors = actors; return actors; } + addSpecialActor(actor) { + this.specialActors.push(actor); + } saveVisibleUsers() { jQuery.post(this.ajaxParams.adminAjaxUrl, { 'action': this.ajaxParams.ajaxUpdateAction, diff --git a/modules/actor-selector/actor-selector.js.map b/modules/actor-selector/actor-selector.js.map index d35c3ed..c6b0823 100644 --- a/modules/actor-selector/actor-selector.js.map +++ b/modules/actor-selector/actor-selector.js.map @@ -1 +1 @@ -{"version":3,"file":"actor-selector.js","sourceRoot":"","sources":["actor-selector.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"actor-selector.js","sourceRoot":"","sources":["actor-selector.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/modules/actor-selector/actor-selector.ts b/modules/actor-selector/actor-selector.ts index 40b48d3..14d3c78 100644 --- a/modules/actor-selector/actor-selector.ts +++ b/modules/actor-selector/actor-selector.ts @@ -38,6 +38,7 @@ class AmeActorSelector { private readonly allOptionEnabled: boolean = true; private cachedVisibleActors: IAmeActor[]|null = null; + private specialActors: IAmeActor[] = []; private selectorNode: JQuery|null = null; private isDomInitStarted: boolean = false; @@ -257,6 +258,12 @@ class AmeActorSelector { const _ = AmeActorSelector._; let actors: IAmeActor[] = []; + //Include special actors, if any. Note that these must also be added to the actor manager; + //the actor selector doesn't do that automatically. + _.forEach(this.specialActors, function (actor: IAmeActor) { + actors.push(actor); + }); + //Include all roles. //Idea: Sort roles either alphabetically or by typical privilege level (admin, editor, author, ...). _.forEach(this.actorManager.getRoles(), function (role: IAmeActor) { @@ -288,6 +295,10 @@ class AmeActorSelector { return actors; } + addSpecialActor(actor: IAmeActor) { + this.specialActors.push(actor); + } + private saveVisibleUsers() { jQuery.post( this.ajaxParams.adminAjaxUrl, diff --git a/modules/admin-css/admin-css.php b/modules/admin-css/admin-css.php index 249b73b..ca86d0a 100644 --- a/modules/admin-css/admin-css.php +++ b/modules/admin-css/admin-css.php @@ -7,10 +7,10 @@ class ameAdminCss extends ameModule { public function enqueueTabScripts() { parent::enqueueTabScripts(); - $menuConfig = $this->menuEditor->get_active_admin_menu(); + $tree = $this->menuEditor->get_active_admin_menu_tree(); //We really only need a couple of menu properties for this feature, like the titles and URLs. - $items = array_values(array_map(array($this, 'getRelevantMenuProperties'), $menuConfig['tree'])); + $items = array_values(array_map(array($this, 'getRelevantMenuProperties'), $tree)); } private function getRelevantMenuProperties($menuItem) { diff --git a/modules/plugin-visibility/plugin-visibility.css b/modules/plugin-visibility/plugin-visibility.css index db639b1..27c3241 100644 --- a/modules/plugin-visibility/plugin-visibility.css +++ b/modules/plugin-visibility/plugin-visibility.css @@ -1,3 +1,7 @@ +#ame-plugin-visibility-editor .plugins { + margin-top: 2px; +} + /* Plugin visibility module ------------------------ @@ -42,7 +46,7 @@ .ame-pv-save-form { float: right; margin-top: 5px; - margin-bottom: 6px; + margin-bottom: 4px; } #ws_actor_selector_container { diff --git a/modules/plugin-visibility/plugin-visibility.css.map b/modules/plugin-visibility/plugin-visibility.css.map index 77d8997..4db2f8f 100644 --- a/modules/plugin-visibility/plugin-visibility.css.map +++ b/modules/plugin-visibility/plugin-visibility.css.map @@ -1 +1 @@ -{"version":3,"sourceRoot":"","sources":["plugin-visibility.scss"],"names":[],"mappings":"AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;EAEC;EACA;EACA;;;AAGD;EACC;;;AAGD;AAAA;AAAA;AAGA;AAAA;EAEC;;;AAGD;AAAA;AAAA;EAGC;;;AAGD;AAAA;EAEC;;;AAGD;EACC;;;AAGD;AAAA;AAAA;AAIA;EACC;EACA;EACA;;;AAID;EACC;;;AAGD;AAAA;AAAA;AAKC;EACC;;AAGD;EACC;;AAGD;EACC;;AAGD;EACC;;AAGD;EACC;;AAGD;EACC;;AAGD;EACC;;AAGD;EACC;;AAGD;EACC;;AAGD;EACC;;AAGD;EACC;EACA;EACA;EACA;;;AAIF;AAAA;AAAA;AAAA;AAKC;EACC;EACA;;AAEA;EACC;;AAIF;EACC;EACA;EACA;;AAGD;EACC","file":"plugin-visibility.css"} \ No newline at end of file +{"version":3,"sourceRoot":"","sources":["plugin-visibility.scss","../../css/_ui-constants.scss"],"names":[],"mappings":"AAEA;EACC,YCH2B;;;ADM5B;AAAA;AAAA;AAAA;AAKA;AAAA;EAEC;EACA;EACA;;;AAGD;EACC;;;AAGD;AAAA;AAAA;AAGA;AAAA;EAEC;;;AAGD;AAAA;AAAA;EAGC;;;AAGD;AAAA;EAEC;;;AAGD;EACC;;;AAGD;AAAA;AAAA;AAIA;EACC;EACA;EACA;;;AAID;EACC;;;AAGD;AAAA;AAAA;AAKC;EACC;;AAGD;EACC;;AAGD;EACC;;AAGD;EACC;;AAGD;EACC;;AAGD;EACC;;AAGD;EACC;;AAGD;EACC;;AAGD;EACC;;AAGD;EACC;;AAGD;EACC;EACA;EACA;EACA;;;AAIF;AAAA;AAAA;AAAA;AAKC;EACC;EACA;;AAEA;EACC;;AAIF;EACC;EACA;EACA;;AAGD;EACC","file":"plugin-visibility.css"} \ No newline at end of file diff --git a/modules/plugin-visibility/plugin-visibility.php b/modules/plugin-visibility/plugin-visibility.php index 7099429..b80eadf 100644 --- a/modules/plugin-visibility/plugin-visibility.php +++ b/modules/plugin-visibility/plugin-visibility.php @@ -164,6 +164,11 @@ private function roleCanManagePlugins($roleId, $role = null) { if ( !isset($role) ) { $role = get_role($roleId); + if ( !isset($role) ) { + //This should never happen, but a user reported that it did on their site. + $cache[$roleId] = false; + return false; + } } $result = false; diff --git a/modules/plugin-visibility/plugin-visibility.scss b/modules/plugin-visibility/plugin-visibility.scss index c020afc..cc23909 100644 --- a/modules/plugin-visibility/plugin-visibility.scss +++ b/modules/plugin-visibility/plugin-visibility.scss @@ -1,3 +1,9 @@ +@import "../../css/ui-constants"; + +#ame-plugin-visibility-editor .plugins { + margin-top: $smallActorSelectorToUiGap; +} + /* Plugin visibility module ------------------------ @@ -44,7 +50,7 @@ .ame-pv-save-form { float: right; margin-top: 5px; - margin-bottom: 6px; + margin-bottom: 6px - $smallActorSelectorToUiGap; } //Make room for th save button. diff --git a/modules/redirector/redirector-ui.js b/modules/redirector/redirector-ui.js index 314fa0a..079bb8e 100644 --- a/modules/redirector/redirector-ui.js +++ b/modules/redirector/redirector-ui.js @@ -27,6 +27,9 @@ var AmeRedirectorUi; }, isUser() { return false; + }, + hasOwnCap(_) { + return null; } }; class Redirect { @@ -81,6 +84,9 @@ var AmeRedirectorUi; }, isUser() { return false; + }, + hasOwnCap(_) { + return null; } }; } @@ -352,6 +358,9 @@ var AmeRedirectorUi; isUser() { return false; } + hasOwnCap(_) { + return null; + } } class MissingRolePlaceholder extends MissingActorPlaceholder { } diff --git a/modules/redirector/redirector-ui.js.map b/modules/redirector/redirector-ui.js.map index ff8204c..5ebfa01 100644 --- a/modules/redirector/redirector-ui.js.map +++ b/modules/redirector/redirector-ui.js.map @@ -1 +1 @@ -{"version":3,"file":"redirector-ui.js","sourceRoot":"","sources":["redirector-ui.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"redirector-ui.js","sourceRoot":"","sources":["redirector-ui.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/modules/redirector/redirector-ui.ts b/modules/redirector/redirector-ui.ts index eb016be..1df788e 100644 --- a/modules/redirector/redirector-ui.ts +++ b/modules/redirector/redirector-ui.ts @@ -68,6 +68,9 @@ namespace AmeRedirectorUi { }, isUser(): boolean { return false; + }, + hasOwnCap(_: string): boolean | null { + return null; } } @@ -146,6 +149,9 @@ namespace AmeRedirectorUi { }, isUser(): boolean { return false; + }, + hasOwnCap(_: string): boolean | null { + return null; } } } @@ -484,6 +490,10 @@ namespace AmeRedirectorUi { isUser(): this is IAmeUser { return false; } + + hasOwnCap(_: string): boolean | null { + return null; + } } class MissingRolePlaceholder extends MissingActorPlaceholder { diff --git a/modules/redirector/redirector.php b/modules/redirector/redirector.php index d82982c..7c5c857 100644 --- a/modules/redirector/redirector.php +++ b/modules/redirector/redirector.php @@ -26,7 +26,7 @@ class Module extends amePersistentModule { const PRELOADED_USER_LIMIT = 50; const SEARCH_USER_LIMIT = 30; - protected static $desiredUserFields = array('ID', 'display_name', 'user_login'); + protected static $desiredUserFields = ['ID', 'display_name', 'user_login']; protected $tabSlug = 'redirects'; protected $tabTitle = 'Redirects'; @@ -72,8 +72,8 @@ public function __construct($menuEditor) { $this->searchUsersAction = ajaw_v1_CreateAction('ws-ame-rui-search-users') ->requiredParam('term') ->method('get') - ->permissionCallback(array($this, 'userCanSearchUsers')) - ->handler(array($this, 'ajaxSearchUsers')) + ->permissionCallback([$this, 'userCanSearchUsers']) + ->handler([$this, 'ajaxSearchUsers']) ->register(); add_action('admin_menu_editor-load_tab-' . $this->tabSlug, [$this, 'addContextualHelp']); @@ -330,9 +330,9 @@ public function enqueueTabScripts() { $flattenedRedirects = $this->getRedirects()->flatten(); $usableMenuItems = []; - $adminMenu = $this->menuEditor->get_active_admin_menu(); - if ( !empty($adminMenu['tree']) ) { - $extractor = new MenuExtractor($adminMenu['tree']); + $adminMenuTree = $this->menuEditor->get_active_admin_menu_tree(); + if ( !empty($adminMenuTree) ) { + $extractor = new MenuExtractor($adminMenuTree); $usableMenuItems = $extractor->getUsableItems(); } @@ -347,6 +347,18 @@ public function enqueueTabScripts() { list($loadedUsers, $hasMoreUsers) = $this->preloadUsers($flattenedRedirects); + //Optionally, discard redirects associated with roles or users that no longer exist. + if ( $this->menuEditor->get_plugin_option('delete_orphan_actor_settings') ) { + $cleaner = new \ameActorAccessCleaner(); + $flattenedRedirects = array_filter($flattenedRedirects, function ($details) use ($cleaner) { + return $cleaner->tryActorExists($details['actorId'], true); + }); + + //Reindex the array. If filtering removed some elements, the array keys can be sparse, + //which would cause it to be serialized as an object instead of an array. + $flattenedRedirects = array_values($flattenedRedirects); + } + $scriptData = [ 'redirects' => $flattenedRedirects, 'usableMenuItems' => $usableMenuItems, @@ -378,7 +390,7 @@ public function enqueueTabStyles() { ); } - public function handleSettingsForm($post = array()) { + public function handleSettingsForm($post = []) { parent::handleSettingsForm($post); $submittedSettings = json_decode($post['settings'], true); diff --git a/package-lock.json b/package-lock.json index 2122a4c..24fbf59 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,8 +10,8 @@ }, "devDependencies": { "@types/nightwatch": "^2.3.23", - "chromedriver": "^120.0.1", - "nightwatch": "^3.2.0", + "chromedriver": "^126.0.2", + "nightwatch": "^3.5.0", "ts-loader": "^9.4.2", "ts-node": "^10.9.1", "typescript": "^4.9.5", @@ -20,11 +20,16 @@ "webpack-manifest-plugin": "^5.0.0" } }, - "node_modules/@assemblyscript/loader": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/@assemblyscript/loader/-/loader-0.10.1.tgz", - "integrity": "sha512-H71nDOOL8Y7kWRLqf6Sums+01Q5msqBW2KhDUTemh1tvY04eSkSXrK0uj/4mmY0Xr16/3zyZmsrxN7CKuRbNRg==", - "dev": true + "node_modules/@asamuzakjp/dom-selector": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@asamuzakjp/dom-selector/-/dom-selector-2.0.2.tgz", + "integrity": "sha512-x1KXOatwofR6ZAYzXRBL5wrdV0vwNxlTCK9NCuLqAzQYARqGcvFwiJA6A1ERuh+dgeA4Dxm3JBYictIes+SqUQ==", + "dev": true, + "dependencies": { + "bidi-js": "^1.0.3", + "css-tree": "^2.3.1", + "is-potential-custom-element-name": "^1.0.1" + } }, "node_modules/@babel/code-frame": { "version": "7.23.5", @@ -778,15 +783,15 @@ } }, "node_modules/@nightwatch/chai": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@nightwatch/chai/-/chai-5.0.2.tgz", - "integrity": "sha512-yzILJFCcE75OPoRfBlJ80Y3Ky06ljsdrK4Ld92yhmM477vxO2GEguwnd+ldl7pdSYTcg1gSJ1bPPQrA+/Hrn+A==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/@nightwatch/chai/-/chai-5.0.3.tgz", + "integrity": "sha512-1OIkOf/7jswOC3/t+Add/HVQO8ib75kz6BVYSNeWGghTlmHUqYEfNJ6vcACbXrn/4v3+9iRlWixuhFkxXkU/RQ==", "dev": true, "dependencies": { "assertion-error": "1.1.0", "check-error": "1.0.2", "deep-eql": "4.0.1", - "loupe": "2.3.4", + "loupe": "^2.3.7", "pathval": "1.1.1", "type-detect": "4.0.8" }, @@ -795,9 +800,9 @@ } }, "node_modules/@nightwatch/html-reporter-template": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@nightwatch/html-reporter-template/-/html-reporter-template-0.2.1.tgz", - "integrity": "sha512-GEBeGoXVmTYPtNC4Yq34vfgxf6mlFyEagxpsfH18Qe5BvctF2rprX+wI5dKBm9p5IqHo6ZOcXHCufOeP3cjuOw==", + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@nightwatch/html-reporter-template/-/html-reporter-template-0.3.0.tgz", + "integrity": "sha512-Mze1z6pmUz2O8N9w1/h3QWz1lzMig45PGyh8PrL9ERs3FxVnIX0RCn37vjZUYiV4wgjZOg41JjdcpriZ3dJxkA==", "dev": true }, "node_modules/@nightwatch/nightwatch-inspector": { @@ -838,14 +843,11 @@ "integrity": "sha512-kIhULpw9TrGYnHp/8VfdcneIcxKnLixmADtukQRtJUmsVlMg0niMkwV0xZmi8hqa57xqilIHjWFA0GKvEjVU5g==", "dev": true }, - "node_modules/@tootallnate/once": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", - "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", - "dev": true, - "engines": { - "node": ">= 10" - } + "node_modules/@tootallnate/quickjs-emscripten": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@tootallnate/quickjs-emscripten/-/quickjs-emscripten-0.23.0.tgz", + "integrity": "sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==", + "dev": true }, "node_modules/@tsconfig/node10": { "version": "1.0.9", @@ -1177,12 +1179,6 @@ "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", "dev": true }, - "node_modules/abab": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", - "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", - "dev": true - }, "node_modules/acorn": { "version": "8.8.2", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", @@ -1195,16 +1191,6 @@ "node": ">=0.4.0" } }, - "node_modules/acorn-globals": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-7.0.1.tgz", - "integrity": "sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==", - "dev": true, - "dependencies": { - "acorn": "^8.1.0", - "acorn-walk": "^8.0.2" - } - }, "node_modules/acorn-import-assertions": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", @@ -1224,15 +1210,15 @@ } }, "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", + "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", "dev": true, "dependencies": { - "debug": "4" + "debug": "^4.3.4" }, "engines": { - "node": ">= 6.0.0" + "node": ">= 14" } }, "node_modules/ajv": { @@ -1274,6 +1260,7 @@ "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -1332,6 +1319,7 @@ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", "dev": true, + "license": "ISC", "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -1419,7 +1407,8 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true + "dev": true, + "license": "Python-2.0" }, "node_modules/aria-query": { "version": "5.1.3", @@ -1465,6 +1454,18 @@ "repeat-string": "^1.6.1" } }, + "node_modules/ast-types": { + "version": "0.13.4", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.4.tgz", + "integrity": "sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==", + "dev": true, + "dependencies": { + "tslib": "^2.0.1" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/async": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", @@ -1490,21 +1491,21 @@ } }, "node_modules/axe-core": { - "version": "4.8.2", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.8.2.tgz", - "integrity": "sha512-/dlp0fxyM3R8YW7MFzaHWXrf4zzbr0vaYb23VBFCl83R7nWNPg/yaQw2Dc8jzCMmDVLhSdzH8MjrsuIUuvX+6g==", + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.9.0.tgz", + "integrity": "sha512-H5orY+M2Fr56DWmMFpMrq5Ge93qjNdPVqzBv5gWK3aD1OvjBEJlEzxf09z93dGVQeI0LiW+aCMIx1QtShC/zUw==", "dev": true, "engines": { "node": ">=4" } }, "node_modules/axios": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.2.tgz", - "integrity": "sha512-7i24Ri4pmDRfJTR7LDBhsOTtcm+9kjX5WiY1X3wIisx6G9So3pfMkEiU7emUBe46oceVImccTEM3k6C5dbVW8A==", + "version": "1.6.8", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.8.tgz", + "integrity": "sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ==", "dev": true, "dependencies": { - "follow-redirects": "^1.15.0", + "follow-redirects": "^1.15.6", "form-data": "^4.0.0", "proxy-from-env": "^1.1.0" } @@ -1535,13 +1536,35 @@ } ] }, + "node_modules/basic-ftp": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.0.5.tgz", + "integrity": "sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg==", + "dev": true, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/bidi-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/bidi-js/-/bidi-js-1.0.3.tgz", + "integrity": "sha512-RKshQI1R3YQ+n9YJz2QQ147P66ELpa1FQEg20Dk8oW9t2KgLbpDLLp9aGZ7y8WHSshDknG0bknqGw5/tyCs5tw==", + "dev": true, + "dependencies": { + "require-from-string": "^2.0.2" + } + }, "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/bl": { @@ -1588,12 +1611,13 @@ } }, "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, + "license": "MIT", "dependencies": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" }, "engines": { "node": ">=8" @@ -1603,7 +1627,8 @@ "version": "1.3.1", "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/browserslist": { "version": "4.21.5", @@ -1787,6 +1812,7 @@ "url": "https://paulmillr.com/funding/" } ], + "license": "MIT", "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", @@ -1813,17 +1839,18 @@ } }, "node_modules/chromedriver": { - "version": "120.0.1", - "resolved": "https://registry.npmjs.org/chromedriver/-/chromedriver-120.0.1.tgz", - "integrity": "sha512-ETTJlkibcAmvoKsaEoq2TFqEsJw18N0O9gOQZX6Uv/XoEiOV8p+IZdidMeIRYELWJIgCZESvlOx5d1QVnB4v0w==", + "version": "126.0.2", + "resolved": "https://registry.npmjs.org/chromedriver/-/chromedriver-126.0.2.tgz", + "integrity": "sha512-61R0w7C+uJVCykabdqWsvitne2rg3MTI8xOKJosk+YbKdyLeGHYiCCeU82ZsUY+v9qnN1p48THcthgKubxPRWQ==", "dev": true, "hasInstallScript": true, + "license": "Apache-2.0", "dependencies": { "@testim/chrome-version": "^1.1.4", - "axios": "^1.6.0", + "axios": "^1.6.7", "compare-versions": "^6.1.0", "extract-zip": "^2.0.1", - "https-proxy-agent": "^5.0.1", + "proxy-agent": "^6.4.0", "proxy-from-env": "^1.1.0", "tcp-port-used": "^1.0.2" }, @@ -1904,6 +1931,7 @@ "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "dev": true, + "license": "ISC", "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", @@ -2053,30 +2081,51 @@ "node": ">= 8" } }, + "node_modules/css-tree": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", + "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", + "dev": true, + "dependencies": { + "mdn-data": "2.0.30", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" + } + }, "node_modules/cssstyle": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-3.0.0.tgz", - "integrity": "sha512-N4u2ABATi3Qplzf0hWbVCdjenim8F3ojEXpBDF5hBpjzW182MjNGLqfmQ0SkSPeQ+V86ZXgeH8aXj6kayd4jgg==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.0.1.tgz", + "integrity": "sha512-8ZYiJ3A/3OkDd093CBT/0UKDWry7ak4BdPTFP2+QEP7cmhouyq/Up709ASSj2cK02BbZiMgk7kYjZNS4QP5qrQ==", "dev": true, "dependencies": { "rrweb-cssom": "^0.6.0" }, "engines": { - "node": ">=14" + "node": ">=18" + } + }, + "node_modules/data-uri-to-buffer": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-6.0.2.tgz", + "integrity": "sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==", + "dev": true, + "engines": { + "node": ">= 14" } }, "node_modules/data-urls": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-4.0.0.tgz", - "integrity": "sha512-/mMTei/JXPqvFqQtfyTowxmJVwr2PVAeCcDxyFf6LhoOu/09TX2OX3kb2wzi4DMXcfj4OItwDOnhl5oziPnT6g==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-5.0.0.tgz", + "integrity": "sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==", "dev": true, "dependencies": { - "abab": "^2.0.6", - "whatwg-mimetype": "^3.0.0", - "whatwg-url": "^12.0.0" + "whatwg-mimetype": "^4.0.0", + "whatwg-url": "^14.0.0" }, "engines": { - "node": ">=14" + "node": ">=18" } }, "node_modules/debug": { @@ -2101,6 +2150,7 @@ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -2222,6 +2272,20 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/degenerator": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-5.0.1.tgz", + "integrity": "sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==", + "dev": true, + "dependencies": { + "ast-types": "^0.13.4", + "escodegen": "^2.1.0", + "esprima": "^4.0.1" + }, + "engines": { + "node": ">= 14" + } + }, "node_modules/delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -2252,18 +2316,6 @@ "node": ">=0.3.1" } }, - "node_modules/domexception": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz", - "integrity": "sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==", - "dev": true, - "dependencies": { - "webidl-conversions": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, "node_modules/dotenv": { "version": "16.3.1", "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.3.1.tgz", @@ -2285,10 +2337,11 @@ "peer": true }, "node_modules/ejs": { - "version": "3.1.8", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.8.tgz", - "integrity": "sha512-/sXZeMlhS0ArkfX2Aw780gJzXSMPnKjtspYZv+f3NiKLlubezAHDU5+9xz6gd3/NhG3txQCo6xlglmTS+oTGEQ==", + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", + "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", "dev": true, + "license": "Apache-2.0", "dependencies": { "jake": "^10.8.5" }, @@ -2523,12 +2576,6 @@ "node": ">=0.10.0" } }, - "node_modules/eventemitter-asyncresource": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/eventemitter-asyncresource/-/eventemitter-asyncresource-1.0.0.tgz", - "integrity": "sha512-39F7TBIV0G7gTelxwbEqnwhp90eqCPON1k0NwNfwhgKn4Co4ybUbj2pECcXT0B3ztRKZ7Pw1JujUUgmQJHcVAQ==", - "dev": true - }, "node_modules/events": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", @@ -2610,6 +2657,7 @@ "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", "dev": true, + "license": "Apache-2.0", "dependencies": { "minimatch": "^5.0.1" } @@ -2619,6 +2667,7 @@ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } @@ -2628,6 +2677,7 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -2636,10 +2686,11 @@ } }, "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, + "license": "MIT", "dependencies": { "to-regex-range": "^5.0.1" }, @@ -2665,14 +2716,15 @@ "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", "dev": true, + "license": "BSD-3-Clause", "bin": { "flat": "cli.js" } }, "node_modules/follow-redirects": { - "version": "1.15.3", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.3.tgz", - "integrity": "sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==", + "version": "1.15.6", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", + "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", "dev": true, "funding": [ { @@ -2750,6 +2802,29 @@ "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", "dev": true }, + "node_modules/fs-extra": { + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", + "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/fs-extra/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -2762,6 +2837,7 @@ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "dev": true, "hasInstallScript": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -2793,6 +2869,7 @@ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true, + "license": "ISC", "engines": { "node": "6.* || 8.* || >= 10.*" } @@ -2836,6 +2913,21 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/get-uri": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.3.tgz", + "integrity": "sha512-BzUrJBS9EcUb4cFol8r4W3v1cPsSyajLSthNkz5BxbpDcHN5tIrM10E2eNvfnvBn3DaT3DUgx0OpsBKkaOpanw==", + "dev": true, + "dependencies": { + "basic-ftp": "^5.0.2", + "data-uri-to-buffer": "^6.0.2", + "debug": "^4.3.4", + "fs-extra": "^11.2.0" + }, + "engines": { + "node": ">= 14" + } + }, "node_modules/glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", @@ -2861,6 +2953,7 @@ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, + "license": "ISC", "dependencies": { "is-glob": "^4.0.1" }, @@ -3016,28 +3109,12 @@ "node": ">= 0.4" } }, - "node_modules/hdr-histogram-js": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/hdr-histogram-js/-/hdr-histogram-js-2.0.3.tgz", - "integrity": "sha512-Hkn78wwzWHNCp2uarhzQ2SGFLU3JY8SBDDd3TAABK4fc30wm+MuPOrg5QVFVfkKOQd6Bfz3ukJEI+q9sXEkK1g==", - "dev": true, - "dependencies": { - "@assemblyscript/loader": "^0.10.1", - "base64-js": "^1.2.0", - "pako": "^1.0.3" - } - }, - "node_modules/hdr-histogram-percentiles-obj": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/hdr-histogram-percentiles-obj/-/hdr-histogram-percentiles-obj-3.0.0.tgz", - "integrity": "sha512-7kIufnBqdsBGcSZLPJwqHT3yhk1QTsSlFsVD3kx5ixH/AlgBs9yM1q6DPhXZ8f8gtdqgh7N7/5btRLpQsS2gHw==", - "dev": true - }, "node_modules/he": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", "dev": true, + "license": "MIT", "bin": { "he": "bin/he" } @@ -3051,42 +3128,41 @@ "peer": true }, "node_modules/html-encoding-sniffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", - "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-4.0.0.tgz", + "integrity": "sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==", "dev": true, "dependencies": { - "whatwg-encoding": "^2.0.0" + "whatwg-encoding": "^3.1.1" }, "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/http-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", - "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", "dev": true, "dependencies": { - "@tootallnate/once": "2", - "agent-base": "6", - "debug": "4" + "agent-base": "^7.1.0", + "debug": "^4.3.4" }, "engines": { - "node": ">= 6" + "node": ">= 14" } }, "node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz", + "integrity": "sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==", "dev": true, "dependencies": { - "agent-base": "6", + "agent-base": "^7.0.2", "debug": "4" }, "engines": { - "node": ">= 6" + "node": ">= 14" } }, "node_modules/iconv-lite": { @@ -3125,7 +3201,8 @@ "version": "3.0.6", "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/import-local": { "version": "3.1.0", @@ -3207,6 +3284,19 @@ "node": ">=10.13.0" } }, + "node_modules/ip-address": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", + "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", + "dev": true, + "dependencies": { + "jsbn": "1.1.0", + "sprintf-js": "^1.1.3" + }, + "engines": { + "node": ">= 12" + } + }, "node_modules/ip-regex": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-4.3.0.tgz", @@ -3271,6 +3361,7 @@ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "dev": true, + "license": "MIT", "dependencies": { "binary-extensions": "^2.0.0" }, @@ -3353,6 +3444,7 @@ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -3371,6 +3463,7 @@ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, + "license": "MIT", "dependencies": { "is-extglob": "^2.1.1" }, @@ -3419,6 +3512,7 @@ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.12.0" } @@ -3454,6 +3548,7 @@ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -3680,10 +3775,11 @@ } }, "node_modules/jake": { - "version": "10.8.7", - "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.7.tgz", - "integrity": "sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==", + "version": "10.9.1", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.1.tgz", + "integrity": "sha512-61btcOHNnLnsOdtLgA5efqQWjnSi/vow5HbI7HMdKKWqvrKR1bLK3BPlJn9gcSaP2ewuamUSMB5XEy76KUIS2w==", "dev": true, + "license": "Apache-2.0", "dependencies": { "async": "^3.2.3", "chalk": "^4.0.2", @@ -3724,6 +3820,7 @@ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, + "license": "MIT", "dependencies": { "argparse": "^2.0.1" }, @@ -3731,44 +3828,45 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/jsbn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", + "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==", + "dev": true + }, "node_modules/jsdom": { - "version": "21.1.2", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-21.1.2.tgz", - "integrity": "sha512-sCpFmK2jv+1sjff4u7fzft+pUh2KSUbUrEHYHyfSIbGTIcmnjyp83qg6qLwdJ/I3LpTXx33ACxeRL7Lsyc6lGQ==", + "version": "23.2.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-23.2.0.tgz", + "integrity": "sha512-L88oL7D/8ufIES+Zjz7v0aes+oBMh2Xnh3ygWvL0OaICOomKEPKuPnIfBJekiXr+BHbbMjrWn/xqrDQuxFTeyA==", "dev": true, "dependencies": { - "abab": "^2.0.6", - "acorn": "^8.8.2", - "acorn-globals": "^7.0.0", - "cssstyle": "^3.0.0", - "data-urls": "^4.0.0", + "@asamuzakjp/dom-selector": "^2.0.1", + "cssstyle": "^4.0.1", + "data-urls": "^5.0.0", "decimal.js": "^10.4.3", - "domexception": "^4.0.0", - "escodegen": "^2.0.0", "form-data": "^4.0.0", - "html-encoding-sniffer": "^3.0.0", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.1", + "html-encoding-sniffer": "^4.0.0", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.2", "is-potential-custom-element-name": "^1.0.1", - "nwsapi": "^2.2.4", "parse5": "^7.1.2", "rrweb-cssom": "^0.6.0", "saxes": "^6.0.0", "symbol-tree": "^3.2.4", - "tough-cookie": "^4.1.2", - "w3c-xmlserializer": "^4.0.0", + "tough-cookie": "^4.1.3", + "w3c-xmlserializer": "^5.0.0", "webidl-conversions": "^7.0.0", - "whatwg-encoding": "^2.0.0", - "whatwg-mimetype": "^3.0.0", - "whatwg-url": "^12.0.1", - "ws": "^8.13.0", - "xml-name-validator": "^4.0.0" + "whatwg-encoding": "^3.1.1", + "whatwg-mimetype": "^4.0.0", + "whatwg-url": "^14.0.0", + "ws": "^8.16.0", + "xml-name-validator": "^5.0.0" }, "engines": { - "node": ">=14" + "node": ">=18" }, "peerDependencies": { - "canvas": "^2.5.0" + "canvas": "^2.11.2" }, "peerDependenciesMeta": { "canvas": { @@ -3788,11 +3886,33 @@ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonfile/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, "node_modules/jszip": { "version": "3.10.1", "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz", "integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==", "dev": true, + "license": "(MIT OR GPL-3.0-or-later)", "dependencies": { "lie": "~3.3.0", "pako": "~1.0.2", @@ -3805,6 +3925,7 @@ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dev": true, + "license": "MIT", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -3819,13 +3940,15 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/jszip/node_modules/string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, + "license": "MIT", "dependencies": { "safe-buffer": "~5.1.0" } @@ -3897,6 +4020,7 @@ "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", "dev": true, + "license": "MIT", "dependencies": { "immediate": "~3.0.5" } @@ -3930,147 +4054,43 @@ "node": ">=8" } }, - "node_modules/lodash._arraycopy": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._arraycopy/-/lodash._arraycopy-3.0.0.tgz", - "integrity": "sha512-RHShTDnPKP7aWxlvXKiDT6IX2jCs6YZLCtNhOru/OX2Q/tzX295vVBK5oX1ECtN+2r86S0Ogy8ykP1sgCZAN0A==", - "dev": true - }, - "node_modules/lodash._arrayeach": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._arrayeach/-/lodash._arrayeach-3.0.0.tgz", - "integrity": "sha512-Mn7HidOVcl3mkQtbPsuKR0Fj0N6Q6DQB77CtYncZcJc0bx5qv2q4Gl6a0LC1AN+GSxpnBDNnK3CKEm9XNA4zqQ==", + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, - "node_modules/lodash._baseassign": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz", - "integrity": "sha512-t3N26QR2IdSN+gqSy9Ds9pBu/J1EAFEshKlUHpJG3rvyJOYgcELIxcIeKKfZk7sjOz11cFfzJRsyFry/JyabJQ==", - "dev": true, - "dependencies": { - "lodash._basecopy": "^3.0.0", - "lodash.keys": "^3.0.0" - } - }, - "node_modules/lodash._baseclone": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/lodash._baseclone/-/lodash._baseclone-3.3.0.tgz", - "integrity": "sha512-1K0dntf2dFQ5my0WoGKkduewR6+pTNaqX03kvs45y7G5bzl4B3kTR4hDfJIc2aCQDeLyQHhS280tc814m1QC1Q==", - "dev": true, - "dependencies": { - "lodash._arraycopy": "^3.0.0", - "lodash._arrayeach": "^3.0.0", - "lodash._baseassign": "^3.0.0", - "lodash._basefor": "^3.0.0", - "lodash.isarray": "^3.0.0", - "lodash.keys": "^3.0.0" - } - }, - "node_modules/lodash._basecopy": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz", - "integrity": "sha512-rFR6Vpm4HeCK1WPGvjZSJ+7yik8d8PVUdCJx5rT2pogG4Ve/2ZS7kfmO5l5T2o5V2mqlNIfSF5MZlr1+xOoYQQ==", - "dev": true - }, - "node_modules/lodash._basefor": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash._basefor/-/lodash._basefor-3.0.3.tgz", - "integrity": "sha512-6bc3b8grkpMgDcVJv9JYZAk/mHgcqMljzm7OsbmcE2FGUMmmLQTPHlh/dFqR8LA0GQ7z4K67JSotVKu5058v1A==", - "dev": true - }, - "node_modules/lodash._bindcallback": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz", - "integrity": "sha512-2wlI0JRAGX8WEf4Gm1p/mv/SZ+jLijpj0jyaE/AXeuQphzCgD8ZQW4oSpoN8JAopujOFGU3KMuq7qfHBWlGpjQ==", - "dev": true - }, - "node_modules/lodash._getnative": { - "version": "3.9.1", - "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", - "integrity": "sha512-RrL9VxMEPyDMHOd9uFbvMe8X55X16/cGM5IgOKgRElQZutpX89iS6vwl64duTV1/16w5JY7tuFNXqoekmh1EmA==", - "dev": true - }, - "node_modules/lodash._isiterateecall": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz", - "integrity": "sha512-De+ZbrMu6eThFti/CSzhRvTKMgQToLxbij58LMfM8JnYDNSOjkjTCIaa8ixglOeGh2nyPlakbt5bJWJ7gvpYlQ==", - "dev": true - }, - "node_modules/lodash.clone": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.clone/-/lodash.clone-3.0.3.tgz", - "integrity": "sha512-yVYPpFTdZDCLG2p07gVRTvcwN5X04oj2hu4gG6r0fer58JA08wAVxXzWM+CmmxO2bzOH8u8BkZTZqgX6juVF7A==", - "dev": true, - "dependencies": { - "lodash._baseclone": "^3.0.0", - "lodash._bindcallback": "^3.0.0", - "lodash._isiterateecall": "^3.0.0" - } - }, "node_modules/lodash.defaults": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", "integrity": "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==", "dev": true }, - "node_modules/lodash.defaultsdeep": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/lodash.defaultsdeep/-/lodash.defaultsdeep-4.6.1.tgz", - "integrity": "sha512-3j8wdDzYuWO3lM3Reg03MuQR957t287Rpcxp1njpEa8oDrikb+FwGdW3n+FELh/A6qib6yPit0j/pv9G/yeAqA==", - "dev": true - }, "node_modules/lodash.difference": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz", "integrity": "sha512-dS2j+W26TQ7taQBGN8Lbbq04ssV3emRw4NY58WErlTO29pIqS0HmoT5aJ9+TUQ1N3G+JOZSji4eugsWwGp9yPA==", "dev": true }, - "node_modules/lodash.escape": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-4.0.1.tgz", - "integrity": "sha512-nXEOnb/jK9g0DYMr1/Xvq6l5xMD7GDG55+GSYIYmS0G4tBk/hURD4JR9WCavs04t33WmJx9kCyp9vJ+mr4BOUw==", - "dev": true - }, "node_modules/lodash.flatten": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", "integrity": "sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==", "dev": true }, - "node_modules/lodash.isarguments": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", - "integrity": "sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg==", - "dev": true - }, - "node_modules/lodash.isarray": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz", - "integrity": "sha512-JwObCrNJuT0Nnbuecmqr5DgtuBppuCvGD9lxjFpAzwnVtdGoDQ1zig+5W8k5/6Gcn0gZ3936HDAlGd28i7sOGQ==", - "dev": true - }, "node_modules/lodash.isplainobject": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", "dev": true }, - "node_modules/lodash.keys": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", - "integrity": "sha512-CuBsapFjcubOGMn3VD+24HOAPxM79tH+V6ivJL3CHYjtrawauDJHUk//Yew9Hvc6e9rbCrURGk8z6PC+8WJBfQ==", - "dev": true, - "dependencies": { - "lodash._getnative": "^3.0.0", - "lodash.isarguments": "^3.0.0", - "lodash.isarray": "^3.0.0" - } - }, "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true + "dev": true, + "optional": true, + "peer": true }, "node_modules/lodash.mergewith": { "version": "4.6.2", @@ -4080,12 +4100,6 @@ "optional": true, "peer": true }, - "node_modules/lodash.pick": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz", - "integrity": "sha512-hXt6Ul/5yWjfklSGvLQl8vM//l3FtyHZeuelpzK6mm99pNvN9yTDruNZPEJZD1oWrqo+izBmB7oUfWgcCX7s4Q==", - "dev": true - }, "node_modules/lodash.union": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz", @@ -4109,12 +4123,12 @@ } }, "node_modules/loupe": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.4.tgz", - "integrity": "sha512-OvKfgCC2Ndby6aSTREl5aCCPTNIzlDfQZvZxNUrBrihDhL3xcrYegTblhmEiCrg2kKQz4XsFIaemE5BF4ybSaQ==", + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", + "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==", "dev": true, "dependencies": { - "get-func-name": "^2.0.0" + "get-func-name": "^2.0.1" } }, "node_modules/lower-case": { @@ -4157,6 +4171,12 @@ "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", "dev": true }, + "node_modules/mdn-data": { + "version": "2.0.30", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", + "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==", + "dev": true + }, "node_modules/merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", @@ -4253,10 +4273,11 @@ } }, "node_modules/mocha": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.2.0.tgz", - "integrity": "sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg==", + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.3.0.tgz", + "integrity": "sha512-uF2XJs+7xSLsrmIvn37i/wnc91nw7XjOQB8ccyx5aEgdnohr7n+rEiZP23WkCYHjilR6+EboEnbq/ZQDz4LSbg==", "dev": true, + "license": "MIT", "dependencies": { "ansi-colors": "4.1.1", "browser-stdout": "1.3.1", @@ -4265,13 +4286,12 @@ "diff": "5.0.0", "escape-string-regexp": "4.0.0", "find-up": "5.0.0", - "glob": "7.2.0", + "glob": "8.1.0", "he": "1.2.0", "js-yaml": "4.1.0", "log-symbols": "4.1.0", "minimatch": "5.0.1", "ms": "2.1.3", - "nanoid": "3.3.3", "serialize-javascript": "6.0.0", "strip-json-comments": "3.1.1", "supports-color": "8.1.1", @@ -4286,10 +4306,16 @@ }, "engines": { "node": ">= 14.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mochajs" + } + }, + "node_modules/mocha/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" } }, "node_modules/mocha/node_modules/diff": { @@ -4297,6 +4323,7 @@ "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.3.1" } @@ -4306,6 +4333,7 @@ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -4318,6 +4346,7 @@ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, + "license": "MIT", "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" @@ -4330,42 +4359,32 @@ } }, "node_modules/mocha/node_modules/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, + "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "minimatch": "^5.0.1", + "once": "^1.3.0" }, "engines": { - "node": "*" + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/mocha/node_modules/glob/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/mocha/node_modules/locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, + "license": "MIT", "dependencies": { "p-locate": "^5.0.0" }, @@ -4381,6 +4400,7 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -4388,26 +4408,19 @@ "node": ">=10" } }, - "node_modules/mocha/node_modules/minimatch/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, "node_modules/mocha/node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/mocha/node_modules/p-limit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, + "license": "MIT", "dependencies": { "yocto-queue": "^0.1.0" }, @@ -4423,6 +4436,7 @@ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, + "license": "MIT", "dependencies": { "p-limit": "^3.0.2" }, @@ -4438,6 +4452,7 @@ "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "randombytes": "^2.1.0" } @@ -4461,24 +4476,21 @@ "thenify-all": "^1.0.0" } }, - "node_modules/nanoid": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz", - "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==", - "dev": true, - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, "node_modules/neo-async": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", "dev": true }, + "node_modules/netmask": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz", + "integrity": "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==", + "dev": true, + "engines": { + "node": ">= 0.4.0" + } + }, "node_modules/nice-napi": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/nice-napi/-/nice-napi-1.0.2.tgz", @@ -4495,13 +4507,14 @@ } }, "node_modules/nightwatch": { - "version": "3.3.5", - "resolved": "https://registry.npmjs.org/nightwatch/-/nightwatch-3.3.5.tgz", - "integrity": "sha512-TxhW6DIn/W9hiXGaHPe+REQXi5/EkW/6jI17Js+lcVNCACs1XKqUrLDK1AheXoXZ38MSREzMMg/buaybsxUhOA==", + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/nightwatch/-/nightwatch-3.6.3.tgz", + "integrity": "sha512-Md+Tz9SBNZ8cVzaRyhzzfKf06t/qE5609QMQ2vEciLwDiDkQPsTU6XZGypwldMxx05wu4UcPvDZnP7NZXlZilw==", "dev": true, + "license": "MIT", "dependencies": { - "@nightwatch/chai": "5.0.2", - "@nightwatch/html-reporter-template": "0.2.1", + "@nightwatch/chai": "5.0.3", + "@nightwatch/html-reporter-template": "^0.3.0", "@nightwatch/nightwatch-inspector": "^1.0.1", "@types/chai": "^4.3.5", "@types/selenium-webdriver": "^4.1.14", @@ -4516,23 +4529,19 @@ "devtools-protocol": "^0.0.1140464", "didyoumean": "^1.2.2", "dotenv": "16.3.1", - "ejs": "3.1.8", + "ejs": "^3.1.10", "envinfo": "7.11.0", "glob": "7.2.3", - "jsdom": "21.1.2", - "lodash.clone": "3.0.3", - "lodash.defaultsdeep": "4.6.1", - "lodash.escape": "4.0.1", - "lodash.merge": "4.6.2", - "lodash.pick": "4.4.0", + "jsdom": "^23.1.0", + "lodash": "^4.17.21", "minimatch": "3.1.2", "minimist": "1.2.6", - "mocha": "10.2.0", - "nightwatch-axe-verbose": "^2.2.2", + "mocha": "10.3.0", + "nightwatch-axe-verbose": "^2.3.0", "open": "8.4.2", "ora": "5.4.1", - "piscina": "3.2.0", - "selenium-webdriver": "4.14.0", + "piscina": "^4.3.1", + "selenium-webdriver": "4.21.0", "semver": "7.5.4", "stacktrace-parser": "0.1.10", "strip-ansi": "6.0.1", @@ -4561,12 +4570,12 @@ } }, "node_modules/nightwatch-axe-verbose": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/nightwatch-axe-verbose/-/nightwatch-axe-verbose-2.2.2.tgz", - "integrity": "sha512-MvCrQb9D/ixtGtyN5fh7YCkelXuPup3X9D2Zhhk1PWyALtkdYCFadnIGif1irpQ1BLNSlqC+FDNnsNald7KHYA==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/nightwatch-axe-verbose/-/nightwatch-axe-verbose-2.3.0.tgz", + "integrity": "sha512-IC29PLvYrbbKRdIU/NJaxk/UvTmQ5EiNN08UnCWyImpzV0Y7tE1CYchrvFTaHXBZkkZTQC3uHTeHF/41mvK8eQ==", "dev": true, "dependencies": { - "axe-core": "^4.7.2" + "axe-core": "^4.8.3" } }, "node_modules/nightwatch/node_modules/devtools-protocol": { @@ -4595,9 +4604,9 @@ "optional": true }, "node_modules/node-gyp-build": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.1.tgz", - "integrity": "sha512-24vnklJmyRS8ViBNI8KbtK/r/DmXQMRiOMXTNz2nrTnAYUwjmEEbnnpB/+kt+yWRv73bPsSPRFddrcIbAxSiMQ==", + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.0.tgz", + "integrity": "sha512-u6fs2AEUljNho3EYTJNBfImO5QTo/J/1Etd+NVdCj7qWKUSN/bSLkZwhDv7I+w/MSC6qJ4cknepkAYykDdK8og==", "dev": true, "optional": true, "bin": { @@ -4646,12 +4655,6 @@ "node": ">=0.10.0" } }, - "node_modules/nwsapi": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.7.tgz", - "integrity": "sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==", - "dev": true - }, "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -4815,6 +4818,38 @@ "node": ">=6" } }, + "node_modules/pac-proxy-agent": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-7.0.1.tgz", + "integrity": "sha512-ASV8yU4LLKBAjqIPMbrgtaKIvxQri/yh2OpI+S6hVa9JRkUI3Y3NPFbfngDtY7oFtSMD3w31Xns89mDa3Feo5A==", + "dev": true, + "dependencies": { + "@tootallnate/quickjs-emscripten": "^0.23.0", + "agent-base": "^7.0.2", + "debug": "^4.3.4", + "get-uri": "^6.0.1", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.2", + "pac-resolver": "^7.0.0", + "socks-proxy-agent": "^8.0.2" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/pac-resolver": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-7.0.1.tgz", + "integrity": "sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==", + "dev": true, + "dependencies": { + "degenerator": "^5.0.0", + "netmask": "^2.0.2" + }, + "engines": { + "node": ">= 14" + } + }, "node_modules/pad-right": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/pad-right/-/pad-right-0.2.2.tgz", @@ -4833,7 +4868,8 @@ "version": "1.0.11", "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", - "dev": true + "dev": true, + "license": "(MIT AND Zlib)" }, "node_modules/parse-json": { "version": "5.2.0", @@ -4975,15 +5011,10 @@ } }, "node_modules/piscina": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/piscina/-/piscina-3.2.0.tgz", - "integrity": "sha512-yn/jMdHRw+q2ZJhFhyqsmANcbF6V2QwmD84c6xRau+QpQOmtrBCoRGdvTfeuFDYXB5W2m6MfLkjkvQa9lUSmIA==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/piscina/-/piscina-4.4.0.tgz", + "integrity": "sha512-+AQduEJefrOApE4bV7KRmp3N2JnnyErlVqq4P/jmko4FPz9Z877BCccl/iB3FdrWSUkvbGV9Kan/KllJgat3Vg==", "dev": true, - "dependencies": { - "eventemitter-asyncresource": "^1.0.0", - "hdr-histogram-js": "^2.0.1", - "hdr-histogram-percentiles-obj": "^3.0.0" - }, "optionalDependencies": { "nice-napi": "^1.0.2" } @@ -5025,6 +5056,34 @@ "optional": true, "peer": true }, + "node_modules/proxy-agent": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.4.0.tgz", + "integrity": "sha512-u0piLU+nCOHMgGjRbimiXmA9kM/L9EHh3zL81xCdp7m+Y2pHIsnmbdDoEDoAz5geaonNR6q6+yOPQs6n4T6sBQ==", + "dev": true, + "dependencies": { + "agent-base": "^7.0.2", + "debug": "^4.3.4", + "http-proxy-agent": "^7.0.1", + "https-proxy-agent": "^7.0.3", + "lru-cache": "^7.14.1", + "pac-proxy-agent": "^7.0.1", + "proxy-from-env": "^1.1.0", + "socks-proxy-agent": "^8.0.2" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/proxy-agent/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true, + "engines": { + "node": ">=12" + } + }, "node_modules/proxy-from-env": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", @@ -5048,9 +5107,9 @@ } }, "node_modules/punycode": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", - "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "dev": true, "engines": { "node": ">=6" @@ -5178,6 +5237,7 @@ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dev": true, + "license": "MIT", "dependencies": { "picomatch": "^2.2.1" }, @@ -5260,6 +5320,16 @@ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -5335,21 +5405,6 @@ "node": ">=8" } }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/rrweb-cssom": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.6.0.tgz", @@ -5421,17 +5476,18 @@ "peer": true }, "node_modules/selenium-webdriver": { - "version": "4.14.0", - "resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-4.14.0.tgz", - "integrity": "sha512-637rs8anqMKHbWxcBZpyG3Gcs+rBUtAUiqk0O/knUqH4Paj3MFUZrz88/pVGOLNryEVy2z92fZomT8p1ENl1gA==", + "version": "4.21.0", + "resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-4.21.0.tgz", + "integrity": "sha512-WaEJHZjOWNth1QG5FEpxpREER0qptZBMonFU6GtAqdCNLJVxbtC3E7oS/I/+Q1sf1W032Wg0Ebk+m46lANOXyQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { "jszip": "^3.10.1", - "tmp": "^0.2.1", - "ws": ">=8.14.2" + "tmp": "^0.2.3", + "ws": ">=8.16.0" }, "engines": { - "node": ">= 14.20.0" + "node": ">= 14.21.0" } }, "node_modules/semver": { @@ -5491,7 +5547,8 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/shallow-clone": { "version": "3.0.1", @@ -5546,6 +5603,44 @@ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true }, + "node_modules/smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "dev": true, + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.1.tgz", + "integrity": "sha512-B6w7tkwNid7ToxjZ08rQMT8M9BJAf8DKx8Ft4NivzH0zBUfd6jldGcisJn/RLgxcX3FPNDdNQCUEMMT79b+oCQ==", + "dev": true, + "dependencies": { + "ip-address": "^9.0.5", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks-proxy-agent": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.3.tgz", + "integrity": "sha512-VNegTZKhuGq5vSD6XNKlbqWhyt/40CgoEw8XxD6dhnm8Jq9IEa3nIa4HwnM8XOqU0CdB0BwWVXusqiFXfHB3+A==", + "dev": true, + "dependencies": { + "agent-base": "^7.1.1", + "debug": "^4.3.4", + "socks": "^2.7.1" + }, + "engines": { + "node": ">= 14" + } + }, "node_modules/source-list-map": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", @@ -5561,6 +5656,15 @@ "node": ">=0.10.0" } }, + "node_modules/source-map-js": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", + "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/source-map-support": { "version": "0.5.21", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", @@ -5611,6 +5715,12 @@ "optional": true, "peer": true }, + "node_modules/sprintf-js": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", + "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", + "dev": true + }, "node_modules/stackframe": { "version": "1.3.4", "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz", @@ -5755,6 +5865,7 @@ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" }, @@ -5933,15 +6044,13 @@ "peer": true }, "node_modules/tmp": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", - "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz", + "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==", "dev": true, - "dependencies": { - "rimraf": "^3.0.0" - }, + "license": "MIT", "engines": { - "node": ">=8.17.0" + "node": ">=14.14" } }, "node_modules/to-regex-range": { @@ -5949,6 +6058,7 @@ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, + "license": "MIT", "dependencies": { "is-number": "^7.0.0" }, @@ -5979,25 +6089,16 @@ "node": ">=6" } }, - "node_modules/tough-cookie/node_modules/universalify": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", - "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", - "dev": true, - "engines": { - "node": ">= 4.0.0" - } - }, "node_modules/tr46": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-4.1.1.tgz", - "integrity": "sha512-2lv/66T7e5yNyhAAC4NaKe5nVavzuGJQVVtRYLyQ2OI8tsJ61PMLlelehb0wi2Hx6+hT/OJUWZcw8MjlSRnxvw==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-5.0.0.tgz", + "integrity": "sha512-tk2G5R2KRwBd+ZN0zaEXpmzdKyOYksXwywulIX95MBODjSzMIuQnQ3m8JxgbhnL1LeVo7lqQKsYa1O3Htl7K5g==", "dev": true, "dependencies": { - "punycode": "^2.3.0" + "punycode": "^2.3.1" }, "engines": { - "node": ">=14" + "node": ">=18" } }, "node_modules/ts-loader": { @@ -6066,9 +6167,7 @@ "version": "2.6.2", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "dev": true, - "optional": true, - "peer": true + "dev": true }, "node_modules/type-detect": { "version": "4.0.8", @@ -6104,6 +6203,15 @@ "node": ">=4.2.0" } }, + "node_modules/universalify": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", + "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, "node_modules/untildify": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", @@ -6211,15 +6319,15 @@ } }, "node_modules/w3c-xmlserializer": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz", - "integrity": "sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz", + "integrity": "sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==", "dev": true, "dependencies": { - "xml-name-validator": "^4.0.0" + "xml-name-validator": "^5.0.0" }, "engines": { - "node": ">=14" + "node": ">=18" } }, "node_modules/watchpack": { @@ -6406,37 +6514,37 @@ } }, "node_modules/whatwg-encoding": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", - "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz", + "integrity": "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==", "dev": true, "dependencies": { "iconv-lite": "0.6.3" }, "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/whatwg-mimetype": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz", - "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz", + "integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==", "dev": true, "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/whatwg-url": { - "version": "12.0.1", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-12.0.1.tgz", - "integrity": "sha512-Ed/LrqB8EPlGxjS+TrsXcpUond1mhccS3pchLhzSgPCnTimUCKj3IZE75pAs5m6heB2U2TMerKFUXheyHY+VDQ==", + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.0.0.tgz", + "integrity": "sha512-1lfMEm2IEr7RIV+f4lUNPOqfFL+pO+Xw3fJSqmjX9AbXcXcYOkCe1P6+9VBZB6n94af16NfZf+sSk0JCBZC9aw==", "dev": true, "dependencies": { - "tr46": "^4.1.1", + "tr46": "^5.0.0", "webidl-conversions": "^7.0.0" }, "engines": { - "node": ">=14" + "node": ">=18" } }, "node_modules/which": { @@ -6526,7 +6634,8 @@ "version": "6.2.1", "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz", "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==", - "dev": true + "dev": true, + "license": "Apache-2.0" }, "node_modules/wrap-ansi": { "version": "7.0.0", @@ -6572,10 +6681,11 @@ "dev": true }, "node_modules/ws": { - "version": "8.14.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.14.2.tgz", - "integrity": "sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g==", + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", + "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=10.0.0" }, @@ -6593,12 +6703,12 @@ } }, "node_modules/xml-name-validator": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", - "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz", + "integrity": "sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==", "dev": true, "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/xmlbuilder": { @@ -6623,6 +6733,7 @@ "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true, + "license": "ISC", "engines": { "node": ">=10" } @@ -6649,6 +6760,7 @@ "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, + "license": "MIT", "dependencies": { "cliui": "^7.0.2", "escalade": "^3.1.1", @@ -6667,6 +6779,7 @@ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", "dev": true, + "license": "ISC", "engines": { "node": ">=10" } @@ -6676,6 +6789,7 @@ "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", "dev": true, + "license": "MIT", "dependencies": { "camelcase": "^6.0.0", "decamelize": "^4.0.0", @@ -6710,6 +6824,7 @@ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, diff --git a/package.json b/package.json index d5aa52c..9605431 100644 --- a/package.json +++ b/package.json @@ -2,8 +2,8 @@ "type": "module", "devDependencies": { "@types/nightwatch": "^2.3.23", - "chromedriver": "^120.0.1", - "nightwatch": "^3.2.0", + "chromedriver": "^126.0.2", + "nightwatch": "^3.5.0", "ts-loader": "^9.4.2", "ts-node": "^10.9.1", "typescript": "^4.9.5", diff --git a/readme.txt b/readme.txt index c85eea0..9b08c66 100644 --- a/readme.txt +++ b/readme.txt @@ -2,8 +2,8 @@ Contributors: whiteshadow Tags: admin, dashboard, menu, security, wpmu Requires at least: 4.7 -Tested up to: 6.4 -Stable tag: 2.23.3 +Tested up to: 6.6 +Stable tag: 2.26.1 Lets you directly edit the WordPress admin menu. You can re-order, hide or rename existing menus, add custom menus and more. @@ -83,6 +83,78 @@ Here are some usage tips and other things that can be good to know when using th [Get the latest version here.](http://adminmenueditor.com/updates/) += 2.26.1 (2024-07-17) = +##### Added +* Added the "CSS classes" field to submenu items. You can use it to add custom CSS classes to menu items. Previously, only top level menus had this field. +* Updated the capability database. The plugin uses this to categorize the role capabilities shown in the "Roles" tab. + +##### Fixed +* Fixed a bug introduced in version 2.26 that prevented certain blocks from rendering in the default block editor. This only affected blocks that call the "block-renderer" REST API. + += 2.26 (2024-07-16) = +##### Added +* Added a "Nav Menus" tab that lets you hide navigation menu items from roles and users. It supports both classic navigation menus and block-based navigation menus used by FSE themes. In addition to per-role settings, you can also hide menu items from all logged-in users or all logged-out users. + +##### Fixed +* Fixed a bug introduced in version 2.25 that could cause the "Redirects" tab to be blank in some configurations. The bug also triggered this JS error: "settings.redirects.map is not a function". +* Fixed a WooCommerce conflict where two "Subscriptions" menu items would appear when AME was active. + +##### Changed +* Tested with WP 6.6-RC3 and WP 6.7-alpha. + += 2.25 (2024-07-02) = +##### Added +* Added background color settings for submenu item hover states, both for the admin menu and for the Toolbar. +* Added a background color setting for the currently active admin menu item. +* Added an option to open the admin menu logo link in a new tab. +* Added an option to automatically delete settings associated with missing roles and users. This only applies to certain settings, such as menu permissions and login redirects. "Missing" means that the role or user doesn't exist on the current site, which usually happens when it has been deleted. In Multisite, it can also happen if different subsites have different roles. By default, this option is enabled on regular sites and disabled in Multisite. + +##### Fixed +* Fixed a WooCommerce conflict where two "Orders" menu items would appear when AME was active. +* Fixed a rare PHP warning "Undefined array key "parent" in ... menu-editor-core.php". +* Fixed a potential crash if the global `$menu` variable is not a native array but is still array-like. +* Improved compatibility with old versions of UiPress. + +##### Changed +* Improved menu drag & drop from the top level to the submenu. You can now drop items anywhere in the active submenu, not just at the bottom. +* Tested with WP 6.5.5. + += 2.24.3 (2024-05-15) = +##### Fixed +* Fixed the WooCommerce admin page header staying in its old place when changing the admin menu width, the Toolbar height, or when hiding the Toolbar completely. Now the page header will be automatically moved or resized so that it's still fully visible. +* Fixed custom menu items that use the "Embed WP page" feature sometimes having different item URLs for different users or having the URL change unnecessarily. With this update, the URL will change the next time you save the admin menu, but after that it should generally stay static unless you select a different embedded page. +* Fixed synced patterns (a.k.a. reusable blocks) not working when AME Pro is active and *any* Gutenberg blocks are hidden. +* Fixed a potential PHP warning about array indexing in `hide-others-posts.php` when at least one of the "Hide Other Users' Posts" options was enabled in the "Tweaks" tab. +* Updated the MailPoet compatibility fix for MailPoet 4.49.1. Now custom admin menu colors should once again work on MailPoet's admin pages. + += 2.24.2 (2024-04-29) = +* Fixed a fatal error "Cannot use a scalar value as an array" when trying to save changes on the "Easy Hide" page. + += 2.24.1 (2024-04-22) = +* Fixed a conflict with UIPress that was introduced in version 2.24. The conflict prevented most admin menu settings from being applied. For example, hidden menu items would become visible, menu order would reset, renamed items would display the old title, and so on. Custom menu permissions were still effective, so unchecked items would be visible but inaccessible. + += 2.24 (2024-04-15) = +##### Added +* Added a way to prevent a role from editing or deleting media files that were uploaded by other users. You can find the new settings in the "Tweaks" tab, in a section named "Media Library Restrictions". +* Added the ability to hide and/or remove block patterns. +* Added an option to hide the "Media" tab in the Gutenberg block inserter. + +##### Fixed +* Fixed inability to save various menu styles and menu separator styles without creating an admin menu configuration first. This issue could cause errors when saving changes in the Admin Customizer. +* Fixed the Gutenberg block editor and the block-based widget editor having unnecessary empty space at the top when the Toolbar (Admin Bar) is hidden. +* Fixed the Gutenberg editor overlapping the admin menu when increasing the width of the admin menu. +* Fixed hidden special blocks like "Pattern placeholder" and "Legacy Widget" showing up in the "Hide Gutenberg Blocks" section even though they are not actually visible in the block inserter. +* Fixed a conflict between unchecking the "Show the Toolbar" option and enabling "Full height" admin menu mode in the Admin Customizer. This could cause the first item of the admin menu to go off the screen, making it invisible. +* Various other layout fixes. +* Fixed an Admin Ccustomizer bug where changing admin menu settings in a certain order and then saving the changes could result in some of those changes being lost. For example, this could happen if you changed the menu bar width, then changed the menu separator margins, then saved the changes - the menu bar width would be reset. +* Made the "Download as admin theme" feature available even when the current session doesn't have any unsaved changes. +* Fixed "Warning: Attempt to read property "cap_key" on null" if a metadata update happens for a non-existent user or the user can't be retrieved. +* Fixed the "Media" menu always being highlighted as "new" when the "Enable Media Replace" plugin is active. + +##### Changed +* The "Hide Profile Fields" tweaks now also apply to the "Edit User" screen. +* Tested up to WordPress 6.5.2. + = 2.23.3 (2024-01-21) = * Hiding the "Author" meta box now also hides the corresponding section of the "Summary" panel in the Gutenberg block editor. * Updated the "Meta Boxes" tab to automatically reselect the previously selected role after saving changes. diff --git a/tsconfig.json b/tsconfig.json index 17acb57..8048c46 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -5,7 +5,8 @@ "sourceMap": true, "strict": true, "moduleResolution": "node", - "typeRoots": ["./node_modules/@types"] + "typeRoots": ["./node_modules/@types"], + "newLine": "LF", }, "exclude": [] } \ No newline at end of file diff --git a/uninstall.php b/uninstall.php index ae49406..1cef071 100644 --- a/uninstall.php +++ b/uninstall.php @@ -2,7 +2,7 @@ /** * @author W-Shadow - * @copyright 2012 + * @copyright 2024 * * The uninstallation script. */ @@ -60,22 +60,17 @@ delete_metadata('user', 0, 'ame_rui_first_login_done', '', true); } - //Call the "Easy Hide" module uninstaller. - $easyHideUninstaller = dirname(__FILE__) . '/extras/modules/easy-hide/eh-preferences-uninstall.php'; - if ( file_exists($easyHideUninstaller) ) { - include ($easyHideUninstaller); - } - - //Call the uninstaller for the "highlight new menus" module. - $highlighterUninstaller = dirname(__FILE__) . '/modules/highlight-new-menus/uninstall.php'; - if ( file_exists($highlighterUninstaller) ) { - include (dirname(__FILE__) . '/modules/highlight-new-menus/uninstall.php'); - } - - //Call the role editor uninstaller. - $roleEditorUninstaller = dirname(__FILE__) . '/extras/modules/role-editor/uninstall.php'; - if ( file_exists($roleEditorUninstaller) ) { - include (dirname(__FILE__) . '/extras/modules/role-editor/uninstall.php'); + //Run module uninstallers. + $ameModuleUninstallers = [ + __DIR__ . '/extras/modules/easy-hide/eh-preferences-uninstall.php', + __DIR__ . '/modules/highlight-new-menus/uninstall.php', + __DIR__ . '/extras/modules/role-editor/uninstall.php', + __DIR__ . '/extras/modules/nav-menu-visibility/uninstall.php', + ]; + foreach ($ameModuleUninstallers as $ameUninstallerFile) { + if ( file_exists($ameUninstallerFile) ) { + include ($ameUninstallerFile); + } } //Clear the stylesheet cache. diff --git a/vendor/composer/autoload_files.php b/vendor/composer/autoload_files.php index 1d3880f..179cfc0 100644 --- a/vendor/composer/autoload_files.php +++ b/vendor/composer/autoload_files.php @@ -7,5 +7,5 @@ return array( '925634b8b72383129427b0beaf838866' => $vendorDir . '/yahnis-elsts/ajax-wrapper/AjaxWrapper.php', - '45a16669595eb3c0a9e2994e57fc3188' => $vendorDir . '/yahnis-elsts/plugin-update-checker/load-v5p3.php', + 'd05ecc14ff93fd612a81ec7e8ab4c2c9' => $vendorDir . '/yahnis-elsts/plugin-update-checker/load-v5p4.php', ); diff --git a/vendor/composer/autoload_static.php b/vendor/composer/autoload_static.php index f9e1ede..0d2a1d4 100644 --- a/vendor/composer/autoload_static.php +++ b/vendor/composer/autoload_static.php @@ -8,7 +8,7 @@ class ComposerStaticInit2eceea941320ca1663329be0014d49fe { public static $files = array ( '925634b8b72383129427b0beaf838866' => __DIR__ . '/..' . '/yahnis-elsts/ajax-wrapper/AjaxWrapper.php', - '45a16669595eb3c0a9e2994e57fc3188' => __DIR__ . '/..' . '/yahnis-elsts/plugin-update-checker/load-v5p3.php', + 'd05ecc14ff93fd612a81ec7e8ab4c2c9' => __DIR__ . '/..' . '/yahnis-elsts/plugin-update-checker/load-v5p4.php', ); public static $classMap = array ( diff --git a/vendor/composer/installed.json b/vendor/composer/installed.json index 59bc35f..9faae42 100644 --- a/vendor/composer/installed.json +++ b/vendor/composer/installed.json @@ -48,25 +48,25 @@ "source": { "type": "git", "url": "https://github.com/YahnisElsts/plugin-update-checker.git", - "reference": "0a8fd4ad3a79f95f4bbadaa7eba6c815a72c60ee" + "reference": "97dfe23d158b8af0ea3f7652e678688da6e52e51" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/YahnisElsts/plugin-update-checker/zipball/0a8fd4ad3a79f95f4bbadaa7eba6c815a72c60ee", - "reference": "0a8fd4ad3a79f95f4bbadaa7eba6c815a72c60ee", + "url": "https://api.github.com/repos/YahnisElsts/plugin-update-checker/zipball/97dfe23d158b8af0ea3f7652e678688da6e52e51", + "reference": "97dfe23d158b8af0ea3f7652e678688da6e52e51", "shasum": "" }, "require": { "ext-json": "*", "php": ">=5.6.20" }, - "time": "2024-01-19T13:40:36+00:00", + "time": "2024-03-20T16:33:33+00:00", "default-branch": true, "type": "library", "installation-source": "source", "autoload": { "files": [ - "load-v5p3.php" + "load-v5p4.php" ] }, "notification-url": "https://packagist.org/downloads/", diff --git a/vendor/composer/installed.php b/vendor/composer/installed.php index fb996af..cddf1c7 100644 --- a/vendor/composer/installed.php +++ b/vendor/composer/installed.php @@ -33,7 +33,7 @@ 'yahnis-elsts/plugin-update-checker' => array( 'pretty_version' => 'dev-master', 'version' => 'dev-master', - 'reference' => '0a8fd4ad3a79f95f4bbadaa7eba6c815a72c60ee', + 'reference' => '97dfe23d158b8af0ea3f7652e678688da6e52e51', 'type' => 'library', 'install_path' => __DIR__ . '/../yahnis-elsts/plugin-update-checker', 'aliases' => array( diff --git a/vendor/yahnis-elsts/plugin-update-checker/Puc/v5/PucFactory.php b/vendor/yahnis-elsts/plugin-update-checker/Puc/v5/PucFactory.php index a2ec2d2..0bc62ce 100644 --- a/vendor/yahnis-elsts/plugin-update-checker/Puc/v5/PucFactory.php +++ b/vendor/yahnis-elsts/plugin-update-checker/Puc/v5/PucFactory.php @@ -4,7 +4,7 @@ if ( !class_exists(PucFactory::class, false) ): - class PucFactory extends \YahnisElsts\PluginUpdateChecker\v5p3\PucFactory { + class PucFactory extends \YahnisElsts\PluginUpdateChecker\v5p4\PucFactory { } endif; diff --git a/vendor/yahnis-elsts/plugin-update-checker/Puc/v5p4/Autoloader.php b/vendor/yahnis-elsts/plugin-update-checker/Puc/v5p4/Autoloader.php new file mode 100644 index 0000000..5a98133 --- /dev/null +++ b/vendor/yahnis-elsts/plugin-update-checker/Puc/v5p4/Autoloader.php @@ -0,0 +1,86 @@ +rootDir = dirname(__FILE__) . '/'; + + $namespaceWithSlash = __NAMESPACE__ . '\\'; + $this->prefix = $namespaceWithSlash; + + $this->libraryDir = $this->rootDir . '../..'; + if ( !self::isPhar() ) { + $this->libraryDir = realpath($this->libraryDir); + } + $this->libraryDir = $this->libraryDir . '/'; + + //Usually, dependencies like Parsedown are in the global namespace, + //but if someone adds a custom namespace to the entire library, they + //will be in the same namespace as this class. + $isCustomNamespace = ( + substr($namespaceWithSlash, 0, strlen(self::DEFAULT_NS_PREFIX)) !== self::DEFAULT_NS_PREFIX + ); + $libraryPrefix = $isCustomNamespace ? $namespaceWithSlash : ''; + + $this->staticMap = array( + $libraryPrefix . 'PucReadmeParser' => 'vendor/PucReadmeParser.php', + $libraryPrefix . 'Parsedown' => 'vendor/Parsedown.php', + ); + + //Add the generic, major-version-only factory class to the static map. + $versionSeparatorPos = strrpos(__NAMESPACE__, '\\v'); + if ( $versionSeparatorPos !== false ) { + $versionSegment = substr(__NAMESPACE__, $versionSeparatorPos + 1); + $pointPos = strpos($versionSegment, 'p'); + if ( ($pointPos !== false) && ($pointPos > 1) ) { + $majorVersionSegment = substr($versionSegment, 0, $pointPos); + $majorVersionNs = __NAMESPACE__ . '\\' . $majorVersionSegment; + $this->staticMap[$majorVersionNs . '\\PucFactory'] = + 'Puc/' . $majorVersionSegment . '/Factory.php'; + } + } + + spl_autoload_register(array($this, 'autoload')); + } + + /** + * Determine if this file is running as part of a Phar archive. + * + * @return bool + */ + private static function isPhar() { + //Check if the current file path starts with "phar://". + static $pharProtocol = 'phar://'; + return (substr(__FILE__, 0, strlen($pharProtocol)) === $pharProtocol); + } + + public function autoload($className) { + if ( isset($this->staticMap[$className]) && file_exists($this->libraryDir . $this->staticMap[$className]) ) { + include($this->libraryDir . $this->staticMap[$className]); + return; + } + + if ( strpos($className, $this->prefix) === 0 ) { + $path = substr($className, strlen($this->prefix)); + $path = str_replace(array('_', '\\'), '/', $path); + $path = $this->rootDir . $path . '.php'; + + if ( file_exists($path) ) { + include $path; + } + } + } + } + +endif; diff --git a/vendor/yahnis-elsts/plugin-update-checker/Puc/v5p4/DebugBar/Extension.php b/vendor/yahnis-elsts/plugin-update-checker/Puc/v5p4/DebugBar/Extension.php new file mode 100644 index 0000000..0adb68c --- /dev/null +++ b/vendor/yahnis-elsts/plugin-update-checker/Puc/v5p4/DebugBar/Extension.php @@ -0,0 +1,199 @@ +updateChecker = $updateChecker; + if ( isset($panelClass) ) { + $this->panelClass = $panelClass; + } + + if ( (strpos($this->panelClass, '\\') === false) ) { + $this->panelClass = __NAMESPACE__ . '\\' . $this->panelClass; + } + + add_filter('debug_bar_panels', array($this, 'addDebugBarPanel')); + add_action('debug_bar_enqueue_scripts', array($this, 'enqueuePanelDependencies')); + + add_action('wp_ajax_puc_v5_debug_check_now', array($this, 'ajaxCheckNow')); + } + + /** + * Register the PUC Debug Bar panel. + * + * @param array $panels + * @return array + */ + public function addDebugBarPanel($panels) { + if ( $this->updateChecker->userCanInstallUpdates() ) { + $panels[] = new $this->panelClass($this->updateChecker); + } + return $panels; + } + + /** + * Enqueue our Debug Bar scripts and styles. + */ + public function enqueuePanelDependencies() { + wp_enqueue_style( + 'puc-debug-bar-style-v5', + $this->getLibraryUrl("/css/puc-debug-bar.css"), + array('debug-bar'), + '20221008' + ); + + wp_enqueue_script( + 'puc-debug-bar-js-v5', + $this->getLibraryUrl("/js/debug-bar.js"), + array('jquery'), + '20221008' + ); + } + + /** + * Run an update check and output the result. Useful for making sure that + * the update checking process works as expected. + */ + public function ajaxCheckNow() { + //phpcs:ignore WordPress.Security.NonceVerification.Missing -- Nonce is checked in preAjaxRequest(). + if ( !isset($_POST['uid']) || ($_POST['uid'] !== $this->updateChecker->getUniqueName('uid')) ) { + return; + } + $this->preAjaxRequest(); + $update = $this->updateChecker->checkForUpdates(); + if ( $update !== null ) { + echo "An update is available:"; + //phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_print_r -- For debugging output. + echo '
    ', esc_html(print_r($update, true)), '
    '; + } else { + echo 'No updates found.'; + } + + $errors = $this->updateChecker->getLastRequestApiErrors(); + if ( !empty($errors) ) { + printf('

    The update checker encountered %d API error%s.

    ', count($errors), (count($errors) > 1) ? 's' : ''); + + foreach (array_values($errors) as $num => $item) { + $wpError = $item['error']; + /** @var \WP_Error $wpError */ + printf('

    %d) %s

    ', intval($num + 1), esc_html($wpError->get_error_message())); + + echo '
    '; + printf('
    Error code:
    %s
    ', esc_html($wpError->get_error_code())); + + if ( isset($item['url']) ) { + printf('
    Requested URL:
    %s
    ', esc_html($item['url'])); + } + + if ( isset($item['httpResponse']) ) { + if ( is_wp_error($item['httpResponse']) ) { + $httpError = $item['httpResponse']; + /** @var \WP_Error $httpError */ + printf( + '
    WordPress HTTP API error:
    %s (%s)
    ', + esc_html($httpError->get_error_message()), + esc_html($httpError->get_error_code()) + ); + } else { + //Status code. + printf( + '
    HTTP status:
    %d %s
    ', + esc_html(wp_remote_retrieve_response_code($item['httpResponse'])), + esc_html(wp_remote_retrieve_response_message($item['httpResponse'])) + ); + + //Headers. + echo '
    Response headers:
    ';
    +							foreach (wp_remote_retrieve_headers($item['httpResponse']) as $name => $value) {
    +								printf("%s: %s\n", esc_html($name), esc_html($value));
    +							}
    +							echo '
    '; + + //Body. + $body = wp_remote_retrieve_body($item['httpResponse']); + if ( $body === '' ) { + $body = '(Empty response.)'; + } else if ( strlen($body) > self::RESPONSE_BODY_LENGTH_LIMIT ) { + $length = strlen($body); + $body = substr($body, 0, self::RESPONSE_BODY_LENGTH_LIMIT) + . sprintf("\n(Long string truncated. Total length: %d bytes.)", $length); + } + + printf('
    Response body:
    %s
    ', esc_html($body)); + } + } + echo '
    '; + } + } + + exit; + } + + /** + * Check access permissions and enable error display (for debugging). + */ + protected function preAjaxRequest() { + if ( !$this->updateChecker->userCanInstallUpdates() ) { + die('Access denied'); + } + check_ajax_referer('puc-ajax'); + + //phpcs:ignore WordPress.PHP.DiscouragedPHPFunctions.runtime_configuration_error_reporting -- Part of a debugging feature. + error_reporting(E_ALL); + //phpcs:ignore WordPress.PHP.IniSet.display_errors_Blacklisted + @ini_set('display_errors', 'On'); + } + + /** + * Remove hooks that were added by this extension. + */ + public function removeHooks() { + remove_filter('debug_bar_panels', array($this, 'addDebugBarPanel')); + remove_action('debug_bar_enqueue_scripts', array($this, 'enqueuePanelDependencies')); + remove_action('wp_ajax_puc_v5_debug_check_now', array($this, 'ajaxCheckNow')); + } + + /** + * @param string $filePath + * @return string + */ + private function getLibraryUrl($filePath) { + $absolutePath = realpath(dirname(__FILE__) . '/../../../' . ltrim($filePath, '/')); + + //Where is the library located inside the WordPress directory structure? + $absolutePath = PucFactory::normalizePath($absolutePath); + + $pluginDir = PucFactory::normalizePath(WP_PLUGIN_DIR); + $muPluginDir = PucFactory::normalizePath(WPMU_PLUGIN_DIR); + $themeDir = PucFactory::normalizePath(get_theme_root()); + + if ( (strpos($absolutePath, $pluginDir) === 0) || (strpos($absolutePath, $muPluginDir) === 0) ) { + //It's part of a plugin. + return plugins_url(basename($absolutePath), $absolutePath); + } else if ( strpos($absolutePath, $themeDir) === 0 ) { + //It's part of a theme. + $relativePath = substr($absolutePath, strlen($themeDir) + 1); + $template = substr($relativePath, 0, strpos($relativePath, '/')); + $baseUrl = get_theme_root_uri($template); + + if ( !empty($baseUrl) && $relativePath ) { + return $baseUrl . '/' . $relativePath; + } + } + + return ''; + } + } + +endif; diff --git a/vendor/yahnis-elsts/plugin-update-checker/Puc/v5p4/DebugBar/Panel.php b/vendor/yahnis-elsts/plugin-update-checker/Puc/v5p4/DebugBar/Panel.php new file mode 100644 index 0000000..750408f --- /dev/null +++ b/vendor/yahnis-elsts/plugin-update-checker/Puc/v5p4/DebugBar/Panel.php @@ -0,0 +1,186 @@ +'; + + public function __construct($updateChecker) { + $this->updateChecker = $updateChecker; + $title = sprintf( + 'PUC (%s)', + esc_attr($this->updateChecker->getUniqueName('uid')), + $this->updateChecker->slug + ); + parent::__construct($title); + } + + public function render() { + printf( + '
    ', + esc_attr($this->updateChecker->getUniqueName('debug-bar-panel')), + esc_attr($this->updateChecker->slug), + esc_attr($this->updateChecker->getUniqueName('uid')), + esc_attr(wp_create_nonce('puc-ajax')) + ); + + $this->displayConfiguration(); + $this->displayStatus(); + $this->displayCurrentUpdate(); + + echo '
    '; + } + + private function displayConfiguration() { + echo '

    Configuration

    '; + echo ''; + $this->displayConfigHeader(); + $this->row('Slug', htmlentities($this->updateChecker->slug)); + $this->row('DB option', htmlentities($this->updateChecker->optionName)); + + $requestInfoButton = $this->getMetadataButton(); + $this->row('Metadata URL', htmlentities($this->updateChecker->metadataUrl) . ' ' . $requestInfoButton . $this->responseBox); + + $scheduler = $this->updateChecker->scheduler; + if ( $scheduler->checkPeriod > 0 ) { + $this->row('Automatic checks', 'Every ' . $scheduler->checkPeriod . ' hours'); + } else { + $this->row('Automatic checks', 'Disabled'); + } + + if ( isset($scheduler->throttleRedundantChecks) ) { + if ( $scheduler->throttleRedundantChecks && ($scheduler->checkPeriod > 0) ) { + $this->row( + 'Throttling', + sprintf( + 'Enabled. If an update is already available, check for updates every %1$d hours instead of every %2$d hours.', + $scheduler->throttledCheckPeriod, + $scheduler->checkPeriod + ) + ); + } else { + $this->row('Throttling', 'Disabled'); + } + } + + $this->updateChecker->onDisplayConfiguration($this); + + echo '
    '; + } + + protected function displayConfigHeader() { + //Do nothing. This should be implemented in subclasses. + } + + protected function getMetadataButton() { + return ''; + } + + private function displayStatus() { + echo '

    Status

    '; + echo ''; + $state = $this->updateChecker->getUpdateState(); + $checkButtonId = $this->updateChecker->getUniqueName('check-now-button'); + if ( function_exists('get_submit_button') ) { + $checkNowButton = get_submit_button( + 'Check Now', + 'secondary', + 'puc-check-now-button', + false, + array('id' => $checkButtonId) + ); + } else { + //get_submit_button() is not available in the frontend. Make a button directly. + //It won't look the same without admin styles, but it should still work. + $checkNowButton = sprintf( + '', + esc_attr($checkButtonId), + esc_attr('Check Now') + ); + } + + if ( $state->getLastCheck() > 0 ) { + $this->row('Last check', $this->formatTimeWithDelta($state->getLastCheck()) . ' ' . $checkNowButton . $this->responseBox); + } else { + $this->row('Last check', 'Never'); + } + + $nextCheck = wp_next_scheduled($this->updateChecker->scheduler->getCronHookName()); + $this->row('Next automatic check', $this->formatTimeWithDelta($nextCheck)); + + if ( $state->getCheckedVersion() !== '' ) { + $this->row('Checked version', htmlentities($state->getCheckedVersion())); + $this->row('Cached update', $state->getUpdate()); + } + $this->row('Update checker class', htmlentities(get_class($this->updateChecker))); + echo '
    '; + } + + private function displayCurrentUpdate() { + $update = $this->updateChecker->getUpdate(); + if ( $update !== null ) { + echo '

    An Update Is Available

    '; + echo ''; + $fields = $this->getUpdateFields(); + foreach($fields as $field) { + if ( property_exists($update, $field) ) { + $this->row( + ucwords(str_replace('_', ' ', $field)), + isset($update->$field) ? htmlentities($update->$field) : null + ); + } + } + echo '
    '; + } else { + echo '

    No updates currently available

    '; + } + } + + protected function getUpdateFields() { + return array('version', 'download_url', 'slug',); + } + + private function formatTimeWithDelta($unixTime) { + if ( empty($unixTime) ) { + return 'Never'; + } + + $delta = time() - $unixTime; + $result = human_time_diff(time(), $unixTime); + if ( $delta < 0 ) { + $result = 'after ' . $result; + } else { + $result = $result . ' ago'; + } + $result .= ' (' . $this->formatTimestamp($unixTime) . ')'; + return $result; + } + + private function formatTimestamp($unixTime) { + return gmdate('Y-m-d H:i:s', $unixTime + (get_option('gmt_offset') * 3600)); + } + + public function row($name, $value) { + if ( is_object($value) || is_array($value) ) { + //This is specifically for debugging, so print_r() is fine. + //phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_print_r + $value = '
    ' . htmlentities(print_r($value, true)) . '
    '; + } else if ($value === null) { + $value = 'null'; + } + printf( + '%1$s %2$s', + esc_html($name), + //phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Escaped above. + $value + ); + } + } + +endif; diff --git a/vendor/yahnis-elsts/plugin-update-checker/Puc/v5p4/DebugBar/PluginExtension.php b/vendor/yahnis-elsts/plugin-update-checker/Puc/v5p4/DebugBar/PluginExtension.php new file mode 100644 index 0000000..b30f3ee --- /dev/null +++ b/vendor/yahnis-elsts/plugin-update-checker/Puc/v5p4/DebugBar/PluginExtension.php @@ -0,0 +1,40 @@ +updateChecker->getUniqueName('uid')) ) { + return; + } + $this->preAjaxRequest(); + $info = $this->updateChecker->requestInfo(); + if ( $info !== null ) { + echo 'Successfully retrieved plugin info from the metadata URL:'; + //phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_print_r -- For debugging output. + echo '
    ', esc_html(print_r($info, true)), '
    '; + } else { + echo 'Failed to retrieve plugin info from the metadata URL.'; + } + exit; + } + } + +endif; diff --git a/vendor/yahnis-elsts/plugin-update-checker/Puc/v5p4/DebugBar/PluginPanel.php b/vendor/yahnis-elsts/plugin-update-checker/Puc/v5p4/DebugBar/PluginPanel.php new file mode 100644 index 0000000..cbf39b9 --- /dev/null +++ b/vendor/yahnis-elsts/plugin-update-checker/Puc/v5p4/DebugBar/PluginPanel.php @@ -0,0 +1,47 @@ +row('Plugin file', htmlentities($this->updateChecker->pluginFile)); + parent::displayConfigHeader(); + } + + protected function getMetadataButton() { + $buttonId = $this->updateChecker->getUniqueName('request-info-button'); + if ( function_exists('get_submit_button') ) { + $requestInfoButton = get_submit_button( + 'Request Info', + 'secondary', + 'puc-request-info-button', + false, + array('id' => $buttonId) + ); + } else { + $requestInfoButton = sprintf( + '', + esc_attr($buttonId), + esc_attr('Request Info') + ); + } + return $requestInfoButton; + } + + protected function getUpdateFields() { + return array_merge( + parent::getUpdateFields(), + array('homepage', 'upgrade_notice', 'tested',) + ); + } + } + +endif; diff --git a/vendor/yahnis-elsts/plugin-update-checker/Puc/v5p4/DebugBar/ThemePanel.php b/vendor/yahnis-elsts/plugin-update-checker/Puc/v5p4/DebugBar/ThemePanel.php new file mode 100644 index 0000000..7b9d99a --- /dev/null +++ b/vendor/yahnis-elsts/plugin-update-checker/Puc/v5p4/DebugBar/ThemePanel.php @@ -0,0 +1,25 @@ +row('Theme directory', htmlentities($this->updateChecker->directoryName)); + parent::displayConfigHeader(); + } + + protected function getUpdateFields() { + return array_merge(parent::getUpdateFields(), array('details_url')); + } + } + +endif; diff --git a/vendor/yahnis-elsts/plugin-update-checker/Puc/v5p4/InstalledPackage.php b/vendor/yahnis-elsts/plugin-update-checker/Puc/v5p4/InstalledPackage.php new file mode 100644 index 0000000..341e7a3 --- /dev/null +++ b/vendor/yahnis-elsts/plugin-update-checker/Puc/v5p4/InstalledPackage.php @@ -0,0 +1,105 @@ +updateChecker = $updateChecker; + } + + /** + * Get the currently installed version of the plugin or theme. + * + * @return string|null Version number. + */ + abstract public function getInstalledVersion(); + + /** + * Get the full path of the plugin or theme directory (without a trailing slash). + * + * @return string + */ + abstract public function getAbsoluteDirectoryPath(); + + /** + * Check whether a regular file exists in the package's directory. + * + * @param string $relativeFileName File name relative to the package directory. + * @return bool + */ + public function fileExists($relativeFileName) { + return is_file( + $this->getAbsoluteDirectoryPath() + . DIRECTORY_SEPARATOR + . ltrim($relativeFileName, '/\\') + ); + } + + /* ------------------------------------------------------------------- + * File header parsing + * ------------------------------------------------------------------- + */ + + /** + * Parse plugin or theme metadata from the header comment. + * + * This is basically a simplified version of the get_file_data() function from /wp-includes/functions.php. + * It's intended as a utility for subclasses that detect updates by parsing files in a VCS. + * + * @param string|null $content File contents. + * @return string[] + */ + public function getFileHeader($content) { + $content = (string)$content; + + //WordPress only looks at the first 8 KiB of the file, so we do the same. + $content = substr($content, 0, 8192); + //Normalize line endings. + $content = str_replace("\r", "\n", $content); + + $headers = $this->getHeaderNames(); + $results = array(); + foreach ($headers as $field => $name) { + $success = preg_match('/^[ \t\/*#@]*' . preg_quote($name, '/') . ':(.*)$/mi', $content, $matches); + + if ( ($success === 1) && $matches[1] ) { + $value = $matches[1]; + if ( function_exists('_cleanup_header_comment') ) { + $value = _cleanup_header_comment($value); + } + $results[$field] = $value; + } else { + $results[$field] = ''; + } + } + + return $results; + } + + /** + * @return array Format: ['HeaderKey' => 'Header Name'] + */ + abstract protected function getHeaderNames(); + + /** + * Get the value of a specific plugin or theme header. + * + * @param string $headerName + * @return string Either the value of the header, or an empty string if the header doesn't exist. + */ + abstract public function getHeaderValue($headerName); + + } +endif; diff --git a/vendor/yahnis-elsts/plugin-update-checker/Puc/v5p4/Metadata.php b/vendor/yahnis-elsts/plugin-update-checker/Puc/v5p4/Metadata.php new file mode 100644 index 0000000..2d93d8e --- /dev/null +++ b/vendor/yahnis-elsts/plugin-update-checker/Puc/v5p4/Metadata.php @@ -0,0 +1,162 @@ + + */ + protected $extraProperties = array(); + + /** + * Create an instance of this class from a JSON document. + * + * @abstract + * @param string $json + * @return self + */ + public static function fromJson($json) { + throw new LogicException('The ' . __METHOD__ . ' method must be implemented by subclasses'); + } + + /** + * @param string $json + * @param self $target + * @return bool + */ + protected static function createFromJson($json, $target) { + /** @var \StdClass $apiResponse */ + $apiResponse = json_decode($json); + if ( empty($apiResponse) || !is_object($apiResponse) ){ + $errorMessage = "Failed to parse update metadata. Try validating your .json file with https://jsonlint.com/"; + do_action('puc_api_error', new WP_Error('puc-invalid-json', $errorMessage)); + //phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_trigger_error -- For plugin developers. + trigger_error(esc_html($errorMessage), E_USER_NOTICE); + return false; + } + + $valid = $target->validateMetadata($apiResponse); + if ( is_wp_error($valid) ){ + do_action('puc_api_error', $valid); + //phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_trigger_error -- For plugin developers. + trigger_error(esc_html($valid->get_error_message()), E_USER_NOTICE); + return false; + } + + foreach(get_object_vars($apiResponse) as $key => $value){ + $target->$key = $value; + } + + return true; + } + + /** + * No validation by default! Subclasses should check that the required fields are present. + * + * @param \StdClass $apiResponse + * @return bool|\WP_Error + */ + protected function validateMetadata($apiResponse) { + return true; + } + + /** + * Create a new instance by copying the necessary fields from another object. + * + * @abstract + * @param \StdClass|self $object The source object. + * @return self The new copy. + */ + public static function fromObject($object) { + throw new LogicException('The ' . __METHOD__ . ' method must be implemented by subclasses'); + } + + /** + * Create an instance of StdClass that can later be converted back to an + * update or info container. Useful for serialization and caching, as it + * avoids the "incomplete object" problem if the cached value is loaded + * before this class. + * + * @return \StdClass + */ + public function toStdClass() { + $object = new stdClass(); + $this->copyFields($this, $object); + return $object; + } + + /** + * Transform the metadata into the format used by WordPress core. + * + * @return object + */ + abstract public function toWpFormat(); + + /** + * Copy known fields from one object to another. + * + * @param \StdClass|self $from + * @param \StdClass|self $to + */ + protected function copyFields($from, $to) { + $fields = $this->getFieldNames(); + + if ( property_exists($from, 'slug') && !empty($from->slug) ) { + //Let plugins add extra fields without having to create subclasses. + $fields = apply_filters($this->getPrefixedFilter('retain_fields') . '-' . $from->slug, $fields); + } + + foreach ($fields as $field) { + if ( property_exists($from, $field) ) { + $to->$field = $from->$field; + } + } + } + + /** + * @return string[] + */ + protected function getFieldNames() { + return array(); + } + + /** + * @param string $tag + * @return string + */ + protected function getPrefixedFilter($tag) { + return 'puc_' . $tag; + } + + public function __set($name, $value) { + $this->extraProperties[$name] = $value; + } + + public function __get($name) { + return isset($this->extraProperties[$name]) ? $this->extraProperties[$name] : null; + } + + public function __isset($name) { + return isset($this->extraProperties[$name]); + } + + public function __unset($name) { + unset($this->extraProperties[$name]); + } + } + +endif; diff --git a/vendor/yahnis-elsts/plugin-update-checker/Puc/v5p4/OAuthSignature.php b/vendor/yahnis-elsts/plugin-update-checker/Puc/v5p4/OAuthSignature.php new file mode 100644 index 0000000..ccb62b4 --- /dev/null +++ b/vendor/yahnis-elsts/plugin-update-checker/Puc/v5p4/OAuthSignature.php @@ -0,0 +1,102 @@ +consumerKey = $consumerKey; + $this->consumerSecret = $consumerSecret; + } + + /** + * Sign a URL using OAuth 1.0. + * + * @param string $url The URL to be signed. It may contain query parameters. + * @param string $method HTTP method such as "GET", "POST" and so on. + * @return string The signed URL. + */ + public function sign($url, $method = 'GET') { + $parameters = array(); + + //Parse query parameters. + $query = wp_parse_url($url, PHP_URL_QUERY); + if ( !empty($query) ) { + parse_str($query, $parsedParams); + if ( is_array($parsedParams) ) { + $parameters = $parsedParams; + } + //Remove the query string from the URL. We'll replace it later. + $url = substr($url, 0, strpos($url, '?')); + } + + $parameters = array_merge( + $parameters, + array( + 'oauth_consumer_key' => $this->consumerKey, + 'oauth_nonce' => $this->nonce(), + 'oauth_signature_method' => 'HMAC-SHA1', + 'oauth_timestamp' => time(), + 'oauth_version' => '1.0', + ) + ); + unset($parameters['oauth_signature']); + + //Parameters must be sorted alphabetically before signing. + ksort($parameters); + + //The most complicated part of the request - generating the signature. + //The string to sign contains the HTTP method, the URL path, and all of + //our query parameters. Everything is URL encoded. Then we concatenate + //them with ampersands into a single string to hash. + $encodedVerb = urlencode($method); + $encodedUrl = urlencode($url); + $encodedParams = urlencode(http_build_query($parameters, '', '&')); + + $stringToSign = $encodedVerb . '&' . $encodedUrl . '&' . $encodedParams; + + //Since we only have one OAuth token (the consumer secret) we only have + //to use it as our HMAC key. However, we still have to append an & to it + //as if we were using it with additional tokens. + $secret = urlencode($this->consumerSecret) . '&'; + + //The signature is a hash of the consumer key and the base string. Note + //that we have to get the raw output from hash_hmac and base64 encode + //the binary data result. + $parameters['oauth_signature'] = base64_encode(hash_hmac('sha1', $stringToSign, $secret, true)); + + return ($url . '?' . http_build_query($parameters)); + } + + /** + * Generate a random nonce. + * + * @return string + */ + private function nonce() { + $mt = microtime(); + + $rand = null; + if ( is_callable('random_bytes') ) { + try { + $rand = random_bytes(16); + } catch (\Exception $ex) { + //Fall back to mt_rand (below). + } + } + if ( $rand === null ) { + //phpcs:ignore WordPress.WP.AlternativeFunctions.rand_mt_rand + $rand = function_exists('wp_rand') ? wp_rand() : mt_rand(); + } + + return md5($mt . '_' . $rand); + } + } + +endif; diff --git a/vendor/yahnis-elsts/plugin-update-checker/Puc/v5p4/Plugin/Package.php b/vendor/yahnis-elsts/plugin-update-checker/Puc/v5p4/Plugin/Package.php new file mode 100644 index 0000000..30deaee --- /dev/null +++ b/vendor/yahnis-elsts/plugin-update-checker/Puc/v5p4/Plugin/Package.php @@ -0,0 +1,188 @@ +pluginAbsolutePath = $pluginAbsolutePath; + $this->pluginFile = plugin_basename($this->pluginAbsolutePath); + + parent::__construct($updateChecker); + + //Clear the version number cache when something - anything - is upgraded or WP clears the update cache. + add_filter('upgrader_post_install', array($this, 'clearCachedVersion')); + add_action('delete_site_transient_update_plugins', array($this, 'clearCachedVersion')); + } + + public function getInstalledVersion() { + if ( isset($this->cachedInstalledVersion) ) { + return $this->cachedInstalledVersion; + } + + $pluginHeader = $this->getPluginHeader(); + if ( isset($pluginHeader['Version']) ) { + $this->cachedInstalledVersion = $pluginHeader['Version']; + return $pluginHeader['Version']; + } else { + //This can happen if the filename points to something that is not a plugin. + $this->updateChecker->triggerError( + sprintf( + "Cannot read the Version header for '%s'. The filename is incorrect or is not a plugin.", + $this->updateChecker->pluginFile + ), + E_USER_WARNING + ); + return null; + } + } + + /** + * Clear the cached plugin version. This method can be set up as a filter (hook) and will + * return the filter argument unmodified. + * + * @param mixed $filterArgument + * @return mixed + */ + public function clearCachedVersion($filterArgument = null) { + $this->cachedInstalledVersion = null; + return $filterArgument; + } + + public function getAbsoluteDirectoryPath() { + return dirname($this->pluginAbsolutePath); + } + + /** + * Get the value of a specific plugin or theme header. + * + * @param string $headerName + * @param string $defaultValue + * @return string Either the value of the header, or $defaultValue if the header doesn't exist or is empty. + */ + public function getHeaderValue($headerName, $defaultValue = '') { + $headers = $this->getPluginHeader(); + if ( isset($headers[$headerName]) && ($headers[$headerName] !== '') ) { + return $headers[$headerName]; + } + return $defaultValue; + } + + protected function getHeaderNames() { + return array( + 'Name' => 'Plugin Name', + 'PluginURI' => 'Plugin URI', + 'Version' => 'Version', + 'Description' => 'Description', + 'Author' => 'Author', + 'AuthorURI' => 'Author URI', + 'TextDomain' => 'Text Domain', + 'DomainPath' => 'Domain Path', + 'Network' => 'Network', + + //The newest WordPress version that this plugin requires or has been tested with. + //We support several different formats for compatibility with other libraries. + 'Tested WP' => 'Tested WP', + 'Requires WP' => 'Requires WP', + 'Tested up to' => 'Tested up to', + 'Requires at least' => 'Requires at least', + ); + } + + /** + * Get the translated plugin title. + * + * @return string + */ + public function getPluginTitle() { + $title = ''; + $header = $this->getPluginHeader(); + if ( $header && !empty($header['Name']) && isset($header['TextDomain']) ) { + $title = translate($header['Name'], $header['TextDomain']); + } + return $title; + } + + /** + * Get plugin's metadata from its file header. + * + * @return array + */ + public function getPluginHeader() { + if ( !is_file($this->pluginAbsolutePath) ) { + //This can happen if the plugin filename is wrong. + $this->updateChecker->triggerError( + sprintf( + "Can't to read the plugin header for '%s'. The file does not exist.", + $this->updateChecker->pluginFile + ), + E_USER_WARNING + ); + return array(); + } + + if ( !function_exists('get_plugin_data') ) { + require_once(ABSPATH . '/wp-admin/includes/plugin.php'); + } + return get_plugin_data($this->pluginAbsolutePath, false, false); + } + + public function removeHooks() { + remove_filter('upgrader_post_install', array($this, 'clearCachedVersion')); + remove_action('delete_site_transient_update_plugins', array($this, 'clearCachedVersion')); + } + + /** + * Check if the plugin file is inside the mu-plugins directory. + * + * @return bool + */ + public function isMuPlugin() { + static $cachedResult = null; + + if ( $cachedResult === null ) { + if ( !defined('WPMU_PLUGIN_DIR') || !is_string(WPMU_PLUGIN_DIR) ) { + $cachedResult = false; + return $cachedResult; + } + + //Convert both paths to the canonical form before comparison. + $muPluginDir = realpath(WPMU_PLUGIN_DIR); + $pluginPath = realpath($this->pluginAbsolutePath); + //If realpath() fails, just normalize the syntax instead. + if (($muPluginDir === false) || ($pluginPath === false)) { + $muPluginDir = PucFactory::normalizePath(WPMU_PLUGIN_DIR); + $pluginPath = PucFactory::normalizePath($this->pluginAbsolutePath); + } + + $cachedResult = (strpos($pluginPath, $muPluginDir) === 0); + } + + return $cachedResult; + } + } + +endif; diff --git a/vendor/yahnis-elsts/plugin-update-checker/Puc/v5p4/Plugin/PluginInfo.php b/vendor/yahnis-elsts/plugin-update-checker/Puc/v5p4/Plugin/PluginInfo.php new file mode 100644 index 0000000..2428488 --- /dev/null +++ b/vendor/yahnis-elsts/plugin-update-checker/Puc/v5p4/Plugin/PluginInfo.php @@ -0,0 +1,136 @@ +sections = (array)$instance->sections; + $instance->icons = (array)$instance->icons; + + return $instance; + } + + /** + * Very, very basic validation. + * + * @param \StdClass $apiResponse + * @return bool|\WP_Error + */ + protected function validateMetadata($apiResponse) { + if ( + !isset($apiResponse->name, $apiResponse->version) + || empty($apiResponse->name) + || empty($apiResponse->version) + ) { + return new \WP_Error( + 'puc-invalid-metadata', + "The plugin metadata file does not contain the required 'name' and/or 'version' keys." + ); + } + return true; + } + + + /** + * Transform plugin info into the format used by the native WordPress.org API + * + * @return object + */ + public function toWpFormat(){ + $info = new \stdClass; + + //The custom update API is built so that many fields have the same name and format + //as those returned by the native WordPress.org API. These can be assigned directly. + $sameFormat = array( + 'name', 'slug', 'version', 'requires', 'tested', 'rating', 'upgrade_notice', + 'num_ratings', 'downloaded', 'active_installs', 'homepage', 'last_updated', + 'requires_php', + ); + foreach($sameFormat as $field){ + if ( isset($this->$field) ) { + $info->$field = $this->$field; + } else { + $info->$field = null; + } + } + + //Other fields need to be renamed and/or transformed. + $info->download_link = $this->download_url; + $info->author = $this->getFormattedAuthor(); + $info->sections = array_merge(array('description' => ''), $this->sections); + + if ( !empty($this->banners) ) { + //WP expects an array with two keys: "high" and "low". Both are optional. + //Docs: https://wordpress.org/plugins/about/faq/#banners + $info->banners = is_object($this->banners) ? get_object_vars($this->banners) : $this->banners; + $info->banners = array_intersect_key($info->banners, array('high' => true, 'low' => true)); + } + + return $info; + } + + protected function getFormattedAuthor() { + if ( !empty($this->author_homepage) ){ + /** @noinspection HtmlUnknownTarget */ + return sprintf('%s', $this->author_homepage, $this->author); + } + return $this->author; + } + } + +endif; diff --git a/vendor/yahnis-elsts/plugin-update-checker/Puc/v5p4/Plugin/Ui.php b/vendor/yahnis-elsts/plugin-update-checker/Puc/v5p4/Plugin/Ui.php new file mode 100644 index 0000000..a9cdbda --- /dev/null +++ b/vendor/yahnis-elsts/plugin-update-checker/Puc/v5p4/Plugin/Ui.php @@ -0,0 +1,294 @@ +updateChecker = $updateChecker; + $this->manualCheckErrorTransient = $this->updateChecker->getUniqueName('manual_check_errors'); + + add_action('admin_init', array($this, 'onAdminInit')); + } + + public function onAdminInit() { + if ( $this->updateChecker->userCanInstallUpdates() ) { + $this->handleManualCheck(); + + add_filter('plugin_row_meta', array($this, 'addViewDetailsLink'), 10, 3); + add_filter('plugin_row_meta', array($this, 'addCheckForUpdatesLink'), 10, 2); + add_action('all_admin_notices', array($this, 'displayManualCheckResult')); + } + } + + /** + * Add a "View Details" link to the plugin row in the "Plugins" page. By default, + * the new link will appear before the "Visit plugin site" link (if present). + * + * You can change the link text by using the "puc_view_details_link-$slug" filter. + * Returning an empty string from the filter will disable the link. + * + * You can change the position of the link using the + * "puc_view_details_link_position-$slug" filter. + * Returning 'before' or 'after' will place the link immediately before/after + * the "Visit plugin site" link. + * Returning 'append' places the link after any existing links at the time of the hook. + * Returning 'replace' replaces the "Visit plugin site" link. + * Returning anything else disables the link when there is a "Visit plugin site" link. + * + * If there is no "Visit plugin site" link 'append' is always used! + * + * @param array $pluginMeta Array of meta links. + * @param string $pluginFile + * @param array $pluginData Array of plugin header data. + * @return array + */ + public function addViewDetailsLink($pluginMeta, $pluginFile, $pluginData = array()) { + if ( $this->isMyPluginFile($pluginFile) && !isset($pluginData['slug']) ) { + $linkText = apply_filters($this->updateChecker->getUniqueName('view_details_link'), __('View details')); + if ( !empty($linkText) ) { + $viewDetailsLinkPosition = 'append'; + + //Find the "Visit plugin site" link (if present). + $visitPluginSiteLinkIndex = count($pluginMeta) - 1; + if ( $pluginData['PluginURI'] ) { + $escapedPluginUri = esc_url($pluginData['PluginURI']); + foreach ($pluginMeta as $linkIndex => $existingLink) { + if ( strpos($existingLink, $escapedPluginUri) !== false ) { + $visitPluginSiteLinkIndex = $linkIndex; + $viewDetailsLinkPosition = apply_filters( + $this->updateChecker->getUniqueName('view_details_link_position'), + 'before' + ); + break; + } + } + } + + $viewDetailsLink = sprintf('%s', + esc_url(network_admin_url('plugin-install.php?tab=plugin-information&plugin=' . urlencode($this->updateChecker->slug) . + '&TB_iframe=true&width=600&height=550')), + esc_attr(sprintf(__('More information about %s'), $pluginData['Name'])), + esc_attr($pluginData['Name']), + $linkText + ); + switch ($viewDetailsLinkPosition) { + case 'before': + array_splice($pluginMeta, $visitPluginSiteLinkIndex, 0, $viewDetailsLink); + break; + case 'after': + array_splice($pluginMeta, $visitPluginSiteLinkIndex + 1, 0, $viewDetailsLink); + break; + case 'replace': + $pluginMeta[$visitPluginSiteLinkIndex] = $viewDetailsLink; + break; + case 'append': + default: + $pluginMeta[] = $viewDetailsLink; + break; + } + } + } + return $pluginMeta; + } + + /** + * Add a "Check for updates" link to the plugin row in the "Plugins" page. By default, + * the new link will appear after the "Visit plugin site" link if present, otherwise + * after the "View plugin details" link. + * + * You can change the link text by using the "puc_manual_check_link-$slug" filter. + * Returning an empty string from the filter will disable the link. + * + * @param array $pluginMeta Array of meta links. + * @param string $pluginFile + * @return array + */ + public function addCheckForUpdatesLink($pluginMeta, $pluginFile) { + if ( $this->isMyPluginFile($pluginFile) ) { + $linkUrl = wp_nonce_url( + add_query_arg( + array( + 'puc_check_for_updates' => 1, + 'puc_slug' => $this->updateChecker->slug, + ), + self_admin_url('plugins.php') + ), + 'puc_check_for_updates' + ); + + $linkText = apply_filters( + $this->updateChecker->getUniqueName('manual_check_link'), + __('Check for updates', 'plugin-update-checker') + ); + if ( !empty($linkText) ) { + /** @noinspection HtmlUnknownTarget */ + $pluginMeta[] = sprintf('%s', esc_attr($linkUrl), $linkText); + } + } + return $pluginMeta; + } + + protected function isMyPluginFile($pluginFile) { + return ($pluginFile == $this->updateChecker->pluginFile) + || (!empty($this->updateChecker->muPluginFile) && ($pluginFile == $this->updateChecker->muPluginFile)); + } + + /** + * Check for updates when the user clicks the "Check for updates" link. + * + * @see self::addCheckForUpdatesLink() + * + * @return void + */ + public function handleManualCheck() { + $shouldCheck = + isset($_GET['puc_check_for_updates'], $_GET['puc_slug']) + && $_GET['puc_slug'] == $this->updateChecker->slug + && check_admin_referer('puc_check_for_updates'); + + if ( $shouldCheck ) { + $update = $this->updateChecker->checkForUpdates(); + $status = ($update === null) ? 'no_update' : 'update_available'; + $lastRequestApiErrors = $this->updateChecker->getLastRequestApiErrors(); + + if ( ($update === null) && !empty($lastRequestApiErrors) ) { + //Some errors are not critical. For example, if PUC tries to retrieve the readme.txt + //file from GitHub and gets a 404, that's an API error, but it doesn't prevent updates + //from working. Maybe the plugin simply doesn't have a readme. + //Let's only show important errors. + $foundCriticalErrors = false; + $questionableErrorCodes = array( + 'puc-github-http-error', + 'puc-gitlab-http-error', + 'puc-bitbucket-http-error', + ); + + foreach ($lastRequestApiErrors as $item) { + $wpError = $item['error']; + /** @var \WP_Error $wpError */ + if ( !in_array($wpError->get_error_code(), $questionableErrorCodes) ) { + $foundCriticalErrors = true; + break; + } + } + + if ( $foundCriticalErrors ) { + $status = 'error'; + set_site_transient($this->manualCheckErrorTransient, $lastRequestApiErrors, 60); + } + } + + wp_redirect(add_query_arg( + array( + 'puc_update_check_result' => $status, + 'puc_slug' => $this->updateChecker->slug, + ), + self_admin_url('plugins.php') + )); + exit; + } + } + + /** + * Display the results of a manual update check. + * + * @see self::handleManualCheck() + * + * You can change the result message by using the "puc_manual_check_message-$slug" filter. + */ + public function displayManualCheckResult() { + //phpcs:disable WordPress.Security.NonceVerification.Recommended -- Just displaying a message. + if ( isset($_GET['puc_update_check_result'], $_GET['puc_slug']) && ($_GET['puc_slug'] == $this->updateChecker->slug) ) { + $status = sanitize_key($_GET['puc_update_check_result']); + $title = $this->updateChecker->getInstalledPackage()->getPluginTitle(); + $noticeClass = 'updated notice-success'; + $details = ''; + + if ( $status == 'no_update' ) { + $message = sprintf(_x('The %s plugin is up to date.', 'the plugin title', 'plugin-update-checker'), $title); + } else if ( $status == 'update_available' ) { + $message = sprintf(_x('A new version of the %s plugin is available.', 'the plugin title', 'plugin-update-checker'), $title); + } else if ( $status === 'error' ) { + $message = sprintf(_x('Could not determine if updates are available for %s.', 'the plugin title', 'plugin-update-checker'), $title); + $noticeClass = 'error notice-error'; + + $details = $this->formatManualCheckErrors(get_site_transient($this->manualCheckErrorTransient)); + delete_site_transient($this->manualCheckErrorTransient); + } else { + $message = sprintf(__('Unknown update checker status "%s"', 'plugin-update-checker'), $status); + $noticeClass = 'error notice-error'; + } + + $message = esc_html($message); + + //Plugins can replace the message with their own, including adding HTML. + $message = apply_filters( + $this->updateChecker->getUniqueName('manual_check_message'), + $message, + $status + ); + + printf( + '

    %s

    %s
    ', + esc_attr($noticeClass), + //phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Was escaped above, and plugins can add HTML. + $message, + //phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Contains HTML. Content should already be escaped. + $details + ); + } + //phpcs:enable + } + + /** + * Format the list of errors that were thrown during an update check. + * + * @param array $errors + * @return string + */ + protected function formatManualCheckErrors($errors) { + if ( empty($errors) ) { + return ''; + } + $output = ''; + + $showAsList = count($errors) > 1; + if ( $showAsList ) { + $output .= '
      '; + $formatString = '
    1. %1$s %2$s
    2. '; + } else { + $formatString = '

      %1$s %2$s

      '; + } + foreach ($errors as $item) { + $wpError = $item['error']; + /** @var \WP_Error $wpError */ + $output .= sprintf( + $formatString, + esc_html($wpError->get_error_message()), + esc_html($wpError->get_error_code()) + ); + } + if ( $showAsList ) { + $output .= '
    '; + } + + return $output; + } + + public function removeHooks() { + remove_action('admin_init', array($this, 'onAdminInit')); + remove_filter('plugin_row_meta', array($this, 'addViewDetailsLink'), 10); + remove_filter('plugin_row_meta', array($this, 'addCheckForUpdatesLink'), 10); + remove_action('all_admin_notices', array($this, 'displayManualCheckResult')); + } + } +endif; diff --git a/vendor/yahnis-elsts/plugin-update-checker/Puc/v5p4/Plugin/Update.php b/vendor/yahnis-elsts/plugin-update-checker/Puc/v5p4/Plugin/Update.php new file mode 100644 index 0000000..0fb3137 --- /dev/null +++ b/vendor/yahnis-elsts/plugin-update-checker/Puc/v5p4/Plugin/Update.php @@ -0,0 +1,116 @@ +copyFields($object, $update); + return $update; + } + + /** + * @return string[] + */ + protected function getFieldNames() { + return array_merge(parent::getFieldNames(), self::$extraFields); + } + + /** + * Transform the update into the format used by WordPress native plugin API. + * + * @return object + */ + public function toWpFormat() { + $update = parent::toWpFormat(); + + $update->id = $this->id; + $update->url = $this->homepage; + $update->tested = $this->tested; + $update->requires_php = $this->requires_php; + $update->plugin = $this->filename; + + if ( !empty($this->upgrade_notice) ) { + $update->upgrade_notice = $this->upgrade_notice; + } + + if ( !empty($this->icons) && is_array($this->icons) ) { + //This should be an array with up to 4 keys: 'svg', '1x', '2x' and 'default'. + //Docs: https://developer.wordpress.org/plugins/wordpress-org/plugin-assets/#plugin-icons + $icons = array_intersect_key( + $this->icons, + array('svg' => true, '1x' => true, '2x' => true, 'default' => true) + ); + if ( !empty($icons) ) { + $update->icons = $icons; + + //It appears that the 'default' icon isn't used anywhere in WordPress 4.9, + //but lets set it just in case a future release needs it. + if ( !isset($update->icons['default']) ) { + $update->icons['default'] = current($update->icons); + } + } + } + + return $update; + } + } + +endif; diff --git a/vendor/yahnis-elsts/plugin-update-checker/Puc/v5p4/Plugin/UpdateChecker.php b/vendor/yahnis-elsts/plugin-update-checker/Puc/v5p4/Plugin/UpdateChecker.php new file mode 100644 index 0000000..6d1aae8 --- /dev/null +++ b/vendor/yahnis-elsts/plugin-update-checker/Puc/v5p4/Plugin/UpdateChecker.php @@ -0,0 +1,425 @@ +pluginAbsolutePath = $pluginFile; + $this->pluginFile = plugin_basename($this->pluginAbsolutePath); + $this->muPluginFile = $muPluginFile; + + //If no slug is specified, use the name of the main plugin file as the slug. + //For example, 'my-cool-plugin/cool-plugin.php' becomes 'cool-plugin'. + if ( empty($slug) ){ + $slug = basename($this->pluginFile, '.php'); + } + + //Plugin slugs must be unique. + $slugCheckFilter = 'puc_is_slug_in_use-' . $slug; + $slugUsedBy = apply_filters($slugCheckFilter, false); + if ( $slugUsedBy ) { + $this->triggerError(sprintf( + 'Plugin slug "%s" is already in use by %s. Slugs must be unique.', + $slug, + $slugUsedBy + ), E_USER_ERROR); + } + add_filter($slugCheckFilter, array($this, 'getAbsolutePath')); + + parent::__construct($metadataUrl, dirname($this->pluginFile), $slug, $checkPeriod, $optionName); + + //Backwards compatibility: If the plugin is a mu-plugin but no $muPluginFile is specified, assume + //it's the same as $pluginFile given that it's not in a subdirectory (WP only looks in the base dir). + if ( (strpbrk($this->pluginFile, '/\\') === false) && $this->isUnknownMuPlugin() ) { + $this->muPluginFile = $this->pluginFile; + } + + //To prevent a crash during plugin uninstallation, remove updater hooks when the user removes the plugin. + //Details: https://github.com/YahnisElsts/plugin-update-checker/issues/138#issuecomment-335590964 + add_action('uninstall_' . $this->pluginFile, array($this, 'removeHooks')); + + $this->extraUi = new Ui($this); + } + + /** + * Create an instance of the scheduler. + * + * @param int $checkPeriod + * @return Scheduler + */ + protected function createScheduler($checkPeriod) { + $scheduler = new Scheduler($this, $checkPeriod, array('load-plugins.php')); + register_deactivation_hook($this->pluginFile, array($scheduler, 'removeUpdaterCron')); + return $scheduler; + } + + /** + * Install the hooks required to run periodic update checks and inject update info + * into WP data structures. + * + * @return void + */ + protected function installHooks(){ + //Override requests for plugin information + add_filter('plugins_api', array($this, 'injectInfo'), 20, 3); + + parent::installHooks(); + } + + /** + * Remove update checker hooks. + * + * The intent is to prevent a fatal error that can happen if the plugin has an uninstall + * hook. During uninstallation, WP includes the main plugin file (which creates a PUC instance), + * the uninstall hook runs, WP deletes the plugin files and then updates some transients. + * If PUC hooks are still around at this time, they could throw an error while trying to + * autoload classes from files that no longer exist. + * + * The "site_transient_{$transient}" filter is the main problem here, but let's also remove + * most other PUC hooks to be safe. + * + * @internal + */ + public function removeHooks() { + parent::removeHooks(); + $this->extraUi->removeHooks(); + $this->package->removeHooks(); + + remove_filter('plugins_api', array($this, 'injectInfo'), 20); + } + + /** + * Retrieve plugin info from the configured API endpoint. + * + * @uses wp_remote_get() + * + * @param array $queryArgs Additional query arguments to append to the request. Optional. + * @return PluginInfo + */ + public function requestInfo($queryArgs = array()) { + list($pluginInfo, $result) = $this->requestMetadata( + PluginInfo::class, + 'request_info', + $queryArgs + ); + + if ( $pluginInfo !== null ) { + /** @var PluginInfo $pluginInfo */ + $pluginInfo->filename = $this->pluginFile; + $pluginInfo->slug = $this->slug; + } + + $pluginInfo = apply_filters($this->getUniqueName('request_info_result'), $pluginInfo, $result); + return $pluginInfo; + } + + /** + * Retrieve the latest update (if any) from the configured API endpoint. + * + * @uses UpdateChecker::requestInfo() + * + * @return Update|null An instance of Plugin Update, or NULL when no updates are available. + */ + public function requestUpdate() { + //For the sake of simplicity, this function just calls requestInfo() + //and transforms the result accordingly. + $pluginInfo = $this->requestInfo(array('checking_for_updates' => '1')); + if ( $pluginInfo === null ){ + return null; + } + $update = Update::fromPluginInfo($pluginInfo); + + $update = $this->filterUpdateResult($update); + + return $update; + } + + /** + * Intercept plugins_api() calls that request information about our plugin and + * use the configured API endpoint to satisfy them. + * + * @see plugins_api() + * + * @param mixed $result + * @param string $action + * @param array|object $args + * @return mixed + */ + public function injectInfo($result, $action = null, $args = null){ + $relevant = ($action == 'plugin_information') && isset($args->slug) && ( + ($args->slug == $this->slug) || ($args->slug == dirname($this->pluginFile)) + ); + if ( !$relevant ) { + return $result; + } + + $pluginInfo = $this->requestInfo(); + $this->fixSupportedWordpressVersion($pluginInfo); + + $pluginInfo = apply_filters($this->getUniqueName('pre_inject_info'), $pluginInfo); + if ( $pluginInfo ) { + return $pluginInfo->toWpFormat(); + } + + return $result; + } + + protected function shouldShowUpdates() { + //No update notifications for mu-plugins unless explicitly enabled. The MU plugin file + //is usually different from the main plugin file so the update wouldn't show up properly anyway. + return !$this->isUnknownMuPlugin(); + } + + /** + * @param \stdClass|null $updates + * @param \stdClass $updateToAdd + * @return \stdClass + */ + protected function addUpdateToList($updates, $updateToAdd) { + if ( $this->package->isMuPlugin() ) { + //WP does not support automatic update installation for mu-plugins, but we can + //still display a notice. + $updateToAdd->package = null; + } + return parent::addUpdateToList($updates, $updateToAdd); + } + + /** + * @param \stdClass|null $updates + * @return \stdClass|null + */ + protected function removeUpdateFromList($updates) { + $updates = parent::removeUpdateFromList($updates); + if ( !empty($this->muPluginFile) && isset($updates, $updates->response) ) { + unset($updates->response[$this->muPluginFile]); + } + return $updates; + } + + /** + * For plugins, the update array is indexed by the plugin filename relative to the "plugins" + * directory. Example: "plugin-name/plugin.php". + * + * @return string + */ + protected function getUpdateListKey() { + if ( $this->package->isMuPlugin() ) { + return $this->muPluginFile; + } + return $this->pluginFile; + } + + protected function getNoUpdateItemFields() { + return array_merge( + parent::getNoUpdateItemFields(), + array( + 'id' => $this->pluginFile, + 'slug' => $this->slug, + 'plugin' => $this->pluginFile, + 'icons' => array(), + 'banners' => array(), + 'banners_rtl' => array(), + 'tested' => '', + 'compatibility' => new \stdClass(), + ) + ); + } + + /** + * Alias for isBeingUpgraded(). + * + * @deprecated + * @param \WP_Upgrader|null $upgrader The upgrader that's performing the current update. + * @return bool + */ + public function isPluginBeingUpgraded($upgrader = null) { + return $this->isBeingUpgraded($upgrader); + } + + /** + * Is there an update being installed for this plugin, right now? + * + * @param \WP_Upgrader|null $upgrader + * @return bool + */ + public function isBeingUpgraded($upgrader = null) { + return $this->upgraderStatus->isPluginBeingUpgraded($this->pluginFile, $upgrader); + } + + /** + * Get the details of the currently available update, if any. + * + * If no updates are available, or if the last known update version is below or equal + * to the currently installed version, this method will return NULL. + * + * Uses cached update data. To retrieve update information straight from + * the metadata URL, call requestUpdate() instead. + * + * @return Update|null + */ + public function getUpdate() { + $update = parent::getUpdate(); + if ( isset($update) ) { + /** @var Update $update */ + $update->filename = $this->pluginFile; + } + return $update; + } + + /** + * Get the translated plugin title. + * + * @deprecated + * @return string + */ + public function getPluginTitle() { + return $this->package->getPluginTitle(); + } + + /** + * Check if the current user has the required permissions to install updates. + * + * @return bool + */ + public function userCanInstallUpdates() { + return current_user_can('update_plugins'); + } + + /** + * Check if the plugin file is inside the mu-plugins directory. + * + * @deprecated + * @return bool + */ + protected function isMuPlugin() { + return $this->package->isMuPlugin(); + } + + /** + * MU plugins are partially supported, but only when we know which file in mu-plugins + * corresponds to this plugin. + * + * @return bool + */ + protected function isUnknownMuPlugin() { + return empty($this->muPluginFile) && $this->package->isMuPlugin(); + } + + /** + * Get absolute path to the main plugin file. + * + * @return string + */ + public function getAbsolutePath() { + return $this->pluginAbsolutePath; + } + + /** + * Register a callback for filtering query arguments. + * + * The callback function should take one argument - an associative array of query arguments. + * It should return a modified array of query arguments. + * + * @uses add_filter() This method is a convenience wrapper for add_filter(). + * + * @param callable $callback + * @return void + */ + public function addQueryArgFilter($callback){ + $this->addFilter('request_info_query_args', $callback); + } + + /** + * Register a callback for filtering arguments passed to wp_remote_get(). + * + * The callback function should take one argument - an associative array of arguments - + * and return a modified array or arguments. See the WP documentation on wp_remote_get() + * for details on what arguments are available and how they work. + * + * @uses add_filter() This method is a convenience wrapper for add_filter(). + * + * @param callable $callback + * @return void + */ + public function addHttpRequestArgFilter($callback) { + $this->addFilter('request_info_options', $callback); + } + + /** + * Register a callback for filtering the plugin info retrieved from the external API. + * + * The callback function should take two arguments. If the plugin info was retrieved + * successfully, the first argument passed will be an instance of PluginInfo. Otherwise, + * it will be NULL. The second argument will be the corresponding return value of + * wp_remote_get (see WP docs for details). + * + * The callback function should return a new or modified instance of PluginInfo or NULL. + * + * @uses add_filter() This method is a convenience wrapper for add_filter(). + * + * @param callable $callback + * @return void + */ + public function addResultFilter($callback) { + $this->addFilter('request_info_result', $callback, 10, 2); + } + + protected function createDebugBarExtension() { + return new DebugBar\PluginExtension($this); + } + + /** + * Create a package instance that represents this plugin or theme. + * + * @return InstalledPackage + */ + protected function createInstalledPackage() { + return new Package($this->pluginAbsolutePath, $this); + } + + /** + * @return Package + */ + public function getInstalledPackage() { + return $this->package; + } + } + +endif; diff --git a/vendor/yahnis-elsts/plugin-update-checker/Puc/v5p4/PucFactory.php b/vendor/yahnis-elsts/plugin-update-checker/Puc/v5p4/PucFactory.php new file mode 100644 index 0000000..b7cbbb1 --- /dev/null +++ b/vendor/yahnis-elsts/plugin-update-checker/Puc/v5p4/PucFactory.php @@ -0,0 +1,362 @@ + '', + 'slug' => '', + 'checkPeriod' => 12, + 'optionName' => '', + 'muPluginFile' => '', + ); + $args = array_merge($defaults, array_intersect_key($args, $defaults)); + extract($args, EXTR_SKIP); + + //Check for the service URI + if ( empty($metadataUrl) ) { + $metadataUrl = self::getServiceURI($fullPath); + } + + return self::buildUpdateChecker($metadataUrl, $fullPath, $slug, $checkPeriod, $optionName, $muPluginFile); + } + + /** + * Create a new instance of the update checker. + * + * This method automatically detects if you're using it for a plugin or a theme and chooses + * the appropriate implementation for your update source (JSON file, GitHub, BitBucket, etc). + * + * @see UpdateChecker::__construct + * + * @param string $metadataUrl The URL of the metadata file, a GitHub repository, or another supported update source. + * @param string $fullPath Full path to the main plugin file or to the theme directory. + * @param string $slug Custom slug. Defaults to the name of the main plugin file or the theme directory. + * @param int $checkPeriod How often to check for updates (in hours). + * @param string $optionName Where to store bookkeeping info about update checks. + * @param string $muPluginFile The plugin filename relative to the mu-plugins directory. + * @return Plugin\UpdateChecker|Theme\UpdateChecker|Vcs\BaseChecker + */ + public static function buildUpdateChecker($metadataUrl, $fullPath, $slug = '', $checkPeriod = 12, $optionName = '', $muPluginFile = '') { + $fullPath = self::normalizePath($fullPath); + $id = null; + + //Plugin or theme? + $themeDirectory = self::getThemeDirectoryName($fullPath); + if ( self::isPluginFile($fullPath) ) { + $type = 'Plugin'; + $id = $fullPath; + } else if ( $themeDirectory !== null ) { + $type = 'Theme'; + $id = $themeDirectory; + } else { + throw new \RuntimeException(sprintf( + 'The update checker cannot determine if "%s" is a plugin or a theme. ' . + 'This is a bug. Please contact the PUC developer.', + htmlentities($fullPath) + )); + } + + //Which hosting service does the URL point to? + $service = self::getVcsService($metadataUrl); + + $apiClass = null; + if ( empty($service) ) { + //The default is to get update information from a remote JSON file. + $checkerClass = $type . '\\UpdateChecker'; + } else { + //You can also use a VCS repository like GitHub. + $checkerClass = 'Vcs\\' . $type . 'UpdateChecker'; + $apiClass = $service . 'Api'; + } + + $checkerClass = self::getCompatibleClassVersion($checkerClass); + if ( $checkerClass === null ) { + //phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_trigger_error + trigger_error( + esc_html(sprintf( + 'PUC %s does not support updates for %ss %s', + self::$latestCompatibleVersion, + strtolower($type), + $service ? ('hosted on ' . $service) : 'using JSON metadata' + )), + E_USER_ERROR + ); + } + + if ( !isset($apiClass) ) { + //Plain old update checker. + return new $checkerClass($metadataUrl, $id, $slug, $checkPeriod, $optionName, $muPluginFile); + } else { + //VCS checker + an API client. + $apiClass = self::getCompatibleClassVersion($apiClass); + if ( $apiClass === null ) { + //phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_trigger_error + trigger_error(esc_html(sprintf( + 'PUC %s does not support %s', + self::$latestCompatibleVersion, + $service + )), E_USER_ERROR); + } + + return new $checkerClass( + new $apiClass($metadataUrl), + $id, + $slug, + $checkPeriod, + $optionName, + $muPluginFile + ); + } + } + + /** + * + * Normalize a filesystem path. Introduced in WP 3.9. + * Copying here allows use of the class on earlier versions. + * This version adapted from WP 4.8.2 (unchanged since 4.5.4) + * + * @param string $path Path to normalize. + * @return string Normalized path. + */ + public static function normalizePath($path) { + if ( function_exists('wp_normalize_path') ) { + return wp_normalize_path($path); + } + $path = str_replace('\\', '/', $path); + $path = preg_replace('|(?<=.)/+|', '/', $path); + if ( substr($path, 1, 1) === ':' ) { + $path = ucfirst($path); + } + return $path; + } + + /** + * Check if the path points to a plugin file. + * + * @param string $absolutePath Normalized path. + * @return bool + */ + protected static function isPluginFile($absolutePath) { + //Is the file inside the "plugins" or "mu-plugins" directory? + $pluginDir = self::normalizePath(WP_PLUGIN_DIR); + $muPluginDir = self::normalizePath(WPMU_PLUGIN_DIR); + if ( (strpos($absolutePath, $pluginDir) === 0) || (strpos($absolutePath, $muPluginDir) === 0) ) { + return true; + } + + //Is it a file at all? Caution: is_file() can fail if the parent dir. doesn't have the +x permission set. + if ( !is_file($absolutePath) ) { + return false; + } + + //Does it have a valid plugin header? + //This is a last-ditch check for plugins symlinked from outside the WP root. + if ( function_exists('get_file_data') ) { + $headers = get_file_data($absolutePath, array('Name' => 'Plugin Name'), 'plugin'); + return !empty($headers['Name']); + } + + return false; + } + + /** + * Get the name of the theme's directory from a full path to a file inside that directory. + * E.g. "/abc/public_html/wp-content/themes/foo/whatever.php" => "foo". + * + * Note that subdirectories are currently not supported. For example, + * "/xyz/wp-content/themes/my-theme/includes/whatever.php" => NULL. + * + * @param string $absolutePath Normalized path. + * @return string|null Directory name, or NULL if the path doesn't point to a theme. + */ + protected static function getThemeDirectoryName($absolutePath) { + if ( is_file($absolutePath) ) { + $absolutePath = dirname($absolutePath); + } + + if ( file_exists($absolutePath . '/style.css') ) { + return basename($absolutePath); + } + return null; + } + + /** + * Get the service URI from the file header. + * + * @param string $fullPath + * @return string + */ + private static function getServiceURI($fullPath) { + //Look for the URI + if ( is_readable($fullPath) ) { + $seek = array( + 'github' => 'GitHub URI', + 'gitlab' => 'GitLab URI', + 'bucket' => 'BitBucket URI', + ); + $seek = apply_filters('puc_get_source_uri', $seek); + $data = get_file_data($fullPath, $seek); + foreach ($data as $key => $uri) { + if ( $uri ) { + return $uri; + } + } + } + + //URI was not found so throw an error. + throw new \RuntimeException( + sprintf('Unable to locate URI in header of "%s"', htmlentities($fullPath)) + ); + } + + /** + * Get the name of the hosting service that the URL points to. + * + * @param string $metadataUrl + * @return string|null + */ + private static function getVcsService($metadataUrl) { + $service = null; + + //Which hosting service does the URL point to? + $host = (string)(wp_parse_url($metadataUrl, PHP_URL_HOST)); + $path = (string)(wp_parse_url($metadataUrl, PHP_URL_PATH)); + + //Check if the path looks like "/user-name/repository". + //For GitLab.com it can also be "/user/group1/group2/.../repository". + $repoRegex = '@^/?([^/]+?)/([^/#?&]+?)/?$@'; + if ( $host === 'gitlab.com' ) { + $repoRegex = '@^/?(?:[^/#?&]++/){1,20}(?:[^/#?&]++)/?$@'; + } + if ( preg_match($repoRegex, $path) ) { + $knownServices = array( + 'github.com' => 'GitHub', + 'bitbucket.org' => 'BitBucket', + 'gitlab.com' => 'GitLab', + ); + if ( isset($knownServices[$host]) ) { + $service = $knownServices[$host]; + } + } + + return apply_filters('puc_get_vcs_service', $service, $host, $path, $metadataUrl); + } + + /** + * Get the latest version of the specified class that has the same major version number + * as this factory class. + * + * @param string $class Partial class name. + * @return string|null Full class name. + */ + protected static function getCompatibleClassVersion($class) { + if ( isset(self::$classVersions[$class][self::$latestCompatibleVersion]) ) { + return self::$classVersions[$class][self::$latestCompatibleVersion]; + } + return null; + } + + /** + * Get the specific class name for the latest available version of a class. + * + * @param string $class + * @return null|string + */ + public static function getLatestClassVersion($class) { + if ( !self::$sorted ) { + self::sortVersions(); + } + + if ( isset(self::$classVersions[$class]) ) { + return reset(self::$classVersions[$class]); + } else { + return null; + } + } + + /** + * Sort available class versions in descending order (i.e. newest first). + */ + protected static function sortVersions() { + foreach ( self::$classVersions as $class => $versions ) { + uksort($versions, array(__CLASS__, 'compareVersions')); + self::$classVersions[$class] = $versions; + } + self::$sorted = true; + } + + protected static function compareVersions($a, $b) { + return -version_compare($a, $b); + } + + /** + * Register a version of a class. + * + * @access private This method is only for internal use by the library. + * + * @param string $generalClass Class name without version numbers, e.g. 'PluginUpdateChecker'. + * @param string $versionedClass Actual class name, e.g. 'PluginUpdateChecker_1_2'. + * @param string $version Version number, e.g. '1.2'. + */ + public static function addVersion($generalClass, $versionedClass, $version) { + if ( empty(self::$myMajorVersion) ) { + $lastNamespaceSegment = substr(__NAMESPACE__, strrpos(__NAMESPACE__, '\\') + 1); + self::$myMajorVersion = substr(ltrim($lastNamespaceSegment, 'v'), 0, 1); + } + + //Store the greatest version number that matches our major version. + $components = explode('.', $version); + if ( $components[0] === self::$myMajorVersion ) { + + if ( + empty(self::$latestCompatibleVersion) + || version_compare($version, self::$latestCompatibleVersion, '>') + ) { + self::$latestCompatibleVersion = $version; + } + + } + + if ( !isset(self::$classVersions[$generalClass]) ) { + self::$classVersions[$generalClass] = array(); + } + self::$classVersions[$generalClass][$version] = $versionedClass; + self::$sorted = false; + } + } + +endif; diff --git a/vendor/yahnis-elsts/plugin-update-checker/Puc/v5p4/Scheduler.php b/vendor/yahnis-elsts/plugin-update-checker/Puc/v5p4/Scheduler.php new file mode 100644 index 0000000..e4bc3d0 --- /dev/null +++ b/vendor/yahnis-elsts/plugin-update-checker/Puc/v5p4/Scheduler.php @@ -0,0 +1,300 @@ +updateChecker = $updateChecker; + $this->checkPeriod = $checkPeriod; + + //Set up the periodic update checks + $this->cronHook = $this->updateChecker->getUniqueName('cron_check_updates'); + if ( $this->checkPeriod > 0 ){ + + //Trigger the check via Cron. + //Try to use one of the default schedules if possible as it's less likely to conflict + //with other plugins and their custom schedules. + $defaultSchedules = array( + 1 => 'hourly', + 12 => 'twicedaily', + 24 => 'daily', + ); + if ( array_key_exists($this->checkPeriod, $defaultSchedules) ) { + $scheduleName = $defaultSchedules[$this->checkPeriod]; + } else { + //Use a custom cron schedule. + $scheduleName = 'every' . $this->checkPeriod . 'hours'; + //phpcs:ignore WordPress.WP.CronInterval.ChangeDetected -- WPCS fails to parse the callback. + add_filter('cron_schedules', array($this, '_addCustomSchedule')); + } + + if ( !wp_next_scheduled($this->cronHook) && !defined('WP_INSTALLING') ) { + //Randomly offset the schedule to help prevent update server traffic spikes. Without this + //most checks may happen during times of day when people are most likely to install new plugins. + $upperLimit = max($this->checkPeriod * 3600 - 15 * 60, 1); + if ( function_exists('wp_rand') ) { + $randomOffset = wp_rand(0, $upperLimit); + } else { + //This constructor may be called before wp_rand() is available. + //phpcs:ignore WordPress.WP.AlternativeFunctions.rand_rand + $randomOffset = rand(0, $upperLimit); + } + $firstCheckTime = time() - $randomOffset; + $firstCheckTime = apply_filters( + $this->updateChecker->getUniqueName('first_check_time'), + $firstCheckTime + ); + wp_schedule_event($firstCheckTime, $scheduleName, $this->cronHook); + } + add_action($this->cronHook, array($this, 'maybeCheckForUpdates')); + + //In case Cron is disabled or unreliable, we also manually trigger + //the periodic checks while the user is browsing the Dashboard. + add_action( 'admin_init', array($this, 'maybeCheckForUpdates') ); + + //Like WordPress itself, we check more often on certain pages. + /** @see wp_update_plugins */ + add_action('load-update-core.php', array($this, 'maybeCheckForUpdates')); + //phpcs:ignore Squiz.PHP.CommentedOutCode.Found -- Not actually code, just file names. + //"load-update.php" and "load-plugins.php" or "load-themes.php". + $this->hourlyCheckHooks = array_merge($this->hourlyCheckHooks, $hourlyHooks); + foreach($this->hourlyCheckHooks as $hook) { + add_action($hook, array($this, 'maybeCheckForUpdates')); + } + //This hook fires after a bulk update is complete. + add_action('upgrader_process_complete', array($this, 'removeHooksIfLibraryGone'), 1, 0); + add_action('upgrader_process_complete', array($this, 'upgraderProcessComplete'), 11, 2); + + } else { + //Periodic checks are disabled. + wp_clear_scheduled_hook($this->cronHook); + } + } + + /** + * Remove all hooks if this version of PUC has been deleted or overwritten. + * + * Callback for the "upgrader_process_complete" action. + */ + public function removeHooksIfLibraryGone() { + //Cancel all further actions if the current version of PUC has been deleted or overwritten + //by a different version during the upgrade. If we try to do anything more in that situation, + //we could trigger a fatal error by trying to autoload a deleted class. + clearstatcache(); + if ( !file_exists(__FILE__) ) { + $this->removeHooks(); + $this->updateChecker->removeHooks(); + } + } + + /** + * Runs upon the WP action upgrader_process_complete. + * + * We look at the parameters to decide whether to call maybeCheckForUpdates() or not. + * We also check if the update checker has been removed by the update. + * + * @param \WP_Upgrader $upgrader WP_Upgrader instance + * @param array $upgradeInfo extra information about the upgrade + */ + public function upgraderProcessComplete( + /** @noinspection PhpUnusedParameterInspection */ + $upgrader, $upgradeInfo + ) { + //Sanity check and limitation to relevant types. + if ( + !is_array($upgradeInfo) || !isset($upgradeInfo['type'], $upgradeInfo['action']) + || 'update' !== $upgradeInfo['action'] || !in_array($upgradeInfo['type'], array('plugin', 'theme')) + ) { + return; + } + + //Filter out notifications of upgrades that should have no bearing upon whether or not our + //current info is up-to-date. + if ( is_a($this->updateChecker, Theme\UpdateChecker::class) ) { + if ( 'theme' !== $upgradeInfo['type'] || !isset($upgradeInfo['themes']) ) { + return; + } + + //Letting too many things going through for checks is not a real problem, so we compare widely. + if ( !in_array( + strtolower($this->updateChecker->directoryName), + array_map('strtolower', $upgradeInfo['themes']) + ) ) { + return; + } + } + + if ( is_a($this->updateChecker, Plugin\UpdateChecker::class) ) { + if ( 'plugin' !== $upgradeInfo['type'] || !isset($upgradeInfo['plugins']) ) { + return; + } + + //Themes pass in directory names in the information array, but plugins use the relative plugin path. + if ( !in_array( + strtolower($this->updateChecker->directoryName), + array_map('dirname', array_map('strtolower', $upgradeInfo['plugins'])) + ) ) { + return; + } + } + + $this->maybeCheckForUpdates(); + } + + /** + * Check for updates if the configured check interval has already elapsed. + * Will use a shorter check interval on certain admin pages like "Dashboard -> Updates" or when doing cron. + * + * You can override the default behaviour by using the "puc_check_now-$slug" filter. + * The filter callback will be passed three parameters: + * - Current decision. TRUE = check updates now, FALSE = don't check now. + * - Last check time as a Unix timestamp. + * - Configured check period in hours. + * Return TRUE to check for updates immediately, or FALSE to cancel. + * + * This method is declared public because it's a hook callback. Calling it directly is not recommended. + */ + public function maybeCheckForUpdates() { + if ( empty($this->checkPeriod) ){ + return; + } + + $state = $this->updateChecker->getUpdateState(); + $shouldCheck = ($state->timeSinceLastCheck() >= $this->getEffectiveCheckPeriod()); + + if ( $shouldCheck ) { + //Sanity check: Do not proceed if one of the critical classes is missing. + //That can happen - theoretically and extremely rarely - if maybeCheckForUpdates() + //is called before the old version of our plugin has been fully deleted, or + //called from an independent AJAX request during deletion. + if ( !( + class_exists(Utils::class) + && class_exists(Metadata::class) + && class_exists(Plugin\Update::class) + && class_exists(Theme\Update::class) + ) ) { + return; + } + } + + //Let plugin authors substitute their own algorithm. + $shouldCheck = apply_filters( + $this->updateChecker->getUniqueName('check_now'), + $shouldCheck, + $state->getLastCheck(), + $this->checkPeriod + ); + + if ( $shouldCheck ) { + $this->updateChecker->checkForUpdates(); + } + } + + /** + * Calculate the actual check period based on the current status and environment. + * + * @return int Check period in seconds. + */ + protected function getEffectiveCheckPeriod() { + $currentFilter = current_filter(); + if ( in_array($currentFilter, array('load-update-core.php', 'upgrader_process_complete')) ) { + //Check more often when the user visits "Dashboard -> Updates" or does a bulk update. + $period = 60; + } else if ( in_array($currentFilter, $this->hourlyCheckHooks) ) { + //Also check more often on /wp-admin/update.php and the "Plugins" or "Themes" page. + $period = 3600; + } else if ( $this->throttleRedundantChecks && ($this->updateChecker->getUpdate() !== null) ) { + //Check less frequently if it's already known that an update is available. + $period = $this->throttledCheckPeriod * 3600; + } else if ( defined('DOING_CRON') && constant('DOING_CRON') ) { + //WordPress cron schedules are not exact, so let's do an update check even + //if slightly less than $checkPeriod hours have elapsed since the last check. + $cronFuzziness = 20 * 60; + $period = $this->checkPeriod * 3600 - $cronFuzziness; + } else { + $period = $this->checkPeriod * 3600; + } + + return $period; + } + + /** + * Add our custom schedule to the array of Cron schedules used by WP. + * + * @param array $schedules + * @return array + */ + public function _addCustomSchedule($schedules) { + if ( $this->checkPeriod && ($this->checkPeriod > 0) ){ + $scheduleName = 'every' . $this->checkPeriod . 'hours'; + $schedules[$scheduleName] = array( + 'interval' => $this->checkPeriod * 3600, + 'display' => sprintf('Every %d hours', $this->checkPeriod), + ); + } + return $schedules; + } + + /** + * Remove the scheduled cron event that the library uses to check for updates. + * + * @return void + */ + public function removeUpdaterCron() { + wp_clear_scheduled_hook($this->cronHook); + } + + /** + * Get the name of the update checker's WP-cron hook. Mostly useful for debugging. + * + * @return string + */ + public function getCronHookName() { + return $this->cronHook; + } + + /** + * Remove most hooks added by the scheduler. + */ + public function removeHooks() { + remove_filter('cron_schedules', array($this, '_addCustomSchedule')); + remove_action('admin_init', array($this, 'maybeCheckForUpdates')); + remove_action('load-update-core.php', array($this, 'maybeCheckForUpdates')); + + if ( $this->cronHook !== null ) { + remove_action($this->cronHook, array($this, 'maybeCheckForUpdates')); + } + if ( !empty($this->hourlyCheckHooks) ) { + foreach ($this->hourlyCheckHooks as $hook) { + remove_action($hook, array($this, 'maybeCheckForUpdates')); + } + } + } + } + +endif; diff --git a/vendor/yahnis-elsts/plugin-update-checker/Puc/v5p4/StateStore.php b/vendor/yahnis-elsts/plugin-update-checker/Puc/v5p4/StateStore.php new file mode 100644 index 0000000..3828c1c --- /dev/null +++ b/vendor/yahnis-elsts/plugin-update-checker/Puc/v5p4/StateStore.php @@ -0,0 +1,214 @@ +optionName = $optionName; + } + + /** + * Get time elapsed since the last update check. + * + * If there are no recorded update checks, this method returns a large arbitrary number + * (i.e. time since the Unix epoch). + * + * @return int Elapsed time in seconds. + */ + public function timeSinceLastCheck() { + $this->lazyLoad(); + return time() - $this->lastCheck; + } + + /** + * @return int + */ + public function getLastCheck() { + $this->lazyLoad(); + return $this->lastCheck; + } + + /** + * Set the time of the last update check to the current timestamp. + * + * @return $this + */ + public function setLastCheckToNow() { + $this->lazyLoad(); + $this->lastCheck = time(); + return $this; + } + + /** + * @return null|Update + */ + public function getUpdate() { + $this->lazyLoad(); + return $this->update; + } + + /** + * @param Update|null $update + * @return $this + */ + public function setUpdate(Update $update = null) { + $this->lazyLoad(); + $this->update = $update; + return $this; + } + + /** + * @return string + */ + public function getCheckedVersion() { + $this->lazyLoad(); + return $this->checkedVersion; + } + + /** + * @param string $version + * @return $this + */ + public function setCheckedVersion($version) { + $this->lazyLoad(); + $this->checkedVersion = strval($version); + return $this; + } + + /** + * Get translation updates. + * + * @return array + */ + public function getTranslations() { + $this->lazyLoad(); + if ( isset($this->update, $this->update->translations) ) { + return $this->update->translations; + } + return array(); + } + + /** + * Set translation updates. + * + * @param array $translationUpdates + */ + public function setTranslations($translationUpdates) { + $this->lazyLoad(); + if ( isset($this->update) ) { + $this->update->translations = $translationUpdates; + $this->save(); + } + } + + public function save() { + $state = new \stdClass(); + + $state->lastCheck = $this->lastCheck; + $state->checkedVersion = $this->checkedVersion; + + if ( isset($this->update)) { + $state->update = $this->update->toStdClass(); + + $updateClass = get_class($this->update); + $state->updateClass = $updateClass; + $prefix = $this->getLibPrefix(); + if ( Utils::startsWith($updateClass, $prefix) ) { + $state->updateBaseClass = substr($updateClass, strlen($prefix)); + } + } + + update_site_option($this->optionName, $state); + $this->isLoaded = true; + } + + /** + * @return $this + */ + public function lazyLoad() { + if ( !$this->isLoaded ) { + $this->load(); + } + return $this; + } + + protected function load() { + $this->isLoaded = true; + + $state = get_site_option($this->optionName, null); + + if ( + !is_object($state) + //Sanity check: If the Utils class is missing, the plugin is probably in the process + //of being deleted (e.g. the old version gets deleted during an update). + || !class_exists(Utils::class) + ) { + $this->lastCheck = 0; + $this->checkedVersion = ''; + $this->update = null; + return; + } + + $this->lastCheck = intval(Utils::get($state, 'lastCheck', 0)); + $this->checkedVersion = Utils::get($state, 'checkedVersion', ''); + $this->update = null; + + if ( isset($state->update) ) { + //This mess is due to the fact that the want the update class from this version + //of the library, not the version that saved the update. + + $updateClass = null; + if ( isset($state->updateBaseClass) ) { + $updateClass = $this->getLibPrefix() . $state->updateBaseClass; + } else if ( isset($state->updateClass) ) { + $updateClass = $state->updateClass; + } + + $factory = array($updateClass, 'fromObject'); + if ( ($updateClass !== null) && is_callable($factory) ) { + $this->update = call_user_func($factory, $state->update); + } + } + } + + public function delete() { + delete_site_option($this->optionName); + + $this->lastCheck = 0; + $this->checkedVersion = ''; + $this->update = null; + } + + private function getLibPrefix() { + //This assumes that the current class is at the top of the versioned namespace. + return __NAMESPACE__ . '\\'; + } + } + +endif; diff --git a/vendor/yahnis-elsts/plugin-update-checker/Puc/v5p4/Theme/Package.php b/vendor/yahnis-elsts/plugin-update-checker/Puc/v5p4/Theme/Package.php new file mode 100644 index 0000000..0b20702 --- /dev/null +++ b/vendor/yahnis-elsts/plugin-update-checker/Puc/v5p4/Theme/Package.php @@ -0,0 +1,69 @@ +stylesheet = $stylesheet; + $this->theme = wp_get_theme($this->stylesheet); + + parent::__construct($updateChecker); + } + + public function getInstalledVersion() { + return $this->theme->get('Version'); + } + + public function getAbsoluteDirectoryPath() { + if ( method_exists($this->theme, 'get_stylesheet_directory') ) { + return $this->theme->get_stylesheet_directory(); //Available since WP 3.4. + } + return get_theme_root($this->stylesheet) . '/' . $this->stylesheet; + } + + /** + * Get the value of a specific plugin or theme header. + * + * @param string $headerName + * @param string $defaultValue + * @return string Either the value of the header, or $defaultValue if the header doesn't exist or is empty. + */ + public function getHeaderValue($headerName, $defaultValue = '') { + $value = $this->theme->get($headerName); + if ( ($headerName === false) || ($headerName === '') ) { + return $defaultValue; + } + return $value; + } + + protected function getHeaderNames() { + return array( + 'Name' => 'Theme Name', + 'ThemeURI' => 'Theme URI', + 'Description' => 'Description', + 'Author' => 'Author', + 'AuthorURI' => 'Author URI', + 'Version' => 'Version', + 'Template' => 'Template', + 'Status' => 'Status', + 'Tags' => 'Tags', + 'TextDomain' => 'Text Domain', + 'DomainPath' => 'Domain Path', + ); + } + } + +endif; diff --git a/vendor/yahnis-elsts/plugin-update-checker/Puc/v5p4/Theme/Update.php b/vendor/yahnis-elsts/plugin-update-checker/Puc/v5p4/Theme/Update.php new file mode 100644 index 0000000..0a69fd6 --- /dev/null +++ b/vendor/yahnis-elsts/plugin-update-checker/Puc/v5p4/Theme/Update.php @@ -0,0 +1,88 @@ + $this->slug, + 'new_version' => $this->version, + 'url' => $this->details_url, + ); + + if ( !empty($this->download_url) ) { + $update['package'] = $this->download_url; + } + + return $update; + } + + /** + * Create a new instance of Theme_Update from its JSON-encoded representation. + * + * @param string $json Valid JSON string representing a theme information object. + * @return self New instance of ThemeUpdate, or NULL on error. + */ + public static function fromJson($json) { + $instance = new self(); + if ( !parent::createFromJson($json, $instance) ) { + return null; + } + return $instance; + } + + /** + * Create a new instance by copying the necessary fields from another object. + * + * @param \StdClass|self $object The source object. + * @return self The new copy. + */ + public static function fromObject($object) { + $update = new self(); + $update->copyFields($object, $update); + return $update; + } + + /** + * Basic validation. + * + * @param \StdClass $apiResponse + * @return bool|\WP_Error + */ + protected function validateMetadata($apiResponse) { + $required = array('version', 'details_url'); + foreach($required as $key) { + if ( !isset($apiResponse->$key) || empty($apiResponse->$key) ) { + return new \WP_Error( + 'tuc-invalid-metadata', + sprintf('The theme metadata is missing the required "%s" key.', $key) + ); + } + } + return true; + } + + protected function getFieldNames() { + return array_merge(parent::getFieldNames(), self::$extraFields); + } + + protected function getPrefixedFilter($tag) { + return parent::getPrefixedFilter($tag) . '_theme'; + } + } + +endif; diff --git a/vendor/yahnis-elsts/plugin-update-checker/Puc/v5p4/Theme/UpdateChecker.php b/vendor/yahnis-elsts/plugin-update-checker/Puc/v5p4/Theme/UpdateChecker.php new file mode 100644 index 0000000..80481e6 --- /dev/null +++ b/vendor/yahnis-elsts/plugin-update-checker/Puc/v5p4/Theme/UpdateChecker.php @@ -0,0 +1,159 @@ +stylesheet = $stylesheet; + + parent::__construct( + $metadataUrl, + $stylesheet, + $customSlug ? $customSlug : $stylesheet, + $checkPeriod, + $optionName + ); + } + + /** + * For themes, the update array is indexed by theme directory name. + * + * @return string + */ + protected function getUpdateListKey() { + return $this->directoryName; + } + + /** + * Retrieve the latest update (if any) from the configured API endpoint. + * + * @return Update|null An instance of Update, or NULL when no updates are available. + */ + public function requestUpdate() { + list($themeUpdate, $result) = $this->requestMetadata(Update::class, 'request_update'); + + if ( $themeUpdate !== null ) { + /** @var Update $themeUpdate */ + $themeUpdate->slug = $this->slug; + } + + $themeUpdate = $this->filterUpdateResult($themeUpdate, $result); + return $themeUpdate; + } + + protected function getNoUpdateItemFields() { + return array_merge( + parent::getNoUpdateItemFields(), + array( + 'theme' => $this->directoryName, + 'requires' => '', + ) + ); + } + + public function userCanInstallUpdates() { + return current_user_can('update_themes'); + } + + /** + * Create an instance of the scheduler. + * + * @param int $checkPeriod + * @return Scheduler + */ + protected function createScheduler($checkPeriod) { + return new Scheduler($this, $checkPeriod, array('load-themes.php')); + } + + /** + * Is there an update being installed right now for this theme? + * + * @param \WP_Upgrader|null $upgrader The upgrader that's performing the current update. + * @return bool + */ + public function isBeingUpgraded($upgrader = null) { + return $this->upgraderStatus->isThemeBeingUpgraded($this->stylesheet, $upgrader); + } + + protected function createDebugBarExtension() { + return new DebugBar\Extension($this, DebugBar\ThemePanel::class); + } + + /** + * Register a callback for filtering query arguments. + * + * The callback function should take one argument - an associative array of query arguments. + * It should return a modified array of query arguments. + * + * @param callable $callback + * @return void + */ + public function addQueryArgFilter($callback){ + $this->addFilter('request_update_query_args', $callback); + } + + /** + * Register a callback for filtering arguments passed to wp_remote_get(). + * + * The callback function should take one argument - an associative array of arguments - + * and return a modified array or arguments. See the WP documentation on wp_remote_get() + * for details on what arguments are available and how they work. + * + * @uses add_filter() This method is a convenience wrapper for add_filter(). + * + * @param callable $callback + * @return void + */ + public function addHttpRequestArgFilter($callback) { + $this->addFilter('request_update_options', $callback); + } + + /** + * Register a callback for filtering theme updates retrieved from the external API. + * + * The callback function should take two arguments. If the theme update was retrieved + * successfully, the first argument passed will be an instance of Theme_Update. Otherwise, + * it will be NULL. The second argument will be the corresponding return value of + * wp_remote_get (see WP docs for details). + * + * The callback function should return a new or modified instance of Theme_Update or NULL. + * + * @uses add_filter() This method is a convenience wrapper for add_filter(). + * + * @param callable $callback + * @return void + */ + public function addResultFilter($callback) { + $this->addFilter('request_update_result', $callback, 10, 2); + } + + /** + * Create a package instance that represents this plugin or theme. + * + * @return InstalledPackage + */ + protected function createInstalledPackage() { + return new Package($this->stylesheet, $this); + } + } + +endif; diff --git a/vendor/yahnis-elsts/plugin-update-checker/Puc/v5p4/Update.php b/vendor/yahnis-elsts/plugin-update-checker/Puc/v5p4/Update.php new file mode 100644 index 0000000..6c58510 --- /dev/null +++ b/vendor/yahnis-elsts/plugin-update-checker/Puc/v5p4/Update.php @@ -0,0 +1,38 @@ +slug = $this->slug; + $update->new_version = $this->version; + $update->package = $this->download_url; + + return $update; + } + } + +endif; diff --git a/vendor/yahnis-elsts/plugin-update-checker/Puc/v5p4/UpdateChecker.php b/vendor/yahnis-elsts/plugin-update-checker/Puc/v5p4/UpdateChecker.php new file mode 100644 index 0000000..8833547 --- /dev/null +++ b/vendor/yahnis-elsts/plugin-update-checker/Puc/v5p4/UpdateChecker.php @@ -0,0 +1,1029 @@ +debugMode = (bool)(constant('WP_DEBUG')); + $this->metadataUrl = $metadataUrl; + $this->directoryName = $directoryName; + $this->slug = !empty($slug) ? $slug : $this->directoryName; + + $this->optionName = $optionName; + if ( empty($this->optionName) ) { + //BC: Initially the library only supported plugin updates and didn't use type prefixes + //in the option name. Lets use the same prefix-less name when possible. + if ( $this->filterSuffix === '' ) { + $this->optionName = 'external_updates-' . $this->slug; + } else { + $this->optionName = $this->getUniqueName('external_updates'); + } + } + + if ( empty($this->translationType) ) { + $this->translationType = $this->componentType; + } + + $this->package = $this->createInstalledPackage(); + $this->scheduler = $this->createScheduler($checkPeriod); + $this->upgraderStatus = new UpgraderStatus(); + $this->updateState = new StateStore($this->optionName); + + if ( did_action('init') ) { + $this->loadTextDomain(); + } else { + add_action('init', array($this, 'loadTextDomain')); + } + + $this->installHooks(); + + if ( ($this->wpCliCheckTrigger === null) && defined('WP_CLI') ) { + $this->wpCliCheckTrigger = new WpCliCheckTrigger($this->componentType, $this->scheduler); + } + } + + /** + * @internal + */ + public function loadTextDomain() { + //We're not using load_plugin_textdomain() or its siblings because figuring out where + //the library is located (plugin, mu-plugin, theme, custom wp-content paths) is messy. + $domain = 'plugin-update-checker'; + $locale = apply_filters( + 'plugin_locale', + (is_admin() && function_exists('get_user_locale')) ? get_user_locale() : get_locale(), + $domain + ); + + $moFile = $domain . '-' . $locale . '.mo'; + $path = realpath(dirname(__FILE__) . '/../../languages'); + + if ($path && file_exists($path)) { + load_textdomain($domain, $path . '/' . $moFile); + } + } + + protected function installHooks() { + //Insert our update info into the update array maintained by WP. + add_filter('site_transient_' . $this->updateTransient, array($this,'injectUpdate')); + + //Insert translation updates into the update list. + add_filter('site_transient_' . $this->updateTransient, array($this, 'injectTranslationUpdates')); + + //Clear translation updates when WP clears the update cache. + //This needs to be done directly because the library doesn't actually remove obsolete plugin updates, + //it just hides them (see getUpdate()). We can't do that with translations - too much disk I/O. + add_action( + 'delete_site_transient_' . $this->updateTransient, + array($this, 'clearCachedTranslationUpdates') + ); + + //Rename the update directory to be the same as the existing directory. + if ( $this->directoryName !== '.' ) { + add_filter('upgrader_source_selection', array($this, 'fixDirectoryName'), 10, 3); + } + + //Allow HTTP requests to the metadata URL even if it's on a local host. + add_filter('http_request_host_is_external', array($this, 'allowMetadataHost'), 10, 2); + + //DebugBar integration. + if ( did_action('plugins_loaded') ) { + $this->maybeInitDebugBar(); + } else { + add_action('plugins_loaded', array($this, 'maybeInitDebugBar')); + } + } + + /** + * Remove hooks that were added by this update checker instance. + */ + public function removeHooks() { + remove_filter('site_transient_' . $this->updateTransient, array($this,'injectUpdate')); + remove_filter('site_transient_' . $this->updateTransient, array($this, 'injectTranslationUpdates')); + remove_action( + 'delete_site_transient_' . $this->updateTransient, + array($this, 'clearCachedTranslationUpdates') + ); + + remove_filter('upgrader_source_selection', array($this, 'fixDirectoryName'), 10); + remove_filter('http_request_host_is_external', array($this, 'allowMetadataHost'), 10); + remove_action('plugins_loaded', array($this, 'maybeInitDebugBar')); + + remove_action('init', array($this, 'loadTextDomain')); + + if ( $this->scheduler ) { + $this->scheduler->removeHooks(); + } + + if ( $this->debugBarExtension ) { + $this->debugBarExtension->removeHooks(); + } + } + + /** + * Check if the current user has the required permissions to install updates. + * + * @return bool + */ + abstract public function userCanInstallUpdates(); + + /** + * Explicitly allow HTTP requests to the metadata URL. + * + * WordPress has a security feature where the HTTP API will reject all requests that are sent to + * another site hosted on the same server as the current site (IP match), a local host, or a local + * IP, unless the host exactly matches the current site. + * + * This feature is opt-in (at least in WP 4.4). Apparently some people enable it. + * + * That can be a problem when you're developing your plugin and you decide to host the update information + * on the same server as your test site. Update requests will mysteriously fail. + * + * We fix that by adding an exception for the metadata host. + * + * @param bool $allow + * @param string $host + * @return bool + */ + public function allowMetadataHost($allow, $host) { + if ( $this->cachedMetadataHost === 0 ) { + $this->cachedMetadataHost = wp_parse_url($this->metadataUrl, PHP_URL_HOST); + } + + if ( is_string($this->cachedMetadataHost) && (strtolower($host) === strtolower($this->cachedMetadataHost)) ) { + return true; + } + return $allow; + } + + /** + * Create a package instance that represents this plugin or theme. + * + * @return InstalledPackage + */ + abstract protected function createInstalledPackage(); + + /** + * @return InstalledPackage + */ + public function getInstalledPackage() { + return $this->package; + } + + /** + * Create an instance of the scheduler. + * + * This is implemented as a method to make it possible for plugins to subclass the update checker + * and substitute their own scheduler. + * + * @param int $checkPeriod + * @return Scheduler + */ + abstract protected function createScheduler($checkPeriod); + + /** + * Check for updates. The results are stored in the DB option specified in $optionName. + * + * @return Update|null + */ + public function checkForUpdates() { + $installedVersion = $this->getInstalledVersion(); + //Fail silently if we can't find the plugin/theme or read its header. + if ( $installedVersion === null ) { + $this->triggerError( + sprintf('Skipping update check for %s - installed version unknown.', $this->slug), + E_USER_WARNING + ); + return null; + } + + //Start collecting API errors. + $this->lastRequestApiErrors = array(); + add_action('puc_api_error', array($this, 'collectApiErrors'), 10, 4); + + $state = $this->updateState; + $state->setLastCheckToNow() + ->setCheckedVersion($installedVersion) + ->save(); //Save before checking in case something goes wrong + + $state->setUpdate($this->requestUpdate()); + $state->save(); + + //Stop collecting API errors. + remove_action('puc_api_error', array($this, 'collectApiErrors'), 10); + + return $this->getUpdate(); + } + + /** + * Load the update checker state from the DB. + * + * @return StateStore + */ + public function getUpdateState() { + return $this->updateState->lazyLoad(); + } + + /** + * Reset update checker state - i.e. last check time, cached update data and so on. + * + * Call this when your plugin is being uninstalled, or if you want to + * clear the update cache. + */ + public function resetUpdateState() { + $this->updateState->delete(); + } + + /** + * Get the details of the currently available update, if any. + * + * If no updates are available, or if the last known update version is below or equal + * to the currently installed version, this method will return NULL. + * + * Uses cached update data. To retrieve update information straight from + * the metadata URL, call requestUpdate() instead. + * + * @return Update|null + */ + public function getUpdate() { + $update = $this->updateState->getUpdate(); + + //Is there an update available? + if ( isset($update) ) { + //Check if the update is actually newer than the currently installed version. + $installedVersion = $this->getInstalledVersion(); + if ( ($installedVersion !== null) && version_compare($update->version, $installedVersion, '>') ){ + return $update; + } + } + return null; + } + + /** + * Retrieve the latest update (if any) from the configured API endpoint. + * + * Subclasses should run the update through filterUpdateResult before returning it. + * + * @return Update An instance of Update, or NULL when no updates are available. + */ + abstract public function requestUpdate(); + + /** + * Filter the result of a requestUpdate() call. + * + * @template T of Update + * @param T|null $update + * @param array|WP_Error|null $httpResult The value returned by wp_remote_get(), if any. + * @return T + */ + protected function filterUpdateResult($update, $httpResult = null) { + //Let plugins/themes modify the update. + $update = apply_filters($this->getUniqueName('request_update_result'), $update, $httpResult); + + $this->fixSupportedWordpressVersion($update); + + if ( isset($update, $update->translations) ) { + //Keep only those translation updates that apply to this site. + $update->translations = $this->filterApplicableTranslations($update->translations); + } + + return $update; + } + + /** + * The "Tested up to" field in the plugin metadata is supposed to be in the form of "major.minor", + * while WordPress core's list_plugin_updates() expects the $update->tested field to be an exact + * version, e.g. "major.minor.patch", to say it's compatible. In other case it shows + * "Compatibility: Unknown". + * The function mimics how wordpress.org API crafts the "tested" field out of "Tested up to". + * + * @param Metadata|null $update + */ + protected function fixSupportedWordpressVersion(Metadata $update = null) { + if ( !isset($update->tested) || !preg_match('/^\d++\.\d++$/', $update->tested) ) { + return; + } + + $actualWpVersions = array(); + + $wpVersion = $GLOBALS['wp_version']; + + if ( function_exists('get_core_updates') ) { + $coreUpdates = get_core_updates(); + if ( is_array($coreUpdates) ) { + foreach ($coreUpdates as $coreUpdate) { + if ( isset($coreUpdate->current) ) { + $actualWpVersions[] = $coreUpdate->current; + } + } + } + } + + $actualWpVersions[] = $wpVersion; + + $actualWpPatchNumber = null; + foreach ($actualWpVersions as $version) { + if ( preg_match('/^(?P\d++\.\d++)(?:\.(?P\d++))?/', $version, $versionParts) ) { + if ( $versionParts['majorMinor'] === $update->tested ) { + $patch = isset($versionParts['patch']) ? intval($versionParts['patch']) : 0; + if ( $actualWpPatchNumber === null ) { + $actualWpPatchNumber = $patch; + } else { + $actualWpPatchNumber = max($actualWpPatchNumber, $patch); + } + } + } + } + if ( $actualWpPatchNumber === null ) { + $actualWpPatchNumber = 999; + } + + if ( $actualWpPatchNumber > 0 ) { + $update->tested .= '.' . $actualWpPatchNumber; + } + } + + /** + * Get the currently installed version of the plugin or theme. + * + * @return string|null Version number. + */ + public function getInstalledVersion() { + return $this->package->getInstalledVersion(); + } + + /** + * Get the full path of the plugin or theme directory. + * + * @return string + */ + public function getAbsoluteDirectoryPath() { + return $this->package->getAbsoluteDirectoryPath(); + } + + /** + * Trigger a PHP error, but only when $debugMode is enabled. + * + * @param string $message + * @param int $errorType + */ + public function triggerError($message, $errorType) { + if ( $this->isDebugModeEnabled() ) { + //phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_trigger_error -- Only happens in debug mode. + trigger_error(esc_html($message), $errorType); + } + } + + /** + * @return bool + */ + protected function isDebugModeEnabled() { + if ( $this->debugMode === null ) { + $this->debugMode = (bool)(constant('WP_DEBUG')); + } + return $this->debugMode; + } + + /** + * Get the full name of an update checker filter, action or DB entry. + * + * This method adds the "puc_" prefix and the "-$slug" suffix to the filter name. + * For example, "pre_inject_update" becomes "puc_pre_inject_update-plugin-slug". + * + * @param string $baseTag + * @return string + */ + public function getUniqueName($baseTag) { + $name = 'puc_' . $baseTag; + if ( $this->filterSuffix !== '' ) { + $name .= '_' . $this->filterSuffix; + } + return $name . '-' . $this->slug; + } + + /** + * Store API errors that are generated when checking for updates. + * + * @internal + * @param \WP_Error $error + * @param array|null $httpResponse + * @param string|null $url + * @param string|null $slug + */ + public function collectApiErrors($error, $httpResponse = null, $url = null, $slug = null) { + if ( isset($slug) && ($slug !== $this->slug) ) { + return; + } + + $this->lastRequestApiErrors[] = array( + 'error' => $error, + 'httpResponse' => $httpResponse, + 'url' => $url, + ); + } + + /** + * @return array + */ + public function getLastRequestApiErrors() { + return $this->lastRequestApiErrors; + } + + /* ------------------------------------------------------------------- + * PUC filters and filter utilities + * ------------------------------------------------------------------- + */ + + /** + * Register a callback for one of the update checker filters. + * + * Identical to add_filter(), except it automatically adds the "puc_" prefix + * and the "-$slug" suffix to the filter name. For example, "request_info_result" + * becomes "puc_request_info_result-your_plugin_slug". + * + * @param string $tag + * @param callable $callback + * @param int $priority + * @param int $acceptedArgs + */ + public function addFilter($tag, $callback, $priority = 10, $acceptedArgs = 1) { + add_filter($this->getUniqueName($tag), $callback, $priority, $acceptedArgs); + } + + /* ------------------------------------------------------------------- + * Inject updates + * ------------------------------------------------------------------- + */ + + /** + * Insert the latest update (if any) into the update list maintained by WP. + * + * @param \stdClass $updates Update list. + * @return \stdClass Modified update list. + */ + public function injectUpdate($updates) { + //Is there an update to insert? + $update = $this->getUpdate(); + + if ( !$this->shouldShowUpdates() ) { + $update = null; + } + + if ( !empty($update) ) { + //Let plugins filter the update info before it's passed on to WordPress. + $update = apply_filters($this->getUniqueName('pre_inject_update'), $update); + $updates = $this->addUpdateToList($updates, $update->toWpFormat()); + } else { + //Clean up any stale update info. + $updates = $this->removeUpdateFromList($updates); + //Add a placeholder item to the "no_update" list to enable auto-update support. + //If we don't do this, the option to enable automatic updates will only show up + //when an update is available. + $updates = $this->addNoUpdateItem($updates); + } + + return $updates; + } + + /** + * @param \stdClass|null $updates + * @param \stdClass|array $updateToAdd + * @return \stdClass + */ + protected function addUpdateToList($updates, $updateToAdd) { + if ( !is_object($updates) ) { + $updates = new stdClass(); + $updates->response = array(); + } + + $updates->response[$this->getUpdateListKey()] = $updateToAdd; + return $updates; + } + + /** + * @param \stdClass|null $updates + * @return \stdClass|null + */ + protected function removeUpdateFromList($updates) { + if ( isset($updates, $updates->response) ) { + unset($updates->response[$this->getUpdateListKey()]); + } + return $updates; + } + + /** + * See this post for more information: + * @link https://make.wordpress.org/core/2020/07/30/recommended-usage-of-the-updates-api-to-support-the-auto-updates-ui-for-plugins-and-themes-in-wordpress-5-5/ + * + * @param \stdClass|null $updates + * @return \stdClass + */ + protected function addNoUpdateItem($updates) { + if ( !is_object($updates) ) { + $updates = new stdClass(); + $updates->response = array(); + $updates->no_update = array(); + } else if ( !isset($updates->no_update) ) { + $updates->no_update = array(); + } + + $updates->no_update[$this->getUpdateListKey()] = (object) $this->getNoUpdateItemFields(); + + return $updates; + } + + /** + * Subclasses should override this method to add fields that are specific to plugins or themes. + * @return array + */ + protected function getNoUpdateItemFields() { + return array( + 'new_version' => $this->getInstalledVersion(), + 'url' => '', + 'package' => '', + 'requires_php' => '', + ); + } + + /** + * Get the key that will be used when adding updates to the update list that's maintained + * by the WordPress core. The list is always an associative array, but the key is different + * for plugins and themes. + * + * @return string + */ + abstract protected function getUpdateListKey(); + + /** + * Should we show available updates? + * + * Usually the answer is "yes", but there are exceptions. For example, WordPress doesn't + * support automatic updates installation for mu-plugins, so PUC usually won't show update + * notifications in that case. See the plugin-specific subclass for details. + * + * Note: This method only applies to updates that are displayed (or not) in the WordPress + * admin. It doesn't affect APIs like requestUpdate and getUpdate. + * + * @return bool + */ + protected function shouldShowUpdates() { + return true; + } + + /* ------------------------------------------------------------------- + * JSON-based update API + * ------------------------------------------------------------------- + */ + + /** + * Retrieve plugin or theme metadata from the JSON document at $this->metadataUrl. + * + * @param class-string $metaClass Parse the JSON as an instance of this class. It must have a static fromJson method. + * @param string $filterRoot + * @param array $queryArgs Additional query arguments. + * @return array A metadata instance and the value returned by wp_remote_get(). + */ + protected function requestMetadata($metaClass, $filterRoot, $queryArgs = array()) { + //Query args to append to the URL. Plugins can add their own by using a filter callback (see addQueryArgFilter()). + $queryArgs = array_merge( + array( + 'installed_version' => strval($this->getInstalledVersion()), + 'php' => phpversion(), + 'locale' => get_locale(), + ), + $queryArgs + ); + $queryArgs = apply_filters($this->getUniqueName($filterRoot . '_query_args'), $queryArgs); + + //Various options for the wp_remote_get() call. Plugins can filter these, too. + $options = array( + 'timeout' => wp_doing_cron() ? 10 : 3, + 'headers' => array( + 'Accept' => 'application/json', + ), + ); + $options = apply_filters($this->getUniqueName($filterRoot . '_options'), $options); + + //The metadata file should be at 'http://your-api.com/url/here/$slug/info.json' + $url = $this->metadataUrl; + if ( !empty($queryArgs) ){ + $url = add_query_arg($queryArgs, $url); + } + + $result = wp_remote_get($url, $options); + + $result = apply_filters($this->getUniqueName('request_metadata_http_result'), $result, $url, $options); + + //Try to parse the response + $status = $this->validateApiResponse($result); + $metadata = null; + if ( !is_wp_error($status) ){ + if ( (strpos($metaClass, '\\') === false) ) { + $metaClass = __NAMESPACE__ . '\\' . $metaClass; + } + $metadata = call_user_func(array($metaClass, 'fromJson'), $result['body']); + } else { + do_action('puc_api_error', $status, $result, $url, $this->slug); + $this->triggerError( + sprintf('The URL %s does not point to a valid metadata file. ', $url) + . $status->get_error_message(), + E_USER_WARNING + ); + } + + return array($metadata, $result); + } + + /** + * Check if $result is a successful update API response. + * + * @param array|WP_Error $result + * @return true|WP_Error + */ + protected function validateApiResponse($result) { + if ( is_wp_error($result) ) { /** @var WP_Error $result */ + return new WP_Error($result->get_error_code(), 'WP HTTP Error: ' . $result->get_error_message()); + } + + if ( !isset($result['response']['code']) ) { + return new WP_Error( + 'puc_no_response_code', + 'wp_remote_get() returned an unexpected result.' + ); + } + + if ( $result['response']['code'] !== 200 ) { + return new WP_Error( + 'puc_unexpected_response_code', + 'HTTP response code is ' . $result['response']['code'] . ' (expected: 200)' + ); + } + + if ( empty($result['body']) ) { + return new WP_Error('puc_empty_response', 'The metadata file appears to be empty.'); + } + + return true; + } + + /* ------------------------------------------------------------------- + * Language packs / Translation updates + * ------------------------------------------------------------------- + */ + + /** + * Filter a list of translation updates and return a new list that contains only updates + * that apply to the current site. + * + * @param array $translations + * @return array + */ + protected function filterApplicableTranslations($translations) { + $languages = array_flip(array_values(get_available_languages())); + $installedTranslations = $this->getInstalledTranslations(); + + $applicableTranslations = array(); + foreach ($translations as $translation) { + //Does it match one of the available core languages? + $isApplicable = array_key_exists($translation->language, $languages); + //Is it more recent than an already-installed translation? + if ( isset($installedTranslations[$translation->language]) ) { + $updateTimestamp = strtotime($translation->updated); + $installedTimestamp = strtotime($installedTranslations[$translation->language]['PO-Revision-Date']); + $isApplicable = $updateTimestamp > $installedTimestamp; + } + + if ( $isApplicable ) { + $applicableTranslations[] = $translation; + } + } + + return $applicableTranslations; + } + + /** + * Get a list of installed translations for this plugin or theme. + * + * @return array + */ + protected function getInstalledTranslations() { + if ( !function_exists('wp_get_installed_translations') ) { + return array(); + } + $installedTranslations = wp_get_installed_translations($this->translationType . 's'); + if ( isset($installedTranslations[$this->directoryName]) ) { + $installedTranslations = $installedTranslations[$this->directoryName]; + } else { + $installedTranslations = array(); + } + return $installedTranslations; + } + + /** + * Insert translation updates into the list maintained by WordPress. + * + * @param stdClass $updates + * @return stdClass + */ + public function injectTranslationUpdates($updates) { + $translationUpdates = $this->getTranslationUpdates(); + if ( empty($translationUpdates) ) { + return $updates; + } + + //Being defensive. + if ( !is_object($updates) ) { + $updates = new stdClass(); + } + if ( !isset($updates->translations) ) { + $updates->translations = array(); + } + + //In case there's a name collision with a plugin or theme hosted on wordpress.org, + //remove any preexisting updates that match our thing. + $updates->translations = array_values(array_filter( + $updates->translations, + array($this, 'isNotMyTranslation') + )); + + //Add our updates to the list. + foreach($translationUpdates as $update) { + $convertedUpdate = array_merge( + array( + 'type' => $this->translationType, + 'slug' => $this->directoryName, + 'autoupdate' => 0, + //AFAICT, WordPress doesn't actually use the "version" field for anything. + //But lets make sure it's there, just in case. + 'version' => isset($update->version) ? $update->version : ('1.' . strtotime($update->updated)), + ), + (array)$update + ); + + $updates->translations[] = $convertedUpdate; + } + + return $updates; + } + + /** + * Get a list of available translation updates. + * + * This method will return an empty array if there are no updates. + * Uses cached update data. + * + * @return array + */ + public function getTranslationUpdates() { + return $this->updateState->getTranslations(); + } + + /** + * Remove all cached translation updates. + * + * @see wp_clean_update_cache + */ + public function clearCachedTranslationUpdates() { + $this->updateState->setTranslations(array()); + } + + /** + * Filter callback. Keeps only translations that *don't* match this plugin or theme. + * + * @param array $translation + * @return bool + */ + protected function isNotMyTranslation($translation) { + $isMatch = isset($translation['type'], $translation['slug']) + && ($translation['type'] === $this->translationType) + && ($translation['slug'] === $this->directoryName); + + return !$isMatch; + } + + /* ------------------------------------------------------------------- + * Fix directory name when installing updates + * ------------------------------------------------------------------- + */ + + /** + * Rename the update directory to match the existing plugin/theme directory. + * + * When WordPress installs a plugin or theme update, it assumes that the ZIP file will contain + * exactly one directory, and that the directory name will be the same as the directory where + * the plugin or theme is currently installed. + * + * GitHub and other repositories provide ZIP downloads, but they often use directory names like + * "project-branch" or "project-tag-hash". We need to change the name to the actual plugin folder. + * + * This is a hook callback. Don't call it from a plugin. + * + * @access protected + * + * @param string $source The directory to copy to /wp-content/plugins or /wp-content/themes. Usually a subdirectory of $remoteSource. + * @param string $remoteSource WordPress has extracted the update to this directory. + * @param \WP_Upgrader $upgrader + * @return string|WP_Error + */ + public function fixDirectoryName($source, $remoteSource, $upgrader) { + global $wp_filesystem; + /** @var \WP_Filesystem_Base $wp_filesystem */ + + //Basic sanity checks. + if ( !isset($source, $remoteSource, $upgrader, $upgrader->skin, $wp_filesystem) ) { + return $source; + } + + //If WordPress is upgrading anything other than our plugin/theme, leave the directory name unchanged. + if ( !$this->isBeingUpgraded($upgrader) ) { + return $source; + } + + //Rename the source to match the existing directory. + $correctedSource = trailingslashit($remoteSource) . $this->directoryName . '/'; + if ( $source !== $correctedSource ) { + //The update archive should contain a single directory that contains the rest of plugin/theme files. + //Otherwise, WordPress will try to copy the entire working directory ($source == $remoteSource). + //We can't rename $remoteSource because that would break WordPress code that cleans up temporary files + //after update. + if ( $this->isBadDirectoryStructure($remoteSource) ) { + return new WP_Error( + 'puc-incorrect-directory-structure', + sprintf( + 'The directory structure of the update is incorrect. All files should be inside ' . + 'a directory named %s, not at the root of the ZIP archive.', + htmlentities($this->slug) + ) + ); + } + + /** @var \WP_Upgrader_Skin $upgrader ->skin */ + $upgrader->skin->feedback(sprintf( + 'Renaming %s to %s…', + '' . basename($source) . '', + '' . $this->directoryName . '' + )); + + if ( $wp_filesystem->move($source, $correctedSource, true) ) { + $upgrader->skin->feedback('Directory successfully renamed.'); + return $correctedSource; + } else { + return new WP_Error( + 'puc-rename-failed', + 'Unable to rename the update to match the existing directory.' + ); + } + } + + return $source; + } + + /** + * Is there an update being installed right now, for this plugin or theme? + * + * @param \WP_Upgrader|null $upgrader The upgrader that's performing the current update. + * @return bool + */ + abstract public function isBeingUpgraded($upgrader = null); + + /** + * Check for incorrect update directory structure. An update must contain a single directory, + * all other files should be inside that directory. + * + * @param string $remoteSource Directory path. + * @return bool + */ + protected function isBadDirectoryStructure($remoteSource) { + global $wp_filesystem; + /** @var \WP_Filesystem_Base $wp_filesystem */ + + $sourceFiles = $wp_filesystem->dirlist($remoteSource); + if ( is_array($sourceFiles) ) { + $sourceFiles = array_keys($sourceFiles); + $firstFilePath = trailingslashit($remoteSource) . $sourceFiles[0]; + return (count($sourceFiles) > 1) || (!$wp_filesystem->is_dir($firstFilePath)); + } + + //Assume it's fine. + return false; + } + + /* ------------------------------------------------------------------- + * DebugBar integration + * ------------------------------------------------------------------- + */ + + /** + * Initialize the update checker Debug Bar plugin/add-on thingy. + */ + public function maybeInitDebugBar() { + if ( + class_exists('Debug_Bar', false) + && class_exists('Debug_Bar_Panel', false) + && file_exists(dirname(__FILE__) . '/DebugBar') + ) { + $this->debugBarExtension = $this->createDebugBarExtension(); + } + } + + protected function createDebugBarExtension() { + return new DebugBar\Extension($this); + } + + /** + * Display additional configuration details in the Debug Bar panel. + * + * @param DebugBar\Panel $panel + */ + public function onDisplayConfiguration($panel) { + //Do nothing. Subclasses can use this to add additional info to the panel. + } + + } + +endif; diff --git a/vendor/yahnis-elsts/plugin-update-checker/Puc/v5p4/UpgraderStatus.php b/vendor/yahnis-elsts/plugin-update-checker/Puc/v5p4/UpgraderStatus.php new file mode 100644 index 0000000..e8340fd --- /dev/null +++ b/vendor/yahnis-elsts/plugin-update-checker/Puc/v5p4/UpgraderStatus.php @@ -0,0 +1,200 @@ +isBeingUpgraded('plugin', $pluginFile, $upgrader); + } + + /** + * Is there an update being installed for a specific theme? + * + * @param string $stylesheet Theme directory name. + * @param \WP_Upgrader|null $upgrader The upgrader that's performing the current update. + * @return bool + */ + public function isThemeBeingUpgraded($stylesheet, $upgrader = null) { + return $this->isBeingUpgraded('theme', $stylesheet, $upgrader); + } + + /** + * Check if a specific theme or plugin is being upgraded. + * + * @param string $type + * @param string $id + * @param \Plugin_Upgrader|\WP_Upgrader|null $upgrader + * @return bool + */ + protected function isBeingUpgraded($type, $id, $upgrader = null) { + if ( isset($upgrader) ) { + list($currentType, $currentId) = $this->getThingBeingUpgradedBy($upgrader); + if ( $currentType !== null ) { + $this->currentType = $currentType; + $this->currentId = $currentId; + } + } + return ($this->currentType === $type) && ($this->currentId === $id); + } + + /** + * Figure out which theme or plugin is being upgraded by a WP_Upgrader instance. + * + * Returns an array with two items. The first item is the type of the thing that's being + * upgraded: "plugin" or "theme". The second item is either the plugin basename or + * the theme directory name. If we can't determine what the upgrader is doing, both items + * will be NULL. + * + * Examples: + * ['plugin', 'plugin-dir-name/plugin.php'] + * ['theme', 'theme-dir-name'] + * + * @param \Plugin_Upgrader|\WP_Upgrader $upgrader + * @return array + */ + private function getThingBeingUpgradedBy($upgrader) { + if ( !isset($upgrader, $upgrader->skin) ) { + return array(null, null); + } + + //Figure out which plugin or theme is being upgraded. + $pluginFile = null; + $themeDirectoryName = null; + + $skin = $upgrader->skin; + if ( isset($skin->theme_info) && ($skin->theme_info instanceof \WP_Theme) ) { + $themeDirectoryName = $skin->theme_info->get_stylesheet(); + } elseif ( $skin instanceof \Plugin_Upgrader_Skin ) { + if ( isset($skin->plugin) && is_string($skin->plugin) && ($skin->plugin !== '') ) { + $pluginFile = $skin->plugin; + } + } elseif ( $skin instanceof \Theme_Upgrader_Skin ) { + if ( isset($skin->theme) && is_string($skin->theme) && ($skin->theme !== '') ) { + $themeDirectoryName = $skin->theme; + } + } elseif ( isset($skin->plugin_info) && is_array($skin->plugin_info) ) { + //This case is tricky because Bulk_Plugin_Upgrader_Skin (etc) doesn't actually store the plugin + //filename anywhere. Instead, it has the plugin headers in $plugin_info. So the best we can + //do is compare those headers to the headers of installed plugins. + $pluginFile = $this->identifyPluginByHeaders($skin->plugin_info); + } + + if ( $pluginFile !== null ) { + return array('plugin', $pluginFile); + } elseif ( $themeDirectoryName !== null ) { + return array('theme', $themeDirectoryName); + } + return array(null, null); + } + + /** + * Identify an installed plugin based on its headers. + * + * @param array $searchHeaders The plugin file header to look for. + * @return string|null Plugin basename ("foo/bar.php"), or NULL if we can't identify the plugin. + */ + private function identifyPluginByHeaders($searchHeaders) { + if ( !function_exists('get_plugins') ){ + require_once( ABSPATH . '/wp-admin/includes/plugin.php' ); + } + + $installedPlugins = get_plugins(); + $matches = array(); + foreach($installedPlugins as $pluginBasename => $headers) { + $diff1 = array_diff_assoc($headers, $searchHeaders); + $diff2 = array_diff_assoc($searchHeaders, $headers); + if ( empty($diff1) && empty($diff2) ) { + $matches[] = $pluginBasename; + } + } + + //It's possible (though very unlikely) that there could be two plugins with identical + //headers. In that case, we can't unambiguously identify the plugin that's being upgraded. + if ( count($matches) !== 1 ) { + return null; + } + + return reset($matches); + } + + /** + * @access private + * + * @param mixed $input + * @param array $hookExtra + * @return mixed Returns $input unaltered. + */ + public function setUpgradedThing($input, $hookExtra) { + if ( !empty($hookExtra['plugin']) && is_string($hookExtra['plugin']) ) { + $this->currentId = $hookExtra['plugin']; + $this->currentType = 'plugin'; + } elseif ( !empty($hookExtra['theme']) && is_string($hookExtra['theme']) ) { + $this->currentId = $hookExtra['theme']; + $this->currentType = 'theme'; + } else { + $this->currentType = null; + $this->currentId = null; + } + return $input; + } + + /** + * @access private + * + * @param array $options + * @return array + */ + public function setUpgradedPluginFromOptions($options) { + if ( isset($options['hook_extra']['plugin']) && is_string($options['hook_extra']['plugin']) ) { + $this->currentType = 'plugin'; + $this->currentId = $options['hook_extra']['plugin']; + } else { + $this->currentType = null; + $this->currentId = null; + } + return $options; + } + + /** + * @access private + * + * @param mixed $input + * @return mixed Returns $input unaltered. + */ + public function clearUpgradedThing($input = null) { + $this->currentId = null; + $this->currentType = null; + return $input; + } + } + +endif; diff --git a/vendor/yahnis-elsts/plugin-update-checker/Puc/v5p4/Utils.php b/vendor/yahnis-elsts/plugin-update-checker/Puc/v5p4/Utils.php new file mode 100644 index 0000000..2130996 --- /dev/null +++ b/vendor/yahnis-elsts/plugin-update-checker/Puc/v5p4/Utils.php @@ -0,0 +1,70 @@ +$node) ) { + $currentValue = $currentValue->$node; + } else { + return $default; + } + } + + return $currentValue; + } + + /** + * Get the first array element that is not empty. + * + * @param array $values + * @param mixed|null $default Returns this value if there are no non-empty elements. + * @return mixed|null + */ + public static function findNotEmpty($values, $default = null) { + if ( empty($values) ) { + return $default; + } + + foreach ($values as $value) { + if ( !empty($value) ) { + return $value; + } + } + + return $default; + } + + /** + * Check if the input string starts with the specified prefix. + * + * @param string $input + * @param string $prefix + * @return bool + */ + public static function startsWith($input, $prefix) { + $length = strlen($prefix); + return (substr($input, 0, $length) === $prefix); + } + } + +endif; diff --git a/vendor/yahnis-elsts/plugin-update-checker/Puc/v5p4/Vcs/Api.php b/vendor/yahnis-elsts/plugin-update-checker/Puc/v5p4/Vcs/Api.php new file mode 100644 index 0000000..715f1de --- /dev/null +++ b/vendor/yahnis-elsts/plugin-update-checker/Puc/v5p4/Vcs/Api.php @@ -0,0 +1,379 @@ +repositoryUrl = $repositoryUrl; + $this->setAuthentication($credentials); + } + + /** + * @return string + */ + public function getRepositoryUrl() { + return $this->repositoryUrl; + } + + /** + * Figure out which reference (i.e. tag or branch) contains the latest version. + * + * @param string $configBranch Start looking in this branch. + * @return null|Reference + */ + public function chooseReference($configBranch) { + $strategies = $this->getUpdateDetectionStrategies($configBranch); + + if ( !empty($this->strategyFilterName) ) { + $strategies = apply_filters( + $this->strategyFilterName, + $strategies, + $this->slug + ); + } + + foreach ($strategies as $strategy) { + $reference = call_user_func($strategy); + if ( !empty($reference) ) { + return $reference; + } + } + return null; + } + + /** + * Get an ordered list of strategies that can be used to find the latest version. + * + * The update checker will try each strategy in order until one of them + * returns a valid reference. + * + * @param string $configBranch + * @return array Array of callables that return Vcs_Reference objects. + */ + abstract protected function getUpdateDetectionStrategies($configBranch); + + /** + * Get the readme.txt file from the remote repository and parse it + * according to the plugin readme standard. + * + * @param string $ref Tag or branch name. + * @return array Parsed readme. + */ + public function getRemoteReadme($ref = 'master') { + $fileContents = $this->getRemoteFile($this->getLocalReadmeName(), $ref); + if ( empty($fileContents) ) { + return array(); + } + + $parser = new PucReadmeParser(); + return $parser->parse_readme_contents($fileContents); + } + + /** + * Get the case-sensitive name of the local readme.txt file. + * + * In most cases it should just be called "readme.txt", but some plugins call it "README.txt", + * "README.TXT", or even "Readme.txt". Most VCS are case-sensitive so we need to know the correct + * capitalization. + * + * Defaults to "readme.txt" (all lowercase). + * + * @return string + */ + public function getLocalReadmeName() { + static $fileName = null; + if ( $fileName !== null ) { + return $fileName; + } + + $fileName = 'readme.txt'; + if ( isset($this->localDirectory) ) { + $files = scandir($this->localDirectory); + if ( !empty($files) ) { + foreach ($files as $possibleFileName) { + if ( strcasecmp($possibleFileName, 'readme.txt') === 0 ) { + $fileName = $possibleFileName; + break; + } + } + } + } + return $fileName; + } + + /** + * Get a branch. + * + * @param string $branchName + * @return Reference|null + */ + abstract public function getBranch($branchName); + + /** + * Get a specific tag. + * + * @param string $tagName + * @return Reference|null + */ + abstract public function getTag($tagName); + + /** + * Get the tag that looks like the highest version number. + * (Implementations should skip pre-release versions if possible.) + * + * @return Reference|null + */ + abstract public function getLatestTag(); + + /** + * Check if a tag name string looks like a version number. + * + * @param string $name + * @return bool + */ + protected function looksLikeVersion($name) { + //Tag names may be prefixed with "v", e.g. "v1.2.3". + $name = ltrim($name, 'v'); + + //The version string must start with a number. + if ( !is_numeric(substr($name, 0, 1)) ) { + return false; + } + + //The goal is to accept any SemVer-compatible or "PHP-standardized" version number. + return (preg_match('@^(\d{1,5}?)(\.\d{1,10}?){0,4}?($|[abrdp+_\-]|\s)@i', $name) === 1); + } + + /** + * Check if a tag appears to be named like a version number. + * + * @param \stdClass $tag + * @return bool + */ + protected function isVersionTag($tag) { + $property = $this->tagNameProperty; + return isset($tag->$property) && $this->looksLikeVersion($tag->$property); + } + + /** + * Sort a list of tags as if they were version numbers. + * Tags that don't look like version number will be removed. + * + * @param \stdClass[] $tags Array of tag objects. + * @return \stdClass[] Filtered array of tags sorted in descending order. + */ + protected function sortTagsByVersion($tags) { + //Keep only those tags that look like version numbers. + $versionTags = array_filter($tags, array($this, 'isVersionTag')); + //Sort them in descending order. + usort($versionTags, array($this, 'compareTagNames')); + + return $versionTags; + } + + /** + * Compare two tags as if they were version number. + * + * @param \stdClass $tag1 Tag object. + * @param \stdClass $tag2 Another tag object. + * @return int + */ + protected function compareTagNames($tag1, $tag2) { + $property = $this->tagNameProperty; + if ( !isset($tag1->$property) ) { + return 1; + } + if ( !isset($tag2->$property) ) { + return -1; + } + return -version_compare(ltrim($tag1->$property, 'v'), ltrim($tag2->$property, 'v')); + } + + /** + * Get the contents of a file from a specific branch or tag. + * + * @param string $path File name. + * @param string $ref + * @return null|string Either the contents of the file, or null if the file doesn't exist or there's an error. + */ + abstract public function getRemoteFile($path, $ref = 'master'); + + /** + * Get the timestamp of the latest commit that changed the specified branch or tag. + * + * @param string $ref Reference name (e.g. branch or tag). + * @return string|null + */ + abstract public function getLatestCommitTime($ref); + + /** + * Get the contents of the changelog file from the repository. + * + * @param string $ref + * @param string $localDirectory Full path to the local plugin or theme directory. + * @return null|string The HTML contents of the changelog. + */ + public function getRemoteChangelog($ref, $localDirectory) { + $filename = $this->findChangelogName($localDirectory); + if ( empty($filename) ) { + return null; + } + + $changelog = $this->getRemoteFile($filename, $ref); + if ( $changelog === null ) { + return null; + } + + return Parsedown::instance()->text($changelog); + } + + /** + * Guess the name of the changelog file. + * + * @param string $directory + * @return string|null + */ + protected function findChangelogName($directory = null) { + if ( !isset($directory) ) { + $directory = $this->localDirectory; + } + if ( empty($directory) || !is_dir($directory) || ($directory === '.') ) { + return null; + } + + $possibleNames = array('CHANGES.md', 'CHANGELOG.md', 'changes.md', 'changelog.md'); + $files = scandir($directory); + $foundNames = array_intersect($possibleNames, $files); + + if ( !empty($foundNames) ) { + return reset($foundNames); + } + return null; + } + + /** + * Set authentication credentials. + * + * @param $credentials + */ + public function setAuthentication($credentials) { + $this->credentials = $credentials; + } + + public function isAuthenticationEnabled() { + return !empty($this->credentials); + } + + /** + * @param string $url + * @return string + */ + public function signDownloadUrl($url) { + return $url; + } + + /** + * @param string $filterName + */ + public function setHttpFilterName($filterName) { + $this->httpFilterName = $filterName; + } + + /** + * @param string $filterName + */ + public function setStrategyFilterName($filterName) { + $this->strategyFilterName = $filterName; + } + + /** + * @param string $directory + */ + public function setLocalDirectory($directory) { + if ( empty($directory) || !is_dir($directory) || ($directory === '.') ) { + $this->localDirectory = null; + } else { + $this->localDirectory = $directory; + } + } + + /** + * @param string $slug + */ + public function setSlug($slug) { + $this->slug = $slug; + } + } + +endif; diff --git a/vendor/yahnis-elsts/plugin-update-checker/Puc/v5p4/Vcs/BaseChecker.php b/vendor/yahnis-elsts/plugin-update-checker/Puc/v5p4/Vcs/BaseChecker.php new file mode 100644 index 0000000..78e0dde --- /dev/null +++ b/vendor/yahnis-elsts/plugin-update-checker/Puc/v5p4/Vcs/BaseChecker.php @@ -0,0 +1,29 @@ +[^/]+?)/(?P[^/#?&]+?)/?$@', $path, $matches) ) { + $this->username = $matches['username']; + $this->repository = $matches['repository']; + } else { + throw new \InvalidArgumentException('Invalid BitBucket repository URL: "' . $repositoryUrl . '"'); + } + + parent::__construct($repositoryUrl, $credentials); + } + + protected function getUpdateDetectionStrategies($configBranch) { + $strategies = array( + self::STRATEGY_STABLE_TAG => function () use ($configBranch) { + return $this->getStableTag($configBranch); + }, + ); + + if ( ($configBranch === 'master' || $configBranch === 'main') ) { + $strategies[self::STRATEGY_LATEST_TAG] = array($this, 'getLatestTag'); + } + + $strategies[self::STRATEGY_BRANCH] = function () use ($configBranch) { + return $this->getBranch($configBranch); + }; + return $strategies; + } + + public function getBranch($branchName) { + $branch = $this->api('/refs/branches/' . $branchName); + if ( is_wp_error($branch) || empty($branch) ) { + return null; + } + + //The "/src/{stuff}/{path}" endpoint doesn't seem to handle branch names that contain slashes. + //If we don't encode the slash, we get a 404. If we encode it as "%2F", we get a 401. + //To avoid issues, if the branch name is not URL-safe, let's use the commit hash instead. + $ref = $branch->name; + if ((urlencode($ref) !== $ref) && isset($branch->target->hash)) { + $ref = $branch->target->hash; + } + + return new Reference(array( + 'name' => $ref, + 'updated' => $branch->target->date, + 'downloadUrl' => $this->getDownloadUrl($branch->name), + )); + } + + /** + * Get a specific tag. + * + * @param string $tagName + * @return Reference|null + */ + public function getTag($tagName) { + $tag = $this->api('/refs/tags/' . $tagName); + if ( is_wp_error($tag) || empty($tag) ) { + return null; + } + + return new Reference(array( + 'name' => $tag->name, + 'version' => ltrim($tag->name, 'v'), + 'updated' => $tag->target->date, + 'downloadUrl' => $this->getDownloadUrl($tag->name), + )); + } + + /** + * Get the tag that looks like the highest version number. + * + * @return Reference|null + */ + public function getLatestTag() { + $tags = $this->api('/refs/tags?sort=-target.date'); + if ( !isset($tags, $tags->values) || !is_array($tags->values) ) { + return null; + } + + //Filter and sort the list of tags. + $versionTags = $this->sortTagsByVersion($tags->values); + + //Return the first result. + if ( !empty($versionTags) ) { + $tag = $versionTags[0]; + return new Reference(array( + 'name' => $tag->name, + 'version' => ltrim($tag->name, 'v'), + 'updated' => $tag->target->date, + 'downloadUrl' => $this->getDownloadUrl($tag->name), + )); + } + return null; + } + + /** + * Get the tag/ref specified by the "Stable tag" header in the readme.txt of a given branch. + * + * @param string $branch + * @return null|Reference + */ + protected function getStableTag($branch) { + $remoteReadme = $this->getRemoteReadme($branch); + if ( !empty($remoteReadme['stable_tag']) ) { + $tag = $remoteReadme['stable_tag']; + + //You can explicitly opt out of using tags by setting "Stable tag" to + //"trunk" or the name of the current branch. + if ( ($tag === $branch) || ($tag === 'trunk') ) { + return $this->getBranch($branch); + } + + return $this->getTag($tag); + } + + return null; + } + + /** + * @param string $ref + * @return string + */ + protected function getDownloadUrl($ref) { + return sprintf( + 'https://bitbucket.org/%s/%s/get/%s.zip', + $this->username, + $this->repository, + $ref + ); + } + + /** + * Get the contents of a file from a specific branch or tag. + * + * @param string $path File name. + * @param string $ref + * @return null|string Either the contents of the file, or null if the file doesn't exist or there's an error. + */ + public function getRemoteFile($path, $ref = 'master') { + $response = $this->api('src/' . $ref . '/' . ltrim($path)); + if ( is_wp_error($response) || !is_string($response) ) { + return null; + } + return $response; + } + + /** + * Get the timestamp of the latest commit that changed the specified branch or tag. + * + * @param string $ref Reference name (e.g. branch or tag). + * @return string|null + */ + public function getLatestCommitTime($ref) { + $response = $this->api('commits/' . $ref); + if ( isset($response->values, $response->values[0], $response->values[0]->date) ) { + return $response->values[0]->date; + } + return null; + } + + /** + * Perform a BitBucket API 2.0 request. + * + * @param string $url + * @param string $version + * @return mixed|\WP_Error + */ + public function api($url, $version = '2.0') { + $url = ltrim($url, '/'); + $isSrcResource = Utils::startsWith($url, 'src/'); + + $url = implode('/', array( + 'https://api.bitbucket.org', + $version, + 'repositories', + $this->username, + $this->repository, + $url + )); + $baseUrl = $url; + + if ( $this->oauth ) { + $url = $this->oauth->sign($url,'GET'); + } + + $options = array('timeout' => wp_doing_cron() ? 10 : 3); + if ( !empty($this->httpFilterName) ) { + $options = apply_filters($this->httpFilterName, $options); + } + $response = wp_remote_get($url, $options); + if ( is_wp_error($response) ) { + do_action('puc_api_error', $response, null, $url, $this->slug); + return $response; + } + + $code = wp_remote_retrieve_response_code($response); + $body = wp_remote_retrieve_body($response); + if ( $code === 200 ) { + if ( $isSrcResource ) { + //Most responses are JSON-encoded, but src resources just + //return raw file contents. + $document = $body; + } else { + $document = json_decode($body); + } + return $document; + } + + $error = new \WP_Error( + 'puc-bitbucket-http-error', + sprintf('BitBucket API error. Base URL: "%s", HTTP status code: %d.', $baseUrl, $code) + ); + do_action('puc_api_error', $error, $response, $url, $this->slug); + + return $error; + } + + /** + * @param array $credentials + */ + public function setAuthentication($credentials) { + parent::setAuthentication($credentials); + + if ( !empty($credentials) && !empty($credentials['consumer_key']) ) { + $this->oauth = new OAuthSignature( + $credentials['consumer_key'], + $credentials['consumer_secret'] + ); + } else { + $this->oauth = null; + } + } + + public function signDownloadUrl($url) { + //Add authentication data to download URLs. Since OAuth signatures incorporate + //timestamps, we have to do this immediately before inserting the update. Otherwise, + //authentication could fail due to a stale timestamp. + if ( $this->oauth ) { + $url = $this->oauth->sign($url); + } + return $url; + } + } + +endif; diff --git a/vendor/yahnis-elsts/plugin-update-checker/Puc/v5p4/Vcs/GitHubApi.php b/vendor/yahnis-elsts/plugin-update-checker/Puc/v5p4/Vcs/GitHubApi.php new file mode 100644 index 0000000..610d932 --- /dev/null +++ b/vendor/yahnis-elsts/plugin-update-checker/Puc/v5p4/Vcs/GitHubApi.php @@ -0,0 +1,467 @@ +[^/]+?)/(?P[^/#?&]+?)/?$@', $path, $matches) ) { + $this->userName = $matches['username']; + $this->repositoryName = $matches['repository']; + } else { + throw new \InvalidArgumentException('Invalid GitHub repository URL: "' . $repositoryUrl . '"'); + } + + parent::__construct($repositoryUrl, $accessToken); + } + + /** + * Get the latest release from GitHub. + * + * @return Reference|null + */ + public function getLatestRelease() { + //The "latest release" endpoint returns one release and always skips pre-releases, + //so we can only use it if that's compatible with the current filter settings. + if ( + $this->shouldSkipPreReleases() + && ( + ($this->releaseFilterMaxReleases === 1) || !$this->hasCustomReleaseFilter() + ) + ) { + //Just get the latest release. + $release = $this->api('/repos/:user/:repo/releases/latest'); + if ( is_wp_error($release) || !is_object($release) || !isset($release->tag_name) ) { + return null; + } + $foundReleases = array($release); + } else { + //Get a list of the most recent releases. + $foundReleases = $this->api( + '/repos/:user/:repo/releases', + array('per_page' => $this->releaseFilterMaxReleases) + ); + if ( is_wp_error($foundReleases) || !is_array($foundReleases) ) { + return null; + } + } + + foreach ($foundReleases as $release) { + //Always skip drafts. + if ( isset($release->draft) && !empty($release->draft) ) { + continue; + } + + //Skip pre-releases unless specifically included. + if ( + $this->shouldSkipPreReleases() + && isset($release->prerelease) + && !empty($release->prerelease) + ) { + continue; + } + + $versionNumber = ltrim($release->tag_name, 'v'); //Remove the "v" prefix from "v1.2.3". + + //Custom release filtering. + if ( !$this->matchesCustomReleaseFilter($versionNumber, $release) ) { + continue; + } + + $reference = new Reference(array( + 'name' => $release->tag_name, + 'version' => $versionNumber, + 'downloadUrl' => $release->zipball_url, + 'updated' => $release->created_at, + 'apiResponse' => $release, + )); + + if ( isset($release->assets[0]) ) { + $reference->downloadCount = $release->assets[0]->download_count; + } + + if ( $this->releaseAssetsEnabled ) { + //Use the first release asset that matches the specified regular expression. + if ( isset($release->assets, $release->assets[0]) ) { + $matchingAssets = array_values(array_filter($release->assets, array($this, 'matchesAssetFilter'))); + } else { + $matchingAssets = array(); + } + + if ( !empty($matchingAssets) ) { + if ( $this->isAuthenticationEnabled() ) { + /** + * Keep in mind that we'll need to add an "Accept" header to download this asset. + * + * @see setUpdateDownloadHeaders() + */ + $reference->downloadUrl = $matchingAssets[0]->url; + } else { + //It seems that browser_download_url only works for public repositories. + //Using an access_token doesn't help. Maybe OAuth would work? + $reference->downloadUrl = $matchingAssets[0]->browser_download_url; + } + + $reference->downloadCount = $matchingAssets[0]->download_count; + } else if ( $this->releaseAssetPreference === Api::REQUIRE_RELEASE_ASSETS ) { + //None of the assets match the filter, and we're not allowed + //to fall back to the auto-generated source ZIP. + return null; + } + } + + if ( !empty($release->body) ) { + $reference->changelog = Parsedown::instance()->text($release->body); + } + + return $reference; + } + + return null; + } + + /** + * Get the tag that looks like the highest version number. + * + * @return Reference|null + */ + public function getLatestTag() { + $tags = $this->api('/repos/:user/:repo/tags'); + + if ( is_wp_error($tags) || !is_array($tags) ) { + return null; + } + + $versionTags = $this->sortTagsByVersion($tags); + if ( empty($versionTags) ) { + return null; + } + + $tag = $versionTags[0]; + return new Reference(array( + 'name' => $tag->name, + 'version' => ltrim($tag->name, 'v'), + 'downloadUrl' => $tag->zipball_url, + 'apiResponse' => $tag, + )); + } + + /** + * Get a branch by name. + * + * @param string $branchName + * @return null|Reference + */ + public function getBranch($branchName) { + $branch = $this->api('/repos/:user/:repo/branches/' . $branchName); + if ( is_wp_error($branch) || empty($branch) ) { + return null; + } + + $reference = new Reference(array( + 'name' => $branch->name, + 'downloadUrl' => $this->buildArchiveDownloadUrl($branch->name), + 'apiResponse' => $branch, + )); + + if ( isset($branch->commit, $branch->commit->commit, $branch->commit->commit->author->date) ) { + $reference->updated = $branch->commit->commit->author->date; + } + + return $reference; + } + + /** + * Get the latest commit that changed the specified file. + * + * @param string $filename + * @param string $ref Reference name (e.g. branch or tag). + * @return \StdClass|null + */ + public function getLatestCommit($filename, $ref = 'master') { + $commits = $this->api( + '/repos/:user/:repo/commits', + array( + 'path' => $filename, + 'sha' => $ref, + ) + ); + if ( !is_wp_error($commits) && isset($commits[0]) ) { + return $commits[0]; + } + return null; + } + + /** + * Get the timestamp of the latest commit that changed the specified branch or tag. + * + * @param string $ref Reference name (e.g. branch or tag). + * @return string|null + */ + public function getLatestCommitTime($ref) { + $commits = $this->api('/repos/:user/:repo/commits', array('sha' => $ref)); + if ( !is_wp_error($commits) && isset($commits[0]) ) { + return $commits[0]->commit->author->date; + } + return null; + } + + /** + * Perform a GitHub API request. + * + * @param string $url + * @param array $queryParams + * @return mixed|\WP_Error + */ + protected function api($url, $queryParams = array()) { + $baseUrl = $url; + $url = $this->buildApiUrl($url, $queryParams); + + $options = array('timeout' => wp_doing_cron() ? 10 : 3); + if ( $this->isAuthenticationEnabled() ) { + $options['headers'] = array('Authorization' => $this->getAuthorizationHeader()); + } + + if ( !empty($this->httpFilterName) ) { + $options = apply_filters($this->httpFilterName, $options); + } + $response = wp_remote_get($url, $options); + if ( is_wp_error($response) ) { + do_action('puc_api_error', $response, null, $url, $this->slug); + return $response; + } + + $code = wp_remote_retrieve_response_code($response); + $body = wp_remote_retrieve_body($response); + if ( $code === 200 ) { + $document = json_decode($body); + return $document; + } + + $error = new \WP_Error( + 'puc-github-http-error', + sprintf('GitHub API error. Base URL: "%s", HTTP status code: %d.', $baseUrl, $code) + ); + do_action('puc_api_error', $error, $response, $url, $this->slug); + + return $error; + } + + /** + * Build a fully qualified URL for an API request. + * + * @param string $url + * @param array $queryParams + * @return string + */ + protected function buildApiUrl($url, $queryParams) { + $variables = array( + 'user' => $this->userName, + 'repo' => $this->repositoryName, + ); + foreach ($variables as $name => $value) { + $url = str_replace('/:' . $name, '/' . urlencode($value), $url); + } + $url = 'https://api.github.com' . $url; + + if ( !empty($queryParams) ) { + $url = add_query_arg($queryParams, $url); + } + + return $url; + } + + /** + * Get the contents of a file from a specific branch or tag. + * + * @param string $path File name. + * @param string $ref + * @return null|string Either the contents of the file, or null if the file doesn't exist or there's an error. + */ + public function getRemoteFile($path, $ref = 'master') { + $apiUrl = '/repos/:user/:repo/contents/' . $path; + $response = $this->api($apiUrl, array('ref' => $ref)); + + if ( is_wp_error($response) || !isset($response->content) || ($response->encoding !== 'base64') ) { + return null; + } + return base64_decode($response->content); + } + + /** + * Generate a URL to download a ZIP archive of the specified branch/tag/etc. + * + * @param string $ref + * @return string + */ + public function buildArchiveDownloadUrl($ref = 'master') { + $url = sprintf( + 'https://api.github.com/repos/%1$s/%2$s/zipball/%3$s', + urlencode($this->userName), + urlencode($this->repositoryName), + urlencode($ref) + ); + return $url; + } + + /** + * Get a specific tag. + * + * @param string $tagName + * @return void + */ + public function getTag($tagName) { + //The current GitHub update checker doesn't use getTag, so I didn't bother to implement it. + throw new \LogicException('The ' . __METHOD__ . ' method is not implemented and should not be used.'); + } + + public function setAuthentication($credentials) { + parent::setAuthentication($credentials); + $this->accessToken = is_string($credentials) ? $credentials : null; + + //Optimization: Instead of filtering all HTTP requests, let's do it only when + //WordPress is about to download an update. + add_filter('upgrader_pre_download', array($this, 'addHttpRequestFilter'), 10, 1); //WP 3.7+ + } + + protected function getUpdateDetectionStrategies($configBranch) { + $strategies = array(); + + if ( $configBranch === 'master' || $configBranch === 'main') { + //Use the latest release. + $strategies[self::STRATEGY_LATEST_RELEASE] = array($this, 'getLatestRelease'); + //Failing that, use the tag with the highest version number. + $strategies[self::STRATEGY_LATEST_TAG] = array($this, 'getLatestTag'); + } + + //Alternatively, just use the branch itself. + $strategies[self::STRATEGY_BRANCH] = function () use ($configBranch) { + return $this->getBranch($configBranch); + }; + + return $strategies; + } + + /** + * Get the unchanging part of a release asset URL. Used to identify download attempts. + * + * @return string + */ + protected function getAssetApiBaseUrl() { + return sprintf( + '//api.github.com/repos/%1$s/%2$s/releases/assets/', + $this->userName, + $this->repositoryName + ); + } + + protected function getFilterableAssetName($releaseAsset) { + if ( isset($releaseAsset->name) ) { + return $releaseAsset->name; + } + return null; + } + + /** + * @param bool $result + * @return bool + * @internal + */ + public function addHttpRequestFilter($result) { + if ( !$this->downloadFilterAdded && $this->isAuthenticationEnabled() ) { + //phpcs:ignore WordPressVIPMinimum.Hooks.RestrictedHooks.http_request_args -- The callback doesn't change the timeout. + add_filter('http_request_args', array($this, 'setUpdateDownloadHeaders'), 10, 2); + add_action('requests-requests.before_redirect', array($this, 'removeAuthHeaderFromRedirects'), 10, 4); + $this->downloadFilterAdded = true; + } + return $result; + } + + /** + * Set the HTTP headers that are necessary to download updates from private repositories. + * + * See GitHub docs: + * + * @link https://developer.github.com/v3/repos/releases/#get-a-single-release-asset + * @link https://developer.github.com/v3/auth/#basic-authentication + * + * @internal + * @param array $requestArgs + * @param string $url + * @return array + */ + public function setUpdateDownloadHeaders($requestArgs, $url = '') { + //Is WordPress trying to download one of our release assets? + if ( $this->releaseAssetsEnabled && (strpos($url, $this->getAssetApiBaseUrl()) !== false) ) { + $requestArgs['headers']['Accept'] = 'application/octet-stream'; + } + //Use Basic authentication, but only if the download is from our repository. + $repoApiBaseUrl = $this->buildApiUrl('/repos/:user/:repo/', array()); + if ( $this->isAuthenticationEnabled() && (strpos($url, $repoApiBaseUrl)) === 0 ) { + $requestArgs['headers']['Authorization'] = $this->getAuthorizationHeader(); + } + return $requestArgs; + } + + /** + * When following a redirect, the Requests library will automatically forward + * the authorization header to other hosts. We don't want that because it breaks + * AWS downloads and can leak authorization information. + * + * @param string $location + * @param array $headers + * @internal + */ + public function removeAuthHeaderFromRedirects(&$location, &$headers) { + $repoApiBaseUrl = $this->buildApiUrl('/repos/:user/:repo/', array()); + if ( strpos($location, $repoApiBaseUrl) === 0 ) { + return; //This request is going to GitHub, so it's fine. + } + //Remove the header. + if ( isset($headers['Authorization']) ) { + unset($headers['Authorization']); + } + } + + /** + * Generate the value of the "Authorization" header. + * + * @return string + */ + protected function getAuthorizationHeader() { + return 'Basic ' . base64_encode($this->userName . ':' . $this->accessToken); + } + } + +endif; diff --git a/vendor/yahnis-elsts/plugin-update-checker/Puc/v5p4/Vcs/GitLabApi.php b/vendor/yahnis-elsts/plugin-update-checker/Puc/v5p4/Vcs/GitLabApi.php new file mode 100644 index 0000000..2cbd6eb --- /dev/null +++ b/vendor/yahnis-elsts/plugin-update-checker/Puc/v5p4/Vcs/GitLabApi.php @@ -0,0 +1,414 @@ +repositoryHost = wp_parse_url($repositoryUrl, PHP_URL_HOST) . $port; + + if ( $this->repositoryHost !== 'gitlab.com' ) { + $this->repositoryProtocol = wp_parse_url($repositoryUrl, PHP_URL_SCHEME); + } + + //Find the repository information + $path = wp_parse_url($repositoryUrl, PHP_URL_PATH); + if ( preg_match('@^/?(?P[^/]+?)/(?P[^/#?&]+?)/?$@', $path, $matches) ) { + $this->userName = $matches['username']; + $this->repositoryName = $matches['repository']; + } elseif ( ($this->repositoryHost === 'gitlab.com') ) { + //This is probably a repository in a subgroup, e.g. "/organization/category/repo". + $parts = explode('/', trim($path, '/')); + if ( count($parts) < 3 ) { + throw new \InvalidArgumentException('Invalid GitLab.com repository URL: "' . $repositoryUrl . '"'); + } + $lastPart = array_pop($parts); + $this->userName = implode('/', $parts); + $this->repositoryName = $lastPart; + } else { + //There could be subgroups in the URL: gitlab.domain.com/group/subgroup/subgroup2/repository + if ( $subgroup !== null ) { + $path = str_replace(trailingslashit($subgroup), '', $path); + } + + //This is not a traditional url, it could be gitlab is in a deeper subdirectory. + //Get the path segments. + $segments = explode('/', untrailingslashit(ltrim($path, '/'))); + + //We need at least /user-name/repository-name/ + if ( count($segments) < 2 ) { + throw new \InvalidArgumentException('Invalid GitLab repository URL: "' . $repositoryUrl . '"'); + } + + //Get the username and repository name. + $usernameRepo = array_splice($segments, -2, 2); + $this->userName = $usernameRepo[0]; + $this->repositoryName = $usernameRepo[1]; + + //Append the remaining segments to the host if there are segments left. + if ( count($segments) > 0 ) { + $this->repositoryHost = trailingslashit($this->repositoryHost) . implode('/', $segments); + } + + //Add subgroups to username. + if ( $subgroup !== null ) { + $this->userName = $usernameRepo[0] . '/' . untrailingslashit($subgroup); + } + } + + parent::__construct($repositoryUrl, $accessToken); + } + + /** + * Get the latest release from GitLab. + * + * @return Reference|null + */ + public function getLatestRelease() { + $releases = $this->api('/:id/releases', array('per_page' => $this->releaseFilterMaxReleases)); + if ( is_wp_error($releases) || empty($releases) || !is_array($releases) ) { + return null; + } + + foreach ($releases as $release) { + if ( + //Skip invalid/unsupported releases. + !is_object($release) + || !isset($release->tag_name) + //Skip upcoming releases. + || ( + !empty($release->upcoming_release) + && $this->shouldSkipPreReleases() + ) + ) { + continue; + } + + $versionNumber = ltrim($release->tag_name, 'v'); //Remove the "v" prefix from "v1.2.3". + + //Apply custom filters. + if ( !$this->matchesCustomReleaseFilter($versionNumber, $release) ) { + continue; + } + + $downloadUrl = $this->findReleaseDownloadUrl($release); + if ( empty($downloadUrl) ) { + //The latest release doesn't have valid download URL. + return null; + } + + if ( !empty($this->accessToken) ) { + $downloadUrl = add_query_arg('private_token', $this->accessToken, $downloadUrl); + } + + return new Reference(array( + 'name' => $release->tag_name, + 'version' => $versionNumber, + 'downloadUrl' => $downloadUrl, + 'updated' => $release->released_at, + 'apiResponse' => $release, + )); + } + + return null; + } + + /** + * @param object $release + * @return string|null + */ + protected function findReleaseDownloadUrl($release) { + if ( $this->releaseAssetsEnabled ) { + if ( isset($release->assets, $release->assets->links) ) { + //Use the first asset link where the URL matches the filter. + foreach ($release->assets->links as $link) { + if ( $this->matchesAssetFilter($link) ) { + return $link->url; + } + } + } + + if ( $this->releaseAssetPreference === Api::REQUIRE_RELEASE_ASSETS ) { + //Falling back to source archives is not allowed, so give up. + return null; + } + } + + //Use the first source code archive that's in ZIP format. + foreach ($release->assets->sources as $source) { + if ( isset($source->format) && ($source->format === 'zip') ) { + return $source->url; + } + } + + return null; + } + + /** + * Get the tag that looks like the highest version number. + * + * @return Reference|null + */ + public function getLatestTag() { + $tags = $this->api('/:id/repository/tags'); + if ( is_wp_error($tags) || empty($tags) || !is_array($tags) ) { + return null; + } + + $versionTags = $this->sortTagsByVersion($tags); + if ( empty($versionTags) ) { + return null; + } + + $tag = $versionTags[0]; + return new Reference(array( + 'name' => $tag->name, + 'version' => ltrim($tag->name, 'v'), + 'downloadUrl' => $this->buildArchiveDownloadUrl($tag->name), + 'apiResponse' => $tag, + )); + } + + /** + * Get a branch by name. + * + * @param string $branchName + * @return null|Reference + */ + public function getBranch($branchName) { + $branch = $this->api('/:id/repository/branches/' . $branchName); + if ( is_wp_error($branch) || empty($branch) ) { + return null; + } + + $reference = new Reference(array( + 'name' => $branch->name, + 'downloadUrl' => $this->buildArchiveDownloadUrl($branch->name), + 'apiResponse' => $branch, + )); + + if ( isset($branch->commit, $branch->commit->committed_date) ) { + $reference->updated = $branch->commit->committed_date; + } + + return $reference; + } + + /** + * Get the timestamp of the latest commit that changed the specified branch or tag. + * + * @param string $ref Reference name (e.g. branch or tag). + * @return string|null + */ + public function getLatestCommitTime($ref) { + $commits = $this->api('/:id/repository/commits/', array('ref_name' => $ref)); + if ( is_wp_error($commits) || !is_array($commits) || !isset($commits[0]) ) { + return null; + } + + return $commits[0]->committed_date; + } + + /** + * Perform a GitLab API request. + * + * @param string $url + * @param array $queryParams + * @return mixed|\WP_Error + */ + protected function api($url, $queryParams = array()) { + $baseUrl = $url; + $url = $this->buildApiUrl($url, $queryParams); + + $options = array('timeout' => wp_doing_cron() ? 10 : 3); + if ( !empty($this->httpFilterName) ) { + $options = apply_filters($this->httpFilterName, $options); + } + + $response = wp_remote_get($url, $options); + if ( is_wp_error($response) ) { + do_action('puc_api_error', $response, null, $url, $this->slug); + return $response; + } + + $code = wp_remote_retrieve_response_code($response); + $body = wp_remote_retrieve_body($response); + if ( $code === 200 ) { + return json_decode($body); + } + + $error = new \WP_Error( + 'puc-gitlab-http-error', + sprintf('GitLab API error. URL: "%s", HTTP status code: %d.', $baseUrl, $code) + ); + do_action('puc_api_error', $error, $response, $url, $this->slug); + + return $error; + } + + /** + * Build a fully qualified URL for an API request. + * + * @param string $url + * @param array $queryParams + * @return string + */ + protected function buildApiUrl($url, $queryParams) { + $variables = array( + 'user' => $this->userName, + 'repo' => $this->repositoryName, + 'id' => $this->userName . '/' . $this->repositoryName, + ); + + foreach ($variables as $name => $value) { + $url = str_replace("/:{$name}", '/' . urlencode($value), $url); + } + + $url = substr($url, 1); + $url = sprintf('%1$s://%2$s/api/v4/projects/%3$s', $this->repositoryProtocol, $this->repositoryHost, $url); + + if ( !empty($this->accessToken) ) { + $queryParams['private_token'] = $this->accessToken; + } + + if ( !empty($queryParams) ) { + $url = add_query_arg($queryParams, $url); + } + + return $url; + } + + /** + * Get the contents of a file from a specific branch or tag. + * + * @param string $path File name. + * @param string $ref + * @return null|string Either the contents of the file, or null if the file doesn't exist or there's an error. + */ + public function getRemoteFile($path, $ref = 'master') { + $response = $this->api('/:id/repository/files/' . $path, array('ref' => $ref)); + if ( is_wp_error($response) || !isset($response->content) || $response->encoding !== 'base64' ) { + return null; + } + + return base64_decode($response->content); + } + + /** + * Generate a URL to download a ZIP archive of the specified branch/tag/etc. + * + * @param string $ref + * @return string + */ + public function buildArchiveDownloadUrl($ref = 'master') { + $url = sprintf( + '%1$s://%2$s/api/v4/projects/%3$s/repository/archive.zip', + $this->repositoryProtocol, + $this->repositoryHost, + urlencode($this->userName . '/' . $this->repositoryName) + ); + $url = add_query_arg('sha', urlencode($ref), $url); + + if ( !empty($this->accessToken) ) { + $url = add_query_arg('private_token', $this->accessToken, $url); + } + + return $url; + } + + /** + * Get a specific tag. + * + * @param string $tagName + * @return void + */ + public function getTag($tagName) { + throw new \LogicException('The ' . __METHOD__ . ' method is not implemented and should not be used.'); + } + + protected function getUpdateDetectionStrategies($configBranch) { + $strategies = array(); + + if ( ($configBranch === 'main') || ($configBranch === 'master') ) { + $strategies[self::STRATEGY_LATEST_RELEASE] = array($this, 'getLatestRelease'); + $strategies[self::STRATEGY_LATEST_TAG] = array($this, 'getLatestTag'); + } + + $strategies[self::STRATEGY_BRANCH] = function () use ($configBranch) { + return $this->getBranch($configBranch); + }; + + return $strategies; + } + + public function setAuthentication($credentials) { + parent::setAuthentication($credentials); + $this->accessToken = is_string($credentials) ? $credentials : null; + } + + /** + * Use release assets that link to GitLab generic packages (e.g. .zip files) + * instead of automatically generated source archives. + * + * This is included for backwards compatibility with older versions of PUC. + * + * @return void + * @deprecated Use enableReleaseAssets() instead. + * @noinspection PhpUnused -- Public API + */ + public function enableReleasePackages() { + $this->enableReleaseAssets( + /** @lang RegExp */ '/\.zip($|[?&#])/i', + Api::REQUIRE_RELEASE_ASSETS + ); + } + + protected function getFilterableAssetName($releaseAsset) { + if ( isset($releaseAsset->url) ) { + return $releaseAsset->url; + } + return null; + } + } + +endif; diff --git a/vendor/yahnis-elsts/plugin-update-checker/Puc/v5p4/Vcs/PluginUpdateChecker.php b/vendor/yahnis-elsts/plugin-update-checker/Puc/v5p4/Vcs/PluginUpdateChecker.php new file mode 100644 index 0000000..f00097f --- /dev/null +++ b/vendor/yahnis-elsts/plugin-update-checker/Puc/v5p4/Vcs/PluginUpdateChecker.php @@ -0,0 +1,275 @@ +api = $api; + + parent::__construct($api->getRepositoryUrl(), $pluginFile, $slug, $checkPeriod, $optionName, $muPluginFile); + + $this->api->setHttpFilterName($this->getUniqueName('request_info_options')); + $this->api->setStrategyFilterName($this->getUniqueName('vcs_update_detection_strategies')); + $this->api->setSlug($this->slug); + } + + public function requestInfo($unusedParameter = null) { + //We have to make several remote API requests to gather all the necessary info + //which can take a while on slow networks. + if ( function_exists('set_time_limit') ) { + @set_time_limit(60); + } + + $api = $this->api; + $api->setLocalDirectory($this->package->getAbsoluteDirectoryPath()); + + $info = new Plugin\PluginInfo(); + $info->filename = $this->pluginFile; + $info->slug = $this->slug; + + $this->setInfoFromHeader($this->package->getPluginHeader(), $info); + $this->setIconsFromLocalAssets($info); + $this->setBannersFromLocalAssets($info); + + //Pick a branch or tag. + $updateSource = $api->chooseReference($this->branch); + if ( $updateSource ) { + $ref = $updateSource->name; + $info->version = $updateSource->version; + $info->last_updated = $updateSource->updated; + $info->download_url = $updateSource->downloadUrl; + + if ( !empty($updateSource->changelog) ) { + $info->sections['changelog'] = $updateSource->changelog; + } + if ( isset($updateSource->downloadCount) ) { + $info->downloaded = $updateSource->downloadCount; + } + } else { + //There's probably a network problem or an authentication error. + do_action( + 'puc_api_error', + new \WP_Error( + 'puc-no-update-source', + 'Could not retrieve version information from the repository. ' + . 'This usually means that the update checker either can\'t connect ' + . 'to the repository or it\'s configured incorrectly.' + ), + null, null, $this->slug + ); + return null; + } + + //Get headers from the main plugin file in this branch/tag. Its "Version" header and other metadata + //are what the WordPress install will actually see after upgrading, so they take precedence over releases/tags. + $mainPluginFile = basename($this->pluginFile); + $remotePlugin = $api->getRemoteFile($mainPluginFile, $ref); + if ( !empty($remotePlugin) ) { + $remoteHeader = $this->package->getFileHeader($remotePlugin); + $this->setInfoFromHeader($remoteHeader, $info); + } + + //Sanity check: Reject updates that don't have a version number. + //This can happen when we're using a branch, and we either fail to retrieve the main plugin + //file or the file doesn't have a "Version" header. + if ( empty($info->version) ) { + do_action( + 'puc_api_error', + new \WP_Error( + 'puc-no-plugin-version', + 'Could not find the version number in the repository.' + ), + null, null, $this->slug + ); + return null; + } + + //Try parsing readme.txt. If it's formatted according to WordPress.org standards, it will contain + //a lot of useful information like the required/tested WP version, changelog, and so on. + if ( $this->readmeTxtExistsLocally() ) { + $this->setInfoFromRemoteReadme($ref, $info); + } + + //The changelog might be in a separate file. + if ( empty($info->sections['changelog']) ) { + $info->sections['changelog'] = $api->getRemoteChangelog($ref, $this->package->getAbsoluteDirectoryPath()); + if ( empty($info->sections['changelog']) ) { + $info->sections['changelog'] = __('There is no changelog available.', 'plugin-update-checker'); + } + } + + if ( empty($info->last_updated) ) { + //Fetch the latest commit that changed the tag or branch and use it as the "last_updated" date. + $latestCommitTime = $api->getLatestCommitTime($ref); + if ( $latestCommitTime !== null ) { + $info->last_updated = $latestCommitTime; + } + } + + $info = apply_filters($this->getUniqueName('request_info_result'), $info, null); + return $info; + } + + /** + * Check if the currently installed version has a readme.txt file. + * + * @return bool + */ + protected function readmeTxtExistsLocally() { + return $this->package->fileExists($this->api->getLocalReadmeName()); + } + + /** + * Copy plugin metadata from a file header to a Plugin Info object. + * + * @param array $fileHeader + * @param Plugin\PluginInfo $pluginInfo + */ + protected function setInfoFromHeader($fileHeader, $pluginInfo) { + $headerToPropertyMap = array( + 'Version' => 'version', + 'Name' => 'name', + 'PluginURI' => 'homepage', + 'Author' => 'author', + 'AuthorName' => 'author', + 'AuthorURI' => 'author_homepage', + + 'Requires WP' => 'requires', + 'Tested WP' => 'tested', + 'Requires at least' => 'requires', + 'Tested up to' => 'tested', + + 'Requires PHP' => 'requires_php', + ); + foreach ($headerToPropertyMap as $headerName => $property) { + if ( isset($fileHeader[$headerName]) && !empty($fileHeader[$headerName]) ) { + $pluginInfo->$property = $fileHeader[$headerName]; + } + } + + if ( !empty($fileHeader['Description']) ) { + $pluginInfo->sections['description'] = $fileHeader['Description']; + } + } + + /** + * Copy plugin metadata from the remote readme.txt file. + * + * @param string $ref GitHub tag or branch where to look for the readme. + * @param Plugin\PluginInfo $pluginInfo + */ + protected function setInfoFromRemoteReadme($ref, $pluginInfo) { + $readme = $this->api->getRemoteReadme($ref); + if ( empty($readme) ) { + return; + } + + if ( isset($readme['sections']) ) { + $pluginInfo->sections = array_merge($pluginInfo->sections, $readme['sections']); + } + if ( !empty($readme['tested_up_to']) ) { + $pluginInfo->tested = $readme['tested_up_to']; + } + if ( !empty($readme['requires_at_least']) ) { + $pluginInfo->requires = $readme['requires_at_least']; + } + if ( !empty($readme['requires_php']) ) { + $pluginInfo->requires_php = $readme['requires_php']; + } + + if ( isset($readme['upgrade_notice'], $readme['upgrade_notice'][$pluginInfo->version]) ) { + $pluginInfo->upgrade_notice = $readme['upgrade_notice'][$pluginInfo->version]; + } + } + + /** + * Add icons from the currently installed version to a Plugin Info object. + * + * The icons should be in a subdirectory named "assets". Supported image formats + * and file names are described here: + * @link https://developer.wordpress.org/plugins/wordpress-org/plugin-assets/#plugin-icons + * + * @param Plugin\PluginInfo $pluginInfo + */ + protected function setIconsFromLocalAssets($pluginInfo) { + $icons = $this->getLocalAssetUrls(array( + 'icon.svg' => 'svg', + 'icon-256x256.png' => '2x', + 'icon-256x256.jpg' => '2x', + 'icon-128x128.png' => '1x', + 'icon-128x128.jpg' => '1x', + )); + + if ( !empty($icons) ) { + //The "default" key seems to be used only as last-resort fallback in WP core (5.8/5.9), + //but we'll set it anyway in case some code somewhere needs it. + reset($icons); + $firstKey = key($icons); + $icons['default'] = $icons[$firstKey]; + + $pluginInfo->icons = $icons; + } + } + + /** + * Add banners from the currently installed version to a Plugin Info object. + * + * The banners should be in a subdirectory named "assets". Supported image formats + * and file names are described here: + * @link https://developer.wordpress.org/plugins/wordpress-org/plugin-assets/#plugin-headers + * + * @param Plugin\PluginInfo $pluginInfo + */ + protected function setBannersFromLocalAssets($pluginInfo) { + $banners = $this->getLocalAssetUrls(array( + 'banner-772x250.png' => 'high', + 'banner-772x250.jpg' => 'high', + 'banner-1544x500.png' => 'low', + 'banner-1544x500.jpg' => 'low', + )); + + if ( !empty($banners) ) { + $pluginInfo->banners = $banners; + } + } + + /** + * @param array $filesToKeys + * @return array + */ + protected function getLocalAssetUrls($filesToKeys) { + $assetDirectory = $this->package->getAbsoluteDirectoryPath() . DIRECTORY_SEPARATOR . 'assets'; + if ( !is_dir($assetDirectory) ) { + return array(); + } + $assetBaseUrl = trailingslashit(plugins_url('', $assetDirectory . '/imaginary.file')); + + $foundAssets = array(); + foreach ($filesToKeys as $fileName => $key) { + $fullBannerPath = $assetDirectory . DIRECTORY_SEPARATOR . $fileName; + if ( !isset($icons[$key]) && is_file($fullBannerPath) ) { + $foundAssets[$key] = $assetBaseUrl . $fileName; + } + } + + return $foundAssets; + } + } + +endif; diff --git a/vendor/yahnis-elsts/plugin-update-checker/Puc/v5p4/Vcs/Reference.php b/vendor/yahnis-elsts/plugin-update-checker/Puc/v5p4/Vcs/Reference.php new file mode 100644 index 0000000..c30bcf7 --- /dev/null +++ b/vendor/yahnis-elsts/plugin-update-checker/Puc/v5p4/Vcs/Reference.php @@ -0,0 +1,51 @@ +properties = $properties; + } + + /** + * @param string $name + * @return mixed|null + */ + public function __get($name) { + return array_key_exists($name, $this->properties) ? $this->properties[$name] : null; + } + + /** + * @param string $name + * @param mixed $value + */ + public function __set($name, $value) { + $this->properties[$name] = $value; + } + + /** + * @param string $name + * @return bool + */ + public function __isset($name) { + return isset($this->properties[$name]); + } + + } + +endif; diff --git a/vendor/yahnis-elsts/plugin-update-checker/Puc/v5p4/Vcs/ReleaseAssetSupport.php b/vendor/yahnis-elsts/plugin-update-checker/Puc/v5p4/Vcs/ReleaseAssetSupport.php new file mode 100644 index 0000000..352fc5e --- /dev/null +++ b/vendor/yahnis-elsts/plugin-update-checker/Puc/v5p4/Vcs/ReleaseAssetSupport.php @@ -0,0 +1,83 @@ +releaseAssetsEnabled = true; + $this->assetFilterRegex = $nameRegex; + $this->releaseAssetPreference = $preference; + } + + /** + * Disable release assets. + * + * @return void + * @noinspection PhpUnused -- Public API + */ + public function disableReleaseAssets() { + $this->releaseAssetsEnabled = false; + $this->assetFilterRegex = null; + } + + /** + * Does the specified asset match the name regex? + * + * @param mixed $releaseAsset Data type and structure depend on the host/API. + * @return bool + */ + protected function matchesAssetFilter($releaseAsset) { + if ( $this->assetFilterRegex === null ) { + //The default is to accept all assets. + return true; + } + + $name = $this->getFilterableAssetName($releaseAsset); + if ( !is_string($name) ) { + return false; + } + return (bool)preg_match($this->assetFilterRegex, $releaseAsset->name); + } + + /** + * Get the part of asset data that will be checked against the filter regex. + * + * @param mixed $releaseAsset + * @return string|null + */ + abstract protected function getFilterableAssetName($releaseAsset); + } + +endif; \ No newline at end of file diff --git a/vendor/yahnis-elsts/plugin-update-checker/Puc/v5p4/Vcs/ReleaseFilteringFeature.php b/vendor/yahnis-elsts/plugin-update-checker/Puc/v5p4/Vcs/ReleaseFilteringFeature.php new file mode 100644 index 0000000..bbf9c47 --- /dev/null +++ b/vendor/yahnis-elsts/plugin-update-checker/Puc/v5p4/Vcs/ReleaseFilteringFeature.php @@ -0,0 +1,108 @@ + 100 ) { + throw new \InvalidArgumentException(sprintf( + 'The max number of releases is too high (%d). It must be 100 or less.', + $maxReleases + )); + } else if ( $maxReleases < 1 ) { + throw new \InvalidArgumentException(sprintf( + 'The max number of releases is too low (%d). It must be at least 1.', + $maxReleases + )); + } + + $this->releaseFilterCallback = $callback; + $this->releaseFilterByType = $releaseTypes; + $this->releaseFilterMaxReleases = $maxReleases; + return $this; + } + + /** + * Filter releases by their version number. + * + * @param string $regex A regular expression. The release version number must match this regex. + * @param int $releaseTypes + * @param int $maxReleasesToExamine + * @return $this + * @noinspection PhpUnused -- Public API + */ + public function setReleaseVersionFilter( + $regex, + $releaseTypes = Api::RELEASE_FILTER_SKIP_PRERELEASE, + $maxReleasesToExamine = 20 + ) { + return $this->setReleaseFilter( + function ($versionNumber) use ($regex) { + return (preg_match($regex, $versionNumber) === 1); + }, + $releaseTypes, + $maxReleasesToExamine + ); + } + + /** + * @param string $versionNumber The detected release version number. + * @param object $releaseObject Varies depending on the host/API. + * @return bool + */ + protected function matchesCustomReleaseFilter($versionNumber, $releaseObject) { + if ( !is_callable($this->releaseFilterCallback) ) { + return true; //No custom filter. + } + return call_user_func($this->releaseFilterCallback, $versionNumber, $releaseObject); + } + + /** + * @return bool + */ + protected function shouldSkipPreReleases() { + //Maybe this could be a bitfield in the future, if we need to support + //more release types. + return ($this->releaseFilterByType !== Api::RELEASE_FILTER_ALL); + } + + /** + * @return bool + */ + protected function hasCustomReleaseFilter() { + return isset($this->releaseFilterCallback) && is_callable($this->releaseFilterCallback); + } + } + +endif; \ No newline at end of file diff --git a/vendor/yahnis-elsts/plugin-update-checker/Puc/v5p4/Vcs/ThemeUpdateChecker.php b/vendor/yahnis-elsts/plugin-update-checker/Puc/v5p4/Vcs/ThemeUpdateChecker.php new file mode 100644 index 0000000..3d16f19 --- /dev/null +++ b/vendor/yahnis-elsts/plugin-update-checker/Puc/v5p4/Vcs/ThemeUpdateChecker.php @@ -0,0 +1,83 @@ +api = $api; + + parent::__construct($api->getRepositoryUrl(), $stylesheet, $customSlug, $checkPeriod, $optionName); + + $this->api->setHttpFilterName($this->getUniqueName('request_update_options')); + $this->api->setStrategyFilterName($this->getUniqueName('vcs_update_detection_strategies')); + $this->api->setSlug($this->slug); + } + + public function requestUpdate() { + $api = $this->api; + $api->setLocalDirectory($this->package->getAbsoluteDirectoryPath()); + + $update = new Theme\Update(); + $update->slug = $this->slug; + + //Figure out which reference (tag or branch) we'll use to get the latest version of the theme. + $updateSource = $api->chooseReference($this->branch); + if ( $updateSource ) { + $ref = $updateSource->name; + $update->download_url = $updateSource->downloadUrl; + } else { + do_action( + 'puc_api_error', + new \WP_Error( + 'puc-no-update-source', + 'Could not retrieve version information from the repository. ' + . 'This usually means that the update checker either can\'t connect ' + . 'to the repository or it\'s configured incorrectly.' + ), + null, null, $this->slug + ); + $ref = $this->branch; + } + + //Get headers from the main stylesheet in this branch/tag. Its "Version" header and other metadata + //are what the WordPress install will actually see after upgrading, so they take precedence over releases/tags. + $remoteHeader = $this->package->getFileHeader($api->getRemoteFile('style.css', $ref)); + $update->version = Utils::findNotEmpty(array( + $remoteHeader['Version'], + Utils::get($updateSource, 'version'), + )); + + //The details URL defaults to the Theme URI header or the repository URL. + $update->details_url = Utils::findNotEmpty(array( + $remoteHeader['ThemeURI'], + $this->package->getHeaderValue('ThemeURI'), + $this->metadataUrl, + )); + + if ( empty($update->version) ) { + //It looks like we didn't find a valid update after all. + $update = null; + } + + $update = $this->filterUpdateResult($update); + return $update; + } + } + +endif; diff --git a/vendor/yahnis-elsts/plugin-update-checker/Puc/v5p4/Vcs/VcsCheckerMethods.php b/vendor/yahnis-elsts/plugin-update-checker/Puc/v5p4/Vcs/VcsCheckerMethods.php new file mode 100644 index 0000000..e5a5608 --- /dev/null +++ b/vendor/yahnis-elsts/plugin-update-checker/Puc/v5p4/Vcs/VcsCheckerMethods.php @@ -0,0 +1,59 @@ +branch = $branch; + return $this; + } + + /** + * Set authentication credentials. + * + * @param array|string $credentials + * @return $this + */ + public function setAuthentication($credentials) { + $this->api->setAuthentication($credentials); + return $this; + } + + /** + * @return Api + */ + public function getVcsApi() { + return $this->api; + } + + public function getUpdate() { + $update = parent::getUpdate(); + + if ( isset($update) && !empty($update->download_url) ) { + $update->download_url = $this->api->signDownloadUrl($update->download_url); + } + + return $update; + } + + public function onDisplayConfiguration($panel) { + parent::onDisplayConfiguration($panel); + $panel->row('Branch', $this->branch); + $panel->row('Authentication enabled', $this->api->isAuthenticationEnabled() ? 'Yes' : 'No'); + $panel->row('API client', get_class($this->api)); + } + } + +endif; \ No newline at end of file diff --git a/vendor/yahnis-elsts/plugin-update-checker/Puc/v5p4/WpCliCheckTrigger.php b/vendor/yahnis-elsts/plugin-update-checker/Puc/v5p4/WpCliCheckTrigger.php new file mode 100644 index 0000000..523cca4 --- /dev/null +++ b/vendor/yahnis-elsts/plugin-update-checker/Puc/v5p4/WpCliCheckTrigger.php @@ -0,0 +1,84 @@ +componentType = $componentType; + $this->scheduler = $scheduler; + + if ( !defined('WP_CLI') || !class_exists(WP_CLI::class, false) ) { + return; //Nothing to do if WP-CLI is not available. + } + + /* + * We can't hook directly into wp_update_plugins(), but we can hook into the WP-CLI + * commands that call it. We'll use the "before_invoke:xyz" hook to trigger update checks. + */ + foreach ($this->getRelevantCommands() as $command) { + WP_CLI::add_hook('before_invoke:' . $command, [$this, 'triggerUpdateCheckOnce']); + } + } + + private function getRelevantCommands() { + $result = []; + foreach (['status', 'list', 'update'] as $subcommand) { + $result[] = $this->componentType . ' ' . $subcommand; + } + return $result; + } + + /** + * Trigger a potential update check once. + * + * @param mixed $input + * @return mixed The input value, unchanged. + * @internal This method is public so that it can be used as a WP-CLI hook callback. + * It should not be called directly. + * + */ + public function triggerUpdateCheckOnce($input = null) { + if ( $this->wasCheckTriggered ) { + return $input; + } + + $this->wasCheckTriggered = true; + $this->scheduler->maybeCheckForUpdates(); + + return $input; + } +} \ No newline at end of file diff --git a/vendor/yahnis-elsts/plugin-update-checker/README.md b/vendor/yahnis-elsts/plugin-update-checker/README.md index 1af16f0..4c1c197 100644 --- a/vendor/yahnis-elsts/plugin-update-checker/README.md +++ b/vendor/yahnis-elsts/plugin-update-checker/README.md @@ -252,8 +252,8 @@ BitBucket doesn't have an equivalent to GitHub's releases, so the process is sli Alternatively, if you're using a self-hosted GitLab instance, initialize the update checker like this: ```php - use YahnisElsts\PluginUpdateChecker\v5p3\Vcs\PluginUpdateChecker; - use YahnisElsts\PluginUpdateChecker\v5p3\Vcs\GitLabApi; + use YahnisElsts\PluginUpdateChecker\v5p4\Vcs\PluginUpdateChecker; + use YahnisElsts\PluginUpdateChecker\v5p4\Vcs\GitLabApi; $myUpdateChecker = new PluginUpdateChecker( new GitLabApi('https://myserver.com/user-name/repo-name/'), @@ -264,8 +264,8 @@ BitBucket doesn't have an equivalent to GitHub's releases, so the process is sli ``` If you're using a self-hosted GitLab instance and [subgroups or nested groups](https://docs.gitlab.com/ce/user/group/subgroups/index.html), you have to tell the update checker which parts of the URL are subgroups: ```php - use YahnisElsts\PluginUpdateChecker\v5p3\Vcs\PluginUpdateChecker; - use YahnisElsts\PluginUpdateChecker\v5p3\Vcs\GitLabApi; + use YahnisElsts\PluginUpdateChecker\v5p4\Vcs\PluginUpdateChecker; + use YahnisElsts\PluginUpdateChecker\v5p4\Vcs\GitLabApi; $myUpdateChecker = new PluginUpdateChecker( new GitLabApi( @@ -347,14 +347,14 @@ Other classes have also been renamed, usually by simply removing the `Puc_vXpY_` | Old class name | New class name | |-------------------------------------|----------------------------------------------------------------| | `Puc_v4_Factory` | `YahnisElsts\PluginUpdateChecker\v5\PucFactory` | -| `Puc_v4p13_Factory` | `YahnisElsts\PluginUpdateChecker\v5p3\PucFactory` | -| `Puc_v4p13_Plugin_UpdateChecker` | `YahnisElsts\PluginUpdateChecker\v5p3\Plugin\UpdateChecker` | -| `Puc_v4p13_Theme_UpdateChecker` | `YahnisElsts\PluginUpdateChecker\v5p3\Theme\UpdateChecker` | -| `Puc_v4p13_Vcs_PluginUpdateChecker` | `YahnisElsts\PluginUpdateChecker\v5p3\Vcs\PluginUpdateChecker` | -| `Puc_v4p13_Vcs_ThemeUpdateChecker` | `YahnisElsts\PluginUpdateChecker\v5p3\Vcs\ThemeUpdateChecker` | -| `Puc_v4p13_Vcs_GitHubApi` | `YahnisElsts\PluginUpdateChecker\v5p3\Vcs\GitHubApi` | -| `Puc_v4p13_Vcs_GitLabApi` | `YahnisElsts\PluginUpdateChecker\v5p3\Vcs\GitLabApi` | -| `Puc_v4p13_Vcs_BitBucketApi` | `YahnisElsts\PluginUpdateChecker\v5p3\Vcs\BitBucketApi` | +| `Puc_v4p13_Factory` | `YahnisElsts\PluginUpdateChecker\v5p4\PucFactory` | +| `Puc_v4p13_Plugin_UpdateChecker` | `YahnisElsts\PluginUpdateChecker\v5p4\Plugin\UpdateChecker` | +| `Puc_v4p13_Theme_UpdateChecker` | `YahnisElsts\PluginUpdateChecker\v5p4\Theme\UpdateChecker` | +| `Puc_v4p13_Vcs_PluginUpdateChecker` | `YahnisElsts\PluginUpdateChecker\v5p4\Vcs\PluginUpdateChecker` | +| `Puc_v4p13_Vcs_ThemeUpdateChecker` | `YahnisElsts\PluginUpdateChecker\v5p4\Vcs\ThemeUpdateChecker` | +| `Puc_v4p13_Vcs_GitHubApi` | `YahnisElsts\PluginUpdateChecker\v5p4\Vcs\GitHubApi` | +| `Puc_v4p13_Vcs_GitLabApi` | `YahnisElsts\PluginUpdateChecker\v5p4\Vcs\GitLabApi` | +| `Puc_v4p13_Vcs_BitBucketApi` | `YahnisElsts\PluginUpdateChecker\v5p4\Vcs\BitBucketApi` | License Management ------------------ diff --git a/vendor/yahnis-elsts/plugin-update-checker/composer.json b/vendor/yahnis-elsts/plugin-update-checker/composer.json index 27b65b0..f7af7eb 100644 --- a/vendor/yahnis-elsts/plugin-update-checker/composer.json +++ b/vendor/yahnis-elsts/plugin-update-checker/composer.json @@ -18,6 +18,6 @@ "ext-json": "*" }, "autoload": { - "files": ["load-v5p3.php"] + "files": ["load-v5p4.php"] } } diff --git a/vendor/yahnis-elsts/plugin-update-checker/languages/plugin-update-checker.pot b/vendor/yahnis-elsts/plugin-update-checker/languages/plugin-update-checker.pot index 4985307..5b6319c 100644 --- a/vendor/yahnis-elsts/plugin-update-checker/languages/plugin-update-checker.pot +++ b/vendor/yahnis-elsts/plugin-update-checker/languages/plugin-update-checker.pot @@ -17,33 +17,33 @@ msgstr "" "X-Poedit-KeywordsList: __;_e;_x:1,2c;_x\n" "X-Poedit-SearchPath-0: .\n" -#: Puc/v5p3/Plugin/Ui.php:128 +#: Puc/v5p4/Plugin/Ui.php:128 msgid "Check for updates" msgstr "" -#: Puc/v5p3/Plugin/Ui.php:214 +#: Puc/v5p4/Plugin/Ui.php:214 #, php-format msgctxt "the plugin title" msgid "The %s plugin is up to date." msgstr "" -#: Puc/v5p3/Plugin/Ui.php:216 +#: Puc/v5p4/Plugin/Ui.php:216 #, php-format msgctxt "the plugin title" msgid "A new version of the %s plugin is available." msgstr "" -#: Puc/v5p3/Plugin/Ui.php:218 +#: Puc/v5p4/Plugin/Ui.php:218 #, php-format msgctxt "the plugin title" msgid "Could not determine if updates are available for %s." msgstr "" -#: Puc/v5p3/Plugin/Ui.php:224 +#: Puc/v5p4/Plugin/Ui.php:224 #, php-format msgid "Unknown update checker status \"%s\"" msgstr "" -#: Puc/v5p3/Vcs/PluginUpdateChecker.php:100 +#: Puc/v5p4/Vcs/PluginUpdateChecker.php:100 msgid "There is no changelog available." msgstr "" diff --git a/vendor/yahnis-elsts/plugin-update-checker/load-v5p4.php b/vendor/yahnis-elsts/plugin-update-checker/load-v5p4.php new file mode 100644 index 0000000..2cd9580 --- /dev/null +++ b/vendor/yahnis-elsts/plugin-update-checker/load-v5p4.php @@ -0,0 +1,34 @@ + Plugin\UpdateChecker::class, + 'Theme\\UpdateChecker' => Theme\UpdateChecker::class, + + 'Vcs\\PluginUpdateChecker' => Vcs\PluginUpdateChecker::class, + 'Vcs\\ThemeUpdateChecker' => Vcs\ThemeUpdateChecker::class, + + 'GitHubApi' => Vcs\GitHubApi::class, + 'BitBucketApi' => Vcs\BitBucketApi::class, + 'GitLabApi' => Vcs\GitLabApi::class, + ) + as $pucGeneralClass => $pucVersionedClass +) { + MajorFactory::addVersion($pucGeneralClass, $pucVersionedClass, '5.4'); + //Also add it to the minor-version factory in case the major-version factory + //was already defined by another, older version of the update checker. + MinorFactory::addVersion($pucGeneralClass, $pucVersionedClass, '5.4'); +} + diff --git a/vendor/yahnis-elsts/plugin-update-checker/plugin-update-checker.php b/vendor/yahnis-elsts/plugin-update-checker/plugin-update-checker.php index 7a9268c..da4cb1e 100644 --- a/vendor/yahnis-elsts/plugin-update-checker/plugin-update-checker.php +++ b/vendor/yahnis-elsts/plugin-update-checker/plugin-update-checker.php @@ -1,10 +1,10 @@