themelia-react-ui 2.0.3 → 2.0.4
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 +50 -0
- package/README.md +65 -28
- package/dist/{accordion-Cjb6sx0G.js → accordion-96o0pN62.js} +5 -5
- package/dist/{accordion-Cjb6sx0G.js.map → accordion-96o0pN62.js.map} +1 -1
- package/dist/action-menu-CHgs8vmj.js +281 -0
- package/dist/action-menu-CHgs8vmj.js.map +1 -0
- package/dist/{affordance-geometry.generated-tF36bREk.js → affordance-geometry.generated-B8yGOr8-.js} +7 -1
- package/dist/affordance-geometry.generated-B8yGOr8-.js.map +1 -0
- package/dist/{ai-artifact-DvTwDVyL.js → ai-artifact-BZUGwBq6.js} +277 -276
- package/dist/ai-artifact-BZUGwBq6.js.map +1 -0
- package/dist/{app-shell-C4FhvCqF.js → app-shell-D63ATkIK.js} +84 -83
- package/dist/app-shell-D63ATkIK.js.map +1 -0
- package/dist/{attachment-BxDfL2mw.js → attachment-DkoqHPPl.js} +7 -7
- package/dist/{attachment-BxDfL2mw.js.map → attachment-DkoqHPPl.js.map} +1 -1
- package/dist/{auth-BGua8ouh.js → auth-D2FVZ1MH.js} +10 -10
- package/dist/{auth-BGua8ouh.js.map → auth-D2FVZ1MH.js.map} +1 -1
- package/dist/{avatar-DAPlDvhJ.js → avatar-DWO_HHhB.js} +5 -5
- package/dist/{avatar-DAPlDvhJ.js.map → avatar-DWO_HHhB.js.map} +1 -1
- package/dist/{badge-HpFqoqSY.js → badge-DErMA7ul.js} +4 -4
- package/dist/{badge-HpFqoqSY.js.map → badge-DErMA7ul.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/batch-action-bar.js +1 -1
- package/dist/base/buttons.js +1 -1
- package/dist/base/cards.js +2 -2
- package/dist/base/carousel.js +3 -3
- package/dist/base/cascader.js +13 -13
- package/dist/base/chart.js +1 -1
- package/dist/base/choice-inputs.js +2 -2
- package/dist/base/code-block.js +1 -1
- package/dist/base/combobox.js +1 -1
- package/dist/base/command.js +1 -1
- package/dist/base/copyable.js +1 -1
- package/dist/base/date-pickers.js +2 -2
- package/dist/base/display.js +6 -6
- package/dist/base/feedback.js +3 -3
- package/dist/base/forms-numeric.js +1 -1
- package/dist/base/forms.js +3 -3
- package/dist/base/inline-edit.js +10 -10
- package/dist/base/item.js +1 -1
- package/dist/base/media-gallery.js +1 -1
- package/dist/base/metadata-list.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 +9 -9
- package/dist/base/sheet.js +1 -1
- package/dist/base/sidebar.js +1 -1
- package/dist/base/signature-pad.js +6 -6
- package/dist/base/skeleton.js +1 -1
- package/dist/base/spinner.js +4 -4
- 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 +3 -3
- 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/{batch-action-bar-DnUJ21NQ.js → batch-action-bar-CdfIkCsV.js} +4 -4
- package/dist/{batch-action-bar-DnUJ21NQ.js.map → batch-action-bar-CdfIkCsV.js.map} +1 -1
- package/dist/blocks/admin.js +20 -20
- package/dist/blocks/admin.js.map +1 -1
- package/dist/blocks/ai.js +15 -15
- package/dist/blocks/analytics/usage-card.js +1 -1
- package/dist/blocks/analytics.js +17 -17
- package/dist/blocks/analytics.js.map +1 -1
- package/dist/blocks/collaboration.js +1 -1
- package/dist/blocks/commerce/receipt.js +1 -1
- package/dist/blocks/commerce.js +570 -567
- package/dist/blocks/commerce.js.map +1 -1
- package/dist/blocks/data-display.js +2 -2
- package/dist/blocks/onboarding.js +5 -5
- package/dist/blocks/planning.js +11 -11
- package/dist/blocks/timelines.js +1 -1
- package/dist/{breadcrumbs-C-oqs1sQ.js → breadcrumbs-B-WFKecD.js} +4 -4
- package/dist/{breadcrumbs-C-oqs1sQ.js.map → breadcrumbs-B-WFKecD.js.map} +1 -1
- package/dist/{button-DVzspB_G.js → button-DkmK-z8E.js} +2 -2
- package/dist/{button-DVzspB_G.js.map → button-DkmK-z8E.js.map} +1 -1
- package/dist/{buttons-DPZekJFu.js → buttons-BbfzgczK.js} +8 -8
- package/dist/{buttons-DPZekJFu.js.map → buttons-BbfzgczK.js.map} +1 -1
- package/dist/{cards-BaBZR-AU.js → cards-4JTWqvVe.js} +10 -10
- package/dist/cards-4JTWqvVe.js.map +1 -0
- package/dist/{chart-ZOYyK2xG.js → chart-C19flDQb.js} +4 -4
- package/dist/{chart-ZOYyK2xG.js.map → chart-C19flDQb.js.map} +1 -1
- package/dist/{checkbox-AWIhNhmo.js → checkbox-CzYUTPeJ.js} +9 -5
- package/dist/checkbox-CzYUTPeJ.js.map +1 -0
- package/dist/{choice-inputs-CNHvARCJ.js → choice-inputs-JLtij2y4.js} +182 -176
- package/dist/choice-inputs-JLtij2y4.js.map +1 -0
- package/dist/{code-block-DeneBJR_.js → code-block-CGNaUtAE.js} +7 -7
- package/dist/{code-block-DeneBJR_.js.map → code-block-CGNaUtAE.js.map} +1 -1
- package/dist/{collapsible-C-_l4hpy.js → collapsible-Do4G0zcC.js} +3 -3
- package/dist/{collapsible-C-_l4hpy.js.map → collapsible-Do4G0zcC.js.map} +1 -1
- package/dist/{collection-content-By56pLog.js → collection-content-C0e8SsTm.js} +3 -3
- package/dist/{collection-content-By56pLog.js.map → collection-content-C0e8SsTm.js.map} +1 -1
- package/dist/{combobox-Dxo2fAYQ.js → combobox-CBJDs6w_.js} +12 -12
- package/dist/{combobox-Dxo2fAYQ.js.map → combobox-CBJDs6w_.js.map} +1 -1
- package/dist/{combobox-DaHESuiL.js → combobox-hbhSS18O.js} +7 -7
- package/dist/{combobox-DaHESuiL.js.map → combobox-hbhSS18O.js.map} +1 -1
- package/dist/{command-C25VMRII.js → command-D8NrBj-b.js} +7 -7
- package/dist/{command-C25VMRII.js.map → command-D8NrBj-b.js.map} +1 -1
- package/dist/{comments-DD0DUPwJ.js → comments-Di4w0H_S.js} +383 -382
- package/dist/comments-Di4w0H_S.js.map +1 -0
- package/dist/components/base/action-menu/action-menu.d.ts +2 -0
- package/dist/components/base/cards/card.recipes.d.ts +12 -5
- package/dist/components/base/cards/smart-card.types.d.ts +12 -7
- package/dist/components/base/choice-inputs/checkbox.d.ts +7 -2
- package/dist/components/base/choice-inputs/switch-card.d.ts +7 -0
- package/dist/components/base/choice-inputs/toggle-field.d.ts +7 -0
- package/dist/components/base/date-pickers/datepicker.types.d.ts +7 -0
- package/dist/components/base/forms/controlled-form-field.d.ts +6 -6
- package/dist/components/base/forms/form-field.d.ts +5 -3
- package/dist/components/base/forms/index.d.ts +1 -0
- package/dist/components/base/forms/server-errors.d.ts +16 -0
- package/dist/components/base/forms/workflow.d.ts +5 -2
- package/dist/components/base/metadata-list/metadata-list.d.ts +3 -1
- package/dist/components/base/navigation/page-header/page-header.d.ts +4 -2
- package/dist/components/base/structure/composition.recipes.d.ts +17 -0
- package/dist/components/base/text-inputs/hooks/use-form-field-state.d.ts +7 -2
- package/dist/components/base/text-inputs/input.d.ts +4 -2
- package/dist/components/base/text-inputs/textarea.d.ts +4 -2
- package/dist/components/base/value-inputs/date-time-input.d.ts +2 -1
- package/dist/components/base/value-inputs/slider.d.ts +5 -1
- package/dist/components/base/value-inputs/tags-input.d.ts +5 -1
- package/dist/components/typography/text.styles.d.ts +26 -1
- package/dist/composition.recipes-COdiFhxB.js +19 -0
- package/dist/composition.recipes-COdiFhxB.js.map +1 -0
- package/dist/containers-CRmHf7GP.js +104 -0
- package/dist/containers-CRmHf7GP.js.map +1 -0
- package/dist/{copyable-ClBuk_UK.js → copyable-CnGCZdX4.js} +4 -4
- package/dist/{copyable-ClBuk_UK.js.map → copyable-CnGCZdX4.js.map} +1 -1
- package/dist/{data-display-DT_khPl_.js → data-display-D4oujtx0.js} +239 -238
- package/dist/data-display-D4oujtx0.js.map +1 -0
- package/dist/{date-DCrsDTZc.js → date-Q7jnXxpk.js} +5 -5
- package/dist/{date-DCrsDTZc.js.map → date-Q7jnXxpk.js.map} +1 -1
- package/dist/{date-picker-B2K3ucWn.js → date-picker-zOt1oNss.js} +102 -90
- package/dist/date-picker-zOt1oNss.js.map +1 -0
- package/dist/date-pickers-cj8IXbDC.js +179 -0
- package/dist/date-pickers-cj8IXbDC.js.map +1 -0
- package/dist/{display-hAc1HjpI.js → display-BB4BL_-K.js} +8 -8
- package/dist/{display-hAc1HjpI.js.map → display-BB4BL_-K.js.map} +1 -1
- package/dist/{dropdown-menu-Cl4X7L5S.js → dropdown-menu-CjY8Vt7W.js} +8 -8
- package/dist/{dropdown-menu-Cl4X7L5S.js.map → dropdown-menu-CjY8Vt7W.js.map} +1 -1
- package/dist/features/activities.js +11 -11
- package/dist/features/ai-chat.js +9 -9
- package/dist/features/appointment-calendar.js +222 -220
- package/dist/features/appointment-calendar.js.map +1 -1
- package/dist/features/async-preview.js +8 -8
- package/dist/features/combobox.js +1 -1
- package/dist/features/comments.js +1 -1
- package/dist/features/data-view.js +10 -10
- package/dist/features/email-composer.js +275 -274
- package/dist/features/email-composer.js.map +1 -1
- package/dist/features/event-calendar.js +199 -198
- package/dist/features/event-calendar.js.map +1 -1
- package/dist/features/filters.js +1 -1
- package/dist/features/global-search.js +12 -12
- package/dist/features/kanban.js +4 -4
- package/dist/features/map.js +7 -7
- package/dist/features/media-library.js +623 -622
- 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 +973 -969
- package/dist/features/products.js.map +1 -1
- package/dist/features/questionnaire.js +12 -12
- package/dist/features/resource-assignment.js +8 -8
- package/dist/features/resource.js +113 -112
- package/dist/features/resource.js.map +1 -1
- package/dist/features/rich-text-editor.js +2 -2
- package/dist/features/schema-form.js +254 -253
- package/dist/features/schema-form.js.map +1 -1
- package/dist/features/suggestions.js +3 -3
- package/dist/features/sync.js +3 -3
- package/dist/features/table.js +1 -1
- package/dist/features/theme-tweaker.js +19 -19
- package/dist/features/theme-tweaker.js.map +1 -1
- package/dist/{feedback-BYIhtitP.js → feedback-DZNL5Lg1.js} +9 -9
- package/dist/{feedback-BYIhtitP.js.map → feedback-DZNL5Lg1.js.map} +1 -1
- package/dist/{field-affordance-recipes-DZhnIL_Y.js → field-affordance-recipes-DjwGx8eM.js} +2 -2
- package/dist/{field-affordance-recipes-DZhnIL_Y.js.map → field-affordance-recipes-DjwGx8eM.js.map} +1 -1
- package/dist/{filters-DJVAveHA.js → filters-BcT-uoFy.js} +19 -19
- package/dist/{filters-DJVAveHA.js.map → filters-BcT-uoFy.js.map} +1 -1
- package/dist/{form-field-CwH9y77i.js → form-field-CsgRmdit.js} +14 -8
- package/dist/form-field-CsgRmdit.js.map +1 -0
- package/dist/{form-sizing-BdP_Mf5p.js → form-sizing-NXgjkmBG.js} +3 -3
- package/dist/{form-sizing-BdP_Mf5p.js.map → form-sizing-NXgjkmBG.js.map} +1 -1
- package/dist/{forms-B9G_xwzi.js → forms-BV5m5aQF.js} +83 -65
- package/dist/forms-BV5m5aQF.js.map +1 -0
- package/dist/{forms-numeric-B_jraJaQ.js → forms-numeric-Cd33AKbD.js} +288 -288
- package/dist/forms-numeric-Cd33AKbD.js.map +1 -0
- package/dist/{header-BSfIEWbI.js → header-BA697l4a.js} +14 -14
- package/dist/{header-BSfIEWbI.js.map → header-BA697l4a.js.map} +1 -1
- package/dist/hooks/useFormErrors.d.ts +1 -1
- package/dist/{hooks-ClH9thn4.js → hooks-BQ-L7Uu2.js} +2 -2
- package/dist/{hooks-ClH9thn4.js.map → hooks-BQ-L7Uu2.js.map} +1 -1
- package/dist/{icon-badge-DYKIwvOV.js → icon-badge-COWbCCWu.js} +3 -3
- package/dist/{icon-badge-DYKIwvOV.js.map → icon-badge-COWbCCWu.js.map} +1 -1
- package/dist/index.js +2 -2
- package/dist/input-Cdw4k0fb.js +289 -0
- package/dist/input-Cdw4k0fb.js.map +1 -0
- package/dist/{input-CZw8iU99.js → input-DOPL5_QE.js} +3 -3
- package/dist/{input-CZw8iU99.js.map → input-DOPL5_QE.js.map} +1 -1
- package/dist/item-BvZ2DR_x.js +277 -0
- package/dist/item-BvZ2DR_x.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 +6 -0
- package/dist/lib/ui-provider/types.d.ts +1 -1
- package/dist/lib/utils.js +1 -1
- package/dist/{media-gallery-3zIVLMWH.js → media-gallery-CSl5W1Fy.js} +6 -6
- package/dist/{media-gallery-3zIVLMWH.js.map → media-gallery-CSl5W1Fy.js.map} +1 -1
- package/dist/{mentions-CGlEJ15c.js → mentions-RKOQaaIB.js} +8 -8
- package/dist/{mentions-CGlEJ15c.js.map → mentions-RKOQaaIB.js.map} +1 -1
- package/dist/{message-DZ_ruyUV.js → message-INU2xsxu.js} +4 -4
- package/dist/{message-DZ_ruyUV.js.map → message-INU2xsxu.js.map} +1 -1
- package/dist/metadata-list-qVV7AVxa.js +443 -0
- package/dist/metadata-list-qVV7AVxa.js.map +1 -0
- package/dist/{navigation-BzhHI3lo.js → navigation-BQNcg1jT.js} +8 -8
- package/dist/{navigation-BzhHI3lo.js.map → navigation-BQNcg1jT.js.map} +1 -1
- package/dist/{navigation-Bnotn4AQ.js → navigation-DLF3E1IC.js} +7 -7
- package/dist/{navigation-Bnotn4AQ.js.map → navigation-DLF3E1IC.js.map} +1 -1
- package/dist/{navigation-row-recipes-BFLCk_Aq.js → navigation-row-recipes-WZEs-hYo.js} +2 -2
- package/dist/{navigation-row-recipes-BFLCk_Aq.js.map → navigation-row-recipes-WZEs-hYo.js.map} +1 -1
- package/dist/{number-DbV1Dija.js → number-E_OiIfJz.js} +5 -5
- package/dist/{number-DbV1Dija.js.map → number-E_OiIfJz.js.map} +1 -1
- package/dist/{overflow-tab-bar-CWY7Nogn.js → overflow-tab-bar-CrbqMteP.js} +107 -105
- package/dist/overflow-tab-bar-CrbqMteP.js.map +1 -0
- package/dist/{overlays-tMkF-VAN.js → overlays-BlKynmde.js} +228 -227
- package/dist/overlays-BlKynmde.js.map +1 -0
- package/dist/page-CIwNUtGr.js +227 -0
- package/dist/page-CIwNUtGr.js.map +1 -0
- package/dist/page-header-commands-DFMlNYzN.js +128 -0
- package/dist/page-header-commands-DFMlNYzN.js.map +1 -0
- package/dist/{pagination-BL25hu2s.js → pagination-Ch8X_47u.js} +5 -5
- package/dist/{pagination-BL25hu2s.js.map → pagination-Ch8X_47u.js.map} +1 -1
- package/dist/{popover-menu-Cn9rUkdc.js → popover-menu-BYaCdFhf.js} +6 -6
- package/dist/{popover-menu-Cn9rUkdc.js.map → popover-menu-BYaCdFhf.js.map} +1 -1
- package/dist/{popover-gnTOhbFM.js → popover-uwzX2vo7.js} +4 -4
- package/dist/{popover-gnTOhbFM.js.map → popover-uwzX2vo7.js.map} +1 -1
- package/dist/{primitives-BFK08r9M.js → primitives-Du64iDbb.js} +6 -6
- package/dist/{primitives-BFK08r9M.js.map → primitives-Du64iDbb.js.map} +1 -1
- package/dist/primitives.js +4 -4
- package/dist/{progress-B1VnCT0K.js → progress-BvF2oCdV.js} +5 -5
- package/dist/{progress-B1VnCT0K.js.map → progress-BvF2oCdV.js.map} +1 -1
- package/dist/{receipt-BVSOH3Xo.js → receipt-D789Jwyy.js} +6 -6
- package/dist/{receipt-BVSOH3Xo.js.map → receipt-D789Jwyy.js.map} +1 -1
- package/dist/{rich-text-GOUyKQ-s.js → rich-text-CLJEf76s.js} +4 -4
- package/dist/{rich-text-GOUyKQ-s.js.map → rich-text-CLJEf76s.js.map} +1 -1
- package/dist/{rich-text-editor-cRLC-eBK.js → rich-text-editor-Cm1dpUpQ.js} +10 -10
- package/dist/{rich-text-editor-cRLC-eBK.js.map → rich-text-editor-Cm1dpUpQ.js.map} +1 -1
- package/dist/{rich-text-editor-toolbar-DfXg0-VC.js → rich-text-editor-toolbar-L__e4x47.js} +4 -4
- package/dist/{rich-text-editor-toolbar-DfXg0-VC.js.map → rich-text-editor-toolbar-L__e4x47.js.map} +1 -1
- package/dist/{scroll-area-DcI-M1UT.js → scroll-area-La5RXsEk.js} +2 -2
- package/dist/{scroll-area-DcI-M1UT.js.map → scroll-area-La5RXsEk.js.map} +1 -1
- package/dist/{separator-Bom7NsGO.js → separator-DAEV0w65.js} +2 -2
- package/dist/{separator-Bom7NsGO.js.map → separator-DAEV0w65.js.map} +1 -1
- package/dist/{separator-BDV-Y648.js → separator-GNfPG-90.js} +3 -3
- package/dist/{separator-BDV-Y648.js.map → separator-GNfPG-90.js.map} +1 -1
- package/dist/services/actions.js +1 -1
- package/dist/settings-BA2iboic.js +174 -0
- package/dist/settings-BA2iboic.js.map +1 -0
- package/dist/{sheet-ijlsjq-n.js → sheet-DoAxTb2J.js} +7 -7
- package/dist/{sheet-ijlsjq-n.js.map → sheet-DoAxTb2J.js.map} +1 -1
- package/dist/{sidebar-DkTO4VTO.js → sidebar-ByqKR_W5.js} +13 -13
- package/dist/{sidebar-DkTO4VTO.js.map → sidebar-ByqKR_W5.js.map} +1 -1
- package/dist/{sidebar-Db6gkh3U.js → sidebar-D2iSnGJ7.js} +11 -11
- package/dist/{sidebar-Db6gkh3U.js.map → sidebar-D2iSnGJ7.js.map} +1 -1
- package/dist/{skeleton-Byjnt7qr.js → skeleton-CUj8O5Bd.js} +3 -3
- package/dist/{skeleton-Byjnt7qr.js.map → skeleton-CUj8O5Bd.js.map} +1 -1
- package/dist/smart-card-CqkzQsK-.js +614 -0
- package/dist/smart-card-CqkzQsK-.js.map +1 -0
- package/dist/{structure-BmisBK-3.js → structure-C0V0_Fyf.js} +3 -3
- package/dist/{structure-BmisBK-3.js.map → structure-C0V0_Fyf.js.map} +1 -1
- package/dist/{structure.recipes-EPz60cU8.js → structure.recipes-BB4-n58V.js} +2 -2
- package/dist/{structure.recipes-EPz60cU8.js.map → structure.recipes-BB4-n58V.js.map} +1 -1
- package/dist/style.css +1 -1
- package/dist/{table-DsfzoUia.js → table-CpvnzJn9.js} +3 -3
- package/dist/{table-DsfzoUia.js.map → table-CpvnzJn9.js.map} +1 -1
- package/dist/{table-BweFy_P9.js → table-DH7rozUv.js} +19 -19
- package/dist/{table-BweFy_P9.js.map → table-DH7rozUv.js.map} +1 -1
- package/dist/{tabs-CDocW5D1.js → tabs-eqVsJZWO.js} +7 -7
- package/dist/{tabs-CDocW5D1.js.map → tabs-eqVsJZWO.js.map} +1 -1
- package/dist/{text-inputs-f9Ia-aCi.js → text-inputs-DXItiR0O.js} +101 -98
- package/dist/text-inputs-DXItiR0O.js.map +1 -0
- package/dist/{text.styles-g4He6UIW.js → text.styles-B64My8RZ.js} +25 -10
- package/dist/text.styles-B64My8RZ.js.map +1 -0
- package/dist/theme.css +152 -112
- package/dist/{timelines-CwM_9IhD.js → timelines-DmtztAY_.js} +10 -10
- package/dist/{timelines-CwM_9IhD.js.map → timelines-DmtztAY_.js.map} +1 -1
- package/dist/{tooltip-yiRJUFjp.js → tooltip-B4hjKtoV.js} +3 -3
- package/dist/{tooltip-yiRJUFjp.js.map → tooltip-B4hjKtoV.js.map} +1 -1
- package/dist/{tree-WnKQzwbq.js → tree-CV11PURP.js} +8 -8
- package/dist/{tree-WnKQzwbq.js.map → tree-CV11PURP.js.map} +1 -1
- package/dist/typography/rich-text.js +1 -1
- package/dist/typography-CSyJrh28.js +117 -0
- package/dist/typography-CSyJrh28.js.map +1 -0
- package/dist/typography.js +1 -1
- package/dist/{ui-provider-C_U0Xma4.js → ui-provider-CQCuCBcy.js} +3 -3
- package/dist/ui-provider-CQCuCBcy.js.map +1 -0
- package/dist/ui-provider.js +1 -1
- package/dist/{upload-CXyxmQBP.js → upload-C9SA0X-8.js} +11 -11
- package/dist/{upload-CXyxmQBP.js.map → upload-C9SA0X-8.js.map} +1 -1
- package/dist/{upload-queue-Boscubn9.js → upload-queue-DhQJiSRc.js} +9 -9
- package/dist/{upload-queue-Boscubn9.js.map → upload-queue-DhQJiSRc.js.map} +1 -1
- package/dist/{usage-card-BhO5eqkX.js → usage-card-DVTRDmGz.js} +134 -133
- package/dist/usage-card-DVTRDmGz.js.map +1 -0
- package/dist/{utils-BRhFDwuU.js → utils-CF3c95Io.js} +68 -5
- package/dist/utils-CF3c95Io.js.map +1 -0
- package/dist/value-inputs-C0o70p-U.js +980 -0
- package/dist/value-inputs-C0o70p-U.js.map +1 -0
- package/dist/{value-typography-BP8OG6h5.js → value-typography-ClupF0Gz.js} +2 -2
- package/dist/{value-typography-BP8OG6h5.js.map → value-typography-ClupF0Gz.js.map} +1 -1
- package/dist/workspace-9EFVXUyk.js +410 -0
- package/dist/workspace-9EFVXUyk.js.map +1 -0
- package/docs/consumer-skill/SKILL.md +14 -129
- package/docs/consumer-skill/examples/app-layout.tsx +22 -12
- package/docs/consumer-skill/examples/authentication.tsx +77 -0
- package/docs/consumer-skill/examples/edit.tsx +30 -38
- package/docs/consumer-skill/examples/manifest.json +51 -1
- package/docs/consumer-skill/examples/rhf-bindings.tsx +86 -0
- package/docs/consumer-skill/examples/rhf-edit-page.tsx +141 -0
- package/docs/consumer-skill/examples/rhf-overlay-form.tsx +92 -0
- package/docs/consumer-skill/examples/rhf-transport.tsx +28 -0
- package/docs/consumer-skill/references/agents-md.md +17 -7
- package/docs/consumer-skill/references/authentication.md +42 -0
- package/docs/consumer-skill/references/component-contracts.json +319824 -0
- package/docs/consumer-skill/references/composition-mapping.md +92 -0
- package/docs/consumer-skill/references/composition.md +43 -19
- package/docs/consumer-skill/references/design-contract.md +32 -0
- package/docs/consumer-skill/references/discovery.md +84 -7
- package/docs/consumer-skill/references/installation.md +40 -36
- package/docs/consumer-skill/references/integration.md +6 -2
- package/docs/consumer-skill/references/public-api.json +1519 -65
- package/docs/consumer-skill/references/review.md +9 -4
- package/docs/consumer-skill/references/rhf-workflows.md +86 -0
- package/docs/consumer-skill/references/screen-archetypes.md +22 -0
- package/docs/consumer-skill/references/theming.md +8 -9
- package/docs/consumer-skill/references/tokens.json +12 -3
- package/docs/consumer-skill/references/workflows.md +2 -1
- package/docs/consumer-skill/scripts/composition-schema.d.mts +2 -0
- package/docs/consumer-skill/scripts/composition-schema.mjs +32 -0
- package/docs/consumer-skill/scripts/composition.mjs +198 -0
- package/docs/consumer-skill/scripts/discovery.mjs +42 -10
- package/docs/consumer-skill/scripts/inspect-component.mjs +11 -0
- package/docs/consumer-skill/scripts/inspect-tokens.mjs +11 -0
- package/docs/consumer-skill/scripts/inspection.mjs +138 -0
- package/docs/consumer-skill/scripts/map-composition.mjs +12 -0
- package/docs/consumer-skill/scripts/setup-skills.mjs +76 -0
- package/docs/consumer-skills/themelia-components/SKILL.md +30 -0
- package/docs/consumer-skills/themelia-composition/SKILL.md +35 -0
- package/docs/consumer-skills/themelia-forms/SKILL.md +12 -0
- package/docs/consumer-skills/themelia-foundation/SKILL.md +14 -0
- package/docs/consumer-skills/themelia-tokenization/SKILL.md +35 -0
- package/package.json +4 -2
- package/templates/README.md +39 -0
- package/templates/admin-shell-template.tsx +382 -0
- package/templates/analytics-operations-template.tsx +376 -0
- package/templates/customers-template.tsx +509 -0
- package/templates/index.ts +29 -0
- package/templates/orders-template.tsx +1102 -0
- package/templates/products-template.tsx +834 -0
- package/templates/user-permissions-template.tsx +450 -0
- package/dist/action-menu-CllU52Mm.js +0 -280
- package/dist/action-menu-CllU52Mm.js.map +0 -1
- package/dist/affordance-geometry.generated-tF36bREk.js.map +0 -1
- package/dist/ai-artifact-DvTwDVyL.js.map +0 -1
- package/dist/app-shell-C4FhvCqF.js.map +0 -1
- package/dist/cards-BaBZR-AU.js.map +0 -1
- package/dist/checkbox-AWIhNhmo.js.map +0 -1
- package/dist/choice-inputs-CNHvARCJ.js.map +0 -1
- package/dist/comments-DD0DUPwJ.js.map +0 -1
- package/dist/containers-Mu1LMGV1.js +0 -103
- package/dist/containers-Mu1LMGV1.js.map +0 -1
- package/dist/data-display-DT_khPl_.js.map +0 -1
- package/dist/date-picker-B2K3ucWn.js.map +0 -1
- package/dist/date-pickers-Ds8gLaoP.js +0 -175
- package/dist/date-pickers-Ds8gLaoP.js.map +0 -1
- package/dist/form-field-CwH9y77i.js.map +0 -1
- package/dist/forms-B9G_xwzi.js.map +0 -1
- package/dist/forms-numeric-B_jraJaQ.js.map +0 -1
- package/dist/input-DQdEd0YD.js +0 -263
- package/dist/input-DQdEd0YD.js.map +0 -1
- package/dist/item-K5_ghvze.js +0 -275
- package/dist/item-K5_ghvze.js.map +0 -1
- package/dist/metadata-list-8N16ZMW_.js +0 -405
- package/dist/metadata-list-8N16ZMW_.js.map +0 -1
- package/dist/overflow-tab-bar-CWY7Nogn.js.map +0 -1
- package/dist/overlays-tMkF-VAN.js.map +0 -1
- package/dist/page-CL9YeH_V.js +0 -224
- package/dist/page-CL9YeH_V.js.map +0 -1
- package/dist/page-header-commands-DOb6WsfD.js +0 -126
- package/dist/page-header-commands-DOb6WsfD.js.map +0 -1
- package/dist/settings-ybnjVwbd.js +0 -171
- package/dist/settings-ybnjVwbd.js.map +0 -1
- package/dist/smart-card-DiC5aac3.js +0 -604
- package/dist/smart-card-DiC5aac3.js.map +0 -1
- package/dist/text-inputs-f9Ia-aCi.js.map +0 -1
- package/dist/text.styles-g4He6UIW.js.map +0 -1
- package/dist/typography-UTnveOEy.js +0 -117
- package/dist/typography-UTnveOEy.js.map +0 -1
- package/dist/ui-provider-C_U0Xma4.js.map +0 -1
- package/dist/usage-card-BhO5eqkX.js.map +0 -1
- package/dist/utils-BRhFDwuU.js.map +0 -1
- package/dist/value-inputs-TaX4OjNk.js +0 -963
- package/dist/value-inputs-TaX4OjNk.js.map +0 -1
- package/dist/workspace-B-OEm3Kf.js +0 -408
- package/dist/workspace-B-OEm3Kf.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app-shell-D63ATkIK.js","names":["HEADER_THEME_CLASS","_Fragment","_Fragment","_Fragment","useThemeScopeHost","ThemeScopeHostProvider","cn","Stack","compositionClasses","Container","PageViewport","HEADER_THEME_CLASS$1","TopbarSidebarLayout","Content","props","headerStyle","headerHeight","sidebarWidth","style","resolvedSidebarTrigger","slots","sidebarTrigger","headerScope","resolvedLogo","logo","resolvedHeaderActions","headerActions","resolvedSidebar","sidebar","resolvedContent","children","hasSidebar","contentNode","contentClassName","sidebarNode","mobileSidebarMode","sidebarClassName","className","headerTheme","sidebarSide","headerClassName","headerInnerClassName","Fragment","bodyClassName","SidebarInsetLayout","shellStyle","resolvedTrigger","isInset","surface","toolbarNode","toolbar","toolbarClassName","mainNode","HEADER_THEME_CLASS","StackedLayout","resolvedNav","nav","contentWidth","event","viewport","action","insets","left","right","subheaderClassName","AppLayout","presentation","_variant","shell","variant"],"sources":["../src/components/layout/app-shell/topbar-sidebar-layout.tsx","../src/components/layout/app-shell/sidebar-inset-layout.tsx","../src/components/layout/app-shell/stacked-layout.tsx","../src/components/layout/app-shell/app-layout.tsx"],"sourcesContent":["/**\n * TopbarSidebarLayout — header-first app shell with a two-column body.\n *\n * This shell is intentionally separate from the default shadcn sidebar layout:\n * the logo belongs in the header, while the sidebar and content occupy the\n * remaining page height below the header.\n */\nimport { cn } from '../../../lib/utils';\nimport { ThemeScopeHostProvider, useThemeScopeHost } from '../../../lib/theme-scope';\n\nimport { Stack } from '../../base/structure';\nimport {compositionClasses} from '../../base/structure/composition.recipes';\nimport { PageViewport } from '../containers';\n\nimport type {\n\tTopbarSidebarLayoutProps,\n\tTopbarSidebarLayoutStyle,\n} from './app-shell.types';\n\n/**\n * Header theme is just a token scope. `.light` / `.dark` remap the shadcn\n * palette for the header subtree (see css/themes/shadcn.default.css), so header\n * partials use ordinary tokens (`bg-background`, `text-foreground`, `bg-accent`\n * …) and invert against the header surface automatically — no header-specific\n * color variables required. `light` keeps the header light even on a dark page;\n * `dark` gives a dark topbar on a light page.\n */\nconst HEADER_THEME_CLASS: Record<NonNullable<TopbarSidebarLayoutProps['headerTheme']>, string> = {\n\tlight: 'light',\n\tdark: 'dark',\n};\n\nexport function TopbarSidebarLayout({\n\tchildren,\n\theaderTheme = 'light',\n\tsidebarSide = 'left',\n\tmobileSidebarMode = 'drawer',\n\theaderHeight,\n\tsidebarWidth,\n\tsidebarTrigger,\n\tlogo,\n\theaderActions,\n\tsidebar,\n\tslots,\n\tcontentAs: Content = 'main',\n\tclassName,\n\theaderClassName,\n\theaderInnerClassName,\n\tbodyClassName,\n\tsidebarClassName,\n\tcontentClassName,\n\tstyle,\n\t...props\n}: TopbarSidebarLayoutProps) {\n\tconst headerStyle = {\n\t\t...(headerHeight ? { '--shell-header-height': headerHeight } : null),\n\t\t...(sidebarWidth ? { '--shell-sidebar-width': sidebarWidth } : null),\n\t\t...style,\n\t} as TopbarSidebarLayoutStyle;\n\tconst resolvedSidebarTrigger = slots?.sidebarTrigger ?? sidebarTrigger;\n\tconst headerScope = useThemeScopeHost<HTMLElement>();\n\tconst resolvedLogo = slots?.logo ?? logo;\n\tconst resolvedHeaderActions = slots?.headerActions ?? headerActions;\n\tconst resolvedSidebar = slots?.sidebar ?? sidebar;\n\tconst resolvedContent = slots?.content ?? children;\n\tconst hasSidebar = Boolean(resolvedSidebar);\n\tconst contentNode = (\n\t\t<PageViewport\n\t\t\trender={<Content />}\n\t\t\tclassName={cn(\n\t\t\t\t'topbar-sidebar-layout--content bg-background',\n\t\t\t\tcontentClassName,\n\t\t\t)}\n\t\t>\n\t\t\t{resolvedContent}\n\t\t</PageViewport>\n\t);\n\tconst sidebarNode = hasSidebar ? (\n\t\t<aside\n\t\t\tclassName={cn(\n\t\t\t\t'topbar-sidebar-layout--sidebar min-h-0 min-w-0 overflow-hidden bg-sidebar text-sidebar-foreground',\n\t\t\t\tmobileSidebarMode === 'drawer' ? 'hidden md:block group-data-[mobile=true]/sidebar-wrapper:hidden' : null,\n\t\t\t\tsidebarClassName,\n\t\t\t)}\n\t\t>\n\t\t\t{resolvedSidebar}\n\t\t</aside>\n\t) : null;\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t'topbar-sidebar-layout--component @container/app-shell isolate flex min-h-svh min-w-0 w-full flex-col overflow-hidden bg-background font-sans text-foreground',\n\t\t\t\t'shell-sidebar-vars',\n\t\t\t\t'has-[[data-slot=sidebar][data-collapsible=icon]]:shell-sidebar-icon-current',\n\t\t\t\t'has-[[data-slot=sidebar][data-collapsible=offcanvas]]:shell-sidebar-offcanvas-current',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\tstyle={headerStyle}\n\t\t\tdata-header-theme={headerTheme}\n\t\t\tdata-sidebar-side={sidebarSide}\n\t\t\tdata-mobile-sidebar-mode={mobileSidebarMode}\n\t\t\t{...props}\n\t\t>\n\t\t\t<ThemeScopeHostProvider value={headerScope.context}>\n\t\t\t<header\n\t\t\t\tref={headerScope.attachHost}\n\t\t\t\tdata-theme-scope=\"\"\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'topbar-sidebar-layout--header z-40 flex min-h-shell-header shrink-0 items-center border-b border-border bg-background px-surface py-space-sm text-foreground',\n\t\t\t\t\tHEADER_THEME_CLASS[headerTheme],\n\t\t\t\t\theaderClassName,\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t<Stack direction=\"horizontal\" align=\"center\" gap=\"lg\" wrap\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t'topbar-sidebar-layout--header-inner min-h-action w-full min-w-0 @3xl/app-shell:gap-space-2xl',\n\t\t\t\t\t\theaderInnerClassName,\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t{slots?.header ?? (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t{!!resolvedSidebarTrigger && (\n\t\t\t\t\t\t\t\t<div className=\"topbar-sidebar-layout--sidebar-trigger flex shrink-0 items-center\">\n\t\t\t\t\t\t\t\t\t{resolvedSidebarTrigger}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t{!!resolvedLogo && (\n\t\t\t\t\t\t\t\t<div className=\"topbar-sidebar-layout--logo flex min-w-0 shrink-0 items-center\">\n\t\t\t\t\t\t\t\t\t{resolvedLogo}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t{!!slots?.headerStart && (\n\t\t\t\t\t\t\t\t<div className=\"topbar-sidebar-layout--header-start flex min-w-0 items-center\">\n\t\t\t\t\t\t\t\t\t{slots.headerStart}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t{!!slots?.headerCenter && (\n\t\t\t\t\t\t\t\t<div className=\"topbar-sidebar-layout--header-center hidden min-w-0 flex-1 items-center @3xl/app-shell:flex\">\n\t\t\t\t\t\t\t\t\t{slots.headerCenter}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t{!!(resolvedHeaderActions || slots?.headerEnd) && (\n\t\t\t\t\t\t\t\t<div className=\"topbar-sidebar-layout--header-trailing ms-auto flex min-w-0 max-w-full flex-wrap items-center justify-end gap-space-sm @3xl/app-shell:gap-space-md [&>*]:max-w-full\">\n\t\t\t\t\t\t\t\t\t{!!resolvedHeaderActions && (\n\t\t\t\t\t\t\t\t\t\t<div className={cn('topbar-sidebar-layout--header-actions flex min-w-0 max-w-full flex-wrap items-center [&>*]:max-w-full', compositionClasses.commands)}>\n\t\t\t\t\t\t\t\t\t\t\t{resolvedHeaderActions}\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t{!!slots?.headerEnd && (\n\t\t\t\t\t\t\t\t\t\t<div className=\"topbar-sidebar-layout--header-end flex min-w-0 max-w-full flex-wrap items-center gap-space-sm @3xl/app-shell:gap-space-md [&>*]:max-w-full\">\n\t\t\t\t\t\t\t\t\t\t\t{slots.headerEnd}\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</>\n\t\t\t\t\t)}\n\t\t\t\t</Stack>\n\t\t\t</header>\n\t\t\t</ThemeScopeHostProvider>\n\n\t\t\t<div\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'topbar-sidebar-layout--body grid min-h-0 flex-1 grid-cols-1',\n\t\t\t\t\t\thasSidebar && mobileSidebarMode === 'drawer' && 'group-data-[mobile=true]/sidebar-wrapper:grid-cols-1',\n\t\t\t\t\thasSidebar && (\n\t\t\t\t\t\tsidebarSide === 'left'\n\t\t\t\t\t\t\t? 'md:shell-grid-left'\n\t\t\t\t\t\t\t: 'md:shell-grid-right'\n\t\t\t\t\t),\n\t\t\t\t\tbodyClassName,\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t{sidebarSide === 'left' ? (\n\t\t\t\t\t<>\n\t\t\t\t\t\t{sidebarNode}\n\t\t\t\t\t\t{contentNode}\n\t\t\t\t\t</>\n\t\t\t\t) : (\n\t\t\t\t\t<>\n\t\t\t\t\t\t{contentNode}\n\t\t\t\t\t\t{sidebarNode}\n\t\t\t\t\t</>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n","/**\n * SidebarInsetLayout — sidebar-first app shell with no global header.\n *\n * The counterpart to `TopbarSidebarLayout`. There the header spans the page and\n * owns the logo, with the sidebar below it; here the sidebar owns the full page\n * height and the logo sits inside it, so the content column carries only a slim\n * toolbar of its own. This is the shape shadcn's dashboard uses, and it is the\n * one to reach for when navigation should read as the primary frame.\n *\n * `toolbar={false}` removes even that row, for a shell with no header chrome.\n */\nimport { cn } from '../../../lib/utils';\n\nimport { Stack } from '../../base/structure';\nimport { PageViewport } from '../containers';\n\nimport type {\n\tSidebarInsetLayoutProps,\n\tTopbarSidebarLayoutStyle,\n} from './app-shell.types';\n\nexport function SidebarInsetLayout({\n\tchildren,\n\tsidebarSide = 'left',\n\tsurface = 'inset',\n\ttoolbar = true,\n\tsidebarWidth,\n\tsidebar,\n\tsidebarTrigger,\n\tslots,\n\tcontentAs: Content = 'main',\n\tclassName,\n\tsidebarClassName,\n\ttoolbarClassName,\n\tcontentClassName,\n\tstyle,\n\t...props\n}: SidebarInsetLayoutProps) {\n\tconst shellStyle = {\n\t\t...(sidebarWidth ? { '--shell-sidebar-width': sidebarWidth } : null),\n\t\t...style,\n\t} as TopbarSidebarLayoutStyle;\n\n\tconst resolvedSidebar = slots?.sidebar ?? sidebar;\n\tconst resolvedTrigger = slots?.sidebarTrigger ?? sidebarTrigger;\n\tconst resolvedContent = slots?.content ?? children;\n\tconst hasSidebar = Boolean(resolvedSidebar);\n\tconst isInset = surface === 'inset';\n\n\tconst sidebarNode = hasSidebar ? (\n\t\t<aside\n\t\t\tclassName={cn(\n\t\t\t\t'sidebar-inset-layout--sidebar min-h-0 min-w-0 shrink-0 overflow-hidden bg-sidebar text-sidebar-foreground',\n\t\t\t\t// Below `md` the column is hidden so `SidebarTrigger` can open the\n\t\t\t\t// sheet instead, matching `TopbarSidebarLayout`'s drawer behaviour.\n\t\t\t\t'hidden md:block group-data-[mobile=true]/sidebar-wrapper:hidden',\n\t\t\t\tsidebarClassName,\n\t\t\t)}\n\t\t>\n\t\t\t{resolvedSidebar}\n\t\t</aside>\n\t) : null;\n\n\tconst toolbarNode = toolbar ? (\n\t\t<header\n\t\t\tclassName={cn(\n\t\t\t\t'sidebar-inset-layout--toolbar @container/toolbar flex min-h-shell-header shrink-0 items-center gap-space-md px-surface py-space-sm',\n\t\t\t\t// The toolbar and scrolling body share one surface boundary.\n\t\t\t\t'border-b border-border',\n\t\t\t\ttoolbarClassName,\n\t\t\t)}\n\t\t>\n\t\t\t{slots?.toolbar ?? (\n\t\t\t\t<Stack\n\t\t\t\t\tdirection=\"horizontal\"\n\t\t\t\t\talign=\"center\"\n\t\t\t\t\tgap=\"md\" wrap\n\t\t\t\t\tclassName=\"sidebar-inset-layout--toolbar-inner min-h-action w-full min-w-0\"\n\t\t\t\t>\n\t\t\t\t\t{!!resolvedTrigger && (\n\t\t\t\t\t\t<div className=\"sidebar-inset-layout--sidebar-trigger flex shrink-0 items-center\">\n\t\t\t\t\t\t\t{resolvedTrigger}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)}\n\t\t\t\t\t{!!slots?.toolbarStart && (\n\t\t\t\t\t\t<div className=\"sidebar-inset-layout--toolbar-start flex min-w-0 flex-1 basis-32 items-center [&>*]:min-w-0 [&>*]:max-w-full\">\n\t\t\t\t\t\t\t{slots.toolbarStart}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)}\n\t\t\t\t\t{!!slots?.toolbarEnd && (\n\t\t\t\t\t\t<div className=\"sidebar-inset-layout--toolbar-end ms-auto flex min-w-0 max-w-full flex-wrap items-center justify-end gap-space-sm [&>*]:max-w-full\">\n\t\t\t\t\t\t\t{slots.toolbarEnd}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)}\n\t\t\t\t</Stack>\n\t\t\t)}\n\t\t</header>\n\t) : null;\n\n\tconst mainNode = (\n\t\t<div className={cn('sidebar-inset-layout--main flex min-h-0 min-w-0 flex-1 flex-col bg-background text-foreground', isInset && 'md:m-space-md md:overflow-hidden md:rounded-radius md:border md:border-border md:shadow-sm')}>\n\t\t\t{toolbarNode}\n\t\t\t<PageViewport\n\t\t\t\trender={<Content />}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'sidebar-inset-layout--content',\n\t\t\t\t\tcontentClassName,\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t{resolvedContent}\n\t\t\t</PageViewport>\n\t\t</div>\n\t);\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t// Grid, not flex: the sidebar column's width lives in\n\t\t\t\t// `--shell-sidebar-width-current`, which `shell-grid-left/right`\n\t\t\t\t// consume and the `has-[…]` variants below rewrite for the icon and\n\t\t\t\t// offcanvas collapse modes. A flex column has no intrinsic width here\n\t\t\t\t// — the shadcn sidebar inside it is positioned — so it collapses to 0.\n\t\t\t\t'sidebar-inset-layout--component isolate grid min-h-svh min-w-0 w-full grid-cols-1 overflow-hidden font-sans text-foreground',\n\t\t\t\thasSidebar && (sidebarSide === 'left' ? 'md:shell-grid-left' : 'md:shell-grid-right'),\n\t\t\t\tisInset ? 'bg-sidebar' : 'bg-background',\n\t\t\t\t'shell-sidebar-vars group-data-[mobile=true]/sidebar-wrapper:grid-cols-1',\n\t\t\t\t'has-[[data-slot=sidebar][data-collapsible=icon]]:shell-sidebar-icon-current',\n\t\t\t\t'has-[[data-slot=sidebar][data-collapsible=offcanvas]]:shell-sidebar-offcanvas-current',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\tstyle={shellStyle}\n\t\t\tdata-sidebar-side={sidebarSide}\n\t\t\tdata-surface={surface}\n\t\t\t{...props}\n\t\t>\n\t\t\t{sidebarSide === 'left' ? (\n\t\t\t\t<>\n\t\t\t\t\t{sidebarNode}\n\t\t\t\t\t{mainNode}\n\t\t\t\t</>\n\t\t\t) : (\n\t\t\t\t<>\n\t\t\t\t\t{mainNode}\n\t\t\t\t\t{sidebarNode}\n\t\t\t\t</>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n","/**\n * StackedLayout — header-only app shell with horizontal navigation.\n *\n * The third shape alongside `TopbarSidebarLayout` (header over sidebar) and\n * `SidebarInsetLayout` (sidebar owns the page). Here there is no sidebar at all:\n * primary navigation runs across the header and the page stacks beneath it.\n *\n * Reach for this when the navigation is shallow enough to fit a row — settings,\n * marketing consoles, single-resource tools — where a sidebar would be mostly\n * empty. `contentWidth=\"contained\"` holds the page to a reading measure;\n * `\"full\"` lets dashboards span. Header flow follows the shell width: below\n * 48rem navigation owns a full row; wider shells place it beside the logo.\n */\nimport { cn } from '../../../lib/utils';\nimport { ThemeScopeHostProvider, useThemeScopeHost } from '../../../lib/theme-scope';\n\nimport { Stack } from '../../base/structure';\nimport { Container, PageViewport } from '../containers';\n\nimport type {\n\tStackedLayoutProps,\n\tTopbarSidebarLayoutStyle,\n} from './app-shell.types';\n\n/** Same token-scope trick as `TopbarSidebarLayout` — see its note. */\nconst HEADER_THEME_CLASS: Record<NonNullable<StackedLayoutProps['headerTheme']>, string> = {\n\tlight: 'light',\n\tdark: 'dark',\n};\n\nexport function StackedLayout({\n\tchildren,\n\theaderTheme = 'light',\n\tcontentWidth = 'contained',\n\theaderHeight,\n\tlogo,\n\tnav,\n\tslots,\n\tcontentAs: Content = 'main',\n\tclassName,\n\theaderClassName,\n\tsubheaderClassName,\n\tcontentClassName,\n\tstyle,\n\t...props\n}: StackedLayoutProps) {\n\tconst shellStyle = {\n\t\t...(headerHeight ? { '--shell-header-height': headerHeight } : null),\n\t\t...style,\n\t} as TopbarSidebarLayoutStyle;\n\n\tconst headerScope = useThemeScopeHost<HTMLElement>();\n\tconst resolvedLogo = slots?.logo ?? logo;\n\tconst resolvedNav = slots?.nav ?? nav;\n\tconst resolvedContent = slots?.content ?? children;\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t'stacked-layout--component @container/stacked-shell isolate flex min-h-svh min-w-0 w-full flex-col bg-background font-sans text-foreground',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\tstyle={shellStyle}\n\t\t\tdata-header-theme={headerTheme}\n\t\t\tdata-content-width={contentWidth}\n\t\t\t{...props}\n\t\t>\n\t\t\t<ThemeScopeHostProvider value={headerScope.context}>\n\t\t\t<header\n\t\t\t\tref={headerScope.attachHost}\n\t\t\t\tdata-theme-scope=\"\"\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'stacked-layout--header z-40 flex shrink-0 items-center border-b border-border bg-background px-surface py-space-sm text-foreground @3xl/stacked-shell:min-h-shell-header @3xl/stacked-shell:py-0',\n\t\t\t\t\tHEADER_THEME_CLASS[headerTheme],\n\t\t\t\t\theaderClassName,\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t<Stack\n\t\t\t\t\tdirection=\"horizontal\"\n\t\t\t\t\talign=\"center\"\n\t\t\t\t\tgap=\"lg\"\n\t\t\t\t\twrap\n\t\t\t\t\t// The shell width owns header adaptation, including narrow parents\n\t\t\t\t\t// on wide viewports. Children keep their identity across both flows.\n\t\t\t\t\tclassName=\"stacked-layout--header-inner min-h-action w-full min-w-0 @3xl/stacked-shell:flex-nowrap @3xl/stacked-shell:gap-space-2xl\"\n\t\t\t\t>\n\t\t\t\t\t{slots?.header ?? (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t{!!resolvedLogo && (\n\t\t\t\t\t\t\t\t<div className=\"stacked-layout--logo flex min-w-0 shrink-0 items-center @3xl/stacked-shell:order-1\">\n\t\t\t\t\t\t\t\t\t{resolvedLogo}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t{!!resolvedNav && (\n\t\t\t\t\t\t\t\t// This shell has no sidebar, so hiding the nav in narrow shells left\n\t\t\t\t\t\t\t\t// the app with no navigation at all — logo and account menu\n\t\t\t\t\t\t\t\t// only. Instead it drops to its own full-width row and scrolls\n\t\t\t\t\t\t\t\t// horizontally, and returns inline when its parent is wide enough.\n\t\t\t\t\t\t\t\t//\n\t\t\t\t\t\t\t\t// Rendered once, not duplicated per breakpoint: a second copy\n\t\t\t\t\t\t\t\t// would put every nav link in the accessibility tree twice.\n\t\t\t\t\t\t\t\t//\n\t\t\t\t\t\t\t\t// Keep navigation intrinsic and single-line inside its scroller.\n\t\t\t\t\t\t\t\t// The shared inset reserves room for outer focus rings on every side.\n\t\t\t\t\t\t\t\t<nav\n\t\t\t\t\t\t\t\t\tonFocusCapture={(event) => {\n\t\t\t\t\t\t\t\t\t\t// Native focus can leave a partially visible action clipped.\n\t\t\t\t\t\t\t\t\t\t// Reveal only within this horizontal owner; preserve page scroll.\n\t\t\t\t\t\t\t\t\t\tconst nav = event.currentTarget;\n\t\t\t\t\t\t\t\t\t\t// React portal focus bubbles through its logical nav ancestry.\n\t\t\t\t\t\t\t\t\t\tif (!nav.contains(event.target)) return;\n\t\t\t\t\t\t\t\t\t\tconst viewport = nav.getBoundingClientRect();\n\t\t\t\t\t\t\t\t\t\tconst action = event.target.getBoundingClientRect();\n\t\t\t\t\t\t\t\t\t\tconst insets = getComputedStyle(nav);\n\t\t\t\t\t\t\t\t\t\tconst left = viewport.left + (parseFloat(insets.paddingLeft) || 0);\n\t\t\t\t\t\t\t\t\t\tconst right = viewport.right - (parseFloat(insets.paddingRight) || 0);\n\t\t\t\t\t\t\t\t\t\tif (action.left < left) nav.scrollLeft += action.left - left;\n\t\t\t\t\t\t\t\t\t\telse if (action.right > right) nav.scrollLeft += action.right - right;\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\tclassName=\"stacked-layout--nav order-last flex w-full min-w-0 flex-nowrap items-center overflow-x-auto p-space-sm @3xl/stacked-shell:order-2 @3xl/stacked-shell:w-auto @3xl/stacked-shell:flex-1 [&>*]:shrink-0 [&>*]:flex-nowrap\">\n\t\t\t\t\t\t\t\t\t{resolvedNav}\n\t\t\t\t\t\t\t\t</nav>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t{!!slots?.headerEnd && (\n\t\t\t\t\t\t\t\t<div className=\"stacked-layout--header-end ms-auto flex min-w-0 max-w-full flex-wrap items-center justify-end gap-space-sm @3xl/stacked-shell:order-3 @3xl/stacked-shell:gap-space-md [&>*]:max-w-full\">\n\t\t\t\t\t\t\t\t\t{slots.headerEnd}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</>\n\t\t\t\t\t)}\n\t\t\t\t</Stack>\n\t\t\t</header>\n\t\t\t</ThemeScopeHostProvider>\n\n\t\t\t{!!slots?.subheader && (\n\t\t\t\t<div\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t'stacked-layout--subheader shrink-0 border-b border-border bg-background px-surface',\n\t\t\t\t\t\tsubheaderClassName,\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t{slots.subheader}\n\t\t\t\t</div>\n\t\t\t)}\n\n\t\t\t<PageViewport\n\t\t\t\trender={<Content />}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'stacked-layout--content bg-background',\n\t\t\t\t\tcontentClassName,\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t{contentWidth === 'contained' ? (\n\t\t\t\t\t<Container maxWidth=\"2xl\" gutter=\"lg\" className=\"stacked-layout--measure\">\n\t\t\t\t\t\t{resolvedContent}\n\t\t\t\t\t</Container>\n\t\t\t\t) : (\n\t\t\t\t\tresolvedContent\n\t\t\t\t)}\n\t\t\t</PageViewport>\n\t\t</div>\n\t);\n}\n","import { cn } from '../../../lib/utils';\nimport { SidebarInsetLayout } from './sidebar-inset-layout';\nimport { StackedLayout } from './stacked-layout';\nimport { TopbarSidebarLayout } from './topbar-sidebar-layout';\nimport type { SidebarInsetLayoutProps, StackedLayoutProps, TopbarSidebarLayoutProps } from './app-shell.types';\n\n/** Presets select chrome; each underlying shell retains its own typed slots and behavior. */\nexport type AppLayoutProps =\n | (Omit<TopbarSidebarLayoutProps, 'headerTheme'> & {variant?: 'light-header' | 'dark-header'})\n | (Omit<SidebarInsetLayoutProps, 'surface'> & {variant: 'sidebar' | 'inset'})\n | (StackedLayoutProps & {variant: 'stacked'});\n\nexport type AppLayoutVariant = NonNullable<AppLayoutProps['variant']>;\n\n/** Five ready compositions using three shell owners, with one page viewport. */\nexport function AppLayout(props: AppLayoutProps) {\n const presentation = {'data-app-layout': props.variant ?? 'light-header', className: cn('app-layout--component', props.className)};\n switch (props.variant) {\n case 'stacked': {\n const {variant: _variant, ...shell} = props;\n return <StackedLayout {...shell} {...presentation} />;\n }\n case 'sidebar':\n case 'inset': {\n const {variant, ...shell} = props;\n return <SidebarInsetLayout {...shell} {...presentation} surface={variant === 'sidebar' ? 'flush' : 'inset'} />;\n }\n default: {\n const {variant = 'light-header', ...shell} = props;\n return <TopbarSidebarLayout {...shell} {...presentation} headerTheme={variant === 'dark-header' ? 'dark' : 'light'} />;\n }\n }\n}\n"],"mappings":"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"}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { useStrings as e } from "./lib/strings.js";
|
|
3
|
-
import { t } from "./utils-
|
|
4
|
-
import { n } from "./buttons-
|
|
5
|
-
import { c as r } from "./typography-
|
|
3
|
+
import { t } from "./utils-CF3c95Io.js";
|
|
4
|
+
import { n } from "./buttons-BbfzgczK.js";
|
|
5
|
+
import { c as r } from "./typography-CSyJrh28.js";
|
|
6
6
|
import { t as i } from "./focus-recipes-B653VaLq.js";
|
|
7
|
-
import { t as a } from "./progress-
|
|
7
|
+
import { t as a } from "./progress-BvF2oCdV.js";
|
|
8
8
|
import { t as o } from "./interaction-recipes-XR9ZpVYL.js";
|
|
9
|
-
import { i as s } from "./primitives-
|
|
10
|
-
import { c, i as l, n as u, r as d, t as f, u as p } from "./item-
|
|
9
|
+
import { i as s } from "./primitives-Du64iDbb.js";
|
|
10
|
+
import { c, i as l, n as u, r as d, t as f, u as p } from "./item-BvZ2DR_x.js";
|
|
11
11
|
import { forwardRef as m } from "react";
|
|
12
12
|
import { Fragment as h, jsx as g, jsxs as _ } from "react/jsx-runtime";
|
|
13
13
|
import { Archive as v, AudioLines as y, Download as b, Eye as x, FileCode as S, FileText as C, ImageIcon as w, Video as T, X as E } from "lucide-react";
|
|
@@ -243,4 +243,4 @@ R.displayName = "Attachment";
|
|
|
243
243
|
//#endregion
|
|
244
244
|
export { j as a, P as c, F as i, A as l, I as n, M as o, N as r, L as s, R as t, O as u };
|
|
245
245
|
|
|
246
|
-
//# sourceMappingURL=attachment-
|
|
246
|
+
//# sourceMappingURL=attachment-DkoqHPPl.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attachment-BxDfL2mw.js","names":["_Fragment","Button","ButtonPrimitive","Text","focusRecipes","Progress","interactionRecipes","FileSize","ItemDescription","ItemActions","ItemContent","Item","ItemTitle","Fragment$1","defaultAttachmentStrings","name","icons","ImageIcon","FileText","AudioLines","Video","FileCode","Archive","getAttachmentKind","extension","AttachmentFileIcon","Icon","kind","AttachmentMedia","forwardRef","props","ItemMedia","cn","className","AttachmentContent","AttachmentTitle","AttachmentDescription","AttachmentActions","AttachmentProgress","Attachment","stringsProp","strings","useStrings","showProgress","status","pct","progress","statusCopy","density","layout","disabled","children","thumbnailUrl","media","meta","bytes","description","error","actions","onPreview","onDownload","onRemove","Button$1","Eye","Download","X","onOpen","Button"],"sources":["../src/components/base/attachment/attachment.types.ts","../src/components/base/attachment/attachment.tsx"],"sourcesContent":["import type { ComponentPropsWithoutRef, ReactNode, ReactElement } from 'react';\nimport type { StringsProp } from '../../../lib/strings';\nimport type { ItemDensity, ItemSize, ItemVariant } from '../item';\nexport type AttachmentKind = 'image' | 'document' | 'audio' | 'video' | 'code' | 'archive' | 'generic';\nexport type AttachmentStatus = 'queued' | 'uploading' | 'done' | 'error' | 'cancelled';\nexport interface AttachmentStrings {\n preview: (name: string) => string;\n download: (name: string) => string;\n remove: (name: string) => string;\n queued: string; uploading: string; done: string; error: string; cancelled: string;\n}\nexport const defaultAttachmentStrings: AttachmentStrings = {\n preview: name => `Preview ${name}`, download: name => `Download ${name}`, remove: name => `Remove ${name}`,\n queued: 'Queued', uploading: 'Uploading', done: 'Uploaded', error: 'Failed', cancelled: 'Cancelled',\n};\nexport interface AttachmentProps extends Omit<ComponentPropsWithoutRef<'div'>, 'title' | 'onError'> {\n /** Display filename. Omit only when assembling children using Attachment anatomy. */\n name?: string;\n /** Caller-formatted metadata takes precedence over bytes. */\n meta?: ReactNode;\n bytes?: number;\n locale?: string;\n kind?: AttachmentKind;\n media?: ReactNode;\n thumbnailUrl?: string;\n status?: AttachmentStatus;\n /** Upload progress in the 0–100 range. A missing uploading value is indeterminate. */\n progress?: number | null;\n error?: ReactNode;\n /** Override generated status copy while preserving status/progress behavior. */\n description?: ReactNode;\n /** Additional sibling actions. */\n actions?: ReactNode;\n /** Open or preview the whole body, with independent sibling action buttons. Uses the preview string for its accessible name. */\n onOpen?: () => void;\n onPreview?: () => void;\n onDownload?: () => void;\n onRemove?: () => void;\n disabled?: boolean;\n /** Compact horizontal chip, full list row, or a media-first gallery tile. */\n layout?: 'compact' | 'list' | 'gallery';\n size?: ItemSize;\n density?: ItemDensity;\n variant?: ItemVariant;\n /** Element used for a list item without wrapping or inspecting children. */\n render?: ReactElement;\n strings?: StringsProp<AttachmentStrings>;\n}\n","import { forwardRef } from 'react';\nimport { Button as ButtonPrimitive } from '@base-ui/react/button';\nimport { Archive, AudioLines, Download, Eye, FileCode, FileText, ImageIcon, Video, X } from 'lucide-react';\nimport { Button } from '../buttons';\nimport { FileSize } from '../../primitives';\nimport { Text } from '../../typography';\nimport { Progress, type ProgressProps } from '../feedback';\nimport { Item, ItemMedia, ItemContent, ItemTitle, ItemDescription, ItemActions, type ItemMediaProps, type ItemContentProps, type ItemTitleProps, type ItemDescriptionProps, type ItemActionsProps } from '../item';\nimport { useStrings } from '../../../lib/strings';\nimport { cn } from '../../../lib/utils';\nimport { defaultAttachmentStrings, type AttachmentProps, type AttachmentKind } from './attachment.types';\nimport { focusRecipes } from '../../../lib/focus-recipes';\nimport { interactionRecipes } from '../../../lib/interaction-recipes';\n\nconst icons = { image: ImageIcon, document: FileText, audio: AudioLines, video: Video, code: FileCode, archive: Archive, generic: FileText };\n/** Filename categorization is display-only and does not trust a file's extension for validation. */\nexport function getAttachmentKind(name: string): AttachmentKind {\n const extension = name.split('.').at(-1)?.toLowerCase();\n if (extension && ['png','jpg','jpeg','gif','webp','svg','avif'].includes(extension)) return 'image';\n if (extension && ['mp3','wav','ogg','flac','m4a'].includes(extension)) return 'audio';\n if (extension && ['mp4','webm','mov','avi'].includes(extension)) return 'video';\n if (extension && ['zip','gz','tar','rar','7z'].includes(extension)) return 'archive';\n if (extension && ['ts','tsx','js','jsx','css','html','json','py','sh','sql'].includes(extension)) return 'code';\n if (extension && ['pdf','doc','docx','txt','md','xls','xlsx','csv'].includes(extension)) return 'document';\n return 'generic';\n}\nexport function AttachmentFileIcon({ name, kind }: { name: string; kind?: AttachmentKind }) { const Icon = icons[kind ?? getAttachmentKind(name)]; return <Icon aria-hidden=\"true\" />; }\nexport const AttachmentMedia = forwardRef<HTMLDivElement, ItemMediaProps>(function AttachmentMedia({ className, ...props }, ref) { return <ItemMedia {...props} ref={ref} className={cn('attachment--media self-center group-has-data-[slot=item-description]/item:self-center', className)} />; });\nexport const AttachmentContent = forwardRef<HTMLDivElement, ItemContentProps>(function AttachmentContent({ className, ...props }, ref) { return <ItemContent {...props} ref={ref} className={cn('attachment--content w-full max-w-full', className)} />; });\nexport const AttachmentTitle = forwardRef<HTMLDivElement, ItemTitleProps>(function AttachmentTitle({ className, ...props }, ref) { return <ItemTitle {...props} ref={ref} className={cn('attachment--title block w-full truncate [&>span]:block [&>span]:min-w-0 [&>span]:truncate', className)} />; });\nexport const AttachmentDescription = forwardRef<HTMLParagraphElement, ItemDescriptionProps>(function AttachmentDescription({ className, ...props }, ref) { return <ItemDescription {...props} ref={ref} className={cn('attachment--description', className)} />; });\nexport const AttachmentActions = forwardRef<HTMLDivElement, ItemActionsProps>(function AttachmentActions({ className, ...props }, ref) { return <ItemActions {...props} ref={ref} className={cn('attachment--actions relative z-10', className)} />; });\nexport function AttachmentProgress({ className, ...props }: ProgressProps) { return <Progress {...props} className={cn('attachment--progress', className)} />; }\n/** File presentation; callbacks own preview, transfer and removal. Card framing belongs to the caller. */\nexport const Attachment = forwardRef<HTMLDivElement, AttachmentProps>(function Attachment({\n name = '', meta, bytes, locale, kind, media, thumbnailUrl, status, progress, error, description, actions, onOpen, onPreview, onDownload, onRemove,\n disabled = false, layout = 'list', size, density, variant = 'outline', render, strings: stringsProp, children, className, ...props\n}, ref) {\n const strings = useStrings(defaultAttachmentStrings, stringsProp);\n const showProgress = status === 'queued' || status === 'uploading';\n const pct = progress === null || progress === undefined ? null : Number.isFinite(progress) ? Math.max(0, Math.min(100, progress)) : 0;\n const statusCopy = status ? strings[status] : undefined;\n return <Item {...props} ref={ref} render={render} size={size} density={density ?? (layout === 'compact' ? 'compact' : 'default')} variant={variant} padding=\"default\" data-status={status} data-layout={layout} data-disabled={disabled || undefined} className={cn('attachment--component relative isolate min-w-0 max-w-full bg-card text-card-foreground', layout === 'gallery' ? 'flex-col items-stretch' : 'flex-nowrap', status === 'error' && 'border-destructive', className)}>\n {children ?? <>\n {/* A gallery tile owns one full-width media frame. The row thumbnail recipe (a\n size-scaled square) would otherwise shrink a gallery image to an icon. */}\n <AttachmentMedia variant={thumbnailUrl && layout !== 'gallery' ? 'image' : 'icon'} className={layout === 'gallery' ? 'aspect-video h-auto w-full overflow-hidden rounded-inner bg-muted text-muted-foreground' : undefined}>{media ?? (thumbnailUrl ? <img src={thumbnailUrl} alt=\"\" className=\"h-full w-full object-cover\" /> : <AttachmentFileIcon name={name} kind={kind} />)}</AttachmentMedia>\n <AttachmentContent>\n <AttachmentTitle title={name}>{name}</AttachmentTitle>\n {(meta !== undefined || bytes !== undefined) && <AttachmentDescription clamp={1}>{meta ?? <FileSize value={bytes} locale={locale} size=\"xs\" type=\"secondary\" align=\"left\" />}</AttachmentDescription>}\n {(description !== undefined || statusCopy) && <AttachmentDescription clamp=\"none\">{description !== undefined ? description : <Text tag=\"span\" size=\"xs\" type={status === 'error' ? 'error' : 'secondary'}>{statusCopy}</Text>}{status === 'error' && error ? <> — <Text tag=\"span\" role=\"alert\" size=\"xs\" type=\"error\">{error}</Text></> : null}</AttachmentDescription>}\n {showProgress && <AttachmentProgress value={status === 'queued' && pct === null ? 0 : pct} aria-label={name} size=\"sm\" tone={status === 'queued' ? 'neutral' : 'primary'} />}\n </AttachmentContent>\n {(actions || onPreview || onDownload || onRemove) && <AttachmentActions>\n {onPreview && <Button type=\"button\" tone=\"secondary\" buttonStyle=\"ghost\" size=\"sm\" iconOnly disabled={disabled} aria-label={strings.preview(name)} onClick={onPreview}><Eye aria-hidden=\"true\" className=\"size-icon-sm\" /></Button>}\n {onDownload && <Button type=\"button\" tone=\"secondary\" buttonStyle=\"ghost\" size=\"sm\" iconOnly disabled={disabled} aria-label={strings.download(name)} onClick={onDownload}><Download aria-hidden=\"true\" className=\"size-icon-sm\" /></Button>}\n {onRemove && <Button type=\"button\" tone=\"secondary\" buttonStyle=\"ghost\" size=\"sm\" iconOnly disabled={disabled} aria-label={strings.remove(name)} onClick={onRemove}><X aria-hidden=\"true\" className=\"size-icon-sm\" /></Button>}\n {actions}\n </AttachmentActions>}\n </>}\n {onOpen && <ButtonPrimitive type=\"button\" disabled={disabled} aria-label={strings.preview(name)} onClick={onOpen} className={`attachment--trigger ${interactionRecipes.nativeButtonReset} absolute inset-0 z-0 cursor-pointer rounded-inner outline-none ${focusRecipes.inset} disabled:cursor-not-allowed`} />}\n </Item>;\n});\nAttachment.displayName = 'Attachment';\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"attachment-DkoqHPPl.js","names":["_Fragment","Button","ButtonPrimitive","Text","focusRecipes","Progress","interactionRecipes","FileSize","ItemDescription","ItemActions","ItemContent","Item","ItemTitle","Fragment$1","defaultAttachmentStrings","name","icons","ImageIcon","FileText","AudioLines","Video","FileCode","Archive","getAttachmentKind","extension","AttachmentFileIcon","Icon","kind","AttachmentMedia","forwardRef","props","ItemMedia","cn","className","AttachmentContent","AttachmentTitle","AttachmentDescription","AttachmentActions","AttachmentProgress","Attachment","stringsProp","strings","useStrings","showProgress","status","pct","progress","statusCopy","density","layout","disabled","children","thumbnailUrl","media","meta","bytes","description","error","actions","onPreview","onDownload","onRemove","Button$1","Eye","Download","X","onOpen","Button"],"sources":["../src/components/base/attachment/attachment.types.ts","../src/components/base/attachment/attachment.tsx"],"sourcesContent":["import type { ComponentPropsWithoutRef, ReactNode, ReactElement } from 'react';\nimport type { StringsProp } from '../../../lib/strings';\nimport type { ItemDensity, ItemSize, ItemVariant } from '../item';\nexport type AttachmentKind = 'image' | 'document' | 'audio' | 'video' | 'code' | 'archive' | 'generic';\nexport type AttachmentStatus = 'queued' | 'uploading' | 'done' | 'error' | 'cancelled';\nexport interface AttachmentStrings {\n preview: (name: string) => string;\n download: (name: string) => string;\n remove: (name: string) => string;\n queued: string; uploading: string; done: string; error: string; cancelled: string;\n}\nexport const defaultAttachmentStrings: AttachmentStrings = {\n preview: name => `Preview ${name}`, download: name => `Download ${name}`, remove: name => `Remove ${name}`,\n queued: 'Queued', uploading: 'Uploading', done: 'Uploaded', error: 'Failed', cancelled: 'Cancelled',\n};\nexport interface AttachmentProps extends Omit<ComponentPropsWithoutRef<'div'>, 'title' | 'onError'> {\n /** Display filename. Omit only when assembling children using Attachment anatomy. */\n name?: string;\n /** Caller-formatted metadata takes precedence over bytes. */\n meta?: ReactNode;\n bytes?: number;\n locale?: string;\n kind?: AttachmentKind;\n media?: ReactNode;\n thumbnailUrl?: string;\n status?: AttachmentStatus;\n /** Upload progress in the 0–100 range. A missing uploading value is indeterminate. */\n progress?: number | null;\n error?: ReactNode;\n /** Override generated status copy while preserving status/progress behavior. */\n description?: ReactNode;\n /** Additional sibling actions. */\n actions?: ReactNode;\n /** Open or preview the whole body, with independent sibling action buttons. Uses the preview string for its accessible name. */\n onOpen?: () => void;\n onPreview?: () => void;\n onDownload?: () => void;\n onRemove?: () => void;\n disabled?: boolean;\n /** Compact horizontal chip, full list row, or a media-first gallery tile. */\n layout?: 'compact' | 'list' | 'gallery';\n size?: ItemSize;\n density?: ItemDensity;\n variant?: ItemVariant;\n /** Element used for a list item without wrapping or inspecting children. */\n render?: ReactElement;\n strings?: StringsProp<AttachmentStrings>;\n}\n","import { forwardRef } from 'react';\nimport { Button as ButtonPrimitive } from '@base-ui/react/button';\nimport { Archive, AudioLines, Download, Eye, FileCode, FileText, ImageIcon, Video, X } from 'lucide-react';\nimport { Button } from '../buttons';\nimport { FileSize } from '../../primitives';\nimport { Text } from '../../typography';\nimport { Progress, type ProgressProps } from '../feedback';\nimport { Item, ItemMedia, ItemContent, ItemTitle, ItemDescription, ItemActions, type ItemMediaProps, type ItemContentProps, type ItemTitleProps, type ItemDescriptionProps, type ItemActionsProps } from '../item';\nimport { useStrings } from '../../../lib/strings';\nimport { cn } from '../../../lib/utils';\nimport { defaultAttachmentStrings, type AttachmentProps, type AttachmentKind } from './attachment.types';\nimport { focusRecipes } from '../../../lib/focus-recipes';\nimport { interactionRecipes } from '../../../lib/interaction-recipes';\n\nconst icons = { image: ImageIcon, document: FileText, audio: AudioLines, video: Video, code: FileCode, archive: Archive, generic: FileText };\n/** Filename categorization is display-only and does not trust a file's extension for validation. */\nexport function getAttachmentKind(name: string): AttachmentKind {\n const extension = name.split('.').at(-1)?.toLowerCase();\n if (extension && ['png','jpg','jpeg','gif','webp','svg','avif'].includes(extension)) return 'image';\n if (extension && ['mp3','wav','ogg','flac','m4a'].includes(extension)) return 'audio';\n if (extension && ['mp4','webm','mov','avi'].includes(extension)) return 'video';\n if (extension && ['zip','gz','tar','rar','7z'].includes(extension)) return 'archive';\n if (extension && ['ts','tsx','js','jsx','css','html','json','py','sh','sql'].includes(extension)) return 'code';\n if (extension && ['pdf','doc','docx','txt','md','xls','xlsx','csv'].includes(extension)) return 'document';\n return 'generic';\n}\nexport function AttachmentFileIcon({ name, kind }: { name: string; kind?: AttachmentKind }) { const Icon = icons[kind ?? getAttachmentKind(name)]; return <Icon aria-hidden=\"true\" />; }\nexport const AttachmentMedia = forwardRef<HTMLDivElement, ItemMediaProps>(function AttachmentMedia({ className, ...props }, ref) { return <ItemMedia {...props} ref={ref} className={cn('attachment--media self-center group-has-data-[slot=item-description]/item:self-center', className)} />; });\nexport const AttachmentContent = forwardRef<HTMLDivElement, ItemContentProps>(function AttachmentContent({ className, ...props }, ref) { return <ItemContent {...props} ref={ref} className={cn('attachment--content w-full max-w-full', className)} />; });\nexport const AttachmentTitle = forwardRef<HTMLDivElement, ItemTitleProps>(function AttachmentTitle({ className, ...props }, ref) { return <ItemTitle {...props} ref={ref} className={cn('attachment--title block w-full truncate [&>span]:block [&>span]:min-w-0 [&>span]:truncate', className)} />; });\nexport const AttachmentDescription = forwardRef<HTMLParagraphElement, ItemDescriptionProps>(function AttachmentDescription({ className, ...props }, ref) { return <ItemDescription {...props} ref={ref} className={cn('attachment--description', className)} />; });\nexport const AttachmentActions = forwardRef<HTMLDivElement, ItemActionsProps>(function AttachmentActions({ className, ...props }, ref) { return <ItemActions {...props} ref={ref} className={cn('attachment--actions relative z-10', className)} />; });\nexport function AttachmentProgress({ className, ...props }: ProgressProps) { return <Progress {...props} className={cn('attachment--progress', className)} />; }\n/** File presentation; callbacks own preview, transfer and removal. Card framing belongs to the caller. */\nexport const Attachment = forwardRef<HTMLDivElement, AttachmentProps>(function Attachment({\n name = '', meta, bytes, locale, kind, media, thumbnailUrl, status, progress, error, description, actions, onOpen, onPreview, onDownload, onRemove,\n disabled = false, layout = 'list', size, density, variant = 'outline', render, strings: stringsProp, children, className, ...props\n}, ref) {\n const strings = useStrings(defaultAttachmentStrings, stringsProp);\n const showProgress = status === 'queued' || status === 'uploading';\n const pct = progress === null || progress === undefined ? null : Number.isFinite(progress) ? Math.max(0, Math.min(100, progress)) : 0;\n const statusCopy = status ? strings[status] : undefined;\n return <Item {...props} ref={ref} render={render} size={size} density={density ?? (layout === 'compact' ? 'compact' : 'default')} variant={variant} padding=\"default\" data-status={status} data-layout={layout} data-disabled={disabled || undefined} className={cn('attachment--component relative isolate min-w-0 max-w-full bg-card text-card-foreground', layout === 'gallery' ? 'flex-col items-stretch' : 'flex-nowrap', status === 'error' && 'border-destructive', className)}>\n {children ?? <>\n {/* A gallery tile owns one full-width media frame. The row thumbnail recipe (a\n size-scaled square) would otherwise shrink a gallery image to an icon. */}\n <AttachmentMedia variant={thumbnailUrl && layout !== 'gallery' ? 'image' : 'icon'} className={layout === 'gallery' ? 'aspect-video h-auto w-full overflow-hidden rounded-inner bg-muted text-muted-foreground' : undefined}>{media ?? (thumbnailUrl ? <img src={thumbnailUrl} alt=\"\" className=\"h-full w-full object-cover\" /> : <AttachmentFileIcon name={name} kind={kind} />)}</AttachmentMedia>\n <AttachmentContent>\n <AttachmentTitle title={name}>{name}</AttachmentTitle>\n {(meta !== undefined || bytes !== undefined) && <AttachmentDescription clamp={1}>{meta ?? <FileSize value={bytes} locale={locale} size=\"xs\" type=\"secondary\" align=\"left\" />}</AttachmentDescription>}\n {(description !== undefined || statusCopy) && <AttachmentDescription clamp=\"none\">{description !== undefined ? description : <Text tag=\"span\" size=\"xs\" type={status === 'error' ? 'error' : 'secondary'}>{statusCopy}</Text>}{status === 'error' && error ? <> — <Text tag=\"span\" role=\"alert\" size=\"xs\" type=\"error\">{error}</Text></> : null}</AttachmentDescription>}\n {showProgress && <AttachmentProgress value={status === 'queued' && pct === null ? 0 : pct} aria-label={name} size=\"sm\" tone={status === 'queued' ? 'neutral' : 'primary'} />}\n </AttachmentContent>\n {(actions || onPreview || onDownload || onRemove) && <AttachmentActions>\n {onPreview && <Button type=\"button\" tone=\"secondary\" buttonStyle=\"ghost\" size=\"sm\" iconOnly disabled={disabled} aria-label={strings.preview(name)} onClick={onPreview}><Eye aria-hidden=\"true\" className=\"size-icon-sm\" /></Button>}\n {onDownload && <Button type=\"button\" tone=\"secondary\" buttonStyle=\"ghost\" size=\"sm\" iconOnly disabled={disabled} aria-label={strings.download(name)} onClick={onDownload}><Download aria-hidden=\"true\" className=\"size-icon-sm\" /></Button>}\n {onRemove && <Button type=\"button\" tone=\"secondary\" buttonStyle=\"ghost\" size=\"sm\" iconOnly disabled={disabled} aria-label={strings.remove(name)} onClick={onRemove}><X aria-hidden=\"true\" className=\"size-icon-sm\" /></Button>}\n {actions}\n </AttachmentActions>}\n </>}\n {onOpen && <ButtonPrimitive type=\"button\" disabled={disabled} aria-label={strings.preview(name)} onClick={onOpen} className={`attachment--trigger ${interactionRecipes.nativeButtonReset} absolute inset-0 z-0 cursor-pointer rounded-inner outline-none ${focusRecipes.inset} disabled:cursor-not-allowed`} />}\n </Item>;\n});\nAttachment.displayName = 'Attachment';\n"],"mappings":"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"}
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { s as e, v as t } from "./ui-provider-
|
|
2
|
+
import { s as e, v as t } from "./ui-provider-CQCuCBcy.js";
|
|
3
3
|
import { useStrings as n } from "./lib/strings.js";
|
|
4
|
-
import { t as r } from "./utils-
|
|
5
|
-
import { a as i, n as a } from "./buttons-
|
|
6
|
-
import { c as o, o as s, s as c } from "./typography-
|
|
7
|
-
import {
|
|
4
|
+
import { t as r } from "./utils-CF3c95Io.js";
|
|
5
|
+
import { a as i, n as a } from "./buttons-BbfzgczK.js";
|
|
6
|
+
import { c as o, o as s, s as c } from "./typography-CSyJrh28.js";
|
|
7
|
+
import { i as l } from "./text.styles-B64My8RZ.js";
|
|
8
8
|
import { t as u } from "./focus-recipes-B653VaLq.js";
|
|
9
|
-
import { r as d, t as f } from "./structure-
|
|
10
|
-
import { a as p, l as m, s as h } from "./smart-card-
|
|
9
|
+
import { r as d, t as f } from "./structure-C0V0_Fyf.js";
|
|
10
|
+
import { a as p, l as m, s as h } from "./smart-card-CqkzQsK-.js";
|
|
11
11
|
import { t as g } from "./interaction-recipes-XR9ZpVYL.js";
|
|
12
|
-
import { c as _, i as v, o as y, r as b, t as x, u as S } from "./item-
|
|
13
|
-
import { d as C } from "./hooks-
|
|
12
|
+
import { c as _, i as v, o as y, r as b, t as x, u as S } from "./item-BvZ2DR_x.js";
|
|
13
|
+
import { d as C } from "./hooks-BQ-L7Uu2.js";
|
|
14
14
|
import { t as w } from "./container.recipes-D9t8MHR3.js";
|
|
15
15
|
import * as T from "react";
|
|
16
16
|
import { Fragment as ee, isValidElement as E, useMemo as D } from "react";
|
|
@@ -726,4 +726,4 @@ function ue({ options: e = [], value: t, defaultValue: i, onValueChange: a, layo
|
|
|
726
726
|
//#endregion
|
|
727
727
|
export { ne as _, J as a, re as c, R as d, F as f, P as g, N as h, X as i, z as l, M as m, Q as n, q as o, L as p, Y as r, K as s, ue as t, I as u };
|
|
728
728
|
|
|
729
|
-
//# sourceMappingURL=auth-
|
|
729
|
+
//# sourceMappingURL=auth-D2FVZ1MH.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth-BGua8ouh.js","names":["_Fragment","_Fragment","React","_Fragment","useDensityConfig","resolveComponentScale","cn","buttonVariants","Button","Text","DisplayLabel","Heading","resolveTextClassNames","focusRecipes","Grid","Stack","CardContent","CardShell","CardFooter","interactionRecipes","ItemMedia","ItemDescription","ItemGroup","ItemContent","Item","ItemTitle","useLayoutLinkRenderer","containerRecipe","React$1","Fragment$1","AuthCard","props","hasHeader","eyebrow","title","description","headerEnd","surface","className","media","mediaClassName","headerClassName","contentClassName","banner","children","footer","footerClassName","isAuthBrandConfig","brand","isValidElement","useAuthLinks","resolvedRenderLink","useMemo","links","link","useAuthShell","visibleFooterLinks","footerLinks","visiblePolicyLinks","policyLinks","visibleLanguageLinks","languageLinks","visibleSocialProviders","socialProviders","provider","hasBrand","hasAfterCard","postCard","languageSwitcher","hasSplitPanel","splitPanel","variant","defaultAuthShellStrings","defaultAuthFooterLinksStrings","defaultAuthSocialProvidersStrings","defaultAuthMethodSwitchStrings","AuthFooterLinks","stringsProp","strings","useStrings","visibleLinks","leadingIcon","linkNode","Fragment","index","separator","PROVIDER_BUTTON_CLASS","GoogleMark","MicrosoftMark","GithubMark","AppleMark","ProviderIcon","KeyRound","AuthSocialProviderButton","size","defaultScale","content","buttonClassName","event","AuthSocialProviders","visibleProviders","providers","layout","SURFACE_CLASS","AuthSplitPanel","hasIntro","visibleFeatures","features","feature","SIZE_CLASS","isSplitPanelProps","panel","renderBrandContent","hasText","renderBrand","renderLink","renderSplitPanel","AuthShell","variantProp","isSplit","panelFirst","splitSide","showStackedPanel","splitMobile","brandNode","main","align","mainClassName","stackClassName","cardMedia","cardMediaClassName","cardFooter","cardClassName","cardContentClassName","hasSocialProviders","socialProvidersLayout","socialDivider","Globe2","splitGridClassName","splitPanelClassName","AuthForm","formProps","renderProps","AuthFormRow","firstEnabledOption","options","option","useAuthMethodSwitch","visibleOptions","fallbackValue","defaultValue","internalValue","setInternalValue","isControlled","value","selectedValue","selectedOption","setValue","nextOption","nextValue","onValueChange","AuthMethodSwitch","ariaLabel","rootProps","segmented","optionButtons","selected","optionContent","divider"],"sources":["../src/components/layout/auth/auth-card.tsx","../src/components/layout/auth/auth-hooks.tsx","../src/components/layout/auth/auth.strings.ts","../src/components/layout/auth/auth-footer-links.tsx","../src/components/layout/auth/auth-social-providers.tsx","../src/components/layout/auth/auth-split-panel.tsx","../src/components/layout/auth/auth-shell.tsx","../src/components/layout/auth/auth-form.tsx","../src/components/layout/auth/auth-method-switch.tsx"],"sourcesContent":["import { CardContent, CardFooter, CardShell } from '../../base/cards';\nimport { Stack } from '../../base/structure';\nimport { DisplayLabel, Heading, Text } from '../../typography';\nimport { cn } from '../../../lib/utils';\n\nimport type { AuthCardProps } from './auth.types';\n\nexport function AuthCard({\n\tsurface = 'card',\n\teyebrow,\n\ttitle,\n\tdescription,\n\theaderEnd,\n\tbanner,\n\tmedia,\n\tfooter,\n\tchildren,\n\tclassName,\n\theaderClassName,\n\tmediaClassName,\n\tcontentClassName,\n\tfooterClassName,\n\t...props\n}: AuthCardProps) {\n\tconst hasHeader = Boolean(eyebrow || title || description || headerEnd);\n\n\treturn (\n\t\t<CardShell\n\t\t\tdata-slot=\"auth-card\"\n\t\t\tdata-surface={surface}\n\t\t\tclassName={cn(\n\t\t\t\t'auth-card--component',\n\t\t\t\t'w-full min-w-0 gap-0 py-0',\n\t\t\t\t// `bare` keeps the header/body/footer rhythm and drops only the\n\t\t\t\t// framing, so the same composition works on a page that is itself\n\t\t\t\t// the surface. Padding goes too — without a frame it reads as drift.\n\t\t\t\tsurface === 'card'\n\t\t\t\t\t? 'overflow-hidden rounded-radius border border-border bg-card text-card-foreground shadow-sm'\n\t\t\t\t\t: 'border-0 bg-transparent text-inherit shadow-none',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{!!media && (\n\t\t\t\t<div className={cn('auth-card--media', 'min-h-12 border-b border-border/60 bg-muted/50', mediaClassName)}>\n\t\t\t\t\t{media}\n\t\t\t\t</div>\n\t\t\t)}\n\n\t\t\t{!!hasHeader && (\n\t\t\t\t<header className={cn('auth-card--header min-w-0', surface === 'card' ? 'p-surface pb-0' : 'p-0', headerClassName)}>\n\t\t\t\t\t<Stack direction=\"horizontal\" gap=\"xl\" align=\"start\" justify=\"between\" className=\"auth-card--header-layout min-w-0\">\n\t\t\t\t\t\t<Stack gap=\"normal\" className=\"min-w-0\">\n\t\t\t\t\t\t\t{!!eyebrow && (\n\t\t\t\t\t\t\t\t<DisplayLabel tag=\"div\" className=\"auth-card--eyebrow text-inherit\">\n\t\t\t\t\t\t\t\t\t{eyebrow}\n\t\t\t\t\t\t\t\t</DisplayLabel>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t{!!title && (\n\t\t\t\t\t\t\t\t<Heading\n\t\t\t\t\t\t\t\t\ttag=\"h1\"\n\t\t\t\t\t\t\t\t\tcontainerClassName=\"space-y-0\"\n\t\t\t\t\t\t\t\t\tsize=\"base\"\n\t\t\t\t\t\t\t\t\tclassName=\"auth-card--title text-inherit\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{title}\n\t\t\t\t\t\t\t\t</Heading>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t{!!description && (\n\t\t\t\t\t\t\t\t<Text tag=\"div\" type=\"secondary\" lineHeight=\"relaxed\" className=\"auth-card--description max-w-prose\">\n\t\t\t\t\t\t\t\t\t{description}\n\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t{!!headerEnd && <div className=\"auth-card--header-end shrink-0\">{headerEnd}</div>}\n\t\t\t\t\t</Stack>\n\t\t\t\t</header>\n\t\t\t)}\n\n\t\t\t<CardContent\n\t\t\t\tpadding={surface === 'card' ? 'md' : 'none'}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'auth-card--content',\n\t\t\t\t\t'min-w-0',\n\t\t\t\t\tcontentClassName,\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t<div className={cn('auth-card--body min-w-0', surface === 'bare' && 'py-space-xl')}>\n\t\t\t\t{!!banner && <div className=\"auth-card--banner mb-space-xl min-w-0\">{banner}</div>}\n\t\t\t\t{children}\n\t\t\t\t</div>\n\t\t\t</CardContent>\n\n\t\t\t{!!footer && (\n\t\t\t\t<CardFooter\n\t\t\t\t\tpadding=\"md\"\n\t\t\t\t\tclassName={cn('auth-card--footer', 'min-w-0 flex-wrap border-t border-border/60', footerClassName)}\n\t\t\t\t>\n\t\t\t\t\t{footer}\n\t\t\t\t</CardFooter>\n\t\t\t)}\n\t\t</CardShell>\n\t);\n}\n","import { isValidElement, useMemo } from 'react';\n\nimport { useLayoutLinkRenderer } from '../hooks';\nimport type {\n\tAuthBrand,\n\tAuthBrandConfig,\n\tUseAuthLinksOptions,\n\tUseAuthLinksReturn,\n\tUseAuthShellOptions,\n\tUseAuthShellReturn,\n} from './auth.types';\n\nexport function isAuthBrandConfig(brand: AuthBrand | undefined): brand is AuthBrandConfig {\n\treturn Boolean(\n\t\tbrand &&\n\t\t\ttypeof brand === 'object' &&\n\t\t\t!isValidElement(brand) &&\n\t\t\t('logo' in brand || 'label' in brand || 'description' in brand || 'href' in brand),\n\t);\n}\n\nexport function useAuthLinks({\n\tlinks = [],\n\trenderLink,\n}: UseAuthLinksOptions = {}): UseAuthLinksReturn {\n\tconst resolvedRenderLink = useLayoutLinkRenderer({ renderLink });\n\tconst visibleLinks = useMemo(\n\t\t() => links.filter((link) => link.visible !== false),\n\t\t[links],\n\t);\n\n\treturn {\n\t\tlinks: visibleLinks,\n\t\trenderLink: resolvedRenderLink,\n\t};\n}\n\nexport function useAuthShell({\n\tvariant = 'card',\n\tbrand,\n\tfooter,\n\tfooterLinks = [],\n\tpolicyLinks = [],\n\tlanguageLinks = [],\n\tlanguageSwitcher,\n\tpostCard,\n\tsocialProviders = [],\n\tsplitPanel,\n\trenderLink,\n}: UseAuthShellOptions = {}): UseAuthShellReturn {\n\tconst resolvedRenderLink = useLayoutLinkRenderer({ renderLink });\n\tconst visibleFooterLinks = useMemo(\n\t\t() => footerLinks.filter((link) => link.visible !== false),\n\t\t[footerLinks],\n\t);\n\tconst visiblePolicyLinks = useMemo(\n\t\t() => policyLinks.filter((link) => link.visible !== false),\n\t\t[policyLinks],\n\t);\n\tconst visibleLanguageLinks = useMemo(\n\t\t() => languageLinks.filter((link) => link.visible !== false),\n\t\t[languageLinks],\n\t);\n\tconst visibleSocialProviders = useMemo(\n\t\t() => socialProviders.filter((provider) => provider.visible !== false),\n\t\t[socialProviders],\n\t);\n\tconst hasBrand = Boolean(\n\t\tbrand &&\n\t\t\t(isAuthBrandConfig(brand)\n\t\t\t\t? brand.logo || brand.label || brand.description\n\t\t\t\t: brand),\n\t);\n\tconst hasAfterCard = Boolean(\n\t\tpostCard ||\n\t\t\tfooter ||\n\t\t\tlanguageSwitcher ||\n\t\t\tvisibleFooterLinks.length > 0 ||\n\t\t\tvisiblePolicyLinks.length > 0 ||\n\t\t\tvisibleLanguageLinks.length > 0,\n\t);\n\tconst hasSplitPanel = Boolean(splitPanel);\n\n\treturn {\n\t\t// Only `split` depends on a panel being supplied; falling back to `card`\n\t\t// for every other variant would silently flatten them. `bare` in\n\t\t// particular has nothing to do with the split panel, so clamping on\n\t\t// `hasSplitPanel` alone discarded it.\n\t\tvariant: variant === 'split' && !hasSplitPanel ? 'card' : variant,\n\t\thasBrand,\n\t\thasAfterCard,\n\t\thasSplitPanel,\n\t\thasSocialProviders: visibleSocialProviders.length > 0,\n\t\trenderLink: resolvedRenderLink,\n\t\tfooterLinks: visibleFooterLinks,\n\t\tpolicyLinks: visiblePolicyLinks,\n\t\tlanguageLinks: visibleLanguageLinks,\n\t\tsocialProviders: visibleSocialProviders,\n\t};\n}\n","export interface AuthShellStrings {\n\tsocialDivider: string;\n\tsocialProvidersLabel: string;\n\tfooterLinksLabel: string;\n\tpolicyLinksLabel: string;\n\tlanguageLinksLabel: string;\n}\n\nexport const defaultAuthShellStrings: AuthShellStrings = {\n\tsocialDivider: 'or continue with email',\n\tsocialProvidersLabel: 'Social sign-in options',\n\tfooterLinksLabel: 'Authentication links',\n\tpolicyLinksLabel: 'Policies',\n\tlanguageLinksLabel: 'Language options',\n};\n\nexport interface AuthFooterLinksStrings {\n\tlabel: string;\n}\n\nexport const defaultAuthFooterLinksStrings: AuthFooterLinksStrings = {\n\tlabel: 'Authentication links',\n};\n\nexport interface AuthSocialProvidersStrings {\n\tlabel: string;\n}\n\nexport const defaultAuthSocialProvidersStrings: AuthSocialProvidersStrings = {\n\tlabel: 'Social sign-in options',\n};\n\nexport interface AuthMethodSwitchStrings {\n\tlabel: string;\n\tdivider: string;\n}\n\nexport const defaultAuthMethodSwitchStrings: AuthMethodSwitchStrings = {\n\tlabel: 'Authentication method',\n\tdivider: 'or',\n};\n","import { Fragment } from 'react';\n\nimport { Text } from '../../typography';\nimport { useStrings } from '../../../lib/strings';\nimport { cn } from '../../../lib/utils';\n\nimport { useAuthLinks } from './auth-hooks';\nimport { defaultAuthFooterLinksStrings } from './auth.strings';\nimport type { AuthFooterLinksProps } from './auth.types';\n\nexport function AuthFooterLinks({\n\tlinks,\n\tleadingIcon,\n\tseparator = '·',\n\trenderLink,\n\tclassName,\n\tstrings: stringsProp,\n\t...props\n}: AuthFooterLinksProps) {\n\tconst strings = useStrings(defaultAuthFooterLinksStrings, stringsProp);\n\tconst { links: visibleLinks, renderLink: resolvedRenderLink } = useAuthLinks({\n\t\tlinks,\n\t\trenderLink,\n\t});\n\n\tif (visibleLinks.length === 0) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<nav\n\t\t\taria-label={props['aria-label'] ?? strings.label}\n\t\t\tclassName={cn(\n\t\t\t\t'auth-footer-links--component',\n\t\t\t\t'flex flex-wrap items-center justify-center gap-x-space-md gap-y-space-xs text-center',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{!!leadingIcon && (\n\t\t\t\t<span className=\"auth-footer-links--icon flex shrink-0 items-center text-muted-foreground\" aria-hidden=\"true\">\n\t\t\t\t\t{leadingIcon}\n\t\t\t\t</span>\n\t\t\t)}\n\t\t\t{visibleLinks.map((link, index) => {\n\t\t\t\tconst linkNode = resolvedRenderLink({\n\t\t\t\t\thref: link.href,\n\t\t\t\t\ttarget: link.target,\n\t\t\t\t\trel: link.rel,\n\t\t\t\t\texternal: link.external,\n\t\t\t\t\tdisabled: link.disabled,\n\t\t\t\t\tonClick: link.onClick,\n\t\t\t\t\tclassName: cn(\n\t\t\t\t\t\t'auth-footer-links--item',\n\t\t\t\t\t\t'text-muted-foreground transition-colors hover:text-foreground',\n\t\t\t\t\t\tlink.disabled && 'pointer-events-none opacity-50',\n\t\t\t\t\t),\n\t\t\t\t\tchildren: (\n\t\t\t\t\t\t<Text tag=\"span\" size=\"xs\" className=\"text-inherit\">\n\t\t\t\t\t\t\t{link.label}\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t),\n\t\t\t\t});\n\n\t\t\t\treturn (\n\t\t\t\t\t<Fragment key={link.id ?? index}>\n\t\t\t\t\t\t{index > 0 && (\n\t\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\t\ttag=\"span\"\n\t\t\t\t\t\t\t\tsize=\"xs\"\n\t\t\t\t\t\t\t\ttype=\"secondary\"\n\t\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\t\tclassName=\"auth-footer-links--separator\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{separator}\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{linkNode}\n\t\t\t\t\t</Fragment>\n\t\t\t\t);\n\t\t\t})}\n\t\t</nav>\n\t);\n}\n","/* oxlint-disable shadcn/no-raw-colors -- Official provider logos are external brand artwork, not themeable UI states. */\nimport { KeyRound } from 'lucide-react';\n\nimport { Button } from '../../base/buttons';\nimport { buttonVariants } from '../../base/buttons/button.variants';\nimport { useDensityConfig } from '../../../lib/ui-provider';\nimport { resolveComponentScale } from '../../../lib/ui-provider/scale';\nimport { Grid } from '../../base/structure';\nimport { Text } from '../../typography';\nimport { useStrings } from '../../../lib/strings';\nimport { cn } from '../../../lib/utils';\n\nimport { useLayoutLinkRenderer } from '../hooks';\nimport { defaultAuthSocialProvidersStrings } from './auth.strings';\nimport type {\n\tAuthSocialProvider,\n\tAuthSocialProviderButtonProps,\n\tAuthSocialProvidersProps,\n} from './auth.types';\n\nconst PROVIDER_BUTTON_CLASS = 'auth-social-provider-button--component';\n\nfunction GoogleMark() {\n\treturn (\n\t\t<svg data-artwork=\"auth-provider-logo\"\n\t\t\taria-hidden=\"true\"\n\t\t\tclassName=\"size-icon\"\n\t\t\tviewBox=\"0 0 256 262\"\n\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t>\n\t\t\t<path fill=\"#4285F4\" d=\"M255.878 133.451c0-10.734-.871-18.567-2.756-26.69H130.55v48.448h71.947c-1.45 12.04-9.283 30.172-26.69 42.356l-.244 1.622 38.755 30.023 2.685.268c24.659-22.774 38.875-56.282 38.875-96.027\" />\n\t\t\t<path fill=\"#34A853\" d=\"M130.55 261.1c35.248 0 64.839-11.605 86.453-31.622l-41.196-31.913c-11.024 7.688-25.82 13.055-45.257 13.055-34.523 0-63.824-22.773-74.269-54.25l-1.531.13-40.298 31.187-.527 1.465C35.393 231.798 79.49 261.1 130.55 261.1\" />\n\t\t\t<path fill=\"#FBBC05\" d=\"M56.281 156.37c-2.756-8.123-4.351-16.827-4.351-25.82 0-8.994 1.595-17.697 4.206-25.82l-.073-1.73L15.26 71.312l-1.335.635C5.077 89.644 0 109.517 0 130.55s5.077 40.905 13.925 58.602l42.356-32.782\" />\n\t\t\t<path fill=\"#EB4335\" d=\"M130.55 50.479c24.514 0 41.05 10.589 50.479 19.438l36.844-35.974C195.245 12.91 165.798 0 130.55 0 79.49 0 35.393 29.301 13.925 71.947l42.211 32.783c10.59-31.477 39.891-54.251 74.414-54.251\" />\n\t\t</svg>\n\t);\n}\n\nfunction MicrosoftMark() {\n\treturn (\n\t\t<svg data-artwork=\"auth-provider-logo\" aria-hidden=\"true\" className=\"size-icon\" viewBox=\"0 0 23 23\">\n\t\t\t<path fill=\"#f25022\" d=\"M1 1h10v10H1z\" />\n\t\t\t<path fill=\"#7fba00\" d=\"M12 1h10v10H12z\" />\n\t\t\t<path fill=\"#00a4ef\" d=\"M1 12h10v10H1z\" />\n\t\t\t<path fill=\"#ffb900\" d=\"M12 12h10v10H12z\" />\n\t\t</svg>\n\t);\n}\n\nfunction GithubMark() {\n\treturn (\n\t\t<svg data-artwork=\"auth-provider-logo\" aria-hidden=\"true\" className=\"size-icon\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n\t\t\t<path d=\"M12 2C6.48 2 2 6.58 2 12.24c0 4.53 2.87 8.37 6.84 9.73.5.09.68-.22.68-.49 0-.24-.01-.88-.01-1.73-2.78.62-3.37-1.37-3.37-1.37-.45-1.18-1.11-1.5-1.11-1.5-.91-.64.07-.63.07-.63 1 .07 1.53 1.06 1.53 1.06.9 1.57 2.36 1.12 2.93.86.09-.67.35-1.12.64-1.38-2.22-.26-4.56-1.14-4.56-5.07 0-1.12.39-2.04 1.03-2.76-.1-.26-.45-1.31.1-2.72 0 0 .84-.28 2.75 1.05A9.32 9.32 0 0 1 12 6.95c.85 0 1.7.12 2.5.35 1.9-1.33 2.74-1.05 2.74-1.05.55 1.41.2 2.46.1 2.72.64.72 1.03 1.64 1.03 2.76 0 3.94-2.34 4.8-4.57 5.06.36.32.68.95.68 1.91 0 1.38-.01 2.49-.01 2.83 0 .27.18.59.69.49A10.12 10.12 0 0 0 22 12.24C22 6.58 17.52 2 12 2Z\" />\n\t\t</svg>\n\t);\n}\n\nfunction AppleMark() {\n\treturn (\n\t\t<svg data-artwork=\"auth-provider-logo\" aria-hidden=\"true\" className=\"size-icon\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n\t\t\t<path d=\"M16.37 12.05c-.02-2.26 1.85-3.35 1.94-3.4-1.06-1.55-2.69-1.76-3.26-1.78-1.37-.14-2.7.82-3.39.82-.71 0-1.78-.8-2.93-.78-1.5.02-2.9.89-3.67 2.25-1.57 2.72-.4 6.72 1.1 8.92.76 1.08 1.64 2.29 2.79 2.25 1.13-.05 1.55-.72 2.91-.72 1.35 0 1.75.72 2.93.69 1.21-.02 1.98-1.09 2.71-2.18.87-1.24 1.22-2.46 1.23-2.52-.03-.01-2.34-.9-2.36-3.55ZM14.16 5.42c.61-.76 1.03-1.8.91-2.85-.88.04-1.98.61-2.62 1.35-.57.65-1.08 1.73-.95 2.74.99.08 2.02-.5 2.66-1.24Z\" />\n\t\t</svg>\n\t);\n}\n\nfunction ProviderIcon({ provider }: { provider: AuthSocialProvider }) {\n\tif (provider.icon) return <>{provider.icon}</>;\n\tswitch (provider.provider) {\n\t\tcase 'google':\n\t\t\treturn <GoogleMark />;\n\t\tcase 'github':\n\t\t\treturn <GithubMark />;\n\t\tcase 'microsoft':\n\t\t\treturn <MicrosoftMark />;\n\t\tcase 'apple':\n\t\t\treturn <AppleMark />;\n\t\tdefault:\n\t\t\treturn <KeyRound className=\"size-icon\" aria-hidden=\"true\" />;\n\t}\n}\n\nexport function AuthSocialProviderButton({\n\tprovider,\n\trenderLink,\n\tclassName,\n}: AuthSocialProviderButtonProps) {\n\tconst { defaultScale } = useDensityConfig();\n\tconst size = resolveComponentScale(undefined, defaultScale);\n\tconst resolvedRenderLink = useLayoutLinkRenderer({ renderLink });\n\tconst content = (\n\t\t<>\n\t\t\t<ProviderIcon provider={provider} />\n\t\t\t<Text tag=\"span\" className=\"text-inherit\">\n\t\t\t\t{provider.label}\n\t\t\t</Text>\n\t\t</>\n\t);\n\tconst buttonClassName = cn(\n\t\tPROVIDER_BUTTON_CLASS,\n\t\tbuttonVariants({size, tone: 'secondary', buttonStyle: 'outline', fullWidth: true}),\n\t\tprovider.disabled && 'pointer-events-none opacity-50',\n\t\tclassName,\n\t);\n\n\tif (provider.href) {\n\t\treturn resolvedRenderLink({\n\t\t\thref: provider.href,\n\t\t\ttarget: provider.target,\n\t\t\trel: provider.rel,\n\t\t\texternal: provider.external,\n\t\t\tdisabled: provider.disabled,\n\t\t\tonClick: provider.onClick,\n\t\t\tclassName: buttonClassName,\n\t\t\tchildren: content,\n\t\t});\n\t}\n\n\treturn (\n\t\t<Button\n\t\t\ttype=\"button\"\n\t\t\ttone=\"secondary\"\n\t\t\tbuttonStyle=\"outline\"\n\t\t\tfullWidth\n\t\t\tdisabled={provider.disabled}\n\t\t\tclassName={cn('auth-social-provider-button--component', className)}\n\t\t\tonClick={(event) => provider.onClick?.(event)}\n\t\t>\n\t\t\t{content}\n\t\t</Button>\n\t);\n}\n\nexport function AuthSocialProviders({\n\tproviders,\n\tlayout = 'stack',\n\trenderLink,\n\tclassName,\n\tstrings: stringsProp,\n\t...props\n}: AuthSocialProvidersProps) {\n\tconst strings = useStrings(defaultAuthSocialProvidersStrings, stringsProp);\n\tconst visibleProviders = providers?.filter((provider) => provider.visible !== false) ?? [];\n\n\tif (visibleProviders.length === 0) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<Grid\n\t\t\tcolumns={layout === 'grid' ? { base: 1, sm: 2 } : 1}\n\t\t\tgap=\"md\"\n\t\t\trole=\"group\"\n\t\t\taria-label={props['aria-label'] ?? strings.label}\n\t\t\tdata-layout={layout}\n\t\t\tclassName={cn(\n\t\t\t\t'auth-social-providers--component',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{visibleProviders.map((provider) => (\n\t\t\t\t<AuthSocialProviderButton\n\t\t\t\t\tkey={provider.id ?? String(provider.label)}\n\t\t\t\t\tprovider={provider}\n\t\t\t\t\trenderLink={renderLink}\n\t\t\t\t/>\n\t\t\t))}\n\t\t</Grid>\n\t);\n}\n","import {\n\tItem,\n\tItemContent,\n\tItemDescription,\n\tItemGroup,\n\tItemMedia,\n\tItemTitle,\n} from '../../base/item';\nimport { Stack } from '../../base/structure';\nimport { DisplayLabel, Heading, Text } from '../../typography';\nimport { cn } from '../../../lib/utils';\n\nimport type { AuthSplitPanelProps } from './auth.types';\n\nconst SURFACE_CLASS: Record<NonNullable<AuthSplitPanelProps['surface']>, string> = {\n\tcard: 'border-border bg-card text-card-foreground',\n\tmuted: 'border-border bg-muted/30',\n};\n\nexport function AuthSplitPanel({\n\teyebrow,\n\ttitle,\n\tdescription,\n\tmedia,\n\tfeatures,\n\tfooter,\n\tchildren,\n\tsurface = 'muted',\n\tclassName,\n\tcontentClassName,\n\t...props\n}: AuthSplitPanelProps) {\n\tconst hasIntro = Boolean(eyebrow || title || description);\n\tconst visibleFeatures = features?.filter((feature) => feature.title) ?? [];\n\n\treturn (\n\t\t<Stack\n\t\t\trender={<aside />}\n\t\t\tgap=\"none\"\n\t\t\tjustify=\"between\"\n\t\t\tdata-slot=\"auth-split-panel\"\n\t\t\tdata-surface={surface}\n\t\t\tclassName={cn(\n\t\t\t\t'auth-split-panel--component',\n\t\t\t\t'box-border min-h-full w-full overflow-hidden border',\n\t\t\t\tSURFACE_CLASS[surface],\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t>\n\t\t\t<Stack\n\t\t\t\tgap=\"2xl\"\n\t\t\t\tjustify=\"center\"\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'auth-split-panel--content',\n\t\t\t\t\t'min-h-full p-surface md:p-surface-lg',\n\t\t\t\t\tcontentClassName,\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t{!!media && (\n\t\t\t\t\t<div className=\"auth-split-panel--media overflow-hidden rounded-radius border border-border/60 bg-card text-card-foreground\">\n\t\t\t\t\t\t{media}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\n\t\t\t\t{!!hasIntro && (\n\t\t\t\t\t<Stack gap=\"md\" className=\"auth-split-panel--intro max-w-xl\">\n\t\t\t\t\t\t{!!eyebrow && (\n\t\t\t\t\t\t\t<DisplayLabel tag=\"div\" className=\"auth-split-panel--eyebrow text-inherit\">\n\t\t\t\t\t\t\t\t{eyebrow}\n\t\t\t\t\t\t\t</DisplayLabel>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{!!title && (\n\t\t\t\t\t\t\t<Heading\n\t\t\t\t\t\t\t\ttag=\"h2\"\n\t\t\t\t\t\t\t\tcontainerClassName=\"space-y-0\"\n\t\t\t\t\t\t\t\tsize=\"base\"\n\t\t\t\t\t\t\t\tclassName=\"auth-split-panel--title text-inherit\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{title}\n\t\t\t\t\t\t\t</Heading>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{!!description && (\n\t\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\t\ttag=\"div\"\n\t\t\t\t\t\t\t\ttype=\"secondary\"\n\t\t\t\t\t\t\t\tlineHeight=\"relaxed\"\n\t\t\t\t\t\t\t\tclassName=\"auth-split-panel--description max-w-prose\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{description}\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</Stack>\n\t\t\t\t)}\n\n\t\t\t\t{visibleFeatures.length > 0 && (\n\t\t\t\t\t<ItemGroup className=\"auth-split-panel--features\">\n\t\t\t\t\t\t{visibleFeatures.map((feature, index) => (\n\t\t\t\t\t\t\t<Item\n\t\t\t\t\t\t\t\tkey={feature.id ?? index}\n\t\t\t\t\t\t\t\tvariant=\"muted\"\n\t\t\t\t\t\t\t\tclassName=\"auth-split-panel--feature bg-card text-card-foreground\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{!!feature.icon && (\n\t\t\t\t\t\t\t\t\t<ItemMedia variant=\"icon\" className=\"text-muted-foreground\">\n\t\t\t\t\t\t\t\t\t\t{feature.icon}\n\t\t\t\t\t\t\t\t\t</ItemMedia>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t<ItemContent className=\"min-w-0\">\n\t\t\t\t\t\t\t\t\t<ItemTitle>{feature.title}</ItemTitle>\n\t\t\t\t\t\t\t\t\t{!!feature.description && (\n\t\t\t\t\t\t\t\t\t\t<ItemDescription clamp=\"none\">{feature.description}</ItemDescription>\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t</ItemContent>\n\t\t\t\t\t\t\t</Item>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</ItemGroup>\n\t\t\t\t)}\n\n\t\t\t\t{children}\n\n\t\t\t\t{!!footer && (\n\t\t\t\t\t<div className=\"auth-split-panel--footer\">\n\t\t\t\t\t\t{footer}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t</Stack>\n\t\t</Stack>\n\t);\n}\n","import { Globe2 } from 'lucide-react';\nimport { isValidElement, type ReactNode } from 'react';\n\nimport { Text } from '../../typography';\nimport { Stack } from '../../base/structure';\nimport { containerRecipe } from '../containers/container.recipes';\nimport { useStrings } from '../../../lib/strings';\nimport { cn } from '../../../lib/utils';\n\nimport { AuthCard } from './auth-card';\nimport { AuthFooterLinks } from './auth-footer-links';\nimport { isAuthBrandConfig, useAuthShell } from './auth-hooks';\nimport { defaultAuthShellStrings } from './auth.strings';\nimport { AuthSocialProviders } from './auth-social-providers';\nimport { AuthSplitPanel } from './auth-split-panel';\nimport type {\n\tAuthBrand,\n\tAuthBrandConfig,\n\tAuthShellProps,\n\tAuthSplitPanelProps,\n} from './auth.types';\n\nconst SIZE_CLASS: Record<NonNullable<AuthShellProps['size']>, string> = {\n\tsm: 'max-w-sm',\n\tmd: 'max-w-md',\n\tlg: 'max-w-lg',\n};\n\nfunction isSplitPanelProps(panel: AuthShellProps['splitPanel']): panel is AuthSplitPanelProps {\n\treturn Boolean(panel && typeof panel === 'object' && !isValidElement(panel));\n}\n\nfunction renderBrandContent(brand: AuthBrandConfig): ReactNode {\n\tconst hasText = Boolean(brand.label || brand.description);\n\n\treturn (\n\t\t<>\n\t\t\t{!!brand.logo && (\n\t\t\t\t<div className=\"auth-shell--brand-logo shrink-0\">\n\t\t\t\t\t{brand.logo}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t\t{!!hasText && (\n\t\t\t\t<div className=\"auth-shell--brand-text min-w-0\">\n\t\t\t\t\t{!!brand.label && (\n\t\t\t\t\t\t<Text tag=\"div\" weight=\"semibold\" className=\"auth-shell--brand-label\">\n\t\t\t\t\t\t\t{brand.label}\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t)}\n\t\t\t\t\t{!!brand.description && (\n\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\ttag=\"div\"\n\t\t\t\t\t\t\tsize=\"xs\"\n\t\t\t\t\t\t\ttype=\"secondary\"\n\t\t\t\t\t\t\tclassName=\"auth-shell--brand-description\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{brand.description}\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</>\n\t);\n}\n\nfunction renderBrand({\n\tbrand,\n\trenderLink,\n}: {\n\t/** Logo, name, and href for the product mark. */\n\tbrand?: AuthBrand;\n\trenderLink: NonNullable<AuthShellProps['renderLink']>;\n}) {\n\tif (!brand) return null;\n\n\tif (!isAuthBrandConfig(brand)) {\n\t\treturn (\n\t\t\t<div className=\"auth-shell--brand flex items-center justify-center\">\n\t\t\t\t{brand}\n\t\t\t</div>\n\t\t);\n\t}\n\n\tconst content = renderBrandContent(brand);\n\tconst className = cn(\n\t\t'auth-shell--brand',\n\t\t'inline-flex items-center justify-center gap-space-md self-center rounded-radius text-foreground',\n\t\tbrand.href && 'transition-opacity hover:opacity-80',\n\t);\n\n\tif (brand.href) {\n\t\treturn renderLink({\n\t\t\thref: brand.href,\n\t\t\t'aria-label': brand.ariaLabel,\n\t\t\tclassName,\n\t\t\tchildren: content,\n\t\t});\n\t}\n\n\treturn <div className={className}>{content}</div>;\n}\n\nfunction renderSplitPanel(panel: AuthShellProps['splitPanel']) {\n\tif (!panel) return null;\n\tif (isValidElement(panel)) return panel;\n\tif (isSplitPanelProps(panel)) return <AuthSplitPanel {...panel} />;\n\treturn null;\n}\n\nexport function AuthShell({\n\tchildren,\n\tvariant: variantProp = 'card',\n\tsize = 'md',\n\talign = 'center',\n\tbrand,\n\teyebrow,\n\ttitle,\n\tdescription,\n\theaderEnd,\n\tbanner,\n\tcardMedia,\n\tcardMediaClassName,\n\tcardFooter,\n\tpostCard,\n\tfooter,\n\tfooterLinks,\n\tpolicyLinks,\n\tlanguageLinks,\n\tlanguageSwitcher,\n\tsocialProviders,\n\tsocialProvidersLayout = 'stack',\n\tsocialDivider,\n\tsplitPanel,\n\tsplitSide = 'left',\n\tsplitMobile = 'hidden',\n\trenderLink,\n\tclassName,\n\tmainClassName,\n\tstackClassName,\n\tcardClassName,\n\tcardContentClassName,\n\tsplitGridClassName,\n\tsplitPanelClassName,\n\tfooterClassName,\n\tstrings: stringsProp,\n\t...props\n}: AuthShellProps) {\n\tconst strings = useStrings(defaultAuthShellStrings, stringsProp);\n\tconst {\n\t\tvariant,\n\t\thasBrand,\n\t\thasAfterCard,\n\t\thasSplitPanel,\n\t\thasSocialProviders,\n\t\trenderLink: resolvedRenderLink,\n\t\tfooterLinks: visibleFooterLinks,\n\t\tpolicyLinks: visiblePolicyLinks,\n\t\tlanguageLinks: visibleLanguageLinks,\n\t\tsocialProviders: visibleSocialProviders,\n\t} = useAuthShell({\n\t\tvariant: variantProp,\n\t\tbrand,\n\t\tfooter,\n\t\tfooterLinks,\n\t\tpolicyLinks,\n\t\tlanguageLinks,\n\t\tlanguageSwitcher,\n\t\tpostCard,\n\t\tsocialProviders,\n\t\tsplitPanel,\n\t\trenderLink,\n\t});\n\tconst isSplit = variant === 'split' && hasSplitPanel;\n\tconst panel = renderSplitPanel(splitPanel);\n\tconst panelFirst = splitSide === 'left';\n\tconst showStackedPanel = splitMobile === 'stacked';\n\tconst brandNode = hasBrand ? renderBrand({ brand, renderLink: resolvedRenderLink }) : null;\n\n\tconst main = (\n\t\t<Stack\n\t\t\trender={<main />}\n\t\t\tgap=\"none\"\n\t\t\talign={align === 'start' ? 'start' : 'center'}\n\t\t\tjustify=\"center\"\n\t\t\tclassName={cn(\n\t\t\t\t'auth-shell--main',\n\t\t\t\tcontainerRecipe({ maxWidth: 'full', gutter: 'md' }),\n\t\t\t\t'min-h-svh py-surface-lg sm:px-surface-lg',\n\t\t\t\tmainClassName,\n\t\t\t)}\n\t\t>\n\t\t\t<Stack\n\t\t\t\tgap=\"xl\"\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'auth-shell--stack',\n\t\t\t\t\t'w-full',\n\t\t\t\t\tSIZE_CLASS[size],\n\t\t\t\t\tstackClassName,\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t{brandNode}\n\n\t\t\t\t<AuthCard\n\t\t\t\t\tsurface={variant === 'bare' ? 'bare' : 'card'}\n\t\t\t\t\teyebrow={eyebrow}\n\t\t\t\t\ttitle={title}\n\t\t\t\t\tdescription={description}\n\t\t\t\t\theaderEnd={headerEnd}\n\t\t\t\t\tbanner={banner}\n\t\t\t\t\tmedia={cardMedia}\n\t\t\t\t\tmediaClassName={cardMediaClassName}\n\t\t\t\t\tfooter={cardFooter}\n\t\t\t\t\tclassName={cardClassName}\n\t\t\t\t\tcontentClassName={cardContentClassName}\n\t\t\t\t>\n\t\t\t\t\t{!!hasSocialProviders && (\n\t\t\t\t\t\t<Stack gap=\"xl\" className=\"auth-shell--social mb-space-xl\">\n\t\t\t\t\t\t\t<AuthSocialProviders\n\t\t\t\t\t\t\t\tproviders={visibleSocialProviders}\n\t\t\t\t\t\t\t\tlayout={socialProvidersLayout}\n\t\t\t\t\t\t\t\trenderLink={resolvedRenderLink}\n\t\t\t\t\t\t\t\tstrings={{ label: strings.socialProvidersLabel }}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<div className=\"auth-shell--social-divider flex items-center gap-space-lg\">\n\t\t\t\t\t\t\t\t<span className=\"h-px min-w-0 flex-1 bg-border\" aria-hidden=\"true\" />\n\t\t\t\t\t\t\t\t<Text tag=\"span\" size=\"xs\" type=\"secondary\">\n\t\t\t\t\t\t\t\t\t{socialDivider ?? strings.socialDivider}\n\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t<span className=\"h-px min-w-0 flex-1 bg-border\" aria-hidden=\"true\" />\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</Stack>\n\t\t\t\t\t)}\n\t\t\t\t\t{children}\n\t\t\t\t</AuthCard>\n\n\t\t\t\t{!!hasAfterCard && (\n\t\t\t\t\t<Stack\n\t\t\t\t\t\tgap=\"lg\"\n\t\t\t\t\t\talign=\"center\"\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t'auth-shell--after-card',\n\t\t\t\t\t\t\t'text-center',\n\t\t\t\t\t\t\tfooterClassName,\n\t\t\t\t\t\t)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{!!postCard && <div className=\"auth-shell--post-card\">{postCard}</div>}\n\t\t\t\t\t\t{!!languageSwitcher && (\n\t\t\t\t\t\t\t<div className=\"auth-shell--language-switcher\">\n\t\t\t\t\t\t\t\t{languageSwitcher}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{visibleLanguageLinks.length > 0 && (\n\t\t\t\t\t\t\t<AuthFooterLinks\n\t\t\t\t\t\t\t\tclassName=\"auth-shell--language-links\"\n\t\t\t\t\t\t\t\tlinks={visibleLanguageLinks}\n\t\t\t\t\t\t\t\tleadingIcon={<Globe2 className=\"size-icon-md\" />}\n\t\t\t\t\t\t\t\trenderLink={resolvedRenderLink}\n\t\t\t\t\t\t\t\tstrings={{ label: strings.languageLinksLabel }}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{visibleFooterLinks.length > 0 && (\n\t\t\t\t\t\t\t<AuthFooterLinks\n\t\t\t\t\t\t\t\tclassName=\"auth-shell--footer-links\"\n\t\t\t\t\t\t\t\tlinks={visibleFooterLinks}\n\t\t\t\t\t\t\t\trenderLink={resolvedRenderLink}\n\t\t\t\t\t\t\t\tstrings={{ label: strings.footerLinksLabel }}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{visiblePolicyLinks.length > 0 && (\n\t\t\t\t\t\t\t<AuthFooterLinks\n\t\t\t\t\t\t\t\tclassName=\"auth-shell--policy-links\"\n\t\t\t\t\t\t\t\tlinks={visiblePolicyLinks}\n\t\t\t\t\t\t\t\trenderLink={resolvedRenderLink}\n\t\t\t\t\t\t\t\tstrings={{ label: strings.policyLinksLabel }}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{!!footer && <div className=\"auth-shell--footer\">{footer}</div>}\n\t\t\t\t\t</Stack>\n\t\t\t\t)}\n\t\t\t</Stack>\n\t\t</Stack>\n\t);\n\n\tif (!isSplit) {\n\t\treturn (\n\t\t\t<div\n\t\t\t\tdata-slot=\"auth-shell\"\n\t\t\t\tdata-variant={variant === 'bare' ? 'bare' : 'card'}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'auth-shell--component',\n\t\t\t\t\t'@container/auth-shell min-h-svh bg-background text-foreground',\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t{main}\n\t\t\t</div>\n\t\t);\n\t}\n\n\treturn (\n\t\t<div\n\t\t\tdata-slot=\"auth-shell\"\n\t\t\tdata-variant=\"split\"\n\t\t\tdata-split-side={splitSide}\n\t\t\tdata-split-mobile={splitMobile}\n\t\t\tclassName={cn(\n\t\t\t\t'auth-shell--component',\n\t\t\t\t'@container/auth-shell min-h-svh bg-background text-foreground',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t>\n\t\t\t<div\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'auth-shell--split-grid min-h-svh @5xl/auth-shell:grid',\n\t\t\t\t\tpanelFirst\n\t\t\t\t\t\t? '@5xl/auth-shell:grid-cols-[minmax(0,1fr)_minmax(24rem,34rem)]'\n\t\t\t\t\t\t: '@5xl/auth-shell:grid-cols-[minmax(24rem,34rem)_minmax(0,1fr)]',\n\t\t\t\t\tsplitGridClassName,\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t{!!panelFirst && (\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t'auth-shell--split-panel',\n\t\t\t\t\t\t\tshowStackedPanel ? 'block' : 'hidden @5xl/auth-shell:block',\n\t\t\t\t\t\t\tsplitPanelClassName,\n\t\t\t\t\t\t)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{panel}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t\t{main}\n\t\t\t\t{!panelFirst && (\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t'auth-shell--split-panel',\n\t\t\t\t\t\t\tshowStackedPanel ? 'block' : 'hidden @5xl/auth-shell:block',\n\t\t\t\t\t\t\tsplitPanelClassName,\n\t\t\t\t\t\t)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{panel}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n","import { cn } from '../../../lib/utils';\nimport { Grid } from '../../base/structure';\n\nimport type { AuthFormProps, AuthFormRowProps } from './auth.types';\n\n/**\n * Canonical auth form track. The explicit minmax(0, 1fr) column prevents\n * nowrap controls from widening a narrow auth card through grid min-content.\n */\nexport function AuthForm({ className, ...props }: AuthFormProps) {\n\tconst { children, ...formProps } = props;\n\n\treturn (\n\t\t<Grid\n\t\t\trender={(renderProps) => <form {...formProps} {...renderProps} />}\n\t\t\tcolumns={1}\n\t\t\tgap=\"xl\"\n\t\t\tdata-slot=\"auth-form\"\n\t\t\tclassName={cn('auth-form--component', className)}\n\t\t>\n\t\t\t{children}\n\t\t</Grid>\n\t);\n}\n\n/**\n * Auxiliary auth row for controls such as \"remember me\" and recovery links.\n * Items remain side by side when they fit and wrap without widening the card.\n */\nexport function AuthFormRow({ className, ...props }: AuthFormRowProps) {\n\treturn (\n\t\t<div\n\t\t\tdata-slot=\"auth-form-row\"\n\t\t\tclassName={cn(\n\t\t\t\t'auth-form-row--component',\n\t\t\t\t'flex min-w-0 flex-wrap items-center justify-between gap-x-space-lg gap-y-space-md',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n","import * as React from 'react';\n\nimport { Grid, Stack } from '../../base/structure';\nimport { Text } from '../../typography';\nimport { resolveTextClassNames } from '../../typography/text.styles';\nimport { useStrings } from '../../../lib/strings';\nimport { cn } from '../../../lib/utils';\n\nimport { defaultAuthMethodSwitchStrings } from './auth.strings';\nimport type {\n\tAuthMethodOption,\n\tAuthMethodSwitchProps,\n\tUseAuthMethodSwitchOptions,\n\tUseAuthMethodSwitchReturn,\n} from './auth.types';\nimport { focusRecipes } from '../../../lib/focus-recipes';\nimport { interactionRecipes } from '../../../lib/interaction-recipes';\n\nfunction firstEnabledOption(options: AuthMethodOption[]) {\n\treturn options.find((option) => !option.disabled);\n}\n\nexport function useAuthMethodSwitch({\n\toptions = [],\n\tvalue,\n\tdefaultValue,\n\tonValueChange,\n}: UseAuthMethodSwitchOptions = {}): UseAuthMethodSwitchReturn {\n\tconst visibleOptions = React.useMemo(() => options.filter((option) => option.visible !== false), [options]);\n\tconst fallbackValue = defaultValue ?? firstEnabledOption(visibleOptions)?.id;\n\tconst [internalValue, setInternalValue] = React.useState<string | undefined>(fallbackValue);\n\tconst isControlled = value !== undefined;\n\tconst selectedValue = isControlled ? value : internalValue;\n\tconst selectedOption = visibleOptions.find((option) => option.id === selectedValue);\n\n\tconst setValue = React.useCallback(\n\t\t(nextValue: string) => {\n\t\t\tconst nextOption = visibleOptions.find((option) => option.id === nextValue);\n\t\t\tif (!nextOption || nextOption.disabled) return;\n\n\t\t\tif (!isControlled) {\n\t\t\t\tsetInternalValue(nextValue);\n\t\t\t}\n\n\t\t\tonValueChange?.(nextValue, nextOption);\n\t\t},\n\t\t[isControlled, onValueChange, visibleOptions],\n\t);\n\n\tReact.useEffect(() => {\n\t\tif (isControlled || selectedOption || visibleOptions.length === 0) return;\n\t\tsetInternalValue(firstEnabledOption(visibleOptions)?.id);\n\t}, [isControlled, selectedOption, visibleOptions]);\n\n\treturn {\n\t\tvalue: selectedValue,\n\t\tselectedOption,\n\t\toptions: visibleOptions,\n\t\tsetValue,\n\t};\n}\n\nexport function AuthMethodSwitch({\n\toptions = [],\n\tvalue,\n\tdefaultValue,\n\tonValueChange,\n\tlayout = 'stack',\n\tdivider,\n\tclassName,\n\tstrings: stringsProp,\n\t...props\n}: AuthMethodSwitchProps) {\n\tconst strings = useStrings(defaultAuthMethodSwitchStrings, stringsProp);\n\tconst { ['aria-label']: ariaLabel, ...rootProps } = props;\n\tconst {\n\t\tvalue: selectedValue,\n\t\toptions: visibleOptions,\n\t\tsetValue,\n\t} = useAuthMethodSwitch({\n\t\toptions,\n\t\tvalue,\n\t\tdefaultValue,\n\t\tonValueChange,\n\t});\n\n\tif (visibleOptions.length === 0) {\n\t\treturn null;\n\t}\n\tconst segmented = layout === 'segmented';\n\tconst optionButtons = visibleOptions.map((option) => {\n\t\tconst selected = option.id === selectedValue;\n\t\tconst optionContent = (\n\t\t\t<>\n\t\t\t\t{!!option.icon && (\n\t\t\t\t\t<span className=\"auth-method-switch--option-icon shrink-0\" aria-hidden=\"true\">\n\t\t\t\t\t\t{option.icon}\n\t\t\t\t\t</span>\n\t\t\t\t)}\n\t\t\t\t<Stack render={<span />} gap=\"dense\" className=\"auth-method-switch--option-copy w-full\">\n\t\t\t\t\t<Text\n\t\t\t\t\t\ttag=\"span\"\n\t\t\t\t\t\tweight=\"semibold\"\n\t\t\t\t\t\tlineHeight=\"tight\"\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t'max-w-full whitespace-normal break-words text-inherit',\n\t\t\t\t\t\t\tsegmented ? 'text-center min-[480px]:truncate min-[480px]:text-start' : 'text-start',\n\t\t\t\t\t\t)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{option.label}\n\t\t\t\t\t</Text>\n\t\t\t\t\t{!!option.description && (\n\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\ttag=\"span\"\n\t\t\t\t\t\t\tsize=\"xs\"\n\t\t\t\t\t\t\tlineHeight={segmented ? undefined : 'snug'}\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t'whitespace-normal break-words',\n\t\t\t\t\t\t\t\tsegmented ? 'hidden min-[480px]:block min-[480px]:truncate' : 'text-start',\n\t\t\t\t\t\t\t\tselected ? 'text-inherit' : 'text-muted-foreground',\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{option.description}\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t)}\n\t\t\t\t</Stack>\n\t\t\t</>\n\t\t);\n\t\treturn (\n\t\t\t<button\n\t\t\t\tkey={option.id}\n\t\t\t\ttype=\"button\"\n\t\t\t\taria-pressed={selected}\n\t\t\t\tdisabled={option.disabled}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'auth-method-switch--option',\n\t\t\t\t\t`box-border m-0 inline-flex min-h-action-lg min-w-0 w-full cursor-pointer items-center justify-start gap-space-sm whitespace-normal rounded-inner border px-control py-row-y-lg text-start outline-none transition-[color,background-color,border-color,box-shadow] ${focusRecipes.frame} disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50`,\n\t\t\t\t\tresolveTextClassNames({type: null, size: 'sm', weight: 'medium', align: null, lineHeight: 'none'}),\n\t\t\t\t\tselected ? 'border-transparent bg-primary text-primary-foreground' : segmented ? `border-transparent bg-transparent text-foreground ${interactionRecipes.rowHover}` : `border-input bg-background text-foreground ${interactionRecipes.rowHover}`,\n\t\t\t\t\tsegmented &&\n\t\t\t\t\t\t'min-h-action justify-center border-0 px-control-sm py-row-y text-center shadow-none min-[480px]:px-control min-[480px]:text-start',\n\t\t\t\t\tselected && 'auth-method-switch--option-selected',\n\t\t\t\t)}\n\t\t\t\tonClick={() => setValue(option.id)}\n\t\t\t>\n\t\t\t\t{segmented ? (\n\t\t\t\t\t<span className=\"auth-method-switch--option-inner flex w-full flex-col justify-center gap-space-xs min-[480px]:w-auto min-[480px]:flex-row min-[480px]:justify-start min-[480px]:gap-space-md\">\n\t\t\t\t\t\t{optionContent}\n\t\t\t\t\t</span>\n\t\t\t\t) : (\n\t\t\t\t\t<Stack render={<span />} direction=\"horizontal\" gap=\"md\" wrap={false} className=\"auth-method-switch--option-inner w-full\">\n\t\t\t\t\t\t{optionContent}\n\t\t\t\t\t</Stack>\n\t\t\t\t)}\n\t\t\t</button>\n\t\t);\n\t});\n\n\treturn (\n\t\t<Stack gap=\"lg\" className={cn('auth-method-switch--component', className)} {...rootProps}>\n\t\t\t{divider !== null && divider !== false && (\n\t\t\t\t<div className=\"auth-method-switch--divider flex items-center gap-space-lg\">\n\t\t\t\t\t<span className=\"h-px min-w-0 flex-1 bg-border\" aria-hidden=\"true\" />\n\t\t\t\t\t<Text tag=\"span\" size=\"xs\" type=\"secondary\">\n\t\t\t\t\t\t{divider ?? strings.divider}\n\t\t\t\t\t</Text>\n\t\t\t\t\t<span className=\"h-px min-w-0 flex-1 bg-border\" aria-hidden=\"true\" />\n\t\t\t\t</div>\n\t\t\t)}\n\n\t\t\t{layout === 'segmented' ? (\n\t\t\t\t<div\n\t\t\t\t\trole=\"group\"\n\t\t\t\t\taria-label={ariaLabel ?? strings.label}\n\t\t\t\t\tdata-layout={layout}\n\t\t\t\t\tclassName=\"auth-method-switch--options grid min-w-0 grid-cols-[repeat(auto-fit,minmax(0,1fr))] gap-space-xs rounded-inner border border-border bg-muted p-space-xs\"\n\t\t\t\t>\n\t\t\t\t\t{optionButtons}\n\t\t\t\t</div>\n\t\t\t) : (\n\t\t\t\t<Grid\n\t\t\t\t\tcolumns={layout === 'grid' ? { base: 1, sm: 2 } : 1}\n\t\t\t\t\tgap=\"md\"\n\t\t\t\t\trole=\"group\"\n\t\t\t\t\taria-label={ariaLabel ?? strings.label}\n\t\t\t\t\tdata-layout={layout}\n\t\t\t\t\tclassName=\"auth-method-switch--options\"\n\t\t\t\t>\n\t\t\t\t\t{optionButtons}\n\t\t\t\t</Grid>\n\t\t\t)}\n\t\t</Stack>\n\t);\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"auth-D2FVZ1MH.js","names":["_Fragment","_Fragment","React","_Fragment","useDensityConfig","resolveComponentScale","cn","buttonVariants","Button","Text","DisplayLabel","Heading","resolveTextClassNames","focusRecipes","Grid","Stack","CardContent","CardShell","CardFooter","interactionRecipes","ItemMedia","ItemDescription","ItemGroup","ItemContent","Item","ItemTitle","useLayoutLinkRenderer","containerRecipe","React$1","Fragment$1","AuthCard","props","hasHeader","eyebrow","title","description","headerEnd","surface","className","media","mediaClassName","headerClassName","contentClassName","banner","children","footer","footerClassName","isAuthBrandConfig","brand","isValidElement","useAuthLinks","resolvedRenderLink","useMemo","links","link","useAuthShell","visibleFooterLinks","footerLinks","visiblePolicyLinks","policyLinks","visibleLanguageLinks","languageLinks","visibleSocialProviders","socialProviders","provider","hasBrand","hasAfterCard","postCard","languageSwitcher","hasSplitPanel","splitPanel","variant","defaultAuthShellStrings","defaultAuthFooterLinksStrings","defaultAuthSocialProvidersStrings","defaultAuthMethodSwitchStrings","AuthFooterLinks","stringsProp","strings","useStrings","visibleLinks","leadingIcon","linkNode","Fragment","index","separator","PROVIDER_BUTTON_CLASS","GoogleMark","MicrosoftMark","GithubMark","AppleMark","ProviderIcon","KeyRound","AuthSocialProviderButton","size","defaultScale","content","buttonClassName","event","AuthSocialProviders","visibleProviders","providers","layout","SURFACE_CLASS","AuthSplitPanel","hasIntro","visibleFeatures","features","feature","SIZE_CLASS","isSplitPanelProps","panel","renderBrandContent","hasText","renderBrand","renderLink","renderSplitPanel","AuthShell","variantProp","isSplit","panelFirst","splitSide","showStackedPanel","splitMobile","brandNode","main","align","mainClassName","stackClassName","cardMedia","cardMediaClassName","cardFooter","cardClassName","cardContentClassName","hasSocialProviders","socialProvidersLayout","socialDivider","Globe2","splitGridClassName","splitPanelClassName","AuthForm","formProps","renderProps","AuthFormRow","firstEnabledOption","options","option","useAuthMethodSwitch","visibleOptions","fallbackValue","defaultValue","internalValue","setInternalValue","isControlled","value","selectedValue","selectedOption","setValue","nextOption","nextValue","onValueChange","AuthMethodSwitch","ariaLabel","rootProps","segmented","optionButtons","selected","optionContent","divider"],"sources":["../src/components/layout/auth/auth-card.tsx","../src/components/layout/auth/auth-hooks.tsx","../src/components/layout/auth/auth.strings.ts","../src/components/layout/auth/auth-footer-links.tsx","../src/components/layout/auth/auth-social-providers.tsx","../src/components/layout/auth/auth-split-panel.tsx","../src/components/layout/auth/auth-shell.tsx","../src/components/layout/auth/auth-form.tsx","../src/components/layout/auth/auth-method-switch.tsx"],"sourcesContent":["import { CardContent, CardFooter, CardShell } from '../../base/cards';\nimport { Stack } from '../../base/structure';\nimport { DisplayLabel, Heading, Text } from '../../typography';\nimport { cn } from '../../../lib/utils';\n\nimport type { AuthCardProps } from './auth.types';\n\nexport function AuthCard({\n\tsurface = 'card',\n\teyebrow,\n\ttitle,\n\tdescription,\n\theaderEnd,\n\tbanner,\n\tmedia,\n\tfooter,\n\tchildren,\n\tclassName,\n\theaderClassName,\n\tmediaClassName,\n\tcontentClassName,\n\tfooterClassName,\n\t...props\n}: AuthCardProps) {\n\tconst hasHeader = Boolean(eyebrow || title || description || headerEnd);\n\n\treturn (\n\t\t<CardShell\n\t\t\tdata-slot=\"auth-card\"\n\t\t\tdata-surface={surface}\n\t\t\tclassName={cn(\n\t\t\t\t'auth-card--component',\n\t\t\t\t'w-full min-w-0 gap-0 py-0',\n\t\t\t\t// `bare` keeps the header/body/footer rhythm and drops only the\n\t\t\t\t// framing, so the same composition works on a page that is itself\n\t\t\t\t// the surface. Padding goes too — without a frame it reads as drift.\n\t\t\t\tsurface === 'card'\n\t\t\t\t\t? 'overflow-hidden rounded-radius border border-border bg-card text-card-foreground shadow-sm'\n\t\t\t\t\t: 'border-0 bg-transparent text-inherit shadow-none',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{!!media && (\n\t\t\t\t<div className={cn('auth-card--media', 'min-h-12 border-b border-border/60 bg-muted/50', mediaClassName)}>\n\t\t\t\t\t{media}\n\t\t\t\t</div>\n\t\t\t)}\n\n\t\t\t{!!hasHeader && (\n\t\t\t\t<header className={cn('auth-card--header min-w-0', surface === 'card' ? 'p-surface pb-0' : 'p-0', headerClassName)}>\n\t\t\t\t\t<Stack direction=\"horizontal\" gap=\"xl\" align=\"start\" justify=\"between\" className=\"auth-card--header-layout min-w-0\">\n\t\t\t\t\t\t<Stack gap=\"normal\" className=\"min-w-0\">\n\t\t\t\t\t\t\t{!!eyebrow && (\n\t\t\t\t\t\t\t\t<DisplayLabel tag=\"div\" className=\"auth-card--eyebrow text-inherit\">\n\t\t\t\t\t\t\t\t\t{eyebrow}\n\t\t\t\t\t\t\t\t</DisplayLabel>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t{!!title && (\n\t\t\t\t\t\t\t\t<Heading\n\t\t\t\t\t\t\t\t\ttag=\"h1\"\n\t\t\t\t\t\t\t\t\tcontainerClassName=\"space-y-0\"\n\t\t\t\t\t\t\t\t\tsize=\"base\"\n\t\t\t\t\t\t\t\t\tclassName=\"auth-card--title text-inherit\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{title}\n\t\t\t\t\t\t\t\t</Heading>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t{!!description && (\n\t\t\t\t\t\t\t\t<Text tag=\"div\" type=\"secondary\" lineHeight=\"relaxed\" className=\"auth-card--description max-w-prose\">\n\t\t\t\t\t\t\t\t\t{description}\n\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t{!!headerEnd && <div className=\"auth-card--header-end shrink-0\">{headerEnd}</div>}\n\t\t\t\t\t</Stack>\n\t\t\t\t</header>\n\t\t\t)}\n\n\t\t\t<CardContent\n\t\t\t\tpadding={surface === 'card' ? 'md' : 'none'}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'auth-card--content',\n\t\t\t\t\t'min-w-0',\n\t\t\t\t\tcontentClassName,\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t<div className={cn('auth-card--body min-w-0', surface === 'bare' && 'py-space-xl')}>\n\t\t\t\t{!!banner && <div className=\"auth-card--banner mb-space-xl min-w-0\">{banner}</div>}\n\t\t\t\t{children}\n\t\t\t\t</div>\n\t\t\t</CardContent>\n\n\t\t\t{!!footer && (\n\t\t\t\t<CardFooter\n\t\t\t\t\tpadding=\"md\"\n\t\t\t\t\tclassName={cn('auth-card--footer', 'min-w-0 flex-wrap border-t border-border/60', footerClassName)}\n\t\t\t\t>\n\t\t\t\t\t{footer}\n\t\t\t\t</CardFooter>\n\t\t\t)}\n\t\t</CardShell>\n\t);\n}\n","import { isValidElement, useMemo } from 'react';\n\nimport { useLayoutLinkRenderer } from '../hooks';\nimport type {\n\tAuthBrand,\n\tAuthBrandConfig,\n\tUseAuthLinksOptions,\n\tUseAuthLinksReturn,\n\tUseAuthShellOptions,\n\tUseAuthShellReturn,\n} from './auth.types';\n\nexport function isAuthBrandConfig(brand: AuthBrand | undefined): brand is AuthBrandConfig {\n\treturn Boolean(\n\t\tbrand &&\n\t\t\ttypeof brand === 'object' &&\n\t\t\t!isValidElement(brand) &&\n\t\t\t('logo' in brand || 'label' in brand || 'description' in brand || 'href' in brand),\n\t);\n}\n\nexport function useAuthLinks({\n\tlinks = [],\n\trenderLink,\n}: UseAuthLinksOptions = {}): UseAuthLinksReturn {\n\tconst resolvedRenderLink = useLayoutLinkRenderer({ renderLink });\n\tconst visibleLinks = useMemo(\n\t\t() => links.filter((link) => link.visible !== false),\n\t\t[links],\n\t);\n\n\treturn {\n\t\tlinks: visibleLinks,\n\t\trenderLink: resolvedRenderLink,\n\t};\n}\n\nexport function useAuthShell({\n\tvariant = 'card',\n\tbrand,\n\tfooter,\n\tfooterLinks = [],\n\tpolicyLinks = [],\n\tlanguageLinks = [],\n\tlanguageSwitcher,\n\tpostCard,\n\tsocialProviders = [],\n\tsplitPanel,\n\trenderLink,\n}: UseAuthShellOptions = {}): UseAuthShellReturn {\n\tconst resolvedRenderLink = useLayoutLinkRenderer({ renderLink });\n\tconst visibleFooterLinks = useMemo(\n\t\t() => footerLinks.filter((link) => link.visible !== false),\n\t\t[footerLinks],\n\t);\n\tconst visiblePolicyLinks = useMemo(\n\t\t() => policyLinks.filter((link) => link.visible !== false),\n\t\t[policyLinks],\n\t);\n\tconst visibleLanguageLinks = useMemo(\n\t\t() => languageLinks.filter((link) => link.visible !== false),\n\t\t[languageLinks],\n\t);\n\tconst visibleSocialProviders = useMemo(\n\t\t() => socialProviders.filter((provider) => provider.visible !== false),\n\t\t[socialProviders],\n\t);\n\tconst hasBrand = Boolean(\n\t\tbrand &&\n\t\t\t(isAuthBrandConfig(brand)\n\t\t\t\t? brand.logo || brand.label || brand.description\n\t\t\t\t: brand),\n\t);\n\tconst hasAfterCard = Boolean(\n\t\tpostCard ||\n\t\t\tfooter ||\n\t\t\tlanguageSwitcher ||\n\t\t\tvisibleFooterLinks.length > 0 ||\n\t\t\tvisiblePolicyLinks.length > 0 ||\n\t\t\tvisibleLanguageLinks.length > 0,\n\t);\n\tconst hasSplitPanel = Boolean(splitPanel);\n\n\treturn {\n\t\t// Only `split` depends on a panel being supplied; falling back to `card`\n\t\t// for every other variant would silently flatten them. `bare` in\n\t\t// particular has nothing to do with the split panel, so clamping on\n\t\t// `hasSplitPanel` alone discarded it.\n\t\tvariant: variant === 'split' && !hasSplitPanel ? 'card' : variant,\n\t\thasBrand,\n\t\thasAfterCard,\n\t\thasSplitPanel,\n\t\thasSocialProviders: visibleSocialProviders.length > 0,\n\t\trenderLink: resolvedRenderLink,\n\t\tfooterLinks: visibleFooterLinks,\n\t\tpolicyLinks: visiblePolicyLinks,\n\t\tlanguageLinks: visibleLanguageLinks,\n\t\tsocialProviders: visibleSocialProviders,\n\t};\n}\n","export interface AuthShellStrings {\n\tsocialDivider: string;\n\tsocialProvidersLabel: string;\n\tfooterLinksLabel: string;\n\tpolicyLinksLabel: string;\n\tlanguageLinksLabel: string;\n}\n\nexport const defaultAuthShellStrings: AuthShellStrings = {\n\tsocialDivider: 'or continue with email',\n\tsocialProvidersLabel: 'Social sign-in options',\n\tfooterLinksLabel: 'Authentication links',\n\tpolicyLinksLabel: 'Policies',\n\tlanguageLinksLabel: 'Language options',\n};\n\nexport interface AuthFooterLinksStrings {\n\tlabel: string;\n}\n\nexport const defaultAuthFooterLinksStrings: AuthFooterLinksStrings = {\n\tlabel: 'Authentication links',\n};\n\nexport interface AuthSocialProvidersStrings {\n\tlabel: string;\n}\n\nexport const defaultAuthSocialProvidersStrings: AuthSocialProvidersStrings = {\n\tlabel: 'Social sign-in options',\n};\n\nexport interface AuthMethodSwitchStrings {\n\tlabel: string;\n\tdivider: string;\n}\n\nexport const defaultAuthMethodSwitchStrings: AuthMethodSwitchStrings = {\n\tlabel: 'Authentication method',\n\tdivider: 'or',\n};\n","import { Fragment } from 'react';\n\nimport { Text } from '../../typography';\nimport { useStrings } from '../../../lib/strings';\nimport { cn } from '../../../lib/utils';\n\nimport { useAuthLinks } from './auth-hooks';\nimport { defaultAuthFooterLinksStrings } from './auth.strings';\nimport type { AuthFooterLinksProps } from './auth.types';\n\nexport function AuthFooterLinks({\n\tlinks,\n\tleadingIcon,\n\tseparator = '·',\n\trenderLink,\n\tclassName,\n\tstrings: stringsProp,\n\t...props\n}: AuthFooterLinksProps) {\n\tconst strings = useStrings(defaultAuthFooterLinksStrings, stringsProp);\n\tconst { links: visibleLinks, renderLink: resolvedRenderLink } = useAuthLinks({\n\t\tlinks,\n\t\trenderLink,\n\t});\n\n\tif (visibleLinks.length === 0) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<nav\n\t\t\taria-label={props['aria-label'] ?? strings.label}\n\t\t\tclassName={cn(\n\t\t\t\t'auth-footer-links--component',\n\t\t\t\t'flex flex-wrap items-center justify-center gap-x-space-md gap-y-space-xs text-center',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{!!leadingIcon && (\n\t\t\t\t<span className=\"auth-footer-links--icon flex shrink-0 items-center text-muted-foreground\" aria-hidden=\"true\">\n\t\t\t\t\t{leadingIcon}\n\t\t\t\t</span>\n\t\t\t)}\n\t\t\t{visibleLinks.map((link, index) => {\n\t\t\t\tconst linkNode = resolvedRenderLink({\n\t\t\t\t\thref: link.href,\n\t\t\t\t\ttarget: link.target,\n\t\t\t\t\trel: link.rel,\n\t\t\t\t\texternal: link.external,\n\t\t\t\t\tdisabled: link.disabled,\n\t\t\t\t\tonClick: link.onClick,\n\t\t\t\t\tclassName: cn(\n\t\t\t\t\t\t'auth-footer-links--item',\n\t\t\t\t\t\t'text-muted-foreground transition-colors hover:text-foreground',\n\t\t\t\t\t\tlink.disabled && 'pointer-events-none opacity-50',\n\t\t\t\t\t),\n\t\t\t\t\tchildren: (\n\t\t\t\t\t\t<Text tag=\"span\" size=\"xs\" className=\"text-inherit\">\n\t\t\t\t\t\t\t{link.label}\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t),\n\t\t\t\t});\n\n\t\t\t\treturn (\n\t\t\t\t\t<Fragment key={link.id ?? index}>\n\t\t\t\t\t\t{index > 0 && (\n\t\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\t\ttag=\"span\"\n\t\t\t\t\t\t\t\tsize=\"xs\"\n\t\t\t\t\t\t\t\ttype=\"secondary\"\n\t\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\t\tclassName=\"auth-footer-links--separator\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{separator}\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{linkNode}\n\t\t\t\t\t</Fragment>\n\t\t\t\t);\n\t\t\t})}\n\t\t</nav>\n\t);\n}\n","/* oxlint-disable shadcn/no-raw-colors -- Official provider logos are external brand artwork, not themeable UI states. */\nimport { KeyRound } from 'lucide-react';\n\nimport { Button } from '../../base/buttons';\nimport { buttonVariants } from '../../base/buttons/button.variants';\nimport { useDensityConfig } from '../../../lib/ui-provider';\nimport { resolveComponentScale } from '../../../lib/ui-provider/scale';\nimport { Grid } from '../../base/structure';\nimport { Text } from '../../typography';\nimport { useStrings } from '../../../lib/strings';\nimport { cn } from '../../../lib/utils';\n\nimport { useLayoutLinkRenderer } from '../hooks';\nimport { defaultAuthSocialProvidersStrings } from './auth.strings';\nimport type {\n\tAuthSocialProvider,\n\tAuthSocialProviderButtonProps,\n\tAuthSocialProvidersProps,\n} from './auth.types';\n\nconst PROVIDER_BUTTON_CLASS = 'auth-social-provider-button--component';\n\nfunction GoogleMark() {\n\treturn (\n\t\t<svg data-artwork=\"auth-provider-logo\"\n\t\t\taria-hidden=\"true\"\n\t\t\tclassName=\"size-icon\"\n\t\t\tviewBox=\"0 0 256 262\"\n\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t>\n\t\t\t<path fill=\"#4285F4\" d=\"M255.878 133.451c0-10.734-.871-18.567-2.756-26.69H130.55v48.448h71.947c-1.45 12.04-9.283 30.172-26.69 42.356l-.244 1.622 38.755 30.023 2.685.268c24.659-22.774 38.875-56.282 38.875-96.027\" />\n\t\t\t<path fill=\"#34A853\" d=\"M130.55 261.1c35.248 0 64.839-11.605 86.453-31.622l-41.196-31.913c-11.024 7.688-25.82 13.055-45.257 13.055-34.523 0-63.824-22.773-74.269-54.25l-1.531.13-40.298 31.187-.527 1.465C35.393 231.798 79.49 261.1 130.55 261.1\" />\n\t\t\t<path fill=\"#FBBC05\" d=\"M56.281 156.37c-2.756-8.123-4.351-16.827-4.351-25.82 0-8.994 1.595-17.697 4.206-25.82l-.073-1.73L15.26 71.312l-1.335.635C5.077 89.644 0 109.517 0 130.55s5.077 40.905 13.925 58.602l42.356-32.782\" />\n\t\t\t<path fill=\"#EB4335\" d=\"M130.55 50.479c24.514 0 41.05 10.589 50.479 19.438l36.844-35.974C195.245 12.91 165.798 0 130.55 0 79.49 0 35.393 29.301 13.925 71.947l42.211 32.783c10.59-31.477 39.891-54.251 74.414-54.251\" />\n\t\t</svg>\n\t);\n}\n\nfunction MicrosoftMark() {\n\treturn (\n\t\t<svg data-artwork=\"auth-provider-logo\" aria-hidden=\"true\" className=\"size-icon\" viewBox=\"0 0 23 23\">\n\t\t\t<path fill=\"#f25022\" d=\"M1 1h10v10H1z\" />\n\t\t\t<path fill=\"#7fba00\" d=\"M12 1h10v10H12z\" />\n\t\t\t<path fill=\"#00a4ef\" d=\"M1 12h10v10H1z\" />\n\t\t\t<path fill=\"#ffb900\" d=\"M12 12h10v10H12z\" />\n\t\t</svg>\n\t);\n}\n\nfunction GithubMark() {\n\treturn (\n\t\t<svg data-artwork=\"auth-provider-logo\" aria-hidden=\"true\" className=\"size-icon\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n\t\t\t<path d=\"M12 2C6.48 2 2 6.58 2 12.24c0 4.53 2.87 8.37 6.84 9.73.5.09.68-.22.68-.49 0-.24-.01-.88-.01-1.73-2.78.62-3.37-1.37-3.37-1.37-.45-1.18-1.11-1.5-1.11-1.5-.91-.64.07-.63.07-.63 1 .07 1.53 1.06 1.53 1.06.9 1.57 2.36 1.12 2.93.86.09-.67.35-1.12.64-1.38-2.22-.26-4.56-1.14-4.56-5.07 0-1.12.39-2.04 1.03-2.76-.1-.26-.45-1.31.1-2.72 0 0 .84-.28 2.75 1.05A9.32 9.32 0 0 1 12 6.95c.85 0 1.7.12 2.5.35 1.9-1.33 2.74-1.05 2.74-1.05.55 1.41.2 2.46.1 2.72.64.72 1.03 1.64 1.03 2.76 0 3.94-2.34 4.8-4.57 5.06.36.32.68.95.68 1.91 0 1.38-.01 2.49-.01 2.83 0 .27.18.59.69.49A10.12 10.12 0 0 0 22 12.24C22 6.58 17.52 2 12 2Z\" />\n\t\t</svg>\n\t);\n}\n\nfunction AppleMark() {\n\treturn (\n\t\t<svg data-artwork=\"auth-provider-logo\" aria-hidden=\"true\" className=\"size-icon\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n\t\t\t<path d=\"M16.37 12.05c-.02-2.26 1.85-3.35 1.94-3.4-1.06-1.55-2.69-1.76-3.26-1.78-1.37-.14-2.7.82-3.39.82-.71 0-1.78-.8-2.93-.78-1.5.02-2.9.89-3.67 2.25-1.57 2.72-.4 6.72 1.1 8.92.76 1.08 1.64 2.29 2.79 2.25 1.13-.05 1.55-.72 2.91-.72 1.35 0 1.75.72 2.93.69 1.21-.02 1.98-1.09 2.71-2.18.87-1.24 1.22-2.46 1.23-2.52-.03-.01-2.34-.9-2.36-3.55ZM14.16 5.42c.61-.76 1.03-1.8.91-2.85-.88.04-1.98.61-2.62 1.35-.57.65-1.08 1.73-.95 2.74.99.08 2.02-.5 2.66-1.24Z\" />\n\t\t</svg>\n\t);\n}\n\nfunction ProviderIcon({ provider }: { provider: AuthSocialProvider }) {\n\tif (provider.icon) return <>{provider.icon}</>;\n\tswitch (provider.provider) {\n\t\tcase 'google':\n\t\t\treturn <GoogleMark />;\n\t\tcase 'github':\n\t\t\treturn <GithubMark />;\n\t\tcase 'microsoft':\n\t\t\treturn <MicrosoftMark />;\n\t\tcase 'apple':\n\t\t\treturn <AppleMark />;\n\t\tdefault:\n\t\t\treturn <KeyRound className=\"size-icon\" aria-hidden=\"true\" />;\n\t}\n}\n\nexport function AuthSocialProviderButton({\n\tprovider,\n\trenderLink,\n\tclassName,\n}: AuthSocialProviderButtonProps) {\n\tconst { defaultScale } = useDensityConfig();\n\tconst size = resolveComponentScale(undefined, defaultScale);\n\tconst resolvedRenderLink = useLayoutLinkRenderer({ renderLink });\n\tconst content = (\n\t\t<>\n\t\t\t<ProviderIcon provider={provider} />\n\t\t\t<Text tag=\"span\" className=\"text-inherit\">\n\t\t\t\t{provider.label}\n\t\t\t</Text>\n\t\t</>\n\t);\n\tconst buttonClassName = cn(\n\t\tPROVIDER_BUTTON_CLASS,\n\t\tbuttonVariants({size, tone: 'secondary', buttonStyle: 'outline', fullWidth: true}),\n\t\tprovider.disabled && 'pointer-events-none opacity-50',\n\t\tclassName,\n\t);\n\n\tif (provider.href) {\n\t\treturn resolvedRenderLink({\n\t\t\thref: provider.href,\n\t\t\ttarget: provider.target,\n\t\t\trel: provider.rel,\n\t\t\texternal: provider.external,\n\t\t\tdisabled: provider.disabled,\n\t\t\tonClick: provider.onClick,\n\t\t\tclassName: buttonClassName,\n\t\t\tchildren: content,\n\t\t});\n\t}\n\n\treturn (\n\t\t<Button\n\t\t\ttype=\"button\"\n\t\t\ttone=\"secondary\"\n\t\t\tbuttonStyle=\"outline\"\n\t\t\tfullWidth\n\t\t\tdisabled={provider.disabled}\n\t\t\tclassName={cn('auth-social-provider-button--component', className)}\n\t\t\tonClick={(event) => provider.onClick?.(event)}\n\t\t>\n\t\t\t{content}\n\t\t</Button>\n\t);\n}\n\nexport function AuthSocialProviders({\n\tproviders,\n\tlayout = 'stack',\n\trenderLink,\n\tclassName,\n\tstrings: stringsProp,\n\t...props\n}: AuthSocialProvidersProps) {\n\tconst strings = useStrings(defaultAuthSocialProvidersStrings, stringsProp);\n\tconst visibleProviders = providers?.filter((provider) => provider.visible !== false) ?? [];\n\n\tif (visibleProviders.length === 0) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<Grid\n\t\t\tcolumns={layout === 'grid' ? { base: 1, sm: 2 } : 1}\n\t\t\tgap=\"md\"\n\t\t\trole=\"group\"\n\t\t\taria-label={props['aria-label'] ?? strings.label}\n\t\t\tdata-layout={layout}\n\t\t\tclassName={cn(\n\t\t\t\t'auth-social-providers--component',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{visibleProviders.map((provider) => (\n\t\t\t\t<AuthSocialProviderButton\n\t\t\t\t\tkey={provider.id ?? String(provider.label)}\n\t\t\t\t\tprovider={provider}\n\t\t\t\t\trenderLink={renderLink}\n\t\t\t\t/>\n\t\t\t))}\n\t\t</Grid>\n\t);\n}\n","import {\n\tItem,\n\tItemContent,\n\tItemDescription,\n\tItemGroup,\n\tItemMedia,\n\tItemTitle,\n} from '../../base/item';\nimport { Stack } from '../../base/structure';\nimport { DisplayLabel, Heading, Text } from '../../typography';\nimport { cn } from '../../../lib/utils';\n\nimport type { AuthSplitPanelProps } from './auth.types';\n\nconst SURFACE_CLASS: Record<NonNullable<AuthSplitPanelProps['surface']>, string> = {\n\tcard: 'border-border bg-card text-card-foreground',\n\tmuted: 'border-border bg-muted/30',\n};\n\nexport function AuthSplitPanel({\n\teyebrow,\n\ttitle,\n\tdescription,\n\tmedia,\n\tfeatures,\n\tfooter,\n\tchildren,\n\tsurface = 'muted',\n\tclassName,\n\tcontentClassName,\n\t...props\n}: AuthSplitPanelProps) {\n\tconst hasIntro = Boolean(eyebrow || title || description);\n\tconst visibleFeatures = features?.filter((feature) => feature.title) ?? [];\n\n\treturn (\n\t\t<Stack\n\t\t\trender={<aside />}\n\t\t\tgap=\"none\"\n\t\t\tjustify=\"between\"\n\t\t\tdata-slot=\"auth-split-panel\"\n\t\t\tdata-surface={surface}\n\t\t\tclassName={cn(\n\t\t\t\t'auth-split-panel--component',\n\t\t\t\t'box-border min-h-full w-full overflow-hidden border',\n\t\t\t\tSURFACE_CLASS[surface],\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t>\n\t\t\t<Stack\n\t\t\t\tgap=\"2xl\"\n\t\t\t\tjustify=\"center\"\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'auth-split-panel--content',\n\t\t\t\t\t'min-h-full p-surface md:p-surface-lg',\n\t\t\t\t\tcontentClassName,\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t{!!media && (\n\t\t\t\t\t<div className=\"auth-split-panel--media overflow-hidden rounded-radius border border-border/60 bg-card text-card-foreground\">\n\t\t\t\t\t\t{media}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\n\t\t\t\t{!!hasIntro && (\n\t\t\t\t\t<Stack gap=\"md\" className=\"auth-split-panel--intro max-w-xl\">\n\t\t\t\t\t\t{!!eyebrow && (\n\t\t\t\t\t\t\t<DisplayLabel tag=\"div\" className=\"auth-split-panel--eyebrow text-inherit\">\n\t\t\t\t\t\t\t\t{eyebrow}\n\t\t\t\t\t\t\t</DisplayLabel>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{!!title && (\n\t\t\t\t\t\t\t<Heading\n\t\t\t\t\t\t\t\ttag=\"h2\"\n\t\t\t\t\t\t\t\tcontainerClassName=\"space-y-0\"\n\t\t\t\t\t\t\t\tsize=\"base\"\n\t\t\t\t\t\t\t\tclassName=\"auth-split-panel--title text-inherit\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{title}\n\t\t\t\t\t\t\t</Heading>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{!!description && (\n\t\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\t\ttag=\"div\"\n\t\t\t\t\t\t\t\ttype=\"secondary\"\n\t\t\t\t\t\t\t\tlineHeight=\"relaxed\"\n\t\t\t\t\t\t\t\tclassName=\"auth-split-panel--description max-w-prose\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{description}\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</Stack>\n\t\t\t\t)}\n\n\t\t\t\t{visibleFeatures.length > 0 && (\n\t\t\t\t\t<ItemGroup className=\"auth-split-panel--features\">\n\t\t\t\t\t\t{visibleFeatures.map((feature, index) => (\n\t\t\t\t\t\t\t<Item\n\t\t\t\t\t\t\t\tkey={feature.id ?? index}\n\t\t\t\t\t\t\t\tvariant=\"muted\"\n\t\t\t\t\t\t\t\tclassName=\"auth-split-panel--feature bg-card text-card-foreground\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{!!feature.icon && (\n\t\t\t\t\t\t\t\t\t<ItemMedia variant=\"icon\" className=\"text-muted-foreground\">\n\t\t\t\t\t\t\t\t\t\t{feature.icon}\n\t\t\t\t\t\t\t\t\t</ItemMedia>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t<ItemContent className=\"min-w-0\">\n\t\t\t\t\t\t\t\t\t<ItemTitle>{feature.title}</ItemTitle>\n\t\t\t\t\t\t\t\t\t{!!feature.description && (\n\t\t\t\t\t\t\t\t\t\t<ItemDescription clamp=\"none\">{feature.description}</ItemDescription>\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t</ItemContent>\n\t\t\t\t\t\t\t</Item>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</ItemGroup>\n\t\t\t\t)}\n\n\t\t\t\t{children}\n\n\t\t\t\t{!!footer && (\n\t\t\t\t\t<div className=\"auth-split-panel--footer\">\n\t\t\t\t\t\t{footer}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t</Stack>\n\t\t</Stack>\n\t);\n}\n","import { Globe2 } from 'lucide-react';\nimport { isValidElement, type ReactNode } from 'react';\n\nimport { Text } from '../../typography';\nimport { Stack } from '../../base/structure';\nimport { containerRecipe } from '../containers/container.recipes';\nimport { useStrings } from '../../../lib/strings';\nimport { cn } from '../../../lib/utils';\n\nimport { AuthCard } from './auth-card';\nimport { AuthFooterLinks } from './auth-footer-links';\nimport { isAuthBrandConfig, useAuthShell } from './auth-hooks';\nimport { defaultAuthShellStrings } from './auth.strings';\nimport { AuthSocialProviders } from './auth-social-providers';\nimport { AuthSplitPanel } from './auth-split-panel';\nimport type {\n\tAuthBrand,\n\tAuthBrandConfig,\n\tAuthShellProps,\n\tAuthSplitPanelProps,\n} from './auth.types';\n\nconst SIZE_CLASS: Record<NonNullable<AuthShellProps['size']>, string> = {\n\tsm: 'max-w-sm',\n\tmd: 'max-w-md',\n\tlg: 'max-w-lg',\n};\n\nfunction isSplitPanelProps(panel: AuthShellProps['splitPanel']): panel is AuthSplitPanelProps {\n\treturn Boolean(panel && typeof panel === 'object' && !isValidElement(panel));\n}\n\nfunction renderBrandContent(brand: AuthBrandConfig): ReactNode {\n\tconst hasText = Boolean(brand.label || brand.description);\n\n\treturn (\n\t\t<>\n\t\t\t{!!brand.logo && (\n\t\t\t\t<div className=\"auth-shell--brand-logo shrink-0\">\n\t\t\t\t\t{brand.logo}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t\t{!!hasText && (\n\t\t\t\t<div className=\"auth-shell--brand-text min-w-0\">\n\t\t\t\t\t{!!brand.label && (\n\t\t\t\t\t\t<Text tag=\"div\" weight=\"semibold\" className=\"auth-shell--brand-label\">\n\t\t\t\t\t\t\t{brand.label}\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t)}\n\t\t\t\t\t{!!brand.description && (\n\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\ttag=\"div\"\n\t\t\t\t\t\t\tsize=\"xs\"\n\t\t\t\t\t\t\ttype=\"secondary\"\n\t\t\t\t\t\t\tclassName=\"auth-shell--brand-description\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{brand.description}\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</>\n\t);\n}\n\nfunction renderBrand({\n\tbrand,\n\trenderLink,\n}: {\n\t/** Logo, name, and href for the product mark. */\n\tbrand?: AuthBrand;\n\trenderLink: NonNullable<AuthShellProps['renderLink']>;\n}) {\n\tif (!brand) return null;\n\n\tif (!isAuthBrandConfig(brand)) {\n\t\treturn (\n\t\t\t<div className=\"auth-shell--brand flex items-center justify-center\">\n\t\t\t\t{brand}\n\t\t\t</div>\n\t\t);\n\t}\n\n\tconst content = renderBrandContent(brand);\n\tconst className = cn(\n\t\t'auth-shell--brand',\n\t\t'inline-flex items-center justify-center gap-space-md self-center rounded-radius text-foreground',\n\t\tbrand.href && 'transition-opacity hover:opacity-80',\n\t);\n\n\tif (brand.href) {\n\t\treturn renderLink({\n\t\t\thref: brand.href,\n\t\t\t'aria-label': brand.ariaLabel,\n\t\t\tclassName,\n\t\t\tchildren: content,\n\t\t});\n\t}\n\n\treturn <div className={className}>{content}</div>;\n}\n\nfunction renderSplitPanel(panel: AuthShellProps['splitPanel']) {\n\tif (!panel) return null;\n\tif (isValidElement(panel)) return panel;\n\tif (isSplitPanelProps(panel)) return <AuthSplitPanel {...panel} />;\n\treturn null;\n}\n\nexport function AuthShell({\n\tchildren,\n\tvariant: variantProp = 'card',\n\tsize = 'md',\n\talign = 'center',\n\tbrand,\n\teyebrow,\n\ttitle,\n\tdescription,\n\theaderEnd,\n\tbanner,\n\tcardMedia,\n\tcardMediaClassName,\n\tcardFooter,\n\tpostCard,\n\tfooter,\n\tfooterLinks,\n\tpolicyLinks,\n\tlanguageLinks,\n\tlanguageSwitcher,\n\tsocialProviders,\n\tsocialProvidersLayout = 'stack',\n\tsocialDivider,\n\tsplitPanel,\n\tsplitSide = 'left',\n\tsplitMobile = 'hidden',\n\trenderLink,\n\tclassName,\n\tmainClassName,\n\tstackClassName,\n\tcardClassName,\n\tcardContentClassName,\n\tsplitGridClassName,\n\tsplitPanelClassName,\n\tfooterClassName,\n\tstrings: stringsProp,\n\t...props\n}: AuthShellProps) {\n\tconst strings = useStrings(defaultAuthShellStrings, stringsProp);\n\tconst {\n\t\tvariant,\n\t\thasBrand,\n\t\thasAfterCard,\n\t\thasSplitPanel,\n\t\thasSocialProviders,\n\t\trenderLink: resolvedRenderLink,\n\t\tfooterLinks: visibleFooterLinks,\n\t\tpolicyLinks: visiblePolicyLinks,\n\t\tlanguageLinks: visibleLanguageLinks,\n\t\tsocialProviders: visibleSocialProviders,\n\t} = useAuthShell({\n\t\tvariant: variantProp,\n\t\tbrand,\n\t\tfooter,\n\t\tfooterLinks,\n\t\tpolicyLinks,\n\t\tlanguageLinks,\n\t\tlanguageSwitcher,\n\t\tpostCard,\n\t\tsocialProviders,\n\t\tsplitPanel,\n\t\trenderLink,\n\t});\n\tconst isSplit = variant === 'split' && hasSplitPanel;\n\tconst panel = renderSplitPanel(splitPanel);\n\tconst panelFirst = splitSide === 'left';\n\tconst showStackedPanel = splitMobile === 'stacked';\n\tconst brandNode = hasBrand ? renderBrand({ brand, renderLink: resolvedRenderLink }) : null;\n\n\tconst main = (\n\t\t<Stack\n\t\t\trender={<main />}\n\t\t\tgap=\"none\"\n\t\t\talign={align === 'start' ? 'start' : 'center'}\n\t\t\tjustify=\"center\"\n\t\t\tclassName={cn(\n\t\t\t\t'auth-shell--main',\n\t\t\t\tcontainerRecipe({ maxWidth: 'full', gutter: 'md' }),\n\t\t\t\t'min-h-svh py-surface-lg sm:px-surface-lg',\n\t\t\t\tmainClassName,\n\t\t\t)}\n\t\t>\n\t\t\t<Stack\n\t\t\t\tgap=\"xl\"\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'auth-shell--stack',\n\t\t\t\t\t'w-full',\n\t\t\t\t\tSIZE_CLASS[size],\n\t\t\t\t\tstackClassName,\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t{brandNode}\n\n\t\t\t\t<AuthCard\n\t\t\t\t\tsurface={variant === 'bare' ? 'bare' : 'card'}\n\t\t\t\t\teyebrow={eyebrow}\n\t\t\t\t\ttitle={title}\n\t\t\t\t\tdescription={description}\n\t\t\t\t\theaderEnd={headerEnd}\n\t\t\t\t\tbanner={banner}\n\t\t\t\t\tmedia={cardMedia}\n\t\t\t\t\tmediaClassName={cardMediaClassName}\n\t\t\t\t\tfooter={cardFooter}\n\t\t\t\t\tclassName={cardClassName}\n\t\t\t\t\tcontentClassName={cardContentClassName}\n\t\t\t\t>\n\t\t\t\t\t{!!hasSocialProviders && (\n\t\t\t\t\t\t<Stack gap=\"xl\" className=\"auth-shell--social mb-space-xl\">\n\t\t\t\t\t\t\t<AuthSocialProviders\n\t\t\t\t\t\t\t\tproviders={visibleSocialProviders}\n\t\t\t\t\t\t\t\tlayout={socialProvidersLayout}\n\t\t\t\t\t\t\t\trenderLink={resolvedRenderLink}\n\t\t\t\t\t\t\t\tstrings={{ label: strings.socialProvidersLabel }}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<div className=\"auth-shell--social-divider flex items-center gap-space-lg\">\n\t\t\t\t\t\t\t\t<span className=\"h-px min-w-0 flex-1 bg-border\" aria-hidden=\"true\" />\n\t\t\t\t\t\t\t\t<Text tag=\"span\" size=\"xs\" type=\"secondary\">\n\t\t\t\t\t\t\t\t\t{socialDivider ?? strings.socialDivider}\n\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t<span className=\"h-px min-w-0 flex-1 bg-border\" aria-hidden=\"true\" />\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</Stack>\n\t\t\t\t\t)}\n\t\t\t\t\t{children}\n\t\t\t\t</AuthCard>\n\n\t\t\t\t{!!hasAfterCard && (\n\t\t\t\t\t<Stack\n\t\t\t\t\t\tgap=\"lg\"\n\t\t\t\t\t\talign=\"center\"\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t'auth-shell--after-card',\n\t\t\t\t\t\t\t'text-center',\n\t\t\t\t\t\t\tfooterClassName,\n\t\t\t\t\t\t)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{!!postCard && <div className=\"auth-shell--post-card\">{postCard}</div>}\n\t\t\t\t\t\t{!!languageSwitcher && (\n\t\t\t\t\t\t\t<div className=\"auth-shell--language-switcher\">\n\t\t\t\t\t\t\t\t{languageSwitcher}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{visibleLanguageLinks.length > 0 && (\n\t\t\t\t\t\t\t<AuthFooterLinks\n\t\t\t\t\t\t\t\tclassName=\"auth-shell--language-links\"\n\t\t\t\t\t\t\t\tlinks={visibleLanguageLinks}\n\t\t\t\t\t\t\t\tleadingIcon={<Globe2 className=\"size-icon-md\" />}\n\t\t\t\t\t\t\t\trenderLink={resolvedRenderLink}\n\t\t\t\t\t\t\t\tstrings={{ label: strings.languageLinksLabel }}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{visibleFooterLinks.length > 0 && (\n\t\t\t\t\t\t\t<AuthFooterLinks\n\t\t\t\t\t\t\t\tclassName=\"auth-shell--footer-links\"\n\t\t\t\t\t\t\t\tlinks={visibleFooterLinks}\n\t\t\t\t\t\t\t\trenderLink={resolvedRenderLink}\n\t\t\t\t\t\t\t\tstrings={{ label: strings.footerLinksLabel }}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{visiblePolicyLinks.length > 0 && (\n\t\t\t\t\t\t\t<AuthFooterLinks\n\t\t\t\t\t\t\t\tclassName=\"auth-shell--policy-links\"\n\t\t\t\t\t\t\t\tlinks={visiblePolicyLinks}\n\t\t\t\t\t\t\t\trenderLink={resolvedRenderLink}\n\t\t\t\t\t\t\t\tstrings={{ label: strings.policyLinksLabel }}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{!!footer && <div className=\"auth-shell--footer\">{footer}</div>}\n\t\t\t\t\t</Stack>\n\t\t\t\t)}\n\t\t\t</Stack>\n\t\t</Stack>\n\t);\n\n\tif (!isSplit) {\n\t\treturn (\n\t\t\t<div\n\t\t\t\tdata-slot=\"auth-shell\"\n\t\t\t\tdata-variant={variant === 'bare' ? 'bare' : 'card'}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'auth-shell--component',\n\t\t\t\t\t'@container/auth-shell min-h-svh bg-background text-foreground',\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t{main}\n\t\t\t</div>\n\t\t);\n\t}\n\n\treturn (\n\t\t<div\n\t\t\tdata-slot=\"auth-shell\"\n\t\t\tdata-variant=\"split\"\n\t\t\tdata-split-side={splitSide}\n\t\t\tdata-split-mobile={splitMobile}\n\t\t\tclassName={cn(\n\t\t\t\t'auth-shell--component',\n\t\t\t\t'@container/auth-shell min-h-svh bg-background text-foreground',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t>\n\t\t\t<div\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'auth-shell--split-grid min-h-svh @5xl/auth-shell:grid',\n\t\t\t\t\tpanelFirst\n\t\t\t\t\t\t? '@5xl/auth-shell:grid-cols-[minmax(0,1fr)_minmax(24rem,34rem)]'\n\t\t\t\t\t\t: '@5xl/auth-shell:grid-cols-[minmax(24rem,34rem)_minmax(0,1fr)]',\n\t\t\t\t\tsplitGridClassName,\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t{!!panelFirst && (\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t'auth-shell--split-panel',\n\t\t\t\t\t\t\tshowStackedPanel ? 'block' : 'hidden @5xl/auth-shell:block',\n\t\t\t\t\t\t\tsplitPanelClassName,\n\t\t\t\t\t\t)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{panel}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t\t{main}\n\t\t\t\t{!panelFirst && (\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t'auth-shell--split-panel',\n\t\t\t\t\t\t\tshowStackedPanel ? 'block' : 'hidden @5xl/auth-shell:block',\n\t\t\t\t\t\t\tsplitPanelClassName,\n\t\t\t\t\t\t)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{panel}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n","import { cn } from '../../../lib/utils';\nimport { Grid } from '../../base/structure';\n\nimport type { AuthFormProps, AuthFormRowProps } from './auth.types';\n\n/**\n * Canonical auth form track. The explicit minmax(0, 1fr) column prevents\n * nowrap controls from widening a narrow auth card through grid min-content.\n */\nexport function AuthForm({ className, ...props }: AuthFormProps) {\n\tconst { children, ...formProps } = props;\n\n\treturn (\n\t\t<Grid\n\t\t\trender={(renderProps) => <form {...formProps} {...renderProps} />}\n\t\t\tcolumns={1}\n\t\t\tgap=\"xl\"\n\t\t\tdata-slot=\"auth-form\"\n\t\t\tclassName={cn('auth-form--component', className)}\n\t\t>\n\t\t\t{children}\n\t\t</Grid>\n\t);\n}\n\n/**\n * Auxiliary auth row for controls such as \"remember me\" and recovery links.\n * Items remain side by side when they fit and wrap without widening the card.\n */\nexport function AuthFormRow({ className, ...props }: AuthFormRowProps) {\n\treturn (\n\t\t<div\n\t\t\tdata-slot=\"auth-form-row\"\n\t\t\tclassName={cn(\n\t\t\t\t'auth-form-row--component',\n\t\t\t\t'flex min-w-0 flex-wrap items-center justify-between gap-x-space-lg gap-y-space-md',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n","import * as React from 'react';\n\nimport { Grid, Stack } from '../../base/structure';\nimport { Text } from '../../typography';\nimport { resolveTextClassNames } from '../../typography/text.styles';\nimport { useStrings } from '../../../lib/strings';\nimport { cn } from '../../../lib/utils';\n\nimport { defaultAuthMethodSwitchStrings } from './auth.strings';\nimport type {\n\tAuthMethodOption,\n\tAuthMethodSwitchProps,\n\tUseAuthMethodSwitchOptions,\n\tUseAuthMethodSwitchReturn,\n} from './auth.types';\nimport { focusRecipes } from '../../../lib/focus-recipes';\nimport { interactionRecipes } from '../../../lib/interaction-recipes';\n\nfunction firstEnabledOption(options: AuthMethodOption[]) {\n\treturn options.find((option) => !option.disabled);\n}\n\nexport function useAuthMethodSwitch({\n\toptions = [],\n\tvalue,\n\tdefaultValue,\n\tonValueChange,\n}: UseAuthMethodSwitchOptions = {}): UseAuthMethodSwitchReturn {\n\tconst visibleOptions = React.useMemo(() => options.filter((option) => option.visible !== false), [options]);\n\tconst fallbackValue = defaultValue ?? firstEnabledOption(visibleOptions)?.id;\n\tconst [internalValue, setInternalValue] = React.useState<string | undefined>(fallbackValue);\n\tconst isControlled = value !== undefined;\n\tconst selectedValue = isControlled ? value : internalValue;\n\tconst selectedOption = visibleOptions.find((option) => option.id === selectedValue);\n\n\tconst setValue = React.useCallback(\n\t\t(nextValue: string) => {\n\t\t\tconst nextOption = visibleOptions.find((option) => option.id === nextValue);\n\t\t\tif (!nextOption || nextOption.disabled) return;\n\n\t\t\tif (!isControlled) {\n\t\t\t\tsetInternalValue(nextValue);\n\t\t\t}\n\n\t\t\tonValueChange?.(nextValue, nextOption);\n\t\t},\n\t\t[isControlled, onValueChange, visibleOptions],\n\t);\n\n\tReact.useEffect(() => {\n\t\tif (isControlled || selectedOption || visibleOptions.length === 0) return;\n\t\tsetInternalValue(firstEnabledOption(visibleOptions)?.id);\n\t}, [isControlled, selectedOption, visibleOptions]);\n\n\treturn {\n\t\tvalue: selectedValue,\n\t\tselectedOption,\n\t\toptions: visibleOptions,\n\t\tsetValue,\n\t};\n}\n\nexport function AuthMethodSwitch({\n\toptions = [],\n\tvalue,\n\tdefaultValue,\n\tonValueChange,\n\tlayout = 'stack',\n\tdivider,\n\tclassName,\n\tstrings: stringsProp,\n\t...props\n}: AuthMethodSwitchProps) {\n\tconst strings = useStrings(defaultAuthMethodSwitchStrings, stringsProp);\n\tconst { ['aria-label']: ariaLabel, ...rootProps } = props;\n\tconst {\n\t\tvalue: selectedValue,\n\t\toptions: visibleOptions,\n\t\tsetValue,\n\t} = useAuthMethodSwitch({\n\t\toptions,\n\t\tvalue,\n\t\tdefaultValue,\n\t\tonValueChange,\n\t});\n\n\tif (visibleOptions.length === 0) {\n\t\treturn null;\n\t}\n\tconst segmented = layout === 'segmented';\n\tconst optionButtons = visibleOptions.map((option) => {\n\t\tconst selected = option.id === selectedValue;\n\t\tconst optionContent = (\n\t\t\t<>\n\t\t\t\t{!!option.icon && (\n\t\t\t\t\t<span className=\"auth-method-switch--option-icon shrink-0\" aria-hidden=\"true\">\n\t\t\t\t\t\t{option.icon}\n\t\t\t\t\t</span>\n\t\t\t\t)}\n\t\t\t\t<Stack render={<span />} gap=\"dense\" className=\"auth-method-switch--option-copy w-full\">\n\t\t\t\t\t<Text\n\t\t\t\t\t\ttag=\"span\"\n\t\t\t\t\t\tweight=\"semibold\"\n\t\t\t\t\t\tlineHeight=\"tight\"\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t'max-w-full whitespace-normal break-words text-inherit',\n\t\t\t\t\t\t\tsegmented ? 'text-center min-[480px]:truncate min-[480px]:text-start' : 'text-start',\n\t\t\t\t\t\t)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{option.label}\n\t\t\t\t\t</Text>\n\t\t\t\t\t{!!option.description && (\n\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\ttag=\"span\"\n\t\t\t\t\t\t\tsize=\"xs\"\n\t\t\t\t\t\t\tlineHeight={segmented ? undefined : 'snug'}\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t'whitespace-normal break-words',\n\t\t\t\t\t\t\t\tsegmented ? 'hidden min-[480px]:block min-[480px]:truncate' : 'text-start',\n\t\t\t\t\t\t\t\tselected ? 'text-inherit' : 'text-muted-foreground',\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{option.description}\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t)}\n\t\t\t\t</Stack>\n\t\t\t</>\n\t\t);\n\t\treturn (\n\t\t\t<button\n\t\t\t\tkey={option.id}\n\t\t\t\ttype=\"button\"\n\t\t\t\taria-pressed={selected}\n\t\t\t\tdisabled={option.disabled}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'auth-method-switch--option',\n\t\t\t\t\t`box-border m-0 inline-flex min-h-action-lg min-w-0 w-full cursor-pointer items-center justify-start gap-space-sm whitespace-normal rounded-inner border px-control py-row-y-lg text-start outline-none transition-[color,background-color,border-color,box-shadow] ${focusRecipes.frame} disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50`,\n\t\t\t\t\tresolveTextClassNames({type: null, size: 'sm', weight: 'medium', align: null, lineHeight: 'none'}),\n\t\t\t\t\tselected ? 'border-transparent bg-primary text-primary-foreground' : segmented ? `border-transparent bg-transparent text-foreground ${interactionRecipes.rowHover}` : `border-input bg-background text-foreground ${interactionRecipes.rowHover}`,\n\t\t\t\t\tsegmented &&\n\t\t\t\t\t\t'min-h-action justify-center border-0 px-control-sm py-row-y text-center shadow-none min-[480px]:px-control min-[480px]:text-start',\n\t\t\t\t\tselected && 'auth-method-switch--option-selected',\n\t\t\t\t)}\n\t\t\t\tonClick={() => setValue(option.id)}\n\t\t\t>\n\t\t\t\t{segmented ? (\n\t\t\t\t\t<span className=\"auth-method-switch--option-inner flex w-full flex-col justify-center gap-space-xs min-[480px]:w-auto min-[480px]:flex-row min-[480px]:justify-start min-[480px]:gap-space-md\">\n\t\t\t\t\t\t{optionContent}\n\t\t\t\t\t</span>\n\t\t\t\t) : (\n\t\t\t\t\t<Stack render={<span />} direction=\"horizontal\" gap=\"md\" wrap={false} className=\"auth-method-switch--option-inner w-full\">\n\t\t\t\t\t\t{optionContent}\n\t\t\t\t\t</Stack>\n\t\t\t\t)}\n\t\t\t</button>\n\t\t);\n\t});\n\n\treturn (\n\t\t<Stack gap=\"lg\" className={cn('auth-method-switch--component', className)} {...rootProps}>\n\t\t\t{divider !== null && divider !== false && (\n\t\t\t\t<div className=\"auth-method-switch--divider flex items-center gap-space-lg\">\n\t\t\t\t\t<span className=\"h-px min-w-0 flex-1 bg-border\" aria-hidden=\"true\" />\n\t\t\t\t\t<Text tag=\"span\" size=\"xs\" type=\"secondary\">\n\t\t\t\t\t\t{divider ?? strings.divider}\n\t\t\t\t\t</Text>\n\t\t\t\t\t<span className=\"h-px min-w-0 flex-1 bg-border\" aria-hidden=\"true\" />\n\t\t\t\t</div>\n\t\t\t)}\n\n\t\t\t{layout === 'segmented' ? (\n\t\t\t\t<div\n\t\t\t\t\trole=\"group\"\n\t\t\t\t\taria-label={ariaLabel ?? strings.label}\n\t\t\t\t\tdata-layout={layout}\n\t\t\t\t\tclassName=\"auth-method-switch--options grid min-w-0 grid-cols-[repeat(auto-fit,minmax(0,1fr))] gap-space-xs rounded-inner border border-border bg-muted p-space-xs\"\n\t\t\t\t>\n\t\t\t\t\t{optionButtons}\n\t\t\t\t</div>\n\t\t\t) : (\n\t\t\t\t<Grid\n\t\t\t\t\tcolumns={layout === 'grid' ? { base: 1, sm: 2 } : 1}\n\t\t\t\t\tgap=\"md\"\n\t\t\t\t\trole=\"group\"\n\t\t\t\t\taria-label={ariaLabel ?? strings.label}\n\t\t\t\t\tdata-layout={layout}\n\t\t\t\t\tclassName=\"auth-method-switch--options\"\n\t\t\t\t>\n\t\t\t\t\t{optionButtons}\n\t\t\t\t</Grid>\n\t\t\t)}\n\t\t</Stack>\n\t);\n}\n"],"mappings":"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"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { s as e, v as t } from "./ui-provider-
|
|
3
|
-
import { t as n } from "./utils-
|
|
4
|
-
import { t as r } from "./affordance-geometry.generated-
|
|
5
|
-
import { c as i } from "./typography-
|
|
2
|
+
import { s as e, v as t } from "./ui-provider-CQCuCBcy.js";
|
|
3
|
+
import { t as n } from "./utils-CF3c95Io.js";
|
|
4
|
+
import { t as r } from "./affordance-geometry.generated-B8yGOr8-.js";
|
|
5
|
+
import { c as i } from "./typography-CSyJrh28.js";
|
|
6
6
|
import { i as a } from "./tone-recipes-BPsRAvhu.js";
|
|
7
7
|
import { t as o } from "./initials-format-CDoQEOd_.js";
|
|
8
8
|
import * as s from "react";
|
|
@@ -178,4 +178,4 @@ O.displayName = "StackedAvatars";
|
|
|
178
178
|
//#endregion
|
|
179
179
|
export { C as a, x as i, y as n, w as o, S as r, b as s, O as t };
|
|
180
180
|
|
|
181
|
-
//# sourceMappingURL=avatar-
|
|
181
|
+
//# sourceMappingURL=avatar-DWO_HHhB.js.map
|