themelia-react-ui 2.0.6 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +250 -0
- package/MIGRATION.md +746 -7
- package/README.md +27 -23
- package/dist/{accordion-0tQUZ20r.js → accordion-DNVqwEIC.js} +36 -36
- package/dist/accordion-DNVqwEIC.js.map +1 -0
- package/dist/action-menu-D5343RwT.js +286 -0
- package/dist/action-menu-D5343RwT.js.map +1 -0
- package/dist/ai-artifact-otrz9ZwS.js +1214 -0
- package/dist/ai-artifact-otrz9ZwS.js.map +1 -0
- package/dist/anchored-positioning-1U_eBFNx.js +9 -0
- package/dist/anchored-positioning-1U_eBFNx.js.map +1 -0
- package/dist/app-shell-CPN30Nb1.js +372 -0
- package/dist/app-shell-CPN30Nb1.js.map +1 -0
- package/dist/{attachment-BCpA4e7i.js → attachment-D2-fpfmv.js} +15 -15
- package/dist/{attachment-BCpA4e7i.js.map → attachment-D2-fpfmv.js.map} +1 -1
- package/dist/{auth-B0girIk_.js → auth-g_oUTDDC.js} +234 -241
- package/dist/auth-g_oUTDDC.js.map +1 -0
- package/dist/{avatar-B9Jnp-T-.js → avatar-Ca3Ihrq4.js} +4 -4
- package/dist/{avatar-B9Jnp-T-.js.map → avatar-Ca3Ihrq4.js.map} +1 -1
- package/dist/{badge-wWauMgAt.js → badge-oGiXblW7.js} +8 -9
- package/dist/badge-oGiXblW7.js.map +1 -0
- package/dist/base/accordion.js +1 -1
- package/dist/base/action-menu.js +1 -1
- package/dist/base/attachment.js +1 -1
- package/dist/base/avatar.js +1 -1
- package/dist/base/badge.js +1 -1
- package/dist/base/batch-action-bar.js +1 -1
- package/dist/base/buttons.js +2 -2
- package/dist/base/cards.js +3 -3
- package/dist/base/carousel.js +11 -11
- package/dist/base/carousel.js.map +1 -1
- package/dist/base/cascader.js +1 -1
- package/dist/base/chart.js +1 -1
- package/dist/base/choice-inputs.js +2 -2
- package/dist/base/code-block.js +1 -1
- package/dist/base/combobox.js +1 -1
- package/dist/base/command.js +1 -1
- package/dist/base/copyable.js +1 -1
- package/dist/base/date-pickers.js +2 -2
- package/dist/base/display.js +7 -7
- package/dist/base/feedback.js +4 -4
- package/dist/base/forms-numeric.js +2 -2
- package/dist/base/forms.js +2 -2
- package/dist/base/inline-edit.js +13 -13
- package/dist/base/inline-edit.js.map +1 -1
- package/dist/base/item.js +1 -1
- package/dist/base/media-gallery.js +203 -2
- package/dist/base/media-gallery.js.map +1 -0
- package/dist/base/metadata-list.js +1 -1
- package/dist/base/navigation.js +7 -7
- package/dist/base/popover-menu.js +1 -1
- package/dist/base/popover.js +1 -1
- package/dist/base/qr-code.js +32 -22
- package/dist/base/qr-code.js.map +1 -1
- package/dist/base/repeaters.js +91 -88
- package/dist/base/repeaters.js.map +1 -1
- package/dist/base/sidebar.js +2 -2
- package/dist/base/signature-pad.js +14 -14
- package/dist/base/signature-pad.js.map +1 -1
- package/dist/base/skeleton.js +1 -1
- package/dist/base/spinner.js +6 -12
- package/dist/base/spinner.js.map +1 -1
- package/dist/base/structure.js +1 -1
- package/dist/base/table.js +1 -1
- package/dist/base/text-inputs.js +3 -3
- package/dist/base/toaster.js +2 -2
- package/dist/base/tree.js +2 -2
- package/dist/base/upload-queue.js +303 -2
- package/dist/base/upload-queue.js.map +1 -0
- package/dist/base/upload.js +3 -4
- package/dist/base/value-inputs.js +1 -1
- package/dist/{batch-action-bar-BoqWIIpV.js → batch-action-bar-D6MZQNnC.js} +10 -10
- package/dist/{batch-action-bar-BoqWIIpV.js.map → batch-action-bar-D6MZQNnC.js.map} +1 -1
- package/dist/blocks/admin.js +242 -228
- package/dist/blocks/admin.js.map +1 -1
- package/dist/blocks/ai.js +395 -357
- package/dist/blocks/ai.js.map +1 -1
- package/dist/blocks/analytics/charts.js +1022 -0
- package/dist/blocks/analytics/charts.js.map +1 -0
- package/dist/blocks/analytics/usage-card.js +1 -1
- package/dist/blocks/analytics.js +171 -1365
- package/dist/blocks/analytics.js.map +1 -1
- package/dist/blocks/collaboration.js +1 -1
- package/dist/blocks/commerce/receipt.js +1 -1
- package/dist/blocks/commerce.js +1487 -1358
- package/dist/blocks/commerce.js.map +1 -1
- package/dist/blocks/data-display.js +2 -3
- package/dist/blocks/onboarding.js +91 -82
- package/dist/blocks/onboarding.js.map +1 -1
- package/dist/blocks/planning.js +25 -25
- package/dist/blocks/planning.js.map +1 -1
- package/dist/blocks/timelines.js +2 -2
- package/dist/{breadcrumbs-Bp9Ke7kd.js → breadcrumbs-CQ9JSlez.js} +52 -45
- package/dist/breadcrumbs-CQ9JSlez.js.map +1 -0
- package/dist/{button-ChBovTx0.js → button-rd6FiHfQ.js} +12 -8
- package/dist/button-rd6FiHfQ.js.map +1 -0
- package/dist/{buttons-DeW0bQeK.js → buttons-pZVgPTZn.js} +230 -246
- package/dist/buttons-pZVgPTZn.js.map +1 -0
- package/dist/{cards-CNXnmvV5.js → cards-CgWyqvgZ.js} +25 -22
- package/dist/{cards-CNXnmvV5.js.map → cards-CgWyqvgZ.js.map} +1 -1
- package/dist/cascader-Cf05pwaq.js +444 -0
- package/dist/cascader-Cf05pwaq.js.map +1 -0
- package/dist/{chart-I7ROnsl8.js → chart-CygRCyIZ.js} +5 -5
- package/dist/{chart-I7ROnsl8.js.map → chart-CygRCyIZ.js.map} +1 -1
- package/dist/{checkbox-MoyHIAPs.js → checkbox-Dy5_XBMZ.js} +4 -4
- package/dist/{checkbox-MoyHIAPs.js.map → checkbox-Dy5_XBMZ.js.map} +1 -1
- package/dist/{choice-inputs-DHGtx0QV.js → choice-inputs-oJEsrb5Y.js} +113 -114
- package/dist/choice-inputs-oJEsrb5Y.js.map +1 -0
- package/dist/{code-block-BSJyq9e-.js → code-block-BrLD7mCi.js} +44 -60
- package/dist/code-block-BrLD7mCi.js.map +1 -0
- package/dist/collapsible-CRCCg_bO.js +80 -0
- package/dist/collapsible-CRCCg_bO.js.map +1 -0
- package/dist/{collection-content-CSnwtOTH.js → collection-content-D7SoDlYd.js} +3 -3
- package/dist/{collection-content-CSnwtOTH.js.map → collection-content-D7SoDlYd.js.map} +1 -1
- package/dist/combobox-Dl6f6kHz.js +362 -0
- package/dist/combobox-Dl6f6kHz.js.map +1 -0
- package/dist/combobox-DrDXtSSt.js +929 -0
- package/dist/combobox-DrDXtSSt.js.map +1 -0
- package/dist/command-CjZ2VzKC.js +432 -0
- package/dist/command-CjZ2VzKC.js.map +1 -0
- package/dist/comments-C2MZyRmh.js +1214 -0
- package/dist/comments-C2MZyRmh.js.map +1 -0
- package/dist/components/base/accordion/accordion.d.ts +11 -3
- package/dist/components/base/action-menu/action-menu.d.ts +11 -3
- package/dist/components/base/buttons/button.d.ts +2 -2
- package/dist/components/base/buttons/index.d.ts +1 -1
- package/dist/components/base/buttons/loader-button.d.ts +6 -15
- package/dist/components/base/cards/index.d.ts +1 -1
- package/dist/components/base/cards/partials/card-body-context.d.ts +6 -0
- package/dist/components/base/cards/smart-card.d.ts +0 -2
- package/dist/components/base/cards/smart-card.types.d.ts +12 -10
- package/dist/components/base/cascader/cascader.d.ts +8 -2
- package/dist/components/base/cascader/cascader.types.d.ts +24 -2
- package/dist/components/base/cascader/index.d.ts +1 -1
- package/dist/components/base/choice-inputs/switch.d.ts +1 -1
- package/dist/components/base/code-block/use-code-copy.d.ts +2 -6
- package/dist/components/base/command/command.d.ts +1 -1
- package/dist/components/base/date-pickers/datepicker.types.d.ts +1 -3
- package/dist/components/base/display/dialog.d.ts +3 -9
- package/dist/components/base/display/index.d.ts +2 -3
- package/dist/components/base/display/separator.d.ts +1 -1
- package/dist/components/base/feedback/alert.d.ts +2 -1
- package/dist/components/base/feedback/empty.d.ts +10 -2
- package/dist/components/base/forms/workflow.d.ts +2 -2
- package/dist/components/base/forms-numeric/dimensions-input.d.ts +9 -17
- package/dist/components/base/forms-numeric/index.d.ts +3 -3
- package/dist/components/base/item/item.types.d.ts +6 -2
- package/dist/components/base/metadata-list/index.d.ts +1 -3
- package/dist/components/base/metadata-list/metadata-list.d.ts +4 -1
- package/dist/components/base/navigation/index.d.ts +2 -2
- package/dist/components/base/navigation/language-switcher.d.ts +7 -6
- package/dist/components/base/navigation/navigation-tabs.d.ts +8 -1
- package/dist/components/base/navigation/page-header/index.d.ts +1 -1
- package/dist/components/base/navigation/page-header/page-header.d.ts +13 -17
- package/dist/components/base/navigation/pagination.d.ts +5 -5
- package/dist/components/base/popover/popover.recipes.d.ts +0 -1
- package/dist/components/base/qr-code/qr-code.d.ts +4 -0
- package/dist/components/base/repeaters/index.d.ts +1 -1
- package/dist/components/base/repeaters/key-value-editor.d.ts +4 -0
- package/dist/components/base/sheet/sheet.d.ts +6 -15
- package/dist/components/base/sidebar/index.d.ts +1 -6
- package/dist/components/base/sidebar/sidebar.d.ts +38 -10
- package/dist/components/base/skeleton/skeleton.d.ts +1 -1
- package/dist/components/base/structure/structure.types.d.ts +11 -2
- package/dist/components/base/text-inputs/index.d.ts +1 -1
- package/dist/components/base/tree/index.d.ts +1 -0
- package/dist/components/base/tree/tree.d.ts +2 -2
- package/dist/components/base/tree/tree.types.d.ts +7 -1
- package/dist/components/base/upload/file-upload.validation.d.ts +37 -1
- package/dist/components/base/upload/image-upload.d.ts +2 -0
- package/dist/components/base/upload/index.d.ts +3 -9
- package/dist/components/base/value-inputs/date-time-input.d.ts +4 -0
- package/dist/components/base/value-inputs/slider.d.ts +5 -2
- package/dist/components/blocks/admin/action-surfaces/index.d.ts +17 -4
- package/dist/components/blocks/admin/api-key-list/api-key-list.types.d.ts +9 -3
- package/dist/components/blocks/admin/index.d.ts +1 -1
- package/dist/components/blocks/ai/ai-artifact/ai-artifact.d.ts +1 -1
- package/dist/components/blocks/ai/ai-artifact/types.d.ts +9 -4
- package/dist/components/blocks/ai/ai-chain-of-thought/ai-chain-of-thought.d.ts +1 -1
- package/dist/components/blocks/ai/ai-chain-of-thought/types.d.ts +11 -1
- package/dist/components/blocks/ai/ai-citation/ai-citation.d.ts +1 -1
- package/dist/components/blocks/ai/ai-citation/types.d.ts +6 -0
- package/dist/components/blocks/ai/ai-confirmation/ai-confirmation.d.ts +1 -1
- package/dist/components/blocks/ai/ai-confirmation/types.d.ts +21 -5
- package/dist/components/blocks/ai/ai-feedback/types.d.ts +7 -2
- package/dist/components/blocks/ai/ai-inline-citation/types.d.ts +9 -3
- package/dist/components/blocks/ai/ai-package-info/ai-package-info.d.ts +1 -1
- package/dist/components/blocks/ai/ai-package-info/types.d.ts +6 -0
- package/dist/components/blocks/ai/ai-sources/ai-sources.d.ts +1 -1
- package/dist/components/blocks/ai/ai-sources/types.d.ts +8 -2
- package/dist/components/blocks/ai/ai-task/ai-task.d.ts +1 -1
- package/dist/components/blocks/ai/ai-task/types.d.ts +10 -1
- package/dist/components/blocks/ai/ai-tool-call/ai-tool-call.d.ts +1 -1
- package/dist/components/blocks/ai/ai-tool-call/types.d.ts +6 -0
- package/dist/components/blocks/ai/ai.strings.d.ts +2 -0
- package/dist/components/blocks/analytics/activity-heatmap/types.d.ts +1 -1
- package/dist/components/blocks/analytics/analytics.strings.d.ts +2 -0
- package/dist/components/blocks/analytics/atoms/metric-trend-chip.d.ts +11 -1
- package/dist/components/blocks/analytics/chart-card/chart-card.d.ts +7 -5
- package/dist/components/blocks/analytics/charts/index.d.ts +27 -0
- package/dist/components/blocks/analytics/index.d.ts +17 -24
- package/dist/components/blocks/analytics/metric/metric.d.ts +5 -5
- package/dist/components/blocks/analytics/metric-grid/metric-grid.d.ts +2 -2
- package/dist/components/blocks/analytics/types.d.ts +12 -3
- package/dist/components/blocks/analytics/usage-card/usage-card.strings.d.ts +2 -0
- package/dist/components/blocks/commerce/address-card/address-card.d.ts +1 -1
- package/dist/components/blocks/commerce/address-card/types.d.ts +5 -16
- package/dist/components/blocks/commerce/booking-calendar-event-card/booking-calendar-event-card.d.ts +2 -2
- package/dist/components/blocks/commerce/booking-calendar-event-card/booking-calendar-event-card.types.d.ts +6 -4
- package/dist/components/blocks/commerce/cart-summary/cart-summary.d.ts +0 -2
- package/dist/components/blocks/commerce/cart-summary/index.d.ts +2 -2
- package/dist/components/blocks/commerce/cart-summary/types.d.ts +9 -11
- package/dist/components/blocks/commerce/coupon-input/coupon-input.d.ts +1 -1
- package/dist/components/blocks/commerce/coupon-input/types.d.ts +7 -3
- package/dist/components/blocks/commerce/discount-stack/discount-stack.d.ts +0 -2
- package/dist/components/blocks/commerce/discount-stack/index.d.ts +2 -2
- package/dist/components/blocks/commerce/discount-stack/types.d.ts +4 -6
- package/dist/components/blocks/commerce/fulfillment-group/fulfillment-group.d.ts +1 -1
- package/dist/components/blocks/commerce/fulfillment-group/types.d.ts +2 -0
- package/dist/components/blocks/commerce/giftcard-card/partials/giftcard-balance.d.ts +18 -0
- package/dist/components/blocks/commerce/giftcard-card/partials/giftcard-compact.d.ts +1 -1
- package/dist/components/blocks/commerce/giftcard-card/partials/giftcard-copy-button.d.ts +0 -1
- package/dist/components/blocks/commerce/giftcard-card/partials/giftcard-dark.d.ts +1 -1
- package/dist/components/blocks/commerce/giftcard-card/partials/giftcard-full.d.ts +1 -1
- package/dist/components/blocks/commerce/giftcard-card/partials/giftcard-illustrated.d.ts +1 -1
- package/dist/components/blocks/commerce/giftcard-card/partials/giftcard-minimal.d.ts +1 -1
- package/dist/components/blocks/commerce/giftcard-card/types.d.ts +16 -5
- package/dist/components/blocks/commerce/index.d.ts +8 -8
- package/dist/components/blocks/commerce/inventory-level/inventory-level.strings.d.ts +2 -0
- package/dist/components/blocks/commerce/inventory-level/types.d.ts +1 -1
- package/dist/components/blocks/commerce/inventory-section/types.d.ts +0 -5
- package/dist/components/blocks/commerce/invoice-line-items/types.d.ts +6 -3
- package/dist/components/blocks/commerce/loyalty-points/loyalty-points.d.ts +1 -1
- package/dist/components/blocks/commerce/loyalty-points/types.d.ts +11 -5
- package/dist/components/blocks/commerce/order-status/order-status.d.ts +1 -1
- package/dist/components/blocks/commerce/order-status/types.d.ts +8 -8
- package/dist/components/blocks/commerce/order-timeline/order-timeline.d.ts +1 -1
- package/dist/components/blocks/commerce/order-timeline/types.d.ts +3 -1
- package/dist/components/blocks/commerce/payment-method/index.d.ts +2 -2
- package/dist/components/blocks/commerce/payment-method/payment-method.d.ts +0 -8
- package/dist/components/blocks/commerce/payment-method/types.d.ts +0 -2
- package/dist/components/blocks/commerce/receipt/index.d.ts +1 -1
- package/dist/components/blocks/commerce/receipt/receipt-items.d.ts +1 -1
- package/dist/components/blocks/commerce/receipt/types.d.ts +10 -0
- package/dist/components/blocks/commerce/refund-status/index.d.ts +2 -2
- package/dist/components/blocks/commerce/refund-status/refund-status.d.ts +0 -2
- package/dist/components/blocks/commerce/refund-status/types.d.ts +0 -2
- package/dist/components/blocks/commerce/seo-listing/types.d.ts +7 -0
- package/dist/components/blocks/commerce/shared/code-entry.d.ts +39 -0
- package/dist/components/blocks/commerce/shared/order-status.d.ts +1 -1
- package/dist/components/blocks/commerce/subscription-summary/subscription-summary.d.ts +1 -1
- package/dist/components/blocks/commerce/subscription-summary/types.d.ts +10 -1
- package/dist/components/blocks/commerce/upcoming-booking/index.d.ts +2 -1
- package/dist/components/blocks/commerce/upcoming-booking/types.d.ts +8 -0
- package/dist/components/blocks/commerce/upcoming-booking/upcoming-booking.d.ts +2 -2
- package/dist/components/blocks/commerce/vendor-profile/types.d.ts +4 -5
- package/dist/components/blocks/commerce/voucher-entry/types.d.ts +6 -3
- package/dist/components/blocks/commerce/voucher-entry/voucher-entry.d.ts +1 -1
- package/dist/components/blocks/content-block-hooks.d.ts +22 -0
- package/dist/components/blocks/data-display/dense-info-card/dense-info.strings.d.ts +5 -1
- package/dist/components/blocks/data-display/dense-info-card/helpers.d.ts +3 -1
- package/dist/components/blocks/data-display/dense-info-card/index.d.ts +1 -1
- package/dist/components/blocks/data-display/dense-info-card/partials/dense-info-classification.d.ts +1 -1
- package/dist/components/blocks/data-display/dense-info-card/partials/dense-info-dashboard.d.ts +1 -1
- package/dist/components/blocks/data-display/dense-info-card/partials/dense-info-financial.d.ts +1 -1
- package/dist/components/blocks/data-display/dense-info-card/partials/dense-info-project.d.ts +1 -1
- package/dist/components/blocks/data-display/dense-info-card/partials/dense-info-score.d.ts +1 -1
- package/dist/components/blocks/data-display/dense-info-card/types.d.ts +12 -5
- package/dist/components/blocks/data-display/empty-state/empty-state.types.d.ts +6 -0
- package/dist/components/blocks/data-display/index.d.ts +0 -1
- package/dist/components/blocks/data-display/relationship-card-frame.d.ts +1 -1
- package/dist/components/blocks/onboarding/checklist/checklist.types.d.ts +5 -3
- package/dist/components/blocks/planning/task-card.types.d.ts +7 -3
- package/dist/components/blocks/timelines/changelog/types.d.ts +2 -2
- package/dist/components/blocks/timelines/index.d.ts +2 -2
- package/dist/components/blocks/timelines/milestones/types.d.ts +2 -2
- package/dist/components/blocks/timelines/shared/timeline.d.ts +6 -0
- package/dist/components/blocks/timelines/steps-card/index.d.ts +2 -1
- package/dist/components/blocks/timelines/steps-card/steps-card.d.ts +2 -2
- package/dist/components/blocks/timelines/steps-card/types.d.ts +13 -1
- package/dist/components/features/activities/activities.strings.d.ts +5 -3
- package/dist/components/features/activities/activities.types.d.ts +28 -11
- package/dist/components/features/activities/hooks/use-activity-feed.d.ts +6 -0
- package/dist/components/features/activities/index.d.ts +1 -1
- package/dist/components/features/activities/partials/activity-headline.d.ts +5 -0
- package/dist/components/features/activities/partials/activity-row.d.ts +12 -13
- package/dist/components/features/activities/partials/row-layers.d.ts +7 -0
- package/dist/components/features/activities/relative-time.d.ts +18 -0
- package/dist/components/features/ai-chat/ai-chat.d.ts +6 -2
- package/dist/components/features/ai-chat/ai-chat.strings.d.ts +41 -2
- package/dist/components/features/ai-chat/ai-chat.types.d.ts +6 -0
- package/dist/components/features/ai-chat/partials/ai-chat-attachments-strip.d.ts +5 -1
- package/dist/components/features/ai-chat/partials/ai-chat-prompt-input.d.ts +2 -2
- package/dist/components/features/ai-chat/partials/ai-chat-queue.d.ts +3 -1
- package/dist/components/features/ai-chat/partials/ai-chat-suggestions-row.d.ts +6 -1
- package/dist/components/features/appointment-calendar/appointment-calendar.d.ts +1 -1
- package/dist/components/features/appointment-calendar/appointment-calendar.types.d.ts +19 -5
- package/dist/components/features/appointment-calendar/index.d.ts +1 -1
- package/dist/components/features/appointment-calendar/partials/appointment-agenda.d.ts +18 -10
- package/dist/components/features/async-preview/async-preview.d.ts +2 -2
- package/dist/components/features/async-preview/async-preview.types.d.ts +30 -1
- package/dist/components/features/async-preview/preview-trigger-cell.d.ts +7 -2
- package/dist/components/features/combobox/async-resource-combobox.d.ts +2 -2
- package/dist/components/features/combobox/combobox.d.ts +12 -3
- package/dist/components/features/combobox/components/error-message.d.ts +3 -1
- package/dist/components/features/combobox/hooks/use-combobox-core.d.ts +2 -2
- package/dist/components/features/combobox/index.d.ts +1 -1
- package/dist/components/features/combobox/types.d.ts +47 -45
- package/dist/components/features/comments/comments.strings.d.ts +6 -5
- package/dist/components/features/comments/comments.types.d.ts +40 -26
- package/dist/components/features/comments/hooks/use-attachment-upload.d.ts +5 -1
- package/dist/components/features/comments/hooks/use-comments.d.ts +8 -1
- package/dist/components/features/data-view/data-view.strings.d.ts +9 -2
- package/dist/components/features/data-view/data-view.types.d.ts +15 -2
- package/dist/components/features/email-composer/email-html.d.ts +5 -0
- package/dist/components/features/email-composer/http.d.ts +2 -0
- package/dist/components/features/email-composer/strings.d.ts +17 -2
- package/dist/components/features/email-composer/types.d.ts +17 -2
- package/dist/components/features/email-composer/use-composer.d.ts +2 -78
- package/dist/components/features/event-calendar/event-calendar-day-cell.d.ts +1 -1
- package/dist/components/features/event-calendar/event-calendar-event-badge.d.ts +1 -1
- package/dist/components/features/event-calendar/event-calendar-header.d.ts +1 -1
- package/dist/components/features/event-calendar/event-calendar-legend.d.ts +2 -2
- package/dist/components/features/event-calendar/event-calendar.d.ts +1 -1
- package/dist/components/features/event-calendar/event-calendar.types.d.ts +126 -21
- package/dist/components/features/filters/facets/range-facet.d.ts +13 -8
- package/dist/components/features/filters/filter-context.d.ts +9 -0
- package/dist/components/features/filters/filters.strings.d.ts +36 -3
- package/dist/components/features/filters/filters.types.d.ts +72 -5
- package/dist/components/features/filters/hooks/use-filter-draft.d.ts +1 -0
- package/dist/components/features/filters/index.d.ts +2 -2
- package/dist/components/features/filters/operator-options.d.ts +25 -2
- package/dist/components/features/filters/partials/active-filter-item.d.ts +0 -13
- package/dist/components/features/filters/partials/async-options-status.d.ts +32 -0
- package/dist/components/features/filters/partials/filter-draft-footer.d.ts +11 -0
- package/dist/components/features/filters/partials/filter-operator-select.d.ts +4 -2
- package/dist/components/features/filters/partials/filter-pill.d.ts +5 -1
- package/dist/components/features/filters/partials/filter-tabs.d.ts +2 -1
- package/dist/components/features/filters/partials/regular-filter-content.d.ts +1 -1
- package/dist/components/features/filters/utils/filter-utils.d.ts +29 -4
- package/dist/components/features/global-search/global-search-dialog.d.ts +7 -1
- package/dist/components/features/global-search/global-search.d.ts +7 -1
- package/dist/components/features/global-search/global-search.strings.d.ts +19 -3
- package/dist/components/features/global-search/global-search.types.d.ts +30 -6
- package/dist/components/features/global-search/index.d.ts +1 -1
- package/dist/components/features/global-search/partials/global-search-idle-state.d.ts +6 -1
- package/dist/components/features/global-search/partials/global-search-input.d.ts +2 -0
- package/dist/components/features/kanban/index.d.ts +2 -2
- package/dist/components/features/kanban/kanban-context.d.ts +4 -0
- package/dist/components/features/kanban/kanban-keyboard.d.ts +7 -2
- package/dist/components/features/kanban/kanban.d.ts +10 -1
- package/dist/components/features/kanban/kanban.strings.d.ts +11 -2
- package/dist/components/features/kanban/kanban.types.d.ts +26 -0
- package/dist/components/features/map/map.d.ts +4 -0
- package/dist/components/features/map/place-autocomplete.d.ts +10 -1
- package/dist/components/features/media-library/hooks/use-media-library.d.ts +3 -1
- package/dist/components/features/media-library/media-library.d.ts +1 -1
- package/dist/components/features/media-library/media-library.strings.d.ts +33 -3
- package/dist/components/features/media-library/media-library.types.d.ts +47 -2
- package/dist/components/features/media-library/partials/media-library-partials.d.ts +1 -1
- package/dist/components/features/mentions/hooks/use-mentions-search.d.ts +7 -0
- package/dist/components/features/mentions/index.d.ts +1 -1
- package/dist/components/features/mentions/mentions.strings.d.ts +10 -2
- package/dist/components/features/mentions/partials/mention-chip.d.ts +1 -0
- package/dist/components/features/mentions/partials/mention-inline-suggestions.d.ts +8 -1
- package/dist/components/features/mentions/partials/mention-picker.d.ts +8 -1
- package/dist/components/features/mentions/partials/mention-search-error.d.ts +6 -0
- package/dist/components/features/mentions/utils/index.d.ts +0 -1
- package/dist/components/features/overlays/alert-dialog.d.ts +1 -1
- package/dist/components/features/overlays/dialog.d.ts +1 -1
- package/dist/components/features/overlays/drawer.d.ts +1 -1
- package/dist/components/features/overlays/index.d.ts +2 -2
- package/dist/components/features/overlays/overlays.strings.d.ts +2 -1
- package/dist/components/features/overlays/overlays.types.d.ts +27 -10
- package/dist/components/features/products/components/index.d.ts +0 -10
- package/dist/components/features/products/components/product-contract-overview.d.ts +1 -1
- package/dist/components/features/products/components/product-details-card.d.ts +1 -1
- package/dist/components/features/products/components/product-operations-card.d.ts +1 -1
- package/dist/components/features/products/components/product-option-action-menu.d.ts +1 -1
- package/dist/components/features/products/components/product-options-summary.d.ts +1 -1
- package/dist/components/features/products/components/product-policies-card.d.ts +1 -1
- package/dist/components/features/products/components/product-quote-preview-card.d.ts +1 -1
- package/dist/components/features/products/components/product-readiness-card.d.ts +1 -1
- package/dist/components/features/products/components/product-structure-card.d.ts +1 -1
- package/dist/components/features/products/components/product-variant-action-menu.d.ts +1 -1
- package/dist/components/features/products/components/product-variants-manager.d.ts +1 -1
- package/dist/components/features/products/components/product-variants-table.d.ts +1 -1
- package/dist/components/features/products/partials/product-surface.d.ts +15 -0
- package/dist/components/features/products/products.strings.d.ts +8 -0
- package/dist/components/features/products/products.types.d.ts +25 -7
- package/dist/components/features/questionnaire/questionnaire.types.d.ts +6 -4
- package/dist/components/features/resource/index.d.ts +2 -3
- package/dist/components/features/resource/resource.d.ts +2 -10
- package/dist/components/features/resource/resource.types.d.ts +7 -149
- package/dist/components/features/resource-assignment/partials/assignment-surface.d.ts +15 -0
- package/dist/components/features/resource-assignment/resource-assignment.strings.d.ts +6 -1
- package/dist/components/features/resource-assignment/resource-assignment.types.d.ts +6 -0
- package/dist/components/features/rich-text-editor/partials/caret-helpers.d.ts +5 -7
- package/dist/components/features/rich-text-editor/partials/html-helpers.d.ts +2 -3
- package/dist/components/features/rich-text-editor/partials/image-uploads.d.ts +6 -2
- package/dist/components/features/rich-text-editor/partials/index.d.ts +2 -3
- package/dist/components/features/rich-text-editor/partials/rich-text-editor-tiptap.d.ts +0 -1
- package/dist/components/features/rich-text-editor/partials/rich-text-editor-toolbar.d.ts +2 -3
- package/dist/components/features/rich-text-editor/rich-text-editor.types.d.ts +13 -1
- package/dist/components/features/schema-form/hooks/use-schema-form.d.ts +5 -0
- package/dist/components/features/schema-form/schema-form.d.ts +1 -1
- package/dist/components/features/schema-form/schema-form.types.d.ts +13 -5
- package/dist/components/features/suggestions/suggestions.strings.d.ts +14 -0
- package/dist/components/features/suggestions/suggestions.types.d.ts +12 -4
- package/dist/components/features/table/data-table.d.ts +1 -1
- package/dist/components/features/table/filter-bar.d.ts +1 -1
- package/dist/components/features/table/pagination.d.ts +1 -1
- package/dist/components/features/table/partials/cell-value.d.ts +1 -1
- package/dist/components/features/table/table-body.d.ts +1 -1
- package/dist/components/features/table/table-header.d.ts +1 -1
- package/dist/components/features/table/table-helpers.d.ts +31 -9
- package/dist/components/features/table/table-region.recipes.d.ts +11 -0
- package/dist/components/features/table/table-toolbar.d.ts +1 -1
- package/dist/components/features/table/table.strings.d.ts +1 -0
- package/dist/components/features/table/table.types.d.ts +74 -48
- package/dist/components/features/theme-tweaker/theme-provider-settings.d.ts +4 -0
- package/dist/components/features/theme-tweaker/theme-tweaker.strings.d.ts +10 -7
- package/dist/components/features/theme-tweaker/theme-tweaker.utils.d.ts +17 -0
- package/dist/components/layout/app-shell/app-shell.types.d.ts +46 -49
- package/dist/components/layout/app-shell/index.d.ts +2 -2
- package/dist/components/layout/app-shell/shell-regions.d.ts +9 -0
- package/dist/components/layout/app-shell/shell-skip-link.d.ts +9 -0
- package/dist/components/layout/app-shell/sidebar-inset-layout.d.ts +1 -1
- package/dist/components/layout/app-shell/stacked-layout.d.ts +1 -1
- package/dist/components/layout/app-shell/topbar-sidebar-layout.d.ts +1 -1
- package/dist/components/layout/auth/auth-shell.d.ts +1 -1
- package/dist/components/layout/auth/auth.types.d.ts +0 -5
- package/dist/components/layout/containers/inline-gutter-context.d.ts +7 -0
- package/dist/components/layout/containers/main-landmark-context.d.ts +6 -0
- package/dist/components/layout/header/header.types.d.ts +16 -6
- package/dist/components/layout/header/partials/header-global-search-trigger.d.ts +1 -1
- package/dist/components/layout/header/partials/header-notifications.d.ts +1 -1
- package/dist/components/layout/header/partials/header-search.d.ts +1 -1
- package/dist/components/layout/hooks/use-command-shortcut.d.ts +10 -1
- package/dist/components/layout/layout.types.d.ts +2 -2
- package/dist/components/layout/navigation/breadcrumb-progress/breadcrumb-progress.d.ts +1 -1
- package/dist/components/layout/navigation/breadcrumb-progress/types.d.ts +9 -0
- package/dist/components/layout/navigation/section-nav/section-nav.d.ts +8 -1
- package/dist/components/layout/page/index.d.ts +2 -3
- package/dist/components/layout/page/page.strings.d.ts +12 -0
- package/dist/components/layout/page/page.types.d.ts +7 -110
- package/dist/components/layout/page/partials/page-header.d.ts +1 -1
- package/dist/components/layout/settings/index.d.ts +1 -1
- package/dist/components/layout/settings/settings.d.ts +3 -5
- package/dist/components/layout/sidebar/app-sidebar.d.ts +1 -1
- package/dist/components/layout/sidebar/components/sidebar-grouped-navigation.d.ts +1 -1
- package/dist/components/layout/sidebar/components/sidebar-navigation-footer.d.ts +1 -1
- package/dist/components/layout/sidebar/components/sidebar-navigation.d.ts +1 -1
- package/dist/components/layout/sidebar/index.d.ts +1 -1
- package/dist/components/layout/sidebar/sidebar-navigation-rail.d.ts +15 -7
- package/dist/components/layout/sidebar/sidebar.types.d.ts +10 -12
- package/dist/components/layout/sidebar/sidebar.utils.d.ts +4 -0
- package/dist/components/layout/workspace/workspace.strings.d.ts +2 -2
- package/dist/components/layout/workspace/workspace.types.d.ts +13 -7
- package/dist/components/primitives/date.d.ts +22 -3
- package/dist/components/primitives/file-size.d.ts +8 -2
- package/dist/components/primitives/index.d.ts +1 -1
- package/dist/components/primitives/initials.d.ts +3 -1
- package/dist/components/primitives/link.d.ts +8 -1
- package/dist/components/primitives/money.d.ts +1 -1
- package/dist/components/primitives/number.d.ts +2 -1
- package/dist/components/typography/heading.d.ts +9 -3
- package/dist/components/typography/index.d.ts +1 -1
- package/dist/components/typography/text-link.d.ts +10 -3
- package/dist/components/ui/badge.d.ts +2 -4
- package/dist/components/ui/breadcrumb.d.ts +2 -3
- package/dist/components/ui/button.d.ts +8 -2
- package/dist/components/ui/collapsible.d.ts +1 -4
- package/dist/components/ui/command.d.ts +20 -18
- package/dist/components/ui/dialog.d.ts +3 -9
- package/dist/components/ui/empty.d.ts +2 -2
- package/dist/components/ui/input-group.d.ts +3 -3
- package/dist/components/ui/item.d.ts +3 -3
- package/dist/components/ui/popover.d.ts +3 -7
- package/dist/components/ui/sheet.d.ts +4 -12
- package/dist/components/ui/sidebar-state.d.ts +6 -1
- package/dist/components/ui/sidebar.d.ts +7 -4
- package/dist/components/ui/tabs.d.ts +2 -2
- package/dist/components/ui/toggle-group.d.ts +3 -3
- package/dist/components/ui/toggle.d.ts +2 -2
- package/dist/components/ui/tooltip.d.ts +1 -3
- package/dist/{containers-CSdc32h9.js → containers-BdfLTP4w.js} +37 -32
- package/dist/containers-BdfLTP4w.js.map +1 -0
- package/dist/content-block-hooks-Z3iKjqd1.js +17 -0
- package/dist/content-block-hooks-Z3iKjqd1.js.map +1 -0
- package/dist/{copyable-3fdHfMR3.js → copyable-Bmr14W0d.js} +6 -6
- package/dist/{copyable-3fdHfMR3.js.map → copyable-Bmr14W0d.js.map} +1 -1
- package/dist/{data-display-Cmj-xZYl.js → data-display-CWe9SOYh.js} +264 -251
- package/dist/data-display-CWe9SOYh.js.map +1 -0
- package/dist/date-3qsCE1ID.js +209 -0
- package/dist/date-3qsCE1ID.js.map +1 -0
- package/dist/{date-picker-CyQlFYsP.js → date-picker-D1keJQIG.js} +129 -129
- package/dist/date-picker-D1keJQIG.js.map +1 -0
- package/dist/date-pickers-D8aJoeHc.js +185 -0
- package/dist/date-pickers-D8aJoeHc.js.map +1 -0
- package/dist/disclosure-panel-B0HFNZ9x.js.map +1 -1
- package/dist/{display-CT_N2a3w.js → display-VlmP1I0i.js} +23 -46
- package/dist/display-VlmP1I0i.js.map +1 -0
- package/dist/{dropdown-menu-C08iIugv.js → dropdown-menu-B8hjvbkS.js} +9 -9
- package/dist/{dropdown-menu-C08iIugv.js.map → dropdown-menu-B8hjvbkS.js.map} +1 -1
- package/dist/dropzone-CHBNK3de.js +116 -0
- package/dist/dropzone-CHBNK3de.js.map +1 -0
- package/dist/features/activities.js +682 -628
- package/dist/features/activities.js.map +1 -1
- package/dist/features/ai-chat.js +258 -226
- package/dist/features/ai-chat.js.map +1 -1
- package/dist/features/appointment-calendar.js +436 -340
- package/dist/features/appointment-calendar.js.map +1 -1
- package/dist/features/async-preview.js +351 -265
- package/dist/features/async-preview.js.map +1 -1
- package/dist/features/combobox.js +2 -2
- package/dist/features/comments.js +1 -1
- package/dist/features/data-view.js +212 -151
- package/dist/features/data-view.js.map +1 -1
- package/dist/features/email-composer/engine.js +1 -1
- package/dist/features/email-composer.js +344 -315
- package/dist/features/email-composer.js.map +1 -1
- package/dist/features/event-calendar.js +504 -355
- package/dist/features/event-calendar.js.map +1 -1
- package/dist/features/filters.js +2 -2
- package/dist/features/global-search.js +250 -206
- package/dist/features/global-search.js.map +1 -1
- package/dist/features/kanban.js +269 -189
- package/dist/features/kanban.js.map +1 -1
- package/dist/features/map.js +385 -371
- package/dist/features/map.js.map +1 -1
- package/dist/features/media-library.js +1571 -1199
- package/dist/features/media-library.js.map +1 -1
- package/dist/features/mentions.js +2 -2
- package/dist/features/overlays.js +2 -2
- package/dist/features/products.js +1780 -1691
- package/dist/features/products.js.map +1 -1
- package/dist/features/questionnaire.js +165 -152
- package/dist/features/questionnaire.js.map +1 -1
- package/dist/features/resource-assignment.js +223 -191
- package/dist/features/resource-assignment.js.map +1 -1
- package/dist/features/resource.js +55 -220
- package/dist/features/resource.js.map +1 -1
- package/dist/features/rich-text-editor.js +3 -3
- package/dist/features/schema-form.js +280 -228
- package/dist/features/schema-form.js.map +1 -1
- package/dist/features/suggestions.js +48 -39
- package/dist/features/suggestions.js.map +1 -1
- package/dist/features/table.js +2 -2
- package/dist/features/theme-tweaker.js +723 -633
- package/dist/features/theme-tweaker.js.map +1 -1
- package/dist/feedback-DmqmXKLn.js +254 -0
- package/dist/feedback-DmqmXKLn.js.map +1 -0
- package/dist/{field-affordance-recipes-D6H7tVJi.js → field-affordance-recipes-DfbMadot.js} +13 -9
- package/dist/field-affordance-recipes-DfbMadot.js.map +1 -0
- package/dist/{field-state-recipes-7sza8QbC.js → field-state-recipes-EtCxpEy3.js} +6 -2
- package/dist/field-state-recipes-EtCxpEy3.js.map +1 -0
- package/dist/filters-BviMRMLS.js +2692 -0
- package/dist/filters-BviMRMLS.js.map +1 -0
- package/dist/{focus-recipes-B653VaLq.js → focus-recipes-DSkiUvUp.js} +3 -3
- package/dist/focus-recipes-DSkiUvUp.js.map +1 -0
- package/dist/{form-field-CAPdwdnZ.js → form-field-BdfCwSoQ.js} +5 -5
- package/dist/{form-field-CAPdwdnZ.js.map → form-field-BdfCwSoQ.js.map} +1 -1
- package/dist/{form-sizing-CgcrUbLU.js → form-sizing-DE_dZw32.js} +3 -3
- package/dist/{form-sizing-CgcrUbLU.js.map → form-sizing-DE_dZw32.js.map} +1 -1
- package/dist/{forms-B3W8CH7-.js → forms-B8DzJnBN.js} +35 -35
- package/dist/forms-B8DzJnBN.js.map +1 -0
- package/dist/forms-numeric-DOBswjKj.js +992 -0
- package/dist/forms-numeric-DOBswjKj.js.map +1 -0
- package/dist/{header-ZIIsRKxP.js → header-Cq3G0ZRP.js} +100 -95
- package/dist/header-Cq3G0ZRP.js.map +1 -0
- package/dist/{hooks-BitHSh-Y.js → hooks-DHfeSMAO.js} +34 -14
- package/dist/hooks-DHfeSMAO.js.map +1 -0
- package/dist/{http-D_6rOnzU.js → http-Cu-GPpss.js} +61 -35
- package/dist/http-Cu-GPpss.js.map +1 -0
- package/dist/{icon-badge-npxF1SLX.js → icon-badge-B0Kq7wom.js} +3 -3
- package/dist/{icon-badge-npxF1SLX.js.map → icon-badge-B0Kq7wom.js.map} +1 -1
- package/dist/index.js +6 -6
- package/dist/inline-gutter-context-CSqmrMFZ.js +11 -0
- package/dist/inline-gutter-context-CSqmrMFZ.js.map +1 -0
- package/dist/{input-DIREVYHs.js → input-2YrgTUrz.js} +3 -3
- package/dist/{input-DIREVYHs.js.map → input-2YrgTUrz.js.map} +1 -1
- package/dist/{input-7KAc7XQL.js → input-DfJyrjoR.js} +6 -6
- package/dist/{input-7KAc7XQL.js.map → input-DfJyrjoR.js.map} +1 -1
- package/dist/{interaction-recipes-4wZ2tvfb.js → interaction-recipes-DmuS1ase.js} +2 -2
- package/dist/{interaction-recipes-4wZ2tvfb.js.map → interaction-recipes-DmuS1ase.js.map} +1 -1
- package/dist/item-GJ9mvCcg.js +279 -0
- package/dist/item-GJ9mvCcg.js.map +1 -0
- package/dist/layout/app-shell.js +1 -1
- package/dist/layout/auth.js +1 -1
- package/dist/layout/containers.js +1 -1
- package/dist/layout/header.js +1 -1
- package/dist/layout/hooks.js +1 -1
- package/dist/layout/navigation.js +1 -1
- package/dist/layout/page.js +2 -2
- package/dist/layout/settings.js +2 -2
- package/dist/layout/sidebar.js +3 -3
- package/dist/layout/workspace.js +1 -1
- package/dist/layout.js +12 -12
- package/dist/{layout.types-E_GAApzO.js → layout.types-DbtnyAtd.js} +11 -8
- package/dist/layout.types-DbtnyAtd.js.map +1 -0
- package/dist/lib/anchored-positioning.d.ts +11 -0
- package/dist/lib/field-affordance-recipes.d.ts +10 -0
- package/dist/lib/field-state-recipes.d.ts +6 -0
- package/dist/lib/focus-recipes.d.ts +7 -0
- package/dist/lib/format.d.ts +25 -0
- package/dist/lib/money-format.d.ts +6 -0
- package/dist/lib/motion-recipes.d.ts +6 -0
- package/dist/lib/surface-recipes.d.ts +32 -2
- package/dist/lib/theme-scope.d.ts +17 -1
- package/dist/lib/token-merge.generated.d.ts +13 -19
- package/dist/lib/ui-provider/index.d.ts +1 -1
- package/dist/lib/ui-provider/types.d.ts +5 -0
- package/dist/lib/use-controllable-state.d.ts +16 -0
- package/dist/lib/use-copy-feedback.d.ts +15 -0
- package/dist/lib/utils.js +1 -1
- package/dist/lib/variant-props.d.ts +9 -0
- package/dist/main-landmark-context-BAsyqp2I.js +11 -0
- package/dist/main-landmark-context-BAsyqp2I.js.map +1 -0
- package/dist/mentions-zz0ewNIq.js +670 -0
- package/dist/mentions-zz0ewNIq.js.map +1 -0
- package/dist/{message-BJHnn43M.js → message-BiiVrRrm.js} +10 -7
- package/dist/{message-BJHnn43M.js.map → message-BiiVrRrm.js.map} +1 -1
- package/dist/{metadata-list-XkqZ_UXH.js → metadata-list-G85roWjS.js} +13 -12
- package/dist/metadata-list-G85roWjS.js.map +1 -0
- package/dist/{motion-recipes-DitYv6P2.js → motion-recipes-CUc_aHuG.js} +7 -4
- package/dist/motion-recipes-CUc_aHuG.js.map +1 -0
- package/dist/navigation-C0Be5C3i.js +304 -0
- package/dist/navigation-C0Be5C3i.js.map +1 -0
- package/dist/{navigation-Bt-v7rWP.js → navigation-CmqaQR_G.js} +99 -103
- package/dist/navigation-CmqaQR_G.js.map +1 -0
- package/dist/number-NFWKIoiK.js +340 -0
- package/dist/number-NFWKIoiK.js.map +1 -0
- package/dist/{overflow-tab-bar-BQCA2Zn2.js → overflow-tab-bar-DV7HE_3t.js} +8 -8
- package/dist/{overflow-tab-bar-BQCA2Zn2.js.map → overflow-tab-bar-DV7HE_3t.js.map} +1 -1
- package/dist/overlays-D-gAIfPF.js +1018 -0
- package/dist/overlays-D-gAIfPF.js.map +1 -0
- package/dist/page-D4pQhgSq.js +216 -0
- package/dist/page-D4pQhgSq.js.map +1 -0
- package/dist/{page-header-commands-DIKspJfx.js → page-header-commands-elelNOfd.js} +29 -29
- package/dist/{page-header-commands-DIKspJfx.js.map → page-header-commands-elelNOfd.js.map} +1 -1
- package/dist/{pagination-Br8TdV9A.js → pagination-BuSWw1US.js} +22 -23
- package/dist/pagination-BuSWw1US.js.map +1 -0
- package/dist/{popover-k8TdUcAt.js → popover-BpMxbqEK.js} +73 -69
- package/dist/popover-BpMxbqEK.js.map +1 -0
- package/dist/{popover-menu-yn-o0kyA.js → popover-menu-CO-_iiuz.js} +7 -7
- package/dist/{popover-menu-yn-o0kyA.js.map → popover-menu-CO-_iiuz.js.map} +1 -1
- package/dist/{popover.recipes-DJ0AkUan.js → popover.recipes-BqkdvlZn.js} +3 -4
- package/dist/{popover.recipes-DJ0AkUan.js.map → popover.recipes-BqkdvlZn.js.map} +1 -1
- package/dist/{portal-recipes-DyUXqUtD.js → portal-recipes-BPeS4rGB.js} +2 -2
- package/dist/{portal-recipes-DyUXqUtD.js.map → portal-recipes-BPeS4rGB.js.map} +1 -1
- package/dist/primitives-BlC1lXBr.js +447 -0
- package/dist/primitives-BlC1lXBr.js.map +1 -0
- package/dist/primitives.js +4 -4
- package/dist/{progress-DZFXXzPs.js → progress-RARK8AjB.js} +5 -5
- package/dist/{progress-DZFXXzPs.js.map → progress-RARK8AjB.js.map} +1 -1
- package/dist/receipt-CUf2Vegp.js +114 -0
- package/dist/receipt-CUf2Vegp.js.map +1 -0
- package/dist/{rich-text-BnTzZjIo.js → rich-text-Cypm9__d.js} +7 -8
- package/dist/{rich-text-BnTzZjIo.js.map → rich-text-Cypm9__d.js.map} +1 -1
- package/dist/rich-text-editor-Z6cQepsA.js +919 -0
- package/dist/rich-text-editor-Z6cQepsA.js.map +1 -0
- package/dist/rich-text-editor-toolbar-DYbRJARB.js +100 -0
- package/dist/rich-text-editor-toolbar-DYbRJARB.js.map +1 -0
- package/dist/rich-text-tree-DdKHIJx4.js +154 -0
- package/dist/rich-text-tree-DdKHIJx4.js.map +1 -0
- package/dist/safe-image-src-C6kQSMBZ.js +17 -0
- package/dist/safe-image-src-C6kQSMBZ.js.map +1 -0
- package/dist/{scroll-area-Bj6CRUif.js → scroll-area-B9HKbji0.js} +3 -3
- package/dist/{scroll-area-Bj6CRUif.js.map → scroll-area-B9HKbji0.js.map} +1 -1
- package/dist/{separator-DM6gs2vu.js → separator-DaDe26sf.js} +3 -3
- package/dist/separator-DaDe26sf.js.map +1 -0
- package/dist/{separator-B9ewiCGO.js → separator-KGsNXt2J.js} +2 -2
- package/dist/{separator-B9ewiCGO.js.map → separator-KGsNXt2J.js.map} +1 -1
- package/dist/services/actions/action-adapters.d.ts +5 -2
- package/dist/services/actions/index.d.ts +1 -1
- package/dist/services/actions.js +2 -2
- package/dist/services/actions.js.map +1 -1
- package/dist/settings-D5j_RJvT.js +160 -0
- package/dist/settings-D5j_RJvT.js.map +1 -0
- package/dist/sheet-B6j_BE9O.js +241 -0
- package/dist/sheet-B6j_BE9O.js.map +1 -0
- package/dist/{sidebar-CmD6a-HK.js → sidebar-C-iQ_TJP.js} +377 -351
- package/dist/sidebar-C-iQ_TJP.js.map +1 -0
- package/dist/sidebar-D5VO2W8S.js +715 -0
- package/dist/sidebar-D5VO2W8S.js.map +1 -0
- package/dist/{skeleton-DDgdhmu9.js → skeleton-Cab_KgVo.js} +12 -12
- package/dist/skeleton-Cab_KgVo.js.map +1 -0
- package/dist/{smart-card-B6vLxqa_.js → smart-card-C59z6KFO.js} +217 -210
- package/dist/smart-card-C59z6KFO.js.map +1 -0
- package/dist/{structure-DZJ2wbAU.js → structure-DElaQwwN.js} +2 -2
- package/dist/{structure-DZJ2wbAU.js.map → structure-DElaQwwN.js.map} +1 -1
- package/dist/style.css +1 -1
- package/dist/{surface-recipes-C8mNycaY.js → surface-recipes-DV6rrOFq.js} +10 -2
- package/dist/surface-recipes-DV6rrOFq.js.map +1 -0
- package/dist/{table-CXSPHH25.js → table-CSRUgpdK.js} +62 -61
- package/dist/table-CSRUgpdK.js.map +1 -0
- package/dist/table-DdXDBsR_.js +1657 -0
- package/dist/table-DdXDBsR_.js.map +1 -0
- package/dist/{tabs-C4Kr_hCr.js → tabs-WnHfV2pM.js} +27 -27
- package/dist/tabs-WnHfV2pM.js.map +1 -0
- package/dist/{text-inputs-jdkS3ReG.js → text-inputs-ljyBYaCd.js} +112 -112
- package/dist/text-inputs-ljyBYaCd.js.map +1 -0
- package/dist/theme.css +21 -5
- package/dist/timelines-mOmS9Eh3.js +479 -0
- package/dist/timelines-mOmS9Eh3.js.map +1 -0
- package/dist/tooltip-yjX-Uv-p.js +112 -0
- package/dist/tooltip-yjX-Uv-p.js.map +1 -0
- package/dist/{tree-CeYVzdFE.js → tree-YpkxUG2Z.js} +80 -72
- package/dist/tree-YpkxUG2Z.js.map +1 -0
- package/dist/typography/rich-text.js +1 -1
- package/dist/{typography-C7-YMW1S.js → typography-C0dELqYV.js} +46 -40
- package/dist/typography-C0dELqYV.js.map +1 -0
- package/dist/typography.js +1 -1
- package/dist/{ui-provider-C-74NVLc.js → ui-provider-Bu1S-o96.js} +4 -3
- package/dist/ui-provider-Bu1S-o96.js.map +1 -0
- package/dist/ui-provider.js +2 -2
- package/dist/{upload-Hdm5gObf.js → upload-DMuMYJFT.js} +276 -268
- package/dist/upload-DMuMYJFT.js.map +1 -0
- package/dist/{usage-card-9s8hLDfn.js → usage-card-DDPki5P1.js} +57 -54
- package/dist/usage-card-DDPki5P1.js.map +1 -0
- package/dist/use-controllable-state-BlP8SyBI.js +13 -0
- package/dist/use-controllable-state-BlP8SyBI.js.map +1 -0
- package/dist/use-copy-feedback-CzcaqlLf.js +28 -0
- package/dist/use-copy-feedback-CzcaqlLf.js.map +1 -0
- package/dist/use-metric-format-options-Dk4rC1NO.js +251 -0
- package/dist/use-metric-format-options-Dk4rC1NO.js.map +1 -0
- package/dist/{utils-DhuoqFy4.js → utils-BVbAG2J6.js} +98 -76
- package/dist/utils-BVbAG2J6.js.map +1 -0
- package/dist/value-inputs-h5MwjGCo.js +982 -0
- package/dist/value-inputs-h5MwjGCo.js.map +1 -0
- package/dist/value-typography-D15uwfj-.js +154 -0
- package/dist/value-typography-D15uwfj-.js.map +1 -0
- package/dist/workspace-DIryPqBt.js +400 -0
- package/dist/workspace-DIryPqBt.js.map +1 -0
- package/docs/consumer-skill/SKILL.md +7 -0
- package/docs/consumer-skill/agents/themelia-ui-designer.md +11 -2
- package/docs/consumer-skill/examples/analytics.tsx +1 -1
- package/docs/consumer-skill/examples/app-layout.tsx +3 -3
- package/docs/consumer-skill/examples/commerce-lines.tsx +7 -5
- package/docs/consumer-skill/examples/detail.tsx +3 -2
- package/docs/consumer-skill/examples/email-composer.tsx +1 -1
- package/docs/consumer-skill/examples/index-table.tsx +2 -2
- package/docs/consumer-skill/examples/scoped-directory.tsx +7 -6
- package/docs/consumer-skill/references/agents-md.md +20 -16
- package/docs/consumer-skill/references/analytics.md +20 -6
- package/docs/consumer-skill/references/building-views.md +213 -0
- package/docs/consumer-skill/references/catalogue.md +617 -0
- package/docs/consumer-skill/references/component-contracts.json +10202 -18084
- package/docs/consumer-skill/references/composition.md +21 -17
- package/docs/consumer-skill/references/discovery.md +8 -5
- package/docs/consumer-skill/references/installation.md +10 -4
- package/docs/consumer-skill/references/integration.md +5 -5
- package/docs/consumer-skill/references/product-composition.md +2 -2
- package/docs/consumer-skill/references/public-api.json +580 -633
- package/docs/consumer-skill/references/review.md +6 -4
- package/docs/consumer-skill/references/screen-archetypes.md +2 -2
- package/docs/consumer-skill/references/theming.md +1 -1
- package/docs/consumer-skill/references/tokens.json +4 -4
- package/docs/consumer-skill/references/workflows.md +7 -7
- package/docs/consumer-skill/scripts/composition-policy.mjs +40 -20
- package/docs/consumer-skill/scripts/composition.mjs +4 -1
- package/docs/consumer-skill/scripts/discovery.mjs +3 -1
- package/docs/consumer-skill/scripts/setup-skills.mjs +31 -4
- package/docs/consumer-skills/themelia-components/SKILL.md +8 -4
- package/docs/consumer-skills/themelia-composition/SKILL.md +7 -3
- package/docs/consumer-skills/themelia-design/SKILL.md +7 -1
- package/docs/consumer-skills/themelia-tokenization/SKILL.md +1 -1
- package/package.json +9 -12
- package/templates/README.md +3 -2
- package/templates/admin-shell-template.tsx +49 -9
- package/templates/analytics-operations-template.tsx +20 -24
- package/templates/customers-template.tsx +12 -9
- package/templates/index.ts +2 -8
- package/templates/orders-template.tsx +28 -24
- package/templates/products-template.tsx +14 -4
- package/templates/user-permissions-template.tsx +11 -14
- package/dist/accordion-0tQUZ20r.js.map +0 -1
- package/dist/action-menu-C0gjzLyE.js +0 -284
- package/dist/action-menu-C0gjzLyE.js.map +0 -1
- package/dist/ai-artifact-CGGpQryR.js +0 -1200
- package/dist/ai-artifact-CGGpQryR.js.map +0 -1
- package/dist/anchored-positioning-DPnKTvNs.js +0 -6
- package/dist/anchored-positioning-DPnKTvNs.js.map +0 -1
- package/dist/app-shell-EHuuRDGy.js +0 -321
- package/dist/app-shell-EHuuRDGy.js.map +0 -1
- package/dist/auth-B0girIk_.js.map +0 -1
- package/dist/badge-wWauMgAt.js.map +0 -1
- package/dist/base/sheet.js +0 -3
- package/dist/breadcrumbs-Bp9Ke7kd.js.map +0 -1
- package/dist/button-ChBovTx0.js.map +0 -1
- package/dist/buttons-DeW0bQeK.js.map +0 -1
- package/dist/cascader-CrAl9zD5.js +0 -439
- package/dist/cascader-CrAl9zD5.js.map +0 -1
- package/dist/choice-inputs-DHGtx0QV.js.map +0 -1
- package/dist/code-block-BSJyq9e-.js.map +0 -1
- package/dist/collapsible-BzJ91LUG.js +0 -81
- package/dist/collapsible-BzJ91LUG.js.map +0 -1
- package/dist/combobox-Bcvu5J8O.js +0 -363
- package/dist/combobox-Bcvu5J8O.js.map +0 -1
- package/dist/combobox-C2JiSQPc.js +0 -915
- package/dist/combobox-C2JiSQPc.js.map +0 -1
- package/dist/command-9e52NPgK.js +0 -425
- package/dist/command-9e52NPgK.js.map +0 -1
- package/dist/comments-BsgErEqd.js +0 -1174
- package/dist/comments-BsgErEqd.js.map +0 -1
- package/dist/components/base/buttons/tooltip-button.d.ts +0 -7
- package/dist/components/base/display/content-block.d.ts +0 -75
- package/dist/components/base/display/content-block.strings.d.ts +0 -5
- package/dist/components/base/sheet/index.d.ts +0 -29
- package/dist/components/blocks/ai/use-copy-feedback.d.ts +0 -6
- package/dist/components/blocks/data-display/metadata/index.d.ts +0 -30
- package/dist/components/features/mentions/utils/split-html-by-mentions.d.ts +0 -10
- package/dist/components/features/resource/resource.strings.d.ts +0 -12
- package/dist/components/features/rich-text-editor/partials/rich-text-editor-fallback.d.ts +0 -8
- package/dist/components/features/sync/index.d.ts +0 -26
- package/dist/components/features/sync/sync-range-dialog-form.d.ts +0 -5
- package/dist/components/features/sync/sync.strings.d.ts +0 -18
- package/dist/components/features/sync/sync.types.d.ts +0 -44
- package/dist/components/layout/page/partials/page-actions.d.ts +0 -3
- package/dist/components/ui/slot.d.ts +0 -6
- package/dist/containers-CSdc32h9.js.map +0 -1
- package/dist/data-display-Cmj-xZYl.js.map +0 -1
- package/dist/date-Br0FicVv.js +0 -144
- package/dist/date-Br0FicVv.js.map +0 -1
- package/dist/date-picker-CyQlFYsP.js.map +0 -1
- package/dist/date-pickers-tj2MXmXd.js +0 -185
- package/dist/date-pickers-tj2MXmXd.js.map +0 -1
- package/dist/display-CT_N2a3w.js.map +0 -1
- package/dist/features/sync.js +0 -142
- package/dist/features/sync.js.map +0 -1
- package/dist/feedback-Dzo1xtAU.js +0 -246
- package/dist/feedback-Dzo1xtAU.js.map +0 -1
- package/dist/field-affordance-recipes-D6H7tVJi.js.map +0 -1
- package/dist/field-state-recipes-7sza8QbC.js.map +0 -1
- package/dist/filters-Dl80yYtN.js +0 -2415
- package/dist/filters-Dl80yYtN.js.map +0 -1
- package/dist/focus-recipes-B653VaLq.js.map +0 -1
- package/dist/forms-B3W8CH7-.js.map +0 -1
- package/dist/forms-numeric-CwjQJe-O.js +0 -991
- package/dist/forms-numeric-CwjQJe-O.js.map +0 -1
- package/dist/header-ZIIsRKxP.js.map +0 -1
- package/dist/hooks-BitHSh-Y.js.map +0 -1
- package/dist/http-D_6rOnzU.js.map +0 -1
- package/dist/item-FfWnaYST.js +0 -278
- package/dist/item-FfWnaYST.js.map +0 -1
- package/dist/layout.types-E_GAApzO.js.map +0 -1
- package/dist/media-gallery-C81DAnKI.js +0 -203
- package/dist/media-gallery-C81DAnKI.js.map +0 -1
- package/dist/mentions-qOnedSt4.js +0 -639
- package/dist/mentions-qOnedSt4.js.map +0 -1
- package/dist/metadata-list-XkqZ_UXH.js.map +0 -1
- package/dist/motion-recipes-DitYv6P2.js.map +0 -1
- package/dist/navigation-BgtPJAhi.js +0 -288
- package/dist/navigation-BgtPJAhi.js.map +0 -1
- package/dist/navigation-Bt-v7rWP.js.map +0 -1
- package/dist/number-CYqBcrSj.js +0 -346
- package/dist/number-CYqBcrSj.js.map +0 -1
- package/dist/overlays-CC8zI3Du.js +0 -1017
- package/dist/overlays-CC8zI3Du.js.map +0 -1
- package/dist/page-BoQ1VaFJ.js +0 -331
- package/dist/page-BoQ1VaFJ.js.map +0 -1
- package/dist/pagination-Br8TdV9A.js.map +0 -1
- package/dist/popover-k8TdUcAt.js.map +0 -1
- package/dist/primitives-BkkQjYl7.js +0 -385
- package/dist/primitives-BkkQjYl7.js.map +0 -1
- package/dist/receipt-C7LhOg7Q.js +0 -116
- package/dist/receipt-C7LhOg7Q.js.map +0 -1
- package/dist/rich-text-editor-CAurDwT5.js +0 -1273
- package/dist/rich-text-editor-CAurDwT5.js.map +0 -1
- package/dist/rich-text-editor-toolbar-DbXig7Jk.js +0 -99
- package/dist/rich-text-editor-toolbar-DbXig7Jk.js.map +0 -1
- package/dist/rich-text-tree-BqyQ_7-R.js +0 -66
- package/dist/rich-text-tree-BqyQ_7-R.js.map +0 -1
- package/dist/sanitize-html-BWkH4dLM.js +0 -105
- package/dist/sanitize-html-BWkH4dLM.js.map +0 -1
- package/dist/separator-DM6gs2vu.js.map +0 -1
- package/dist/settings-DZPHgpx4.js +0 -155
- package/dist/settings-DZPHgpx4.js.map +0 -1
- package/dist/sheet-C4DHsgLk.js +0 -250
- package/dist/sheet-C4DHsgLk.js.map +0 -1
- package/dist/sidebar-C8BnDwTH.js +0 -709
- package/dist/sidebar-C8BnDwTH.js.map +0 -1
- package/dist/sidebar-CmD6a-HK.js.map +0 -1
- package/dist/skeleton-DDgdhmu9.js.map +0 -1
- package/dist/slot-CLF9kLrS.js +0 -16
- package/dist/slot-CLF9kLrS.js.map +0 -1
- package/dist/smart-card-B6vLxqa_.js.map +0 -1
- package/dist/surface-recipes-C8mNycaY.js.map +0 -1
- package/dist/table-CBonSdTp.js +0 -1584
- package/dist/table-CBonSdTp.js.map +0 -1
- package/dist/table-CXSPHH25.js.map +0 -1
- package/dist/tabs-C4Kr_hCr.js.map +0 -1
- package/dist/text-inputs-jdkS3ReG.js.map +0 -1
- package/dist/timelines-CoPwdJP0.js +0 -458
- package/dist/timelines-CoPwdJP0.js.map +0 -1
- package/dist/tooltip-31NwIpTo.js +0 -113
- package/dist/tooltip-31NwIpTo.js.map +0 -1
- package/dist/tree-CeYVzdFE.js.map +0 -1
- package/dist/typography-C7-YMW1S.js.map +0 -1
- package/dist/ui-provider-C-74NVLc.js.map +0 -1
- package/dist/upload-Hdm5gObf.js.map +0 -1
- package/dist/upload-queue-D0sYPuqo.js +0 -409
- package/dist/upload-queue-D0sYPuqo.js.map +0 -1
- package/dist/usage-card-9s8hLDfn.js.map +0 -1
- package/dist/utils-DhuoqFy4.js.map +0 -1
- package/dist/value-inputs-D3aPgq9H.js +0 -980
- package/dist/value-inputs-D3aPgq9H.js.map +0 -1
- package/dist/value-typography-uSzzG9Gf.js +0 -122
- package/dist/value-typography-uSzzG9Gf.js.map +0 -1
- package/dist/workspace-CC8Vchiu.js +0 -411
- package/dist/workspace-CC8Vchiu.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"theme-tweaker.js","names":["PortalThemeScope","resolveUIConfig","ThemeScope$1","UIProvider","cn","Button","Text","Heading","focusRecipes","Grid","Stack","AlertMetadataItem","AlertMetadata","Alert","Card","AlertTitle","compositionRhythm","useOverlayVisibility","ActionDialog","MonoValue","SmartAccordion","Badge","serializeScopedThemeModes","Input","FormField","Textarea","ToggleField","Select","ColorInput","SliderField","DecimalInput","Item","TabsTrigger","TabsList","Tabs","defaultAdminUIThemeSelectors","VARIABLE_NAME_PATTERN","UNSAFE_CSS_VALUE_PATTERN","UNSAFE_SELECTOR_PATTERN","createAdminUITheme","value","isAdminUIThemeVariableName","validatedEntries","overrides","entry","name","rawValue","strict","hasControlCharacter","code","character","left","right","validateSelector","selector","scope","serializeBlock","entries","serializeAdminUITheme","selectors","options","shared","light","dark","modeScope","blocks","theme","block","banner","createSerializableUIConfig","resolved","config","_runtimeDateLocale","_runtimeRelativeTimeFormatter","serializableDates","serializeUIProviderConfig","serializable","getActiveAdminUIThemeOverrides","mode","adminUIThemeToStyle","countAdminUIThemeOverrides","createScopedAdminUIThemeSelectors","scopeSelector","createThemeTweakerExportArtifact","resolvedTheme","artifactOptions","providerConfig","downloadAdminUITheme","artifact","downloadAdminUITextFile","blob","text","mimeType","url","anchor","fileName","ThemeScope","forwardRef","props","className","style","resolveTarget","target","selfRef","useAppliedTheme","apply","element","originals","applied","originalLight","originalDark","manageModeClass","expected","original","AdminUIThemeProvider","scopeProps","useRef","forwardedRef","effectiveTheme","useMemo","THEME_COLORS","STATE_COLORS","SURFACE_COLORS","FONT_VARIABLES","TYPOGRAPHY_VARIABLES","step","SHADOW_VARIABLES","STRUCTURAL_VARIABLES","LAYOUT_VARIABLES","DESCRIPTIONS","LABELS","RANGE_CONTROLS","labelFromName","part","genericDescription","group","fields","names","defaultThemeTweakerFields","field","defaultThemeProviderSettingsStrings","selectOptions","values","strings","ThemeProviderSettings","scaleOptions","COMPONENT_SCALES","weekdays","day","update","slice","key","Info","AlertDescription","event","next","SEMANTIC_TONES","defaultThemeTweakerStrings","clamp","max","min","contrastForeground","digits","color","hex","offset","channel","sum","index","match","lightness","deriveAdminUIPalette","harmonize","night","primary","BODY_STEPS","HEADING_STEPS","deriveAdminUITypeScale","boundedBase","baseSize","boundedRatio","ratio","factor","pixels","deriveAdminUIElevation","intensity","alpha","GROUPS","GROUP_ICONS","Palette","ShieldCheck","Type","Shapes","LayoutGrid","Settings2","ThemeExportArtifact","titleId","useId","title","description","Copy","onCopy","copyLabel","Download","downloading","onDownload","downloadLabel","parseRangeValue","parsed","control","serializeRangeValue","precision","resolveInspectionTarget","self","captureResolvedTheme","root","originalStyles","capture","computed","sharedNames","ThemeVariableField","id","resetAction","RotateCcw","onReset","placeholder","effectiveValue","interpolateString","onChange","currentValue","DefaultThemePreview","CheckCircle2","updateThemeVariable","bucket","nextBucket","ThemeTweaker","stringsProp","useStrings","internalTheme","setInternalTheme","useState","defaultValue","internalConfig","setInternalConfig","defaultConfig","setGroup","search","setSearch","derivePalette","setDerivePalette","baseTypeSize","setBaseTypeSize","typeRatio","setTypeRatio","elevationIntensity","setElevationIntensity","actionStatus","setActionStatus","exportDialog","exporting","setExporting","useImperativeHandle","setResolvedTheme","effectiveValues","setEffectiveValues","timeout","inspectionTarget","serializationError","exportTheme","error","providerFileName","cssText","overrideCount","normalizedSearch","visibleFields","visibleSections","sections","existing","b","a","commit","onValueChange","commitConfig","onConfigChange","applyModeRecipe","applySharedRecipe","setMode","onModeChange","exportThemeArtifact","onExport","copyText","exportProviderConfig","reset","previous","statusMessage","recipeControls","content","preview","showIntro","Sun","Moon","actionsSlot","Search","nextGroup","GroupIcon","scopes","visibleSection","scopeLabel","sectionLabel","fieldValue"],"sources":["../../src/components/features/theme-tweaker/theme-tweaker.utils.ts","../../src/components/features/theme-tweaker/theme-scope.tsx","../../src/components/features/theme-tweaker/use-applied-theme.ts","../../src/components/features/theme-tweaker/admin-ui-theme-provider.tsx","../../src/components/features/theme-tweaker/theme-tweaker.fields.ts","../../src/components/features/theme-tweaker/theme-provider-settings.tsx","../../src/components/features/theme-tweaker/theme-tweaker.strings.ts","../../src/components/features/theme-tweaker/theme-tweaker.recipes.ts","../../src/components/features/theme-tweaker/theme-tweaker.tsx"],"sourcesContent":["import {\n\ttype UIConfig,\n} from '../../../lib/ui-provider';\nimport { resolveUIConfig } from '../../../lib/ui-provider/store';\nimport { serializeScopedThemeModes } from '../../../lib/theme-mode-css';\n\nimport type {\n\tAdminUIThemeDefinition,\n\tAdminUIThemeMode,\n\tAdminUIThemeOverrides,\n\tAdminUIThemeSelectors,\n\tAdminUIThemeStyle,\n\tAdminUIThemeVariableName,\n\tCreateThemeTweakerExportArtifactOptions,\n\tSerializeAdminUIThemeOptions,\n\tThemeTweakerExportArtifact,\n} from './theme-tweaker.types';\n\nexport const defaultAdminUIThemeSelectors: AdminUIThemeSelectors = {\n\tshared: ':root',\n\tlight: ':root,\\n.light',\n\tdark: '.dark',\n};\n\nconst VARIABLE_NAME_PATTERN = /^--[a-z][a-z0-9-]*$/i;\nconst UNSAFE_CSS_VALUE_PATTERN = /[;{}]/;\nconst UNSAFE_SELECTOR_PATTERN = /[;{}]/;\n\nexport function createAdminUITheme(\n\tvalue: Partial<AdminUIThemeDefinition> = {},\n): AdminUIThemeDefinition {\n\treturn {\n\t\tmode: value.mode ?? 'light',\n\t\tshared: { ...value.shared },\n\t\tlight: { ...value.light },\n\t\tdark: { ...value.dark },\n\t};\n}\n\nexport function isAdminUIThemeVariableName(\n\tvalue: string,\n): value is AdminUIThemeVariableName {\n\treturn VARIABLE_NAME_PATTERN.test(value);\n}\n\nfunction validatedEntries(\n\toverrides: AdminUIThemeOverrides,\n\tstrict = true,\n): Array<[AdminUIThemeVariableName, string]> {\n\treturn Object.entries(overrides)\n\t\t.filter((entry): entry is [AdminUIThemeVariableName, string] => (\n\t\t\ttypeof entry[1] === 'string' && entry[1].trim().length > 0\n\t\t))\n\t\t.flatMap(([name, rawValue]) => {\n\t\t\tif (!isAdminUIThemeVariableName(name)) {\n\t\t\t\tif (!strict) return [];\n\t\t\t\tthrow new TypeError(`Invalid CSS variable name: ${name}`);\n\t\t\t}\n\t\t\tconst value = rawValue.trim();\n\t\t\tconst hasControlCharacter = [...value].some((character) => {\n\t\t\t\tconst code = character.charCodeAt(0);\n\t\t\t\treturn code < 32 || code === 127;\n\t\t\t});\n\t\t\tif (UNSAFE_CSS_VALUE_PATTERN.test(value) || hasControlCharacter) {\n\t\t\t\tif (!strict) return [];\n\t\t\t\tthrow new TypeError(`Unsafe CSS value for ${name}.`);\n\t\t\t}\n\t\t\treturn [[name, value] as [AdminUIThemeVariableName, string]];\n\t\t})\n\t\t.sort(([left], [right]) => left.localeCompare(right));\n}\n\nfunction validateSelector(selector: string, scope: keyof AdminUIThemeSelectors): string {\n\tconst value = selector.trim();\n\tif (value.length === 0 || UNSAFE_SELECTOR_PATTERN.test(value)) {\n\t\tthrow new TypeError(`Invalid ${scope} theme selector.`);\n\t}\n\treturn value;\n}\n\nfunction serializeBlock(\n\tselector: string,\n\toverrides: AdminUIThemeOverrides,\n): string | null {\n\tconst entries = validatedEntries(overrides);\n\tif (entries.length === 0) return null;\n\treturn [\n\t\t`${selector} {`,\n\t\t...entries.map(([name, value]) => `\\t${name}: ${value};`),\n\t\t'}',\n\t].join('\\n');\n}\n\nexport function serializeAdminUITheme(\n\ttheme: AdminUIThemeDefinition,\n\toptions: SerializeAdminUIThemeOptions = {},\n): string {\n\tconst selectors = options.selectors ?? defaultAdminUIThemeSelectors;\n\tconst shared = validateSelector(selectors.shared, 'shared');\n\tconst light = validateSelector(selectors.light, 'light');\n\tconst dark = validateSelector(selectors.dark, 'dark');\n\tconst modeScope = selectors.modeScope === undefined ? undefined : validateSelector(selectors.modeScope, 'modeScope');\n\tconst blocks = [\n\t\tserializeBlock(shared, theme.shared),\n\t\t...(modeScope === undefined ? [serializeBlock(light, theme.light), serializeBlock(dark, theme.dark)] : [serializeScopedThemeModes(modeScope, {\n\t\t\tlight: validatedEntries(theme.light).map(([name, value]) => `${name}: ${value};`),\n\t\t\tdark: validatedEntries(theme.dark).map(([name, value]) => `${name}: ${value};`),\n\t\t})]),\n\t].filter((block): block is string => block !== null && block.length > 0);\n\tconst banner = options.banner === false\n\t\t? null\n\t\t: `/* ${options.banner ?? 'themelia-react-ui theme overrides'} */`;\n\n\treturn `${[\n\t\t...(banner ? [banner] : []),\n\t\t...(blocks.length > 0 ? blocks : ['/* No explicit overrides. */']),\n\t].join('\\n\\n')}\\n`;\n}\n\n/**\n * Returns the complete serializable UIProvider contract. Function and\n * date-fns-locale hooks remain consumer-owned and are intentionally omitted.\n */\nexport function createSerializableUIConfig(config: UIConfig = {}): UIConfig {\n\tconst resolved = resolveUIConfig(config);\n\tconst {\n\t\tlocale: _runtimeDateLocale,\n\t\tformatRelativeTime: _runtimeRelativeTimeFormatter,\n\t\t...serializableDates\n\t} = resolved.dates;\n\n\treturn {\n\t\t...resolved,\n\t\tdates: serializableDates,\n\t};\n}\n\nexport function serializeUIProviderConfig(config: UIConfig = {}): string {\n\tconst serializable = createSerializableUIConfig(config);\n\treturn `import type { UIConfig } from 'themelia-react-ui/ui-provider';\\n\\nexport const adminUIConfig = ${JSON.stringify(serializable, null, '\\t')} satisfies UIConfig;\\n`;\n}\n\nexport function getActiveAdminUIThemeOverrides(\n\ttheme: AdminUIThemeDefinition,\n\tmode: AdminUIThemeMode = theme.mode,\n): AdminUIThemeOverrides {\n\treturn {\n\t\t...theme.shared,\n\t\t...theme[mode],\n\t};\n}\n\nexport function adminUIThemeToStyle(\n\ttheme: AdminUIThemeDefinition,\n\tmode: AdminUIThemeMode = theme.mode,\n): AdminUIThemeStyle {\n\treturn Object.fromEntries(\n\t\tvalidatedEntries(getActiveAdminUIThemeOverrides(theme, mode), false),\n\t) as AdminUIThemeStyle;\n}\n\nexport function countAdminUIThemeOverrides(theme: AdminUIThemeDefinition): number {\n\treturn validatedEntries(theme.shared, false).length\n\t\t+ validatedEntries(theme.light, false).length\n\t\t+ validatedEntries(theme.dark, false).length;\n}\n\nexport function createScopedAdminUIThemeSelectors(\n\tscopeSelector: string,\n): AdminUIThemeSelectors {\n\tconst scope = validateSelector(scopeSelector, 'shared');\n\treturn {\n\t\tshared: scope,\n\t\tlight: `${scope},\\n${scope}.light,\\n.light ${scope}`,\n\t\tdark: `${scope}.dark,\\n.dark ${scope}`,\n\t\tmodeScope: scope,\n\t};\n}\n\nexport function createThemeTweakerExportArtifact(\n\ttheme: AdminUIThemeDefinition,\n\tfileName = 'admin-ui-theme.css',\n\toptions: SerializeAdminUIThemeOptions = {},\n\tartifactOptions: CreateThemeTweakerExportArtifactOptions = {},\n): ThemeTweakerExportArtifact {\n\tconst resolvedTheme = createAdminUITheme(artifactOptions.resolvedTheme ?? theme);\n\tconst providerConfig = createSerializableUIConfig(artifactOptions.providerConfig);\n\treturn {\n\t\tfileName,\n\t\tcssText: serializeAdminUITheme(resolvedTheme, {\n\t\t\t...options,\n\t\t\tbanner: options.banner ?? 'themelia-react-ui complete theme',\n\t\t}),\n\t\toverrideCssText: serializeAdminUITheme(theme, options),\n\t\ttheme: createAdminUITheme(theme),\n\t\tresolvedTheme,\n\t\toverrideCount: countAdminUIThemeOverrides(theme),\n\t\tproviderFileName: artifactOptions.providerFileName ?? 'admin-ui.config.ts',\n\t\tproviderConfig,\n\t\tproviderConfigText: serializeUIProviderConfig(providerConfig),\n\t};\n}\n\nexport function downloadAdminUITheme(\n\tartifact: Pick<ThemeTweakerExportArtifact, 'cssText' | 'fileName'>,\n): void {\n\tdownloadAdminUITextFile({\n\t\tfileName: artifact.fileName,\n\t\ttext: artifact.cssText,\n\t\tmimeType: 'text/css;charset=utf-8',\n\t});\n}\n\nexport function downloadAdminUITextFile({\n\tfileName,\n\ttext,\n\tmimeType = 'text/plain;charset=utf-8',\n}: {\n\tfileName: string;\n\ttext: string;\n\tmimeType?: string;\n}): void {\n\tif (typeof document === 'undefined' || typeof URL === 'undefined') {\n\t\tthrow new Error('File download requires a browser document. Provide onExport in non-browser environments.');\n\t}\n\tconst blob = new Blob([text], { type: mimeType });\n\tconst url = URL.createObjectURL(blob);\n\tconst anchor = document.createElement('a');\n\tanchor.href = url;\n\tanchor.download = fileName;\n\tanchor.hidden = true;\n\tdocument.body.append(anchor);\n\tanchor.click();\n\tanchor.remove();\n\tURL.revokeObjectURL(url);\n}\n","import { forwardRef } from 'react';\n\nimport { cn } from '../../../lib/utils';\nimport { ThemeScope as PortalThemeScope } from '../../../lib/theme-scope';\n\nimport type { ThemeScopeProps } from './theme-tweaker.types';\nimport { adminUIThemeToStyle } from './theme-tweaker.utils';\n\n/**\n * One-DOM-node CSS-variable boundary with a shared portal host. Visual values\n * inherit through CSS; the portal context only identifies that host. UIProvider\n * owns display defaults such as locale, currency, and component sizing policy.\n */\nexport const ThemeScope = forwardRef<HTMLDivElement, ThemeScopeProps>(function ThemeScope({\n\ttheme,\n\tmode = theme.mode,\n\tclassName,\n\tstyle,\n\tchildren,\n\t...props\n}, ref) {\n\treturn (\n\t\t<PortalThemeScope\n\t\t\t{...props}\n\t\t\tref={ref}\n\t\t\tdata-theme-mode={mode}\n\t\t\tclassName={cn('theme-scope--component', mode, className)}\n\t\t\tstyle={{\n\t\t\t\t...adminUIThemeToStyle(theme, mode),\n\t\t\t\t...style,\n\t\t\t}}\n\t\t>\n\t\t\t{children}\n\t\t</PortalThemeScope>\n\t);\n});\n\nThemeScope.displayName = 'ThemeScope';\n","import { useEffect, type RefObject } from 'react';\n\nimport type {\n\tAdminUIThemeDefinition,\n\tThemeTweakerTarget,\n} from './theme-tweaker.types';\nimport { adminUIThemeToStyle } from './theme-tweaker.utils';\n\ninterface UseAppliedThemeOptions {\n\tapply: boolean;\n\tmanageModeClass: boolean;\n\tselfRef: RefObject<HTMLDivElement | null>;\n\ttarget: ThemeTweakerTarget;\n\ttheme: AdminUIThemeDefinition;\n}\n\nfunction resolveTarget(\n\ttarget: ThemeTweakerTarget,\n\tselfRef: RefObject<HTMLDivElement | null>,\n): HTMLElement | null {\n\tif (target === null) return null;\n\tif (target === 'self') return selfRef.current;\n\tif (target === 'document') {\n\t\treturn typeof document === 'undefined' ? null : document.documentElement;\n\t}\n\tif (typeof target === 'function') return target();\n\treturn target;\n}\n\nexport function useAppliedTheme({\n\tapply,\n\tmanageModeClass,\n\tselfRef,\n\ttarget,\n\ttheme,\n}: UseAppliedThemeOptions): void {\n\tuseEffect(() => {\n\t\tif (!apply || target === 'self') return;\n\t\tconst element = resolveTarget(target, selfRef);\n\t\tif (!element) return;\n\n\t\tconst style = adminUIThemeToStyle(theme);\n\t\tconst originals = new Map<string, { value: string; priority: string }>();\n\t\tconst applied = new Map<string, string>();\n\t\tfor (const [name, value] of Object.entries(style)) {\n\t\t\tif (typeof value !== 'string') continue;\n\t\t\toriginals.set(name, {\n\t\t\t\tvalue: element.style.getPropertyValue(name),\n\t\t\t\tpriority: element.style.getPropertyPriority(name),\n\t\t\t});\n\t\t\telement.style.setProperty(name, value);\n\t\t\tapplied.set(name, value);\n\t\t}\n\n\t\tconst originalLight = element.classList.contains('light');\n\t\tconst originalDark = element.classList.contains('dark');\n\t\tif (manageModeClass) {\n\t\t\telement.classList.toggle('light', theme.mode === 'light');\n\t\t\telement.classList.toggle('dark', theme.mode === 'dark');\n\t\t}\n\n\t\treturn () => {\n\t\t\tfor (const [name, expected] of applied) {\n\t\t\t\tif (element.style.getPropertyValue(name) !== expected) continue;\n\t\t\t\tconst original = originals.get(name);\n\t\t\t\tif (original?.value) {\n\t\t\t\t\telement.style.setProperty(name, original.value, original.priority);\n\t\t\t\t} else {\n\t\t\t\t\telement.style.removeProperty(name);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (manageModeClass) {\n\t\t\t\telement.classList.toggle('light', originalLight);\n\t\t\t\telement.classList.toggle('dark', originalDark);\n\t\t\t}\n\t\t};\n\t}, [apply, manageModeClass, selfRef, target, theme]);\n}\n","import { forwardRef, useImperativeHandle, useMemo, useRef } from 'react';\n\nimport { UIProvider } from '../../../lib/ui-provider';\nimport { cn } from '../../../lib/utils';\n\nimport { ThemeScope } from './theme-scope';\nimport type { AdminUIThemeProviderProps } from './theme-tweaker.types';\nimport { createAdminUITheme } from './theme-tweaker.utils';\nimport { useAppliedTheme } from './use-applied-theme';\n\n/**\n * Root consumer boundary combining mount-once UI display defaults with a\n * live CSS-variable theme and the shared scoped-portal host.\n */\nexport const AdminUIThemeProvider = forwardRef<HTMLDivElement, AdminUIThemeProviderProps>(\n\tfunction AdminUIThemeProvider({\n\t\tconfig,\n\t\ttheme,\n\t\tmode = theme.mode,\n\t\ttarget = 'document',\n\t\tmanageModeClass = true,\n\t\tclassName,\n\t\tchildren,\n\t\t...scopeProps\n\t}, forwardedRef) {\n\t\tconst selfRef = useRef<HTMLDivElement>(null);\n\t\tuseImperativeHandle(forwardedRef, () => selfRef.current as HTMLDivElement);\n\t\tconst effectiveTheme = useMemo(\n\t\t\t() => createAdminUITheme({ ...theme, mode }),\n\t\t\t[mode, theme],\n\t\t);\n\t\tuseAppliedTheme({\n\t\t\tapply: target === 'document',\n\t\t\tmanageModeClass,\n\t\t\tselfRef,\n\t\t\ttarget,\n\t\t\ttheme: effectiveTheme,\n\t\t});\n\n\t\treturn (\n\t\t\t<UIProvider config={config}>\n\t\t\t\t<ThemeScope\n\t\t\t\t\t{...scopeProps}\n\t\t\t\t\tref={selfRef}\n\t\t\t\t\ttheme={effectiveTheme}\n\t\t\t\t\tmode={mode}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t'admin-ui-theme-provider--component bg-background text-foreground',\n\t\t\t\t\t\tclassName,\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t{children}\n\t\t\t\t</ThemeScope>\n\t\t\t</UIProvider>\n\t\t);\n\t},\n);\n\nAdminUIThemeProvider.displayName = 'AdminUIThemeProvider';\n","import type {\n\tAdminUIThemeVariableName,\n\tThemeTweakerField,\n\tThemeTweakerFieldKind,\n\tThemeTweakerFieldScope,\n\tThemeTweakerGroup,\n\tThemeTweakerRangeControl,\n\tThemeTweakerSection,\n} from './theme-tweaker.types';\n\nconst THEME_COLORS = [\n\t'--background',\n\t'--foreground',\n\t'--card',\n\t'--card-foreground',\n\t'--popover',\n\t'--popover-foreground',\n\t'--primary',\n\t'--primary-foreground',\n\t'--secondary',\n\t'--secondary-foreground',\n\t'--muted',\n\t'--muted-foreground',\n\t'--accent',\n\t'--accent-foreground',\n\t'--destructive',\n\t'--destructive-foreground',\n\t'--border',\n\t'--input',\n\t'--ring',\n\t'--chart-1',\n\t'--chart-2',\n\t'--chart-3',\n\t'--chart-4',\n\t'--chart-5',\n\t'--sidebar',\n\t'--sidebar-foreground',\n\t'--sidebar-primary',\n\t'--sidebar-primary-foreground',\n\t'--sidebar-accent',\n\t'--sidebar-accent-foreground',\n\t'--sidebar-border',\n\t'--sidebar-ring',\n] as const satisfies readonly AdminUIThemeVariableName[];\n\nconst STATE_COLORS = [\n\t'--success',\n\t'--success-foreground',\n\t'--info',\n\t'--info-foreground',\n\t'--warning',\n\t'--warning-foreground',\n\t'--warning-accent',\n\t'--link-color',\n\t'--primary-accent',\n\t'--inverse-background',\n\t'--inverse-foreground',\n\t'--inverse-muted',\n\t'--inverse-subtle',\n\t'--inverse-disabled',\n\t'--inverse-surface',\n\t'--inverse-surface-strong',\n\t'--inverse-border',\n\t'--inverse-decoration',\n] as const satisfies readonly AdminUIThemeVariableName[];\n\n/**\n * Package-owned surface colors. Kept apart from `THEME_COLORS` because that\n * array is consumed by index-based slices, so appending to it would silently\n * reshuffle the colour sections.\n */\nconst SURFACE_COLORS = [\n\t'--overlay-backdrop',\n] as const satisfies readonly AdminUIThemeVariableName[];\n\nconst FONT_VARIABLES = [\n\t'--font-heading',\n\t'--font-sans',\n\t'--font-serif',\n\t'--font-mono',\n] as const satisfies readonly AdminUIThemeVariableName[];\n\nconst TEXT_STEPS = [\n\t'xxs',\n\t'xs',\n\t'pxs',\n\t'sm',\n\t'base',\n\t'lg',\n\t'xl',\n\t'2xl',\n\t'3xl',\n\t'4xl',\n\t'5xl',\n\t'6xl',\n\t'7xl',\n\t'8xl',\n\t'9xl',\n] as const;\n\nconst TYPOGRAPHY_VARIABLES = TEXT_STEPS.flatMap((step) => [\n\t`--text-${step}` as AdminUIThemeVariableName,\n\t`--text-${step}--line-height` as AdminUIThemeVariableName,\n]);\n\nconst SHADOW_VARIABLES = [\n\t'--shadow-2xs',\n\t'--shadow-xs',\n\t'--shadow-sm',\n\t'--shadow',\n\t'--shadow-md',\n\t'--shadow-lg',\n\t'--shadow-xl',\n\t'--shadow-2xl',\n] as const satisfies readonly AdminUIThemeVariableName[];\n\nconst STRUCTURAL_VARIABLES = [\n\t'--space-scale',\n\t'--density-scale',\n\t'--height-action',\n\t'--height-control',\n\t'--control-x',\n\t'--row-x',\n\t'--row-y',\n\t'--surface-x',\n\t'--surface-y',\n\t'--icon',\n\t'--avatar',\n\t'--shell-header-height',\n\t'--shell-sidebar-width',\n] as const satisfies readonly AdminUIThemeVariableName[];\n\nconst LAYOUT_VARIABLES = [\n\t'--content-width-sm',\n\t'--content-width-md',\n\t'--content-width-lg',\n\t'--content-width-xl',\n\t'--content-width-2xl',\n\t'--adaptive-grid-min-sm',\n\t'--adaptive-grid-min-md',\n\t'--adaptive-grid-min-lg',\n] as const satisfies readonly AdminUIThemeVariableName[];\n\nconst DESCRIPTIONS: Partial<Record<AdminUIThemeVariableName, string>> = {\n\t'--background': 'Application canvas and default page background.',\n\t'--foreground': 'Primary text and icon color on the application canvas.',\n\t'--primary': 'Brand and primary-action color.',\n\t'--primary-foreground': 'Text and icons on solid primary fills.',\n\t'--muted': 'Subdued backgrounds for passive regions and tracks.',\n\t'--muted-foreground': 'Secondary text, metadata, and passive icons.',\n\t'--border': 'Default divider, outline, and surface-border color.',\n\t'--ring': 'Focus-visible ring and outline color.',\n\t'--link-color': 'Inline link and copyable-value accent color.',\n\t'--overlay-backdrop': 'Scrim painted behind dialog, alert dialog, sheet, and drawer surfaces.',\n\t'--primary-accent': 'Brand color used as foreground for icons, spinners, and active marks.',\n\t'--warning-accent': 'Warning color used as foreground for icons and marks on tinted warning surfaces.',\n\t'--radius': 'Outer surface radius; controls and collection rows derive a bounded inner curve from this same root.',\n\t'--space-scale': 'Multiplies structural gaps and padding without changing control heights.',\n\t'--density-scale': 'Multiplies actions, controls, rows, and density-sensitive geometry.',\n\t'--height-action': 'Base height for buttons and clickable action triggers.',\n\t'--height-control': 'Base height for inputs, selects, and editable controls.',\n\t'--control-x': 'Default inline inset for actions and form controls.',\n\t'--row-x': 'Shared inline inset for collection, menu, command, and table rows.',\n\t'--row-y': 'Shared vertical inset for collection, menu, command, and table rows.',\n\t'--surface-x': 'Default inline inset for cards, dialogs, panels, and content surfaces.',\n\t'--gap-normal': 'Title/description gap for normal surfaces; multiplied once by spacing scale.',\n\t'--gap-dense': 'Title/supporting-copy gap for dense rows and menus; multiplied once by spacing scale.',\n\t'--surface-y': 'Default vertical inset for cards, dialogs, panels, and content surfaces.',\n\t'--icon': 'Default interface icon size.',\n\t'--avatar': 'Default avatar size used by ordinary rows and cards.',\n\t'--shell-header-height': 'Minimum application-header shell height.',\n\t'--shell-sidebar-width': 'Expanded application-sidebar width.',\n\t'--content-width-sm': 'Compact centered content measure used by Container.',\n\t'--content-width-md': 'Medium centered content measure used by Container.',\n\t'--content-width-lg': 'Default readable page measure used by Container.',\n\t'--content-width-xl': 'Wide application content measure used by Container.',\n\t'--content-width-2xl': 'Maximum standard application measure used by Container.',\n\t'--adaptive-grid-min-sm': 'Compact minimum peer width used by AdaptiveGrid.',\n\t'--adaptive-grid-min-md': 'Default minimum peer width used by AdaptiveGrid.',\n\t'--adaptive-grid-min-lg': 'Spacious minimum peer width used by AdaptiveGrid.',\n};\n\nconst LABELS: Partial<Record<AdminUIThemeVariableName, string>> = {\n\t'--space-scale': 'Spacing scale',\n\t'--density-scale': 'Density scale',\n\t'--height-action': 'Action height',\n\t'--height-control': 'Control height',\n\t'--control-x': 'Control horizontal padding',\n\t'--row-x': 'Row horizontal padding',\n\t'--row-y': 'Row vertical padding',\n\t'--surface-x': 'Surface horizontal padding',\n\t'--surface-y': 'Surface vertical padding',\n\t'--gap-normal': 'Normal copy gap',\n\t'--gap-dense': 'Dense copy gap',\n\t'--icon': 'Interface icon size',\n\t'--avatar': 'Default avatar size',\n\t'--shell-header-height': 'Header height',\n\t'--shell-sidebar-width': 'Sidebar width',\n\t'--content-width-sm': 'Small content width',\n\t'--content-width-md': 'Medium content width',\n\t'--content-width-lg': 'Large content width',\n\t'--content-width-xl': 'Extra-large content width',\n\t'--content-width-2xl': 'Maximum content width',\n\t'--adaptive-grid-min-sm': 'Compact adaptive column',\n\t'--adaptive-grid-min-md': 'Default adaptive column',\n\t'--adaptive-grid-min-lg': 'Spacious adaptive column',\n};\n\nconst RANGE_CONTROLS: Partial<\n\tRecord<AdminUIThemeVariableName, ThemeTweakerRangeControl>\n> = {\n\t'--radius': { type: 'range', min: 0, max: 1.5, step: 0.0625, unit: 'rem', decimalPlaces: 4 },\n\t'--space-scale': { type: 'range', min: 0.75, max: 1.35, step: 0.025, decimalPlaces: 3 },\n\t'--density-scale': { type: 'range', min: 0.75, max: 1.35, step: 0.025, decimalPlaces: 3 },\n\t'--height-action': { type: 'range', min: 1.5, max: 3.5, step: 0.0625, unit: 'rem', decimalPlaces: 4 },\n\t'--height-control': { type: 'range', min: 1.5, max: 3.5, step: 0.0625, unit: 'rem', decimalPlaces: 4 },\n\t'--control-x': { type: 'range', min: 0.25, max: 1.5, step: 0.0625, unit: 'rem', decimalPlaces: 4 },\n\t'--row-x': { type: 'range', min: 0.25, max: 1.5, step: 0.0625, unit: 'rem', decimalPlaces: 4 },\n\t'--row-y': { type: 'range', min: 0.25, max: 1.25, step: 0.0625, unit: 'rem', decimalPlaces: 4 },\n\t'--surface-x': { type: 'range', min: 0.5, max: 2.5, step: 0.0625, unit: 'rem', decimalPlaces: 4 },\n\t'--gap-normal': { type: 'range', min: 0, max: 1.5, step: 0.0625, unit: 'rem', decimalPlaces: 4 },\n\t'--gap-dense': { type: 'range', min: 0, max: 1.5, step: 0.0625, unit: 'rem', decimalPlaces: 4 },\n\t'--surface-y': { type: 'range', min: 0.5, max: 2.5, step: 0.0625, unit: 'rem', decimalPlaces: 4 },\n\t'--icon': { type: 'range', min: 0.75, max: 2, step: 0.0625, unit: 'rem', decimalPlaces: 4 },\n\t'--avatar': { type: 'range', min: 1.5, max: 4, step: 0.125, unit: 'rem', decimalPlaces: 3 },\n\t'--shell-header-height': { type: 'range', min: 3, max: 7, step: 0.125, unit: 'rem', decimalPlaces: 3 },\n\t'--shell-sidebar-width': { type: 'range', min: 12, max: 24, step: 0.25, unit: 'rem', decimalPlaces: 2 },\n\t'--content-width-sm': { type: 'range', min: 20, max: 72, step: 1, unit: 'rem', decimalPlaces: 0 },\n\t'--content-width-md': { type: 'range', min: 24, max: 80, step: 1, unit: 'rem', decimalPlaces: 0 },\n\t'--content-width-lg': { type: 'range', min: 32, max: 96, step: 1, unit: 'rem', decimalPlaces: 0 },\n\t'--content-width-xl': { type: 'range', min: 40, max: 108, step: 1, unit: 'rem', decimalPlaces: 0 },\n\t'--content-width-2xl': { type: 'range', min: 48, max: 120, step: 1, unit: 'rem', decimalPlaces: 0 },\n\t'--adaptive-grid-min-sm': { type: 'range', min: 8, max: 24, step: 0.5, unit: 'rem', decimalPlaces: 1 },\n\t'--adaptive-grid-min-md': { type: 'range', min: 8, max: 32, step: 0.5, unit: 'rem', decimalPlaces: 1 },\n\t'--adaptive-grid-min-lg': { type: 'range', min: 12, max: 40, step: 0.5, unit: 'rem', decimalPlaces: 1 },\n};\n\nfunction labelFromName(name: AdminUIThemeVariableName): string {\n\treturn name\n\t\t.replace(/^--/, '')\n\t\t.replace(/--/g, ' · ')\n\t\t.split('-')\n\t\t.map((part) => part.length <= 3 ? part.toUpperCase() : `${part[0].toUpperCase()}${part.slice(1)}`)\n\t\t.join(' ');\n}\n\nfunction genericDescription(\n\tname: AdminUIThemeVariableName,\n\tgroup: ThemeTweakerGroup,\n): string {\n\tif (name.startsWith('--chart-')) return 'Categorical chart-series color; keep status meaning separate.';\n\tif (name.startsWith('--sidebar-')) return 'Sidebar-specific theme color.';\n\tif (name.startsWith('--inverse-')) return 'Explicitly inverse surface and content color.';\n\tif (name.endsWith('-foreground')) return 'Foreground color paired with the matching solid or surface token.';\n\tif (name.endsWith('--line-height')) return 'Line height paired with the matching typography step.';\n\tif (name.startsWith('--text-')) return 'Font size for the matching typography step.';\n\tif (name.startsWith('--font-')) return 'Font family stack for the matching content role.';\n\tif (name.startsWith('--shadow')) return 'Elevation shadow used by package surfaces and overlays.';\n\tif (group === 'states') return 'Semantic state color shared by package status surfaces.';\n\treturn 'Public theme variable used across package components.';\n}\n\nfunction fields(\n\tnames: readonly AdminUIThemeVariableName[],\n\tgroup: ThemeTweakerGroup,\n\tsection: ThemeTweakerSection,\n\tscope: ThemeTweakerFieldScope,\n\tkind: ThemeTweakerFieldKind,\n): ThemeTweakerField[] {\n\treturn names.map((name) => ({\n\t\tname,\n\t\tlabel: LABELS[name] ?? labelFromName(name),\n\t\tdescription: DESCRIPTIONS[name] ?? genericDescription(name, group),\n\t\tgroup,\n\t\tsection,\n\t\tscope,\n\t\tkind,\n\t\tcontrol: RANGE_CONTROLS[name],\n\t}));\n}\n\n/**\n * Exhaustive editable surface: every shadcn runtime theme variable plus every\n * canonical package-owned root token. Internal and generated utility variables\n * are deliberately absent.\n */\nexport const defaultThemeTweakerFields: readonly ThemeTweakerField[] = [\n\t...fields(THEME_COLORS.slice(0, 6), 'colors', 'surfaces-content', 'mode', 'color'),\n\t...fields(SURFACE_COLORS, 'colors', 'surfaces-content', 'shared', 'color'),\n\t...fields(THEME_COLORS.slice(6, 19), 'colors', 'brand-actions', 'mode', 'color'),\n\t...fields(THEME_COLORS.slice(19, 24), 'colors', 'charts', 'mode', 'color'),\n\t...fields(THEME_COLORS.slice(24), 'colors', 'sidebar', 'mode', 'color'),\n\t...fields(STATE_COLORS.slice(0, 7), 'states', 'semantic-feedback', 'mode', 'color'),\n\t...fields(STATE_COLORS.slice(7), 'states', 'inverse-surfaces', 'mode', 'color'),\n\t...fields(FONT_VARIABLES, 'typography', 'font-families', 'shared', 'font'),\n\t...fields(TYPOGRAPHY_VARIABLES, 'typography', 'type-scale', 'shared', 'length'),\n\t...fields(['--radius'], 'shape', 'radius', 'shared', 'length'),\n\t...fields(SHADOW_VARIABLES, 'shape', 'elevation', 'mode', 'shadow'),\n\t...fields(STRUCTURAL_VARIABLES.slice(0, 2), 'structure', 'global-scales', 'shared', 'length'),\n\t...fields(STRUCTURAL_VARIABLES.slice(2, 5), 'structure', 'actions-controls', 'shared', 'length'),\n\t...fields(['--gap-normal', '--gap-dense'], 'structure', 'rows-surfaces', 'shared', 'length'),\n\t...fields(STRUCTURAL_VARIABLES.slice(5, 9), 'structure', 'rows-surfaces', 'shared', 'length'),\n\t...fields(STRUCTURAL_VARIABLES.slice(9, 11), 'structure', 'media', 'shared', 'length'),\n\t...fields(STRUCTURAL_VARIABLES.slice(11), 'structure', 'application-shell', 'shared', 'length'),\n\t...fields(LAYOUT_VARIABLES.slice(0, 5), 'structure', 'content-widths', 'shared', 'length'),\n\t...fields(LAYOUT_VARIABLES.slice(5), 'structure', 'adaptive-layout', 'shared', 'length'),\n].map((field) => (\n\tfield.name === '--space-scale' || field.name === '--density-scale'\n\t\t? { ...field, kind: 'number' as const }\n\t\t: field\n));\n","import { Info } from 'lucide-react';\n\nimport { SmartAccordion } from '../../base/accordion';\nimport {\n\tAlert,\n\tAlertDescription,\n\tAlertMetadata,\n\tAlertMetadataItem,\n\tAlertTitle,\n} from '../../base/feedback';\nimport { FormField } from '../../base/forms';\nimport { Input } from '../../base/text-inputs';\nimport { Select, ToggleField } from '../../base/choice-inputs';\nimport { Stack } from '../../base/structure';\nimport { Text } from '../../typography';\nimport { COMPONENT_SCALES, SEMANTIC_TONES } from '../../../lib/component-vocabulary';\nimport type { UIConfig } from '../../../lib/ui-provider';\n\nimport { createSerializableUIConfig } from './theme-tweaker.utils';\n\ninterface ThemeProviderSettingsProps {\n\t/** Configuration for this surface. */\n\tconfig: UIConfig;\n\t/** Fired with the next value. */\n\tonChange: (config: UIConfig) => void;\n\t/** Overrides this surface's own copy. */\n\tstrings?: ThemeProviderSettingsStrings;\n}\n\nexport interface ThemeProviderSettingsStrings {\n\t/** Surface title. */\n\ttitle: string;\n\t/** Supporting copy shown under the label. */\n\tdescription: string;\n\tboundaryTitle: string;\n\tboundaryDescription: string;\n\tsummary: {\n\t\tlocale: string;\n\t\tcurrency: string;\n\t\tcontrols: string;\n\t\tcards: string;\n\t};\n\t/** Sections to render, in display order. */\n\tsections: {\n\t\tregional: { title: string; description: string };\n\t\tcontent: { title: string; description: string };\n\t\tcomponents: { title: string; description: string };\n\t\ttoasts: { title: string; description: string };\n\t};\n\tlabels: Record<\n\t\t| 'locale'\n\t\t| 'defaultCurrency'\n\t\t| 'displayCurrency'\n\t\t| 'moneyFormat'\n\t\t| 'firstDay'\n\t\t| 'dateFormat'\n\t\t| 'textSize'\n\t\t| 'commentComposer'\n\t\t| 'dualPricing'\n\t\t| 'dualPricingMode'\n\t\t| 'dualPricingLayout'\n\t\t| 'componentScale'\n\t\t| 'itemVariant'\n\t\t| 'buttonTone'\n\t\t| 'buttonStyle'\n\t\t| 'badgeTone'\n\t\t| 'cardSurface'\n\t\t| 'spinner'\n\t\t| 'cardDivider'\n\t\t| 'toastPosition'\n\t\t| 'toastTheme'\n\t\t| 'toastDuration'\n\t\t| 'visibleToasts'\n\t\t| 'closeButton'\n\t\t| 'richColors',\n\t\tstring\n\t> & { cardFooterDivider?: string };\n\tdualPricingDescription: string;\n\tdisplayCurrencyPlaceholder: string;\n\toptions: Record<string, string>;\n}\n\nexport const defaultThemeProviderSettingsStrings: ThemeProviderSettingsStrings = {\n\ttitle: 'Application defaults',\n\tdescription: 'Configure the stable display behavior that accompanies the exported CSS theme.',\n\tboundaryTitle: 'Root provider recipe',\n\tboundaryDescription: 'These defaults take effect when UIProvider mounts. CSS variables continue to preview live; accept provider changes by remounting the application root.',\n\tsummary: {\n\t\tlocale: 'Locale',\n\t\tcurrency: 'Currency',\n\t\tcontrols: 'Controls',\n\t\tcards: 'Cards',\n\t},\n\tsections: {\n\t\tregional: {\n\t\t\ttitle: 'Regional formatting',\n\t\t\tdescription: 'Locale, currency, money, and date conventions.',\n\t\t},\n\t\tcontent: {\n\t\t\ttitle: 'Content behavior',\n\t\t\tdescription: 'Typography, comments, and dual-pricing presentation.',\n\t\t},\n\t\tcomponents: {\n\t\t\ttitle: 'Component defaults',\n\t\t\tdescription: 'Sizes, variants, surfaces, and action treatment.',\n\t\t},\n\t\ttoasts: {\n\t\t\ttitle: 'Toast defaults',\n\t\t\tdescription: 'Placement, duration, appearance, and capacity.',\n\t\t},\n\t},\n\tlabels: {\n\t\tlocale: 'Locale',\n\t\tdefaultCurrency: 'Default currency',\n\t\tdisplayCurrency: 'Display currency',\n\t\tmoneyFormat: 'Money format',\n\t\tfirstDay: 'First day of week',\n\t\tdateFormat: 'Date format',\n\t\ttextSize: 'Default text size',\n\t\tcommentComposer: 'Comment composer',\n\t\tdualPricing: 'Dual pricing',\n\t\tdualPricingMode: 'Dual-pricing mode',\n\t\tdualPricingLayout: 'Dual-pricing layout',\n\t\tcomponentScale: 'Component scale',\n\t\titemVariant: 'Item variant',\n\t\tbuttonTone: 'Button tone',\n\t\tbuttonStyle: 'Button style',\n\t\tbadgeTone: 'Badge tone',\n\t\tcardSurface: 'Card surface',\n\t\tspinner: 'Spinner',\n\t\tcardDivider: 'Card header divider',\n\t\tcardFooterDivider: 'Card footer divider',\n\t\ttoastPosition: 'Position',\n\t\ttoastTheme: 'Theme',\n\t\ttoastDuration: 'Duration (ms)',\n\t\tvisibleToasts: 'Visible toasts',\n\t\tcloseButton: 'Close button',\n\t\trichColors: 'Rich semantic colors',\n\t},\n\tdualPricingDescription: 'Show an optional display currency.',\n\tdisplayCurrencyPlaceholder: 'Optional',\n\toptions: {\n\t\tdefault: 'Default',\n\t\tdecimal: 'Decimal',\n\t\twith_code: 'With code',\n\t\twith_symbol: 'With symbol',\n\t\tlocale_aware: 'Locale aware',\n\t\tsunday: 'Sunday',\n\t\tmonday: 'Monday',\n\t\ttuesday: 'Tuesday',\n\t\twednesday: 'Wednesday',\n\t\tthursday: 'Thursday',\n\t\tfriday: 'Friday',\n\t\tsaturday: 'Saturday',\n\t\ttop: 'Top',\n\t\tbottom: 'Bottom',\n\t\tdefault_only: 'Default only',\n\t\tdual: 'Dual',\n\t\tdynamic: 'Dynamic',\n\t\tinline: 'Inline',\n\t\tlines: 'Lines',\n\t\toutline: 'Outline',\n\t\tmuted: 'Muted',\n\t\tprimary: 'Primary',\n\t\tsecondary: 'Secondary',\n\t\tdark: 'Dark',\n\t\twarning: 'Warning',\n\t\tsuccess: 'Success',\n\t\tlight: 'Light',\n\t\tsolid: 'Solid',\n\t\tghost: 'Ghost',\n\t\tinfo: 'Info',\n\t\tdestructive: 'Destructive',\n\t\txs: 'XS',\n\t\tsm: 'SM',\n\t\tmd: 'MD',\n\t\tcard: 'Card',\n\t\tflat: 'Flat',\n\t\tframed: 'Framed',\n\t\tshimmer: 'Shimmer',\n\t\tprogress: 'Progress',\n\t\tsystem: 'System',\n\t\t'top-right': 'Top right',\n\t\t'top-left': 'Top left',\n\t\t'top-center': 'Top center',\n\t\t'bottom-right': 'Bottom right',\n\t\t'bottom-left': 'Bottom left',\n\t\t'bottom-center': 'Bottom center',\n\t\txxs: 'XXS',\n\t\tpxs: 'PXS',\n\t\tbase: 'Base',\n\t\tlg: 'LG',\n\t\txl: 'XL',\n\t},\n};\n\nfunction selectOptions(values: readonly string[], strings: ThemeProviderSettingsStrings) {\n\treturn values.map((value) => ({\n\t\tvalue,\n\t\tlabel: strings.options[value] ?? value.replaceAll('_', ' ').replace(/\\b\\w/g, (character) => character.toUpperCase()),\n\t}));\n}\n\nexport function ThemeProviderSettings({ config, onChange, strings = defaultThemeProviderSettingsStrings }: ThemeProviderSettingsProps) {\n\tconst resolved = createSerializableUIConfig(config);\n\tconst scaleOptions = selectOptions(COMPONENT_SCALES, strings);\n\tconst weekdays = ['sunday', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday'].map((day, value) => ({\n\t\tvalue: String(value),\n\t\tlabel: strings.options[day],\n\t}));\n\tconst update = (slice: keyof UIConfig, key: string, value: unknown) => {\n\t\tonChange({\n\t\t\t...resolved,\n\t\t\t[slice]: {\n\t\t\t\t...(resolved[slice] as object),\n\t\t\t\t[key]: value,\n\t\t\t},\n\t\t});\n\t};\n\n\treturn (\n\t\t<Stack gap=\"lg\" className=\"theme-tweaker--provider-settings\">\n\t\t\t<Stack gap=\"normal\">\n\t\t\t\t<Text type=\"inherit\" weight=\"semibold\">{strings.title}</Text>\n\t\t\t\t<Text size=\"xs\" type=\"secondary\">\n\t\t\t\t\t{strings.description}\n\t\t\t\t</Text>\n\t\t\t</Stack>\n\t\t\t<Alert tone=\"info\" role=\"note\" className=\"theme-tweaker--provider-boundary\">\n\t\t\t\t<Info aria-hidden=\"true\" />\n\t\t\t\t<AlertTitle>{strings.boundaryTitle}</AlertTitle>\n\t\t\t\t<AlertDescription>{strings.boundaryDescription}</AlertDescription>\n\t\t\t\t<AlertMetadata>\n\t\t\t\t\t<AlertMetadataItem label={strings.summary.locale} value={resolved.formatting?.locale ?? strings.options.default} />\n\t\t\t\t\t<AlertMetadataItem label={strings.summary.currency} value={resolved.money?.defaultCurrency ?? strings.options.default} />\n\t\t\t\t\t<AlertMetadataItem\n\t\t\t\t\t\tlabel={strings.summary.controls}\n\t\t\t\t\t\tvalue={strings.options[resolved.density?.defaultScale ?? 'md'] ?? resolved.density?.defaultScale ?? strings.options.md}\n\t\t\t\t\t/>\n\t\t\t\t\t<AlertMetadataItem\n\t\t\t\t\t\tlabel={strings.summary.cards}\n\t\t\t\t\t\tvalue={strings.options[resolved.card?.defaultSurface ?? 'card'] ?? resolved.card?.defaultSurface ?? strings.options.default}\n\t\t\t\t\t/>\n\t\t\t\t</AlertMetadata>\n\t\t\t</Alert>\n\t\t\t<SmartAccordion\n\t\t\t\tmultiple\n\t\t\t\tdefaultValue={['regional']}\n\t\t\t\tvariant=\"bordered\"\n\t\t\t\ticonStyle=\"none\"\n\t\t\t\tcontentClassName=\"pb-surface\"\n\t\t\t\titems={[\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: 'regional',\n\t\t\t\t\t\ttitle: strings.sections.regional.title,\n\t\t\t\t\t\tdescription: strings.sections.regional.description,\n\t\t\t\t\t\tcontent: (\n\t\t\t\t\t\t\t<div className=\"grid min-w-0 grid-cols-1 gap-space-md @2xl/theme-tweaker-controls:grid-cols-2\">\n\t\t\t\t\t\t\t\t<FormField label={strings.labels.locale}>\n\t\t\t\t\t\t\t\t\t<Input value={resolved.formatting?.locale ?? ''} onChange={(event) => update('formatting', 'locale', event.target.value)} />\n\t\t\t\t\t\t\t\t</FormField>\n\t\t\t\t\t\t\t\t<FormField label={strings.labels.defaultCurrency}>\n\t\t\t\t\t\t\t\t\t<Input\n\t\t\t\t\t\t\t\t\t\tvalue={resolved.money?.defaultCurrency ?? ''}\n\t\t\t\t\t\t\t\t\t\tonChange={(event) => update('money', 'defaultCurrency', event.target.value.toUpperCase())}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</FormField>\n\t\t\t\t\t\t\t\t<FormField label={strings.labels.displayCurrency}>\n\t\t\t\t\t\t\t\t\t<Input\n\t\t\t\t\t\t\t\t\t\tvalue={resolved.money?.displayCurrency ?? ''}\n\t\t\t\t\t\t\t\t\t\tplaceholder={strings.displayCurrencyPlaceholder}\n\t\t\t\t\t\t\t\t\t\tonChange={(event) => update('money', 'displayCurrency', event.target.value.toUpperCase() || undefined)}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</FormField>\n\t\t\t\t\t\t\t\t<FormField label={strings.labels.moneyFormat}>\n\t\t\t\t\t\t\t\t\t<Select\n\t\t\t\t\t\t\t\t\t\tvalue={resolved.money?.formatMode}\n\t\t\t\t\t\t\t\t\t\toptions={selectOptions(['decimal', 'with_code', 'with_symbol', 'locale_aware'], strings)}\n\t\t\t\t\t\t\t\t\t\tonValueChange={(next) => update('money', 'formatMode', next)}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</FormField>\n\t\t\t\t\t\t\t\t<FormField label={strings.labels.firstDay}>\n\t\t\t\t\t\t\t\t\t<Select\n\t\t\t\t\t\t\t\t\t\tvalue={String(resolved.dates?.weekStartsOn ?? 1)}\n\t\t\t\t\t\t\t\t\t\toptions={weekdays}\n\t\t\t\t\t\t\t\t\t\tonValueChange={(next) => update('dates', 'weekStartsOn', Number(next))}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</FormField>\n\t\t\t\t\t\t\t\t<FormField label={strings.labels.dateFormat}>\n\t\t\t\t\t\t\t\t\t<Input value={resolved.dates?.format ?? ''} onChange={(event) => update('dates', 'format', event.target.value)} />\n\t\t\t\t\t\t\t\t</FormField>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t),\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: 'content',\n\t\t\t\t\t\ttitle: strings.sections.content.title,\n\t\t\t\t\t\tdescription: strings.sections.content.description,\n\t\t\t\t\t\tcontent: (\n\t\t\t\t\t\t\t<div className=\"grid min-w-0 grid-cols-1 gap-space-md @2xl/theme-tweaker-controls:grid-cols-2\">\n\t\t\t\t\t\t\t\t<FormField label={strings.labels.textSize}>\n\t\t\t\t\t\t\t\t\t<Select\n\t\t\t\t\t\t\t\t\t\tvalue={resolved.typography?.defaultTextSize}\n\t\t\t\t\t\t\t\t\t\toptions={selectOptions(['xxs', 'xs', 'pxs', 'sm', 'base', 'lg', 'xl'], strings)}\n\t\t\t\t\t\t\t\t\t\tonValueChange={(next) => update('typography', 'defaultTextSize', next)}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</FormField>\n\t\t\t\t\t\t\t\t<FormField label={strings.labels.commentComposer}>\n\t\t\t\t\t\t\t\t\t<Select\n\t\t\t\t\t\t\t\t\t\tvalue={resolved.comments?.composerPosition}\n\t\t\t\t\t\t\t\t\t\toptions={selectOptions(['top', 'bottom'], strings)}\n\t\t\t\t\t\t\t\t\t\tonValueChange={(next) => update('comments', 'composerPosition', next)}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</FormField>\n\t\t\t\t\t\t\t\t<ToggleField\n\t\t\t\t\t\t\t\t\tlabel={strings.labels.dualPricing}\n\t\t\t\t\t\t\t\t\tdescription={strings.dualPricingDescription}\n\t\t\t\t\t\t\t\t\tvalue={resolved.money?.dualPricingEnabled ?? false}\n\t\t\t\t\t\t\t\t\tonValueChange={(next) => update('money', 'dualPricingEnabled', next)}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t<FormField label={strings.labels.dualPricingMode}>\n\t\t\t\t\t\t\t\t\t<Select\n\t\t\t\t\t\t\t\t\t\tvalue={resolved.money?.displayMode}\n\t\t\t\t\t\t\t\t\t\toptions={selectOptions(['default_only', 'dual', 'dynamic'], strings)}\n\t\t\t\t\t\t\t\t\t\tonValueChange={(next) => update('money', 'displayMode', next)}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</FormField>\n\t\t\t\t\t\t\t\t<FormField label={strings.labels.dualPricingLayout}>\n\t\t\t\t\t\t\t\t\t<Select\n\t\t\t\t\t\t\t\t\t\tvalue={resolved.money?.dualPricingDisplay}\n\t\t\t\t\t\t\t\t\t\toptions={selectOptions(['inline', 'lines'], strings)}\n\t\t\t\t\t\t\t\t\t\tonValueChange={(next) => update('money', 'dualPricingDisplay', next)}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</FormField>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t),\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: 'components',\n\t\t\t\t\t\ttitle: strings.sections.components.title,\n\t\t\t\t\t\tdescription: strings.sections.components.description,\n\t\t\t\t\t\tcontent: (\n\t\t\t\t\t\t\t<div className=\"grid min-w-0 grid-cols-1 gap-space-md @2xl/theme-tweaker-controls:grid-cols-2\">\n\t\t\t\t\t\t\t\t<FormField label={strings.labels.componentScale}>\n\t\t\t\t\t\t\t\t\t<Select\n\t\t\t\t\t\t\t\t\t\tvalue={resolved.density?.defaultScale}\n\t\t\t\t\t\t\t\t\t\toptions={scaleOptions}\n\t\t\t\t\t\t\t\t\t\tonValueChange={(next) => update('density', 'defaultScale', next)}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</FormField>\n\t\t\t\t\t\t\t\t<FormField label={strings.labels.itemVariant}>\n\t\t\t\t\t\t\t\t\t<Select\n\t\t\t\t\t\t\t\t\t\tvalue={resolved.item?.defaultVariant}\n\t\t\t\t\t\t\t\t\t\toptions={selectOptions(['default', 'outline', 'muted'], strings)}\n\t\t\t\t\t\t\t\t\t\tonValueChange={(next) => update('item', 'defaultVariant', next)}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</FormField>\n\t\t\t\t\t\t\t\t<FormField label={strings.labels.buttonTone}>\n\t\t\t\t\t\t\t\t\t<Select\n\t\t\t\t\t\t\t\t\t\tvalue={resolved.button?.defaultTone}\n\t\t\t\t\t\t\t\t\t\toptions={selectOptions(SEMANTIC_TONES, strings)}\n\t\t\t\t\t\t\t\t\t\tonValueChange={(next) => update('button', 'defaultTone', next)}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</FormField>\n\t\t\t\t\t\t\t\t<FormField label={strings.labels.buttonStyle}>\n\t\t\t\t\t\t\t\t\t<Select\n\t\t\t\t\t\t\t\t\t\tvalue={resolved.button?.defaultButtonStyle}\n\t\t\t\t\t\t\t\t\t\toptions={selectOptions(['solid', 'outline', 'ghost'], strings)}\n\t\t\t\t\t\t\t\t\t\tonValueChange={(next) => update('button', 'defaultButtonStyle', next)}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</FormField>\n\t\t\t\t\t\t\t\t<FormField label={strings.labels.badgeTone}>\n\t\t\t\t\t\t\t\t\t<Select\n\t\t\t\t\t\t\t\t\t\tvalue={resolved.badge?.defaultTone}\n\t\t\t\t\t\t\t\t\t\toptions={selectOptions(SEMANTIC_TONES, strings)}\n\t\t\t\t\t\t\t\t\t\tonValueChange={(next) => update('badge', 'defaultTone', next)}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</FormField>\n\t\t\t\t\t\t\t\t<FormField label={strings.labels.cardSurface}>\n\t\t\t\t\t\t\t\t\t<Select\n\t\t\t\t\t\t\t\t\t\tvalue={resolved.card?.defaultSurface}\n\t\t\t\t\t\t\t\t\t\toptions={selectOptions(['card', 'flat', 'framed'], strings)}\n\t\t\t\t\t\t\t\t\t\tonValueChange={(next) => update('card', 'defaultSurface', next)}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</FormField>\n\t\t\t\t\t\t\t\t<FormField label={strings.labels.spinner}>\n\t\t\t\t\t\t\t\t\t<Select\n\t\t\t\t\t\t\t\t\t\tvalue={resolved.spinner?.defaultVariant}\n\t\t\t\t\t\t\t\t\t\toptions={selectOptions(['default', 'shimmer', 'progress'], strings)}\n\t\t\t\t\t\t\t\t\t\tonValueChange={(next) => update('spinner', 'defaultVariant', next)}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</FormField>\n\t\t\t\t\t\t\t\t<ToggleField\n\t\t\t\t\t\t\t\t\tlabel={strings.labels.cardDivider}\n\t\t\t\t\t\t\t\t\tvalue={resolved.card?.defaultHeaderDivider ?? false}\n\t\t\t\t\t\t\t\t\tonValueChange={(next) => update('card', 'defaultHeaderDivider', next)}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t<ToggleField\n\t\t\t\t\t\t\t\t\tlabel={strings.labels.cardFooterDivider ?? defaultThemeProviderSettingsStrings.labels.cardFooterDivider}\n\t\t\t\t\t\t\t\t\tvalue={resolved.card?.defaultFooterDivider ?? true}\n\t\t\t\t\t\t\t\t\tonValueChange={(next) => update('card', 'defaultFooterDivider', next)}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t),\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: 'toasts',\n\t\t\t\t\t\ttitle: strings.sections.toasts.title,\n\t\t\t\t\t\tdescription: strings.sections.toasts.description,\n\t\t\t\t\t\tcontent: (\n\t\t\t\t\t\t\t<div className=\"grid min-w-0 grid-cols-1 gap-space-md @2xl/theme-tweaker-controls:grid-cols-2\">\n\t\t\t\t\t\t\t\t<FormField label={strings.labels.toastPosition}>\n\t\t\t\t\t\t\t\t\t<Select\n\t\t\t\t\t\t\t\t\t\tvalue={resolved.toast?.position}\n\t\t\t\t\t\t\t\t\t\toptions={selectOptions(['top-right', 'top-left', 'top-center', 'bottom-right', 'bottom-left', 'bottom-center'], strings)}\n\t\t\t\t\t\t\t\t\t\tonValueChange={(next) => update('toast', 'position', next)}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</FormField>\n\t\t\t\t\t\t\t\t<FormField label={strings.labels.toastTheme}>\n\t\t\t\t\t\t\t\t\t<Select\n\t\t\t\t\t\t\t\t\t\tvalue={resolved.toast?.theme}\n\t\t\t\t\t\t\t\t\t\toptions={selectOptions(['light', 'dark', 'system'], strings)}\n\t\t\t\t\t\t\t\t\t\tonValueChange={(next) => update('toast', 'theme', next)}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</FormField>\n\t\t\t\t\t\t\t\t<FormField label={strings.labels.toastDuration}>\n\t\t\t\t\t\t\t\t\t<Input\n\t\t\t\t\t\t\t\t\t\ttype=\"number\"\n\t\t\t\t\t\t\t\t\t\tmin={1000}\n\t\t\t\t\t\t\t\t\t\tstep={500}\n\t\t\t\t\t\t\t\t\t\tvalue={String(resolved.toast?.duration ?? 5000)}\n\t\t\t\t\t\t\t\t\t\tonChange={(event) => update('toast', 'duration', Number(event.target.value))}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</FormField>\n\t\t\t\t\t\t\t\t<FormField label={strings.labels.visibleToasts}>\n\t\t\t\t\t\t\t\t\t<Input\n\t\t\t\t\t\t\t\t\t\ttype=\"number\"\n\t\t\t\t\t\t\t\t\t\tmin={1}\n\t\t\t\t\t\t\t\t\t\tmax={10}\n\t\t\t\t\t\t\t\t\t\tvalue={String(resolved.toast?.visibleToasts ?? 4)}\n\t\t\t\t\t\t\t\t\t\tonChange={(event) => update('toast', 'visibleToasts', Number(event.target.value))}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</FormField>\n\t\t\t\t\t\t\t\t<ToggleField\n\t\t\t\t\t\t\t\t\tlabel={strings.labels.closeButton}\n\t\t\t\t\t\t\t\t\tvalue={resolved.toast?.closeButton ?? true}\n\t\t\t\t\t\t\t\t\tonValueChange={(next) => update('toast', 'closeButton', next)}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t<ToggleField\n\t\t\t\t\t\t\t\t\tlabel={strings.labels.richColors}\n\t\t\t\t\t\t\t\t\tvalue={resolved.toast?.richColors ?? false}\n\t\t\t\t\t\t\t\t\tonValueChange={(next) => update('toast', 'richColors', next)}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t),\n\t\t\t\t\t},\n\t\t\t\t]}\n\t\t\t/>\n\t\t</Stack>\n\t);\n}\n","import { defaultThemeProviderSettingsStrings, type ThemeProviderSettingsStrings } from './theme-provider-settings';\n\nexport interface ThemeTweakerStrings {\n\t/** Surface title. */\n\ttitle: string;\n\t/** Supporting copy shown under the label. */\n\tdescription: string;\n\tsearchLabel: string;\n\tsearchPlaceholder: string;\n\tsearchHint: string;\n\tsearchResults: string;\n\tallGroups: string;\n\tgroupNavigationLabel: string;\n\tpreviousGroup: string;\n\tnextGroup: string;\n\tgroupNavigationTitle: string;\n\tgroupNavigationDescription: string;\n\tsharedScope: string;\n\tmixedScope: string;\n\tvariableCount: string;\n\tgroupSectionLabel: string;\n\tlightMode: string;\n\tdarkMode: string;\n\treset: string;\n\tcopy: string;\n\tcopyProvider: string;\n\tcopyOverrides: string;\n\texportProvider: string;\n\texportOptions: string;\n\texport: string;\n\texportPending: string;\n\texportDialogTitle: string;\n\texportDialogDescription: string;\n\tdownloadCss: string;\n\tdownloadProvider: string;\n\tclose: string;\n\tcopiedStatus: string;\n\texportedStatus: string;\n\tinvalidTheme: string;\n\temptySearch: string;\n\tinheritValue: string;\n\tresetVariable: string;\n\tchooseColor: string;\n\tadjustVariable: string;\n\tchangedCount: string;\n\tcssOutputLabel: string;\n\tcssOutputDescription: string;\n\toverrideOutputLabel: string;\n\toverrideOutputDescription: string;\n\tproviderOutputLabel: string;\n\tproviderOutputDescription: string;\n\tautoPalette: string;\n\tautoPaletteDescription: string;\n\ttypeRecipeTitle: string;\n\ttypeRecipeDescription: string;\n\tbaseTypeSize: string;\n\ttypeRatio: string;\n\televationRecipeTitle: string;\n\televationRecipeDescription: string;\n\televationIntensity: string;\n\tpreviewTitle: string;\n\tpreviewDescription: string;\n\tpreviewItemTitle: string;\n\tpreviewItemDescription: string;\n\tpreviewFieldLabel: string;\n\tpreviewFieldPlaceholder: string;\n\tpreviewAction: string;\n\tpreviewSuccess: string;\n\tpreviewWarning: string;\n\tpreviewContract: string;\n\tproviderSettings: ThemeProviderSettingsStrings;\n\tgroups: Record<'colors' | 'states' | 'typography' | 'shape' | 'structure' | 'defaults', string>;\n\tgroupDescriptions: Record<'colors' | 'states' | 'typography' | 'shape' | 'structure' | 'defaults', string>;\n\tsections: Record<\n\t\t| 'surfaces-content'\n\t\t| 'brand-actions'\n\t\t| 'charts'\n\t\t| 'sidebar'\n\t\t| 'semantic-feedback'\n\t\t| 'inverse-surfaces'\n\t\t| 'font-families'\n\t\t| 'type-scale'\n\t\t| 'radius'\n\t\t| 'elevation'\n\t\t| 'global-scales'\n\t\t| 'actions-controls'\n\t\t| 'rows-surfaces'\n\t\t| 'media'\n\t\t| 'application-shell'\n\t\t| 'content-widths'\n\t\t| 'adaptive-layout',\n\t\tstring\n\t>;\n}\n\nexport const defaultThemeTweakerStrings: ThemeTweakerStrings = {\n\ttitle: 'Theme tweaker',\n\tdescription: 'Edit the public theme contract, calculate coherent recipes, and export complete CSS plus root display defaults.',\n\tsearchLabel: 'Search variables',\n\tsearchPlaceholder: 'Search by token, label, or purpose…',\n\tsearchHint: 'Search spans every public theme group.',\n\tsearchResults: 'Results: {{count}}',\n\tallGroups: 'All groups',\n\tgroupNavigationLabel: 'Theme categories',\n\tpreviousGroup: 'Previous categories',\n\tnextGroup: 'Next categories',\n\tgroupNavigationTitle: 'Theme controls',\n\tgroupNavigationDescription: 'Choose one contract area to edit.',\n\tsharedScope: 'Shared',\n\tmixedScope: 'Mixed scope',\n\tvariableCount: 'Variables: {{count}}',\n\tgroupSectionLabel: '{{group}} · {{section}}',\n\tlightMode: 'Light',\n\tdarkMode: 'Dark',\n\treset: 'Reset overrides',\n\tcopy: 'Copy CSS',\n\tcopyProvider: 'Copy provider config',\n\tcopyOverrides: 'Copy override-only CSS',\n\texportProvider: 'Export provider config',\n\texportOptions: 'More export options',\n\texport: 'Export',\n\texportPending: 'Downloading…',\n\texportDialogTitle: 'Export theme',\n\texportDialogDescription: 'Review, copy, or download the complete CSS theme and its matching UIProvider configuration.',\n\tdownloadCss: 'Download CSS',\n\tdownloadProvider: 'Download provider config',\n\tclose: 'Close',\n\tcopiedStatus: 'Copied to the clipboard.',\n\texportedStatus: 'File downloaded.',\n\tinvalidTheme: 'Fix the invalid CSS override before copying or exporting.',\n\temptySearch: 'No public theme variables match this search.',\n\tinheritValue: 'Inherit package value',\n\tresetVariable: 'Reset variable',\n\tchooseColor: 'Choose {{label}}',\n\tadjustVariable: 'Adjust {{label}}',\n\tchangedCount: 'Overrides: {{count}}',\n\tcssOutputLabel: 'Complete theme CSS',\n\tcssOutputDescription: 'A standalone light, dark, typography, shape, and structure contract for every public variable.',\n\toverrideOutputLabel: 'Override-only CSS',\n\toverrideOutputDescription: 'The compact alternative containing only values changed in this session.',\n\tproviderOutputLabel: 'UIProvider config',\n\tproviderOutputDescription: 'Mount-once display defaults for the application root.',\n\tautoPalette: 'Derive supporting colors',\n\tautoPaletteDescription: 'Keep status pairs, muted surfaces, accents, borders, charts, links, and sidebar actions coherent with the primary color.',\n\ttypeRecipeTitle: 'Calculated type scale',\n\ttypeRecipeDescription: 'Generate every public font step and line height from one body anchor and modular ratio.',\n\tbaseTypeSize: 'Base size',\n\ttypeRatio: 'Heading ratio',\n\televationRecipeTitle: 'Calculated elevation',\n\televationRecipeDescription: 'Generate the complete shadow ladder from one restrained intensity.',\n\televationIntensity: 'Shadow intensity',\n\tpreviewTitle: 'Semantic preview',\n\tpreviewDescription: 'The same variables drive surfaces, typography, controls, rows, and states.',\n\tpreviewItemTitle: 'Customer workspace',\n\tpreviewItemDescription: 'Long descriptions and actions keep the package rhythm.',\n\tpreviewFieldLabel: 'Workspace name',\n\tpreviewFieldPlaceholder: 'Acme operations',\n\tpreviewAction: 'Save changes',\n\tpreviewSuccess: 'Healthy',\n\tpreviewWarning: 'Review',\n\tpreviewContract: 'CSS variables',\n\tproviderSettings: defaultThemeProviderSettingsStrings,\n\tgroups: {\n\t\tcolors: 'Colors',\n\t\tstates: 'States',\n\t\ttypography: 'Typography',\n\t\tshape: 'Shape & elevation',\n\t\tstructure: 'Structure',\n\t\tdefaults: 'Provider',\n\t},\n\tgroupDescriptions: {\n\t\tcolors: 'Application surfaces, brand actions, charts, and sidebar colors.',\n\t\tstates: 'Semantic feedback and inverse-surface color pairs.',\n\t\ttypography: 'Font families and the calculated public type scale.',\n\t\tshape: 'Corner radius and the complete elevation ladder.',\n\t\tstructure: 'Density, spacing, controls, rows, media, and shell geometry.',\n\t\tdefaults: 'Mount-once UIProvider formatting and component defaults.',\n\t},\n\tsections: {\n\t\t'surfaces-content': 'Surfaces & content',\n\t\t'brand-actions': 'Brand & actions',\n\t\tcharts: 'Charts',\n\t\tsidebar: 'Sidebar',\n\t\t'semantic-feedback': 'Semantic feedback',\n\t\t'inverse-surfaces': 'Inverse surfaces',\n\t\t'font-families': 'Font families',\n\t\t'type-scale': 'Type scale',\n\t\tradius: 'Radius',\n\t\televation: 'Elevation',\n\t\t'global-scales': 'Global scales',\n\t\t'actions-controls': 'Actions & controls',\n\t\t'rows-surfaces': 'Rows & surfaces',\n\t\tmedia: 'Media',\n\t\t'application-shell': 'Application shell',\n\t\t'content-widths': 'Content widths',\n\t\t'adaptive-layout': 'Adaptive layout',\n\t},\n};\n","import type {\n\tAdminUIThemeMode,\n\tAdminUIThemeOverrides,\n} from './theme-tweaker.types';\n\nexport interface AdminUIPaletteRecipe {\n\tprimary: string;\n\tmode?: AdminUIThemeMode;\n}\n\nexport interface AdminUITypeScaleRecipe {\n\t/** Body-size anchor in pixels. The package default is 16. */\n\tbaseSize: number;\n\t/** Modular ratio for headings and display sizes. Defaults to 1.2. */\n\tratio?: number;\n}\n\nexport interface AdminUIElevationRecipe {\n\t/** Bounded visual intensity from 0 (flat) to 1 (pronounced). */\n\tintensity: number;\n}\n\nfunction clamp(value: number, min: number, max: number): number {\n\treturn Math.min(max, Math.max(min, value));\n}\n\nfunction contrastForeground(color: string, mode: AdminUIThemeMode): string {\n\tconst digits = color.trim().match(/^#([\\da-f]{3}|[\\da-f]{6})$/i)?.[1];\n\tconst hex = digits?.length === 3 ? [...digits].map(value => value + value).join('') : digits;\n\tif (hex) {\n\t\tconst channels = [0, 2, 4].map((offset) => Number.parseInt(hex.slice(offset, offset + 2), 16) / 255);\n\t\tconst luminance = channels\n\t\t\t.map((channel) => channel <= 0.03928 ? channel / 12.92 : ((channel + 0.055) / 1.055) ** 2.4)\n\t\t\t.reduce((sum, channel, index) => sum + channel * [0.2126, 0.7152, 0.0722][index], 0);\n\t\treturn luminance > 0.28 ? 'oklch(0.18 0.01 260)' : 'oklch(0.985 0 0)';\n\t}\n\n\tconst match = color.match(/oklch\\(\\s*([\\d.]+)(%)?/i);\n\tconst lightness = Number.parseFloat(match?.[1] ?? 'NaN') / (match?.[2] ? 100 : 1);\n\tif (Number.isFinite(lightness)) {\n\t\treturn lightness > 0.67 ? 'oklch(0.18 0.01 260)' : 'oklch(0.985 0 0)';\n\t}\n\n\treturn mode === 'dark' ? 'oklch(0.18 0.01 260)' : 'oklch(0.985 0 0)';\n}\n\n/**\n * Builds a coherent brand recipe from one primary color. Derived values stay\n * expressed in CSS so they continue to follow consumer-edited background and\n * foreground tokens without introducing another runtime color system.\n */\nexport function deriveAdminUIPalette({\n\tprimary,\n\tmode = 'light',\n}: AdminUIPaletteRecipe): AdminUIThemeOverrides {\n\tconst dark = mode === 'dark';\n\t// A small brand influence ties the palette together without erasing status hues.\n\tconst harmonize = (light: string, night: string) => `color-mix(in oklab, ${dark ? night : light} 94%, var(--primary))`;\n\treturn {\n\t\t'--primary': primary,\n\t\t'--primary-accent': dark\n\t\t\t? 'oklch(from var(--primary) clamp(0.7, l, 0.85) min(c, 0.16) h)'\n\t\t\t: 'oklch(from var(--primary) clamp(0.35, l, 0.55) min(c, 0.16) h)',\n\t\t'--success': harmonize('oklch(0.48 0.11 155)', 'oklch(0.74 0.12 155)'),\n\t\t'--success-foreground': dark ? 'oklch(0.23 0.025 155)' : 'oklch(0.985 0 0)',\n\t\t'--info': harmonize('oklch(0.52 0.12 250)', 'oklch(0.75 0.1 250)'),\n\t\t'--info-foreground': dark ? 'oklch(0.23 0.025 250)' : 'oklch(0.985 0 0)',\n\t\t'--warning': harmonize('oklch(0.78 0.13 75)', 'oklch(0.81 0.12 75)'),\n\t\t'--warning-foreground': 'oklch(0.28 0.035 60)',\n\t\t'--warning-accent': harmonize('oklch(0.53 0.11 65)', 'oklch(0.81 0.12 75)'),\n\t\t'--destructive': harmonize('oklch(0.55 0.17 25)', 'oklch(0.74 0.14 25)'),\n\t\t'--destructive-foreground': dark ? 'oklch(0.23 0.035 25)' : 'oklch(0.985 0 0)',\n\t\t'--primary-foreground': contrastForeground(primary, mode),\n\t\t'--secondary': 'color-mix(in oklab, var(--primary) 10%, var(--background))',\n\t\t'--secondary-foreground': 'var(--foreground)',\n\t\t'--muted': 'color-mix(in oklab, var(--primary) 7%, var(--background))',\n\t\t'--muted-foreground': 'color-mix(in oklab, var(--foreground) 62%, var(--background))',\n\t\t'--accent': 'color-mix(in oklab, var(--primary) 14%, var(--background))',\n\t\t'--accent-foreground': 'var(--foreground)',\n\t\t'--border': 'color-mix(in oklab, var(--primary) 14%, var(--background))',\n\t\t// Control boundaries and focus retain the central light/dark contrast\n\t\t// roles; a brand color alone cannot establish either contrast floor.\n\t\t'--link-color': 'var(--primary-accent)',\n\t\t'--chart-1': 'var(--primary)',\n\t\t'--chart-2': harmonize('oklch(0.56 0.11 230)', 'oklch(0.76 0.11 230)'),\n\t\t'--chart-3': harmonize('oklch(0.56 0.15 285)', 'oklch(0.76 0.15 285)'),\n\t\t'--chart-4': harmonize('oklch(0.58 0.14 330)', 'oklch(0.76 0.14 330)'),\n\t\t'--chart-5': harmonize('oklch(0.6 0.12 60)', 'oklch(0.76 0.12 60)'),\n\t\t'--sidebar-primary': 'var(--primary)',\n\t\t'--sidebar-primary-foreground': 'var(--primary-foreground)',\n\t\t'--sidebar-accent': 'var(--accent)',\n\t\t'--sidebar-accent-foreground': 'var(--accent-foreground)',\n\t\t'--sidebar-border': 'var(--border)',\n\t\t'--sidebar-ring': 'var(--ring)',\n\t};\n}\n\nconst BODY_STEPS = {\n\txxs: 0.75,\n\txs: 0.75,\n\tpxs: 0.8125,\n\tsm: 0.875,\n\tbase: 1,\n} as const;\n\nconst HEADING_STEPS = ['lg', 'xl', '2xl', '3xl', '4xl', '5xl', '6xl', '7xl', '8xl', '9xl'] as const;\n\n/** Generates the full public typography ladder from one base size. */\nexport function deriveAdminUITypeScale({\n\tbaseSize,\n\tratio = 1.2,\n}: AdminUITypeScaleRecipe): AdminUIThemeOverrides {\n\tconst boundedBase = clamp(baseSize, 14, 20);\n\tconst boundedRatio = clamp(ratio, 1.125, 1.333);\n\tconst overrides: AdminUIThemeOverrides = {};\n\n\tfor (const [step, factor] of Object.entries(BODY_STEPS)) {\n\t\tconst pixels = Math.max(12, boundedBase * factor);\n\t\toverrides[`--text-${step}`] = `${Number((pixels / 16).toFixed(4))}rem`;\n\t\toverrides[`--text-${step}--line-height`] = `${Number((Math.max(pixels + 6, pixels * 1.45) / pixels).toFixed(4))}`;\n\t}\n\n\tHEADING_STEPS.forEach((step, index) => {\n\t\tconst pixels = boundedBase * boundedRatio ** (index + 1);\n\t\toverrides[`--text-${step}`] = `${Number((pixels / 16).toFixed(4))}rem`;\n\t\toverrides[`--text-${step}--line-height`] = `${Number(clamp(1.55 - index * 0.065, 1, 1.5).toFixed(4))}`;\n\t});\n\n\treturn overrides;\n}\n\n/** Generates all public elevation steps from one bounded intensity. */\nexport function deriveAdminUIElevation({ intensity }: AdminUIElevationRecipe): AdminUIThemeOverrides {\n\tconst value = clamp(intensity, 0, 1);\n\tconst alpha = (factor: number) => Number((value * factor).toFixed(3));\n\treturn {\n\t\t'--shadow-2xs': `0 1px 2px 0 oklch(0 0 0 / ${alpha(0.06)})`,\n\t\t'--shadow-xs': `0 1px 3px 0 oklch(0 0 0 / ${alpha(0.07)})`,\n\t\t'--shadow-sm': `0 1px 2px 0 oklch(0 0 0 / ${alpha(0.10)}), 0 3px 8px -3px oklch(0 0 0 / ${alpha(0.13)})`,\n\t\t'--shadow': `0 1px 3px 0 oklch(0 0 0 / ${alpha(0.13)}), 0 4px 10px -3px oklch(0 0 0 / ${alpha(0.13)})`,\n\t\t'--shadow-md': `0 2px 4px -2px oklch(0 0 0 / ${alpha(0.13)}), 0 6px 16px -4px oklch(0 0 0 / ${alpha(0.17)})`,\n\t\t'--shadow-lg': `0 2px 6px -2px oklch(0 0 0 / ${alpha(0.13)}), 0 10px 24px -6px oklch(0 0 0 / ${alpha(0.20)})`,\n\t\t'--shadow-xl': `0 14px 28px -8px oklch(0 0 0 / ${alpha(0.22)}), 0 6px 12px -6px oklch(0 0 0 / ${alpha(0.12)})`,\n\t\t'--shadow-2xl': `0 24px 48px -14px oklch(0 0 0 / ${alpha(0.28)})`,\n\t};\n}\n","import { CheckCircle2, Copy, Download, LayoutGrid, Moon, Palette, RotateCcw, Search, Settings2, Shapes, ShieldCheck, Sun, Type, type LucideIcon } from 'lucide-react';\nimport { forwardRef, useEffect, useId, useImperativeHandle, useMemo, useRef, useState, type ReactNode } from 'react';\n\nimport { SmartAccordion } from '../../base/accordion';\nimport { Badge } from '../../base/badge';\nimport { Button } from '../../base/buttons';\nimport { Card } from '../../base/cards';\nimport { ActionDialog, useOverlayVisibility } from '../overlays';\nimport { ColorInput, SliderField } from '../../base/value-inputs';\nimport { FormField } from '../../base/forms';\nimport { Input, Textarea } from '../../base/text-inputs';\nimport { ToggleField } from '../../base/choice-inputs';\nimport { DecimalInput } from '../../base/forms-numeric';\nimport { Item } from '../../base/item';\nimport { Tabs, TabsList, TabsTrigger } from '../../base/navigation';\nimport { Grid, Stack } from '../../base/structure';\nimport { compositionRhythm } from '../../base/structure/composition.recipes';\nimport { MonoValue } from '../../primitives';\nimport { Heading, Text } from '../../typography';\nimport { interpolateString, useStrings } from '../../../lib/strings';\nimport { cn } from '../../../lib/utils';\n\nimport { defaultThemeTweakerFields } from './theme-tweaker.fields';\nimport { defaultThemeTweakerStrings, type ThemeTweakerStrings } from './theme-tweaker.strings';\nimport { ThemeProviderSettings } from './theme-provider-settings';\nimport type {\n\tAdminUIThemeDefinition,\n\tAdminUIThemeMode,\n\tAdminUIThemeOverrides,\n\tThemeTweakerField,\n\tThemeTweakerGroup,\n\tThemeTweakerProps,\n\tThemeTweakerRangeControl,\n\tThemeTweakerSection,\n} from './theme-tweaker.types';\nimport {\n\tadminUIThemeToStyle,\n\tcountAdminUIThemeOverrides,\n\tcreateAdminUITheme,\n\tcreateSerializableUIConfig,\n\tcreateThemeTweakerExportArtifact,\n\tdownloadAdminUITheme,\n\tdownloadAdminUITextFile,\n} from './theme-tweaker.utils';\nimport { deriveAdminUIElevation, deriveAdminUIPalette, deriveAdminUITypeScale } from './theme-tweaker.recipes';\nimport { ThemeScope } from './theme-scope';\nimport { useAppliedTheme } from './use-applied-theme';\nimport { focusRecipes } from '../../../lib/focus-recipes';\n\nconst GROUPS: readonly ThemeTweakerGroup[] = ['colors', 'states', 'typography', 'shape', 'structure', 'defaults'];\n\nconst GROUP_ICONS: Record<ThemeTweakerGroup, LucideIcon> = {\n\tcolors: Palette,\n\tstates: ShieldCheck,\n\ttypography: Type,\n\tshape: Shapes,\n\tstructure: LayoutGrid,\n\tdefaults: Settings2,\n};\n\ntype ActionStatus = 'idle' | 'copied' | 'exported';\n\ninterface ThemeExportArtifactProps {\n\t/** Surface title. */\n\ttitle: string;\n\t/** Supporting copy shown under the label. */\n\tdescription: string;\n\tcode: string;\n\tcopyLabel: string;\n\tdownloadLabel: string;\n\t/** Fired when an entry is copied. */\n\tonCopy: () => void;\n\t/** Fired when an entry is downloaded. */\n\tonDownload: () => void;\n\tdownloading?: boolean;\n}\n\nfunction ThemeExportArtifact({\n\ttitle,\n\tdescription,\n\tcode,\n\tcopyLabel,\n\tdownloadLabel,\n\tonCopy,\n\tonDownload,\n\tdownloading = false,\n}: ThemeExportArtifactProps) {\n\tconst titleId = useId();\n\n\treturn (\n\t\t<Stack\n\t\t\trender={<section aria-labelledby={titleId} />}\n\t\t\tgap=\"md\"\n\t\t\tclassName=\"theme-tweaker--export-artifact min-w-0\"\n\t\t>\n\t\t\t<Stack\n\t\t\t\tdirection={{ base: 'vertical', sm: 'horizontal' }}\n\t\t\t\talign={{ base: 'stretch', sm: 'start' }}\n\t\t\t\tjustify={{ sm: 'between' }}\n\t\t\t\tgap=\"md\"\n\t\t\t\tclassName=\"theme-tweaker--export-artifact-header\"\n\t\t\t>\n\t\t\t\t<Stack gap=\"dense\" className=\"min-w-0\">\n\t\t\t\t\t<Heading className=\"text-inherit\" id={titleId} tag=\"h3\">\n\t\t\t\t\t\t{title}\n\t\t\t\t\t</Heading>\n\t\t\t\t\t<Text size=\"xs\" type=\"secondary\">\n\t\t\t\t\t\t{description}\n\t\t\t\t\t</Text>\n\t\t\t\t</Stack>\n\t\t\t\t<Stack direction=\"horizontal\" gap=\"xs\" align=\"center\" wrap className=\"theme-tweaker--export-artifact-actions sm:shrink-0\">\n\t\t\t\t\t<Button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\ttone=\"secondary\"\n\t\t\t\t\t\tbuttonStyle=\"outline\"\n\t\t\t\t\t\ticon={Copy}\n\t\t\t\t\t\tonClick={onCopy}\n\t\t\t\t\t>\n\t\t\t\t\t\t{copyLabel}\n\t\t\t\t\t</Button>\n\t\t\t\t\t<Button tone=\"primary\"\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\ticon={Download}\n\t\t\t\t\t\tloading={downloading}\n\t\t\t\t\t\tonClick={onDownload}\n\t\t\t\t\t>\n\t\t\t\t\t\t{downloadLabel}\n\t\t\t\t\t</Button>\n\t\t\t\t</Stack>\n\t\t\t</Stack>\n\t\t\t<pre\n\t\t\t\ttabIndex={0}\n\t\t\t\taria-label={title}\n\t\t\t\tclassName={`theme-tweaker--export-code max-h-48 min-w-0 overflow-auto rounded-radius border border-border bg-muted/30 p-surface-xs font-mono text-xs leading-relaxed text-foreground outline-none ${focusRecipes.frame} sm:max-h-72`}\n\t\t\t>\n\t\t\t\t<code>{code}</code>\n\t\t\t</pre>\n\t\t</Stack>\n\t);\n}\n\ninterface VisibleThemeSection {\n\tgroup: ThemeTweakerGroup;\n\tsection: ThemeTweakerSection;\n\tfields: ThemeTweakerField[];\n}\n\ninterface ThemeVariableFieldProps {\n\tfield: ThemeTweakerField;\n\tvalue: string;\n\teffectiveValue: string;\n\t/** Fired with the next value. */\n\tonChange: (value: string) => void;\n\tonReset: () => void;\n\t/** Overrides this surface's own copy. */\n\tstrings: ThemeTweakerStrings;\n}\n\nfunction parseRangeValue(value: string, control: ThemeTweakerRangeControl): number {\n\tconst parsed = Number.parseFloat(value);\n\tif (!Number.isFinite(parsed)) return control.min;\n\treturn Math.min(control.max, Math.max(control.min, parsed));\n}\n\nfunction serializeRangeValue(value: number, control: ThemeTweakerRangeControl): string {\n\tconst precision = control.decimalPlaces ?? 3;\n\tconst normalized = Number(value.toFixed(precision));\n\treturn `${normalized}${control.unit ?? ''}`;\n}\n\nfunction resolveInspectionTarget(target: ThemeTweakerProps['target'], self: HTMLDivElement | null): HTMLElement | null {\n\tif (target === 'document') return document.documentElement;\n\tif (target === 'self' || target === null) return self;\n\tif (typeof target === 'function') return target();\n\treturn target ?? self;\n}\n\nfunction captureResolvedTheme(theme: AdminUIThemeDefinition, fields: readonly ThemeTweakerField[]): AdminUIThemeDefinition {\n\tif (typeof document === 'undefined' || typeof window === 'undefined') return createAdminUITheme(theme);\n\tconst root = document.documentElement;\n\tconst names = [...new Set(fields.map((field) => field.name))];\n\tconst originalLight = root.classList.contains('light');\n\tconst originalDark = root.classList.contains('dark');\n\tconst originalStyles = new Map(\n\t\tnames.map((name) => [\n\t\t\tname,\n\t\t\t{\n\t\t\t\tvalue: root.style.getPropertyValue(name),\n\t\t\t\tpriority: root.style.getPropertyPriority(name),\n\t\t\t},\n\t\t]),\n\t);\n\n\tconst capture = (mode: AdminUIThemeMode) => {\n\t\tfor (const name of names) root.style.removeProperty(name);\n\t\troot.classList.toggle('light', mode === 'light');\n\t\troot.classList.toggle('dark', mode === 'dark');\n\t\tfor (const [name, value] of Object.entries(adminUIThemeToStyle(theme, mode))) {\n\t\t\tif (typeof value === 'string') root.style.setProperty(name, value);\n\t\t}\n\t\tconst computed = window.getComputedStyle(root);\n\t\treturn Object.fromEntries(names.map((name) => [name, computed.getPropertyValue(name).trim()] as const).filter((entry) => entry[1].length > 0));\n\t};\n\n\ttry {\n\t\tconst light = capture('light');\n\t\tconst dark = capture('dark');\n\t\tconst sharedNames = new Set(fields.filter((field) => field.scope === 'shared').map((field) => field.name));\n\t\treturn createAdminUITheme({\n\t\t\tmode: theme.mode,\n\t\t\tshared: Object.fromEntries(Object.entries(light).filter(([name]) => sharedNames.has(name as `--${string}`))),\n\t\t\tlight: Object.fromEntries(Object.entries(light).filter(([name]) => !sharedNames.has(name as `--${string}`))),\n\t\t\tdark: Object.fromEntries(Object.entries(dark).filter(([name]) => !sharedNames.has(name as `--${string}`))),\n\t\t});\n\t} finally {\n\t\tfor (const name of names) {\n\t\t\tconst original = originalStyles.get(name);\n\t\t\tif (original?.value) root.style.setProperty(name, original.value, original.priority);\n\t\t\telse root.style.removeProperty(name);\n\t\t}\n\t\troot.classList.toggle('light', originalLight);\n\t\troot.classList.toggle('dark', originalDark);\n\t}\n}\n\nfunction ThemeVariableField({ field, value, effectiveValue, onChange, onReset, strings }: ThemeVariableFieldProps) {\n\tconst id = `theme-variable-${useId().replace(/:/g, '')}`;\n\tconst resetAction = (\n\t\t<Button\n\t\t\ttype=\"button\"\n\t\t\ticonOnly\n\t\t\ttone=\"secondary\"\n\t\t\tbuttonStyle=\"ghost\"\n\t\t\ticon={RotateCcw}\n\t\t\twithTooltip={strings.resetVariable}\n\t\t\taria-label={`${strings.resetVariable}: ${field.label}`}\n\t\t\tdisabled={!value}\n\t\t\tonClick={onReset}\n\t\t>\n\t\t\t<Text tag=\"span\" size=\"inherit\" className=\"sr-only\">\n\t\t\t\t{strings.resetVariable}\n\t\t\t</Text>\n\t\t</Button>\n\t);\n\tconst placeholder = field.placeholder ?? effectiveValue ?? strings.inheritValue;\n\tlet control: ReactNode;\n\n\tif (field.kind === 'color') {\n\t\tcontrol = (\n\t\t\t<Stack direction=\"horizontal\" gap=\"xs\" align=\"center\" wrap={false}>\n\t\t\t\t<ColorInput\n\t\t\t\t\tid={id}\n\t\t\t\t\taria-label={field.label}\n\t\t\t\t\taria-description={field.description}\n\t\t\t\t\tvalue={value}\n\t\t\t\t\tpreviewValue={value || effectiveValue || `var(${field.name})`}\n\t\t\t\t\tpickerAriaLabel={interpolateString(strings.chooseColor, {\n\t\t\t\t\t\tlabel: field.label,\n\t\t\t\t\t})}\n\t\t\t\t\tonValueChange={onChange}\n\t\t\t\t\tplaceholder={placeholder}\n\t\t\t\t\tclassName=\"min-w-0 flex-1\"\n\t\t\t\t/>\n\t\t\t\t{resetAction}\n\t\t\t</Stack>\n\t\t);\n\t} else if (field.control?.type === 'range') {\n\t\tconst currentValue = parseRangeValue(value || effectiveValue, field.control);\n\t\tcontrol = (\n\t\t\t<Stack gap=\"sm\">\n\t\t\t\t<SliderField\n\t\t\t\t\tid={`${id}-slider`}\n\t\t\t\t\taria-label={interpolateString(strings.adjustVariable, {\n\t\t\t\t\t\tlabel: field.label,\n\t\t\t\t\t})}\n\t\t\t\t\tvalue={currentValue}\n\t\t\t\t\tmin={field.control.min}\n\t\t\t\t\tmax={field.control.max}\n\t\t\t\t\tstep={field.control.step}\n\t\t\t\t\tonValueChange={(next) => onChange(serializeRangeValue(next, field.control as ThemeTweakerRangeControl))}\n\t\t\t\t/>\n\t\t\t\t<Stack direction=\"horizontal\" gap=\"xs\" align=\"center\" wrap={false}>\n\t\t\t\t\t<Stack gap=\"none\" className=\"w-28 max-w-full shrink-0\">\n\t\t\t\t\t\t<DecimalInput\n\t\t\t\t\t\t\tid={id}\n\t\t\t\t\t\t\taria-label={field.label}\n\t\t\t\t\t\t\taria-description={field.description}\n\t\t\t\t\t\t\tvalue={String(currentValue)}\n\t\t\t\t\t\t\tdecimalPlaces={field.control.decimalPlaces ?? 3}\n\t\t\t\t\t\t\tmin={field.control.min}\n\t\t\t\t\t\t\tmax={field.control.max}\n\t\t\t\t\t\t\tallowEmpty\n\t\t\t\t\t\t\tnormalizeOnBlur={false}\n\t\t\t\t\t\t\tendAddon={field.control.unit}\n\t\t\t\t\t\t\tonChange={(event) => {\n\t\t\t\t\t\t\t\tconst next = event.target.value.trim();\n\t\t\t\t\t\t\t\tonChange(next ? `${next}${field.control?.unit ?? ''}` : '');\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\tclassName=\"font-mono tabular-nums\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</Stack>\n\t\t\t\t\t{resetAction}\n\t\t\t\t</Stack>\n\t\t\t</Stack>\n\t\t);\n\t} else if (field.kind === 'font' || field.kind === 'shadow') {\n\t\tcontrol = (\n\t\t\t<Stack direction=\"horizontal\" gap=\"xs\" align=\"start\" wrap={false}>\n\t\t\t\t<Stack className=\"min-w-0 flex-1\">\n\t\t\t\t\t<Textarea\n\t\t\t\t\t\tid={id}\n\t\t\t\t\t\taria-label={field.label}\n\t\t\t\t\t\taria-description={field.description}\n\t\t\t\t\t\tvalue={value}\n\t\t\t\t\t\tonChange={(event) => onChange(event.target.value)}\n\t\t\t\t\t\tplaceholder={placeholder}\n\t\t\t\t\t\tminRows={2}\n\t\t\t\t\t\tautoResize\n\t\t\t\t\t\tclassName=\"font-mono\"\n\t\t\t\t\t/>\n\t\t\t\t</Stack>\n\t\t\t\t{resetAction}\n\t\t\t</Stack>\n\t\t);\n\t} else {\n\t\tcontrol = (\n\t\t\t<Stack direction=\"horizontal\" gap=\"xs\" align=\"center\" wrap={false}>\n\t\t\t\t<Input\n\t\t\t\t\tid={id}\n\t\t\t\t\taria-label={field.label}\n\t\t\t\t\taria-description={field.description}\n\t\t\t\t\tvalue={value}\n\t\t\t\t\tonChange={(event) => onChange(event.target.value)}\n\t\t\t\t\tplaceholder={placeholder}\n\t\t\t\t\tclassName=\"min-w-0 flex-1 font-mono\"\n\t\t\t\t/>\n\t\t\t\t{resetAction}\n\t\t\t</Stack>\n\t\t);\n\t}\n\n\treturn (\n\t\t<FormField\n\t\t\tlabel={\n\t\t\t\t<Stack render={<span />} direction=\"horizontal\" gap=\"sm\" align=\"baseline\" justify=\"between\" wrap className=\"min-w-0 flex-1\">\n\t\t\t\t\t<Text type=\"inherit\" tag=\"span\" size=\"inherit\" weight=\"medium\" className=\"min-w-0\">\n\t\t\t\t\t\t{field.label}\n\t\t\t\t\t</Text>\n\t\t\t\t\t<MonoValue size=\"xs\" type=\"secondary\" weight=\"regular\" className=\"max-w-full break-all\">\n\t\t\t\t\t\t{field.name}\n\t\t\t\t\t</MonoValue>\n\t\t\t\t</Stack>\n\t\t\t}\n\t\t\thtmlFor={id}\n\t\t\tclassName=\"theme-tweaker--field min-w-0 border-t border-border/60 py-row-y first:border-t-0\"\n\t\t>\n\t\t\t{control}\n\t\t</FormField>\n\t);\n}\n\nfunction DefaultThemePreview({ strings }: { strings: ThemeTweakerStrings }) {\n\treturn (\n\t\t<Card title={strings.previewTitle} description={strings.previewDescription} className=\"theme-tweaker--preview-card\">\n\t\t\t<Stack gap=\"lg\">\n\t\t\t\t<Stack direction=\"horizontal\" gap=\"sm\" wrap>\n\t\t\t\t\t<Badge tone=\"success\">{strings.previewSuccess}</Badge>\n\t\t\t\t\t<Badge tone=\"warning\">{strings.previewWarning}</Badge>\n\t\t\t\t\t<Badge tone=\"secondary\">{strings.previewContract}</Badge>\n\t\t\t\t</Stack>\n\t\t\t\t<Item\n\t\t\t\t\tvariant=\"muted\"\n\t\t\t\t\tpadding=\"default\"\n\t\t\t\t\tmedia={<Palette />}\n\t\t\t\t\tmediaVariant=\"icon\"\n\t\t\t\t\ttitle={strings.previewItemTitle}\n\t\t\t\t\tdescription={strings.previewItemDescription}\n\t\t\t\t\ttrailing={<CheckCircle2 className=\"size-icon text-success\" />}\n\t\t\t\t/>\n\t\t\t\t<FormField label={strings.previewFieldLabel}>\n\t\t\t\t\t<Input placeholder={strings.previewFieldPlaceholder} />\n\t\t\t\t</FormField>\n\t\t\t\t<Button tone=\"primary\" type=\"button\">{strings.previewAction}</Button>\n\t\t\t</Stack>\n\t\t</Card>\n\t);\n}\n\nfunction updateThemeVariable(theme: AdminUIThemeDefinition, field: ThemeTweakerField, rawValue: string): AdminUIThemeDefinition {\n\tconst bucket = field.scope === 'shared' ? 'shared' : theme.mode;\n\tconst nextBucket = { ...theme[bucket] };\n\tif (rawValue.trim().length === 0) {\n\t\tdelete nextBucket[field.name];\n\t} else {\n\t\tnextBucket[field.name] = rawValue;\n\t}\n\treturn {\n\t\t...theme,\n\t\t[bucket]: nextBucket,\n\t};\n}\n\nexport const ThemeTweaker = forwardRef<HTMLDivElement, ThemeTweakerProps>(function ThemeTweaker(\n\t{\n\t\tvalue,\n\t\tdefaultValue,\n\t\tonValueChange,\n\t\tonModeChange,\n\t\tfields = defaultThemeTweakerFields,\n\t\ttarget = 'self',\n\t\tapply = true,\n\t\tmanageModeClass = true,\n\t\tpreview,\n\t\tfileName = 'admin-ui-theme.css',\n\t\tconfig,\n\t\tdefaultConfig,\n\t\tonConfigChange,\n\t\tproviderFileName = 'admin-ui.config.ts',\n\t\tshowIntro = true,\n\t\tselectors,\n\t\tonExport,\n\t\tonCopy,\n\t\tonReset,\n\t\tonError,\n\t\tactionsSlot,\n\t\tstrings: stringsProp,\n\t\tclassName,\n\t\t...props\n\t},\n\tforwardedRef,\n) {\n\tconst strings = useStrings(defaultThemeTweakerStrings, stringsProp);\n\tconst [internalTheme, setInternalTheme] = useState(() => createAdminUITheme(defaultValue));\n\tconst theme = useMemo(() => (value ? createAdminUITheme(value) : internalTheme), [internalTheme, value]);\n\tconst [internalConfig, setInternalConfig] = useState(() => createSerializableUIConfig(defaultConfig));\n\tconst providerConfig = useMemo(() => createSerializableUIConfig(config ?? internalConfig), [config, internalConfig]);\n\tconst [group, setGroup] = useState<ThemeTweakerGroup>('colors');\n\tconst [search, setSearch] = useState('');\n\tconst [derivePalette, setDerivePalette] = useState(true);\n\tconst [baseTypeSize, setBaseTypeSize] = useState(16);\n\tconst [typeRatio, setTypeRatio] = useState(1.2);\n\tconst [elevationIntensity, setElevationIntensity] = useState(0.8);\n\tconst [actionStatus, setActionStatus] = useState<ActionStatus>('idle');\n\t// useOverlayVisibility rather than a bare useState: it is the package's own\n\t// overlay state hook, and `overlayProps` is exactly the open/onOpenChange\n\t// pair ActionDialog wants, so the wiring cannot drift out of step.\n\tconst exportDialog = useOverlayVisibility();\n\tconst [exporting, setExporting] = useState(false);\n\tconst selfRef = useRef<HTMLDivElement>(null);\n\tuseImperativeHandle(forwardedRef, () => selfRef.current as HTMLDivElement);\n\n\tuseAppliedTheme({\n\t\tapply,\n\t\tmanageModeClass,\n\t\tselfRef,\n\t\ttarget,\n\t\ttheme,\n\t});\n\tconst [resolvedTheme, setResolvedTheme] = useState<AdminUIThemeDefinition>(() => createAdminUITheme(theme));\n\tconst [effectiveValues, setEffectiveValues] = useState<Record<string, string>>({});\n\n\tuseEffect(() => {\n\t\tif (typeof window === 'undefined') return;\n\t\tconst timeout = window.setTimeout(() => {\n\t\t\tconst inspectionTarget = resolveInspectionTarget(target, selfRef.current);\n\t\t\tif (!inspectionTarget) return;\n\t\t\tconst computed = window.getComputedStyle(inspectionTarget);\n\t\t\tsetEffectiveValues(Object.fromEntries(fields.map((field) => [field.name, computed.getPropertyValue(field.name).trim()])));\n\t\t\tsetResolvedTheme(captureResolvedTheme(theme, fields));\n\t\t}, 0);\n\t\treturn () => window.clearTimeout(timeout);\n\t}, [apply, fields, target, theme]);\n\n\tconst serialization = useMemo(() => {\n\t\ttry {\n\t\t\tconst exportTheme = createAdminUITheme({\n\t\t\t\tmode: theme.mode,\n\t\t\t\tshared: { ...resolvedTheme.shared, ...theme.shared },\n\t\t\t\tlight: { ...resolvedTheme.light, ...theme.light },\n\t\t\t\tdark: { ...resolvedTheme.dark, ...theme.dark },\n\t\t\t});\n\t\t\tconst artifact = createThemeTweakerExportArtifact(\n\t\t\t\ttheme,\n\t\t\t\tfileName,\n\t\t\t\t{ selectors },\n\t\t\t\t{\n\t\t\t\t\tresolvedTheme: exportTheme,\n\t\t\t\t\tproviderConfig,\n\t\t\t\t\tproviderFileName,\n\t\t\t\t},\n\t\t\t);\n\t\t\treturn {\n\t\t\t\tartifact,\n\t\t\t\terror: null,\n\t\t\t};\n\t\t} catch (error) {\n\t\t\treturn {\n\t\t\t\tartifact: null,\n\t\t\t\terror,\n\t\t\t};\n\t\t}\n\t}, [fileName, providerConfig, providerFileName, resolvedTheme, selectors, theme]);\n\tconst { artifact, error: serializationError } = serialization;\n\tconst cssText = artifact?.cssText ?? `/* ${strings.invalidTheme} */\\n`;\n\tconst overrideCount = useMemo(() => countAdminUIThemeOverrides(theme), [theme]);\n\tconst normalizedSearch = search.trim().toLowerCase();\n\tconst visibleFields = useMemo(\n\t\t() =>\n\t\t\tfields.filter((field) => {\n\t\t\t\tif (!normalizedSearch && field.group !== group) return false;\n\t\t\t\tif (!normalizedSearch) return true;\n\t\t\t\treturn [field.name, field.label, field.description].filter(Boolean).some((part) => part?.toLowerCase().includes(normalizedSearch));\n\t\t\t}),\n\t\t[fields, group, normalizedSearch],\n\t);\n\tconst visibleSections = useMemo(() => {\n\t\tconst sections = new Map<string, VisibleThemeSection>();\n\t\tfor (const field of visibleFields) {\n\t\t\tconst key = `${field.group}:${field.section}`;\n\t\t\tconst existing = sections.get(key);\n\t\t\tif (existing) {\n\t\t\t\texisting.fields.push(field);\n\t\t\t} else {\n\t\t\t\tsections.set(key, {\n\t\t\t\t\tgroup: field.group,\n\t\t\t\t\tsection: field.section,\n\t\t\t\t\tfields: [field],\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\t// Brand controls are the starting point; retain caller ordering within every section.\n\t\treturn [...sections.values()].sort((a, b) => Number(b.section === 'brand-actions') - Number(a.section === 'brand-actions'));\n\t}, [visibleFields]);\n\n\tconst commit = (next: AdminUIThemeDefinition) => {\n\t\tif (value === undefined) setInternalTheme(next);\n\t\tonValueChange?.(next);\n\t\tsetActionStatus('idle');\n\t};\n\n\tconst commitConfig = (next: ReturnType<typeof createSerializableUIConfig>) => {\n\t\tif (config === undefined) setInternalConfig(next);\n\t\tonConfigChange?.(next);\n\t\tsetActionStatus('idle');\n\t};\n\n\tconst applyModeRecipe = (overrides: AdminUIThemeOverrides) => {\n\t\tcommit({\n\t\t\t...theme,\n\t\t\t[theme.mode]: { ...theme[theme.mode], ...overrides },\n\t\t});\n\t};\n\n\tconst applySharedRecipe = (overrides: AdminUIThemeOverrides) => {\n\t\tcommit({\n\t\t\t...theme,\n\t\t\tshared: { ...theme.shared, ...overrides },\n\t\t});\n\t};\n\n\tconst setMode = (mode: AdminUIThemeMode) => {\n\t\tif (mode === theme.mode) return;\n\t\tcommit({ ...theme, mode });\n\t\tonModeChange?.(mode);\n\t};\n\n\tconst exportThemeArtifact = async () => {\n\t\ttry {\n\t\t\tif (serializationError) throw serializationError;\n\t\t\tsetExporting(true);\n\t\t\tif (!artifact) throw new Error(strings.invalidTheme);\n\t\t\tif (onExport) {\n\t\t\t\tawait onExport(artifact);\n\t\t\t} else {\n\t\t\t\tdownloadAdminUITheme(artifact);\n\t\t\t}\n\t\t\tsetActionStatus('exported');\n\t\t} catch (error) {\n\t\t\tonError?.(error);\n\t\t\tif (import.meta.env?.DEV) {\n\t\t\t\tconsole.warn('[ThemeTweaker] theme export failed.', error);\n\t\t\t}\n\t\t} finally {\n\t\t\tsetExporting(false);\n\t\t}\n\t};\n\n\tconst copyText = async (text: string) => {\n\t\ttry {\n\t\t\tif (onCopy) await onCopy(text);\n\t\t\telse if (typeof navigator !== 'undefined' && navigator.clipboard) await navigator.clipboard.writeText(text);\n\t\t\telse throw new Error('Clipboard access is unavailable. Provide onCopy for this environment.');\n\t\t\tsetActionStatus('copied');\n\t\t} catch (error) {\n\t\t\tonError?.(error);\n\t\t\tif (import.meta.env?.DEV) console.warn('[ThemeTweaker] copy failed.', error);\n\t\t}\n\t};\n\n\tconst exportProviderConfig = () => {\n\t\ttry {\n\t\t\tif (!artifact) throw serializationError ?? new Error(strings.invalidTheme);\n\t\t\tdownloadAdminUITextFile({\n\t\t\t\tfileName: artifact.providerFileName,\n\t\t\t\ttext: artifact.providerConfigText,\n\t\t\t\tmimeType: 'text/typescript;charset=utf-8',\n\t\t\t});\n\t\t\tsetActionStatus('exported');\n\t\t} catch (error) {\n\t\t\tonError?.(error);\n\t\t\tif (import.meta.env?.DEV) console.warn('[ThemeTweaker] provider export failed.', error);\n\t\t}\n\t};\n\n\tconst reset = () => {\n\t\tconst previous = theme;\n\t\tconst next = createAdminUITheme({ mode: theme.mode });\n\t\tcommit(next);\n\t\tonReset?.(previous);\n\t\tsetActionStatus('idle');\n\t};\n\tconst statusMessage = serializationError\n\t\t? strings.invalidTheme\n\t\t: actionStatus === 'copied'\n\t\t\t? strings.copiedStatus\n\t\t\t: actionStatus === 'exported'\n\t\t\t\t? strings.exportedStatus\n\t\t\t\t: null;\n\tconst recipeControls =\n\t\tgroup === 'colors' ? (\n\t\t\t<ToggleField className=\"theme-tweaker--recipe\" label={strings.autoPalette} description={strings.autoPaletteDescription} value={derivePalette} onValueChange={setDerivePalette} />\n\t\t) : group === 'typography' ? (\n\t\t\t<Card title={strings.typeRecipeTitle} description={strings.typeRecipeDescription} surface=\"flat\" padding=\"none\" className=\"theme-tweaker--recipe\">\n\t\t\t\t<Grid columns={1} gap={compositionRhythm.related} className=\"@2xl/theme-tweaker-controls:grid-cols-2\">\n\t\t\t\t\t<FormField label={strings.baseTypeSize}>\n\t\t\t\t\t\t<SliderField\n\t\t\t\t\t\t\taria-label={strings.baseTypeSize}\n\t\t\t\t\t\t\tvalue={baseTypeSize}\n\t\t\t\t\t\t\tmin={14}\n\t\t\t\t\t\t\tmax={20}\n\t\t\t\t\t\t\tstep={1}\n\t\t\t\t\t\t\tonValueChange={(next) => {\n\t\t\t\t\t\t\t\tsetBaseTypeSize(next);\n\t\t\t\t\t\t\t\tapplySharedRecipe(\n\t\t\t\t\t\t\t\t\tderiveAdminUITypeScale({\n\t\t\t\t\t\t\t\t\t\tbaseSize: next,\n\t\t\t\t\t\t\t\t\t\tratio: typeRatio,\n\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</FormField>\n\t\t\t\t\t<FormField label={strings.typeRatio}>\n\t\t\t\t\t\t<SliderField\n\t\t\t\t\t\t\taria-label={strings.typeRatio}\n\t\t\t\t\t\t\tvalue={typeRatio}\n\t\t\t\t\t\t\tmin={1.125}\n\t\t\t\t\t\t\tmax={1.333}\n\t\t\t\t\t\t\tstep={0.01}\n\t\t\t\t\t\t\tonValueChange={(next) => {\n\t\t\t\t\t\t\t\tsetTypeRatio(next);\n\t\t\t\t\t\t\t\tapplySharedRecipe(\n\t\t\t\t\t\t\t\t\tderiveAdminUITypeScale({\n\t\t\t\t\t\t\t\t\t\tbaseSize: baseTypeSize,\n\t\t\t\t\t\t\t\t\t\tratio: next,\n\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</FormField>\n\t\t\t\t</Grid>\n\t\t\t</Card>\n\t\t) : group === 'shape' ? (\n\t\t\t<Card title={strings.elevationRecipeTitle} description={strings.elevationRecipeDescription} surface=\"flat\" padding=\"none\" className=\"theme-tweaker--recipe\">\n\t\t\t\t<FormField label={strings.elevationIntensity}>\n\t\t\t\t\t<SliderField\n\t\t\t\t\t\taria-label={strings.elevationIntensity}\n\t\t\t\t\t\tvalue={elevationIntensity}\n\t\t\t\t\t\tmin={0}\n\t\t\t\t\t\tmax={1}\n\t\t\t\t\t\tstep={0.05}\n\t\t\t\t\t\tonValueChange={(next) => {\n\t\t\t\t\t\t\tsetElevationIntensity(next);\n\t\t\t\t\t\t\tapplyModeRecipe(deriveAdminUIElevation({ intensity: next }));\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t</FormField>\n\t\t\t</Card>\n\t\t) : null;\n\n\tconst content = (\n\t\t<div className={cn('grid min-w-0 grid-cols-1 gap-space-xl theme-tweaker--layout', preview !== false && '@3xl/theme-tweaker:grid-cols-2')}>\n\t\t\t<Stack gap=\"lg\" className=\"theme-tweaker--controls @container/theme-tweaker-controls min-w-0\">\n\t\t\t\t<Stack gap=\"lg\" className=\"theme-tweaker--header shrink-0\">\n\t\t\t\t\t{showIntro ? (\n\t\t\t\t\t\t<Stack gap=\"normal\" className=\"theme-tweaker--intro\">\n\t\t\t\t\t\t\t<Stack direction=\"horizontal\" gap=\"sm\" align=\"center\" wrap>\n\t\t\t\t\t\t\t\t<Heading tag=\"h2\" className=\"theme-tweaker--title text-inherit\">\n\t\t\t\t\t\t\t\t\t{strings.title}\n\t\t\t\t\t\t\t\t</Heading>\n\t\t\t\t\t\t\t\t<Badge tone=\"secondary\">\n\t\t\t\t\t\t\t\t\t{interpolateString(strings.changedCount, {\n\t\t\t\t\t\t\t\t\t\tcount: overrideCount,\n\t\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t\t</Badge>\n\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t\t<Text type=\"secondary\" className=\"theme-tweaker--description\">\n\t\t\t\t\t\t\t\t{strings.description}\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t</Stack>\n\t\t\t\t\t) : null}\n\n\t\t\t\t\t<Stack\n\t\t\t\t\t\tdirection=\"horizontal\"\n\t\t\t\t\t\tjustify=\"between\"\n\t\t\t\t\t\talign=\"center\"\n\t\t\t\t\t\twrap\n\t\t\t\t\t\tgap=\"sm\"\n\t\t\t\t\t\tclassName=\"theme-tweaker--toolbar\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<Stack direction=\"horizontal\" gap=\"sm\" align=\"center\" wrap>\n\t\t\t\t\t\t\t<Tabs value={theme.mode} onValueChange={(next) => setMode(next as AdminUIThemeMode)}>\n\t\t\t\t\t\t\t\t<TabsList>\n\t\t\t\t\t\t\t\t\t<TabsTrigger value=\"light\">\n\t\t\t\t\t\t\t\t\t\t<Sun className=\"size-icon-sm\" />\n\t\t\t\t\t\t\t\t\t\t{strings.lightMode}\n\t\t\t\t\t\t\t\t\t</TabsTrigger>\n\t\t\t\t\t\t\t\t\t<TabsTrigger value=\"dark\">\n\t\t\t\t\t\t\t\t\t\t<Moon className=\"size-icon-sm\" />\n\t\t\t\t\t\t\t\t\t\t{strings.darkMode}\n\t\t\t\t\t\t\t\t\t</TabsTrigger>\n\t\t\t\t\t\t\t\t</TabsList>\n\t\t\t\t\t\t\t</Tabs>\n\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t<Stack direction=\"horizontal\" gap=\"xs\" align=\"center\" justify=\"end\" wrap={false} className=\"theme-tweaker--actions\">\n\t\t\t\t\t\t\t<Button tone=\"primary\"\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\tdisabled={Boolean(serializationError)}\n\t\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\t\tsetActionStatus('idle');\n\t\t\t\t\t\t\t\t\texportDialog.show();\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{strings.export}\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t{actionsSlot}\n\t\t\t\t\t\t</Stack>\n\t\t\t\t\t</Stack>\n\n\t\t\t\t\t<FormField\n\t\t\t\t\t\tlabel={\n\t\t\t\t\t\t\t<Text tag=\"span\" size=\"inherit\" className=\"sr-only\">\n\t\t\t\t\t\t\t\t{strings.searchLabel}\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t}\n\t\t\t\t\t\tclassName=\"theme-tweaker--search\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<Input\n\t\t\t\t\t\t\tvalue={search}\n\t\t\t\t\t\t\tonChange={(event) => setSearch(event.target.value)}\n\t\t\t\t\t\t\tplaceholder={strings.searchPlaceholder}\n\t\t\t\t\t\t\tstartIcon={Search}\n\t\t\t\t\t\t\tclearable\n\t\t\t\t\t\t\tonClear={() => setSearch('')}\n\t\t\t\t\t\t\taria-description={strings.searchHint}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</FormField>\n\t\t\t\t</Stack>\n\n\t\t\t\t<Stack gap=\"lg\" className=\"theme-tweaker--workspace min-h-0\">\n\t\t\t\t\t<nav\n\t\t\t\t\t\taria-label={strings.groupNavigationLabel}\n\t\t\t\t\t\tclassName=\"theme-tweaker--navigation min-w-0\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<Tabs\n\t\t\t\t\t\t\tvalue={group}\n\t\t\t\t\t\t\tonValueChange={(nextGroup) => {\n\t\t\t\t\t\t\t\tsetSearch('');\n\t\t\t\t\t\t\t\tsetGroup(nextGroup as ThemeTweakerGroup);\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\tclassName=\"w-full\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<TabsList scrollable scrollStrings={{ previous: strings.previousGroup, next: strings.nextGroup }} className=\"theme-tweaker--group-list\">\n\t\t\t\t\t\t\t\t\t{GROUPS.map((nextGroup) => {\n\t\t\t\t\t\t\t\t\t\tconst GroupIcon = GROUP_ICONS[nextGroup];\n\t\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t\t<TabsTrigger\n\t\t\t\t\t\t\t\t\t\t\t\tkey={nextGroup}\n\t\t\t\t\t\t\t\t\t\t\t\tvalue={nextGroup}\n\t\t\t\t\t\t\t\t\t\t\t\tonClick={() => setSearch('')}\n\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"theme-tweaker--group-trigger\"\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t<GroupIcon aria-hidden=\"true\" />\n\t\t\t\t\t\t\t\t\t\t\t\t<Text type=\"inherit\"\n\t\t\t\t\t\t\t\t\t\t\t\t\ttag=\"span\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tsize=\"inherit\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tweight=\"medium\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"min-w-0 flex-1 truncate text-left\"\n\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t{strings.groups[nextGroup]}\n\t\t\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t\t\t</TabsTrigger>\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t\t</TabsList>\n\t\t\t\t\t\t</Tabs>\n\t\t\t\t\t</nav>\n\n\t\t\t\t\t<Stack gap=\"lg\" className=\"theme-tweaker--body theme-tweaker--editor min-h-0 min-w-0\">\n\t\t\t\t\t\t<Stack gap=\"normal\" className=\"theme-tweaker--editor-heading\">\n\t\t\t\t\t\t\t<Stack direction=\"horizontal\" gap=\"sm\" align=\"center\" wrap>\n\t\t\t\t\t\t\t\t<Heading className=\"text-inherit\" tag=\"h3\">{normalizedSearch ? strings.allGroups : strings.groups[group]}</Heading>\n\t\t\t\t\t\t\t\t{!showIntro ? <Badge tone=\"secondary\">{interpolateString(strings.changedCount, { count: overrideCount })}</Badge> : null}\n\t\t\t\t\t\t\t\t{normalizedSearch ? (\n\t\t\t\t\t\t\t\t\t<Badge tone=\"secondary\" role=\"status\" aria-live=\"polite\">\n\t\t\t\t\t\t\t\t\t\t{interpolateString(strings.searchResults, { count: visibleFields.length })}\n\t\t\t\t\t\t\t\t\t</Badge>\n\t\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t\t<Text size=\"xs\" type=\"secondary\">\n\t\t\t\t\t\t\t\t{normalizedSearch ? strings.searchHint : strings.groupDescriptions[group]}\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t{!normalizedSearch ? recipeControls : null}\n\t\t\t\t\t\t{group === 'defaults' && !normalizedSearch ? (\n\t\t\t\t\t\t\t<ThemeProviderSettings config={providerConfig} onChange={commitConfig} strings={strings.providerSettings} />\n\t\t\t\t\t\t) : visibleSections.length > 0 ? (\n\t\t\t\t\t\t\t<SmartAccordion\n\t\t\t\t\t\t\t\tkey={`${group}:${normalizedSearch}`}\n\t\t\t\t\t\t\t\tmultiple\n\t\t\t\t\t\t\t\tdefaultValue={[`${visibleSections[0].group}:${visibleSections[0].section}`]}\n\t\t\t\t\t\t\t\tvariant=\"bordered\"\n\t\t\t\t\t\t\t\ticonStyle=\"none\"\n\t\t\t\t\t\t\t\tclassName=\"theme-tweaker--sections shrink-0\"\n\t\t\t\t\t\t\t\titemClassName=\"theme-tweaker--section\"\n\t\t\t\t\t\t\t\titems={visibleSections.map((visibleSection) => {\n\t\t\t\t\t\t\t\t\tconst scopes = new Set(visibleSection.fields.map((field) => field.scope));\n\t\t\t\t\t\t\t\t\tconst scopeLabel =\n\t\t\t\t\t\t\t\t\t\tscopes.size > 1\n\t\t\t\t\t\t\t\t\t\t\t? strings.mixedScope\n\t\t\t\t\t\t\t\t\t\t\t: scopes.has('shared')\n\t\t\t\t\t\t\t\t\t\t\t\t? strings.sharedScope\n\t\t\t\t\t\t\t\t\t\t\t\t: theme.mode === 'light'\n\t\t\t\t\t\t\t\t\t\t\t\t\t? strings.lightMode\n\t\t\t\t\t\t\t\t\t\t\t\t\t: strings.darkMode;\n\t\t\t\t\t\t\t\t\tconst sectionLabel = normalizedSearch\n\t\t\t\t\t\t\t\t\t\t? interpolateString(strings.groupSectionLabel, {\n\t\t\t\t\t\t\t\t\t\t\t\tgroup: strings.groups[visibleSection.group],\n\t\t\t\t\t\t\t\t\t\t\t\tsection: strings.sections[visibleSection.section],\n\t\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t\t: strings.sections[visibleSection.section];\n\n\t\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\t\tvalue: `${visibleSection.group}:${visibleSection.section}`,\n\t\t\t\t\t\t\t\t\t\ttitle: sectionLabel,\n\t\t\t\t\t\t\t\t\t\tdescription: interpolateString(strings.variableCount, {\n\t\t\t\t\t\t\t\t\t\t\tcount: visibleSection.fields.length,\n\t\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t\t\tbadge: <Badge tone=\"secondary\">{scopeLabel}</Badge>,\n\t\t\t\t\t\t\t\t\t\tcontent: (\n\t\t\t\t\t\t\t\t\t\t\t<Stack gap=\"none\" className=\"theme-tweaker--fields\">\n\t\t\t\t\t\t\t\t\t\t\t\t{visibleSection.fields.map((field) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\tconst bucket = field.scope === 'shared' ? 'shared' : theme.mode;\n\t\t\t\t\t\t\t\t\t\t\t\t\tconst fieldValue = theme[bucket][field.name] ?? '';\n\t\t\t\t\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<ThemeVariableField\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tkey={field.name}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfield={field}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvalue={fieldValue}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\teffectiveValue={effectiveValues[field.name] ?? ''}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tstrings={strings}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tonChange={(next) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tif (field.name === '--primary' && derivePalette && next.trim()) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tapplyModeRecipe(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tderiveAdminUIPalette({\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tprimary: next,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tmode: theme.mode,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcommit(updateThemeVariable(theme, field, next));\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tonReset={() => commit(updateThemeVariable(theme, field, ''))}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<Text type=\"secondary\" className=\"theme-tweaker--empty rounded-radius border border-dashed border-border p-surface\">\n\t\t\t\t\t\t\t\t{strings.emptySearch}\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</Stack>\n\t\t\t\t</Stack>\n\t\t\t</Stack>\n\n\t\t\t{preview !== false ? <Stack className=\"theme-tweaker--preview min-w-0 self-start\">{preview ?? <DefaultThemePreview strings={strings} />}</Stack> : null}\n\n\t\t\t{/*\n\t\t\t * Presented through ActionDialog rather than a raw Dialog:\n\t\t\t * features/overlays is the package's single overlay surface. The two\n\t\t\t * things this dialog needs beyond the defaults are seams on it —\n\t\t\t * `surfaceStyle` carries the edited theme's variables onto the surface\n\t\t\t * so the export previews in the theme being edited, and `footer`\n\t\t\t * replaces the default action pair with reset/close.\n\t\t\t */}\n\t\t\t<ActionDialog\n\t\t\t\t{...exportDialog.overlayProps}\n\t\t\t\ttitle={strings.exportDialogTitle}\n\t\t\t\tdescription={strings.exportDialogDescription}\n\t\t\t\tshowCloseButton={false}\n\t\t\t\tshowCancel={false}\n\t\t\t\tshowConfirm={false}\n\t\t\t\tsurfaceStyle={adminUIThemeToStyle(theme)}\n\t\t\t\tclassName={cn('theme-tweaker--export-dialog sm:max-w-4xl', theme.mode)}\n\t\t\t\tfooter={(\n\t\t\t\t\t<Stack\n\t\t\t\t\t\tdirection=\"horizontal\"\n\t\t\t\t\t\talign=\"center\"\n\t\t\t\t\t\tjustify=\"between\"\n\t\t\t\t\t\tclassName=\"theme-tweaker--export-footer w-full\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\ttone=\"secondary\"\n\t\t\t\t\t\t\tbuttonStyle=\"ghost\"\n\t\t\t\t\t\t\ticon={RotateCcw}\n\t\t\t\t\t\t\tdisabled={overrideCount === 0}\n\t\t\t\t\t\t\tonClick={reset}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{strings.reset}\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t<Button onClick={exportDialog.hide}>{strings.close}</Button>\n\t\t\t\t\t</Stack>\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t<Stack gap=\"xl\" className=\"theme-tweaker--export-body\">\n\t\t\t\t\t<ThemeExportArtifact\n\t\t\t\t\t\ttitle={strings.cssOutputLabel}\n\t\t\t\t\t\tdescription={strings.cssOutputDescription}\n\t\t\t\t\t\tcode={cssText}\n\t\t\t\t\t\tcopyLabel={strings.copy}\n\t\t\t\t\t\tdownloadLabel={exporting ? strings.exportPending : strings.downloadCss}\n\t\t\t\t\t\tdownloading={exporting}\n\t\t\t\t\t\tonCopy={() => void copyText(cssText)}\n\t\t\t\t\t\tonDownload={() => void exportThemeArtifact()}\n\t\t\t\t\t/>\n\t\t\t\t\t<ThemeExportArtifact\n\t\t\t\t\t\ttitle={strings.providerOutputLabel}\n\t\t\t\t\t\tdescription={strings.providerOutputDescription}\n\t\t\t\t\t\tcode={artifact?.providerConfigText ?? ''}\n\t\t\t\t\t\tcopyLabel={strings.copyProvider}\n\t\t\t\t\t\tdownloadLabel={strings.downloadProvider}\n\t\t\t\t\t\tonCopy={() => void copyText(artifact?.providerConfigText ?? '')}\n\t\t\t\t\t\tonDownload={exportProviderConfig}\n\t\t\t\t\t/>\n\t\t\t\t\t{statusMessage ? (\n\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\ttag=\"div\"\n\t\t\t\t\t\t\tsize=\"xs\"\n\t\t\t\t\t\t\ttype={serializationError ? 'error' : 'secondary'}\n\t\t\t\t\t\t\trole=\"status\"\n\t\t\t\t\t\t\taria-live=\"polite\"\n\t\t\t\t\t\t\tclassName=\"theme-tweaker--status\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{statusMessage}\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t) : null}\n\t\t\t\t</Stack>\n\t\t\t</ActionDialog>\n\t\t</div>\n\t);\n\n\tif (target === 'self') {\n\t\treturn (\n\t\t\t<ThemeScope\n\t\t\t\t{...props}\n\t\t\t\tref={selfRef}\n\t\t\t\ttheme={apply ? theme : createAdminUITheme({ mode: theme.mode })}\n\t\t\t\tclassName={cn('theme-tweaker--component @container/theme-tweaker bg-background text-foreground', className)}\n\t\t\t>\n\t\t\t\t{content}\n\t\t\t</ThemeScope>\n\t\t);\n\t}\n\n\treturn (\n\t\t<div {...props} ref={selfRef} className={cn('theme-tweaker--component @container/theme-tweaker', className)}>\n\t\t\t{content}\n\t\t</div>\n\t);\n});\n\nThemeTweaker.displayName = 'ThemeTweaker';\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"theme-tweaker.js","names":["PortalThemeScope","UIProvider","ThemeScope$1","resolveUIConfig","cn","Heading","focusRecipes","Button","Grid","Stack","AlertTitle","Alert","AlertMetadata","AlertDescription","Card","compositionRhythm","useOverlayVisibility","ActionDialog","MonoValue","SmartAccordion","Badge","serializeScopedThemeModes","Input","FormField","Textarea","ToggleField","Select","ColorInput","SliderField","DecimalInput","Item","TabsTrigger","TabsList","Tabs","EmptyState","defaultAdminUIThemeSelectors","VARIABLE_NAME_PATTERN","UNSAFE_CSS_VALUE_PATTERN","UNSAFE_SELECTOR_PATTERN","hasControlCharacter","value","code","character","hasBalancedDelimiters","quote","depth","isUnsafeAdminUIThemeValue","rawValue","isAdminUIThemeColorValue","createAdminUITheme","isAdminUIThemeVariableName","validatedEntries","overrides","entry","name","strict","left","right","validateSelector","selector","scope","serializeBlock","entries","serializeAdminUITheme","selectors","options","shared","light","dark","modeScope","blocks","theme","block","banner","createSerializableUIConfig","resolved","config","_runtimeDateLocale","_runtimeRelativeTimeFormatter","serializableDates","serializeUIProviderConfig","serializable","getActiveAdminUIThemeOverrides","mode","adminUIThemeToStyle","countAdminUIThemeOverrides","createScopedAdminUIThemeSelectors","scopeSelector","createThemeTweakerExportArtifact","resolvedTheme","artifactOptions","providerConfig","downloadAdminUITheme","artifact","downloadAdminUITextFile","blob","text","mimeType","url","anchor","fileName","ThemeScope","forwardRef","props","className","style","resolveTarget","target","selfRef","useAppliedTheme","apply","element","originals","applied","originalLight","originalDark","manageModeClass","expected","original","AdminUIThemeProvider","scopeProps","useRef","forwardedRef","effectiveTheme","useMemo","THEME_COLORS","STATE_COLORS","SURFACE_COLORS","FONT_VARIABLES","TYPOGRAPHY_VARIABLES","step","SHADOW_VARIABLES","STRUCTURAL_VARIABLES","LAYOUT_VARIABLES","DESCRIPTIONS","LABELS","RANGE_CONTROLS","labelFromName","part","genericDescription","group","fields","names","defaultThemeTweakerFields","field","defaultThemeProviderSettingsStrings","selectOptions","values","strings","isUsableLocale","isUsableCurrency","ValidatedSetting","draft","setDraft","useState","error","next","normalize","event","isValid","onCommit","toCurrencyCode","raw","ThemeProviderSettings","scaleOptions","COMPONENT_SCALES","weekdays","day","invalidLocale","invalidCurrency","update","slice","key","Text","Info","AlertMetadataItem","SEMANTIC_TONES","defaultThemeTweakerStrings","clamp","max","min","contrastForeground","digits","color","hex","offset","channel","sum","index","match","lightness","deriveAdminUIPalette","harmonize","night","primary","BODY_STEPS","HEADING_STEPS","deriveAdminUITypeScale","boundedBase","baseSize","boundedRatio","ratio","factor","pixels","deriveAdminUIElevation","intensity","alpha","GROUPS","GROUP_ICONS","Palette","ShieldCheck","Type","Shapes","LayoutGrid","Settings2","DEFAULT_BASE_TYPE_SIZE","DEFAULT_TYPE_RATIO","DEFAULT_ELEVATION_INTENSITY","RESOLVE_DELAY_MS","ThemeExportArtifact","titleId","useId","title","description","Copy","onCopy","copyLabel","Download","downloading","onDownload","downloadLabel","themeValueError","parseRangeValue","parsed","control","serializeRangeValue","precision","resolveInspectionTarget","self","captureResolvedTheme","parent","host","capture","probe","computed","sharedNames","ThemeVariableField","id","errorId","invalid","describedBy","resetAction","RotateCcw","onReset","placeholder","effectiveValue","interpolateString","onChange","currentValue","DefaultThemePreview","CheckCircle2","updateThemeVariable","bucket","nextBucket","ThemeTweaker","stringsProp","useStrings","internalTheme","setInternalTheme","defaultValue","internalConfig","setInternalConfig","defaultConfig","setGroup","search","setSearch","derivePalette","setDerivePalette","baseTypeSize","setBaseTypeSize","typeRatio","setTypeRatio","elevationIntensity","setElevationIntensity","actionStatus","setActionStatus","exportDialog","exporting","setExporting","blockedStatusId","useImperativeHandle","setResolvedTheme","effectiveValues","setEffectiveValues","timeout","inspectionTarget","serializationError","exportTheme","providerFileName","cssText","hasInvalidOverride","exportBlocked","overrideCount","normalizedSearch","visibleFields","visibleSections","sections","existing","b","a","commit","onValueChange","commitConfig","onConfigChange","applyModeRecipe","applySharedRecipe","setMode","onModeChange","exportThemeArtifact","onExport","onError","copyText","exportProviderConfig","reset","previous","statusFailed","statusMessage","recipeControls","content","preview","showIntro","Sun","Moon","actionsSlot","Search","nextGroup","GroupIcon","scopes","visibleSection","scopeLabel","sectionLabel","fieldValue"],"sources":["../../src/components/features/theme-tweaker/theme-tweaker.utils.ts","../../src/components/features/theme-tweaker/theme-scope.tsx","../../src/components/features/theme-tweaker/use-applied-theme.ts","../../src/components/features/theme-tweaker/admin-ui-theme-provider.tsx","../../src/components/features/theme-tweaker/theme-tweaker.fields.ts","../../src/components/features/theme-tweaker/theme-provider-settings.tsx","../../src/components/features/theme-tweaker/theme-tweaker.strings.ts","../../src/components/features/theme-tweaker/theme-tweaker.recipes.ts","../../src/components/features/theme-tweaker/theme-tweaker.tsx"],"sourcesContent":["import {\n\ttype UIConfig,\n} from '../../../lib/ui-provider';\nimport { resolveUIConfig } from '../../../lib/ui-provider/store';\nimport { serializeScopedThemeModes } from '../../../lib/theme-mode-css';\n\nimport type {\n\tAdminUIThemeDefinition,\n\tAdminUIThemeMode,\n\tAdminUIThemeOverrides,\n\tAdminUIThemeSelectors,\n\tAdminUIThemeStyle,\n\tAdminUIThemeVariableName,\n\tCreateThemeTweakerExportArtifactOptions,\n\tSerializeAdminUIThemeOptions,\n\tThemeTweakerExportArtifact,\n} from './theme-tweaker.types';\n\nexport const defaultAdminUIThemeSelectors: AdminUIThemeSelectors = {\n\tshared: ':root',\n\tlight: ':root,\\n.light',\n\tdark: '.dark',\n};\n\nconst VARIABLE_NAME_PATTERN = /^--[a-z][a-z0-9-]*$/i;\n// A value must stay inside its own declaration: no terminators or blocks, no\n// markup, no comment markers and no escapes that could spell any of them.\nconst UNSAFE_CSS_VALUE_PATTERN = /[;{}<\\\\]|\\/\\*|\\*\\//;\n// Selectors keep backslash escapes (`.sm\\:grid`) but nothing that leaves the rule.\nconst UNSAFE_SELECTOR_PATTERN = /[;{}<]|\\/\\*|\\*\\//;\n\nfunction hasControlCharacter(value: string): boolean {\n\treturn [...value].some((character) => {\n\t\tconst code = character.charCodeAt(0);\n\t\treturn code < 32 || code === 127;\n\t});\n}\n\n/** An open quote or bracket would swallow the declarations that follow it. */\nfunction hasBalancedDelimiters(value: string): boolean {\n\tlet quote: string | null = null;\n\tlet depth = 0;\n\tfor (const character of value) {\n\t\tif (quote) {\n\t\t\tif (character === quote) quote = null;\n\t\t} else if (character === '\"' || character === \"'\") {\n\t\t\tquote = character;\n\t\t} else if (character === '(') {\n\t\t\tdepth += 1;\n\t\t} else if (character === ')') {\n\t\t\tdepth -= 1;\n\t\t\tif (depth < 0) return false;\n\t\t}\n\t}\n\treturn quote === null && depth === 0;\n}\n\n/**\n * Whether a value could break out of its `--name: value;` declaration. This is\n * the check `serializeAdminUITheme` enforces; the editor uses it to mark the\n * field that holds the value.\n */\nexport function isUnsafeAdminUIThemeValue(rawValue: string): boolean {\n\tconst value = rawValue.trim();\n\treturn UNSAFE_CSS_VALUE_PATTERN.test(value) || hasControlCharacter(value) || !hasBalancedDelimiters(value);\n}\n\n/**\n * Whether the browser parses a value as a color. `var()` references count,\n * and so does every value where the browser cannot be asked.\n */\nexport function isAdminUIThemeColorValue(rawValue: string): boolean {\n\tconst value = rawValue.trim();\n\tif (value.length === 0 || typeof CSS === 'undefined' || typeof CSS.supports !== 'function') return true;\n\treturn CSS.supports('color', value);\n}\n\nexport function createAdminUITheme(\n\tvalue: Partial<AdminUIThemeDefinition> = {},\n): AdminUIThemeDefinition {\n\treturn {\n\t\tmode: value.mode ?? 'light',\n\t\tshared: { ...value.shared },\n\t\tlight: { ...value.light },\n\t\tdark: { ...value.dark },\n\t};\n}\n\nexport function isAdminUIThemeVariableName(\n\tvalue: string,\n): value is AdminUIThemeVariableName {\n\treturn VARIABLE_NAME_PATTERN.test(value);\n}\n\nfunction validatedEntries(\n\toverrides: AdminUIThemeOverrides,\n\tstrict = true,\n): Array<[AdminUIThemeVariableName, string]> {\n\treturn Object.entries(overrides)\n\t\t.filter((entry): entry is [AdminUIThemeVariableName, string] => (\n\t\t\ttypeof entry[1] === 'string' && entry[1].trim().length > 0\n\t\t))\n\t\t.flatMap(([name, rawValue]) => {\n\t\t\tif (!isAdminUIThemeVariableName(name)) {\n\t\t\t\tif (!strict) return [];\n\t\t\t\tthrow new TypeError(`Invalid CSS variable name: ${name}`);\n\t\t\t}\n\t\t\tconst value = rawValue.trim();\n\t\t\tif (isUnsafeAdminUIThemeValue(value)) {\n\t\t\t\tif (!strict) return [];\n\t\t\t\tthrow new TypeError(`Unsafe CSS value for ${name}.`);\n\t\t\t}\n\t\t\treturn [[name, value] as [AdminUIThemeVariableName, string]];\n\t\t})\n\t\t.sort(([left], [right]) => left.localeCompare(right));\n}\n\nfunction validateSelector(selector: string, scope: keyof AdminUIThemeSelectors): string {\n\tconst value = selector.trim();\n\tif (value.length === 0 || UNSAFE_SELECTOR_PATTERN.test(value)) {\n\t\tthrow new TypeError(`Invalid ${scope} theme selector.`);\n\t}\n\treturn value;\n}\n\nfunction serializeBlock(\n\tselector: string,\n\toverrides: AdminUIThemeOverrides,\n): string | null {\n\tconst entries = validatedEntries(overrides);\n\tif (entries.length === 0) return null;\n\treturn [\n\t\t`${selector} {`,\n\t\t...entries.map(([name, value]) => `\\t${name}: ${value};`),\n\t\t'}',\n\t].join('\\n');\n}\n\n/**\n * Serializes theme overrides as CSS text. Values and selectors that could leave\n * their declaration or rule throw, so validate tenant input at this boundary.\n * The text is safe as a stylesheet file or through `textContent`; never insert\n * it with `innerHTML` or `dangerouslySetInnerHTML`.\n */\nexport function serializeAdminUITheme(\n\ttheme: AdminUIThemeDefinition,\n\toptions: SerializeAdminUIThemeOptions = {},\n): string {\n\tconst selectors = options.selectors ?? defaultAdminUIThemeSelectors;\n\tconst shared = validateSelector(selectors.shared, 'shared');\n\tconst light = validateSelector(selectors.light, 'light');\n\tconst dark = validateSelector(selectors.dark, 'dark');\n\tconst modeScope = selectors.modeScope === undefined ? undefined : validateSelector(selectors.modeScope, 'modeScope');\n\tconst blocks = [\n\t\tserializeBlock(shared, theme.shared),\n\t\t...(modeScope === undefined ? [serializeBlock(light, theme.light), serializeBlock(dark, theme.dark)] : [serializeScopedThemeModes(modeScope, {\n\t\t\tlight: validatedEntries(theme.light).map(([name, value]) => `${name}: ${value};`),\n\t\t\tdark: validatedEntries(theme.dark).map(([name, value]) => `${name}: ${value};`),\n\t\t})]),\n\t].filter((block): block is string => block !== null && block.length > 0);\n\tconst banner = options.banner === false\n\t\t? null\n\t\t: `/* ${options.banner ?? 'themelia-react-ui theme overrides'} */`;\n\n\treturn `${[\n\t\t...(banner ? [banner] : []),\n\t\t...(blocks.length > 0 ? blocks : ['/* No explicit overrides. */']),\n\t].join('\\n\\n')}\\n`;\n}\n\n/**\n * Returns the complete serializable UIProvider contract. Function and\n * date-fns-locale hooks remain consumer-owned and are intentionally omitted.\n */\nexport function createSerializableUIConfig(config: UIConfig = {}): UIConfig {\n\tconst resolved = resolveUIConfig(config);\n\tconst {\n\t\tlocale: _runtimeDateLocale,\n\t\tformatRelativeTime: _runtimeRelativeTimeFormatter,\n\t\t...serializableDates\n\t} = resolved.dates;\n\n\treturn {\n\t\t...resolved,\n\t\tdates: serializableDates,\n\t};\n}\n\nexport function serializeUIProviderConfig(config: UIConfig = {}): string {\n\tconst serializable = createSerializableUIConfig(config);\n\treturn `import type { UIConfig } from 'themelia-react-ui/ui-provider';\\n\\nexport const adminUIConfig = ${JSON.stringify(serializable, null, '\\t')} satisfies UIConfig;\\n`;\n}\n\nexport function getActiveAdminUIThemeOverrides(\n\ttheme: AdminUIThemeDefinition,\n\tmode: AdminUIThemeMode = theme.mode,\n): AdminUIThemeOverrides {\n\treturn {\n\t\t...theme.shared,\n\t\t...theme[mode],\n\t};\n}\n\nexport function adminUIThemeToStyle(\n\ttheme: AdminUIThemeDefinition,\n\tmode: AdminUIThemeMode = theme.mode,\n): AdminUIThemeStyle {\n\treturn Object.fromEntries(\n\t\tvalidatedEntries(getActiveAdminUIThemeOverrides(theme, mode), false),\n\t) as AdminUIThemeStyle;\n}\n\nexport function countAdminUIThemeOverrides(theme: AdminUIThemeDefinition): number {\n\treturn validatedEntries(theme.shared, false).length\n\t\t+ validatedEntries(theme.light, false).length\n\t\t+ validatedEntries(theme.dark, false).length;\n}\n\nexport function createScopedAdminUIThemeSelectors(\n\tscopeSelector: string,\n): AdminUIThemeSelectors {\n\tconst scope = validateSelector(scopeSelector, 'shared');\n\treturn {\n\t\tshared: scope,\n\t\tlight: `${scope},\\n${scope}.light,\\n.light ${scope}`,\n\t\tdark: `${scope}.dark,\\n.dark ${scope}`,\n\t\tmodeScope: scope,\n\t};\n}\n\nexport function createThemeTweakerExportArtifact(\n\ttheme: AdminUIThemeDefinition,\n\tfileName = 'admin-ui-theme.css',\n\toptions: SerializeAdminUIThemeOptions = {},\n\tartifactOptions: CreateThemeTweakerExportArtifactOptions = {},\n): ThemeTweakerExportArtifact {\n\tconst resolvedTheme = createAdminUITheme(artifactOptions.resolvedTheme ?? theme);\n\tconst providerConfig = createSerializableUIConfig(artifactOptions.providerConfig);\n\treturn {\n\t\tfileName,\n\t\tcssText: serializeAdminUITheme(resolvedTheme, {\n\t\t\t...options,\n\t\t\tbanner: options.banner ?? 'themelia-react-ui complete theme',\n\t\t}),\n\t\toverrideCssText: serializeAdminUITheme(theme, options),\n\t\ttheme: createAdminUITheme(theme),\n\t\tresolvedTheme,\n\t\toverrideCount: countAdminUIThemeOverrides(theme),\n\t\tproviderFileName: artifactOptions.providerFileName ?? 'admin-ui.config.ts',\n\t\tproviderConfig,\n\t\tproviderConfigText: serializeUIProviderConfig(providerConfig),\n\t};\n}\n\nexport function downloadAdminUITheme(\n\tartifact: Pick<ThemeTweakerExportArtifact, 'cssText' | 'fileName'>,\n): void {\n\tdownloadAdminUITextFile({\n\t\tfileName: artifact.fileName,\n\t\ttext: artifact.cssText,\n\t\tmimeType: 'text/css;charset=utf-8',\n\t});\n}\n\nexport function downloadAdminUITextFile({\n\tfileName,\n\ttext,\n\tmimeType = 'text/plain;charset=utf-8',\n}: {\n\tfileName: string;\n\ttext: string;\n\tmimeType?: string;\n}): void {\n\tif (typeof document === 'undefined' || typeof URL === 'undefined') {\n\t\tthrow new Error('File download requires a browser document. Provide onExport in non-browser environments.');\n\t}\n\tconst blob = new Blob([text], { type: mimeType });\n\tconst url = URL.createObjectURL(blob);\n\tconst anchor = document.createElement('a');\n\tanchor.href = url;\n\tanchor.download = fileName;\n\tanchor.hidden = true;\n\tdocument.body.append(anchor);\n\tanchor.click();\n\tanchor.remove();\n\tURL.revokeObjectURL(url);\n}\n","import { forwardRef } from 'react';\n\nimport { cn } from '../../../lib/utils';\nimport { ThemeScope as PortalThemeScope } from '../../../lib/theme-scope';\n\nimport type { ThemeScopeProps } from './theme-tweaker.types';\nimport { adminUIThemeToStyle } from './theme-tweaker.utils';\n\n/**\n * One-DOM-node CSS-variable boundary with a shared portal host. Visual values\n * inherit through CSS; the portal context only identifies that host. UIProvider\n * owns display defaults such as locale, currency, and component sizing policy.\n */\nexport const ThemeScope = forwardRef<HTMLDivElement, ThemeScopeProps>(function ThemeScope({\n\ttheme,\n\tmode = theme.mode,\n\tclassName,\n\tstyle,\n\tchildren,\n\t...props\n}, ref) {\n\treturn (\n\t\t<PortalThemeScope\n\t\t\t{...props}\n\t\t\tref={ref}\n\t\t\tdata-theme-mode={mode}\n\t\t\tclassName={cn('theme-scope--component', mode, className)}\n\t\t\tstyle={{\n\t\t\t\t...adminUIThemeToStyle(theme, mode),\n\t\t\t\t...style,\n\t\t\t}}\n\t\t>\n\t\t\t{children}\n\t\t</PortalThemeScope>\n\t);\n});\n\nThemeScope.displayName = 'ThemeScope';\n","import { useEffect, type RefObject } from 'react';\n\nimport type {\n\tAdminUIThemeDefinition,\n\tThemeTweakerTarget,\n} from './theme-tweaker.types';\nimport { adminUIThemeToStyle } from './theme-tweaker.utils';\n\ninterface UseAppliedThemeOptions {\n\tapply: boolean;\n\tmanageModeClass: boolean;\n\tselfRef: RefObject<HTMLDivElement | null>;\n\ttarget: ThemeTweakerTarget;\n\ttheme: AdminUIThemeDefinition;\n}\n\nfunction resolveTarget(\n\ttarget: ThemeTweakerTarget,\n\tselfRef: RefObject<HTMLDivElement | null>,\n): HTMLElement | null {\n\tif (target === null) return null;\n\tif (target === 'self') return selfRef.current;\n\tif (target === 'document') {\n\t\treturn typeof document === 'undefined' ? null : document.documentElement;\n\t}\n\tif (typeof target === 'function') return target();\n\treturn target;\n}\n\nexport function useAppliedTheme({\n\tapply,\n\tmanageModeClass,\n\tselfRef,\n\ttarget,\n\ttheme,\n}: UseAppliedThemeOptions): void {\n\tuseEffect(() => {\n\t\tif (!apply || target === 'self') return;\n\t\tconst element = resolveTarget(target, selfRef);\n\t\tif (!element) return;\n\n\t\tconst style = adminUIThemeToStyle(theme);\n\t\tconst originals = new Map<string, { value: string; priority: string }>();\n\t\tconst applied = new Map<string, string>();\n\t\tfor (const [name, value] of Object.entries(style)) {\n\t\t\tif (typeof value !== 'string') continue;\n\t\t\toriginals.set(name, {\n\t\t\t\tvalue: element.style.getPropertyValue(name),\n\t\t\t\tpriority: element.style.getPropertyPriority(name),\n\t\t\t});\n\t\t\telement.style.setProperty(name, value);\n\t\t\tapplied.set(name, value);\n\t\t}\n\n\t\tconst originalLight = element.classList.contains('light');\n\t\tconst originalDark = element.classList.contains('dark');\n\t\tif (manageModeClass) {\n\t\t\telement.classList.toggle('light', theme.mode === 'light');\n\t\t\telement.classList.toggle('dark', theme.mode === 'dark');\n\t\t}\n\n\t\treturn () => {\n\t\t\tfor (const [name, expected] of applied) {\n\t\t\t\tif (element.style.getPropertyValue(name) !== expected) continue;\n\t\t\t\tconst original = originals.get(name);\n\t\t\t\tif (original?.value) {\n\t\t\t\t\telement.style.setProperty(name, original.value, original.priority);\n\t\t\t\t} else {\n\t\t\t\t\telement.style.removeProperty(name);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (manageModeClass) {\n\t\t\t\telement.classList.toggle('light', originalLight);\n\t\t\t\telement.classList.toggle('dark', originalDark);\n\t\t\t}\n\t\t};\n\t}, [apply, manageModeClass, selfRef, target, theme]);\n}\n","import { forwardRef, useImperativeHandle, useMemo, useRef } from 'react';\n\nimport { UIProvider } from '../../../lib/ui-provider';\nimport { cn } from '../../../lib/utils';\n\nimport { ThemeScope } from './theme-scope';\nimport type { AdminUIThemeProviderProps } from './theme-tweaker.types';\nimport { createAdminUITheme } from './theme-tweaker.utils';\nimport { useAppliedTheme } from './use-applied-theme';\n\n/**\n * Root consumer boundary combining mount-once UI display defaults with a\n * live CSS-variable theme and the shared scoped-portal host.\n */\nexport const AdminUIThemeProvider = forwardRef<HTMLDivElement, AdminUIThemeProviderProps>(\n\tfunction AdminUIThemeProvider({\n\t\tconfig,\n\t\ttheme,\n\t\tmode = theme.mode,\n\t\ttarget = 'document',\n\t\tmanageModeClass = true,\n\t\tclassName,\n\t\tchildren,\n\t\t...scopeProps\n\t}, forwardedRef) {\n\t\tconst selfRef = useRef<HTMLDivElement>(null);\n\t\tuseImperativeHandle(forwardedRef, () => selfRef.current as HTMLDivElement);\n\t\tconst effectiveTheme = useMemo(\n\t\t\t() => createAdminUITheme({ ...theme, mode }),\n\t\t\t[mode, theme],\n\t\t);\n\t\tuseAppliedTheme({\n\t\t\tapply: target === 'document',\n\t\t\tmanageModeClass,\n\t\t\tselfRef,\n\t\t\ttarget,\n\t\t\ttheme: effectiveTheme,\n\t\t});\n\n\t\treturn (\n\t\t\t<UIProvider config={config}>\n\t\t\t\t<ThemeScope\n\t\t\t\t\t{...scopeProps}\n\t\t\t\t\tref={selfRef}\n\t\t\t\t\ttheme={effectiveTheme}\n\t\t\t\t\tmode={mode}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t'admin-ui-theme-provider--component bg-background text-foreground',\n\t\t\t\t\t\tclassName,\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t{children}\n\t\t\t\t</ThemeScope>\n\t\t\t</UIProvider>\n\t\t);\n\t},\n);\n\nAdminUIThemeProvider.displayName = 'AdminUIThemeProvider';\n","import type {\n\tAdminUIThemeVariableName,\n\tThemeTweakerField,\n\tThemeTweakerFieldKind,\n\tThemeTweakerFieldScope,\n\tThemeTweakerGroup,\n\tThemeTweakerRangeControl,\n\tThemeTweakerSection,\n} from './theme-tweaker.types';\n\nconst THEME_COLORS = [\n\t'--background',\n\t'--foreground',\n\t'--card',\n\t'--card-foreground',\n\t'--popover',\n\t'--popover-foreground',\n\t'--primary',\n\t'--primary-foreground',\n\t'--secondary',\n\t'--secondary-foreground',\n\t'--muted',\n\t'--muted-foreground',\n\t'--accent',\n\t'--accent-foreground',\n\t'--destructive',\n\t'--destructive-foreground',\n\t'--border',\n\t'--input',\n\t'--ring',\n\t'--chart-1',\n\t'--chart-2',\n\t'--chart-3',\n\t'--chart-4',\n\t'--chart-5',\n\t'--chart-6',\n\t'--chart-7',\n\t'--chart-8',\n\t'--sidebar',\n\t'--sidebar-foreground',\n\t'--sidebar-primary',\n\t'--sidebar-primary-foreground',\n\t'--sidebar-accent',\n\t'--sidebar-accent-foreground',\n\t'--sidebar-border',\n\t'--sidebar-ring',\n] as const satisfies readonly AdminUIThemeVariableName[];\n\nconst STATE_COLORS = [\n\t'--success',\n\t'--success-foreground',\n\t'--info',\n\t'--info-foreground',\n\t'--warning',\n\t'--warning-foreground',\n\t'--warning-accent',\n\t'--link-color',\n\t'--primary-accent',\n\t'--inverse-background',\n\t'--inverse-foreground',\n\t'--inverse-muted',\n\t'--inverse-subtle',\n\t'--inverse-disabled',\n\t'--inverse-surface',\n\t'--inverse-surface-strong',\n\t'--inverse-border',\n\t'--inverse-decoration',\n] as const satisfies readonly AdminUIThemeVariableName[];\n\n/**\n * Package-owned surface colors. Kept apart from `THEME_COLORS` because that\n * array is consumed by index-based slices, so appending to it would silently\n * reshuffle the colour sections.\n */\nconst SURFACE_COLORS = [\n\t'--overlay-backdrop',\n] as const satisfies readonly AdminUIThemeVariableName[];\n\nconst FONT_VARIABLES = [\n\t'--font-heading',\n\t'--font-sans',\n\t'--font-serif',\n\t'--font-mono',\n] as const satisfies readonly AdminUIThemeVariableName[];\n\nconst TEXT_STEPS = [\n\t'xxs',\n\t'xs',\n\t'pxs',\n\t'sm',\n\t'base',\n\t'lg',\n\t'xl',\n\t'2xl',\n\t'3xl',\n\t'4xl',\n\t'5xl',\n\t'6xl',\n\t'7xl',\n\t'8xl',\n\t'9xl',\n] as const;\n\nconst TYPOGRAPHY_VARIABLES = TEXT_STEPS.flatMap((step) => [\n\t`--text-${step}` as AdminUIThemeVariableName,\n\t`--text-${step}--line-height` as AdminUIThemeVariableName,\n]);\n\nconst SHADOW_VARIABLES = [\n\t'--shadow-2xs',\n\t'--shadow-xs',\n\t'--shadow-sm',\n\t'--shadow',\n\t'--shadow-md',\n\t'--shadow-lg',\n\t'--shadow-xl',\n\t'--shadow-2xl',\n] as const satisfies readonly AdminUIThemeVariableName[];\n\nconst STRUCTURAL_VARIABLES = [\n\t'--space-scale',\n\t'--density-scale',\n\t'--height-action',\n\t'--height-control',\n\t'--control-x',\n\t'--row-x',\n\t'--row-y',\n\t'--surface-x',\n\t'--surface-y',\n\t'--icon',\n\t'--avatar',\n\t'--shell-header-height',\n\t'--shell-sidebar-width',\n] as const satisfies readonly AdminUIThemeVariableName[];\n\nconst LAYOUT_VARIABLES = [\n\t'--content-width-sm',\n\t'--content-width-md',\n\t'--content-width-lg',\n\t'--content-width-xl',\n\t'--content-width-2xl',\n\t'--adaptive-grid-min-sm',\n\t'--adaptive-grid-min-md',\n\t'--adaptive-grid-min-lg',\n] as const satisfies readonly AdminUIThemeVariableName[];\n\nconst DESCRIPTIONS: Partial<Record<AdminUIThemeVariableName, string>> = {\n\t'--background': 'Application canvas and default page background.',\n\t'--foreground': 'Primary text and icon color on the application canvas.',\n\t'--primary': 'Brand and primary-action color.',\n\t'--primary-foreground': 'Text and icons on solid primary fills.',\n\t'--muted': 'Subdued backgrounds for passive regions and tracks.',\n\t'--muted-foreground': 'Secondary text, metadata, and passive icons.',\n\t'--border': 'Default divider, outline, and surface-border color.',\n\t'--ring': 'Focus-visible ring and outline color.',\n\t'--link-color': 'Inline link and copyable-value accent color.',\n\t'--overlay-backdrop': 'Scrim painted behind dialog, alert dialog, sheet, and drawer surfaces.',\n\t'--primary-accent': 'Brand color used as foreground for icons, spinners, and active marks.',\n\t'--warning-accent': 'Warning color used as foreground for icons and marks on tinted warning surfaces.',\n\t'--radius': 'Outer surface radius; controls and collection rows derive a bounded inner curve from this same root.',\n\t'--space-scale': 'Multiplies structural gaps and padding without changing control heights.',\n\t'--density-scale': 'Multiplies actions, controls, rows, and density-sensitive geometry.',\n\t'--height-action': 'Base height for buttons and clickable action triggers.',\n\t'--height-control': 'Base height for inputs, selects, and editable controls.',\n\t'--control-x': 'Default inline inset for actions and form controls.',\n\t'--row-x': 'Shared inline inset for collection, menu, command, and table rows.',\n\t'--row-y': 'Shared vertical inset for collection, menu, command, and table rows.',\n\t'--surface-x': 'Default inline inset for cards, dialogs, panels, and content surfaces.',\n\t'--gap-normal': 'Title/description gap for normal surfaces; multiplied once by spacing scale.',\n\t'--gap-dense': 'Title/supporting-copy gap for dense rows and menus; multiplied once by spacing scale.',\n\t'--surface-y': 'Default vertical inset for cards, dialogs, panels, and content surfaces.',\n\t'--icon': 'Default interface icon size.',\n\t'--avatar': 'Default avatar size used by ordinary rows and cards.',\n\t'--shell-header-height': 'Minimum application-header shell height.',\n\t'--shell-sidebar-width': 'Expanded application-sidebar width.',\n\t'--content-width-sm': 'Compact centered content measure used by Container.',\n\t'--content-width-md': 'Medium centered content measure used by Container.',\n\t'--content-width-lg': 'Default readable page measure used by Container.',\n\t'--content-width-xl': 'Wide application content measure used by Container.',\n\t'--content-width-2xl': 'Maximum standard application measure used by Container.',\n\t'--adaptive-grid-min-sm': 'Compact minimum peer width used by AdaptiveGrid.',\n\t'--adaptive-grid-min-md': 'Default minimum peer width used by AdaptiveGrid.',\n\t'--adaptive-grid-min-lg': 'Spacious minimum peer width used by AdaptiveGrid.',\n};\n\nconst LABELS: Partial<Record<AdminUIThemeVariableName, string>> = {\n\t'--space-scale': 'Spacing scale',\n\t'--density-scale': 'Density scale',\n\t'--height-action': 'Action height',\n\t'--height-control': 'Control height',\n\t'--control-x': 'Control horizontal padding',\n\t'--row-x': 'Row horizontal padding',\n\t'--row-y': 'Row vertical padding',\n\t'--surface-x': 'Surface horizontal padding',\n\t'--surface-y': 'Surface vertical padding',\n\t'--gap-normal': 'Normal copy gap',\n\t'--gap-dense': 'Dense copy gap',\n\t'--icon': 'Interface icon size',\n\t'--avatar': 'Default avatar size',\n\t'--shell-header-height': 'Header height',\n\t'--shell-sidebar-width': 'Sidebar width',\n\t'--content-width-sm': 'Small content width',\n\t'--content-width-md': 'Medium content width',\n\t'--content-width-lg': 'Large content width',\n\t'--content-width-xl': 'Extra-large content width',\n\t'--content-width-2xl': 'Maximum content width',\n\t'--adaptive-grid-min-sm': 'Compact adaptive column',\n\t'--adaptive-grid-min-md': 'Default adaptive column',\n\t'--adaptive-grid-min-lg': 'Spacious adaptive column',\n};\n\nconst RANGE_CONTROLS: Partial<\n\tRecord<AdminUIThemeVariableName, ThemeTweakerRangeControl>\n> = {\n\t'--radius': { type: 'range', min: 0, max: 1.5, step: 0.0625, unit: 'rem', decimalPlaces: 4 },\n\t'--space-scale': { type: 'range', min: 0.75, max: 1.35, step: 0.025, decimalPlaces: 3 },\n\t'--density-scale': { type: 'range', min: 0.75, max: 1.35, step: 0.025, decimalPlaces: 3 },\n\t'--height-action': { type: 'range', min: 1.5, max: 3.5, step: 0.0625, unit: 'rem', decimalPlaces: 4 },\n\t'--height-control': { type: 'range', min: 1.5, max: 3.5, step: 0.0625, unit: 'rem', decimalPlaces: 4 },\n\t'--control-x': { type: 'range', min: 0.25, max: 1.5, step: 0.0625, unit: 'rem', decimalPlaces: 4 },\n\t'--row-x': { type: 'range', min: 0.25, max: 1.5, step: 0.0625, unit: 'rem', decimalPlaces: 4 },\n\t'--row-y': { type: 'range', min: 0.25, max: 1.25, step: 0.0625, unit: 'rem', decimalPlaces: 4 },\n\t'--surface-x': { type: 'range', min: 0.5, max: 2.5, step: 0.0625, unit: 'rem', decimalPlaces: 4 },\n\t'--gap-normal': { type: 'range', min: 0, max: 1.5, step: 0.0625, unit: 'rem', decimalPlaces: 4 },\n\t'--gap-dense': { type: 'range', min: 0, max: 1.5, step: 0.0625, unit: 'rem', decimalPlaces: 4 },\n\t'--surface-y': { type: 'range', min: 0.5, max: 2.5, step: 0.0625, unit: 'rem', decimalPlaces: 4 },\n\t'--icon': { type: 'range', min: 0.75, max: 2, step: 0.0625, unit: 'rem', decimalPlaces: 4 },\n\t'--avatar': { type: 'range', min: 1.5, max: 4, step: 0.125, unit: 'rem', decimalPlaces: 3 },\n\t'--shell-header-height': { type: 'range', min: 3, max: 7, step: 0.125, unit: 'rem', decimalPlaces: 3 },\n\t'--shell-sidebar-width': { type: 'range', min: 12, max: 24, step: 0.25, unit: 'rem', decimalPlaces: 2 },\n\t'--content-width-sm': { type: 'range', min: 20, max: 72, step: 1, unit: 'rem', decimalPlaces: 0 },\n\t'--content-width-md': { type: 'range', min: 24, max: 80, step: 1, unit: 'rem', decimalPlaces: 0 },\n\t'--content-width-lg': { type: 'range', min: 32, max: 96, step: 1, unit: 'rem', decimalPlaces: 0 },\n\t'--content-width-xl': { type: 'range', min: 40, max: 108, step: 1, unit: 'rem', decimalPlaces: 0 },\n\t'--content-width-2xl': { type: 'range', min: 48, max: 120, step: 1, unit: 'rem', decimalPlaces: 0 },\n\t'--adaptive-grid-min-sm': { type: 'range', min: 8, max: 24, step: 0.5, unit: 'rem', decimalPlaces: 1 },\n\t'--adaptive-grid-min-md': { type: 'range', min: 8, max: 32, step: 0.5, unit: 'rem', decimalPlaces: 1 },\n\t'--adaptive-grid-min-lg': { type: 'range', min: 12, max: 40, step: 0.5, unit: 'rem', decimalPlaces: 1 },\n};\n\nfunction labelFromName(name: AdminUIThemeVariableName): string {\n\treturn name\n\t\t.replace(/^--/, '')\n\t\t.replace(/--/g, ' · ')\n\t\t.split('-')\n\t\t.map((part) => part.length <= 3 ? part.toUpperCase() : `${part[0].toUpperCase()}${part.slice(1)}`)\n\t\t.join(' ');\n}\n\nfunction genericDescription(\n\tname: AdminUIThemeVariableName,\n\tgroup: ThemeTweakerGroup,\n): string {\n\tif (name.startsWith('--chart-')) return 'Categorical chart-series color; keep status meaning separate.';\n\tif (name.startsWith('--sidebar-')) return 'Sidebar-specific theme color.';\n\tif (name.startsWith('--inverse-')) return 'Explicitly inverse surface and content color.';\n\tif (name.endsWith('-foreground')) return 'Foreground color paired with the matching solid or surface token.';\n\tif (name.endsWith('--line-height')) return 'Line height paired with the matching typography step.';\n\tif (name.startsWith('--text-')) return 'Font size for the matching typography step.';\n\tif (name.startsWith('--font-')) return 'Font family stack for the matching content role.';\n\tif (name.startsWith('--shadow')) return 'Elevation shadow used by package surfaces and overlays.';\n\tif (group === 'states') return 'Semantic state color shared by package status surfaces.';\n\treturn 'Public theme variable used across package components.';\n}\n\nfunction fields(\n\tnames: readonly AdminUIThemeVariableName[],\n\tgroup: ThemeTweakerGroup,\n\tsection: ThemeTweakerSection,\n\tscope: ThemeTweakerFieldScope,\n\tkind: ThemeTweakerFieldKind,\n): ThemeTweakerField[] {\n\treturn names.map((name) => ({\n\t\tname,\n\t\tlabel: LABELS[name] ?? labelFromName(name),\n\t\tdescription: DESCRIPTIONS[name] ?? genericDescription(name, group),\n\t\tgroup,\n\t\tsection,\n\t\tscope,\n\t\tkind,\n\t\tcontrol: RANGE_CONTROLS[name],\n\t}));\n}\n\n/**\n * Exhaustive editable surface: every shadcn runtime theme variable plus every\n * canonical package-owned root token. Internal and generated utility variables\n * are deliberately absent.\n */\nexport const defaultThemeTweakerFields: readonly ThemeTweakerField[] = [\n\t...fields(THEME_COLORS.slice(0, 6), 'colors', 'surfaces-content', 'mode', 'color'),\n\t...fields(SURFACE_COLORS, 'colors', 'surfaces-content', 'shared', 'color'),\n\t...fields(THEME_COLORS.slice(6, 19), 'colors', 'brand-actions', 'mode', 'color'),\n\t...fields(THEME_COLORS.slice(19, 27), 'colors', 'charts', 'mode', 'color'),\n\t...fields(THEME_COLORS.slice(27), 'colors', 'sidebar', 'mode', 'color'),\n\t...fields(STATE_COLORS.slice(0, 7), 'states', 'semantic-feedback', 'mode', 'color'),\n\t...fields(STATE_COLORS.slice(7), 'states', 'inverse-surfaces', 'mode', 'color'),\n\t...fields(FONT_VARIABLES, 'typography', 'font-families', 'shared', 'font'),\n\t...fields(TYPOGRAPHY_VARIABLES, 'typography', 'type-scale', 'shared', 'length'),\n\t...fields(['--radius'], 'shape', 'radius', 'shared', 'length'),\n\t...fields(SHADOW_VARIABLES, 'shape', 'elevation', 'mode', 'shadow'),\n\t...fields(STRUCTURAL_VARIABLES.slice(0, 2), 'structure', 'global-scales', 'shared', 'length'),\n\t...fields(STRUCTURAL_VARIABLES.slice(2, 5), 'structure', 'actions-controls', 'shared', 'length'),\n\t...fields(['--gap-normal', '--gap-dense'], 'structure', 'rows-surfaces', 'shared', 'length'),\n\t...fields(STRUCTURAL_VARIABLES.slice(5, 9), 'structure', 'rows-surfaces', 'shared', 'length'),\n\t...fields(STRUCTURAL_VARIABLES.slice(9, 11), 'structure', 'media', 'shared', 'length'),\n\t...fields(STRUCTURAL_VARIABLES.slice(11), 'structure', 'application-shell', 'shared', 'length'),\n\t...fields(LAYOUT_VARIABLES.slice(0, 5), 'structure', 'content-widths', 'shared', 'length'),\n\t...fields(LAYOUT_VARIABLES.slice(5), 'structure', 'adaptive-layout', 'shared', 'length'),\n].map((field) => (\n\tfield.name === '--space-scale' || field.name === '--density-scale'\n\t\t? { ...field, kind: 'number' as const }\n\t\t: field\n));\n","import { Info } from 'lucide-react';\nimport { useState } from 'react';\n\nimport { SmartAccordion } from '../../base/accordion';\nimport {\n\tAlert,\n\tAlertDescription,\n\tAlertMetadata,\n\tAlertMetadataItem,\n\tAlertTitle,\n} from '../../base/feedback';\nimport { FormField } from '../../base/forms';\nimport { Input } from '../../base/text-inputs';\nimport { Select, ToggleField } from '../../base/choice-inputs';\nimport { Stack } from '../../base/structure';\nimport { Text } from '../../typography';\nimport { COMPONENT_SCALES, SEMANTIC_TONES } from '../../../lib/component-vocabulary';\nimport type { UIConfig } from '../../../lib/ui-provider';\n\nimport { createSerializableUIConfig } from './theme-tweaker.utils';\n\ninterface ThemeProviderSettingsProps {\n\t/** Configuration for this surface. */\n\tconfig: UIConfig;\n\t/** Fired with the next value. */\n\tonChange: (config: UIConfig) => void;\n\t/** Overrides this surface's own copy. */\n\tstrings?: ThemeProviderSettingsStrings;\n}\n\nexport interface ThemeProviderSettingsStrings {\n\t/** Surface title. */\n\ttitle: string;\n\t/** Supporting copy shown under the label. */\n\tdescription: string;\n\tboundaryTitle: string;\n\tboundaryDescription: string;\n\tsummary: {\n\t\tlocale: string;\n\t\tcurrency: string;\n\t\tcontrols: string;\n\t\tcards: string;\n\t};\n\t/** Sections to render, in display order. */\n\tsections: {\n\t\tregional: { title: string; description: string };\n\t\tcontent: { title: string; description: string };\n\t\tcomponents: { title: string; description: string };\n\t\ttoasts: { title: string; description: string };\n\t};\n\tlabels: Record<\n\t\t| 'locale'\n\t\t| 'defaultCurrency'\n\t\t| 'displayCurrency'\n\t\t| 'moneyFormat'\n\t\t| 'firstDay'\n\t\t| 'dateFormat'\n\t\t| 'textSize'\n\t\t| 'commentComposer'\n\t\t| 'dualPricing'\n\t\t| 'dualPricingMode'\n\t\t| 'dualPricingLayout'\n\t\t| 'componentScale'\n\t\t| 'itemVariant'\n\t\t| 'buttonTone'\n\t\t| 'buttonStyle'\n\t\t| 'badgeTone'\n\t\t| 'cardSurface'\n\t\t| 'spinner'\n\t\t| 'cardDivider'\n\t\t| 'toastPosition'\n\t\t| 'toastTheme'\n\t\t| 'toastDuration'\n\t\t| 'visibleToasts'\n\t\t| 'closeButton'\n\t\t| 'richColors',\n\t\tstring\n\t> & { cardFooterDivider?: string };\n\tdualPricingDescription: string;\n\tdisplayCurrencyPlaceholder: string;\n\t/** Field error while the locale is not one the runtime can format with. */\n\tinvalidLocale?: string;\n\t/** Field error while a currency is not a three-letter code. */\n\tinvalidCurrency?: string;\n\toptions: Record<string, string>;\n}\n\nexport const defaultThemeProviderSettingsStrings: ThemeProviderSettingsStrings = {\n\ttitle: 'Application defaults',\n\tdescription: 'Configure the stable display behavior that accompanies the exported CSS theme.',\n\tboundaryTitle: 'Root provider recipe',\n\tboundaryDescription: 'These defaults take effect when UIProvider mounts. CSS variables continue to preview live; accept provider changes by remounting the application root.',\n\tsummary: {\n\t\tlocale: 'Locale',\n\t\tcurrency: 'Currency',\n\t\tcontrols: 'Controls',\n\t\tcards: 'Cards',\n\t},\n\tsections: {\n\t\tregional: {\n\t\t\ttitle: 'Regional formatting',\n\t\t\tdescription: 'Locale, currency, money, and date conventions.',\n\t\t},\n\t\tcontent: {\n\t\t\ttitle: 'Content behavior',\n\t\t\tdescription: 'Typography, comments, and dual-pricing presentation.',\n\t\t},\n\t\tcomponents: {\n\t\t\ttitle: 'Component defaults',\n\t\t\tdescription: 'Sizes, variants, surfaces, and action treatment.',\n\t\t},\n\t\ttoasts: {\n\t\t\ttitle: 'Toast defaults',\n\t\t\tdescription: 'Placement, duration, appearance, and capacity.',\n\t\t},\n\t},\n\tlabels: {\n\t\tlocale: 'Locale',\n\t\tdefaultCurrency: 'Default currency',\n\t\tdisplayCurrency: 'Display currency',\n\t\tmoneyFormat: 'Money format',\n\t\tfirstDay: 'First day of week',\n\t\tdateFormat: 'Date format',\n\t\ttextSize: 'Default text size',\n\t\tcommentComposer: 'Comment composer',\n\t\tdualPricing: 'Dual pricing',\n\t\tdualPricingMode: 'Dual-pricing mode',\n\t\tdualPricingLayout: 'Dual-pricing layout',\n\t\tcomponentScale: 'Component scale',\n\t\titemVariant: 'Item variant',\n\t\tbuttonTone: 'Button tone',\n\t\tbuttonStyle: 'Button style',\n\t\tbadgeTone: 'Badge tone',\n\t\tcardSurface: 'Card surface',\n\t\tspinner: 'Spinner',\n\t\tcardDivider: 'Card header divider',\n\t\tcardFooterDivider: 'Card footer divider',\n\t\ttoastPosition: 'Position',\n\t\ttoastTheme: 'Theme',\n\t\ttoastDuration: 'Duration (ms)',\n\t\tvisibleToasts: 'Visible toasts',\n\t\tcloseButton: 'Close button',\n\t\trichColors: 'Rich semantic colors',\n\t},\n\tdualPricingDescription: 'Show an optional display currency.',\n\tdisplayCurrencyPlaceholder: 'Optional',\n\tinvalidLocale: 'Enter a valid locale, such as en-US.',\n\tinvalidCurrency: 'Enter a three-letter currency code, such as EUR.',\n\toptions: {\n\t\tdefault: 'Default',\n\t\tdecimal: 'Decimal',\n\t\twith_code: 'With code',\n\t\twith_symbol: 'With symbol',\n\t\tlocale_aware: 'Locale aware',\n\t\tsunday: 'Sunday',\n\t\tmonday: 'Monday',\n\t\ttuesday: 'Tuesday',\n\t\twednesday: 'Wednesday',\n\t\tthursday: 'Thursday',\n\t\tfriday: 'Friday',\n\t\tsaturday: 'Saturday',\n\t\ttop: 'Top',\n\t\tbottom: 'Bottom',\n\t\tdefault_only: 'Default only',\n\t\tdual: 'Dual',\n\t\tdynamic: 'Dynamic',\n\t\tinline: 'Inline',\n\t\tlines: 'Lines',\n\t\toutline: 'Outline',\n\t\tmuted: 'Muted',\n\t\tprimary: 'Primary',\n\t\tsecondary: 'Secondary',\n\t\tdark: 'Dark',\n\t\twarning: 'Warning',\n\t\tsuccess: 'Success',\n\t\tlight: 'Light',\n\t\tsolid: 'Solid',\n\t\tghost: 'Ghost',\n\t\tinfo: 'Info',\n\t\tdestructive: 'Destructive',\n\t\txs: 'XS',\n\t\tsm: 'SM',\n\t\tmd: 'MD',\n\t\tcard: 'Card',\n\t\tflat: 'Flat',\n\t\tframed: 'Framed',\n\t\tshimmer: 'Shimmer',\n\t\tprogress: 'Progress',\n\t\tsystem: 'System',\n\t\t'top-right': 'Top right',\n\t\t'top-left': 'Top left',\n\t\t'top-center': 'Top center',\n\t\t'bottom-right': 'Bottom right',\n\t\t'bottom-left': 'Bottom left',\n\t\t'bottom-center': 'Bottom center',\n\t\txxs: 'XXS',\n\t\tpxs: 'PXS',\n\t\tbase: 'Base',\n\t\tlg: 'LG',\n\t\txl: 'XL',\n\t},\n};\n\nfunction selectOptions(values: readonly string[], strings: ThemeProviderSettingsStrings) {\n\treturn values.map((value) => ({\n\t\tvalue,\n\t\tlabel: strings.options[value] ?? value.replaceAll('_', ' ').replace(/\\b\\w/g, (character) => character.toUpperCase()),\n\t}));\n}\n\n/** A locale every Intl formatter accepts; a partial tag such as `en-` throws at render. */\nfunction isUsableLocale(value: string): boolean {\n\tif (value.trim().length === 0) return false;\n\ttry {\n\t\tIntl.getCanonicalLocales(value);\n\t\tnew Intl.NumberFormat(value);\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nfunction isUsableCurrency(value: string): boolean {\n\tif (!/^[A-Z]{3}$/.test(value)) return false;\n\ttry {\n\t\tnew Intl.NumberFormat('en', { style: 'currency', currency: value });\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n}\n\ninterface ValidatedSettingProps {\n\tlabel: string;\n\t/** The last valid value, from the config. */\n\tvalue: string;\n\tplaceholder?: string;\n\terror: string;\n\tnormalize?: (raw: string) => string;\n\tisValid: (value: string) => boolean;\n\t/** Fired with valid values only. */\n\tonCommit: (value: string) => void;\n}\n\n/**\n * A text setting whose partial input would crash the consumers of the config.\n * It keeps what is typed as a draft and marks the field invalid; the config\n * receives a value only once it is usable.\n */\nfunction ValidatedSetting({ label, value, placeholder, error, normalize, isValid, onCommit }: ValidatedSettingProps) {\n\tconst [draft, setDraft] = useState<string | null>(null);\n\treturn (\n\t\t<FormField label={label} error={draft === null ? undefined : error}>\n\t\t\t<Input\n\t\t\t\tvalue={draft ?? value}\n\t\t\t\tplaceholder={placeholder}\n\t\t\t\tonChange={(event) => {\n\t\t\t\t\tconst next = normalize ? normalize(event.target.value) : event.target.value;\n\t\t\t\t\tif (isValid(next)) {\n\t\t\t\t\t\tsetDraft(null);\n\t\t\t\t\t\tonCommit(next);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tsetDraft(next);\n\t\t\t\t\t}\n\t\t\t\t}}\n\t\t\t/>\n\t\t</FormField>\n\t);\n}\n\nconst toCurrencyCode = (raw: string) => raw.toUpperCase();\n\nexport function ThemeProviderSettings({ config, onChange, strings = defaultThemeProviderSettingsStrings }: ThemeProviderSettingsProps) {\n\tconst resolved = createSerializableUIConfig(config);\n\tconst scaleOptions = selectOptions(COMPONENT_SCALES, strings);\n\tconst weekdays = ['sunday', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday'].map((day, value) => ({\n\t\tvalue: String(value),\n\t\tlabel: strings.options[day],\n\t}));\n\tconst invalidLocale = strings.invalidLocale ?? defaultThemeProviderSettingsStrings.invalidLocale ?? '';\n\tconst invalidCurrency = strings.invalidCurrency ?? defaultThemeProviderSettingsStrings.invalidCurrency ?? '';\n\tconst update = (slice: keyof UIConfig, key: string, value: unknown) => {\n\t\tonChange({\n\t\t\t...resolved,\n\t\t\t[slice]: {\n\t\t\t\t...(resolved[slice] as object),\n\t\t\t\t[key]: value,\n\t\t\t},\n\t\t});\n\t};\n\n\treturn (\n\t\t<Stack gap=\"lg\" className=\"theme-tweaker--provider-settings\">\n\t\t\t<Stack gap=\"normal\">\n\t\t\t\t<Text type=\"inherit\" weight=\"semibold\">{strings.title}</Text>\n\t\t\t\t<Text size=\"xs\" type=\"secondary\">\n\t\t\t\t\t{strings.description}\n\t\t\t\t</Text>\n\t\t\t</Stack>\n\t\t\t<Alert tone=\"info\" role=\"note\" className=\"theme-tweaker--provider-boundary\">\n\t\t\t\t<Info aria-hidden=\"true\" />\n\t\t\t\t<AlertTitle>{strings.boundaryTitle}</AlertTitle>\n\t\t\t\t<AlertDescription>{strings.boundaryDescription}</AlertDescription>\n\t\t\t\t<AlertMetadata>\n\t\t\t\t\t<AlertMetadataItem label={strings.summary.locale} value={resolved.formatting?.locale ?? strings.options.default} />\n\t\t\t\t\t<AlertMetadataItem label={strings.summary.currency} value={resolved.money?.defaultCurrency ?? strings.options.default} />\n\t\t\t\t\t<AlertMetadataItem\n\t\t\t\t\t\tlabel={strings.summary.controls}\n\t\t\t\t\t\tvalue={strings.options[resolved.density?.defaultScale ?? 'md'] ?? resolved.density?.defaultScale ?? strings.options.md}\n\t\t\t\t\t/>\n\t\t\t\t\t<AlertMetadataItem\n\t\t\t\t\t\tlabel={strings.summary.cards}\n\t\t\t\t\t\tvalue={strings.options[resolved.card?.defaultSurface ?? 'card'] ?? resolved.card?.defaultSurface ?? strings.options.default}\n\t\t\t\t\t/>\n\t\t\t\t</AlertMetadata>\n\t\t\t</Alert>\n\t\t\t<SmartAccordion\n\t\t\t\tmultiple\n\t\t\t\tdefaultValue={['regional']}\n\t\t\t\tvariant=\"bordered\"\n\t\t\t\ticonStyle=\"none\"\n\t\t\t\tcontentClassName=\"pb-surface\"\n\t\t\t\titems={[\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: 'regional',\n\t\t\t\t\t\ttitle: strings.sections.regional.title,\n\t\t\t\t\t\tdescription: strings.sections.regional.description,\n\t\t\t\t\t\tcontent: (\n\t\t\t\t\t\t\t<div className=\"grid min-w-0 grid-cols-1 gap-space-md @2xl/theme-tweaker-controls:grid-cols-2\">\n\t\t\t\t\t\t\t\t<ValidatedSetting\n\t\t\t\t\t\t\t\t\tlabel={strings.labels.locale}\n\t\t\t\t\t\t\t\t\tvalue={resolved.formatting?.locale ?? ''}\n\t\t\t\t\t\t\t\t\terror={invalidLocale}\n\t\t\t\t\t\t\t\t\tisValid={isUsableLocale}\n\t\t\t\t\t\t\t\t\tonCommit={(next) => update('formatting', 'locale', next)}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t<ValidatedSetting\n\t\t\t\t\t\t\t\t\tlabel={strings.labels.defaultCurrency}\n\t\t\t\t\t\t\t\t\tvalue={resolved.money?.defaultCurrency ?? ''}\n\t\t\t\t\t\t\t\t\terror={invalidCurrency}\n\t\t\t\t\t\t\t\t\tnormalize={toCurrencyCode}\n\t\t\t\t\t\t\t\t\tisValid={isUsableCurrency}\n\t\t\t\t\t\t\t\t\tonCommit={(next) => update('money', 'defaultCurrency', next)}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t<ValidatedSetting\n\t\t\t\t\t\t\t\t\tlabel={strings.labels.displayCurrency}\n\t\t\t\t\t\t\t\t\tvalue={resolved.money?.displayCurrency ?? ''}\n\t\t\t\t\t\t\t\t\tplaceholder={strings.displayCurrencyPlaceholder}\n\t\t\t\t\t\t\t\t\terror={invalidCurrency}\n\t\t\t\t\t\t\t\t\tnormalize={toCurrencyCode}\n\t\t\t\t\t\t\t\t\t// Optional: an empty field means no display currency.\n\t\t\t\t\t\t\t\t\tisValid={(next) => next === '' || isUsableCurrency(next)}\n\t\t\t\t\t\t\t\t\tonCommit={(next) => update('money', 'displayCurrency', next || undefined)}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t<FormField label={strings.labels.moneyFormat}>\n\t\t\t\t\t\t\t\t\t<Select\n\t\t\t\t\t\t\t\t\t\tvalue={resolved.money?.formatMode}\n\t\t\t\t\t\t\t\t\t\toptions={selectOptions(['decimal', 'with_code', 'with_symbol', 'locale_aware'], strings)}\n\t\t\t\t\t\t\t\t\t\tonValueChange={(next) => update('money', 'formatMode', next)}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</FormField>\n\t\t\t\t\t\t\t\t<FormField label={strings.labels.firstDay}>\n\t\t\t\t\t\t\t\t\t<Select\n\t\t\t\t\t\t\t\t\t\tvalue={String(resolved.dates?.weekStartsOn ?? 1)}\n\t\t\t\t\t\t\t\t\t\toptions={weekdays}\n\t\t\t\t\t\t\t\t\t\tonValueChange={(next) => update('dates', 'weekStartsOn', Number(next))}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</FormField>\n\t\t\t\t\t\t\t\t<FormField label={strings.labels.dateFormat}>\n\t\t\t\t\t\t\t\t\t<Input value={resolved.dates?.format ?? ''} onChange={(event) => update('dates', 'format', event.target.value)} />\n\t\t\t\t\t\t\t\t</FormField>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t),\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: 'content',\n\t\t\t\t\t\ttitle: strings.sections.content.title,\n\t\t\t\t\t\tdescription: strings.sections.content.description,\n\t\t\t\t\t\tcontent: (\n\t\t\t\t\t\t\t<div className=\"grid min-w-0 grid-cols-1 gap-space-md @2xl/theme-tweaker-controls:grid-cols-2\">\n\t\t\t\t\t\t\t\t<FormField label={strings.labels.textSize}>\n\t\t\t\t\t\t\t\t\t<Select\n\t\t\t\t\t\t\t\t\t\tvalue={resolved.typography?.defaultTextSize}\n\t\t\t\t\t\t\t\t\t\toptions={selectOptions(['xxs', 'xs', 'pxs', 'sm', 'base', 'lg', 'xl'], strings)}\n\t\t\t\t\t\t\t\t\t\tonValueChange={(next) => update('typography', 'defaultTextSize', next)}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</FormField>\n\t\t\t\t\t\t\t\t<FormField label={strings.labels.commentComposer}>\n\t\t\t\t\t\t\t\t\t<Select\n\t\t\t\t\t\t\t\t\t\tvalue={resolved.comments?.composerPosition}\n\t\t\t\t\t\t\t\t\t\toptions={selectOptions(['top', 'bottom'], strings)}\n\t\t\t\t\t\t\t\t\t\tonValueChange={(next) => update('comments', 'composerPosition', next)}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</FormField>\n\t\t\t\t\t\t\t\t<ToggleField\n\t\t\t\t\t\t\t\t\tlabel={strings.labels.dualPricing}\n\t\t\t\t\t\t\t\t\tdescription={strings.dualPricingDescription}\n\t\t\t\t\t\t\t\t\tvalue={resolved.money?.dualPricingEnabled ?? false}\n\t\t\t\t\t\t\t\t\tonValueChange={(next) => update('money', 'dualPricingEnabled', next)}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t<FormField label={strings.labels.dualPricingMode}>\n\t\t\t\t\t\t\t\t\t<Select\n\t\t\t\t\t\t\t\t\t\tvalue={resolved.money?.displayMode}\n\t\t\t\t\t\t\t\t\t\toptions={selectOptions(['default_only', 'dual', 'dynamic'], strings)}\n\t\t\t\t\t\t\t\t\t\tonValueChange={(next) => update('money', 'displayMode', next)}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</FormField>\n\t\t\t\t\t\t\t\t<FormField label={strings.labels.dualPricingLayout}>\n\t\t\t\t\t\t\t\t\t<Select\n\t\t\t\t\t\t\t\t\t\tvalue={resolved.money?.dualPricingDisplay}\n\t\t\t\t\t\t\t\t\t\toptions={selectOptions(['inline', 'lines'], strings)}\n\t\t\t\t\t\t\t\t\t\tonValueChange={(next) => update('money', 'dualPricingDisplay', next)}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</FormField>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t),\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: 'components',\n\t\t\t\t\t\ttitle: strings.sections.components.title,\n\t\t\t\t\t\tdescription: strings.sections.components.description,\n\t\t\t\t\t\tcontent: (\n\t\t\t\t\t\t\t<div className=\"grid min-w-0 grid-cols-1 gap-space-md @2xl/theme-tweaker-controls:grid-cols-2\">\n\t\t\t\t\t\t\t\t<FormField label={strings.labels.componentScale}>\n\t\t\t\t\t\t\t\t\t<Select\n\t\t\t\t\t\t\t\t\t\tvalue={resolved.density?.defaultScale}\n\t\t\t\t\t\t\t\t\t\toptions={scaleOptions}\n\t\t\t\t\t\t\t\t\t\tonValueChange={(next) => update('density', 'defaultScale', next)}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</FormField>\n\t\t\t\t\t\t\t\t<FormField label={strings.labels.itemVariant}>\n\t\t\t\t\t\t\t\t\t<Select\n\t\t\t\t\t\t\t\t\t\tvalue={resolved.item?.defaultVariant}\n\t\t\t\t\t\t\t\t\t\toptions={selectOptions(['default', 'outline', 'muted'], strings)}\n\t\t\t\t\t\t\t\t\t\tonValueChange={(next) => update('item', 'defaultVariant', next)}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</FormField>\n\t\t\t\t\t\t\t\t<FormField label={strings.labels.buttonTone}>\n\t\t\t\t\t\t\t\t\t<Select\n\t\t\t\t\t\t\t\t\t\tvalue={resolved.button?.defaultTone}\n\t\t\t\t\t\t\t\t\t\toptions={selectOptions(SEMANTIC_TONES, strings)}\n\t\t\t\t\t\t\t\t\t\tonValueChange={(next) => update('button', 'defaultTone', next)}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</FormField>\n\t\t\t\t\t\t\t\t<FormField label={strings.labels.buttonStyle}>\n\t\t\t\t\t\t\t\t\t<Select\n\t\t\t\t\t\t\t\t\t\tvalue={resolved.button?.defaultButtonStyle}\n\t\t\t\t\t\t\t\t\t\toptions={selectOptions(['solid', 'outline', 'ghost'], strings)}\n\t\t\t\t\t\t\t\t\t\tonValueChange={(next) => update('button', 'defaultButtonStyle', next)}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</FormField>\n\t\t\t\t\t\t\t\t<FormField label={strings.labels.badgeTone}>\n\t\t\t\t\t\t\t\t\t<Select\n\t\t\t\t\t\t\t\t\t\tvalue={resolved.badge?.defaultTone}\n\t\t\t\t\t\t\t\t\t\toptions={selectOptions(SEMANTIC_TONES, strings)}\n\t\t\t\t\t\t\t\t\t\tonValueChange={(next) => update('badge', 'defaultTone', next)}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</FormField>\n\t\t\t\t\t\t\t\t<FormField label={strings.labels.cardSurface}>\n\t\t\t\t\t\t\t\t\t<Select\n\t\t\t\t\t\t\t\t\t\tvalue={resolved.card?.defaultSurface}\n\t\t\t\t\t\t\t\t\t\toptions={selectOptions(['card', 'flat', 'framed'], strings)}\n\t\t\t\t\t\t\t\t\t\tonValueChange={(next) => update('card', 'defaultSurface', next)}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</FormField>\n\t\t\t\t\t\t\t\t<FormField label={strings.labels.spinner}>\n\t\t\t\t\t\t\t\t\t<Select\n\t\t\t\t\t\t\t\t\t\tvalue={resolved.spinner?.defaultVariant}\n\t\t\t\t\t\t\t\t\t\toptions={selectOptions(['default', 'shimmer', 'progress'], strings)}\n\t\t\t\t\t\t\t\t\t\tonValueChange={(next) => update('spinner', 'defaultVariant', next)}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</FormField>\n\t\t\t\t\t\t\t\t<ToggleField\n\t\t\t\t\t\t\t\t\tlabel={strings.labels.cardDivider}\n\t\t\t\t\t\t\t\t\tvalue={resolved.card?.defaultHeaderDivider ?? false}\n\t\t\t\t\t\t\t\t\tonValueChange={(next) => update('card', 'defaultHeaderDivider', next)}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t<ToggleField\n\t\t\t\t\t\t\t\t\tlabel={strings.labels.cardFooterDivider ?? defaultThemeProviderSettingsStrings.labels.cardFooterDivider}\n\t\t\t\t\t\t\t\t\tvalue={resolved.card?.defaultFooterDivider ?? true}\n\t\t\t\t\t\t\t\t\tonValueChange={(next) => update('card', 'defaultFooterDivider', next)}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t),\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: 'toasts',\n\t\t\t\t\t\ttitle: strings.sections.toasts.title,\n\t\t\t\t\t\tdescription: strings.sections.toasts.description,\n\t\t\t\t\t\tcontent: (\n\t\t\t\t\t\t\t<div className=\"grid min-w-0 grid-cols-1 gap-space-md @2xl/theme-tweaker-controls:grid-cols-2\">\n\t\t\t\t\t\t\t\t<FormField label={strings.labels.toastPosition}>\n\t\t\t\t\t\t\t\t\t<Select\n\t\t\t\t\t\t\t\t\t\tvalue={resolved.toast?.position}\n\t\t\t\t\t\t\t\t\t\toptions={selectOptions(['top-right', 'top-left', 'top-center', 'bottom-right', 'bottom-left', 'bottom-center'], strings)}\n\t\t\t\t\t\t\t\t\t\tonValueChange={(next) => update('toast', 'position', next)}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</FormField>\n\t\t\t\t\t\t\t\t<FormField label={strings.labels.toastTheme}>\n\t\t\t\t\t\t\t\t\t<Select\n\t\t\t\t\t\t\t\t\t\tvalue={resolved.toast?.theme}\n\t\t\t\t\t\t\t\t\t\toptions={selectOptions(['light', 'dark', 'system'], strings)}\n\t\t\t\t\t\t\t\t\t\tonValueChange={(next) => update('toast', 'theme', next)}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</FormField>\n\t\t\t\t\t\t\t\t<FormField label={strings.labels.toastDuration}>\n\t\t\t\t\t\t\t\t\t<Input\n\t\t\t\t\t\t\t\t\t\ttype=\"number\"\n\t\t\t\t\t\t\t\t\t\tmin={1000}\n\t\t\t\t\t\t\t\t\t\tstep={500}\n\t\t\t\t\t\t\t\t\t\tvalue={String(resolved.toast?.duration ?? 5000)}\n\t\t\t\t\t\t\t\t\t\tonChange={(event) => update('toast', 'duration', Number(event.target.value))}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</FormField>\n\t\t\t\t\t\t\t\t<FormField label={strings.labels.visibleToasts}>\n\t\t\t\t\t\t\t\t\t<Input\n\t\t\t\t\t\t\t\t\t\ttype=\"number\"\n\t\t\t\t\t\t\t\t\t\tmin={1}\n\t\t\t\t\t\t\t\t\t\tmax={10}\n\t\t\t\t\t\t\t\t\t\tvalue={String(resolved.toast?.visibleToasts ?? 4)}\n\t\t\t\t\t\t\t\t\t\tonChange={(event) => update('toast', 'visibleToasts', Number(event.target.value))}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</FormField>\n\t\t\t\t\t\t\t\t<ToggleField\n\t\t\t\t\t\t\t\t\tlabel={strings.labels.closeButton}\n\t\t\t\t\t\t\t\t\tvalue={resolved.toast?.closeButton ?? true}\n\t\t\t\t\t\t\t\t\tonValueChange={(next) => update('toast', 'closeButton', next)}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t<ToggleField\n\t\t\t\t\t\t\t\t\tlabel={strings.labels.richColors}\n\t\t\t\t\t\t\t\t\tvalue={resolved.toast?.richColors ?? false}\n\t\t\t\t\t\t\t\t\tonValueChange={(next) => update('toast', 'richColors', next)}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t),\n\t\t\t\t\t},\n\t\t\t\t]}\n\t\t\t/>\n\t\t</Stack>\n\t);\n}\n","import { defaultThemeProviderSettingsStrings, type ThemeProviderSettingsStrings } from './theme-provider-settings';\n\nexport interface ThemeTweakerStrings {\n\t/** Surface title. */\n\ttitle: string;\n\t/** Supporting copy shown under the label. */\n\tdescription: string;\n\tsearchLabel: string;\n\tsearchPlaceholder: string;\n\tsearchHint: string;\n\tsearchResults: string;\n\tallGroups: string;\n\tgroupNavigationLabel: string;\n\tpreviousGroup: string;\n\tnextGroup: string;\n\tsharedScope: string;\n\tmixedScope: string;\n\tvariableCount: string;\n\tgroupSectionLabel: string;\n\tlightMode: string;\n\tdarkMode: string;\n\treset: string;\n\tcopy: string;\n\tcopyProvider: string;\n\texport: string;\n\texportPending: string;\n\texportDialogTitle: string;\n\texportDialogDescription: string;\n\tdownloadCss: string;\n\tdownloadProvider: string;\n\tclose: string;\n\tcopiedStatus: string;\n\texportedStatus: string;\n\tinvalidTheme: string;\n\t/** Shown in the export dialog when copying fails. Defaults to \"Could not copy. Select the text and copy it manually.\" */\n\tcopyFailedStatus?: string;\n\t/** Shown in the export dialog when a download or `onExport` fails. Defaults to \"Could not download the file. Try again.\" */\n\texportFailedStatus?: string;\n\t/** Message of the error reported through `onError` when no clipboard exists and no `onCopy` is supplied. */\n\tclipboardUnavailable?: string;\n\t/** Field error for a value that could break out of its CSS declaration. */\n\tinvalidValue?: string;\n\t/** Field error for a color field whose value the browser does not read as a color. */\n\tinvalidColor?: string;\n\temptySearch: string;\n\tinheritValue: string;\n\tresetVariable: string;\n\tchooseColor: string;\n\tadjustVariable: string;\n\tchangedCount: string;\n\tcssOutputLabel: string;\n\tcssOutputDescription: string;\n\tproviderOutputLabel: string;\n\tproviderOutputDescription: string;\n\tautoPalette: string;\n\tautoPaletteDescription: string;\n\ttypeRecipeTitle: string;\n\ttypeRecipeDescription: string;\n\tbaseTypeSize: string;\n\ttypeRatio: string;\n\televationRecipeTitle: string;\n\televationRecipeDescription: string;\n\televationIntensity: string;\n\tpreviewTitle: string;\n\tpreviewDescription: string;\n\tpreviewItemTitle: string;\n\tpreviewItemDescription: string;\n\tpreviewFieldLabel: string;\n\tpreviewFieldPlaceholder: string;\n\tpreviewAction: string;\n\tpreviewSuccess: string;\n\tpreviewWarning: string;\n\tpreviewContract: string;\n\tproviderSettings: ThemeProviderSettingsStrings;\n\tgroups: Record<'colors' | 'states' | 'typography' | 'shape' | 'structure' | 'defaults', string>;\n\tgroupDescriptions: Record<'colors' | 'states' | 'typography' | 'shape' | 'structure' | 'defaults', string>;\n\tsections: Record<\n\t\t| 'surfaces-content'\n\t\t| 'brand-actions'\n\t\t| 'charts'\n\t\t| 'sidebar'\n\t\t| 'semantic-feedback'\n\t\t| 'inverse-surfaces'\n\t\t| 'font-families'\n\t\t| 'type-scale'\n\t\t| 'radius'\n\t\t| 'elevation'\n\t\t| 'global-scales'\n\t\t| 'actions-controls'\n\t\t| 'rows-surfaces'\n\t\t| 'media'\n\t\t| 'application-shell'\n\t\t| 'content-widths'\n\t\t| 'adaptive-layout',\n\t\tstring\n\t>;\n}\n\nexport const defaultThemeTweakerStrings: ThemeTweakerStrings = {\n\ttitle: 'Theme tweaker',\n\tdescription: 'Edit the public theme contract, calculate coherent recipes, and export complete CSS plus root display defaults.',\n\tsearchLabel: 'Search variables',\n\tsearchPlaceholder: 'Search by token, label, or purpose…',\n\tsearchHint: 'Search spans every public theme group.',\n\tsearchResults: 'Results: {{count}}',\n\tallGroups: 'All groups',\n\tgroupNavigationLabel: 'Theme categories',\n\tpreviousGroup: 'Previous categories',\n\tnextGroup: 'Next categories',\n\tsharedScope: 'Shared',\n\tmixedScope: 'Mixed scope',\n\tvariableCount: 'Variables: {{count}}',\n\tgroupSectionLabel: '{{group}} · {{section}}',\n\tlightMode: 'Light',\n\tdarkMode: 'Dark',\n\treset: 'Reset overrides',\n\tcopy: 'Copy CSS',\n\tcopyProvider: 'Copy provider config',\n\texport: 'Export',\n\texportPending: 'Downloading…',\n\texportDialogTitle: 'Export theme',\n\texportDialogDescription: 'Review, copy, or download the complete CSS theme and its matching UIProvider configuration.',\n\tdownloadCss: 'Download CSS',\n\tdownloadProvider: 'Download provider config',\n\tclose: 'Close',\n\tcopiedStatus: 'Copied to the clipboard.',\n\texportedStatus: 'File downloaded.',\n\tinvalidTheme: 'Fix the invalid CSS override before copying or exporting.',\n\tcopyFailedStatus: 'Could not copy. Select the text and copy it manually.',\n\texportFailedStatus: 'Could not download the file. Try again.',\n\tclipboardUnavailable: 'Clipboard access is unavailable. Provide onCopy for this environment.',\n\tinvalidValue: 'This value cannot be used in CSS. Remove semicolons, braces, angle brackets, backslashes and comment markers, and close every quote and bracket.',\n\tinvalidColor: 'Enter a CSS color, such as oklch(0.6 0.2 250), or a var() reference.',\n\temptySearch: 'No public theme variables match this search.',\n\tinheritValue: 'Inherit package value',\n\tresetVariable: 'Reset variable',\n\tchooseColor: 'Choose {{label}}',\n\tadjustVariable: 'Adjust {{label}}',\n\tchangedCount: 'Overrides: {{count}}',\n\tcssOutputLabel: 'Complete theme CSS',\n\tcssOutputDescription: 'A standalone light, dark, typography, shape, and structure contract for every public variable.',\n\tproviderOutputLabel: 'UIProvider config',\n\tproviderOutputDescription: 'Mount-once display defaults for the application root.',\n\tautoPalette: 'Derive supporting colors',\n\tautoPaletteDescription: 'Keep status pairs, muted surfaces, accents, borders, charts, links, and sidebar actions coherent with the primary color.',\n\ttypeRecipeTitle: 'Calculated type scale',\n\ttypeRecipeDescription: 'Generate every public font step and line height from one body anchor and modular ratio.',\n\tbaseTypeSize: 'Base size',\n\ttypeRatio: 'Heading ratio',\n\televationRecipeTitle: 'Calculated elevation',\n\televationRecipeDescription: 'Generate the complete shadow ladder from one restrained intensity.',\n\televationIntensity: 'Shadow intensity',\n\tpreviewTitle: 'Semantic preview',\n\tpreviewDescription: 'The same variables drive surfaces, typography, controls, rows, and states.',\n\tpreviewItemTitle: 'Customer workspace',\n\tpreviewItemDescription: 'Long descriptions and actions keep the package rhythm.',\n\tpreviewFieldLabel: 'Workspace name',\n\tpreviewFieldPlaceholder: 'Acme operations',\n\tpreviewAction: 'Save changes',\n\tpreviewSuccess: 'Healthy',\n\tpreviewWarning: 'Review',\n\tpreviewContract: 'CSS variables',\n\tproviderSettings: defaultThemeProviderSettingsStrings,\n\tgroups: {\n\t\tcolors: 'Colors',\n\t\tstates: 'States',\n\t\ttypography: 'Typography',\n\t\tshape: 'Shape & elevation',\n\t\tstructure: 'Structure',\n\t\tdefaults: 'Provider',\n\t},\n\tgroupDescriptions: {\n\t\tcolors: 'Application surfaces, brand actions, charts, and sidebar colors.',\n\t\tstates: 'Semantic feedback and inverse-surface color pairs.',\n\t\ttypography: 'Font families and the calculated public type scale.',\n\t\tshape: 'Corner radius and the complete elevation ladder.',\n\t\tstructure: 'Density, spacing, controls, rows, media, and shell geometry.',\n\t\tdefaults: 'Mount-once UIProvider formatting and component defaults.',\n\t},\n\tsections: {\n\t\t'surfaces-content': 'Surfaces & content',\n\t\t'brand-actions': 'Brand & actions',\n\t\tcharts: 'Charts',\n\t\tsidebar: 'Sidebar',\n\t\t'semantic-feedback': 'Semantic feedback',\n\t\t'inverse-surfaces': 'Inverse surfaces',\n\t\t'font-families': 'Font families',\n\t\t'type-scale': 'Type scale',\n\t\tradius: 'Radius',\n\t\televation: 'Elevation',\n\t\t'global-scales': 'Global scales',\n\t\t'actions-controls': 'Actions & controls',\n\t\t'rows-surfaces': 'Rows & surfaces',\n\t\tmedia: 'Media',\n\t\t'application-shell': 'Application shell',\n\t\t'content-widths': 'Content widths',\n\t\t'adaptive-layout': 'Adaptive layout',\n\t},\n};\n","import type {\n\tAdminUIThemeMode,\n\tAdminUIThemeOverrides,\n} from './theme-tweaker.types';\n\nexport interface AdminUIPaletteRecipe {\n\tprimary: string;\n\tmode?: AdminUIThemeMode;\n}\n\nexport interface AdminUITypeScaleRecipe {\n\t/** Body-size anchor in pixels. The package default is 16. */\n\tbaseSize: number;\n\t/** Modular ratio for headings and display sizes. Defaults to 1.2. */\n\tratio?: number;\n}\n\nexport interface AdminUIElevationRecipe {\n\t/** Bounded visual intensity from 0 (flat) to 1 (pronounced). */\n\tintensity: number;\n}\n\nfunction clamp(value: number, min: number, max: number): number {\n\treturn Math.min(max, Math.max(min, value));\n}\n\nfunction contrastForeground(color: string, mode: AdminUIThemeMode): string {\n\tconst digits = color.trim().match(/^#([\\da-f]{3}|[\\da-f]{6})$/i)?.[1];\n\tconst hex = digits?.length === 3 ? [...digits].map(value => value + value).join('') : digits;\n\tif (hex) {\n\t\tconst channels = [0, 2, 4].map((offset) => Number.parseInt(hex.slice(offset, offset + 2), 16) / 255);\n\t\tconst luminance = channels\n\t\t\t.map((channel) => channel <= 0.03928 ? channel / 12.92 : ((channel + 0.055) / 1.055) ** 2.4)\n\t\t\t.reduce((sum, channel, index) => sum + channel * [0.2126, 0.7152, 0.0722][index], 0);\n\t\treturn luminance > 0.28 ? 'oklch(0.18 0.01 260)' : 'oklch(0.985 0 0)';\n\t}\n\n\tconst match = color.match(/oklch\\(\\s*([\\d.]+)(%)?/i);\n\tconst lightness = Number.parseFloat(match?.[1] ?? 'NaN') / (match?.[2] ? 100 : 1);\n\tif (Number.isFinite(lightness)) {\n\t\treturn lightness > 0.67 ? 'oklch(0.18 0.01 260)' : 'oklch(0.985 0 0)';\n\t}\n\n\treturn mode === 'dark' ? 'oklch(0.18 0.01 260)' : 'oklch(0.985 0 0)';\n}\n\n/**\n * Builds a coherent brand recipe from one primary color. Derived values stay\n * expressed in CSS so they continue to follow consumer-edited background and\n * foreground tokens without introducing another runtime color system.\n */\nexport function deriveAdminUIPalette({\n\tprimary,\n\tmode = 'light',\n}: AdminUIPaletteRecipe): AdminUIThemeOverrides {\n\tconst dark = mode === 'dark';\n\t// A small brand influence ties the palette together without erasing status hues.\n\tconst harmonize = (light: string, night: string) => `color-mix(in oklab, ${dark ? night : light} 94%, var(--primary))`;\n\treturn {\n\t\t'--primary': primary,\n\t\t'--primary-accent': dark\n\t\t\t? 'oklch(from var(--primary) clamp(0.7, l, 0.85) min(c, 0.16) h)'\n\t\t\t: 'oklch(from var(--primary) clamp(0.35, l, 0.55) min(c, 0.16) h)',\n\t\t'--success': harmonize('oklch(0.48 0.11 155)', 'oklch(0.74 0.12 155)'),\n\t\t'--success-foreground': dark ? 'oklch(0.23 0.025 155)' : 'oklch(0.985 0 0)',\n\t\t'--info': harmonize('oklch(0.52 0.12 250)', 'oklch(0.75 0.1 250)'),\n\t\t'--info-foreground': dark ? 'oklch(0.23 0.025 250)' : 'oklch(0.985 0 0)',\n\t\t'--warning': harmonize('oklch(0.78 0.13 75)', 'oklch(0.81 0.12 75)'),\n\t\t'--warning-foreground': 'oklch(0.28 0.035 60)',\n\t\t'--warning-accent': harmonize('oklch(0.53 0.11 65)', 'oklch(0.81 0.12 75)'),\n\t\t'--destructive': harmonize('oklch(0.55 0.17 25)', 'oklch(0.74 0.14 25)'),\n\t\t'--destructive-foreground': dark ? 'oklch(0.23 0.035 25)' : 'oklch(0.985 0 0)',\n\t\t'--primary-foreground': contrastForeground(primary, mode),\n\t\t'--secondary': 'color-mix(in oklab, var(--primary) 10%, var(--background))',\n\t\t'--secondary-foreground': 'var(--foreground)',\n\t\t'--muted': 'color-mix(in oklab, var(--primary) 7%, var(--background))',\n\t\t'--muted-foreground': 'color-mix(in oklab, var(--foreground) 62%, var(--background))',\n\t\t'--accent': 'color-mix(in oklab, var(--primary) 14%, var(--background))',\n\t\t'--accent-foreground': 'var(--foreground)',\n\t\t'--border': 'color-mix(in oklab, var(--primary) 14%, var(--background))',\n\t\t// Control boundaries and focus retain the central light/dark contrast\n\t\t// roles; a brand color alone cannot establish either contrast floor.\n\t\t'--link-color': 'var(--primary-accent)',\n\t\t'--chart-1': 'var(--primary)',\n\t\t'--chart-2': harmonize('oklch(0.56 0.11 230)', 'oklch(0.76 0.11 230)'),\n\t\t'--chart-3': harmonize('oklch(0.56 0.15 285)', 'oklch(0.76 0.15 285)'),\n\t\t'--chart-4': harmonize('oklch(0.58 0.14 330)', 'oklch(0.76 0.14 330)'),\n\t\t'--chart-5': harmonize('oklch(0.6 0.12 60)', 'oklch(0.76 0.12 60)'),\n\t\t// Red, yellow and green series; categorical, never the status hues.\n\t\t'--chart-6': harmonize('oklch(0.55 0.17 20)', 'oklch(0.72 0.15 20)'),\n\t\t'--chart-7': harmonize('oklch(0.74 0.13 95)', 'oklch(0.86 0.13 95)'),\n\t\t'--chart-8': harmonize('oklch(0.62 0.13 130)', 'oklch(0.8 0.14 130)'),\n\t\t'--sidebar-primary': 'var(--primary)',\n\t\t'--sidebar-primary-foreground': 'var(--primary-foreground)',\n\t\t'--sidebar-accent': 'var(--accent)',\n\t\t'--sidebar-accent-foreground': 'var(--accent-foreground)',\n\t\t'--sidebar-border': 'var(--border)',\n\t\t'--sidebar-ring': 'var(--ring)',\n\t};\n}\n\nconst BODY_STEPS = {\n\txxs: 0.75,\n\txs: 0.75,\n\tpxs: 0.8125,\n\tsm: 0.875,\n\tbase: 1,\n} as const;\n\nconst HEADING_STEPS = ['lg', 'xl', '2xl', '3xl', '4xl', '5xl', '6xl', '7xl', '8xl', '9xl'] as const;\n\n/** Generates the full public typography ladder from one base size. */\nexport function deriveAdminUITypeScale({\n\tbaseSize,\n\tratio = 1.2,\n}: AdminUITypeScaleRecipe): AdminUIThemeOverrides {\n\tconst boundedBase = clamp(baseSize, 14, 20);\n\tconst boundedRatio = clamp(ratio, 1.125, 1.333);\n\tconst overrides: AdminUIThemeOverrides = {};\n\n\tfor (const [step, factor] of Object.entries(BODY_STEPS)) {\n\t\tconst pixels = Math.max(12, boundedBase * factor);\n\t\toverrides[`--text-${step}`] = `${Number((pixels / 16).toFixed(4))}rem`;\n\t\toverrides[`--text-${step}--line-height`] = `${Number((Math.max(pixels + 6, pixels * 1.45) / pixels).toFixed(4))}`;\n\t}\n\n\tHEADING_STEPS.forEach((step, index) => {\n\t\tconst pixels = boundedBase * boundedRatio ** (index + 1);\n\t\toverrides[`--text-${step}`] = `${Number((pixels / 16).toFixed(4))}rem`;\n\t\toverrides[`--text-${step}--line-height`] = `${Number(clamp(1.55 - index * 0.065, 1, 1.5).toFixed(4))}`;\n\t});\n\n\treturn overrides;\n}\n\n/** Generates all public elevation steps from one bounded intensity. */\nexport function deriveAdminUIElevation({ intensity }: AdminUIElevationRecipe): AdminUIThemeOverrides {\n\tconst value = clamp(intensity, 0, 1);\n\tconst alpha = (factor: number) => Number((value * factor).toFixed(3));\n\treturn {\n\t\t'--shadow-2xs': `0 1px 2px 0 oklch(0 0 0 / ${alpha(0.06)})`,\n\t\t'--shadow-xs': `0 1px 3px 0 oklch(0 0 0 / ${alpha(0.07)})`,\n\t\t'--shadow-sm': `0 1px 2px 0 oklch(0 0 0 / ${alpha(0.10)}), 0 3px 8px -3px oklch(0 0 0 / ${alpha(0.13)})`,\n\t\t'--shadow': `0 1px 3px 0 oklch(0 0 0 / ${alpha(0.13)}), 0 4px 10px -3px oklch(0 0 0 / ${alpha(0.13)})`,\n\t\t'--shadow-md': `0 2px 4px -2px oklch(0 0 0 / ${alpha(0.13)}), 0 6px 16px -4px oklch(0 0 0 / ${alpha(0.17)})`,\n\t\t'--shadow-lg': `0 2px 6px -2px oklch(0 0 0 / ${alpha(0.13)}), 0 10px 24px -6px oklch(0 0 0 / ${alpha(0.20)})`,\n\t\t'--shadow-xl': `0 14px 28px -8px oklch(0 0 0 / ${alpha(0.22)}), 0 6px 12px -6px oklch(0 0 0 / ${alpha(0.12)})`,\n\t\t'--shadow-2xl': `0 24px 48px -14px oklch(0 0 0 / ${alpha(0.28)})`,\n\t};\n}\n","import { CheckCircle2, Copy, Download, LayoutGrid, Moon, Palette, RotateCcw, Search, Settings2, Shapes, ShieldCheck, Sun, Type, type LucideIcon } from 'lucide-react';\nimport { forwardRef, useEffect, useId, useImperativeHandle, useMemo, useRef, useState, type ReactNode } from 'react';\n\nimport { SmartAccordion } from '../../base/accordion';\nimport { Badge } from '../../base/badge';\nimport { Button } from '../../base/buttons';\nimport { Card } from '../../base/cards';\nimport { ActionDialog, useOverlayVisibility } from '../overlays';\nimport { ColorInput, SliderField } from '../../base/value-inputs';\nimport { FormField } from '../../base/forms';\nimport { Input, Textarea } from '../../base/text-inputs';\nimport { ToggleField } from '../../base/choice-inputs';\nimport { DecimalInput } from '../../base/forms-numeric';\nimport { Item } from '../../base/item';\nimport { Tabs, TabsList, TabsTrigger } from '../../base/navigation';\nimport { Grid, Stack } from '../../base/structure';\nimport { compositionRhythm } from '../../base/structure/composition.recipes';\nimport { MonoValue } from '../../primitives';\nimport { Heading, Text } from '../../typography';\nimport { interpolateString, useStrings } from '../../../lib/strings';\nimport { cn } from '../../../lib/utils';\n\nimport { defaultThemeTweakerFields } from './theme-tweaker.fields';\nimport { defaultThemeTweakerStrings, type ThemeTweakerStrings } from './theme-tweaker.strings';\nimport { ThemeProviderSettings } from './theme-provider-settings';\nimport type {\n\tAdminUIThemeDefinition,\n\tAdminUIThemeMode,\n\tAdminUIThemeOverrides,\n\tThemeTweakerField,\n\tThemeTweakerGroup,\n\tThemeTweakerProps,\n\tThemeTweakerRangeControl,\n\tThemeTweakerSection,\n} from './theme-tweaker.types';\nimport {\n\tadminUIThemeToStyle,\n\tcountAdminUIThemeOverrides,\n\tcreateAdminUITheme,\n\tcreateSerializableUIConfig,\n\tcreateThemeTweakerExportArtifact,\n\tdownloadAdminUITheme,\n\tdownloadAdminUITextFile,\n\tisAdminUIThemeColorValue,\n\tisUnsafeAdminUIThemeValue,\n} from './theme-tweaker.utils';\nimport { deriveAdminUIElevation, deriveAdminUIPalette, deriveAdminUITypeScale } from './theme-tweaker.recipes';\nimport { ThemeScope } from './theme-scope';\nimport { useAppliedTheme } from './use-applied-theme';\nimport { focusRecipes } from '../../../lib/focus-recipes';\nimport { EmptyState } from '../../blocks/data-display';\n\nconst GROUPS: readonly ThemeTweakerGroup[] = ['colors', 'states', 'typography', 'shape', 'structure', 'defaults'];\n\nconst GROUP_ICONS: Record<ThemeTweakerGroup, LucideIcon> = {\n\tcolors: Palette,\n\tstates: ShieldCheck,\n\ttypography: Type,\n\tshape: Shapes,\n\tstructure: LayoutGrid,\n\tdefaults: Settings2,\n};\n\ntype ActionStatus = 'idle' | 'copied' | 'exported' | 'copyFailed' | 'exportFailed';\n\n/** Recipe controls start from the package's own type scale and elevation. */\nconst DEFAULT_BASE_TYPE_SIZE = 16;\nconst DEFAULT_TYPE_RATIO = 1.2;\nconst DEFAULT_ELEVATION_INTENSITY = 0.8;\n/** Quiet time before the edited theme is resolved for placeholders and the export. */\nconst RESOLVE_DELAY_MS = 80;\n\ninterface ThemeExportArtifactProps {\n\t/** Surface title. */\n\ttitle: string;\n\t/** Supporting copy shown under the label. */\n\tdescription: string;\n\tcode: string;\n\tcopyLabel: string;\n\tdownloadLabel: string;\n\t/** Fired when an entry is copied. */\n\tonCopy: () => void;\n\t/** Fired when an entry is downloaded. */\n\tonDownload: () => void;\n\tdownloading?: boolean;\n}\n\nfunction ThemeExportArtifact({\n\ttitle,\n\tdescription,\n\tcode,\n\tcopyLabel,\n\tdownloadLabel,\n\tonCopy,\n\tonDownload,\n\tdownloading = false,\n}: ThemeExportArtifactProps) {\n\tconst titleId = useId();\n\n\treturn (\n\t\t<Stack\n\t\t\trender={<section aria-labelledby={titleId} />}\n\t\t\tgap=\"md\"\n\t\t\tclassName=\"theme-tweaker--export-artifact min-w-0\"\n\t\t>\n\t\t\t<Stack\n\t\t\t\tdirection={{ base: 'vertical', sm: 'horizontal' }}\n\t\t\t\talign={{ base: 'stretch', sm: 'start' }}\n\t\t\t\tjustify={{ sm: 'between' }}\n\t\t\t\tgap=\"md\"\n\t\t\t\tclassName=\"theme-tweaker--export-artifact-header\"\n\t\t\t>\n\t\t\t\t<Stack gap=\"dense\" className=\"min-w-0\">\n\t\t\t\t\t<Heading className=\"text-inherit\" id={titleId} tag=\"h3\">\n\t\t\t\t\t\t{title}\n\t\t\t\t\t</Heading>\n\t\t\t\t\t<Text size=\"xs\" type=\"secondary\">\n\t\t\t\t\t\t{description}\n\t\t\t\t\t</Text>\n\t\t\t\t</Stack>\n\t\t\t\t<Stack direction=\"horizontal\" gap=\"xs\" align=\"center\" wrap className=\"theme-tweaker--export-artifact-actions sm:shrink-0\">\n\t\t\t\t\t<Button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\ttone=\"secondary\"\n\t\t\t\t\t\tbuttonStyle=\"outline\"\n\t\t\t\t\t\ticon={Copy}\n\t\t\t\t\t\tonClick={onCopy}\n\t\t\t\t\t>\n\t\t\t\t\t\t{copyLabel}\n\t\t\t\t\t</Button>\n\t\t\t\t\t<Button tone=\"primary\"\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\ticon={Download}\n\t\t\t\t\t\tloading={downloading}\n\t\t\t\t\t\tonClick={onDownload}\n\t\t\t\t\t>\n\t\t\t\t\t\t{downloadLabel}\n\t\t\t\t\t</Button>\n\t\t\t\t</Stack>\n\t\t\t</Stack>\n\t\t\t<pre\n\t\t\t\ttabIndex={0}\n\t\t\t\taria-label={title}\n\t\t\t\tclassName={`theme-tweaker--export-code max-h-48 min-w-0 overflow-auto rounded-radius border border-border bg-muted/30 p-surface-xs font-mono text-xs leading-relaxed text-foreground outline-none ${focusRecipes.frame} sm:max-h-72`}\n\t\t\t>\n\t\t\t\t<code>{code}</code>\n\t\t\t</pre>\n\t\t</Stack>\n\t);\n}\n\ninterface VisibleThemeSection {\n\tgroup: ThemeTweakerGroup;\n\tsection: ThemeTweakerSection;\n\tfields: ThemeTweakerField[];\n}\n\ninterface ThemeVariableFieldProps {\n\tfield: ThemeTweakerField;\n\tvalue: string;\n\teffectiveValue: string;\n\t/** Why the current value cannot be exported; marks the control invalid. */\n\terror?: string;\n\t/** Fired with the next value. */\n\tonChange: (value: string) => void;\n\tonReset: () => void;\n\t/** Overrides this surface's own copy. */\n\tstrings: ThemeTweakerStrings;\n}\n\n/** The reason an override cannot be exported, or nothing when it can. */\nfunction themeValueError(field: ThemeTweakerField, value: string | undefined, strings: ThemeTweakerStrings): string | undefined {\n\tif (!value || value.trim().length === 0) return undefined;\n\tif (isUnsafeAdminUIThemeValue(value)) return strings.invalidValue ?? defaultThemeTweakerStrings.invalidValue;\n\tif (field.kind === 'color' && !isAdminUIThemeColorValue(value)) return strings.invalidColor ?? defaultThemeTweakerStrings.invalidColor;\n\treturn undefined;\n}\n\nfunction parseRangeValue(value: string, control: ThemeTweakerRangeControl): number {\n\tconst parsed = Number.parseFloat(value);\n\tif (!Number.isFinite(parsed)) return control.min;\n\treturn Math.min(control.max, Math.max(control.min, parsed));\n}\n\nfunction serializeRangeValue(value: number, control: ThemeTweakerRangeControl): string {\n\tconst precision = control.decimalPlaces ?? 3;\n\tconst normalized = Number(value.toFixed(precision));\n\treturn `${normalized}${control.unit ?? ''}`;\n}\n\nfunction resolveInspectionTarget(target: ThemeTweakerProps['target'], self: HTMLDivElement | null): HTMLElement | null {\n\tif (target === 'document') return document.documentElement;\n\tif (target === 'self' || target === null) return self;\n\tif (typeof target === 'function') return target();\n\treturn target ?? self;\n}\n\n/**\n * Resolves every field in both modes on short-lived probes inside the\n * inspection target. A probe carries one mode class and that mode's overrides,\n * exactly like a nested ThemeScope, so the document root and the target keep\n * their own classes and styles.\n */\nfunction captureResolvedTheme(theme: AdminUIThemeDefinition, fields: readonly ThemeTweakerField[], host: HTMLElement | null): AdminUIThemeDefinition {\n\tif (typeof document === 'undefined' || typeof window === 'undefined') return createAdminUITheme(theme);\n\t// A probe lives in the body when the document root itself is inspected.\n\tconst parent = !host || host === document.documentElement ? document.body : host;\n\tconst names = [...new Set(fields.map((field) => field.name))];\n\n\tconst capture = (mode: AdminUIThemeMode) => {\n\t\tconst probe = document.createElement('div');\n\t\tprobe.setAttribute('data-theme-tweaker-probe', mode);\n\t\tprobe.setAttribute('aria-hidden', 'true');\n\t\tprobe.hidden = true;\n\t\tprobe.className = mode;\n\t\tfor (const [name, value] of Object.entries(adminUIThemeToStyle(theme, mode))) {\n\t\t\tif (typeof value === 'string') probe.style.setProperty(name, value);\n\t\t}\n\t\tparent.append(probe);\n\t\ttry {\n\t\t\tconst computed = window.getComputedStyle(probe);\n\t\t\treturn Object.fromEntries(names.map((name) => [name, computed.getPropertyValue(name).trim()] as const).filter((entry) => entry[1].length > 0));\n\t\t} finally {\n\t\t\tprobe.remove();\n\t\t}\n\t};\n\n\tconst light = capture('light');\n\tconst dark = capture('dark');\n\tconst sharedNames = new Set(fields.filter((field) => field.scope === 'shared').map((field) => field.name));\n\treturn createAdminUITheme({\n\t\tmode: theme.mode,\n\t\tshared: Object.fromEntries(Object.entries(light).filter(([name]) => sharedNames.has(name as `--${string}`))),\n\t\tlight: Object.fromEntries(Object.entries(light).filter(([name]) => !sharedNames.has(name as `--${string}`))),\n\t\tdark: Object.fromEntries(Object.entries(dark).filter(([name]) => !sharedNames.has(name as `--${string}`))),\n\t});\n}\n\nfunction ThemeVariableField({ field, value, effectiveValue, error, onChange, onReset, strings }: ThemeVariableFieldProps) {\n\tconst id = `theme-variable-${useId().replace(/:/g, '')}`;\n\t// The control sits inside a layout row, so it names its own error text.\n\tconst errorId = `${id}-error`;\n\tconst invalid = Boolean(error);\n\tconst describedBy = invalid ? errorId : undefined;\n\tconst resetAction = (\n\t\t<Button\n\t\t\ttype=\"button\"\n\t\t\ticonOnly\n\t\t\ttone=\"secondary\"\n\t\t\tbuttonStyle=\"ghost\"\n\t\t\ticon={RotateCcw}\n\t\t\twithTooltip={strings.resetVariable}\n\t\t\taria-label={`${strings.resetVariable}: ${field.label}`}\n\t\t\tdisabled={!value}\n\t\t\tonClick={onReset}\n\t\t>\n\t\t\t<Text tag=\"span\" size=\"inherit\" className=\"sr-only\">\n\t\t\t\t{strings.resetVariable}\n\t\t\t</Text>\n\t\t</Button>\n\t);\n\tconst placeholder = field.placeholder ?? effectiveValue ?? strings.inheritValue;\n\tlet control: ReactNode;\n\n\tif (field.kind === 'color') {\n\t\tcontrol = (\n\t\t\t<Stack direction=\"horizontal\" gap=\"xs\" align=\"center\" wrap={false}>\n\t\t\t\t<ColorInput\n\t\t\t\t\tid={id}\n\t\t\t\t\taria-label={field.label}\n\t\t\t\t\taria-description={field.description}\n\t\t\t\t\taria-describedby={describedBy}\n\t\t\t\t\tinvalid={invalid}\n\t\t\t\t\tvalue={value}\n\t\t\t\t\tpreviewValue={value || effectiveValue || `var(${field.name})`}\n\t\t\t\t\tpickerAriaLabel={interpolateString(strings.chooseColor, {\n\t\t\t\t\t\tlabel: field.label,\n\t\t\t\t\t})}\n\t\t\t\t\tonValueChange={onChange}\n\t\t\t\t\tplaceholder={placeholder}\n\t\t\t\t\tclassName=\"min-w-0 flex-1\"\n\t\t\t\t/>\n\t\t\t\t{resetAction}\n\t\t\t</Stack>\n\t\t);\n\t} else if (field.control?.type === 'range') {\n\t\tconst currentValue = parseRangeValue(value || effectiveValue, field.control);\n\t\tcontrol = (\n\t\t\t<Stack gap=\"sm\">\n\t\t\t\t<SliderField\n\t\t\t\t\tid={`${id}-slider`}\n\t\t\t\t\taria-label={interpolateString(strings.adjustVariable, {\n\t\t\t\t\t\tlabel: field.label,\n\t\t\t\t\t})}\n\t\t\t\t\tvalue={currentValue}\n\t\t\t\t\tmin={field.control.min}\n\t\t\t\t\tmax={field.control.max}\n\t\t\t\t\tstep={field.control.step}\n\t\t\t\t\tonValueChange={(next) => onChange(serializeRangeValue(next, field.control as ThemeTweakerRangeControl))}\n\t\t\t\t/>\n\t\t\t\t<Stack direction=\"horizontal\" gap=\"xs\" align=\"center\" wrap={false}>\n\t\t\t\t\t<Stack gap=\"none\" className=\"w-28 max-w-full shrink-0\">\n\t\t\t\t\t\t<DecimalInput\n\t\t\t\t\t\t\tid={id}\n\t\t\t\t\t\t\taria-label={field.label}\n\t\t\t\t\t\t\taria-description={field.description}\n\t\t\t\t\t\t\taria-describedby={describedBy}\n\t\t\t\t\t\t\tinvalid={invalid}\n\t\t\t\t\t\t\tvalue={String(currentValue)}\n\t\t\t\t\t\t\tdecimalPlaces={field.control.decimalPlaces ?? 3}\n\t\t\t\t\t\t\tmin={field.control.min}\n\t\t\t\t\t\t\tmax={field.control.max}\n\t\t\t\t\t\t\tallowEmpty\n\t\t\t\t\t\t\tnormalizeOnBlur={false}\n\t\t\t\t\t\t\tendAddon={field.control.unit}\n\t\t\t\t\t\t\tonChange={(event) => {\n\t\t\t\t\t\t\t\tconst next = event.target.value.trim();\n\t\t\t\t\t\t\t\tonChange(next ? `${next}${field.control?.unit ?? ''}` : '');\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\tclassName=\"font-mono tabular-nums\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</Stack>\n\t\t\t\t\t{resetAction}\n\t\t\t\t</Stack>\n\t\t\t</Stack>\n\t\t);\n\t} else if (field.kind === 'font' || field.kind === 'shadow') {\n\t\tcontrol = (\n\t\t\t<Stack direction=\"horizontal\" gap=\"xs\" align=\"start\" wrap={false}>\n\t\t\t\t<Stack className=\"min-w-0 flex-1\">\n\t\t\t\t\t<Textarea\n\t\t\t\t\t\tid={id}\n\t\t\t\t\t\taria-label={field.label}\n\t\t\t\t\t\taria-description={field.description}\n\t\t\t\t\t\taria-describedby={describedBy}\n\t\t\t\t\t\tinvalid={invalid}\n\t\t\t\t\t\tvalue={value}\n\t\t\t\t\t\tonChange={(event) => onChange(event.target.value)}\n\t\t\t\t\t\tplaceholder={placeholder}\n\t\t\t\t\t\tminRows={2}\n\t\t\t\t\t\tautoResize\n\t\t\t\t\t\tclassName=\"font-mono\"\n\t\t\t\t\t/>\n\t\t\t\t</Stack>\n\t\t\t\t{resetAction}\n\t\t\t</Stack>\n\t\t);\n\t} else {\n\t\tcontrol = (\n\t\t\t<Stack direction=\"horizontal\" gap=\"xs\" align=\"center\" wrap={false}>\n\t\t\t\t<Input\n\t\t\t\t\tid={id}\n\t\t\t\t\taria-label={field.label}\n\t\t\t\t\taria-description={field.description}\n\t\t\t\t\taria-describedby={describedBy}\n\t\t\t\t\tinvalid={invalid}\n\t\t\t\t\tvalue={value}\n\t\t\t\t\tonChange={(event) => onChange(event.target.value)}\n\t\t\t\t\tplaceholder={placeholder}\n\t\t\t\t\tclassName=\"min-w-0 flex-1 font-mono\"\n\t\t\t\t/>\n\t\t\t\t{resetAction}\n\t\t\t</Stack>\n\t\t);\n\t}\n\n\treturn (\n\t\t<FormField\n\t\t\tlabel={\n\t\t\t\t<Stack render={<span />} direction=\"horizontal\" gap=\"sm\" align=\"baseline\" justify=\"between\" wrap className=\"min-w-0 flex-1\">\n\t\t\t\t\t<Text type=\"inherit\" tag=\"span\" size=\"inherit\" weight=\"medium\" className=\"min-w-0\">\n\t\t\t\t\t\t{field.label}\n\t\t\t\t\t</Text>\n\t\t\t\t\t<MonoValue size=\"xs\" type=\"secondary\" weight=\"regular\" className=\"max-w-full break-all\">\n\t\t\t\t\t\t{field.name}\n\t\t\t\t\t</MonoValue>\n\t\t\t\t</Stack>\n\t\t\t}\n\t\t\thtmlFor={id}\n\t\t\terror={error}\n\t\t\tsupportingTextId={errorId}\n\t\t\tclassName=\"theme-tweaker--field min-w-0 border-t border-border/60 py-row-y first:border-t-0\"\n\t\t>\n\t\t\t{control}\n\t\t</FormField>\n\t);\n}\n\nfunction DefaultThemePreview({ strings }: { strings: ThemeTweakerStrings }) {\n\treturn (\n\t\t<Card title={strings.previewTitle} description={strings.previewDescription} className=\"theme-tweaker--preview-card\">\n\t\t\t<Stack gap=\"lg\">\n\t\t\t\t<Stack direction=\"horizontal\" gap=\"sm\" wrap>\n\t\t\t\t\t<Badge tone=\"success\">{strings.previewSuccess}</Badge>\n\t\t\t\t\t<Badge tone=\"warning\">{strings.previewWarning}</Badge>\n\t\t\t\t\t<Badge tone=\"secondary\">{strings.previewContract}</Badge>\n\t\t\t\t</Stack>\n\t\t\t\t<Item\n\t\t\t\t\tvariant=\"muted\"\n\t\t\t\t\tpadding=\"default\"\n\t\t\t\t\tmedia={<Palette />}\n\t\t\t\t\tmediaVariant=\"icon\"\n\t\t\t\t\ttitle={strings.previewItemTitle}\n\t\t\t\t\tdescription={strings.previewItemDescription}\n\t\t\t\t\ttrailing={<CheckCircle2 className=\"size-icon text-success\" />}\n\t\t\t\t/>\n\t\t\t\t<FormField label={strings.previewFieldLabel}>\n\t\t\t\t\t<Input placeholder={strings.previewFieldPlaceholder} />\n\t\t\t\t</FormField>\n\t\t\t\t<Button tone=\"primary\" type=\"button\">{strings.previewAction}</Button>\n\t\t\t</Stack>\n\t\t</Card>\n\t);\n}\n\nfunction updateThemeVariable(theme: AdminUIThemeDefinition, field: ThemeTweakerField, rawValue: string): AdminUIThemeDefinition {\n\tconst bucket = field.scope === 'shared' ? 'shared' : theme.mode;\n\tconst nextBucket = { ...theme[bucket] };\n\tif (rawValue.trim().length === 0) {\n\t\tdelete nextBucket[field.name];\n\t} else {\n\t\tnextBucket[field.name] = rawValue;\n\t}\n\treturn {\n\t\t...theme,\n\t\t[bucket]: nextBucket,\n\t};\n}\n\nexport const ThemeTweaker = forwardRef<HTMLDivElement, ThemeTweakerProps>(function ThemeTweaker(\n\t{\n\t\tvalue,\n\t\tdefaultValue,\n\t\tonValueChange,\n\t\tonModeChange,\n\t\tfields = defaultThemeTweakerFields,\n\t\ttarget = 'self',\n\t\tapply = true,\n\t\tmanageModeClass = true,\n\t\tpreview,\n\t\tfileName = 'admin-ui-theme.css',\n\t\tconfig,\n\t\tdefaultConfig,\n\t\tonConfigChange,\n\t\tproviderFileName = 'admin-ui.config.ts',\n\t\tshowIntro = true,\n\t\tselectors,\n\t\tonExport,\n\t\tonCopy,\n\t\tonReset,\n\t\tonError,\n\t\tactionsSlot,\n\t\tstrings: stringsProp,\n\t\tclassName,\n\t\t...props\n\t},\n\tforwardedRef,\n) {\n\tconst strings = useStrings(defaultThemeTweakerStrings, stringsProp);\n\tconst [internalTheme, setInternalTheme] = useState(() => createAdminUITheme(defaultValue));\n\tconst theme = useMemo(() => (value ? createAdminUITheme(value) : internalTheme), [internalTheme, value]);\n\tconst [internalConfig, setInternalConfig] = useState(() => createSerializableUIConfig(defaultConfig));\n\tconst providerConfig = useMemo(() => createSerializableUIConfig(config ?? internalConfig), [config, internalConfig]);\n\tconst [group, setGroup] = useState<ThemeTweakerGroup>('colors');\n\tconst [search, setSearch] = useState('');\n\tconst [derivePalette, setDerivePalette] = useState(true);\n\tconst [baseTypeSize, setBaseTypeSize] = useState(DEFAULT_BASE_TYPE_SIZE);\n\tconst [typeRatio, setTypeRatio] = useState(DEFAULT_TYPE_RATIO);\n\tconst [elevationIntensity, setElevationIntensity] = useState(DEFAULT_ELEVATION_INTENSITY);\n\tconst [actionStatus, setActionStatus] = useState<ActionStatus>('idle');\n\t// useOverlayVisibility rather than a bare useState: it is the package's own\n\t// overlay state hook, and `overlayProps` is exactly the open/onOpenChange\n\t// pair ActionDialog wants, so the wiring cannot drift out of step.\n\tconst exportDialog = useOverlayVisibility();\n\tconst [exporting, setExporting] = useState(false);\n\tconst selfRef = useRef<HTMLDivElement>(null);\n\tconst blockedStatusId = `theme-tweaker-status-${useId().replace(/:/g, '')}`;\n\tuseImperativeHandle(forwardedRef, () => selfRef.current as HTMLDivElement);\n\n\tuseAppliedTheme({\n\t\tapply,\n\t\tmanageModeClass,\n\t\tselfRef,\n\t\ttarget,\n\t\ttheme,\n\t});\n\tconst [resolvedTheme, setResolvedTheme] = useState<AdminUIThemeDefinition>(() => createAdminUITheme(theme));\n\tconst [effectiveValues, setEffectiveValues] = useState<Record<string, string>>({});\n\n\tuseEffect(() => {\n\t\tif (typeof window === 'undefined') return;\n\t\t// One pass after a burst of edits, not one per keystroke.\n\t\tconst timeout = window.setTimeout(() => {\n\t\t\tconst inspectionTarget = resolveInspectionTarget(target, selfRef.current);\n\t\t\tif (!inspectionTarget) return;\n\t\t\tconst computed = window.getComputedStyle(inspectionTarget);\n\t\t\tsetEffectiveValues(Object.fromEntries(fields.map((field) => [field.name, computed.getPropertyValue(field.name).trim()])));\n\t\t\tsetResolvedTheme(captureResolvedTheme(theme, fields, inspectionTarget));\n\t\t}, RESOLVE_DELAY_MS);\n\t\treturn () => window.clearTimeout(timeout);\n\t}, [apply, fields, target, theme]);\n\n\tconst serialization = useMemo(() => {\n\t\ttry {\n\t\t\tconst exportTheme = createAdminUITheme({\n\t\t\t\tmode: theme.mode,\n\t\t\t\tshared: { ...resolvedTheme.shared, ...theme.shared },\n\t\t\t\tlight: { ...resolvedTheme.light, ...theme.light },\n\t\t\t\tdark: { ...resolvedTheme.dark, ...theme.dark },\n\t\t\t});\n\t\t\tconst artifact = createThemeTweakerExportArtifact(\n\t\t\t\ttheme,\n\t\t\t\tfileName,\n\t\t\t\t{ selectors },\n\t\t\t\t{\n\t\t\t\t\tresolvedTheme: exportTheme,\n\t\t\t\t\tproviderConfig,\n\t\t\t\t\tproviderFileName,\n\t\t\t\t},\n\t\t\t);\n\t\t\treturn {\n\t\t\t\tartifact,\n\t\t\t\terror: null,\n\t\t\t};\n\t\t} catch (error) {\n\t\t\treturn {\n\t\t\t\tartifact: null,\n\t\t\t\terror,\n\t\t\t};\n\t\t}\n\t}, [fileName, providerConfig, providerFileName, resolvedTheme, selectors, theme]);\n\tconst { artifact, error: serializationError } = serialization;\n\tconst cssText = artifact?.cssText ?? `/* ${strings.invalidTheme} */\\n`;\n\t// Every bucket counts: an invalid override in the other mode blocks the export too.\n\tconst hasInvalidOverride = useMemo(\n\t\t() => fields.some((field) => (field.scope === 'shared' ? [theme.shared] : [theme.light, theme.dark])\n\t\t\t.some((bucket) => themeValueError(field, bucket[field.name], strings) !== undefined)),\n\t\t[fields, strings, theme],\n\t);\n\tconst exportBlocked = Boolean(serializationError) || hasInvalidOverride;\n\tconst overrideCount = useMemo(() => countAdminUIThemeOverrides(theme), [theme]);\n\tconst normalizedSearch = search.trim().toLowerCase();\n\tconst visibleFields = useMemo(\n\t\t() =>\n\t\t\tfields.filter((field) => {\n\t\t\t\tif (!normalizedSearch && field.group !== group) return false;\n\t\t\t\tif (!normalizedSearch) return true;\n\t\t\t\treturn [field.name, field.label, field.description].filter(Boolean).some((part) => part?.toLowerCase().includes(normalizedSearch));\n\t\t\t}),\n\t\t[fields, group, normalizedSearch],\n\t);\n\tconst visibleSections = useMemo(() => {\n\t\tconst sections = new Map<string, VisibleThemeSection>();\n\t\tfor (const field of visibleFields) {\n\t\t\tconst key = `${field.group}:${field.section}`;\n\t\t\tconst existing = sections.get(key);\n\t\t\tif (existing) {\n\t\t\t\texisting.fields.push(field);\n\t\t\t} else {\n\t\t\t\tsections.set(key, {\n\t\t\t\t\tgroup: field.group,\n\t\t\t\t\tsection: field.section,\n\t\t\t\t\tfields: [field],\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\t// Brand controls are the starting point; retain caller ordering within every section.\n\t\treturn [...sections.values()].sort((a, b) => Number(b.section === 'brand-actions') - Number(a.section === 'brand-actions'));\n\t}, [visibleFields]);\n\n\tconst commit = (next: AdminUIThemeDefinition) => {\n\t\tif (value === undefined) setInternalTheme(next);\n\t\tonValueChange?.(next);\n\t\tsetActionStatus('idle');\n\t};\n\n\tconst commitConfig = (next: ReturnType<typeof createSerializableUIConfig>) => {\n\t\tif (config === undefined) setInternalConfig(next);\n\t\tonConfigChange?.(next);\n\t\tsetActionStatus('idle');\n\t};\n\n\tconst applyModeRecipe = (overrides: AdminUIThemeOverrides) => {\n\t\tcommit({\n\t\t\t...theme,\n\t\t\t[theme.mode]: { ...theme[theme.mode], ...overrides },\n\t\t});\n\t};\n\n\tconst applySharedRecipe = (overrides: AdminUIThemeOverrides) => {\n\t\tcommit({\n\t\t\t...theme,\n\t\t\tshared: { ...theme.shared, ...overrides },\n\t\t});\n\t};\n\n\tconst setMode = (mode: AdminUIThemeMode) => {\n\t\tif (mode === theme.mode) return;\n\t\tcommit({ ...theme, mode });\n\t\tonModeChange?.(mode);\n\t};\n\n\tconst exportThemeArtifact = async () => {\n\t\ttry {\n\t\t\tif (serializationError) throw serializationError;\n\t\t\tsetExporting(true);\n\t\t\tif (!artifact) throw new Error(strings.invalidTheme);\n\t\t\tif (onExport) {\n\t\t\t\tawait onExport(artifact);\n\t\t\t} else {\n\t\t\t\tdownloadAdminUITheme(artifact);\n\t\t\t}\n\t\t\tsetActionStatus('exported');\n\t\t} catch (error) {\n\t\t\tsetActionStatus('exportFailed');\n\t\t\tonError?.(error);\n\t\t\tif (import.meta.env?.DEV) {\n\t\t\t\tconsole.warn('[ThemeTweaker] theme export failed.', error);\n\t\t\t}\n\t\t} finally {\n\t\t\tsetExporting(false);\n\t\t}\n\t};\n\n\tconst copyText = async (text: string) => {\n\t\ttry {\n\t\t\tif (onCopy) await onCopy(text);\n\t\t\telse if (typeof navigator !== 'undefined' && navigator.clipboard) await navigator.clipboard.writeText(text);\n\t\t\telse throw new Error(strings.clipboardUnavailable ?? defaultThemeTweakerStrings.clipboardUnavailable);\n\t\t\tsetActionStatus('copied');\n\t\t} catch (error) {\n\t\t\tsetActionStatus('copyFailed');\n\t\t\tonError?.(error);\n\t\t\tif (import.meta.env?.DEV) console.warn('[ThemeTweaker] copy failed.', error);\n\t\t}\n\t};\n\n\tconst exportProviderConfig = () => {\n\t\ttry {\n\t\t\tif (!artifact) throw serializationError ?? new Error(strings.invalidTheme);\n\t\t\tdownloadAdminUITextFile({\n\t\t\t\tfileName: artifact.providerFileName,\n\t\t\t\ttext: artifact.providerConfigText,\n\t\t\t\tmimeType: 'text/typescript;charset=utf-8',\n\t\t\t});\n\t\t\tsetActionStatus('exported');\n\t\t} catch (error) {\n\t\t\tsetActionStatus('exportFailed');\n\t\t\tonError?.(error);\n\t\t\tif (import.meta.env?.DEV) console.warn('[ThemeTweaker] provider export failed.', error);\n\t\t}\n\t};\n\n\tconst reset = () => {\n\t\tconst previous = theme;\n\t\tconst next = createAdminUITheme({ mode: theme.mode });\n\t\tcommit(next);\n\t\t// The recipe sliders describe overrides that no longer exist.\n\t\tsetBaseTypeSize(DEFAULT_BASE_TYPE_SIZE);\n\t\tsetTypeRatio(DEFAULT_TYPE_RATIO);\n\t\tsetElevationIntensity(DEFAULT_ELEVATION_INTENSITY);\n\t\tonReset?.(previous);\n\t\tsetActionStatus('idle');\n\t};\n\tconst statusFailed = exportBlocked || actionStatus === 'copyFailed' || actionStatus === 'exportFailed';\n\tconst statusMessage = exportBlocked\n\t\t? strings.invalidTheme\n\t\t: actionStatus === 'copied'\n\t\t\t? strings.copiedStatus\n\t\t\t: actionStatus === 'exported'\n\t\t\t\t? strings.exportedStatus\n\t\t\t\t: actionStatus === 'copyFailed'\n\t\t\t\t\t? strings.copyFailedStatus ?? defaultThemeTweakerStrings.copyFailedStatus\n\t\t\t\t\t: actionStatus === 'exportFailed'\n\t\t\t\t\t\t? strings.exportFailedStatus ?? defaultThemeTweakerStrings.exportFailedStatus\n\t\t\t\t\t\t: null;\n\tconst recipeControls =\n\t\tgroup === 'colors' ? (\n\t\t\t<ToggleField className=\"theme-tweaker--recipe\" label={strings.autoPalette} description={strings.autoPaletteDescription} value={derivePalette} onValueChange={setDerivePalette} />\n\t\t) : group === 'typography' ? (\n\t\t\t<Card title={strings.typeRecipeTitle} description={strings.typeRecipeDescription} surface=\"flat\" padding=\"none\" className=\"theme-tweaker--recipe\">\n\t\t\t\t<Grid columns={1} gap={compositionRhythm.related} className=\"@2xl/theme-tweaker-controls:grid-cols-2\">\n\t\t\t\t\t<FormField label={strings.baseTypeSize}>\n\t\t\t\t\t\t<SliderField\n\t\t\t\t\t\t\taria-label={strings.baseTypeSize}\n\t\t\t\t\t\t\tvalue={baseTypeSize}\n\t\t\t\t\t\t\tmin={14}\n\t\t\t\t\t\t\tmax={20}\n\t\t\t\t\t\t\tstep={1}\n\t\t\t\t\t\t\tonValueChange={(next) => {\n\t\t\t\t\t\t\t\tsetBaseTypeSize(next);\n\t\t\t\t\t\t\t\tapplySharedRecipe(\n\t\t\t\t\t\t\t\t\tderiveAdminUITypeScale({\n\t\t\t\t\t\t\t\t\t\tbaseSize: next,\n\t\t\t\t\t\t\t\t\t\tratio: typeRatio,\n\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</FormField>\n\t\t\t\t\t<FormField label={strings.typeRatio}>\n\t\t\t\t\t\t<SliderField\n\t\t\t\t\t\t\taria-label={strings.typeRatio}\n\t\t\t\t\t\t\tvalue={typeRatio}\n\t\t\t\t\t\t\tmin={1.125}\n\t\t\t\t\t\t\tmax={1.333}\n\t\t\t\t\t\t\tstep={0.01}\n\t\t\t\t\t\t\tonValueChange={(next) => {\n\t\t\t\t\t\t\t\tsetTypeRatio(next);\n\t\t\t\t\t\t\t\tapplySharedRecipe(\n\t\t\t\t\t\t\t\t\tderiveAdminUITypeScale({\n\t\t\t\t\t\t\t\t\t\tbaseSize: baseTypeSize,\n\t\t\t\t\t\t\t\t\t\tratio: next,\n\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</FormField>\n\t\t\t\t</Grid>\n\t\t\t</Card>\n\t\t) : group === 'shape' ? (\n\t\t\t<Card title={strings.elevationRecipeTitle} description={strings.elevationRecipeDescription} surface=\"flat\" padding=\"none\" className=\"theme-tweaker--recipe\">\n\t\t\t\t<FormField label={strings.elevationIntensity}>\n\t\t\t\t\t<SliderField\n\t\t\t\t\t\taria-label={strings.elevationIntensity}\n\t\t\t\t\t\tvalue={elevationIntensity}\n\t\t\t\t\t\tmin={0}\n\t\t\t\t\t\tmax={1}\n\t\t\t\t\t\tstep={0.05}\n\t\t\t\t\t\tonValueChange={(next) => {\n\t\t\t\t\t\t\tsetElevationIntensity(next);\n\t\t\t\t\t\t\tapplyModeRecipe(deriveAdminUIElevation({ intensity: next }));\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t</FormField>\n\t\t\t</Card>\n\t\t) : null;\n\n\tconst content = (\n\t\t<div className={cn('grid min-w-0 grid-cols-1 gap-space-xl theme-tweaker--layout', preview !== false && '@3xl/theme-tweaker:grid-cols-2')}>\n\t\t\t<Stack gap=\"lg\" className=\"theme-tweaker--controls @container/theme-tweaker-controls min-w-0\">\n\t\t\t\t<Stack gap=\"lg\" className=\"theme-tweaker--header shrink-0\">\n\t\t\t\t\t{showIntro ? (\n\t\t\t\t\t\t<Stack gap=\"normal\" className=\"theme-tweaker--intro\">\n\t\t\t\t\t\t\t<Stack direction=\"horizontal\" gap=\"sm\" align=\"center\" wrap>\n\t\t\t\t\t\t\t\t<Heading tag=\"h2\" className=\"theme-tweaker--title text-inherit\">\n\t\t\t\t\t\t\t\t\t{strings.title}\n\t\t\t\t\t\t\t\t</Heading>\n\t\t\t\t\t\t\t\t<Badge tone=\"secondary\">\n\t\t\t\t\t\t\t\t\t{interpolateString(strings.changedCount, {\n\t\t\t\t\t\t\t\t\t\tcount: overrideCount,\n\t\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t\t</Badge>\n\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t\t<Text type=\"secondary\" className=\"theme-tweaker--description\">\n\t\t\t\t\t\t\t\t{strings.description}\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t</Stack>\n\t\t\t\t\t) : null}\n\n\t\t\t\t\t<Stack\n\t\t\t\t\t\tdirection=\"horizontal\"\n\t\t\t\t\t\tjustify=\"between\"\n\t\t\t\t\t\talign=\"center\"\n\t\t\t\t\t\twrap\n\t\t\t\t\t\tgap=\"sm\"\n\t\t\t\t\t\tclassName=\"theme-tweaker--toolbar\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<Stack direction=\"horizontal\" gap=\"sm\" align=\"center\" wrap>\n\t\t\t\t\t\t\t<Tabs value={theme.mode} onValueChange={(next) => setMode(next as AdminUIThemeMode)}>\n\t\t\t\t\t\t\t\t<TabsList>\n\t\t\t\t\t\t\t\t\t<TabsTrigger value=\"light\">\n\t\t\t\t\t\t\t\t\t\t<Sun className=\"size-icon-sm\" />\n\t\t\t\t\t\t\t\t\t\t{strings.lightMode}\n\t\t\t\t\t\t\t\t\t</TabsTrigger>\n\t\t\t\t\t\t\t\t\t<TabsTrigger value=\"dark\">\n\t\t\t\t\t\t\t\t\t\t<Moon className=\"size-icon-sm\" />\n\t\t\t\t\t\t\t\t\t\t{strings.darkMode}\n\t\t\t\t\t\t\t\t\t</TabsTrigger>\n\t\t\t\t\t\t\t\t</TabsList>\n\t\t\t\t\t\t\t</Tabs>\n\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t<Stack direction=\"horizontal\" gap=\"xs\" align=\"center\" justify=\"end\" wrap={false} className=\"theme-tweaker--actions min-w-0\">\n\t\t\t\t\t\t\t{/* The reason Export is unavailable sits beside it, not inside the dialog it cannot open. */}\n\t\t\t\t\t\t\t{exportBlocked ? (\n\t\t\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\t\t\tid={blockedStatusId}\n\t\t\t\t\t\t\t\t\ttag=\"span\"\n\t\t\t\t\t\t\t\t\tsize=\"xs\"\n\t\t\t\t\t\t\t\t\ttype=\"error\"\n\t\t\t\t\t\t\t\t\trole=\"status\"\n\t\t\t\t\t\t\t\t\taria-live=\"polite\"\n\t\t\t\t\t\t\t\t\tclassName=\"theme-tweaker--toolbar-status min-w-0\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{strings.invalidTheme}\n\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t<Button tone=\"primary\"\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\tdisabled={exportBlocked}\n\t\t\t\t\t\t\t\taria-describedby={exportBlocked ? blockedStatusId : undefined}\n\t\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\t\tsetActionStatus('idle');\n\t\t\t\t\t\t\t\t\texportDialog.show();\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{strings.export}\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t{actionsSlot}\n\t\t\t\t\t\t</Stack>\n\t\t\t\t\t</Stack>\n\n\t\t\t\t\t<FormField\n\t\t\t\t\t\tlabel={\n\t\t\t\t\t\t\t<Text tag=\"span\" size=\"inherit\" className=\"sr-only\">\n\t\t\t\t\t\t\t\t{strings.searchLabel}\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t}\n\t\t\t\t\t\tclassName=\"theme-tweaker--search\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<Input\n\t\t\t\t\t\t\tvalue={search}\n\t\t\t\t\t\t\tonChange={(event) => setSearch(event.target.value)}\n\t\t\t\t\t\t\tplaceholder={strings.searchPlaceholder}\n\t\t\t\t\t\t\tstartIcon={Search}\n\t\t\t\t\t\t\tclearable\n\t\t\t\t\t\t\tonClear={() => setSearch('')}\n\t\t\t\t\t\t\taria-description={strings.searchHint}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</FormField>\n\t\t\t\t</Stack>\n\n\t\t\t\t<Stack gap=\"lg\" className=\"theme-tweaker--workspace min-h-0\">\n\t\t\t\t\t<nav\n\t\t\t\t\t\taria-label={strings.groupNavigationLabel}\n\t\t\t\t\t\tclassName=\"theme-tweaker--navigation min-w-0\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<Tabs\n\t\t\t\t\t\t\tvalue={group}\n\t\t\t\t\t\t\tonValueChange={(nextGroup) => {\n\t\t\t\t\t\t\t\tsetSearch('');\n\t\t\t\t\t\t\t\tsetGroup(nextGroup as ThemeTweakerGroup);\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\tclassName=\"w-full\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<TabsList scrollable scrollStrings={{ previous: strings.previousGroup, next: strings.nextGroup }} className=\"theme-tweaker--group-list\">\n\t\t\t\t\t\t\t\t\t{GROUPS.map((nextGroup) => {\n\t\t\t\t\t\t\t\t\t\tconst GroupIcon = GROUP_ICONS[nextGroup];\n\t\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t\t<TabsTrigger\n\t\t\t\t\t\t\t\t\t\t\t\tkey={nextGroup}\n\t\t\t\t\t\t\t\t\t\t\t\tvalue={nextGroup}\n\t\t\t\t\t\t\t\t\t\t\t\tonClick={() => setSearch('')}\n\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"theme-tweaker--group-trigger\"\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t<GroupIcon aria-hidden=\"true\" />\n\t\t\t\t\t\t\t\t\t\t\t\t<Text type=\"inherit\"\n\t\t\t\t\t\t\t\t\t\t\t\t\ttag=\"span\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tsize=\"inherit\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tweight=\"medium\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"min-w-0 flex-1 truncate text-left\"\n\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t{strings.groups[nextGroup]}\n\t\t\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t\t\t</TabsTrigger>\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t\t</TabsList>\n\t\t\t\t\t\t</Tabs>\n\t\t\t\t\t</nav>\n\n\t\t\t\t\t<Stack gap=\"lg\" className=\"theme-tweaker--body theme-tweaker--editor min-h-0 min-w-0\">\n\t\t\t\t\t\t<Stack gap=\"normal\" className=\"theme-tweaker--editor-heading\">\n\t\t\t\t\t\t\t<Stack direction=\"horizontal\" gap=\"sm\" align=\"center\" wrap>\n\t\t\t\t\t\t\t\t<Heading className=\"text-inherit\" tag=\"h3\">{normalizedSearch ? strings.allGroups : strings.groups[group]}</Heading>\n\t\t\t\t\t\t\t\t{!showIntro ? <Badge tone=\"secondary\">{interpolateString(strings.changedCount, { count: overrideCount })}</Badge> : null}\n\t\t\t\t\t\t\t\t{normalizedSearch ? (\n\t\t\t\t\t\t\t\t\t<Badge tone=\"secondary\" role=\"status\" aria-live=\"polite\">\n\t\t\t\t\t\t\t\t\t\t{interpolateString(strings.searchResults, { count: visibleFields.length })}\n\t\t\t\t\t\t\t\t\t</Badge>\n\t\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t\t<Text size=\"xs\" type=\"secondary\">\n\t\t\t\t\t\t\t\t{normalizedSearch ? strings.searchHint : strings.groupDescriptions[group]}\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t{!normalizedSearch ? recipeControls : null}\n\t\t\t\t\t\t{group === 'defaults' && !normalizedSearch ? (\n\t\t\t\t\t\t\t<ThemeProviderSettings config={providerConfig} onChange={commitConfig} strings={strings.providerSettings} />\n\t\t\t\t\t\t) : visibleSections.length > 0 ? (\n\t\t\t\t\t\t\t<SmartAccordion\n\t\t\t\t\t\t\t\tkey={`${group}:${normalizedSearch}`}\n\t\t\t\t\t\t\t\tmultiple\n\t\t\t\t\t\t\t\tdefaultValue={[`${visibleSections[0].group}:${visibleSections[0].section}`]}\n\t\t\t\t\t\t\t\tvariant=\"bordered\"\n\t\t\t\t\t\t\t\ticonStyle=\"none\"\n\t\t\t\t\t\t\t\tclassName=\"theme-tweaker--sections shrink-0\"\n\t\t\t\t\t\t\t\titemClassName=\"theme-tweaker--section\"\n\t\t\t\t\t\t\t\titems={visibleSections.map((visibleSection) => {\n\t\t\t\t\t\t\t\t\tconst scopes = new Set(visibleSection.fields.map((field) => field.scope));\n\t\t\t\t\t\t\t\t\tconst scopeLabel =\n\t\t\t\t\t\t\t\t\t\tscopes.size > 1\n\t\t\t\t\t\t\t\t\t\t\t? strings.mixedScope\n\t\t\t\t\t\t\t\t\t\t\t: scopes.has('shared')\n\t\t\t\t\t\t\t\t\t\t\t\t? strings.sharedScope\n\t\t\t\t\t\t\t\t\t\t\t\t: theme.mode === 'light'\n\t\t\t\t\t\t\t\t\t\t\t\t\t? strings.lightMode\n\t\t\t\t\t\t\t\t\t\t\t\t\t: strings.darkMode;\n\t\t\t\t\t\t\t\t\tconst sectionLabel = normalizedSearch\n\t\t\t\t\t\t\t\t\t\t? interpolateString(strings.groupSectionLabel, {\n\t\t\t\t\t\t\t\t\t\t\t\tgroup: strings.groups[visibleSection.group],\n\t\t\t\t\t\t\t\t\t\t\t\tsection: strings.sections[visibleSection.section],\n\t\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t\t: strings.sections[visibleSection.section];\n\n\t\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\t\tvalue: `${visibleSection.group}:${visibleSection.section}`,\n\t\t\t\t\t\t\t\t\t\ttitle: sectionLabel,\n\t\t\t\t\t\t\t\t\t\tdescription: interpolateString(strings.variableCount, {\n\t\t\t\t\t\t\t\t\t\t\tcount: visibleSection.fields.length,\n\t\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t\t\tbadge: <Badge tone=\"secondary\">{scopeLabel}</Badge>,\n\t\t\t\t\t\t\t\t\t\tcontent: (\n\t\t\t\t\t\t\t\t\t\t\t<Stack gap=\"none\" className=\"theme-tweaker--fields\">\n\t\t\t\t\t\t\t\t\t\t\t\t{visibleSection.fields.map((field) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\tconst bucket = field.scope === 'shared' ? 'shared' : theme.mode;\n\t\t\t\t\t\t\t\t\t\t\t\t\tconst fieldValue = theme[bucket][field.name] ?? '';\n\t\t\t\t\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<ThemeVariableField\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tkey={field.name}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfield={field}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvalue={fieldValue}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\teffectiveValue={effectiveValues[field.name] ?? ''}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\terror={themeValueError(field, fieldValue, strings)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tstrings={strings}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tonChange={(next) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tif (field.name === '--primary' && derivePalette && next.trim()) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tapplyModeRecipe(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tderiveAdminUIPalette({\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tprimary: next,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tmode: theme.mode,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcommit(updateThemeVariable(theme, field, next));\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tonReset={() => commit(updateThemeVariable(theme, field, ''))}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<EmptyState\n\t\t\t\t\t\t\t\ttitle={strings.emptySearch}\n\t\t\t\t\t\t\t\tdescription={false}\n\t\t\t\t\t\t\t\tsurface=\"wash\"\n\t\t\t\t\t\t\t\tpadding=\"sm\"\n\t\t\t\t\t\t\t\tclassName=\"theme-tweaker--empty\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</Stack>\n\t\t\t\t</Stack>\n\t\t\t</Stack>\n\n\t\t\t{preview !== false ? <Stack className=\"theme-tweaker--preview min-w-0 self-start\">{preview ?? <DefaultThemePreview strings={strings} />}</Stack> : null}\n\n\t\t\t{/*\n\t\t\t * Presented through ActionDialog rather than a raw Dialog:\n\t\t\t * features/overlays is the package's single overlay surface. The two\n\t\t\t * things this dialog needs beyond the defaults are seams on it —\n\t\t\t * `surfaceStyle` carries the edited theme's variables onto the surface\n\t\t\t * so the export previews in the theme being edited, and `footer`\n\t\t\t * replaces the default action pair with reset/close.\n\t\t\t */}\n\t\t\t<ActionDialog\n\t\t\t\t{...exportDialog.overlayProps}\n\t\t\t\ttitle={strings.exportDialogTitle}\n\t\t\t\tdescription={strings.exportDialogDescription}\n\t\t\t\tshowCloseButton={false}\n\t\t\t\tshowCancel={false}\n\t\t\t\tshowConfirm={false}\n\t\t\t\tsurfaceStyle={adminUIThemeToStyle(theme)}\n\t\t\t\tclassName={cn('theme-tweaker--export-dialog sm:max-w-4xl', theme.mode)}\n\t\t\t\tfooter={(\n\t\t\t\t\t<Stack\n\t\t\t\t\t\tdirection=\"horizontal\"\n\t\t\t\t\t\talign=\"center\"\n\t\t\t\t\t\tjustify=\"between\"\n\t\t\t\t\t\tclassName=\"theme-tweaker--export-footer w-full\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\ttone=\"secondary\"\n\t\t\t\t\t\t\tbuttonStyle=\"ghost\"\n\t\t\t\t\t\t\ticon={RotateCcw}\n\t\t\t\t\t\t\tdisabled={overrideCount === 0}\n\t\t\t\t\t\t\tonClick={reset}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{strings.reset}\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t<Button onClick={exportDialog.hide}>{strings.close}</Button>\n\t\t\t\t\t</Stack>\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t<Stack gap=\"xl\" className=\"theme-tweaker--export-body\">\n\t\t\t\t\t<ThemeExportArtifact\n\t\t\t\t\t\ttitle={strings.cssOutputLabel}\n\t\t\t\t\t\tdescription={strings.cssOutputDescription}\n\t\t\t\t\t\tcode={cssText}\n\t\t\t\t\t\tcopyLabel={strings.copy}\n\t\t\t\t\t\tdownloadLabel={exporting ? strings.exportPending : strings.downloadCss}\n\t\t\t\t\t\tdownloading={exporting}\n\t\t\t\t\t\tonCopy={() => void copyText(cssText)}\n\t\t\t\t\t\tonDownload={() => void exportThemeArtifact()}\n\t\t\t\t\t/>\n\t\t\t\t\t<ThemeExportArtifact\n\t\t\t\t\t\ttitle={strings.providerOutputLabel}\n\t\t\t\t\t\tdescription={strings.providerOutputDescription}\n\t\t\t\t\t\tcode={artifact?.providerConfigText ?? ''}\n\t\t\t\t\t\tcopyLabel={strings.copyProvider}\n\t\t\t\t\t\tdownloadLabel={strings.downloadProvider}\n\t\t\t\t\t\tonCopy={() => void copyText(artifact?.providerConfigText ?? '')}\n\t\t\t\t\t\tonDownload={exportProviderConfig}\n\t\t\t\t\t/>\n\t\t\t\t\t{statusMessage ? (\n\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\ttag=\"div\"\n\t\t\t\t\t\t\tsize=\"xs\"\n\t\t\t\t\t\t\ttype={statusFailed ? 'error' : 'secondary'}\n\t\t\t\t\t\t\trole={statusFailed ? 'alert' : 'status'}\n\t\t\t\t\t\t\taria-live=\"polite\"\n\t\t\t\t\t\t\tclassName=\"theme-tweaker--status\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{statusMessage}\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t) : null}\n\t\t\t\t</Stack>\n\t\t\t</ActionDialog>\n\t\t</div>\n\t);\n\n\tif (target === 'self') {\n\t\treturn (\n\t\t\t<ThemeScope\n\t\t\t\t{...props}\n\t\t\t\tref={selfRef}\n\t\t\t\ttheme={apply ? theme : createAdminUITheme({ mode: theme.mode })}\n\t\t\t\tclassName={cn('theme-tweaker--component @container/theme-tweaker bg-background text-foreground', className)}\n\t\t\t>\n\t\t\t\t{content}\n\t\t\t</ThemeScope>\n\t\t);\n\t}\n\n\treturn (\n\t\t<div {...props} ref={selfRef} className={cn('theme-tweaker--component @container/theme-tweaker', className)}>\n\t\t\t{content}\n\t\t</div>\n\t);\n});\n\nThemeTweaker.displayName = 'ThemeTweaker';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkBA,IAAamC,KAAsD;CAClE,QAAQ;CACR,OAAO;CACP,MAAM;AACP,GAEMC,KAAwB,wBAGxBC,KAA2B,sBAE3BC,IAA0B;AAEhC,SAASC,GAAoB,GAAwB;CACpD,OAAO,CAAC,GAAGC,CAAK,CAAC,CAAC,MAAM,MAAc;EACrC,IAAMC,IAAOC,EAAU,WAAW,CAAC;EACnC,OAAOD,IAAO,MAAMA,MAAS;CAC9B,CAAC;AACF;AAGA,SAASE,GAAsB,GAAwB;CACtD,IAAIC,IAAuB,MACvBC,IAAQ;CACZ,KAAK,IAAMH,KAAaF,GACvB,IAAII,GACC,AAAAF,MAAcE,MAAO,IAAQ;MAC3B,IAAIF,MAAc,QAAOA,MAAc,KAC7C,IAAQA;MACF,IAAIA,MAAc,KACxB,KAAS;MACH,IAAIA,MAAc,QACxB,KACIG,IAAQ,IAAG,OAAO;CAGxB,OAAOD,MAAU,QAAQC,MAAU;AACpC;AAOA,SAAgBC,EAA0B,GAA2B;CACpE,IAAMN,IAAQO,EAAS,KAAK;CAC5B,OAAOV,GAAyB,KAAKG,CAAK,KAAKD,GAAoBC,CAAK,KAAK,CAACG,GAAsBH,CAAK;AAC1G;AAMA,SAAgBQ,GAAyB,GAA2B;CACnE,IAAMR,IAAQO,EAAS,KAAK;CAE5B,OADIP,EAAM,WAAW,KAAK,OAAO,MAAQ,OAAe,OAAO,IAAI,YAAa,cACzE,IAAI,SAAS,SAASA,CAAK;AACnC;AAEA,SAAgBS,EACf,IAAyC,CAAC,GACjB;CACzB,OAAO;EACN,MAAMT,EAAM,QAAQ;EACpB,QAAQ,EAAE,GAAGA,EAAM,OAAO;EAC1B,OAAO,EAAE,GAAGA,EAAM,MAAM;EACxB,MAAM,EAAE,GAAGA,EAAM,KAAK;CACvB;AACD;AAEA,SAAgBU,GACf,GACoC;CACpC,OAAOd,GAAsB,KAAKI,CAAK;AACxC;AAEA,SAASW,EACR,GACA,IAAS,IACmC;CAC5C,OAAO,OAAO,QAAQC,CAAS,CAAC,CAC9B,QAAQ,MACR,OAAOC,EAAM,MAAO,YAAYA,EAAM,EAAE,CAAC,KAAK,CAAC,CAAC,SAAS,CACzD,CAAC,CACD,SAAS,CAACC,GAAMP,OAAc;EAC9B,IAAI,CAACG,GAA2BI,CAAI,GAAG;GACtC,IAAI,CAACC,GAAQ,OAAO,CAAC;GACrB,MAAU,UAAU,8BAA8BD,GAAM;EACzD;EACA,IAAMd,IAAQO,EAAS,KAAK;EAC5B,IAAID,EAA0BN,CAAK,GAAG;GACrC,IAAI,CAACe,GAAQ,OAAO,CAAC;GACrB,MAAU,UAAU,wBAAwBD,EAAK,EAAE;EACpD;EACA,OAAO,CAAC,CAACA,GAAMd,CAAK,CAAuC;CAC5D,CAAC,CAAC,CACD,MAAM,CAACgB,IAAO,CAACC,OAAWD,EAAK,cAAcC,CAAK,CAAC;AACtD;AAEA,SAASC,EAAiB,GAAkB,GAA4C;CACvF,IAAMlB,IAAQmB,EAAS,KAAK;CAC5B,IAAInB,EAAM,WAAW,KAAKF,EAAwB,KAAKE,CAAK,GAC3D,MAAU,UAAU,WAAWoB,EAAM,iBAAiB;CAEvD,OAAOpB;AACR;AAEA,SAASqB,EACR,GACA,GACgB;CAChB,IAAMC,IAAUX,EAAiBC,CAAS;CAE1C,OADIU,EAAQ,WAAW,IAAU,OAC1B;EACN,GAAGH,EAAS;EACZ,GAAGG,EAAQ,KAAK,CAACR,GAAMd,OAAW,KAAKc,EAAK,IAAId,EAAM,EAAE;EACxD;CACD,CAAC,CAAC,KAAK,IAAI;AACZ;AAQA,SAAgBuB,EACf,GACA,IAAwC,CAAC,GAChC;CACT,IAAMC,IAAYC,EAAQ,aAAa9B,IACjC+B,IAASR,EAAiBM,EAAU,QAAQ,QAAQ,GACpDG,IAAQT,EAAiBM,EAAU,OAAO,OAAO,GACjDI,IAAOV,EAAiBM,EAAU,MAAM,MAAM,GAC9CK,IAAYL,EAAU,cAAc,KAAA,IAAY,KAAA,IAAYN,EAAiBM,EAAU,WAAW,WAAW,GAC7GM,IAAS,CACdT,EAAeK,GAAQK,EAAM,MAAM,GACnC,GAAIF,MAAc,KAAA,IAAY,CAACR,EAAeM,GAAOI,EAAM,KAAK,GAAGV,EAAeO,GAAMG,EAAM,IAAI,CAAC,IAAI,CAAClD,GAA0BgD,GAAW;EAC5I,OAAOlB,EAAiBoB,EAAM,KAAK,CAAC,CAAC,KAAK,CAACjB,GAAMd,OAAW,GAAGc,EAAK,IAAId,EAAM,EAAE;EAChF,MAAMW,EAAiBoB,EAAM,IAAI,CAAC,CAAC,KAAK,CAACjB,GAAMd,OAAW,GAAGc,EAAK,IAAId,EAAM,EAAE;CAC/E,CAAC,CAAC,CACH,CAAC,CAAC,QAAQ,MAA2BgC,MAAU,QAAQA,EAAM,SAAS,CAAC,GACjEC,IAASR,EAAQ,WAAW,KAC/B,OACA,MAAMA,EAAQ,UAAU,oCAAoC;CAE/D,OAAO,GAAG,CACT,GAAIQ,IAAS,CAACA,CAAM,IAAI,CAAC,GACzB,GAAIH,EAAO,SAAS,IAAIA,IAAS,CAAC,8BAA8B,CACjE,CAAC,CAAC,KAAK,MAAM,EAAE;AAChB;AAMA,SAAgBI,EAA2B,IAAmB,CAAC,GAAa;CAC3E,IAAMC,IAAWxE,EAAgByE,CAAM,GACjC,EACL,QAAQC,GACR,oBAAoBC,GACpB,GAAGC,MACAJ,EAAS;CAEb,OAAO;EACN,GAAGA;EACH,OAAOI;CACR;AACD;AAEA,SAAgBC,GAA0B,IAAmB,CAAC,GAAW;CACxE,IAAMC,IAAeP,EAA2BE,CAAM;CACtD,OAAO,kGAAkG,KAAK,UAAUK,GAAc,MAAM,GAAI,EAAE;AACnJ;AAEA,SAAgBC,GACf,GACA,IAAyBX,EAAM,MACP;CACxB,OAAO;EACN,GAAGA,EAAM;EACT,GAAGA,EAAMY;CACV;AACD;AAEA,SAAgBC,EACf,GACA,IAAyBb,EAAM,MACX;CACpB,OAAO,OAAO,YACbpB,EAAiB+B,GAA+BX,GAAOY,CAAI,GAAG,EAAK,CACpE;AACD;AAEA,SAAgBE,GAA2B,GAAuC;CACjF,OAAOlC,EAAiBoB,EAAM,QAAQ,EAAK,CAAC,CAAC,SAC1CpB,EAAiBoB,EAAM,OAAO,EAAK,CAAC,CAAC,SACrCpB,EAAiBoB,EAAM,MAAM,EAAK,CAAC,CAAC;AACxC;AAEA,SAAgBe,EACf,GACwB;CACxB,IAAM1B,IAAQF,EAAiB6B,GAAe,QAAQ;CACtD,OAAO;EACN,QAAQ3B;EACR,OAAO,GAAGA,EAAM,KAAKA,EAAM,kBAAkBA;EAC7C,MAAM,GAAGA,EAAM,gBAAgBA;EAC/B,WAAWA;CACZ;AACD;AAEA,SAAgB4B,GACf,GACA,IAAW,sBACX,IAAwC,CAAC,GACzC,IAA2D,CAAC,GAC/B;CAC7B,IAAMC,IAAgBxC,EAAmByC,EAAgB,iBAAiBnB,CAAK,GACzEoB,IAAiBjB,EAA2BgB,EAAgB,cAAc;CAChF,OAAO;EACN;EACA,SAAS3B,EAAsB0B,GAAe;GAC7C,GAAGxB;GACH,QAAQA,EAAQ,UAAU;EAC3B,CAAC;EACD,iBAAiBF,EAAsBQ,GAAON,CAAO;EACrD,OAAOhB,EAAmBsB,CAAK;EAC/B;EACA,eAAec,GAA2Bd,CAAK;EAC/C,kBAAkBmB,EAAgB,oBAAoB;EACtD;EACA,oBAAoBV,GAA0BW,CAAc;CAC7D;AACD;AAEA,SAAgBC,GACf,GACO;CACP,GAAwB;EACvB,UAAUC,EAAS;EACnB,MAAMA,EAAS;EACf,UAAU;CACX,CAAC;AACF;AAEA,SAAgBC,GAAwB,EACvC,aACA,SACA,cAAW,8BAKH;CACR,IAAI,OAAO,WAAa,OAAe,OAAO,MAAQ,KACrD,MAAU,MAAM,0FAA0F;CAE3G,IAAMC,IAAO,IAAI,KAAK,CAACC,CAAI,GAAG,EAAE,MAAMC,EAAS,CAAC,GAC1CC,IAAM,IAAI,gBAAgBH,CAAI,GAC9BI,IAAS,SAAS,cAAc,GAAG;CAOzC,AANA,EAAO,OAAOD,GACd,EAAO,WAAWE,GAClB,EAAO,SAAS,IAChB,SAAS,KAAK,OAAOD,CAAM,GAC3BA,EAAO,MAAM,GACbA,EAAO,OAAO,GACd,IAAI,gBAAgBD,CAAG;AACxB;;;ACjRA,IAAaG,KAAaC,GAA4C,SAAoB,EACzF,UACA,UAAO/B,EAAM,MACb,cACA,UACA,aACA,GAAGgC,KACD,GAAK;CACP,OACC,kBAACvG,GAAD;EACC,GAAIuG;EACC;EACL,mBAAiBpB;EACjB,WAAW/E,EAAG,0BAA0B+E,GAAMqB,CAAS;EACvD,OAAO;GACN,GAAGpB,EAAoBb,GAAOY,CAAI;GAClC,GAAGsB;EACJ;EAEC;CACgB,CAAA;AAEpB,CAAC;AAED,GAAW,cAAc;;;ACrBzB,SAASC,EACR,GACA,GACqB;CAOrB,OANIC,MAAW,OAAa,OACxBA,MAAW,SAAeC,EAAQ,UAClCD,MAAW,aACP,OAAO,WAAa,MAAc,OAAO,SAAS,kBAEtD,OAAOA,KAAW,aAAmBA,EAAO,IACzCA;AACR;AAEA,SAAgBE,GAAgB,EAC/B,UACA,oBACA,YACA,WACA,YACgC;CAChC,SAAgB;EACf,IAAI,CAACC,KAASH,MAAW,QAAQ;EACjC,IAAMI,IAAUL,EAAcC,GAAQC,CAAO;EAC7C,IAAI,CAACG,GAAS;EAEd,IAAMN,IAAQrB,EAAoBb,CAAK,GACjCyC,oBAAY,IAAI,IAAiD,GACjEC,oBAAU,IAAI,IAAoB;EACxC,KAAK,IAAM,CAAC3D,GAAMd,MAAU,OAAO,QAAQiE,CAAK,GAC/C,AAAI,OAAOjE,KAAU,aACrBwE,EAAU,IAAI1D,GAAM;GACnB,OAAOyD,EAAQ,MAAM,iBAAiBzD,CAAI;GAC1C,UAAUyD,EAAQ,MAAM,oBAAoBzD,CAAI;EACjD,CAAC,GACDyD,EAAQ,MAAM,YAAYzD,GAAMd,CAAK,GACrCyE,EAAQ,IAAI3D,GAAMd,CAAK;EAGxB,IAAM0E,IAAgBH,EAAQ,UAAU,SAAS,OAAO,GAClDI,IAAeJ,EAAQ,UAAU,SAAS,MAAM;EAMtD,OALIK,MACHL,EAAQ,UAAU,OAAO,SAASxC,EAAM,SAAS,OAAO,GACxDwC,EAAQ,UAAU,OAAO,QAAQxC,EAAM,SAAS,MAAM,UAG1C;GACZ,KAAK,IAAM,CAACjB,GAAM+D,MAAaJ,GAAS;IACvC,IAAIF,EAAQ,MAAM,iBAAiBzD,CAAI,MAAM+D,GAAU;IACvD,IAAMC,IAAWN,EAAU,IAAI1D,CAAI;IACnC,AAAIgE,GAAU,QACbP,EAAQ,MAAM,YAAYzD,GAAMgE,EAAS,OAAOA,EAAS,QAAQ,IAEjEP,EAAQ,MAAM,eAAezD,CAAI;GAEnC;GACA,AAAI8D,MACHL,EAAQ,UAAU,OAAO,SAASG,CAAa,GAC/CH,EAAQ,UAAU,OAAO,QAAQI,CAAY;EAE/C;CACD,GAAG;EAACL;EAAOM;EAAiBR;EAASD;EAAQpC;CAAK,CAAC;AACpD;;;AC/DA,IAAagD,IAAuBjB,GACnC,SAA8B,EAC7B,WACA,UACA,UAAO/B,EAAM,MACb,YAAS,YACT,qBAAkB,IAClB,cACA,aACA,GAAGiD,KACD,GAAc;CAChB,IAAMZ,IAAUa,GAAuB,IAAI;CAC3C,GAAoBC,SAAoBd,EAAQ,OAAyB;CACzE,IAAMe,IAAiBC,QAChB3E,EAAmB;EAAE,GAAGsB;EAAO;CAAK,CAAC,GAC3C,CAACY,GAAMZ,CAAK,CACb;CASA,OARAsC,GAAgB;EACf,OAAOF,MAAW;EAClB;EACA;EACA;EACA,OAAOgB;CACR,CAAC,GAGA,kBAAC1H,GAAD;EAAoB;EACnB,UAAA,kBAACoG,IAAD;GACC,GAAImB;GACJ,KAAKZ;GACL,OAAOe;GACD;GACN,WAAWvH,EACV,oEACAoG,CACD;GAEC;EACU,CAAA;CACD,CAAA;AAEd,CACD;AAEA,EAAqB,cAAc;;;AChDnC,IAAMqB,IAAe,ihBAoCrB,GAEMC,KAAe;CACpB;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACD,GAOMC,IAAiB,CACtB,oBACD,GAEMC,KAAiB;CACtB;CACA;CACA;CACA;AACD,GAoBMC,IAAuB;CAjB5B;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AAG4B,CAAA,CAAW,SAAS,MAAS,CACzD,UAAUC,KACV,UAAUA,EAAK,cAChB,CAAC,GAEKC,KAAmB;CACxB;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACD,GAEMC,IAAuB;CAC5B;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACD,GAEMC,KAAmB;CACxB;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACD,GAEMC,IAAkE;CACvE,gBAAgB;CAChB,gBAAgB;CAChB,aAAa;CACb,wBAAwB;CACxB,WAAW;CACX,sBAAsB;CACtB,YAAY;CACZ,UAAU;CACV,gBAAgB;CAChB,sBAAsB;CACtB,oBAAoB;CACpB,oBAAoB;CACpB,YAAY;CACZ,iBAAiB;CACjB,mBAAmB;CACnB,mBAAmB;CACnB,oBAAoB;CACpB,eAAe;CACf,WAAW;CACX,WAA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"}
|