themelia-react-ui 1.0.0 → 1.0.2
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 +190 -1
- package/README.md +92 -13
- package/dist/{accordion-BRWh3BM1.js → accordion-BRTcsp8J.js} +8 -8
- package/dist/accordion-BRTcsp8J.js.map +1 -0
- package/dist/{action-menu-Cx3SdfbN.js → action-menu-Drxw_vJk.js} +36 -36
- package/dist/action-menu-Drxw_vJk.js.map +1 -0
- package/dist/affordance-geometry.generated-CL84ZN9A.js +63 -0
- package/dist/affordance-geometry.generated-CL84ZN9A.js.map +1 -0
- package/dist/{ai-artifact-DkOArd3-.js → ai-artifact-DLVdK0Py.js} +151 -155
- package/dist/ai-artifact-DLVdK0Py.js.map +1 -0
- package/dist/{app-shell-BH_bGcE2.js → app-shell-C_fKpljx.js} +11 -10
- package/dist/app-shell-C_fKpljx.js.map +1 -0
- package/dist/{attachment-DsLgNHXt.js → attachment-DbjUWsP0.js} +12 -12
- package/dist/{attachment-DsLgNHXt.js.map → attachment-DbjUWsP0.js.map} +1 -1
- package/dist/auth-CAQcasMV.js +723 -0
- package/dist/auth-CAQcasMV.js.map +1 -0
- package/dist/{avatar-CsnWaYmt.js → avatar-Bu2HhitA.js} +76 -71
- package/dist/avatar-Bu2HhitA.js.map +1 -0
- package/dist/{badge-BZXZT9wd.js → badge-CzId1Wlm.js} +4 -4
- package/dist/{badge-BZXZT9wd.js.map → badge-CzId1Wlm.js.map} +1 -1
- 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/buttons.js +3 -2
- package/dist/base/cards.js +3 -3
- package/dist/base/carousel.js +25 -27
- package/dist/base/carousel.js.map +1 -1
- package/dist/base/cascader.js +150 -148
- package/dist/base/cascader.js.map +1 -1
- package/dist/base/chart.js +1 -1
- package/dist/base/choice-inputs.js +3 -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 +3 -3
- package/dist/base/display.js +7 -7
- package/dist/base/feedback.js +4 -3
- package/dist/base/forms-numeric.js +1 -1
- package/dist/base/forms.js +2 -2
- package/dist/base/inline-edit.js +233 -0
- package/dist/base/inline-edit.js.map +1 -0
- package/dist/base/item.js +1 -1
- package/dist/base/media-gallery.js +1 -1
- package/dist/base/navigation.js +6 -6
- package/dist/base/popover-menu.js +1 -1
- package/dist/base/popover.js +1 -1
- package/dist/base/qr-code.js +1 -1
- package/dist/base/repeaters.js +33 -33
- package/dist/base/repeaters.js.map +1 -1
- package/dist/base/sheet.js +1 -1
- package/dist/base/sidebar.js +1 -1
- package/dist/base/signature-pad.js +83 -81
- package/dist/base/signature-pad.js.map +1 -1
- package/dist/base/skeleton.js +1 -1
- package/dist/base/spinner.js +1 -1
- package/dist/base/structure.js +1 -1
- package/dist/base/table.js +1 -1
- package/dist/base/text-inputs.js +2 -2
- package/dist/base/toaster.js +6 -6
- package/dist/base/toaster.js.map +1 -1
- package/dist/base/tree.js +1 -1
- package/dist/base/upload-queue.js +1 -1
- package/dist/base/upload.js +3 -3
- package/dist/base/value-inputs.js +1 -1
- package/dist/blocks/admin.js +134 -134
- package/dist/blocks/admin.js.map +1 -1
- package/dist/blocks/ai.js +120 -117
- package/dist/blocks/ai.js.map +1 -1
- package/dist/blocks/analytics/usage-card.js +3 -0
- package/dist/blocks/analytics.js +530 -491
- package/dist/blocks/analytics.js.map +1 -1
- package/dist/blocks/collaboration.js +2 -2
- package/dist/blocks/commerce/receipt.js +1 -1
- package/dist/blocks/commerce.js +395 -383
- package/dist/blocks/commerce.js.map +1 -1
- package/dist/blocks/data-display.js +1 -1
- package/dist/blocks/onboarding.js +6 -6
- package/dist/blocks/onboarding.js.map +1 -1
- package/dist/blocks/planning.js +311 -0
- package/dist/blocks/planning.js.map +1 -0
- package/dist/blocks/timelines.js +1 -1
- package/dist/{breadcrumbs-DdQ_I5ra.js → breadcrumbs-BuYz5SDU.js} +9 -8
- package/dist/breadcrumbs-BuYz5SDU.js.map +1 -0
- package/dist/button-BZDasD04.js +651 -0
- package/dist/button-BZDasD04.js.map +1 -0
- package/dist/{button-BS6l5JUw.js → button-BZyfTvwm.js} +3 -3
- package/dist/button-BZyfTvwm.js.map +1 -0
- package/dist/buttons-D_6KJvEE.js +99 -0
- package/dist/buttons-D_6KJvEE.js.map +1 -0
- package/dist/{cards-BMB0laLG.js → cards-qGSErLw_.js} +12 -12
- package/dist/{cards-BMB0laLG.js.map → cards-qGSErLw_.js.map} +1 -1
- package/dist/chart-Bsc5BICK.js +150 -0
- package/dist/chart-Bsc5BICK.js.map +1 -0
- package/dist/checkbox-BQNDjUCh.js +34 -0
- package/dist/checkbox-BQNDjUCh.js.map +1 -0
- package/dist/choice-inputs-Mk3iWbhr.js +725 -0
- package/dist/choice-inputs-Mk3iWbhr.js.map +1 -0
- package/dist/{code-block-DIlqzoiD.js → code-block-DzHKRybS.js} +23 -23
- package/dist/code-block-DzHKRybS.js.map +1 -0
- package/dist/{collapsible-DsnktFNv.js → collapsible-ClvC7Bj3.js} +3 -3
- package/dist/{collapsible-DsnktFNv.js.map → collapsible-ClvC7Bj3.js.map} +1 -1
- package/dist/{collection-content-C4fthJV_.js → collection-content-D6S8cv_n.js} +3 -3
- package/dist/{collection-content-C4fthJV_.js.map → collection-content-D6S8cv_n.js.map} +1 -1
- package/dist/{combobox-HDftpzxt.js → combobox-BFnbJJp3.js} +18 -18
- package/dist/combobox-BFnbJJp3.js.map +1 -0
- package/dist/{combobox-CHD750do.js → combobox-hozNwUcc.js} +313 -316
- package/dist/combobox-hozNwUcc.js.map +1 -0
- package/dist/{command-D0kWBZfd.js → command-BnmSchli.js} +9 -9
- package/dist/command-BnmSchli.js.map +1 -0
- package/dist/comments-u5L0OGip.js +1156 -0
- package/dist/comments-u5L0OGip.js.map +1 -0
- package/dist/components/base/buttons/button-group.recipes.d.ts +1 -1
- package/dist/components/base/buttons/button.recipes.d.ts +10 -19
- package/dist/components/base/buttons/use-pending-button-focus.d.ts +3 -0
- package/dist/components/base/cards/card.recipes.d.ts +13 -5
- package/dist/components/base/cards/partials/card-primitives.d.ts +9 -4
- package/dist/components/base/cards/smart-card.types.d.ts +3 -1
- package/dist/components/base/date-pickers/date-picker.recipes.d.ts +5 -18
- package/dist/components/base/date-pickers/datepicker.types.d.ts +3 -0
- package/dist/components/base/forms/form-field.d.ts +1 -0
- package/dist/components/base/forms/form-sizing.d.ts +3 -3
- package/dist/components/base/inline-edit/index.d.ts +2 -0
- package/dist/components/base/inline-edit/inline-edit.d.ts +81 -0
- package/dist/components/base/inline-edit/inline-edit.recipes.d.ts +6 -0
- package/dist/components/base/navigation/tabs.d.ts +3 -5
- package/dist/components/base/popover/popover.recipes.d.ts +3 -3
- package/dist/components/base/structure/structure.recipes.d.ts +6 -0
- package/dist/components/base/table/index.d.ts +1 -1
- package/dist/components/base/text-inputs/clear-native-field.d.ts +2 -0
- package/dist/components/base/text-inputs/input-trailing-action.d.ts +3 -0
- package/dist/components/blocks/analytics/index.d.ts +1 -0
- package/dist/components/blocks/analytics/types.d.ts +1 -1
- package/dist/components/blocks/analytics/usage-card/index.d.ts +3 -0
- package/dist/components/blocks/analytics/usage-card/types.d.ts +52 -0
- package/dist/components/blocks/analytics/usage-card/usage-card.d.ts +6 -0
- package/dist/components/blocks/analytics/usage-card/usage-card.data.d.ts +19 -0
- package/dist/components/blocks/analytics/usage-card/usage-card.strings.d.ts +22 -0
- package/dist/components/blocks/collaboration/message/message.recipes.d.ts +12 -0
- package/dist/components/blocks/data-display/empty-state/partials/illustrations/document-stack.d.ts +1 -4
- package/dist/components/blocks/data-display/empty-state/partials/illustrations/inbox-clean.d.ts +1 -4
- package/dist/components/blocks/data-display/empty-state/partials/illustrations/index.d.ts +3 -3
- package/dist/components/blocks/data-display/empty-state/partials/illustrations/stacked-cards.d.ts +1 -6
- package/dist/components/blocks/planning/index.d.ts +3 -0
- package/dist/components/blocks/planning/task-card.d.ts +3 -0
- package/dist/components/blocks/planning/task-card.strings.d.ts +15 -0
- package/dist/components/blocks/planning/task-card.types.d.ts +66 -0
- package/dist/components/features/combobox/components/error-message.d.ts +1 -1
- package/dist/components/features/comments/hooks/use-attachment-upload.d.ts +5 -0
- package/dist/components/features/filters/facets/search-facet.d.ts +0 -12
- package/dist/components/features/filters/facets/tags-facet.d.ts +1 -1
- package/dist/components/features/media-library/media-library.d.ts +1 -1
- package/dist/components/features/media-library/media-library.types.d.ts +9 -1
- package/dist/components/features/media-library/partials/media-library-partials.d.ts +1 -1
- package/dist/components/features/overlays/hooks/use-pending-overlay-focus.d.ts +2 -0
- package/dist/components/features/overlays/overlays.types.d.ts +5 -4
- package/dist/components/features/rich-text-editor/rich-text-editor.recipes.d.ts +2 -1
- package/dist/components/features/table/data-table.d.ts +1 -1
- package/dist/components/features/table/table.types.d.ts +1 -1
- package/dist/components/features/theme-tweaker/theme-provider-settings.d.ts +3 -1
- package/dist/components/layout/auth/auth.types.d.ts +1 -0
- package/dist/components/layout/page/page.d.ts +0 -1
- package/dist/components/layout/page/page.types.d.ts +9 -3
- package/dist/components/layout/sidebar/sidebar.context.d.ts +1 -1
- package/dist/components/layout/sidebar/sidebar.types.d.ts +4 -0
- package/dist/components/layout/workspace/workspace.types.d.ts +3 -0
- package/dist/components/typography/heading.d.ts +5 -2
- package/dist/components/typography/index.d.ts +1 -1
- package/dist/components/typography/text.styles.d.ts +10 -0
- package/dist/components/ui/popover.d.ts +1 -1
- package/dist/components/ui/sidebar.d.ts +1 -1
- package/dist/components/ui/table.d.ts +2 -1
- package/dist/container.recipes-D9t8MHR3.js +27 -0
- package/dist/container.recipes-D9t8MHR3.js.map +1 -0
- package/dist/{containers-CPNyNo1_.js → containers-DqB-bSYE.js} +34 -56
- package/dist/containers-DqB-bSYE.js.map +1 -0
- package/dist/control-group-recipes-DBXmfh2E.js +21 -0
- package/dist/control-group-recipes-DBXmfh2E.js.map +1 -0
- package/dist/{copyable-B7SBXJMr.js → copyable-BTSByfmq.js} +6 -6
- package/dist/{copyable-B7SBXJMr.js.map → copyable-BTSByfmq.js.map} +1 -1
- package/dist/{data-display-b3d1TfL4.js → data-display-Bihs9Ven.js} +542 -329
- package/dist/data-display-Bihs9Ven.js.map +1 -0
- package/dist/{date-BFNMnrS5.js → date-DOKhJPu7.js} +4 -4
- package/dist/{date-BFNMnrS5.js.map → date-DOKhJPu7.js.map} +1 -1
- package/dist/{date-picker-DI6kPNof.js → date-picker-DzP5HQq7.js} +492 -472
- package/dist/date-picker-DzP5HQq7.js.map +1 -0
- package/dist/date-pickers-BpgGz7S-.js +196 -0
- package/dist/date-pickers-BpgGz7S-.js.map +1 -0
- package/dist/{display-ByI5tkqy.js → display-CS6Hbk18.js} +8 -8
- package/dist/{display-ByI5tkqy.js.map → display-CS6Hbk18.js.map} +1 -1
- package/dist/{dropdown-menu-BlnyHr-9.js → dropdown-menu-D-boNgGO.js} +7 -7
- package/dist/{dropdown-menu-BlnyHr-9.js.map → dropdown-menu-D-boNgGO.js.map} +1 -1
- package/dist/features/activities.js +152 -141
- package/dist/features/activities.js.map +1 -1
- package/dist/features/ai-chat.js +182 -179
- package/dist/features/ai-chat.js.map +1 -1
- package/dist/features/async-preview.js +9 -9
- package/dist/features/async-preview.js.map +1 -1
- package/dist/features/combobox.js +1 -1
- package/dist/features/comments.js +1 -1
- package/dist/features/data-view.js +25 -23
- package/dist/features/data-view.js.map +1 -1
- package/dist/features/email-composer/engine.js +1 -1
- package/dist/features/email-composer.js +103 -104
- package/dist/features/email-composer.js.map +1 -1
- package/dist/features/event-calendar.js +375 -373
- package/dist/features/event-calendar.js.map +1 -1
- package/dist/features/filters.js +1 -1
- package/dist/features/global-search.js +222 -224
- package/dist/features/global-search.js.map +1 -1
- package/dist/features/kanban.js +29 -29
- package/dist/features/kanban.js.map +1 -1
- package/dist/features/map.js +59 -58
- package/dist/features/map.js.map +1 -1
- package/dist/features/media-library.js +856 -855
- package/dist/features/media-library.js.map +1 -1
- package/dist/features/mentions.js +1 -1
- package/dist/features/overlays.js +1 -1
- package/dist/features/products.js +1210 -1209
- package/dist/features/products.js.map +1 -1
- package/dist/features/questionnaire.js +133 -132
- package/dist/features/questionnaire.js.map +1 -1
- package/dist/features/resource-assignment.js +29 -31
- package/dist/features/resource-assignment.js.map +1 -1
- package/dist/features/resource.js +13 -13
- package/dist/features/resource.js.map +1 -1
- package/dist/features/rich-text-editor.js +2 -2
- package/dist/features/schema-form.js +82 -82
- package/dist/features/schema-form.js.map +1 -1
- package/dist/features/suggestions.js +3 -3
- package/dist/features/sync.js +4 -4
- package/dist/features/sync.js.map +1 -1
- package/dist/features/table.js +1 -1
- package/dist/features/theme-tweaker.js +456 -450
- package/dist/features/theme-tweaker.js.map +1 -1
- package/dist/feedback-CJkUAapr.js +233 -0
- package/dist/feedback-CJkUAapr.js.map +1 -0
- package/dist/field-affordance-recipes-uKY4MsZ_.js +25 -0
- package/dist/field-affordance-recipes-uKY4MsZ_.js.map +1 -0
- package/dist/{field-state-recipes-CBTRt9Bt.js → field-state-recipes-DQQpiLWC.js} +3 -3
- package/dist/field-state-recipes-DQQpiLWC.js.map +1 -0
- package/dist/{filters-qtrcv1hf.js → filters-D6FF8L6s.js} +715 -720
- package/dist/filters-D6FF8L6s.js.map +1 -0
- package/dist/{form-field-C6W-y2hR.js → form-field-CZwrkP7m.js} +17 -9
- package/dist/form-field-CZwrkP7m.js.map +1 -0
- package/dist/{form-sizing-39NohSqn.js → form-sizing-QP8aIRaW.js} +10 -6
- package/dist/form-sizing-QP8aIRaW.js.map +1 -0
- package/dist/{forms-BF-HSbff.js → forms-B5NCbkSC.js} +35 -35
- package/dist/{forms-BF-HSbff.js.map → forms-B5NCbkSC.js.map} +1 -1
- package/dist/forms-numeric-Crrm80Lm.js +867 -0
- package/dist/forms-numeric-Crrm80Lm.js.map +1 -0
- package/dist/{header-B8ex54cY.js → header-kxruN3RM.js} +53 -49
- package/dist/header-kxruN3RM.js.map +1 -0
- package/dist/{hooks-D6UBVzf2.js → hooks-BrlnCwQd.js} +2 -2
- package/dist/{hooks-D6UBVzf2.js.map → hooks-BrlnCwQd.js.map} +1 -1
- package/dist/{http-CLTVJc5I.js → http-CdEIHyQf.js} +2 -2
- package/dist/http-CdEIHyQf.js.map +1 -0
- package/dist/{icon-badge-Dv0RYQwj.js → icon-badge-Btc6pQrp.js} +4 -4
- package/dist/{icon-badge-Dv0RYQwj.js.map → icon-badge-Btc6pQrp.js.map} +1 -1
- package/dist/index.js +2 -2
- package/dist/input-SX9V0AL3.js +255 -0
- package/dist/input-SX9V0AL3.js.map +1 -0
- package/dist/input-vxcaNCYC.js +20 -0
- package/dist/input-vxcaNCYC.js.map +1 -0
- package/dist/{item-pJ0GsOiJ.js → item-DE4YnuJx.js} +18 -17
- package/dist/item-DE4YnuJx.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 +1 -1
- package/dist/layout/settings.js +1 -1
- package/dist/layout/sidebar.js +2 -2
- package/dist/layout/workspace.js +1 -1
- package/dist/layout.js +10 -10
- package/dist/lib/affordance-geometry.generated.d.ts +44 -4
- package/dist/lib/control-group-recipes.d.ts +22 -0
- package/dist/lib/field-affordance-recipes.d.ts +35 -2
- package/dist/lib/field-state-recipes.d.ts +2 -2
- package/dist/lib/navigation-row-recipes.d.ts +3 -2
- package/dist/lib/overlay-anatomy-recipes.d.ts +1 -1
- package/dist/lib/surface-recipes.d.ts +5 -2
- package/dist/lib/token-merge.generated.d.ts +144 -2
- package/dist/lib/ui-provider/types.d.ts +4 -2
- package/dist/lib/use-prefers-reduced-motion.d.ts +2 -0
- package/dist/lib/utils.js +1 -1
- package/dist/{media-gallery-Ca4YmvBi.js → media-gallery-DLp3HAz0.js} +75 -74
- package/dist/media-gallery-DLp3HAz0.js.map +1 -0
- package/dist/{mentions-CRio8mTm.js → mentions-Cl0Kt_Pd.js} +52 -50
- package/dist/{mentions-CRio8mTm.js.map → mentions-Cl0Kt_Pd.js.map} +1 -1
- package/dist/message-SZUNB1eX.js +127 -0
- package/dist/message-SZUNB1eX.js.map +1 -0
- package/dist/{navigation-BTrEb5u4.js → navigation-DnQSNMT0.js} +64 -55
- package/dist/navigation-DnQSNMT0.js.map +1 -0
- package/dist/{navigation-DqEITuD2.js → navigation-DyytsLRB.js} +37 -37
- package/dist/navigation-DyytsLRB.js.map +1 -0
- package/dist/{navigation-row-recipes-BFpvGPGE.js → navigation-row-recipes-DQEXQcqY.js} +3 -3
- package/dist/navigation-row-recipes-DQEXQcqY.js.map +1 -0
- package/dist/{number-BNT_BIzJ.js → number-DasMFWEG.js} +4 -4
- package/dist/{number-BNT_BIzJ.js.map → number-DasMFWEG.js.map} +1 -1
- package/dist/overlays-DUbs1KEi.js +1011 -0
- package/dist/overlays-DUbs1KEi.js.map +1 -0
- package/dist/{page-BMBGjJY8.js → page-hGmT4nWK.js} +75 -64
- package/dist/page-hGmT4nWK.js.map +1 -0
- package/dist/{page-header-BH41wCyY.js → page-header-D8nERkn5.js} +9 -9
- package/dist/page-header-D8nERkn5.js.map +1 -0
- package/dist/{pagination-C29vvt3I.js → pagination-NLGqRirf.js} +20 -20
- package/dist/pagination-NLGqRirf.js.map +1 -0
- package/dist/{popover-TInGXsjg.js → popover-CghIYdQf.js} +23 -22
- package/dist/popover-CghIYdQf.js.map +1 -0
- package/dist/{popover-menu-BzqXqE72.js → popover-menu-B4PoWhRl.js} +6 -6
- package/dist/{popover-menu-BzqXqE72.js.map → popover-menu-B4PoWhRl.js.map} +1 -1
- package/dist/{popover.recipes-zgBhMlUu.js → popover.recipes-QlD4JenO.js} +5 -5
- package/dist/popover.recipes-QlD4JenO.js.map +1 -0
- package/dist/{primitives-DKPOGVpj.js → primitives-C7ff0QaI.js} +120 -113
- package/dist/primitives-C7ff0QaI.js.map +1 -0
- package/dist/primitives.js +3 -3
- package/dist/progress-BroqrAyV.js +169 -0
- package/dist/progress-BroqrAyV.js.map +1 -0
- package/dist/{receipt-DYWTQGEc.js → receipt-BuJynLgf.js} +8 -8
- package/dist/{receipt-DYWTQGEc.js.map → receipt-BuJynLgf.js.map} +1 -1
- package/dist/{rich-text-B7sBAdDG.js → rich-text-DlxDOtf4.js} +4 -4
- package/dist/{rich-text-B7sBAdDG.js.map → rich-text-DlxDOtf4.js.map} +1 -1
- package/dist/rich-text-editor-BKyG7rWz.js +574 -0
- package/dist/rich-text-editor-BKyG7rWz.js.map +1 -0
- package/dist/{rich-text-editor.recipes-DxvOE0Lp.js → rich-text-editor.recipes-B72Nfuze.js} +35 -26
- package/dist/rich-text-editor.recipes-B72Nfuze.js.map +1 -0
- package/dist/{scroll-area-BheMQ270.js → scroll-area-D-pIhEKl.js} +3 -3
- package/dist/scroll-area-D-pIhEKl.js.map +1 -0
- package/dist/{separator-Gk_WXH-l.js → separator-BNIgG3au.js} +3 -3
- package/dist/{separator-Gk_WXH-l.js.map → separator-BNIgG3au.js.map} +1 -1
- package/dist/{separator-DO0EbCEm.js → separator-BhtFyo4x.js} +2 -2
- package/dist/{separator-DO0EbCEm.js.map → separator-BhtFyo4x.js.map} +1 -1
- package/dist/services/actions.js +1 -1
- package/dist/{settings-D9f_wdIC.js → settings-DOTOzeZ2.js} +10 -9
- package/dist/{settings-D9f_wdIC.js.map → settings-DOTOzeZ2.js.map} +1 -1
- package/dist/{sheet-vOUloJ4O.js → sheet-BFhrNehm.js} +11 -11
- package/dist/sheet-BFhrNehm.js.map +1 -0
- package/dist/{sidebar-CNBKFDRW.js → sidebar-CyR4XKwR.js} +219 -200
- package/dist/sidebar-CyR4XKwR.js.map +1 -0
- package/dist/{sidebar-C3UKkbC5.js → sidebar-SvGJ0Zwi.js} +63 -58
- package/dist/sidebar-SvGJ0Zwi.js.map +1 -0
- package/dist/{skeleton-BvRhK8y-.js → skeleton-3F0uhYn3.js} +4 -4
- package/dist/{skeleton-BvRhK8y-.js.map → skeleton-3F0uhYn3.js.map} +1 -1
- package/dist/{smart-card-B5FcKODh.js → smart-card-DjGVV2xr.js} +206 -199
- package/dist/smart-card-DjGVV2xr.js.map +1 -0
- package/dist/{spinner-JtlFJ7Nc.js → spinner-Cpf7oRkF.js} +5 -5
- package/dist/{spinner-JtlFJ7Nc.js.map → spinner-Cpf7oRkF.js.map} +1 -1
- package/dist/{structure-BvW4vG4H.js → structure-CRdqVawd.js} +14 -14
- package/dist/{structure-BvW4vG4H.js.map → structure-CRdqVawd.js.map} +1 -1
- package/dist/{structure.recipes-DjqnBpwz.js → structure.recipes-Bqhf9oIh.js} +2 -2
- package/dist/structure.recipes-Bqhf9oIh.js.map +1 -0
- package/dist/style.css +1 -1
- package/dist/{surface-recipes-CQfRr-VL.js → surface-recipes-Dd__PD-w.js} +4 -3
- package/dist/surface-recipes-Dd__PD-w.js.map +1 -0
- package/dist/{table-DnlAJ-xR.js → table-CLtJTxoR.js} +17 -16
- package/dist/table-CLtJTxoR.js.map +1 -0
- package/dist/table-CcRDZiLP.js +1444 -0
- package/dist/table-CcRDZiLP.js.map +1 -0
- package/dist/tabs-BNgu7g0u.js +188 -0
- package/dist/tabs-BNgu7g0u.js.map +1 -0
- package/dist/text-inputs-DsR56TR-.js +330 -0
- package/dist/text-inputs-DsR56TR-.js.map +1 -0
- package/dist/{text.styles-BwB7vAF2.js → text.styles-Q4sGAIgA.js} +18 -10
- package/dist/text.styles-Q4sGAIgA.js.map +1 -0
- package/dist/theme.css +77 -115
- package/dist/{timelines-CnZ2S_Gr.js → timelines-D1pkt3se.js} +84 -78
- package/dist/timelines-D1pkt3se.js.map +1 -0
- package/dist/{tree-COD9BGdU.js → tree-BtmYyMZV.js} +8 -8
- package/dist/{tree-COD9BGdU.js.map → tree-BtmYyMZV.js.map} +1 -1
- package/dist/typography/rich-text.js +1 -1
- package/dist/typography-BxQgiZyw.js +96 -0
- package/dist/typography-BxQgiZyw.js.map +1 -0
- package/dist/typography.js +1 -1
- package/dist/{ui-provider-CftIB6TY.js → ui-provider-DRPn3qNl.js} +3 -2
- package/dist/ui-provider-DRPn3qNl.js.map +1 -0
- package/dist/ui-provider.js +1 -1
- package/dist/{upload-DIzw1dx1.js → upload-CDbYw1WN.js} +326 -323
- package/dist/upload-CDbYw1WN.js.map +1 -0
- package/dist/{upload-queue-xRJ3qDmd.js → upload-queue-CNd_hH_a.js} +25 -25
- package/dist/upload-queue-CNd_hH_a.js.map +1 -0
- package/dist/usage-card-VyJLUwRr.js +457 -0
- package/dist/usage-card-VyJLUwRr.js.map +1 -0
- package/dist/utils-BvH9PSmq.js +4275 -0
- package/dist/utils-BvH9PSmq.js.map +1 -0
- package/dist/value-inputs-D0KCrfVC.js +840 -0
- package/dist/value-inputs-D0KCrfVC.js.map +1 -0
- package/dist/{workspace-Cbqz4FzN.js → workspace-CcR8r-Nt.js} +115 -122
- package/dist/workspace-CcR8r-Nt.js.map +1 -0
- package/docs/consumer-skill/SKILL.md +112 -18
- package/docs/consumer-skill/examples/analytics.tsx +34 -0
- package/docs/consumer-skill/examples/app-layout.tsx +42 -12
- package/docs/consumer-skill/examples/detail.tsx +24 -9
- package/docs/consumer-skill/examples/manifest.json +27 -1
- package/docs/consumer-skill/examples/planning-usage-edit.tsx +29 -0
- package/docs/consumer-skill/examples/scoped-directory.tsx +77 -0
- package/docs/consumer-skill/examples/website.tsx +56 -0
- package/docs/consumer-skill/references/analytics.md +70 -0
- package/docs/consumer-skill/references/composition.md +219 -2
- package/docs/consumer-skill/references/design-contract.md +37 -10
- package/docs/consumer-skill/references/discovery.md +93 -5
- package/docs/consumer-skill/references/installation.md +20 -3
- package/docs/consumer-skill/references/integration.md +26 -0
- package/docs/consumer-skill/references/public-api.json +2416 -388
- package/docs/consumer-skill/references/review.md +126 -0
- package/docs/consumer-skill/references/theming.md +52 -7
- package/docs/consumer-skill/references/tokens.json +177 -9
- package/docs/consumer-skill/references/workflows.md +129 -1
- package/docs/consumer-skill/scripts/check-composition.mjs +31 -0
- package/docs/consumer-skill/scripts/composition-policy.mjs +317 -0
- package/docs/consumer-skill/scripts/discovery.mjs +65 -8
- package/docs/consumer-skill/scripts/surface-policy.mjs +66 -0
- package/package.json +30 -6
- package/dist/accordion-BRWh3BM1.js.map +0 -1
- package/dist/action-menu-Cx3SdfbN.js.map +0 -1
- package/dist/affordance-geometry.generated-DXl-Zb3Z.js +0 -23
- package/dist/affordance-geometry.generated-DXl-Zb3Z.js.map +0 -1
- package/dist/ai-artifact-DkOArd3-.js.map +0 -1
- package/dist/app-shell-BH_bGcE2.js.map +0 -1
- package/dist/auth-BDB1V_2q.js +0 -704
- package/dist/auth-BDB1V_2q.js.map +0 -1
- package/dist/avatar-CsnWaYmt.js.map +0 -1
- package/dist/breadcrumbs-DdQ_I5ra.js.map +0 -1
- package/dist/button-BS6l5JUw.js.map +0 -1
- package/dist/buttons-Co6GavvM.js +0 -674
- package/dist/buttons-Co6GavvM.js.map +0 -1
- package/dist/chart-DVfcwQu6.js +0 -149
- package/dist/chart-DVfcwQu6.js.map +0 -1
- package/dist/choice-inputs-CavA-SGV.js +0 -644
- package/dist/choice-inputs-CavA-SGV.js.map +0 -1
- package/dist/code-block-DIlqzoiD.js.map +0 -1
- package/dist/combobox-CHD750do.js.map +0 -1
- package/dist/combobox-HDftpzxt.js.map +0 -1
- package/dist/command-D0kWBZfd.js.map +0 -1
- package/dist/comments-CvYeglMS.js +0 -1132
- package/dist/comments-CvYeglMS.js.map +0 -1
- package/dist/containers-CPNyNo1_.js.map +0 -1
- package/dist/data-display-b3d1TfL4.js.map +0 -1
- package/dist/date-picker-DI6kPNof.js.map +0 -1
- package/dist/date-pickers-ByP6Cv2z.js +0 -224
- package/dist/date-pickers-ByP6Cv2z.js.map +0 -1
- package/dist/feedback-a9j9J-9A.js +0 -391
- package/dist/feedback-a9j9J-9A.js.map +0 -1
- package/dist/field-affordance-recipes-CHdUtn2Z.js +0 -17
- package/dist/field-affordance-recipes-CHdUtn2Z.js.map +0 -1
- package/dist/field-state-recipes-CBTRt9Bt.js.map +0 -1
- package/dist/filters-qtrcv1hf.js.map +0 -1
- package/dist/form-field-C6W-y2hR.js.map +0 -1
- package/dist/form-sizing-39NohSqn.js.map +0 -1
- package/dist/forms-numeric-Y15Bg5Nr.js +0 -867
- package/dist/forms-numeric-Y15Bg5Nr.js.map +0 -1
- package/dist/header-B8ex54cY.js.map +0 -1
- package/dist/http-CLTVJc5I.js.map +0 -1
- package/dist/input-DMorJiTI.js +0 -202
- package/dist/input-DMorJiTI.js.map +0 -1
- package/dist/input-ci9fIgFH.js +0 -20
- package/dist/input-ci9fIgFH.js.map +0 -1
- package/dist/item-pJ0GsOiJ.js.map +0 -1
- package/dist/media-gallery-Ca4YmvBi.js.map +0 -1
- package/dist/message-B5-6LeYl.js +0 -108
- package/dist/message-B5-6LeYl.js.map +0 -1
- package/dist/navigation-BTrEb5u4.js.map +0 -1
- package/dist/navigation-DqEITuD2.js.map +0 -1
- package/dist/navigation-row-recipes-BFpvGPGE.js.map +0 -1
- package/dist/overlays-DBqV0J_V.js +0 -982
- package/dist/overlays-DBqV0J_V.js.map +0 -1
- package/dist/page-BMBGjJY8.js.map +0 -1
- package/dist/page-header-BH41wCyY.js.map +0 -1
- package/dist/pagination-C29vvt3I.js.map +0 -1
- package/dist/popover-TInGXsjg.js.map +0 -1
- package/dist/popover.recipes-zgBhMlUu.js.map +0 -1
- package/dist/primitives-DKPOGVpj.js.map +0 -1
- package/dist/rich-text-editor-BZSJchAF.js +0 -575
- package/dist/rich-text-editor-BZSJchAF.js.map +0 -1
- package/dist/rich-text-editor.recipes-DxvOE0Lp.js.map +0 -1
- package/dist/scroll-area-BheMQ270.js.map +0 -1
- package/dist/select-B2mb-qN2.js +0 -108
- package/dist/select-B2mb-qN2.js.map +0 -1
- package/dist/sheet-vOUloJ4O.js.map +0 -1
- package/dist/sidebar-C3UKkbC5.js.map +0 -1
- package/dist/sidebar-CNBKFDRW.js.map +0 -1
- package/dist/smart-card-B5FcKODh.js.map +0 -1
- package/dist/structure.recipes-DjqnBpwz.js.map +0 -1
- package/dist/surface-recipes-CQfRr-VL.js.map +0 -1
- package/dist/table-DnlAJ-xR.js.map +0 -1
- package/dist/table-ghtAQ-JJ.js +0 -1424
- package/dist/table-ghtAQ-JJ.js.map +0 -1
- package/dist/tabs-DY09eoZg.js +0 -187
- package/dist/tabs-DY09eoZg.js.map +0 -1
- package/dist/text-inputs-BhOcedTo.js +0 -331
- package/dist/text-inputs-BhOcedTo.js.map +0 -1
- package/dist/text.styles-BwB7vAF2.js.map +0 -1
- package/dist/timelines-CnZ2S_Gr.js.map +0 -1
- package/dist/typography-Cv8MT-82.js +0 -96
- package/dist/typography-Cv8MT-82.js.map +0 -1
- package/dist/ui-provider-CftIB6TY.js.map +0 -1
- package/dist/upload-DIzw1dx1.js.map +0 -1
- package/dist/upload-queue-xRJ3qDmd.js.map +0 -1
- package/dist/utils-C2EKeIw3.js +0 -72
- package/dist/utils-C2EKeIw3.js.map +0 -1
- package/dist/value-inputs-Co1fu-xv.js +0 -824
- package/dist/value-inputs-Co1fu-xv.js.map +0 -1
- package/dist/workspace-Cbqz4FzN.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"overlays-DUbs1KEi.js","names":["Dialog","DialogPrimitive","DialogTrigger","DialogClose","DialogContent","Button","DialogHeader","DialogFooter","DialogTitle","DialogDescription","isSimpleText","Dialog","DialogPrimitive","React","DialogTriggerPrimitive","DialogClosePrimitive","DialogContentPrimitive","DialogHeaderPrimitive","DialogFooterPrimitive","DialogTitlePrimitive","DialogDescriptionPrimitive","TONE_STYLES","BaseDialog","AlertDialog","AlertDialogPrimitive","AlertDialogTrigger","AlertDialogContent","AlertDialogHeader","AlertDialogFooter","AlertDialogMedia","AlertDialogTitle","AlertDialogDescription","AlertDialogAction","Button","AlertDialogCancel","AlertDialog","AlertDialogPrimitive","React","AlertDialogTriggerPrimitive","AlertDialogContentPrimitive","AlertDialogHeaderPrimitive","AlertDialogFooterPrimitive","AlertDialogTitlePrimitive","AlertDialogDescriptionPrimitive","AlertDialogMediaPrimitive","AlertDialogActionPrimitive","AlertDialogCancelPrimitive","BaseAlertDialog","useThemePortalContainer","cn","SheetDescription","SheetTitle","SheetContent","SheetTrigger","SheetBody","SheetFooter","SheetClose","SheetHeader","Sheet","overlayAnatomyRecipes","Text","motionRecipes","Slot","Button","Button$1","Stack","AlertDescription","Alert","surfaceDividerRecipes","modalRegionRecipes","modalBackdropRecipe","React$1","Dialog$2","props","Dialog","DialogTrigger$1","renderSlot","asChild","DialogPortal","resolvedContainer","container","DialogClose$1","DialogOverlay","className","DialogContent$1","children","showCloseButton","XIcon","DialogHeader$1","DialogFooter$1","DialogTitle$1","DialogDescription$1","isSimpleText$1","value","Dialog$1","DialogTrigger","DialogClose","DialogContent","DialogHeader","textGap","DialogBody","DialogFooter","DialogTitle","DialogDescription","defaultOverlayStrings","defaultAlertDialogStrings","useOverlayActions","strings","useStrings","customStrings","isExecuting","setIsExecuting","useState","executingRef","useRef","handleConfirm","useCallback","onConfirm","closeDialog","onAsyncConfirm","closeOnAsyncComplete","error","loading","onError","handleCancel","onCancel","handleFormSubmit","formId","form","useMemo","emphasis","tone","confirmTone","resolveOpenValue","nextOpen","currentOpen","normalizeGroupState","result","key","keys","state","hasGroupStateChanged","previous","next","useOverlayVisibility","controlledOpen","internalOpen","setInternalOpen","defaultOpen","isControlled","open","openRef","setOpen","resolvedOpen","changed","onOpenChange","onOpen","onClose","useOverlayVisibilityGroup","keyList","stateRef","setKeyOpen","previousState","nextState","closeOthersOnOpen","item","usePendingOverlayFocus","popupRef","useLayoutEffect","popup","pending","modal","active","SIZE_CLASSES","TONE_STYLES$1","HelpCircle","AlertCircle","AlertTriangle","Info","CheckCircle","ActionDialogImpl","visibility","toneStyles","pendingFocusRef","effectiveLoading","hasContent","alertMessage","hasFooter","showCancel","showConfirm","footer","closeOnBackdropClick","details","closeOnEscape","trigger","isValidElement","surfaceStyle","initialFocusRef","title","size","X","description","visuallyHideHeader","showIcon","contentClassName","finalConfirmTone","confirmStyle","confirmButtonOnClick","ActionDialog","memo","WIDTH_CLASSES","TONE_ICONS","ActionDrawerImpl","isHorizontal","direction","showFooter","width","ActionDrawer","AlertDialog$2","AlertDialog","AlertDialogTrigger$1","AlertDialogPortal","AlertDialogOverlay","AlertDialogContent$1","AlertDialogHeader$1","AlertDialogFooter$1","AlertDialogMedia$1","AlertDialogTitle$1","AlertDialogDescription$1","AlertDialogAction$1","AlertDialogCancel$1","isSimpleText","AlertDialog$1","AlertDialogTrigger","AlertDialogContent","AlertDialogHeader","AlertDialogBody","AlertDialogFooter","AlertDialogTitle","AlertDialogDescription","AlertDialogMedia","AlertDialogAction","AlertDialogCancel","TONE_STYLES","ConfirmDialogImpl","mergedStrings","resolvedConfirmTone","destructive","resolvedTone","ConfirmDialog"],"sources":["../src/components/ui/dialog.tsx","../src/components/base/display/dialog.tsx","../src/components/features/overlays/overlays.strings.ts","../src/components/features/overlays/hooks/use-overlay-actions.ts","../src/components/features/overlays/hooks/use-overlay-visibility.ts","../src/components/features/overlays/hooks/use-pending-overlay-focus.ts","../src/components/features/overlays/dialog.tsx","../src/components/features/overlays/drawer.tsx","../src/components/ui/alert-dialog.tsx","../src/components/base/display/alert-dialog.tsx","../src/components/features/overlays/alert-dialog.tsx"],"sourcesContent":["\"use client\";\n\nimport { overlayAnatomyRecipes } from '../../lib/overlay-anatomy-recipes';\nimport { motionRecipes } from '../../lib/motion-recipes';\nimport { modalBackdropRecipe } from './overlay.recipes';\n\nimport { useThemePortalContainer, type ThemePortalContainer } from '../../lib/theme-scope';\n\nimport { Dialog as DialogPrimitive } from \"@base-ui/react/dialog\"\nimport { XIcon } from \"lucide-react\"\nimport * as React from \"react\"\n\nimport { Button } from \"./button\"\nimport { Slot } from \"./slot\"\nimport { cn } from \"../../lib/utils\"\n\nfunction Dialog({ ...props }: DialogPrimitive.Root.Props) {\n return <DialogPrimitive.Root data-slot=\"dialog\" modal=\"trap-focus\" {...props} />\n}\n\nfunction DialogTrigger({\n asChild = false,\n ...props\n}: DialogPrimitive.Trigger.Props & { asChild?: boolean }) {\n const renderSlot = asChild ? <Slot /> : undefined\n\n return (\n <DialogPrimitive.Trigger\n data-slot=\"dialog-trigger\"\n render={renderSlot}\n {...props}\n />\n )\n}\n\nfunction DialogPortal({ container, ...props }: DialogPrimitive.Portal.Props) {\n const resolvedContainer = useThemePortalContainer(container)\n return <DialogPrimitive.Portal container={resolvedContainer} data-slot=\"dialog-portal\" {...props} />\n}\n\nfunction DialogClose({ ...props }: DialogPrimitive.Close.Props) {\n return <DialogPrimitive.Close data-slot=\"dialog-close\" {...props} />\n}\n\nfunction DialogOverlay({\n className,\n ...props\n}: DialogPrimitive.Backdrop.Props) {\n return (\n <DialogPrimitive.Backdrop\n data-slot=\"dialog-overlay\"\n className={cn(modalBackdropRecipe, motionRecipes.backdrop, \"isolate\", className)}\n {...props}\n />\n )\n}\n\nfunction DialogContent({\n className,\n container,\n children,\n showCloseButton = true,\n ...props\n}: DialogPrimitive.Popup.Props & {\n showCloseButton?: boolean\n} & { container?: ThemePortalContainer }) {\n const resolvedContainer = useThemePortalContainer(container)\n return (\n <DialogPortal container={resolvedContainer}>\n <DialogOverlay />\n <DialogPrimitive.Popup\n data-slot=\"dialog-content\"\n className={cn(\n motionRecipes.dialog,\n \"bg-background ring-foreground/10 grid max-w-[calc(100%-2rem)] gap-space-xl rounded-radius p-surface text-sm ring-1 sm:max-w-md fixed top-1/2 left-1/2 z-50 w-full -translate-x-1/2 -translate-y-1/2 outline-none\",\n className\n )}\n {...props}\n >\n {children}\n {!!showCloseButton && (\n <DialogPrimitive.Close\n data-slot=\"dialog-close\"\n render={\n <Button\n variant=\"ghost\"\n data-overlay-close=\"\"\n className={overlayAnatomyRecipes.close}\n size=\"icon-sm\"\n />\n }\n >\n <XIcon\n />\n <span className=\"sr-only\">Close</span>\n </DialogPrimitive.Close>\n )}\n </DialogPrimitive.Popup>\n </DialogPortal>\n )\n}\n\nfunction DialogHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"dialog-header\"\n className={cn(\"flex flex-col\", className)}\n {...props}\n />\n )\n}\n\nfunction DialogFooter({\n className,\n showCloseButton = false,\n children,\n ...props\n}: React.ComponentProps<\"div\"> & {\n showCloseButton?: boolean\n}) {\n return (\n <div\n data-slot=\"dialog-footer\"\n className={cn(\n \"flex flex-col-reverse sm:flex-row sm:justify-end\",\n className\n )}\n {...props}\n >\n {children}\n {!!showCloseButton && (\n <DialogPrimitive.Close render={<Button variant=\"outline\" />}>\n Close\n </DialogPrimitive.Close>\n )}\n </div>\n )\n}\n\nfunction DialogTitle({\n className,\n asChild = false,\n ...props\n}: DialogPrimitive.Title.Props & { asChild?: boolean }) {\n const renderSlot = asChild ? <Slot /> : undefined\n\n return (\n <DialogPrimitive.Title\n data-slot=\"dialog-title\"\n render={renderSlot}\n className={cn(\"leading-none font-medium\", className)}\n {...props}\n />\n )\n}\n\nfunction DialogDescription({\n className,\n asChild = false,\n ...props\n}: DialogPrimitive.Description.Props & { asChild?: boolean }) {\n const renderSlot = asChild ? <Slot /> : undefined\n\n return (\n <DialogPrimitive.Description\n data-slot=\"dialog-description\"\n render={renderSlot}\n className={cn(\"text-muted-foreground *:[a]:hover:text-foreground text-sm *:[a]:underline *:[a]:underline-offset-3\", className)}\n {...props}\n />\n )\n}\n\nexport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogOverlay,\n DialogPortal,\n DialogTitle,\n DialogTrigger,\n}\n","import { modalRegionRecipes, surfaceDividerRecipes } from '../../../lib/surface-recipes';\nimport { overlayAnatomyRecipes } from '../../../lib/overlay-anatomy-recipes';\nimport type { TextGap } from '../structure';\n/**\n * Dialog — structured base wrapper around the shadcn dialog primitive.\n *\n * Primitive state and composition props pass through unchanged. The package\n * wrapper supplies deliberate modal anatomy: separated header and footer,\n * a scroll-owning body, tokenized spacing, and stable BEM hooks.\n */\nimport * as React from 'react';\n\nimport {\n\tDialog as DialogPrimitive,\n\tDialogClose as DialogClosePrimitive,\n\tDialogContent as DialogContentPrimitive,\n\tDialogDescription as DialogDescriptionPrimitive,\n\tDialogFooter as DialogFooterPrimitive,\n\tDialogHeader as DialogHeaderPrimitive,\n\tDialogOverlay,\n\tDialogPortal,\n\tDialogTitle as DialogTitlePrimitive,\n\tDialogTrigger as DialogTriggerPrimitive,\n} from '../../ui/dialog';\nimport { Text } from '../../typography';\nimport { cn } from '../../../lib/utils';\n\nfunction isSimpleText(value: React.ReactNode): value is string | number | bigint {\n\treturn typeof value === 'string' || typeof value === 'number' || typeof value === 'bigint';\n}\n\nexport const Dialog = DialogPrimitive;\n\nexport const DialogTrigger = React.forwardRef<\n\tReact.ElementRef<typeof DialogTriggerPrimitive>,\n\tReact.ComponentPropsWithoutRef<typeof DialogTriggerPrimitive>\n>(function DialogTrigger({ className, ...props }, ref) {\n\treturn (\n\t\t<DialogTriggerPrimitive\n\t\t\tref={ref}\n\t\t\tclassName={cn('dialog-trigger--component', className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n});\n\nDialogTrigger.displayName = 'DialogTrigger';\n\nexport const DialogClose = React.forwardRef<\n\tReact.ElementRef<typeof DialogClosePrimitive>,\n\tReact.ComponentPropsWithoutRef<typeof DialogClosePrimitive>\n>(function DialogClose({ className, ...props }, ref) {\n\treturn (\n\t\t<DialogClosePrimitive\n\t\t\tref={ref}\n\t\t\tclassName={cn('dialog-close--component active:translate-y-0!', className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n});\n\nDialogClose.displayName = 'DialogClose';\n\nexport const DialogContent = React.forwardRef<\n\tReact.ElementRef<typeof DialogContentPrimitive>,\n\tReact.ComponentPropsWithoutRef<typeof DialogContentPrimitive>\n>(function DialogContent({ className, ...props }, ref) {\n\treturn (\n\t\t<DialogContentPrimitive\n\t\t\tref={ref}\n\t\t\tclassName={cn(\n\t\t\t\t// The shell stays flush so its separated regions can each own the\n\t\t\t\t// same default p-surface inset without stacking padding.\n\t\t\t\t'dialog-content--component flex max-h-[min(90vh,48rem)] flex-col gap-0 overflow-hidden rounded-radius bg-background p-0 text-foreground shadow-xl sm:max-w-lg [&_[data-slot=dialog-close]]:active:translate-y-0!', surfaceDividerRecipes.modal.shell,\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n});\n\nDialogContent.displayName = 'DialogContent';\n\nexport const DialogHeader = React.forwardRef<\n\tHTMLDivElement,\n\tReact.ComponentPropsWithoutRef<typeof DialogHeaderPrimitive> & { textGap?: TextGap }\n>(function DialogHeader({ className, textGap = 'normal', ...props }, ref) {\n\treturn (\n\t\t<DialogHeaderPrimitive\n\t\t\tref={ref}\n\t\t\tclassName={cn(\n\t\t\t\t'dialog-header--component', modalRegionRecipes.header,\n\t\t\t\toverlayAnatomyRecipes.header,\n\t\t\t\ttextGap === 'dense' ? 'gap-dense' : 'gap-normal',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n});\n\nDialogHeader.displayName = 'DialogHeader';\n\n/** Scroll-owning content region between the fixed dialog header and footer. */\nexport const DialogBody = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n\tfunction DialogBody({ className, ...props }, ref) {\n\t\treturn (\n\t\t\t<div\n\t\t\t\tref={ref}\n\t\t\t\tdata-slot=\"dialog-body\"\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'dialog-body--component', modalRegionRecipes.body,\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\t{...props}\n\t\t\t/>\n\t\t);\n\t},\n);\n\nDialogBody.displayName = 'DialogBody';\n\nexport const DialogFooter = React.forwardRef<\n\tHTMLDivElement,\n\tReact.ComponentPropsWithoutRef<typeof DialogFooterPrimitive>\n>(function DialogFooter({ className, ...props }, ref) {\n\treturn (\n\t\t<DialogFooterPrimitive\n\t\t\tref={ref}\n\t\t\tclassName={cn(\n\t\t\t\t'dialog-footer--component', modalRegionRecipes.footer,\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n});\n\nDialogFooter.displayName = 'DialogFooter';\n\nexport const DialogTitle = React.forwardRef<\n\tReact.ElementRef<typeof DialogTitlePrimitive>,\n\tReact.ComponentPropsWithoutRef<typeof DialogTitlePrimitive>\n>(function DialogTitle({ children, className, ...props }, ref) {\n\treturn (\n\t\t<DialogTitlePrimitive\n\t\t\tref={ref}\n\t\t\tclassName={cn('dialog-title--component m-0', className)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{isSimpleText(children) ? (\n\t\t\t\t<Text\n\t\t\t\t\ttag=\"span\"\n\t\t\t\t\tsize=\"base\"\n\t\t\t\t\tweight=\"semibold\"\n\t\t\t\t\tlineHeight=\"snug\"\n\t\t\t\t\tclassName=\"dialog-title--text\"\n\t\t\t\t>\n\t\t\t\t\t{children}\n\t\t\t\t</Text>\n\t\t\t) : children}\n\t\t</DialogTitlePrimitive>\n\t);\n});\n\nDialogTitle.displayName = 'DialogTitle';\n\nexport const DialogDescription = React.forwardRef<\n\tReact.ElementRef<typeof DialogDescriptionPrimitive>,\n\tReact.ComponentPropsWithoutRef<typeof DialogDescriptionPrimitive>\n>(function DialogDescription({ children, className, ...props }, ref) {\n\treturn (\n\t\t<DialogDescriptionPrimitive\n\t\t\tref={ref}\n\t\t\tclassName={cn('dialog-description--component m-0', className)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{isSimpleText(children) ? (\n\t\t\t\t<Text\n\t\t\t\t\ttag=\"span\"\n\t\t\t\t\ttype=\"secondary\"\n\t\t\t\t\tlineHeight=\"relaxed\"\n\t\t\t\t\tclassName=\"dialog-description--text\"\n\t\t\t\t>\n\t\t\t\t\t{children}\n\t\t\t\t</Text>\n\t\t\t) : children}\n\t\t</DialogDescriptionPrimitive>\n\t);\n});\n\nDialogDescription.displayName = 'DialogDescription';\n\nexport { DialogOverlay, DialogPortal };\n","/**\n * Default user-facing strings shared by ActionDialog, ActionDrawer, and\n * ConfirmDialog recipes.\n *\n * Consumers wire backend i18n at the call site:\n *\n * <ActionDialog strings={{ confirm: t('common.confirm') }} … />\n */\n\nexport interface OverlayStrings {\n\tconfirm: string;\n\tcancel: string;\n\tclose: string;\n\tloading: string;\n\tdialogLabel: string;\n\tdrawerLabel: string;\n\talertDialogLabel: string;\n}\n\nexport const defaultOverlayStrings: OverlayStrings = {\n\tconfirm: 'Confirm',\n\tcancel: 'Cancel',\n\tclose: 'Close',\n\tloading: 'Loading...',\n\tdialogLabel: 'Dialog',\n\tdrawerLabel: 'Drawer',\n\talertDialogLabel: 'Confirmation',\n};\n\nexport const defaultAlertDialogStrings: OverlayStrings = {\n\tconfirm: 'Continue',\n\tcancel: 'Cancel',\n\tclose: 'Close',\n\tloading: 'Loading...',\n\tdialogLabel: 'Dialog',\n\tdrawerLabel: 'Drawer',\n\talertDialogLabel: 'Confirmation',\n};\n","import { useCallback, useMemo, useRef, useState } from 'react';\n\nimport { useStrings, type StringsProp } from '../../../../lib/strings';\n\nimport {\n\tdefaultOverlayStrings,\n\ttype OverlayStrings,\n} from '../overlays.strings';\nimport type {\n\tOverlayButtonTone,\n\tOverlayActionProps,\n\tOverlayTone,\n} from '../overlays.types';\n\nexport interface UseOverlayActionsOptions\n\textends Pick<\n\t\tOverlayActionProps,\n\t\t| 'onConfirm'\n\t\t| 'onAsyncConfirm'\n\t\t| 'closeOnAsyncComplete'\n\t\t| 'confirmTone'\n\t\t| 'loading'\n\t\t| 'formId'\n\t> {\n\tcloseDialog: () => void;\n\tonCancel?: () => void;\n\tcustomStrings?: StringsProp<OverlayStrings>;\n\temphasis?: boolean;\n\ttone?: OverlayTone;\n\t/** Called when `onAsyncConfirm` throws. Library DEV-logs the error;\n\t * consumer wires telemetry. */\n\tonError?: (error: unknown) => void;\n}\n\nexport interface UseOverlayActionsReturn {\n\t/** Overrides this surface's own copy. */\n\tstrings: OverlayStrings;\n\tisExecuting: boolean;\n\thandleConfirm: () => Promise<void>;\n\thandleCancel: () => void;\n\tfinalConfirmTone: OverlayButtonTone;\n\tconfirmButtonOnClick: (() => Promise<void>) | undefined;\n\teffectiveLoading: boolean;\n}\n\nexport function useOverlayActions({\n\tcloseDialog,\n\tonConfirm,\n\tonAsyncConfirm,\n\tcloseOnAsyncComplete = true,\n\tconfirmTone = 'primary',\n\tloading = false,\n\tformId,\n\tonCancel,\n\tcustomStrings,\n\temphasis = false,\n\ttone = 'neutral',\n\tonError,\n}: UseOverlayActionsOptions): UseOverlayActionsReturn {\n\tconst strings = useStrings(defaultOverlayStrings, customStrings);\n\n\tconst [isExecuting, setIsExecuting] = useState(false);\n\tconst executingRef = useRef(false);\n\n\tconst handleConfirm = useCallback(async () => {\n\t\tif (loading || executingRef.current) return;\n\t\tif (onConfirm) {\n\t\t\tonConfirm();\n\t\t\tcloseDialog();\n\t\t\treturn;\n\t\t}\n\n\t\tif (onAsyncConfirm) {\n\t\t\texecutingRef.current = true;\n\t\t\tsetIsExecuting(true);\n\t\t\ttry {\n\t\t\t\tawait onAsyncConfirm();\n\t\t\t\tif (closeOnAsyncComplete) {\n\t\t\t\t\tcloseDialog();\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tif (import.meta.env?.DEV) {\n\t\t\t\t\tconsole.error('Overlay async confirm failed:', error);\n\t\t\t\t}\n\t\t\t\tonError?.(error);\n\t\t\t} finally {\n\t\t\t\texecutingRef.current = false;\n\t\t\t\tsetIsExecuting(false);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tcloseDialog();\n\t}, [loading, onConfirm, onAsyncConfirm, closeOnAsyncComplete, closeDialog, onError]);\n\n\tconst handleCancel = useCallback(() => {\n\t\tif (loading || executingRef.current) return;\n\t\tonCancel?.();\n\t\tcloseDialog();\n\t}, [loading, onCancel, closeDialog]);\n\n\tconst handleFormSubmit = useCallback(async () => {\n\t\tif (!formId || loading || executingRef.current) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst form = document.getElementById(formId);\n\n\t\tif (!(form instanceof HTMLFormElement)) {\n\t\t\treturn;\n\t\t}\n\n\t\tform.requestSubmit();\n\t}, [formId, loading]);\n\n\tconst finalConfirmTone = useMemo<OverlayButtonTone>(() => {\n\t\tif (!emphasis) return confirmTone ?? 'primary';\n\t\tif (tone === 'destructive') return 'destructive';\n\t\tif (tone === 'warning') return 'warning';\n\t\tif (tone === 'success') return 'success';\n\t\treturn confirmTone ?? 'primary';\n\t}, [emphasis, tone, confirmTone]);\n\n\tconst confirmButtonOnClick = formId ? handleFormSubmit : handleConfirm;\n\n\treturn {\n\t\tstrings,\n\t\tisExecuting,\n\t\thandleConfirm,\n\t\thandleCancel,\n\t\tfinalConfirmTone,\n\t\tconfirmButtonOnClick,\n\t\teffectiveLoading: isExecuting || loading,\n\t};\n}\n","import {\n\tuseCallback,\n\tuseMemo,\n\tuseRef,\n\tuseState,\n\ttype Dispatch,\n\ttype SetStateAction,\n} from 'react';\n\nexport type OverlayOpenSetter = Dispatch<SetStateAction<boolean>>;\n\nexport interface OverlayVisibilityProps {\n\topen: boolean;\n\t/** Fired when a change is opened. */\n\tonOpenChange: (open: boolean) => void;\n}\n\nexport interface UseOverlayVisibilityOptions {\n\tdefaultOpen?: boolean;\n\topen?: boolean;\n\t/** Fired when a change is opened. */\n\tonOpenChange?: (open: boolean) => void;\n\t/** Fired when an entry is opened. */\n\tonOpen?: () => void;\n\tonClose?: () => void;\n}\n\nexport interface UseOverlayVisibilityReturn {\n\topen: boolean;\n\tisOpen: boolean;\n\tsetOpen: OverlayOpenSetter;\n\tshow: () => void;\n\thide: () => void;\n\ttoggle: () => void;\n\toverlayProps: OverlayVisibilityProps;\n}\n\nexport type OverlayVisibilityGroupState<TKey extends string = string> = Record<TKey, boolean>;\n\nexport interface UseOverlayVisibilityGroupOptions<TKey extends string = string> {\n\tdefaultOpen?: Partial<Record<TKey, boolean>>;\n\topen?: Partial<Record<TKey, boolean>>;\n\t/** Fired when a change is opened. */\n\tonOpenChange?: (\n\t\tkey: TKey,\n\t\topen: boolean,\n\t\tstate: OverlayVisibilityGroupState<TKey>,\n\t) => void;\n\tcloseOthersOnOpen?: boolean;\n}\n\nexport type UseOverlayVisibilityGroupReturn<TKey extends string = string> = Record<\n\tTKey,\n\tUseOverlayVisibilityReturn\n>;\n\nfunction resolveOpenValue(\n\tnextOpen: SetStateAction<boolean>,\n\tcurrentOpen: boolean,\n): boolean {\n\tif (typeof nextOpen === 'function') {\n\t\treturn (nextOpen as (open: boolean) => boolean)(currentOpen);\n\t}\n\treturn nextOpen;\n}\n\nfunction normalizeGroupState<TKey extends string>(\n\tkeys: readonly TKey[],\n\tstate?: Partial<Record<TKey, boolean>>,\n): OverlayVisibilityGroupState<TKey> {\n\tconst result = {} as OverlayVisibilityGroupState<TKey>;\n\tfor (const key of keys) {\n\t\tresult[key] = Boolean(state?.[key]);\n\t}\n\treturn result;\n}\n\nfunction hasGroupStateChanged<TKey extends string>(\n\tprevious: OverlayVisibilityGroupState<TKey>,\n\tnext: OverlayVisibilityGroupState<TKey>,\n\tkeys: readonly TKey[],\n): boolean {\n\treturn keys.some((key) => previous[key] !== next[key]);\n}\n\nexport function useOverlayVisibility({\n\tdefaultOpen = false,\n\topen: controlledOpen,\n\tonOpenChange,\n\tonOpen,\n\tonClose,\n}: UseOverlayVisibilityOptions = {}): UseOverlayVisibilityReturn {\n\tconst [internalOpen, setInternalOpen] = useState(defaultOpen);\n\tconst isControlled = controlledOpen !== undefined;\n\tconst open = isControlled ? controlledOpen : internalOpen;\n\tconst openRef = useRef(open);\n\topenRef.current = open;\n\n\tconst setOpen = useCallback<OverlayOpenSetter>(\n\t\t(nextOpen) => {\n\t\t\tconst resolvedOpen = resolveOpenValue(nextOpen, openRef.current);\n\t\t\tconst changed = openRef.current !== resolvedOpen;\n\n\t\t\tif (!isControlled) {\n\t\t\t\tsetInternalOpen(resolvedOpen);\n\t\t\t}\n\n\t\t\tif (!changed) return;\n\n\t\t\topenRef.current = resolvedOpen;\n\t\t\tonOpenChange?.(resolvedOpen);\n\t\t\tif (resolvedOpen) {\n\t\t\t\tonOpen?.();\n\t\t\t} else {\n\t\t\t\tonClose?.();\n\t\t\t}\n\t\t},\n\t\t[isControlled, onClose, onOpen, onOpenChange],\n\t);\n\n\tconst show = useCallback(() => {\n\t\tsetOpen(true);\n\t}, [setOpen]);\n\n\tconst hide = useCallback(() => {\n\t\tsetOpen(false);\n\t}, [setOpen]);\n\n\tconst toggle = useCallback(() => {\n\t\tsetOpen((currentOpen) => !currentOpen);\n\t}, [setOpen]);\n\n\tconst overlayProps = useMemo(\n\t\t() => ({\n\t\t\topen,\n\t\t\tonOpenChange: setOpen,\n\t\t}),\n\t\t[open, setOpen],\n\t);\n\n\treturn {\n\t\topen,\n\t\tisOpen: open,\n\t\tsetOpen,\n\t\tshow,\n\t\thide,\n\t\ttoggle,\n\t\toverlayProps,\n\t};\n}\n\nexport function useOverlayVisibilityGroup<const TKeys extends readonly string[]>(\n\tkeys: TKeys,\n\t{\n\t\tdefaultOpen,\n\t\topen: controlledOpen,\n\t\tonOpenChange,\n\t\tcloseOthersOnOpen = false,\n\t}: UseOverlayVisibilityGroupOptions<TKeys[number] & string> = {},\n): UseOverlayVisibilityGroupReturn<TKeys[number] & string> {\n\ttype TKey = TKeys[number] & string;\n\n\tconst keyList = keys as readonly TKey[];\n\tconst [internalOpen, setInternalOpen] = useState<OverlayVisibilityGroupState<TKey>>(\n\t\t() => normalizeGroupState(keyList, defaultOpen),\n\t);\n\tconst isControlled = controlledOpen !== undefined;\n\tconst state = normalizeGroupState(keyList, isControlled ? controlledOpen : internalOpen);\n\tconst stateRef = useRef(state);\n\tstateRef.current = state;\n\n\tconst setKeyOpen = useCallback(\n\t\t(key: TKey, nextOpen: SetStateAction<boolean>) => {\n\t\t\tconst previousState = stateRef.current;\n\t\t\tconst resolvedOpen = resolveOpenValue(nextOpen, previousState[key]);\n\t\t\tconst nextState = {\n\t\t\t\t...previousState,\n\t\t\t\t[key]: resolvedOpen,\n\t\t\t} as OverlayVisibilityGroupState<TKey>;\n\n\t\t\tif (closeOthersOnOpen && resolvedOpen) {\n\t\t\t\tfor (const item of keyList) {\n\t\t\t\t\tif (item !== key) {\n\t\t\t\t\t\tnextState[item] = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst changed = hasGroupStateChanged(previousState, nextState, keyList);\n\n\t\t\tif (!isControlled) {\n\t\t\t\tsetInternalOpen(nextState);\n\t\t\t}\n\n\t\t\tif (!changed) return;\n\n\t\t\tstateRef.current = nextState;\n\t\t\tonOpenChange?.(key, resolvedOpen, nextState);\n\t\t},\n\t\t[closeOthersOnOpen, isControlled, keyList, onOpenChange],\n\t);\n\n\treturn useMemo(() => {\n\t\tconst result = {} as UseOverlayVisibilityGroupReturn<TKey>;\n\n\t\tfor (const key of keyList) {\n\t\t\tconst open = state[key];\n\t\t\tconst setOpen: OverlayOpenSetter = (nextOpen) => {\n\t\t\t\tsetKeyOpen(key, nextOpen);\n\t\t\t};\n\n\t\t\tresult[key] = {\n\t\t\t\topen,\n\t\t\t\tisOpen: open,\n\t\t\t\tsetOpen,\n\t\t\t\tshow: () => setKeyOpen(key, true),\n\t\t\t\thide: () => setKeyOpen(key, false),\n\t\t\t\ttoggle: () => setKeyOpen(key, (currentOpen) => !currentOpen),\n\t\t\t\toverlayProps: {\n\t\t\t\t\topen,\n\t\t\t\t\tonOpenChange: setOpen,\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\n\t\treturn result;\n\t}, [keyList, setKeyOpen, state]);\n}\n","import { useLayoutEffect, useRef } from 'react';\n\n/** Keep modal focus anchored when its focused action becomes disabled. */\nexport function usePendingOverlayFocus(pending: boolean, modal: boolean | 'trap-focus' = true) {\n\tconst popupRef = useRef<HTMLDivElement>(null);\n\tuseLayoutEffect(() => {\n\t\tconst popup = popupRef.current;\n\t\tif (!pending || !modal || !popup) return;\n\t\tconst active = popup.ownerDocument.activeElement;\n\t\t// Preserve enabled fields and consumer-owned custom footer controls.\n\t\tif (active === popup.ownerDocument.body || (active && popup.contains(active) && active.matches(':disabled'))) {\n\t\t\tpopup.focus({ preventScroll: true });\n\t\t}\n\t}, [pending, modal]);\n\treturn popupRef;\n}\n","import { overlayAnatomyRecipes } from '../../../lib/overlay-anatomy-recipes';\nimport {\n\tAlertCircle,\n\tAlertTriangle,\n\tCheckCircle,\n\tHelpCircle,\n\tInfo,\n\tX,\n} from 'lucide-react';\nimport { isValidElement, memo, type ReactNode } from 'react';\n\nimport { Button } from '../../base/buttons';\nimport { Alert, AlertDescription } from '../../base/feedback';\nimport {\n\tDialog as BaseDialog,\n\tDialogBody,\n\tDialogClose,\n\tDialogContent,\n\tDialogDescription,\n\tDialogFooter,\n\tDialogHeader,\n\tDialogTitle,\n\tDialogTrigger,\n} from '../../base/display/dialog';\nimport { Stack } from '../../base/structure';\nimport { Text } from '../../typography';\nimport { cn } from '../../../lib/utils';\n\nimport { useOverlayActions, useOverlayVisibility } from './hooks';\nimport { usePendingOverlayFocus } from './hooks/use-pending-overlay-focus';\nimport type { ActionDialogProps, OverlaySize, OverlayTone } from './overlays.types';\n\nconst SIZE_CLASSES: Record<OverlaySize, string> = {\n\txs: 'sm:max-w-xs',\n\tsm: 'sm:max-w-sm',\n\tmd: 'sm:max-w-md',\n\tlg: 'sm:max-w-lg',\n\txl: 'sm:max-w-xl',\n\t'2xl': 'sm:max-w-2xl',\n\t'3xl': 'sm:max-w-3xl',\n\t'4xl': 'sm:max-w-4xl',\n\t'5xl': 'sm:max-w-5xl',\n\tfull: 'sm:max-w-[calc(100vw-2rem)]',\n};\n\nconst TONE_STYLES: Record<OverlayTone, { icon: ReactNode; classes: string }> = {\n\tneutral: {\n\t\ticon: <HelpCircle className=\"size-icon text-muted-foreground\" />,\n\t\tclasses: '',\n\t},\n\tdestructive: {\n\t\ticon: <AlertCircle className=\"size-icon text-destructive\" />,\n\t\tclasses: 'border-destructive/50',\n\t},\n\twarning: {\n\t\ticon: <AlertTriangle className=\"size-icon text-warning-accent\" />,\n\t\tclasses: 'border-warning/50',\n\t},\n\tinfo: {\n\t\ticon: <Info className=\"size-icon text-info\" />,\n\t\tclasses: 'border-info/50',\n\t},\n\tsuccess: {\n\t\ticon: <CheckCircle className=\"size-icon text-success\" />,\n\t\tclasses: 'border-success/50',\n\t},\n};\n\nfunction ActionDialogImpl({\n\topen,\n\tonOpenChange,\n\tonClose,\n\tchildren,\n\ttitle,\n\tdescription,\n\tvisuallyHideHeader = false,\n\tclassName,\n\tcontentClassName,\n\tshowCloseButton = true,\n\tsurfaceStyle,\n\tinitialFocusRef,\n\tcloseOnEscape = true,\n\tcloseOnBackdropClick = true,\n\tstrings: customStrings,\n\tshowCancel = true,\n\tshowConfirm = true,\n\tonCancel,\n\tonConfirm,\n\tonAsyncConfirm,\n\tonError,\n\tcloseOnAsyncComplete = true,\n\tconfirmTone = 'primary',\n\tconfirmStyle = 'solid',\n\tloading = false,\n\tformId,\n\tfooter,\n\temphasis = false,\n\ttone = 'neutral',\n\tshowIcon = false,\n\talertMessage,\n\tsize = 'lg',\n\ttrigger,\n}: ActionDialogProps) {\n\tconst visibility = useOverlayVisibility({ open, onOpenChange, onClose });\n\tconst {\n\t\tstrings,\n\t\tfinalConfirmTone,\n\t\tconfirmButtonOnClick,\n\t\teffectiveLoading,\n\t\thandleCancel,\n\t} = useOverlayActions({\n\t\tcloseDialog: visibility.hide,\n\t\tonConfirm,\n\t\tonAsyncConfirm,\n\t\tonError,\n\t\tcloseOnAsyncComplete,\n\t\tconfirmTone,\n\t\tloading,\n\t\tformId,\n\t\tonCancel,\n\t\tcustomStrings,\n\t\temphasis,\n\t\ttone,\n\t});\n\n\tconst toneStyles = TONE_STYLES[tone];\n\tconst pendingFocusRef = usePendingOverlayFocus(effectiveLoading);\n\tconst hasContent = Boolean(children || alertMessage);\n\tconst hasFooter = showCancel || showConfirm || footer;\n\n\treturn (\n\t\t<BaseDialog\n\t\t\topen={visibility.open}\n\t\t\tmodal\n\t\t\tdisablePointerDismissal={effectiveLoading || !closeOnBackdropClick}\n\t\t\tonOpenChange={(nextOpen, details) => {\n\t\t\t\tif (!nextOpen && (effectiveLoading || (details.reason === 'escape-key' && !closeOnEscape))) {\n\t\t\t\t\tdetails.cancel();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tvisibility.setOpen(nextOpen);\n\t\t\t}}\n\t\t>\n\t\t\t{!!trigger && (isValidElement(trigger) ? (\n\t\t\t\t<DialogTrigger render={trigger} />\n\t\t\t) : (\n\t\t\t\t<DialogTrigger className=\"overlay-trigger--fallback cursor-pointer\">\n\t\t\t\t\t<Text tag=\"span\" size=\"inherit\" className=\"text-inherit\">\n\t\t\t\t\t\t{trigger}\n\t\t\t\t\t</Text>\n\t\t\t\t</DialogTrigger>\n\t\t\t))}\n\n\t\t\t<DialogContent\n\t\t\t\tref={pendingFocusRef}\n\t\t\t\tshowCloseButton={false}\n\t\t\t\tstyle={surfaceStyle}\n\t\t\t\tinitialFocus={initialFocusRef}\n\t\t\t\taria-label={title ? undefined : strings.dialogLabel}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'action-dialog--component dialog--component',\n\t\t\t\t\tSIZE_CLASSES[size],\n\t\t\t\t\temphasis && toneStyles.classes,\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t{!!showCloseButton && (\n\t\t\t\t<DialogClose\n\t\t\t\t\tdisabled={effectiveLoading}\n\t\t\t\t\trender={(\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\tsize=\"sm\" iconOnly\n\t\t\t\t\t\t\tdata-overlay-close=\"\"\n className={cn(overlayAnatomyRecipes.close, 'z-10 text-muted-foreground hover:bg-muted hover:text-foreground')}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<X className=\"size-icon\" />\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t)}\n\t\t\t\t\taria-label={strings.close}\n\t\t\t\t/>\n\t\t\t\t)}\n\n\t\t\t\t{!!(title || description) && (\n\t\t\t\t\t<DialogHeader className={cn('dialog--header', visuallyHideHeader && 'sr-only')}>\n\t\t\t\t\t\t<Stack direction=\"horizontal\" gap=\"sm\" align=\"start\" wrap={false}>\n\t\t\t\t\t\t\t{!!showIcon && <span className=\"shrink-0 pt-space-2xs\">{toneStyles.icon}</span>}\n\t\t\t\t\t\t\t<Stack gap=\"normal\" className=\"flex-1\">\n\t\t\t\t\t\t\t\t{!!title && <DialogTitle>{title}</DialogTitle>}\n\t\t\t\t\t\t\t\t{!!description && <DialogDescription>{description}</DialogDescription>}\n\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t</Stack>\n\t\t\t\t\t</DialogHeader>\n\t\t\t\t)}\n\n\t\t\t\t{!!hasContent && (\n\t\t\t\t\t<DialogBody className={cn('dialog--body', contentClassName)}>\n\t\t\t\t\t\t{!!alertMessage && (\n\t\t\t\t\t\t\t<Alert tone={tone} className=\"mb-space-md\">\n\t\t\t\t\t\t\t\t<AlertDescription>{alertMessage}</AlertDescription>\n\t\t\t\t\t\t\t</Alert>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{children}\n\t\t\t\t\t</DialogBody>\n\t\t\t\t)}\n\n\t\t\t\t{!!hasFooter && (\n\t\t\t\t\t<DialogFooter className=\"dialog--footer\">\n\t\t\t\t\t\t{footer ?? (\n\t\t\t\t\t\t\t<Stack\n\t\t\t\t\t\t\t\tdirection={{ base: 'vertical', sm: 'horizontal' }}\n\t\t\t\t\t\t\t\tgap=\"sm\"\n\t\t\t\t\t\t\t\talign={{ base: 'stretch', sm: 'center' }}\n\t\t\t\t\t\t\t\tjustify=\"end\"\n\t\t\t\t\t\t\t\tclassName=\"w-full\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{!!showCancel && (\n\t\t\t\t\t\t\t\t\t<Button type=\"button\" tone=\"secondary\" buttonStyle=\"outline\" onClick={handleCancel} disabled={effectiveLoading}>\n\t\t\t\t\t\t\t\t\t\t{strings.cancel}\n\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t{!!showConfirm && (\n\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\ttone={finalConfirmTone}\n\t\t\t\t\t\t\t\t\t\tbuttonStyle={confirmStyle}\n\t\t\t\t\t\t\t\t\t\tonClick={confirmButtonOnClick}\n\t\t\t\t\t\t\t\t\t\tdisabled={effectiveLoading}\n\t\t\t\t\t\t\t\t\t\tloading={effectiveLoading}\n\t\t\t\t\t\t\t\t\t\tstrings={{ loading: strings.loading }}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{strings.confirm}\n\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</DialogFooter>\n\t\t\t\t)}\n\t\t\t</DialogContent>\n\t\t</BaseDialog>\n\t);\n}\n\nexport const ActionDialog = memo(ActionDialogImpl);\nActionDialog.displayName = 'ActionDialog';\n","import { overlayAnatomyRecipes } from '../../../lib/overlay-anatomy-recipes';\nimport {\n\tAlertCircle,\n\tAlertTriangle,\n\tCheckCircle,\n\tHelpCircle,\n\tInfo,\n\tX,\n} from 'lucide-react';\nimport { isValidElement, memo, type ReactNode } from 'react';\n\nimport { Button } from '../../base/buttons';\nimport { Alert, AlertDescription } from '../../base/feedback';\nimport {\n\tSheet,\n\tSheetBody,\n\tSheetClose,\n\tSheetContent,\n\tSheetDescription,\n\tSheetFooter,\n\tSheetHeader,\n\tSheetTitle,\n\tSheetTrigger,\n} from '../../base/sheet';\nimport { Stack } from '../../base/structure';\nimport { Text } from '../../typography';\nimport { cn } from '../../../lib/utils';\n\nimport { useOverlayActions, useOverlayVisibility } from './hooks';\nimport { usePendingOverlayFocus } from './hooks/use-pending-overlay-focus';\nimport type { ActionDrawerProps, OverlaySize, OverlayTone } from './overlays.types';\n\nconst WIDTH_CLASSES: Record<OverlaySize, string> = {\n\txs: 'data-[side=left]:sm:max-w-xs data-[side=right]:sm:max-w-xs',\n\tsm: 'data-[side=left]:sm:max-w-sm data-[side=right]:sm:max-w-sm',\n\tmd: 'data-[side=left]:sm:max-w-md data-[side=right]:sm:max-w-md',\n\tlg: 'data-[side=left]:sm:max-w-lg data-[side=right]:sm:max-w-lg',\n\txl: 'data-[side=left]:sm:max-w-xl data-[side=right]:sm:max-w-xl',\n\t'2xl': 'data-[side=left]:sm:max-w-2xl data-[side=right]:sm:max-w-2xl',\n\t'3xl': 'data-[side=left]:sm:max-w-3xl data-[side=right]:sm:max-w-3xl',\n\t'4xl': 'data-[side=left]:sm:max-w-4xl data-[side=right]:sm:max-w-4xl',\n\t'5xl': 'data-[side=left]:sm:max-w-5xl data-[side=right]:sm:max-w-5xl',\n\tfull: 'data-[side=left]:sm:max-w-[calc(100vw-2rem)] data-[side=right]:sm:max-w-[calc(100vw-2rem)]',\n};\n\nconst TONE_ICONS: Record<OverlayTone, ReactNode> = {\n\tneutral: <HelpCircle className=\"size-icon text-muted-foreground\" />,\n\tdestructive: <AlertCircle className=\"size-icon text-destructive\" />,\n\twarning: <AlertTriangle className=\"size-icon text-warning-accent\" />,\n\tinfo: <Info className=\"size-icon text-info\" />,\n\tsuccess: <CheckCircle className=\"size-icon text-success\" />,\n};\n\nfunction ActionDrawerImpl({\n\topen,\n\tonOpenChange,\n\tonClose,\n\tchildren,\n\ttitle,\n\tdescription,\n\tvisuallyHideHeader = false,\n\tshowCloseButton = true,\n\tclassName,\n\tcontentClassName,\n\tinitialFocusRef,\n\tcloseOnEscape = true,\n\tcloseOnBackdropClick = true,\n\tstrings: customStrings,\n\tshowCancel = true,\n\tshowConfirm = true,\n\tonCancel,\n\tonConfirm,\n\tonAsyncConfirm,\n\tonError,\n\tcloseOnAsyncComplete = true,\n\tconfirmTone = 'primary',\n\tconfirmStyle = 'solid',\n\tloading = false,\n\tformId,\n\tfooter,\n\temphasis = false,\n\ttone = 'neutral',\n\tshowIcon = false,\n\talertMessage,\n\tdirection = 'right',\n\twidth = 'lg',\n\tshowFooter = true,\n\tmodal = true,\n\ttrigger,\n}: ActionDrawerProps) {\n\tconst visibility = useOverlayVisibility({ open, onOpenChange, onClose });\n\tconst {\n\t\tstrings,\n\t\tfinalConfirmTone,\n\t\tconfirmButtonOnClick,\n\t\teffectiveLoading,\n\t\thandleCancel,\n\t} = useOverlayActions({\n\t\tcloseDialog: visibility.hide,\n\t\tonConfirm,\n\t\tonAsyncConfirm,\n\t\tonError,\n\t\tcloseOnAsyncComplete,\n\t\tconfirmTone,\n\t\tloading,\n\t\tformId,\n\t\tonCancel,\n\t\tcustomStrings,\n\t\temphasis,\n\t\ttone,\n\t});\n\n\tconst isHorizontal = direction === 'left' || direction === 'right';\n\tconst pendingFocusRef = usePendingOverlayFocus(effectiveLoading, modal);\n\tconst hasContent = Boolean(children || alertMessage);\n\tconst hasFooter = showFooter && (showCancel || showConfirm || footer);\n\n\treturn (\n\t\t<Sheet\n\t\t\topen={visibility.open}\n\t\t\tmodal={modal}\n\t\t\tdisablePointerDismissal={effectiveLoading || !closeOnBackdropClick}\n\t\t\tonOpenChange={(nextOpen, details) => {\n\t\t\t\tif (!nextOpen && (effectiveLoading || (details.reason === 'escape-key' && !closeOnEscape))) {\n\t\t\t\t\tdetails.cancel();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tvisibility.setOpen(nextOpen);\n\t\t\t}}\n\t\t>\n\t\t\t{!!trigger && (isValidElement(trigger) ? (\n\t\t\t\t<SheetTrigger render={trigger} />\n\t\t\t) : (\n\t\t\t\t<SheetTrigger className=\"overlay-trigger--fallback cursor-pointer\">\n\t\t\t\t\t<Text tag=\"span\" size=\"inherit\" className=\"text-inherit\">{trigger}</Text>\n\t\t\t\t</SheetTrigger>\n\t\t\t))}\n\n\t\t\t<SheetContent\n\t\t\t\tref={pendingFocusRef}\n\t\t\t\tside={direction}\n\t\t\t\tshowCloseButton={false}\n\t\t\t\tinitialFocus={initialFocusRef}\n\t\t\t\taria-label={title ? undefined : strings.drawerLabel}\n\t\t\t\t// The vendored SheetContent renders its backdrop unconditionally,\n\t\t\t\t// so a non-modal drawer would still sit behind a full-viewport\n\t\t\t\t// scrim. This marks the panel so the token layer can drop it.\n\t\t\t\tdata-modal={modal === false ? 'false' : undefined}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'action-drawer--component drawer--component',\n\t\t\t\t\tisHorizontal && 'data-[side=left]:w-full data-[side=right]:w-full',\n\t\t\t\t\tisHorizontal && WIDTH_CLASSES[width],\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t{showCloseButton && <SheetClose\n\t\t\t\t\tdisabled={effectiveLoading}\n\t\t\t\t\trender={(\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\tsize=\"sm\" iconOnly\n\t\t\t\t\t\t\tdata-overlay-close=\"\"\n className={cn(overlayAnatomyRecipes.close, 'z-10 text-muted-foreground hover:bg-muted hover:text-foreground')}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<X className=\"size-icon\" />\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t)}\n\t\t\t\t\taria-label={strings.close}\n\t\t\t\t/>}\n\n\t\t\t\t{!!(title || description) && (\n\t\t\t\t\t<SheetHeader className={cn('drawer--header', visuallyHideHeader && 'sr-only')}>\n\t\t\t\t\t\t<Stack direction=\"horizontal\" gap=\"sm\" align=\"start\" wrap={false}>\n\t\t\t\t\t\t\t{!!showIcon && <span className=\"shrink-0 pt-space-2xs\">{TONE_ICONS[tone]}</span>}\n\t\t\t\t\t\t\t<Stack gap=\"normal\" className=\"flex-1\">\n\t\t\t\t\t\t\t\t{!!title && <SheetTitle>{title}</SheetTitle>}\n\t\t\t\t\t\t\t\t{!!description && <SheetDescription>{description}</SheetDescription>}\n\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t</Stack>\n\t\t\t\t\t</SheetHeader>\n\t\t\t\t)}\n\n\t\t\t\t{!!hasContent && (\n\t\t\t\t\t<SheetBody className={cn('drawer--body', contentClassName)}>\n\t\t\t\t\t\t{!!alertMessage && (\n\t\t\t\t\t\t\t<Alert tone={tone} className=\"mb-space-md\">\n\t\t\t\t\t\t\t\t<AlertDescription>{alertMessage}</AlertDescription>\n\t\t\t\t\t\t\t</Alert>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{children}\n\t\t\t\t\t</SheetBody>\n\t\t\t\t)}\n\n\t\t\t\t{!!hasFooter && (\n\t\t\t\t\t<SheetFooter className=\"drawer--footer\">\n\t\t\t\t\t\t{footer ?? (\n\t\t\t\t\t\t\t<Stack\n\t\t\t\t\t\t\t\tdirection={{ base: 'vertical', sm: 'horizontal' }}\n\t\t\t\t\t\t\t\tgap=\"sm\"\n\t\t\t\t\t\t\t\talign={{ base: 'stretch', sm: 'center' }}\n\t\t\t\t\t\t\t\tjustify=\"end\"\n\t\t\t\t\t\t\t\tclassName=\"w-full\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{!!showCancel && (\n\t\t\t\t\t\t\t\t\t<Button type=\"button\" tone=\"secondary\" buttonStyle=\"outline\" onClick={handleCancel} disabled={effectiveLoading}>\n\t\t\t\t\t\t\t\t\t\t{strings.cancel}\n\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t{!!showConfirm && (\n\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\ttone={finalConfirmTone}\n\t\t\t\t\t\t\t\t\t\tbuttonStyle={confirmStyle}\n\t\t\t\t\t\t\t\t\t\tonClick={confirmButtonOnClick}\n\t\t\t\t\t\t\t\t\t\tdisabled={effectiveLoading}\n\t\t\t\t\t\t\t\t\t\tloading={effectiveLoading}\n\t\t\t\t\t\t\t\t\t\tstrings={{ loading: strings.loading }}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{strings.confirm}\n\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</SheetFooter>\n\t\t\t\t)}\n\t\t\t</SheetContent>\n\t\t</Sheet>\n\t);\n}\n\nexport const ActionDrawer = memo(ActionDrawerImpl);\nActionDrawer.displayName = 'ActionDrawer';\n","\"use client\";\n\nimport { motionRecipes } from '../../lib/motion-recipes';\nimport { modalBackdropRecipe } from './overlay.recipes';\n\nimport { useThemePortalContainer, type ThemePortalContainer } from '../../lib/theme-scope';\n\nimport * as React from \"react\"\nimport { AlertDialog as AlertDialogPrimitive } from \"@base-ui/react/alert-dialog\"\n\nimport { cn } from \"../../lib/utils\"\nimport { Button } from \"./button\"\n\nfunction AlertDialog({ ...props }: AlertDialogPrimitive.Root.Props) {\n return <AlertDialogPrimitive.Root data-slot=\"alert-dialog\" {...props} />\n}\n\nfunction AlertDialogTrigger({ ...props }: AlertDialogPrimitive.Trigger.Props) {\n return (\n <AlertDialogPrimitive.Trigger data-slot=\"alert-dialog-trigger\" {...props} />\n )\n}\n\nfunction AlertDialogPortal({ container, ...props }: AlertDialogPrimitive.Portal.Props) {\n const resolvedContainer = useThemePortalContainer(container)\n return (\n <AlertDialogPrimitive.Portal container={resolvedContainer} data-slot=\"alert-dialog-portal\" {...props} />\n )\n}\n\nfunction AlertDialogOverlay({\n className,\n ...props\n}: AlertDialogPrimitive.Backdrop.Props) {\n return (\n <AlertDialogPrimitive.Backdrop\n data-slot=\"alert-dialog-overlay\"\n className={cn(modalBackdropRecipe, motionRecipes.backdrop,\n \"isolate\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AlertDialogContent({\n className,\n container,\n size = \"default\",\n ...props\n}: AlertDialogPrimitive.Popup.Props & {\n size?: \"default\" | \"sm\"\n} & { container?: ThemePortalContainer }) {\n const resolvedContainer = useThemePortalContainer(container)\n return (\n <AlertDialogPortal container={resolvedContainer}>\n <AlertDialogOverlay />\n <AlertDialogPrimitive.Popup\n data-slot=\"alert-dialog-content\"\n data-size={size}\n className={cn(\n motionRecipes.dialog,\n \"group/alert-dialog-content fixed top-1/2 left-1/2 z-50 grid w-full -translate-x-1/2 -translate-y-1/2 gap-space-xl rounded-radius bg-popover p-surface text-popover-foreground shadow-xl ring-1 ring-foreground/5 outline-none data-[size=default]:max-w-xs data-[size=sm]:max-w-xs data-[size=default]:sm:max-w-md dark:ring-foreground/10\",\n className\n )}\n {...props}\n />\n </AlertDialogPortal>\n )\n}\n\nfunction AlertDialogHeader({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"alert-dialog-header\"\n className={cn(\n \"grid grid-rows-[auto_1fr] place-items-center text-center has-data-[slot=alert-dialog-media]:grid-rows-[auto_auto_1fr] has-data-[slot=alert-dialog-media]:gap-x-space-2xl sm:group-data-[size=default]/alert-dialog-content:place-items-start sm:group-data-[size=default]/alert-dialog-content:text-left sm:group-data-[size=default]/alert-dialog-content:has-data-[slot=alert-dialog-media]:grid-rows-[auto_1fr]\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AlertDialogFooter({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"alert-dialog-footer\"\n className={cn(\n \"flex flex-col-reverse group-data-[size=sm]/alert-dialog-content:grid group-data-[size=sm]/alert-dialog-content:grid-cols-2 sm:flex-row sm:justify-end\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AlertDialogMedia({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"alert-dialog-media\"\n className={cn(\n \"mb-space-md inline-flex size-16 items-center justify-center rounded-full bg-muted sm:group-data-[size=default]/alert-dialog-content:row-span-2 *:[svg:not([class*='size-'])]:size-8\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AlertDialogTitle({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Title>) {\n return (\n <AlertDialogPrimitive.Title\n data-slot=\"alert-dialog-title\"\n className={cn(\n \"text-lg font-medium sm:group-data-[size=default]/alert-dialog-content:group-has-data-[slot=alert-dialog-media]/alert-dialog-content:col-start-2\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AlertDialogDescription({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Description>) {\n return (\n <AlertDialogPrimitive.Description\n data-slot=\"alert-dialog-description\"\n className={cn(\n \"text-sm text-balance text-muted-foreground md:text-pretty *:[a]:underline *:[a]:underline-offset-3 *:[a]:hover:text-foreground\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AlertDialogAction({\n className,\n ...props\n}: React.ComponentProps<typeof Button>) {\n return (\n <Button\n data-slot=\"alert-dialog-action\"\n className={cn(className)}\n {...props}\n />\n )\n}\n\nfunction AlertDialogCancel({\n className,\n variant = \"outline\",\n size = \"default\",\n ...props\n}: AlertDialogPrimitive.Close.Props &\n Pick<React.ComponentProps<typeof Button>, \"variant\" | \"size\">) {\n return (\n <AlertDialogPrimitive.Close\n data-slot=\"alert-dialog-cancel\"\n className={cn(className)}\n render={<Button variant={variant} size={size} />}\n {...props}\n />\n )\n}\n\nexport {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogMedia,\n AlertDialogOverlay,\n AlertDialogPortal,\n AlertDialogTitle,\n AlertDialogTrigger,\n}\n","import { modalRegionRecipes } from '../../../lib/surface-recipes';\nimport type { TextGap } from '../structure';\n/**\n * AlertDialog — structured base wrapper around the shadcn alert-dialog\n * primitive. Higher-level confirmation recipes belong in features/overlays.\n */\nimport * as React from 'react';\n\nimport {\n\tAlertDialog as AlertDialogPrimitive,\n\tAlertDialogAction as AlertDialogActionPrimitive,\n\tAlertDialogCancel as AlertDialogCancelPrimitive,\n\tAlertDialogContent as AlertDialogContentPrimitive,\n\tAlertDialogDescription as AlertDialogDescriptionPrimitive,\n\tAlertDialogFooter as AlertDialogFooterPrimitive,\n\tAlertDialogHeader as AlertDialogHeaderPrimitive,\n\tAlertDialogMedia as AlertDialogMediaPrimitive,\n\tAlertDialogOverlay,\n\tAlertDialogPortal,\n\tAlertDialogTitle as AlertDialogTitlePrimitive,\n\tAlertDialogTrigger as AlertDialogTriggerPrimitive,\n} from '../../ui/alert-dialog';\nimport { Text } from '../../typography';\nimport { cn } from '../../../lib/utils';\n\nfunction isSimpleText(value: React.ReactNode): value is string | number | bigint {\n\treturn typeof value === 'string' || typeof value === 'number' || typeof value === 'bigint';\n}\n\nexport const AlertDialog = AlertDialogPrimitive;\n\nexport const AlertDialogTrigger = React.forwardRef<\n\tReact.ElementRef<typeof AlertDialogTriggerPrimitive>,\n\tReact.ComponentPropsWithoutRef<typeof AlertDialogTriggerPrimitive>\n>(function AlertDialogTrigger({ className, ...props }, ref) {\n\treturn (\n\t\t<AlertDialogTriggerPrimitive\n\t\t\tref={ref}\n\t\t\tclassName={cn('alert-dialog-trigger--component', className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n});\n\nAlertDialogTrigger.displayName = 'AlertDialogTrigger';\n\nexport const AlertDialogContent = React.forwardRef<\n\tReact.ElementRef<typeof AlertDialogContentPrimitive>,\n\tReact.ComponentPropsWithoutRef<typeof AlertDialogContentPrimitive>\n>(function AlertDialogContent({ className, ...props }, ref) {\n\treturn (\n\t\t<AlertDialogContentPrimitive\n\t\t\tref={ref}\n\t\t\tclassName={cn(\n\t\t\t\t'alert-dialog-content--component max-h-[min(90vh,48rem)] gap-0 overflow-hidden rounded-radius bg-background p-0 text-foreground ring-border/70 sm:max-w-md',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n});\n\nAlertDialogContent.displayName = 'AlertDialogContent';\n\nexport const AlertDialogHeader = React.forwardRef<\n\tHTMLDivElement,\n\tReact.ComponentPropsWithoutRef<typeof AlertDialogHeaderPrimitive> & { textGap?: TextGap }\n>(function AlertDialogHeader({ className, textGap = 'normal', ...props }, ref) {\n\treturn (\n\t\t<AlertDialogHeaderPrimitive\n\t\t\tref={ref}\n\t\t\tclassName={cn('alert-dialog-header--component p-surface text-center', textGap === 'dense' ? 'gap-dense' : 'gap-normal', className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n});\n\nAlertDialogHeader.displayName = 'AlertDialogHeader';\n\nexport const AlertDialogBody = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n\tfunction AlertDialogBody({ className, ...props }, ref) {\n\t\treturn (\n\t\t\t<div\n\t\t\t\tref={ref}\n\t\t\t\tdata-slot=\"alert-dialog-body\"\n\t\t\t\tclassName={cn('alert-dialog-body--component min-h-0 flex-1 overflow-y-auto p-surface', className)}\n\t\t\t\t{...props}\n\t\t\t/>\n\t\t);\n\t},\n);\n\nAlertDialogBody.displayName = 'AlertDialogBody';\n\nexport const AlertDialogFooter = React.forwardRef<\n\tHTMLDivElement,\n\tReact.ComponentPropsWithoutRef<typeof AlertDialogFooterPrimitive>\n>(function AlertDialogFooter({ className, ...props }, ref) {\n\treturn (\n\t\t<AlertDialogFooterPrimitive\n\t\t\tref={ref}\n\t\t\tclassName={cn(\n\t\t\t\t'alert-dialog-footer--component', modalRegionRecipes.footer,\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n});\n\nAlertDialogFooter.displayName = 'AlertDialogFooter';\n\nexport const AlertDialogTitle = React.forwardRef<\n\tReact.ElementRef<typeof AlertDialogTitlePrimitive>,\n\tReact.ComponentPropsWithoutRef<typeof AlertDialogTitlePrimitive>\n>(function AlertDialogTitle({ children, className, ...props }, ref) {\n\treturn (\n\t\t<AlertDialogTitlePrimitive\n\t\t\tref={ref}\n\t\t\tclassName={cn('alert-dialog-title--component m-0', className)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{isSimpleText(children) ? (\n\t\t\t\t<Text tag=\"span\" size=\"base\" weight=\"semibold\" lineHeight=\"snug\">\n\t\t\t\t\t{children}\n\t\t\t\t</Text>\n\t\t\t) : children}\n\t\t</AlertDialogTitlePrimitive>\n\t);\n});\n\nAlertDialogTitle.displayName = 'AlertDialogTitle';\n\nexport const AlertDialogDescription = React.forwardRef<\n\tReact.ElementRef<typeof AlertDialogDescriptionPrimitive>,\n\tReact.ComponentPropsWithoutRef<typeof AlertDialogDescriptionPrimitive>\n>(function AlertDialogDescription({ children, className, ...props }, ref) {\n\treturn (\n\t\t<AlertDialogDescriptionPrimitive\n\t\t\tref={ref}\n\t\t\tclassName={cn('alert-dialog-description--component m-0', className)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{isSimpleText(children) ? (\n\t\t\t\t<Text tag=\"span\" type=\"secondary\" lineHeight=\"relaxed\">\n\t\t\t\t\t{children}\n\t\t\t\t</Text>\n\t\t\t) : children}\n\t\t</AlertDialogDescriptionPrimitive>\n\t);\n});\n\nAlertDialogDescription.displayName = 'AlertDialogDescription';\n\nexport const AlertDialogMedia = React.forwardRef<\n\tHTMLDivElement,\n\tReact.ComponentPropsWithoutRef<typeof AlertDialogMediaPrimitive>\n>(function AlertDialogMedia({ className, ...props }, ref) {\n\treturn (\n\t\t<AlertDialogMediaPrimitive\n\t\t\tref={ref}\n\t\t\tclassName={cn('alert-dialog-media--component', className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n});\n\nAlertDialogMedia.displayName = 'AlertDialogMedia';\n\nexport const AlertDialogAction = React.forwardRef<\n\tReact.ElementRef<typeof AlertDialogActionPrimitive>,\n\tReact.ComponentPropsWithoutRef<typeof AlertDialogActionPrimitive>\n>(function AlertDialogAction({ className, ...props }, ref) {\n\treturn (\n\t\t<AlertDialogActionPrimitive\n\t\t\tref={ref}\n\t\t\tclassName={cn('alert-dialog-action--component', className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n});\n\nAlertDialogAction.displayName = 'AlertDialogAction';\n\nexport const AlertDialogCancel = React.forwardRef<\n\tReact.ElementRef<typeof AlertDialogCancelPrimitive>,\n\tReact.ComponentPropsWithoutRef<typeof AlertDialogCancelPrimitive>\n>(function AlertDialogCancel({ className, ...props }, ref) {\n\treturn (\n\t\t<AlertDialogCancelPrimitive\n\t\t\tref={ref}\n\t\t\tclassName={cn('alert-dialog-cancel--component', className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n});\n\nAlertDialogCancel.displayName = 'AlertDialogCancel';\n\nexport { AlertDialogOverlay, AlertDialogPortal };\n","import { AlertCircle, AlertTriangle, CheckCircle, HelpCircle, Info } from 'lucide-react';\nimport { isValidElement, memo, useMemo, type ReactNode } from 'react';\n\nimport { Button } from '../../base/buttons';\nimport { Alert, AlertDescription } from '../../base/feedback';\nimport {\n\tAlertDialog as BaseAlertDialog,\n\tAlertDialogBody,\n\tAlertDialogContent,\n\tAlertDialogDescription,\n\tAlertDialogFooter,\n\tAlertDialogHeader,\n\tAlertDialogTitle,\n\tAlertDialogTrigger,\n} from '../../base/display/alert-dialog';\nimport { Stack } from '../../base/structure';\nimport { Text } from '../../typography';\nimport { useStrings } from '../../../lib/strings';\nimport { cn } from '../../../lib/utils';\n\nimport { useOverlayActions, useOverlayVisibility } from './hooks';\nimport { usePendingOverlayFocus } from './hooks/use-pending-overlay-focus';\nimport { defaultAlertDialogStrings } from './overlays.strings';\nimport type { ConfirmDialogProps, OverlayTone } from './overlays.types';\n\nconst TONE_STYLES: Record<OverlayTone, { icon: ReactNode; iconColor: string; background: string }> = {\n\tneutral: {\n\t\ticon: <HelpCircle className=\"size-icon-lg\" />,\n\t\ticonColor: 'text-muted-foreground',\n\t\tbackground: 'bg-muted',\n\t},\n\tdestructive: {\n\t\ticon: <AlertCircle className=\"size-icon-lg\" />,\n\t\ticonColor: 'text-destructive',\n\t\tbackground: 'bg-destructive/10',\n\t},\n\twarning: {\n\t\ticon: <AlertTriangle className=\"size-icon-lg\" />,\n\t\ticonColor: 'text-warning-accent',\n\t\tbackground: 'bg-warning/15',\n\t},\n\tinfo: {\n\t\ticon: <Info className=\"size-icon-lg\" />,\n\t\ticonColor: 'text-info',\n\t\tbackground: 'bg-info/15',\n\t},\n\tsuccess: {\n\t\ticon: <CheckCircle className=\"size-icon-lg\" />,\n\t\ticonColor: 'text-success',\n\t\tbackground: 'bg-success/15',\n\t},\n};\n\nfunction ConfirmDialogImpl({\n\topen,\n\tonOpenChange,\n\tonClose,\n\tchildren,\n\ttitle,\n\tdescription,\n\tvisuallyHideHeader = false,\n\tclassName,\n\tcontentClassName,\n\tinitialFocusRef,\n\tcloseOnEscape = true,\n\tstrings: customStrings,\n\tshowCancel = true,\n\tshowConfirm = true,\n\tonCancel,\n\tonConfirm,\n\tonAsyncConfirm,\n\tonError,\n\tcloseOnAsyncComplete = true,\n\tconfirmTone,\n\tconfirmStyle = 'solid',\n\tloading = false,\n\tformId,\n\tfooter,\n\ttone = 'neutral',\n\tshowIcon = true,\n\talertMessage,\n\ttrigger,\n\tdestructive = false,\n}: ConfirmDialogProps) {\n\tconst visibility = useOverlayVisibility({ open, onOpenChange, onClose });\n\tconst mergedStrings = useStrings(defaultAlertDialogStrings, customStrings);\n\tconst resolvedConfirmTone = useMemo(() => {\n\t\tif (destructive) return 'destructive' as const;\n\t\tif (confirmTone) return confirmTone;\n\t\tconst toneMap = {\n\t\t\tneutral: 'primary',\n\t\t\tdestructive: 'destructive',\n\t\t\twarning: 'warning',\n\t\t\tinfo: 'primary',\n\t\t\tsuccess: 'success',\n\t\t} as const;\n\t\treturn toneMap[tone];\n\t}, [destructive, confirmTone, tone]);\n\n\tconst { strings, confirmButtonOnClick, effectiveLoading, handleCancel } =\n\t\tuseOverlayActions({\n\t\t\tcloseDialog: visibility.hide,\n\t\t\tonConfirm,\n\t\t\tonAsyncConfirm,\n\t\t\tonError,\n\t\t\tcloseOnAsyncComplete,\n\t\t\tconfirmTone: resolvedConfirmTone,\n\t\t\tloading,\n\t\t\tformId,\n\t\t\tonCancel,\n\t\t\tcustomStrings: mergedStrings,\n\t\t});\n\n\t/*\n\t * `destructive` is documented as the destructive *presentation*, but it only\n\t * ever reached the confirm button — the icon and the inline alert still came\n\t * from `tone`, which defaults to neutral. The result was a red confirm button\n\t * beside a grey question mark: two signals disagreeing about how serious the\n\t * action is. An explicit `tone` still wins, so this only fills the gap.\n\t */\n\tconst resolvedTone = destructive && tone === 'neutral' ? ('destructive' as const) : tone;\n\tconst toneStyles = TONE_STYLES[resolvedTone];\n\tconst pendingFocusRef = usePendingOverlayFocus(effectiveLoading);\n\n\treturn (\n\t\t<BaseAlertDialog\n\t\t\topen={visibility.open}\n\t\t\tonOpenChange={(nextOpen, details) => {\n\t\t\t\tif (!nextOpen && (effectiveLoading || (details.reason === 'escape-key' && !closeOnEscape))) {\n\t\t\t\t\tdetails.cancel();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tvisibility.setOpen(nextOpen);\n\t\t\t}}\n\t\t>\n\t\t\t{!!trigger && (isValidElement(trigger) ? (\n\t\t\t\t<AlertDialogTrigger render={trigger} />\n\t\t\t) : (\n\t\t\t\t<AlertDialogTrigger className=\"overlay-trigger--fallback cursor-pointer\">\n\t\t\t\t\t<Text tag=\"span\" size=\"inherit\" className=\"text-inherit\">{trigger}</Text>\n\t\t\t\t</AlertDialogTrigger>\n\t\t\t))}\n\n\t\t\t<AlertDialogContent\n\t\t\t\tref={pendingFocusRef}\n\t\t\t\tinitialFocus={initialFocusRef}\n\t\t\t\taria-label={title ? undefined : strings.alertDialogLabel}\n\t\t\t\tclassName={cn('confirm-dialog--component alert-dialog--component', className)}\n\t\t\t>\n\t\t\t\t<AlertDialogBody className=\"alert-dialog--body\">\n\t\t\t\t\t{!!showIcon && !visuallyHideHeader && (\n\t\t\t\t\t\t<span\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t'mb-space-md flex size-avatar-lg items-center justify-center rounded-full',\n\t\t\t\t\t\t\t\ttoneStyles.background,\n\t\t\t\t\t\t\t\ttoneStyles.iconColor,\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{toneStyles.icon}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t)}\n\n\t\t\t\t\t{!!(title || description) && (\n\t\t\t\t\t\t<AlertDialogHeader className={cn('p-0 place-items-start text-start', visuallyHideHeader && 'sr-only')}>\n\t\t\t\t\t\t\t{!!title && <AlertDialogTitle>{title}</AlertDialogTitle>}\n\t\t\t\t\t\t\t{!!description && <AlertDialogDescription>{description}</AlertDialogDescription>}\n\t\t\t\t\t\t</AlertDialogHeader>\n\t\t\t\t\t)}\n\n\t\t\t\t\t{!!alertMessage && (\n\t\t\t\t\t\t<Alert tone={resolvedTone} className=\"mt-space-md text-left\">\n\t\t\t\t\t\t\t<AlertDescription>{alertMessage}</AlertDescription>\n\t\t\t\t\t\t</Alert>\n\t\t\t\t\t)}\n\n\t\t\t\t\t{!!children && <div className={cn('mt-space-md', contentClassName)}>{children}</div>}\n\t\t\t\t</AlertDialogBody>\n\n\t\t\t\t{!!(showCancel || showConfirm || footer) && (\n\t\t\t\t\t<AlertDialogFooter className=\"alert-dialog--footer\">\n\t\t\t\t\t\t{footer ?? (\n\t\t\t\t\t\t\t<Stack\n\t\t\t\t\t\t\t\tdirection={{ base: 'vertical', sm: 'horizontal' }}\n\t\t\t\t\t\t\t\tgap=\"sm\"\n\t\t\t\t\t\t\t\talign={{ base: 'stretch', sm: 'center' }}\n\t\t\t\t\t\t\t\tjustify=\"end\"\n\t\t\t\t\t\t\t\tclassName=\"w-full\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{!!showCancel && (\n\t\t\t\t\t\t\t\t\t<Button type=\"button\" tone=\"secondary\" buttonStyle=\"outline\" onClick={handleCancel} disabled={effectiveLoading}>\n\t\t\t\t\t\t\t\t\t\t{strings.cancel}\n\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t{!!showConfirm && (\n\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\ttone={resolvedConfirmTone}\n\t\t\t\t\t\t\t\t\t\tbuttonStyle={confirmStyle}\n\t\t\t\t\t\t\t\t\t\tonClick={confirmButtonOnClick}\n\t\t\t\t\t\t\t\t\t\tdisabled={effectiveLoading}\n\t\t\t\t\t\t\t\t\t\tloading={effectiveLoading}\n\t\t\t\t\t\t\t\t\t\tstrings={{ loading: strings.loading }}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{strings.confirm}\n\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</AlertDialogFooter>\n\t\t\t\t)}\n\t\t\t</AlertDialogContent>\n\t\t</BaseAlertDialog>\n\t);\n}\n\nexport const ConfirmDialog = memo(ConfirmDialogImpl);\nConfirmDialog.displayName = 'ConfirmDialog';\n"],"mappings":"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"}
|
|
@@ -1,23 +1,23 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { useStrings as e } from "./lib/strings.js";
|
|
3
|
-
import { t } from "./utils-
|
|
4
|
-
import {
|
|
5
|
-
import { t as i } from "./structure-
|
|
6
|
-
import { n as a, t as o } from "./action-menu-
|
|
7
|
-
import { t as s } from "./separator-
|
|
8
|
-
import { t as c } from "./page-header-
|
|
9
|
-
import { d as l } from "./hooks-
|
|
10
|
-
import { i as u } from "./containers-
|
|
3
|
+
import { t } from "./utils-BvH9PSmq.js";
|
|
4
|
+
import { i as n, t as r } from "./button-BZDasD04.js";
|
|
5
|
+
import { t as i } from "./structure-CRdqVawd.js";
|
|
6
|
+
import { n as a, t as o } from "./action-menu-Drxw_vJk.js";
|
|
7
|
+
import { t as s } from "./separator-BNIgG3au.js";
|
|
8
|
+
import { t as c } from "./page-header-D8nERkn5.js";
|
|
9
|
+
import { d as l } from "./hooks-BrlnCwQd.js";
|
|
10
|
+
import { i as u } from "./containers-DqB-bSYE.js";
|
|
11
11
|
import { forwardRef as d, useEffect as f, useMemo as p, useState as m } from "react";
|
|
12
12
|
import { Fragment as h, jsx as g, jsxs as _ } from "react/jsx-runtime";
|
|
13
13
|
import { ArrowLeft as v, MoreHorizontal as y } from "lucide-react";
|
|
14
14
|
//#region src/components/layout/page/partials/page-header.tsx
|
|
15
|
-
function b({ title: e, description:
|
|
16
|
-
let
|
|
15
|
+
function b({ title: e, description: a, textGap: o = "dense", headingTag: u = "h3", titleIcon: d, titleIconHref: f, onTitleIconClick: p, titleIconLabel: m = "Open title link", backHref: y, onBack: b, backLabel: x = "Back", titleBadges: S = [], actions: C, slots: w, renderLink: T, className: E, contentClassName: D, actionsClassName: O, titleClassName: k, titleIconClassName: A, descriptionClassName: j }) {
|
|
16
|
+
let M = l({ renderLink: T }), N = y || b ? /* @__PURE__ */ _("div", {
|
|
17
17
|
className: "flex items-center gap-space-sm shrink-0",
|
|
18
|
-
children: [
|
|
19
|
-
href:
|
|
20
|
-
"aria-label":
|
|
18
|
+
children: [y && !b ? M({
|
|
19
|
+
href: y,
|
|
20
|
+
"aria-label": x,
|
|
21
21
|
className: t("page-header--back-link", n({
|
|
22
22
|
tone: "secondary",
|
|
23
23
|
buttonStyle: "ghost",
|
|
@@ -35,8 +35,8 @@ function b({ title: e, description: i, textGap: a, headingTag: o = "h3", titleIc
|
|
|
35
35
|
size: "sm",
|
|
36
36
|
iconOnly: !0,
|
|
37
37
|
className: "page-header--back-button",
|
|
38
|
-
onClick:
|
|
39
|
-
"aria-label":
|
|
38
|
+
onClick: b,
|
|
39
|
+
"aria-label": x,
|
|
40
40
|
children: /* @__PURE__ */ g(v, {
|
|
41
41
|
className: "size-icon rtl:rotate-180",
|
|
42
42
|
"aria-hidden": "true"
|
|
@@ -45,69 +45,80 @@ function b({ title: e, description: i, textGap: a, headingTag: o = "h3", titleIc
|
|
|
45
45
|
orientation: "vertical",
|
|
46
46
|
className: "h-action-sm"
|
|
47
47
|
})]
|
|
48
|
-
}) : null,
|
|
49
|
-
if (!
|
|
50
|
-
let e = /* @__PURE__ */ g(
|
|
48
|
+
}) : null, P = (() => {
|
|
49
|
+
if (!d) return null;
|
|
50
|
+
let e = /* @__PURE__ */ g(d, {
|
|
51
51
|
className: "size-icon",
|
|
52
52
|
"aria-hidden": "true"
|
|
53
|
-
}), i = t("page-header--title-icon flex size-icon shrink-0 items-center justify-center text-muted-foreground",
|
|
54
|
-
return
|
|
55
|
-
href:
|
|
56
|
-
"aria-label":
|
|
53
|
+
}), i = t("page-header--title-icon flex size-icon shrink-0 items-center justify-center text-muted-foreground", A);
|
|
54
|
+
return f && !p ? M({
|
|
55
|
+
href: f,
|
|
56
|
+
"aria-label": m,
|
|
57
57
|
className: t("page-header--title-icon-link", n({
|
|
58
58
|
tone: "secondary",
|
|
59
59
|
buttonStyle: "ghost",
|
|
60
60
|
size: "sm",
|
|
61
61
|
iconOnly: !0
|
|
62
|
-
}),
|
|
62
|
+
}), A),
|
|
63
63
|
children: /* @__PURE__ */ g(h, { children: e })
|
|
64
|
-
}) :
|
|
64
|
+
}) : p ? /* @__PURE__ */ g(r, {
|
|
65
65
|
type: "button",
|
|
66
66
|
tone: "secondary",
|
|
67
67
|
buttonStyle: "ghost",
|
|
68
68
|
size: "sm",
|
|
69
69
|
iconOnly: !0,
|
|
70
|
-
className: t("page-header--title-icon-button",
|
|
71
|
-
onClick:
|
|
72
|
-
"aria-label":
|
|
70
|
+
className: t("page-header--title-icon-button", A),
|
|
71
|
+
onClick: p,
|
|
72
|
+
"aria-label": m,
|
|
73
73
|
children: e
|
|
74
74
|
}) : /* @__PURE__ */ g("span", {
|
|
75
75
|
"aria-hidden": "true",
|
|
76
76
|
className: i,
|
|
77
77
|
children: e
|
|
78
78
|
});
|
|
79
|
-
})()
|
|
79
|
+
})(), F = w?.back == null && N ? /* @__PURE__ */ _(i, {
|
|
80
|
+
direction: "horizontal",
|
|
81
|
+
align: "center",
|
|
82
|
+
gap: "sm",
|
|
83
|
+
wrap: !1,
|
|
84
|
+
children: [N, P]
|
|
85
|
+
}) : P;
|
|
80
86
|
return /* @__PURE__ */ g(c, {
|
|
81
87
|
title: e,
|
|
82
|
-
description:
|
|
83
|
-
textGap:
|
|
84
|
-
headingTag:
|
|
85
|
-
leading:
|
|
86
|
-
beforeTitle:
|
|
87
|
-
titlePrefix:
|
|
88
|
-
badges:
|
|
89
|
-
actions:
|
|
90
|
-
afterDescription:
|
|
88
|
+
description: a,
|
|
89
|
+
textGap: o,
|
|
90
|
+
headingTag: u,
|
|
91
|
+
leading: w?.back,
|
|
92
|
+
beforeTitle: w?.beforeTitle,
|
|
93
|
+
titlePrefix: F,
|
|
94
|
+
badges: S,
|
|
95
|
+
actions: w?.actions ?? C,
|
|
96
|
+
afterDescription: w?.afterDescription,
|
|
91
97
|
withSeparator: !1,
|
|
92
|
-
className: t("layout-page-header--component",
|
|
93
|
-
contentClassName: t("max-w-none",
|
|
94
|
-
titleClassName: t("text-
|
|
98
|
+
className: t("layout-page-header--component", E),
|
|
99
|
+
contentClassName: t("max-w-none", D),
|
|
100
|
+
titleClassName: t("text-lg", k),
|
|
95
101
|
titleRowClassName: "gap-space-md",
|
|
96
|
-
descriptionClassName: t("text-sm",
|
|
97
|
-
actionsClassName: t("shrink-0 self-end sm:self-auto",
|
|
102
|
+
descriptionClassName: t("text-sm", j),
|
|
103
|
+
actionsClassName: t("shrink-0 self-end sm:self-auto", O)
|
|
98
104
|
});
|
|
99
105
|
}
|
|
100
106
|
//#endregion
|
|
101
107
|
//#region src/components/layout/page/page.tsx
|
|
102
|
-
var x =
|
|
103
|
-
|
|
108
|
+
var x = {
|
|
109
|
+
none: "py-0",
|
|
110
|
+
sm: "py-surface-xs",
|
|
111
|
+
md: "py-surface",
|
|
112
|
+
lg: "py-surface-lg"
|
|
113
|
+
}, S = d(function({ header: e, children: n, slotProps: r, renderLink: a, maxWidth: o, narrow: s = !1, gutter: c = "lg", padding: l = "lg", className: d, render: f, ...p }, m) {
|
|
114
|
+
let { className: h, ...v } = r?.body ?? {};
|
|
104
115
|
return /* @__PURE__ */ g(u, {
|
|
105
|
-
...
|
|
106
|
-
ref:
|
|
107
|
-
render:
|
|
108
|
-
maxWidth: o,
|
|
109
|
-
gutter:
|
|
110
|
-
className:
|
|
116
|
+
...p,
|
|
117
|
+
ref: m,
|
|
118
|
+
render: f,
|
|
119
|
+
maxWidth: o ?? (s ? "md" : "lg"),
|
|
120
|
+
gutter: c,
|
|
121
|
+
className: t("font-sans", x[l], d),
|
|
111
122
|
children: /* @__PURE__ */ _(i, {
|
|
112
123
|
gap: "2xl",
|
|
113
124
|
className: "page--component",
|
|
@@ -115,19 +126,19 @@ var x = d(function({ header: e, children: n, slotProps: r, renderLink: a, maxWid
|
|
|
115
126
|
...e,
|
|
116
127
|
renderLink: e.renderLink ?? a
|
|
117
128
|
}) : null, n == null ? null : /* @__PURE__ */ g("div", {
|
|
118
|
-
...
|
|
129
|
+
...v,
|
|
119
130
|
"data-slot": "page-body",
|
|
120
|
-
className: t("page--body relative block min-w-0 w-full",
|
|
131
|
+
className: t("page--body relative block min-w-0 w-full", h),
|
|
121
132
|
children: n
|
|
122
133
|
})]
|
|
123
134
|
})
|
|
124
135
|
});
|
|
125
136
|
});
|
|
126
|
-
|
|
137
|
+
S.displayName = "Page";
|
|
127
138
|
//#endregion
|
|
128
139
|
//#region src/components/layout/page/page.types.ts
|
|
129
|
-
var
|
|
130
|
-
function
|
|
140
|
+
var C = { menuLabel: "Page actions" }, w = "max-h-[80vh] overflow-y-auto overscroll-contain", T = 4;
|
|
141
|
+
function E({ action: e, index: t }, n, r, i) {
|
|
131
142
|
let a = {
|
|
132
143
|
...n,
|
|
133
144
|
index: t,
|
|
@@ -150,8 +161,8 @@ function T({ action: e, index: t }, n, r, i) {
|
|
|
150
161
|
render: e.element ?? i?.(e, a)
|
|
151
162
|
};
|
|
152
163
|
}
|
|
153
|
-
function
|
|
154
|
-
let
|
|
164
|
+
function D({ actions: n, display: r = "dropdown", size: i = "sm", breakpoint: s = 1040, maxInlineActions: c = T, renderLink: u, strings: d, className: h, inlineClassName: v, menuClassName: b, renderAction: x }) {
|
|
165
|
+
let S = e(C, d), D = l({ renderLink: u }), O = p(() => (n ?? []).map((e, t) => ({
|
|
155
166
|
action: e,
|
|
156
167
|
index: t
|
|
157
168
|
})).filter(({ action: e }) => e.visible !== !1), [n]), [k, A] = m(!1);
|
|
@@ -163,13 +174,13 @@ function E({ actions: n, display: r = "dropdown", size: i = "sm", breakpoint: s
|
|
|
163
174
|
let j = { renderLink: D }, M = (e) => D({
|
|
164
175
|
...e,
|
|
165
176
|
children: e.children ?? null
|
|
166
|
-
}), N = t("flex min-w-0 max-w-full flex-wrap items-center gap-space-sm", v, h), P = t(
|
|
177
|
+
}), N = t("flex min-w-0 max-w-full flex-wrap items-center gap-space-sm", v, h), P = t(w, b);
|
|
167
178
|
if (r === "dropdown" || r === "auto" && k) {
|
|
168
|
-
let e = O.map((e) =>
|
|
179
|
+
let e = O.map((e) => E(e, j, !1, x));
|
|
169
180
|
return /* @__PURE__ */ g(a, {
|
|
170
181
|
actions: e,
|
|
171
182
|
icon: y,
|
|
172
|
-
srText:
|
|
183
|
+
srText: S.menuLabel,
|
|
173
184
|
align: "end",
|
|
174
185
|
closeOnSelect: !0,
|
|
175
186
|
contentClassName: P,
|
|
@@ -177,7 +188,7 @@ function E({ actions: n, display: r = "dropdown", size: i = "sm", breakpoint: s
|
|
|
177
188
|
renderLink: M
|
|
178
189
|
});
|
|
179
190
|
}
|
|
180
|
-
let F = Math.max(0, c), I = O.filter(({ action: e }) => (e.placement ?? "auto") !== "menu"), L = I.slice(0, F), R = [...I.slice(F), ...O.filter(({ action: e }) => (e.placement ?? "auto") === "menu")], z = L.map((e) =>
|
|
191
|
+
let F = Math.max(0, c), I = O.filter(({ action: e }) => (e.placement ?? "auto") !== "menu"), L = I.slice(0, F), R = [...I.slice(F), ...O.filter(({ action: e }) => (e.placement ?? "auto") === "menu")], z = L.map((e) => E(e, j, !0, x)), B = R.map((e) => E(e, j, !1, x));
|
|
181
192
|
return /* @__PURE__ */ _("div", {
|
|
182
193
|
className: N,
|
|
183
194
|
children: [/* @__PURE__ */ g(o, {
|
|
@@ -187,7 +198,7 @@ function E({ actions: n, display: r = "dropdown", size: i = "sm", breakpoint: s
|
|
|
187
198
|
}), R.length > 0 && /* @__PURE__ */ g(a, {
|
|
188
199
|
actions: B,
|
|
189
200
|
icon: y,
|
|
190
|
-
srText:
|
|
201
|
+
srText: S.menuLabel,
|
|
191
202
|
align: "end",
|
|
192
203
|
closeOnSelect: !0,
|
|
193
204
|
contentClassName: P,
|
|
@@ -197,6 +208,6 @@ function E({ actions: n, display: r = "dropdown", size: i = "sm", breakpoint: s
|
|
|
197
208
|
});
|
|
198
209
|
}
|
|
199
210
|
//#endregion
|
|
200
|
-
export { b as i,
|
|
211
|
+
export { b as i, C as n, S as r, D as t };
|
|
201
212
|
|
|
202
|
-
//# sourceMappingURL=page-
|
|
213
|
+
//# sourceMappingURL=page-hGmT4nWK.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"page-hGmT4nWK.js","names":["_Fragment","buttonVariants","Button","Stack","ActionMenu","ActionButtons","Separator","PageHeading","useLayoutLinkRenderer","Container","Fragment$1","PageHeader","TitleIcon","resolvedRenderLink","defaultBack","backHref","onBack","backLabel","cn","ArrowLeft","titleIconNode","icon","iconClassName","titleIconClassName","titleIconHref","onTitleIconClick","titleIconLabel","titleStart","slots","titleBadges","actions","className","contentClassName","titleClassName","descriptionClassName","actionsClassName","blockPadding","Page","forwardRef","containerProps","bodyClassName","bodyProps","slotProps","maxWidth","narrow","padding","header","renderLink","children","defaultPageActionsStrings","PAGE_ACTIONS_MENU_CLASS","DEFAULT_MAX_INLINE_ACTIONS","toActionMenuAction","context","contextBase","disabled","action","index","renderAction","PageActions","stringsProp","strings","useStrings","filtered","useMemo","isNarrow","setIsNarrow","useState","useEffect","display","check","breakpoint","inlineContextBase","renderActionLink","props","inlineClass","inlineClassName","menuContentClass","menuClassName","dropdownActions","entry","MoreHorizontal","inlineLimit","maxInlineActions","inlineCandidates","inline","menu","inlineActions","menuActions"],"sources":["../src/components/layout/page/partials/page-header.tsx","../src/components/layout/page/page.tsx","../src/components/layout/page/page.types.ts","../src/components/layout/page/partials/page-actions.tsx"],"sourcesContent":["/**\n * PageHeader — page title, back control, title badges, and actions.\n *\n * Navigation goes through `renderLink`; consumer apps wire framework links at\n * the boundary. Slots let consumers replace any structural region without\n * forking the page wrapper.\n */\nimport { ArrowLeft } from 'lucide-react';\n\nimport { Button } from '../../../base/buttons';\nimport { Stack } from '../../../base/structure';\nimport { Separator } from '../../../base/display/separator';\nimport { PageHeading } from '../../../base/navigation/page-header';\nimport { buttonVariants } from '../../../base/buttons/button.variants';\nimport { cn } from '../../../../lib/utils';\n\nimport { useLayoutLinkRenderer } from '../../hooks';\nimport type { PageHeaderProps } from '../page.types';\n\nexport function PageHeader({\n\ttitle,\n\tdescription,\n\ttextGap = 'dense',\n\theadingTag = 'h3',\n\ttitleIcon: TitleIcon,\n\ttitleIconHref,\n\tonTitleIconClick,\n\ttitleIconLabel = 'Open title link',\n\tbackHref,\n\tonBack,\n\tbackLabel = 'Back',\n\ttitleBadges = [],\n\tactions,\n\tslots,\n\trenderLink,\n\tclassName,\n\tcontentClassName,\n\tactionsClassName,\n\ttitleClassName,\n\ttitleIconClassName,\n\tdescriptionClassName,\n}: PageHeaderProps) {\n\tconst resolvedRenderLink = useLayoutLinkRenderer({ renderLink });\n\tconst hasBack = !!backHref || !!onBack;\n\n\tconst defaultBack = hasBack ? (\n\t\t<div className=\"flex items-center gap-space-sm shrink-0\">\n\t\t\t{backHref && !onBack ? (\n\t\t\t\tresolvedRenderLink({\n\t\t\t\t\thref: backHref,\n\t\t\t\t\t'aria-label': backLabel,\n\t\t\t\t\tclassName: cn('page-header--back-link', buttonVariants({tone:'secondary',buttonStyle:'ghost',size:'sm',iconOnly:true})),\n\t\t\t\t\tchildren: (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t<ArrowLeft className=\"size-icon rtl:rotate-180\" aria-hidden=\"true\" />\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\t\t<Button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\ttone=\"secondary\"\n\t\t\t\t\tbuttonStyle=\"ghost\"\n\t\t\t\t\tsize=\"sm\" iconOnly\n\t\t\t\t\tclassName=\"page-header--back-button\"\n\t\t\t\t\tonClick={onBack}\n\t\t\t\t\taria-label={backLabel}\n\t\t\t\t>\n\t\t\t\t\t<ArrowLeft className=\"size-icon rtl:rotate-180\" aria-hidden=\"true\" />\n\t\t\t\t</Button>\n\t\t\t)}\n\t\t\t<Separator orientation=\"vertical\" className=\"h-action-sm\" />\n\t\t</div>\n\t) : null;\n\tconst titleIconNode = (() => {\n\t\tif (!TitleIcon) return null;\n\n\t\tconst icon = <TitleIcon className=\"size-icon\" aria-hidden=\"true\" />;\n\t\tconst iconClassName = cn(\n\t\t\t'page-header--title-icon flex size-icon shrink-0 items-center justify-center text-muted-foreground',\n\t\t\ttitleIconClassName,\n\t\t);\n\n\t\tif (titleIconHref && !onTitleIconClick) {\n\t\t\treturn resolvedRenderLink({\n\t\t\t\thref: titleIconHref,\n\t\t\t\t'aria-label': titleIconLabel,\n\t\t\t\tclassName: cn(\n\t\t\t\t\t'page-header--title-icon-link',\n\t\t\t\t\tbuttonVariants({tone:'secondary',buttonStyle:'ghost',size:'sm',iconOnly:true}),\n\t\t\t\t\ttitleIconClassName,\n\t\t\t\t),\n\t\t\t\tchildren: (\n\t\t\t\t\t<>\n\t\t\t\t\t\t{icon}\n\t\t\t\t\t</>\n\t\t\t\t),\n\t\t\t});\n\t\t}\n\n\t\tif (onTitleIconClick) {\n\t\t\treturn (\n\t\t\t\t<Button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\ttone=\"secondary\"\n\t\t\t\t\tbuttonStyle=\"ghost\"\n\t\t\t\t\tsize=\"sm\" iconOnly\n\t\t\t\t\tclassName={cn('page-header--title-icon-button', titleIconClassName)}\n\t\t\t\t\tonClick={onTitleIconClick}\n\t\t\t\t\taria-label={titleIconLabel}\n\t\t\t\t>\n\t\t\t\t\t{icon}\n\t\t\t\t</Button>\n\t\t\t);\n\t\t}\n\n\t\treturn (\n\t\t\t<span aria-hidden=\"true\" className={iconClassName}>\n\t\t\t\t{icon}\n\t\t\t</span>\n\t\t);\n\t})();\n\t// Keep the standard back affordance beside the title, rather than reserving\n\t// a leading column around the entire copy/actions block on narrow pages.\n\tconst titleStart = slots?.back == null && defaultBack ? (\n\t\t<Stack direction=\"horizontal\" align=\"center\" gap=\"sm\" wrap={false}>\n\t\t\t{defaultBack}{titleIconNode}\n\t\t</Stack>\n\t) : titleIconNode;\n\n\treturn (\n\t\t<PageHeading\n\t\t\ttitle={title}\n\t\t\tdescription={description}\n\t\t\ttextGap={textGap}\n\t\t\theadingTag={headingTag}\n\t\t\tleading={slots?.back}\n\t\t\tbeforeTitle={slots?.beforeTitle}\n\t\t\ttitlePrefix={titleStart}\n\t\t\tbadges={titleBadges}\n\t\t\tactions={slots?.actions ?? actions}\n\t\t\tafterDescription={slots?.afterDescription}\n\t\t\twithSeparator={false}\n\t\t\tclassName={cn('layout-page-header--component', className)}\n\t\t\tcontentClassName={cn('max-w-none', contentClassName)}\n\t\t\ttitleClassName={cn('text-lg', titleClassName)}\n\t\t\ttitleRowClassName=\"gap-space-md\"\n\t\t\tdescriptionClassName={cn('text-sm', descriptionClassName)}\n\t\t\tactionsClassName={cn('shrink-0 self-end sm:self-auto', actionsClassName)}\n\t\t/>\n\t);\n}\n","import { Stack } from '../../base/structure';\nimport { Container } from '../containers';\nimport { cn } from '../../../lib/utils';\nimport { forwardRef } from 'react';\n\nimport type { PageProps } from './page.types';\nimport { PageHeader } from './partials/page-header';\n\n/** Page — non-scrolling Container, PageHeader, and body-rhythm composition. */\nconst blockPadding = {none: 'py-0', sm: 'py-surface-xs', md: 'py-surface', lg: 'py-surface-lg'} as const;\n\nexport const Page = forwardRef<HTMLDivElement, PageProps>(function Page({\n\t\theader,\n\t\tchildren,\n\t\tslotProps,\n\t\trenderLink,\n\t\tmaxWidth,\n\t\tnarrow = false,\n\t\tgutter = 'lg',\n\t\tpadding = 'lg',\n\t\tclassName,\n\t\trender,\n\t\t...containerProps\n\t}, ref) {\n\tconst { className: bodyClassName, ...bodyProps } = slotProps?.body ?? {};\n\n\treturn (\n\t\t<Container\n\t\t\t{...containerProps}\n\t\t\tref={ref}\n\t\t\trender={render}\n\t\t\tmaxWidth={maxWidth ?? (narrow ? 'md' : 'lg')}\n\t\t\tgutter={gutter}\n\t\t\tclassName={cn('font-sans', blockPadding[padding], className)}\n\t\t>\n\t\t\t<Stack gap=\"2xl\" className=\"page--component\">\n\t\t\t\t{header ? (\n\t\t\t\t\t<PageHeader\n\t\t\t\t\t\t{...header}\n\t\t\t\t\t\trenderLink={header.renderLink ?? renderLink}\n\t\t\t\t\t/>\n\t\t\t\t) : null}\n\t\t\t\t{children !== undefined && children !== null ? (\n\t\t\t\t\t<div\n\t\t\t\t\t\t{...bodyProps}\n\t\t\t\t\t\tdata-slot=\"page-body\"\n\t\t\t\t\t\tclassName={cn('page--body relative block min-w-0 w-full', bodyClassName)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{children}\n\t\t\t\t\t</div>\n\t\t\t\t) : null}\n\t\t\t</Stack>\n\t\t</Container>\n\t);\n});\n\nPage.displayName = 'Page';\n","/**\n * Page-level types for `Page`, `PageHeader`, `PageActions`, and exported\n * partials. All navigation is framework-neutral via `renderLink`.\n */\nimport type { ComponentType, JSX, Key, ReactNode } from 'react';\n\nimport type {\n\tLayoutLinkRenderer,\n\tLayoutNavigationAdapter,\n\tLayoutSlotAttributes,\n} from '../layout.types';\nimport type { TextGap } from '../../base/structure';\nimport type { ButtonSize } from '../../base/buttons';\nimport type { HeadingTag } from '../../typography';\nimport type { ContainerGutter, ContainerMaxWidth, ContainerProps } from '../containers/containers.types';\nimport type { StringsProp } from '../../../lib/strings';\nimport type { BadgeTone } from '../../base/badge';\nimport type { ActionPresentation } from '../../../lib/action-presentation';\n\nexport interface PageTitleBadge {\n\t/** Display label. */\n\tlabel: ReactNode;\n\t/** Semantic color intent. */\n\ttone?: BadgeTone;\n\tkey?: Key;\n}\n\nexport interface PageHeaderSlots {\n\t/** Replaces the leading back control entirely. */\n\tback?: ReactNode;\n\t/** Additional content before the title line. */\n\tbeforeTitle?: ReactNode;\n\t/** Additional content after the description. */\n\tafterDescription?: ReactNode;\n\t/** Replaces the trailing actions region. */\n\tactions?: ReactNode;\n}\n\nexport interface PageHeaderProps extends LayoutNavigationAdapter {\n\t/** Surface title. */\n\ttitle: ReactNode;\n\t/** Supporting copy under the title. */\n\tdescription?: ReactNode;\n\t/** Shared title/description rhythm. Defaults to dense for page copy. */\n\ttextGap?: TextGap;\n\t/** Semantic heading level for the title. Defaults to `h3` for nested app pages. */\n\theadingTag?: HeadingTag;\n\t/** Optional decorative icon rendered before the title. Pass a Lucide icon component. */\n\ttitleIcon?: ComponentType<{ className?: string }>;\n\t/** Optional link target for the title icon. Uses the same framework-neutral renderer as `backHref`. */\n\ttitleIconHref?: string;\n\t/** Optional click handler for the title icon when it should behave like an action. */\n\tonTitleIconClick?: () => void;\n\t/** Accessible label for linked/clickable title icons. */\n\ttitleIconLabel?: string;\n\t/** Destination for the back control. */\n\tbackHref?: string;\n\tonBack?: () => void;\n\t/** Copy for the back control. */\n\tbackLabel?: string;\n\t/** Chips shown beside the page title. */\n\ttitleBadges?: PageTitleBadge[];\n\t/** Controls offered on the surface. */\n\tactions?: ReactNode;\n\t/** Replaces individual regions of the shell. */\n\tslots?: PageHeaderSlots;\n\tclassName?: string;\n\t/** Merged onto the content region. */\n\tcontentClassName?: string;\n\tactionsClassName?: string;\n\ttitleClassName?: string;\n\ttitleIconClassName?: string;\n\tdescriptionClassName?: string;\n}\n\nexport interface PageActionContext {\n\tindex: number;\n\tisInline: boolean;\n\trenderLink: LayoutLinkRenderer;\n}\n\nexport interface PageAction extends ActionPresentation {\n\tid?: string;\n\t/** Display label. */\n\tlabel: ReactNode;\n\tonClick?: () => void;\n\t/** Destination for the entry, when it navigates. */\n\thref?: string;\n\ttarget?: string;\n\trel?: string;\n\texternal?: boolean;\n\t/** Shows the pending indicator. */\n\tloading?: boolean;\n\t/** Leading glyph. */\n\ticon?: ComponentType<{ className?: string }>;\n\t/** Optional inline button size. Defaults to the PageActions `size` prop. */\n\tsize?: ButtonSize;\n\tgroup?: string;\n\tplacement?: 'auto' | 'inline' | 'menu';\n\t/** Escape hatch for one action only. Prefer `renderAction` for consistent customization. */\n\telement?: ReactNode | JSX.Element;\n}\n\nexport type PageActionsDisplay = 'flat' | 'dropdown' | 'auto';\n\nexport interface PageActionsStrings {\n\tmenuLabel: string;\n}\n\nexport const defaultPageActionsStrings: PageActionsStrings = {\n\tmenuLabel: 'Page actions',\n};\n\nexport interface PageActionsProps extends LayoutNavigationAdapter {\n\t/** Controls offered on the surface. */\n\tactions?: PageAction[];\n\t/** How actions are presented — inline, menu, or responsive. */\n\tdisplay?: PageActionsDisplay;\n\t/** Inline action button scale. Defaults to `sm`; set `md` for normal page-header buttons. */\n\tsize?: ButtonSize;\n\t/** Width at which responsive actions collapse into a menu. */\n\tbreakpoint?: number;\n\t/**\n\t * Maximum non-menu actions rendered inline before overflow moves them into\n\t * the dropdown menu. Defaults to 4 for admin header density.\n\t */\n\tmaxInlineActions?: number;\n\t/** Overrides this surface's own copy. */\n\tstrings?: StringsProp<PageActionsStrings>;\n\tclassName?: string;\n\t/** Merged onto the inline action row. */\n\tinlineClassName?: string;\n\t/** Merged onto the action menu. */\n\tmenuClassName?: string;\n\t/** Replaces the default action rendering. */\n\trenderAction?: (action: PageAction, context: PageActionContext) => ReactNode;\n}\n\nexport interface PageSlotProps {\n\t/** Native attributes merged onto the page body region. */\n\tbody?: LayoutSlotAttributes<HTMLDivElement>;\n}\n\nexport interface PageProps\n\textends LayoutNavigationAdapter, Omit<ContainerProps, 'children'> {\n\t/** Header region of the shell. */\n\theader?: PageHeaderProps;\n\t/** Maximum content width. Explicit values override narrow. Defaults to `lg`. */\n\tmaxWidth?: ContainerMaxWidth;\n\t/** Center one resource or form at the existing `md` content measure. */\n\tnarrow?: boolean;\n\t/** Inline page gutters. Defaults to `lg`; none requires an existing padded parent. */\n\tgutter?: ContainerGutter;\n\t/** Block padding around the whole page. Defaults to `lg`, independent of gutter. */\n\tpadding?: ContainerGutter;\n\tchildren?: ReactNode;\n\t/** Native attributes for stable page regions. */\n\tslotProps?: PageSlotProps;\n}\n","/**\n * PageActions — composable action ribbon for page headers.\n *\n * Links go through `renderLink`, never router imports or DOM click hacks.\n * Use `renderAction` for app-specific rendering while keeping grouping,\n * filtering, breakpoint, and menu placement logic centralized.\n */\nimport { useEffect, useMemo, useState, type ReactElement } from 'react';\nimport { MoreHorizontal } from 'lucide-react';\n\nimport {\n\tActionButtons,\n\tActionMenu,\n\ttype ActionMenuAction,\n\ttype ActionMenuLinkRenderProps,\n} from '../../../base/action-menu';\nimport { useStrings } from '../../../../lib/strings';\nimport { cn } from '../../../../lib/utils';\n\nimport { useLayoutLinkRenderer } from '../../hooks';\nimport {\n\tdefaultPageActionsStrings,\n\ttype PageAction,\n\ttype PageActionContext,\n\ttype PageActionsProps,\n} from '../page.types';\n\nconst PAGE_ACTIONS_MENU_CLASS = 'max-h-[80vh] overflow-y-auto overscroll-contain';\nconst DEFAULT_MAX_INLINE_ACTIONS = 4;\n\ntype PageActionEntry = {\n\t/** The action this surface performs. */\n\taction: PageAction;\n\tindex: number;\n};\n\nfunction toActionMenuAction(\n\t{ action, index }: PageActionEntry,\n\tcontextBase: Omit<PageActionContext, 'index' | 'isInline'>,\n\tisInline: boolean,\n\trenderAction?: PageActionsProps['renderAction'],\n): ActionMenuAction {\n\tconst context: PageActionContext = { ...contextBase, index, isInline };\n\tconst disabled = !!action.disabled || !!action.loading;\n\n\treturn {\n\t\tid: action.id ?? String(index),\n\t\tlabel: action.label,\n\t\ticon: action.icon,\n\t\tonClick: action.onClick,\n\t\thref: action.href && !action.onClick ? action.href : undefined,\n\t\ttarget: action.target,\n\t\trel: action.rel,\n\t\texternal: action.external,\n\t\tdisabled,\n\t\ttone: action.tone ?? 'secondary',\n\t\tbuttonStyle: action.buttonStyle ?? 'solid',\n\t\tbuttonSize: action.size,\n\t\tgroup: action.group,\n\t\trender: action.element ?? renderAction?.(action, context),\n\t};\n}\n\nexport function PageActions({\n\tactions,\n\tdisplay = 'dropdown',\n\tsize = 'sm',\n\tbreakpoint = 1040,\n\tmaxInlineActions = DEFAULT_MAX_INLINE_ACTIONS,\n\trenderLink,\n\tstrings: stringsProp,\n\tclassName,\n\tinlineClassName,\n\tmenuClassName,\n\trenderAction,\n}: PageActionsProps) {\n\tconst strings = useStrings(defaultPageActionsStrings, stringsProp);\n\tconst resolvedRenderLink = useLayoutLinkRenderer({ renderLink });\n\n\tconst filtered = useMemo<PageActionEntry[]>(\n\t\t() => (actions ?? [])\n\t\t\t.map((action, index) => ({ action, index }))\n\t\t\t.filter(({ action }) => action.visible !== false),\n\t\t[actions],\n\t);\n\n\tconst [isNarrow, setIsNarrow] = useState(false);\n\tuseEffect(() => {\n\t\tif (display !== 'auto' || typeof window === 'undefined') return;\n\n\t\tconst check = () => setIsNarrow(window.innerWidth <= breakpoint);\n\t\tcheck();\n\t\twindow.addEventListener('resize', check);\n\t\treturn () => window.removeEventListener('resize', check);\n\t}, [display, breakpoint]);\n\n\tif (filtered.length === 0) return null;\n\n\tconst inlineContextBase = { renderLink: resolvedRenderLink };\n\tconst renderActionLink = (props: ActionMenuLinkRenderProps) =>\n\t\tresolvedRenderLink({\n\t\t\t...props,\n\t\t\tchildren: props.children ?? null,\n\t\t}) as ReactElement;\n\tconst inlineClass = cn('flex min-w-0 max-w-full flex-wrap items-center gap-space-sm', inlineClassName, className);\n\tconst menuContentClass = cn(PAGE_ACTIONS_MENU_CLASS, menuClassName);\n\n\tif (display === 'dropdown' || (display === 'auto' && isNarrow)) {\n\t\tconst dropdownActions = filtered.map((entry) =>\n\t\t\ttoActionMenuAction(entry, inlineContextBase, false, renderAction),\n\t\t);\n\n\t\treturn (\n\t\t\t<ActionMenu\n\t\t\t\tactions={dropdownActions}\n\t\t\t\ticon={MoreHorizontal}\n\t\t\t\tsrText={strings.menuLabel}\n\t\t\t\talign=\"end\"\n\t\t\t\tcloseOnSelect\n\t\t\t\tcontentClassName={menuContentClass}\n\t\t\t\tpreserveOrder\n\t\t\t\trenderLink={renderActionLink}\n\t\t\t/>\n\t\t);\n\t}\n\n\tconst inlineLimit = Math.max(0, maxInlineActions);\n\tconst inlineCandidates = filtered.filter(({ action }) => (action.placement ?? 'auto') !== 'menu');\n\tconst inline = inlineCandidates.slice(0, inlineLimit);\n\tconst overflow = inlineCandidates.slice(inlineLimit);\n\tconst menu = [\n\t\t...overflow,\n\t\t...filtered.filter(({ action }) => (action.placement ?? 'auto') === 'menu'),\n\t];\n\tconst inlineActions = inline.map((entry) =>\n\t\ttoActionMenuAction(entry, inlineContextBase, true, renderAction),\n\t);\n\tconst menuActions = menu.map((entry) =>\n\t\ttoActionMenuAction(entry, inlineContextBase, false, renderAction),\n\t);\n\n\treturn (\n\t\t<div className={inlineClass}>\n\t\t\t<ActionButtons\n\t\t\t\tactions={inlineActions}\n\t\t\t\tsize={size}\n\t\t\t\trenderLink={renderActionLink}\n\t\t\t/>\n\t\t\t{menu.length > 0 && (\n\t\t\t\t<ActionMenu\n\t\t\t\t\tactions={menuActions}\n\t\t\t\t\ticon={MoreHorizontal}\n\t\t\t\t\tsrText={strings.menuLabel}\n\t\t\t\t\talign=\"end\"\n\t\t\t\t\tcloseOnSelect\n\t\t\t\t\tcontentClassName={menuContentClass}\n\t\t\t\t\tpreserveOrder\n\t\t\t\t\trenderLink={renderActionLink}\n\t\t\t\t/>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n"],"mappings":"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"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { t as e } from "./utils-
|
|
3
|
-
import { a as t, i as n, r } from "./typography-
|
|
4
|
-
import { t as i } from "./structure-
|
|
5
|
-
import { t as a } from "./badge-
|
|
6
|
-
import { t as o } from "./separator-
|
|
2
|
+
import { t as e } from "./utils-BvH9PSmq.js";
|
|
3
|
+
import { a as t, i as n, r } from "./typography-BxQgiZyw.js";
|
|
4
|
+
import { t as i } from "./structure-CRdqVawd.js";
|
|
5
|
+
import { t as a } from "./badge-CzId1Wlm.js";
|
|
6
|
+
import { t as o } from "./separator-BNIgG3au.js";
|
|
7
7
|
import { jsx as s, jsxs as c } from "react/jsx-runtime";
|
|
8
8
|
//#region src/components/base/navigation/page-header/page-header.tsx
|
|
9
9
|
function l(e) {
|
|
@@ -24,12 +24,12 @@ function u({ eyebrow: u, title: d, description: f, textGap: p = "normal", headin
|
|
|
24
24
|
align: "start",
|
|
25
25
|
wrap: !1,
|
|
26
26
|
children: [v, /* @__PURE__ */ c(i, {
|
|
27
|
-
gap: "
|
|
27
|
+
gap: "dense",
|
|
28
28
|
className: e("page-header--content-row flex-1", E),
|
|
29
29
|
children: [
|
|
30
30
|
!!u && (l(u) ? /* @__PURE__ */ s(r, {
|
|
31
31
|
tag: "div",
|
|
32
|
-
className:
|
|
32
|
+
className: D,
|
|
33
33
|
children: u
|
|
34
34
|
}) : u),
|
|
35
35
|
y,
|
|
@@ -78,7 +78,7 @@ function u({ eyebrow: u, title: d, description: f, textGap: p = "normal", headin
|
|
|
78
78
|
]
|
|
79
79
|
}),
|
|
80
80
|
(!!f || !!S) && /* @__PURE__ */ c(i, {
|
|
81
|
-
gap: "
|
|
81
|
+
gap: "dense",
|
|
82
82
|
className: e("page-header--title-block min-w-0", !!b && "col-start-2"),
|
|
83
83
|
children: [!!f && (l(f) ? /* @__PURE__ */ s(t, {
|
|
84
84
|
type: "secondary",
|
|
@@ -109,4 +109,4 @@ u.displayName = "PageHeading";
|
|
|
109
109
|
//#endregion
|
|
110
110
|
export { u as t };
|
|
111
111
|
|
|
112
|
-
//# sourceMappingURL=page-header-
|
|
112
|
+
//# sourceMappingURL=page-header-D8nERkn5.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"page-header-D8nERkn5.js","names":["cn","Text","Heading","Stack","Badge","Separator","isSimpleText","value","PageHeading","resolvedBadges","badges","badge","className","breadcrumbs","leading","contentClassName","eyebrow","DisplayLabel","eyebrowClassName","beforeTitle","titlePrefix","titleRowClassName","textGap","title","headingTag","titleClassName","item","index","titleSuffix","description","afterDescription","descriptionClassName","actions","actionsClassName","children","withSeparator"],"sources":["../src/components/base/navigation/page-header/page-header.tsx"],"sourcesContent":["/**\n * PageHeading — reusable visual heading block for sections and resources.\n * Higher-level layout components add routing/back behavior around this base\n * visual primitive instead of reimplementing title, description, badge, and\n * action spacing.\n */\nimport type { Key, ReactNode } from 'react';\nimport { DisplayLabel, Heading, Text, type HeadingTag } from '../../../typography';\nimport { Badge, type BadgeTone } from '../../badge';\nimport { Separator } from '../../display/separator';\nimport { Stack, type TextGap } from '../../structure';\nimport { cn } from '../../../../lib/utils';\n\nexport interface PageHeadingBadge {\n\tlabel: ReactNode;\n\ttone?: BadgeTone;\n\tkey?: Key;\n}\n\n/**\n * Slot map, top to bottom and outside in:\n *\n * ```text\n * breadcrumbs\n * leading │ eyebrow\n * │ beforeTitle\n * │ titlePrefix │ title badges titleSuffix │ actions\n * │ │ description\n * │ │ afterDescription\n * children\n * ─────────────────────────────────────────── (withSeparator)\n * ```\n */\nexport interface PageHeadingProps {\n\t/** Small label above the title. Plain text is rendered as a `DisplayLabel`. */\n\teyebrow?: ReactNode;\n\t/** The page title. Plain text is rendered as a `Heading`; pass an element to own the markup. */\n\ttitle: ReactNode;\n\t/** Supporting sentence under the title, capped at `max-w-2xl` and aligned to the title's left edge. */\n\tdescription?: ReactNode;\n\t/** Title/description rhythm. Defaults to normal. */\n\ttextGap?: TextGap;\n\t/** Heading level for a plain-text `title`. Default: `'h2'`. Set for correct document outline. */\n\theadingTag?: HeadingTag;\n\t/** Convenience for a single badge beside the title. Ignored when `badges` is set. */\n\tbadge?: PageHeadingBadge;\n\t/** Badges beside the title, in order. Takes precedence over `badge`. */\n\tbadges?: PageHeadingBadge[];\n\t/** Breadcrumb trail rendered above the header block. */\n\tbreadcrumbs?: ReactNode;\n\t/** Content to the left of the entire header column — an avatar or back button. Top-aligned. */\n\tleading?: ReactNode;\n\t/** Free slot between the eyebrow and the title row, for a banner or status strip. */\n\tbeforeTitle?: ReactNode;\n\t/**\n\t * Content immediately left of the title, vertically centred on the title\n\t * line alone. Unlike `leading`, the description aligns to the title's left\n\t * edge rather than to this slot, so an icon here never shifts the copy.\n\t */\n\ttitlePrefix?: ReactNode;\n\t/** Content after the title and badges, on the same line. */\n\ttitleSuffix?: ReactNode;\n\t/** Content directly beneath the description, sharing its alignment — a metadata line. */\n\tafterDescription?: ReactNode;\n\t/** Independent actions column beside the copy; follows it on narrow widths. */\n\tactions?: ReactNode;\n\t/** Content below the whole header block, above the separator. */\n\tchildren?: ReactNode;\n\t/** Merged onto the `<header>` root. */\n\tclassName?: string;\n\t/** Merged onto the column holding eyebrow, title, and description. */\n\tcontentClassName?: string;\n\t/** Merged onto the eyebrow. Only applies when `eyebrow` is plain text. */\n\teyebrowClassName?: string;\n\t/** Merged onto the title. Only applies when `title` is plain text. */\n\ttitleClassName?: string;\n\t/**\n\t * Merged onto the title row's grid. A `gap-space-md` here sets the\n\t * `titlePrefix`-to-title rhythm without also opening the gap under the title.\n\t */\n\ttitleRowClassName?: string;\n\t/** Merged onto the description. Only applies when `description` is plain text. */\n\tdescriptionClassName?: string;\n\t/** Merged onto the actions cluster. */\n\tactionsClassName?: string;\n\t/** Draws the rule beneath the header. Default: `true`. */\n\twithSeparator?: boolean;\n}\n\nfunction isSimpleText(value: ReactNode): value is string | number | bigint {\n\treturn typeof value === 'string' || typeof value === 'number' || typeof value === 'bigint';\n}\n\nexport function PageHeading({\n\teyebrow,\n\ttitle,\n\tdescription,\n\ttextGap = 'normal',\n\theadingTag = 'h2',\n\tbadge,\n\tbadges,\n\tbreadcrumbs,\n\tleading,\n\tbeforeTitle,\n\ttitlePrefix,\n\ttitleSuffix,\n\tafterDescription,\n\tactions,\n\tchildren,\n\tclassName,\n\tcontentClassName,\n\teyebrowClassName,\n\ttitleClassName,\n\ttitleRowClassName,\n\tdescriptionClassName,\n\tactionsClassName,\n\twithSeparator = true,\n}: PageHeadingProps) {\n\tconst resolvedBadges = badges ?? (badge ? [badge] : []);\n\n\treturn (\n\t\t<header className={cn('page-heading--component page-header--component', 'w-full', className)}>\n\t\t\t{!!breadcrumbs && <div className=\"mb-space-lg\">{breadcrumbs}</div>}\n\n\t\t\t<Stack direction=\"horizontal\" gap=\"lg\" align=\"start\" wrap={false}>\n\t\t\t\t{leading}\n\t\t\t\t<Stack gap=\"dense\" className={cn('page-header--content-row flex-1', contentClassName)}>\n\t\t\t\t\t{!!eyebrow && (isSimpleText(eyebrow) ? (\n\t\t\t\t\t\t<DisplayLabel tag=\"div\" className={eyebrowClassName}>\n\t\t\t\t\t\t\t{eyebrow}\n\t\t\t\t\t\t</DisplayLabel>\n\t\t\t\t\t) : eyebrow)}\n\t\t\t\t\t{beforeTitle}\n\t\t\t\t\t<Stack\n\t\t\t\t\t\tdirection={{ base: 'vertical', sm: 'horizontal' }}\n\t\t\t\t\t\tgap=\"lg\"\n\t\t\t\t\t\talign=\"start\"\n\t\t\t\t\t\twrap={{ base: false, sm: true }}\n\t\t\t\t\t\tclassName=\"page-header--headline-row min-w-0\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{/* The copy owns its width independently of actions. The inner\n\t\t\t\t\t\t grid keeps the description aligned after a title prefix. */}\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t'page-header--copy-column page-header--title-row grid min-w-0 w-full flex-1 basis-full items-center gap-x-space-md sm:w-auto sm:basis-64',\n\t\t\t\t\t\t\t\ttitlePrefix ? 'grid-cols-[auto_minmax(0,1fr)]' : 'grid-cols-[minmax(0,1fr)]',\n\t\t\t\t\t\t\t\ttitleRowClassName,\n\t\t\t\t\t\t\t\ttextGap === 'normal' ? 'gap-y-normal' : 'gap-y-dense',\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{!!titlePrefix && (\n\t\t\t\t\t\t\t\t<span className=\"page-header--title-prefix inline-flex shrink-0 items-center self-center\">\n\t\t\t\t\t\t\t\t\t{titlePrefix}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t<Stack direction=\"horizontal\" gap=\"md\" align=\"center\" wrap className=\"page-header--title-line min-h-action-sm min-w-0\">\n\t\t\t\t\t\t\t\t{isSimpleText(title) ? (\n\t\t\t\t\t\t\t\t\t<Heading tag={headingTag} className={cn('page-header--title min-w-0 [overflow-wrap:anywhere] border-0 pb-0', titleClassName)}>\n\t\t\t\t\t\t\t\t\t\t{title}\n\t\t\t\t\t\t\t\t\t</Heading>\n\t\t\t\t\t\t\t\t) : title}\n\t\t\t\t\t\t\t\t{resolvedBadges.length > 0 && (\n\t\t\t\t\t\t\t\t\t<Stack direction=\"horizontal\" gap=\"sm\" wrap className=\"page-header--badges min-w-0 max-w-full\">\n\t\t\t\t\t\t\t\t\t\t{resolvedBadges.map((item, index) => (\n\t\t\t\t\t\t\t\t\t\t\t<Badge key={item.key ?? index} tone={item.tone ?? 'secondary'}>\n\t\t\t\t\t\t\t\t\t\t\t\t{item.label}\n\t\t\t\t\t\t\t\t\t\t\t</Badge>\n\t\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t{titleSuffix}\n\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t\t{(!!description || !!afterDescription) && (\n\t\t\t\t\t\t\t\t<Stack gap=\"dense\" className={cn('page-header--title-block min-w-0', !!titlePrefix && 'col-start-2')}>\n\t\t\t\t\t\t\t\t\t{!!description && (isSimpleText(description) ? (\n\t\t\t\t\t\t\t\t\t\t<Text type=\"secondary\" className={cn('page-header--description max-w-2xl [overflow-wrap:anywhere]', descriptionClassName)}>\n\t\t\t\t\t\t\t\t\t\t\t{description}\n\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t) : description)}\n\t\t\t\t\t\t\t\t\t{afterDescription}\n\t\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t{!!actions && (\n\t\t\t\t\t\t\t<Stack direction=\"horizontal\" gap=\"md\" className={cn('page-header--actions max-w-full shrink-0', actionsClassName)}>\n\t\t\t\t\t\t\t\t{actions}\n\t\t\t\t\t\t\t</Stack>\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{!!children && <div className=\"mt-space-xl\">{children}</div>}\n\n\t\t\t{!!withSeparator && <Separator className=\"mt-space-xl\" />}\n\t\t</header>\n\t);\n}\n\nPageHeading.displayName = 'PageHeading';\n"],"mappings":";;;;;;;;AAyFA,SAASM,EAAa,GAAqD;CAC1E,OAAO,OAAOC,KAAU,YAAY,OAAOA,KAAU,YAAY,OAAOA,KAAU;AACnF;AAEA,SAAgBC,EAAY,EAC3B,YACA,UACA,gBACA,aAAU,UACV,gBAAa,MACb,UACA,WACA,gBACA,YACA,gBACA,gBACA,gBACA,qBACA,YACA,aACA,cACA,qBACA,qBACA,mBACA,sBACA,yBACA,qBACA,mBAAgB,MACI;CACpB,IAAMC,IAAiBC,MAAWC,IAAQ,CAACA,CAAK,IAAI,CAAC;CAErD,OACC,kBAAC,UAAD;EAAQ,WAAWX,EAAG,kDAAkD,UAAUY,CAAS;EAA3F,UAAA;GACE,CAAC,CAACC,KAAe,kBAAC,OAAD;IAAK,WAAU;IAAe,UAAAA;GAAiB,CAAA;GAEjE,kBAACV,GAAD;IAAO,WAAU;IAAa,KAAI;IAAK,OAAM;IAAQ,MAAM;IAA3D,UAAA,CACEW,GACD,kBAACX,GAAD;KAAO,KAAI;KAAQ,WAAWH,EAAG,mCAAmCe,CAAgB;KAApF,UAAA;MACE,CAAC,CAACC,MAAYV,EAAaU,CAAO,IAClC,kBAACC,GAAD;OAAc,KAAI;OAAM,WAAWC;OACjC,UAAAF;MACY,CAAA,IACXA;MACHG;MACD,kBAAChB,GAAD;OACC,WAAW;QAAE,MAAM;QAAY,IAAI;OAAa;OAChD,KAAI;OACJ,OAAM;OACN,MAAM;QAAE,MAAM;QAAO,IAAI;OAAK;OAC9B,WAAU;OALX,UAAA,CASC,kBAAC,OAAD;QACC,WAAWH,EACV,2IACAoB,IAAc,mCAAmC,6BACjDC,GACAC,MAAY,WAAW,iBAAiB,aACzC;QAND,UAAA;SAQE,CAAC,CAACF,KACF,kBAAC,QAAD;UAAM,WAAU;UACd,UAAAA;SACI,CAAA;SAEP,kBAACjB,GAAD;UAAO,WAAU;UAAa,KAAI;UAAK,OAAM;UAAS,MAAA;UAAK,WAAU;UAArE,UAAA;WACEG,EAAaiB,CAAK,IAClB,kBAACrB,GAAD;YAAS,KAAKsB;YAAY,WAAWxB,EAAG,qEAAqEyB,CAAc;YACzH,UAAAF;WACO,CAAA,IACNA;WACHd,EAAe,SAAS,KACxB,kBAACN,GAAD;YAAO,WAAU;YAAa,KAAI;YAAK,MAAA;YAAK,WAAU;YACpD,UAAAM,EAAe,KAAK,GAAM,MAC1B,kBAACL,GAAD;aAA+B,MAAMsB,EAAK,QAAQ;aAChD,UAAAA,EAAK;YACA,GAFKA,EAAK,OAAOC,CAEjB,CACP;WACK,CAAA;WAEPC;UACK;;UACL,CAAC,CAACC,KAAe,CAAC,CAACC,MACpB,kBAAC3B,GAAD;UAAO,KAAI;UAAQ,WAAWH,EAAG,oCAAoC,CAAC,CAACoB,KAAe,aAAa;UAAnG,UAAA,CACE,CAAC,CAACS,MAAgBvB,EAAauB,CAAW,IAC1C,kBAAC5B,GAAD;WAAM,MAAK;WAAY,WAAWD,EAAG,+DAA+D+B,CAAoB;WACtH,UAAAF;UACI,CAAA,IACHA,IACHC,CACK;;QAEJ;OACJ,CAAA,GAAA,CAAC,CAACE,KACF,kBAAC7B,GAAD;QAAO,WAAU;QAAa,KAAI;QAAK,WAAWH,EAAG,4CAA4CiC,CAAgB;QAC/G,UAAAD;OACK,CAAA,CAEF;;KACD;IACD,CAAA,CAAA;;GAEN,CAAC,CAACE,KAAY,kBAAC,OAAD;IAAK,WAAU;IAAe;GAAc,CAAA;GAE1D,CAAC,CAACC,KAAiB,kBAAC9B,GAAD,EAAW,WAAU,cAAe,CAAA;EACjD;;AAEV;AAEA,EAAY,cAAc"}
|