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
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { t as e } from "./utils-
|
|
3
|
-
import { a as t, c as n } from "./typography-
|
|
4
|
-
import { t as r } from "./structure-
|
|
5
|
-
import "./form-sizing-
|
|
2
|
+
import { t as e } from "./utils-CF3c95Io.js";
|
|
3
|
+
import { a as t, c as n } from "./typography-CSyJrh28.js";
|
|
4
|
+
import { t as r } from "./structure-C0V0_Fyf.js";
|
|
5
|
+
import "./form-sizing-NXgjkmBG.js";
|
|
6
6
|
import * as i from "react";
|
|
7
7
|
import { forwardRef as a } from "react";
|
|
8
8
|
import { jsx as o, jsxs as s } from "react/jsx-runtime";
|
|
@@ -16,7 +16,12 @@ var c = a(function({ children: a, label: c, required: l, hint: u, error: d, help
|
|
|
16
16
|
"meter",
|
|
17
17
|
"output",
|
|
18
18
|
"progress"
|
|
19
|
-
].includes(a.type)), w = C ? a.props.id : void 0, T = p ?? w ?? (c && C ? `form-field-${S}` : void 0), E =
|
|
19
|
+
].includes(a.type)), w = C ? a.props.id : void 0, T = p ?? w ?? (c && C ? `form-field-${S}` : void 0), E = m ?? `form-field-${S}-supporting`, D = C ? a.props : void 0, O = [D?.["aria-describedby"], b ? E : void 0].filter((e) => !!e).flatMap((e) => e.split(/\s+/).filter(Boolean)), k = [...new Set(O)].join(" ") || void 0, A = C ? i.cloneElement(a, {
|
|
20
|
+
...T && !w ? { id: T } : {},
|
|
21
|
+
"aria-describedby": k,
|
|
22
|
+
"aria-invalid": v ? !0 : D?.["aria-invalid"],
|
|
23
|
+
"aria-required": D?.["aria-required"] ?? (x ? !0 : void 0)
|
|
24
|
+
}) : a;
|
|
20
25
|
return /* @__PURE__ */ s(r, {
|
|
21
26
|
ref: _,
|
|
22
27
|
gap: "xs",
|
|
@@ -31,12 +36,13 @@ var c = a(function({ children: a, label: c, required: l, hint: u, error: d, help
|
|
|
31
36
|
size: "inherit",
|
|
32
37
|
type: "error",
|
|
33
38
|
className: "form-field--required",
|
|
39
|
+
"aria-hidden": "true",
|
|
34
40
|
children: "*"
|
|
35
41
|
})]
|
|
36
42
|
}),
|
|
37
|
-
|
|
43
|
+
A,
|
|
38
44
|
!!b && /* @__PURE__ */ o(n, {
|
|
39
|
-
id:
|
|
45
|
+
id: E,
|
|
40
46
|
tag: "p",
|
|
41
47
|
size: "xs",
|
|
42
48
|
type: v ? "error" : "secondary",
|
|
@@ -54,4 +60,4 @@ c.displayName = "FormField";
|
|
|
54
60
|
//#endregion
|
|
55
61
|
export { c as t };
|
|
56
62
|
|
|
57
|
-
//# sourceMappingURL=form-field-
|
|
63
|
+
//# sourceMappingURL=form-field-CsgRmdit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"form-field-CsgRmdit.js","names":["React","cn","Label","Text","Stack","React$1","FormField","forwardRef","rootProps","hasError","error","supportingText","helperText","hint","showBottomText","resolvedRequired","required","generatedId","canAssociateChild","children","childId","resolvedHtmlFor","htmlFor","label","resolvedSupportingTextId","supportingTextId","childProps","descriptionIds","id","describedBy","resolvedChildren","className"],"sources":["../src/components/base/forms/form-field.tsx"],"sourcesContent":["/**\n * FormField — presentation chrome for a label, control, hint/helper and error.\n * This implementation keeps presentation separate from RHF state bindings.\n * The published `base/forms` family exports those bindings and types, so use\n * its listed react-hook-form peer even when selecting only FormField. Installing\n * that peer does not require adopting RHF for the app's own form state.\n */\n\nimport * as React from 'react';\nimport { forwardRef, type ComponentPropsWithoutRef, type ReactNode } from 'react';\nimport { Stack } from '../structure';\nimport { Label, Text } from '../../typography';\nimport { cn } from '../../../lib/utils';\nimport { formLabelLineClass } from './form-sizing';\n\nexport interface FieldChromeProps {\n\t/** Caption rendered above the control, associated through `htmlFor`. */\n\tlabel?: ReactNode;\n\t/** Marks the field required and renders the required indicator by the label. */\n\trequired?: boolean;\n\t/**\n\t * Lowest-priority supporting line: shown only when neither `error` nor\n\t * `helperText` is set. Use for formatting rules and expectations.\n\t */\n\thint?: ReactNode;\n\t/**\n\t * Validation message, and the highest-priority supporting line — it replaces\n\t * `helperText` and `hint` rather than stacking with them. Rendered with\n\t * `role=\"alert\"` and `aria-live=\"polite\"` in the error tone.\n\t */\n\terror?: ReactNode;\n\t/**\n\t * Middle-priority supporting line: replaces `hint`, and is itself replaced by\n\t * `error`. The field renders exactly one supporting line, resolved as\n\t * `error || helperText || hint` — copy the user still needs while fixing a\n\t * validation failure therefore belongs in the `error` message itself.\n\t */\n\thelperText?: ReactNode;\n}\n\nexport interface FormFieldProps extends FieldChromeProps, Omit<ComponentPropsWithoutRef<'div'>, 'children'> {\n\tchildren: ReactNode;\n\t/** Native ID of the labelled control. With compound children, assign it to the nested control; passive wrappers are left untouched. Direct controls receive an automatic ID when omitted. */\n\thtmlFor?: string;\n\t/** ID for the resolved hint, helper, or error; controls can reference it explicitly. */\n\tsupportingTextId?: string;\n}\n\nexport const FormField = forwardRef<HTMLDivElement, FormFieldProps>(function FormField({\n\tchildren,\n\tlabel,\n\trequired,\n\thint,\n\terror,\n\thelperText,\n\thtmlFor,\n\tsupportingTextId,\n\tclassName,\n\t...rootProps\n}, ref) {\n\tconst hasError = Boolean(error);\n\tconst supportingText = error || helperText || (!hasError ? hint : undefined);\n\tconst showBottomText = Boolean(supportingText);\n\tconst resolvedRequired = required;\n\tconst generatedId = React.useId();\n\t// A layout wrapper is not a labelable control. In a compound field,\n\t// htmlFor already names its nested control; copying it onto the wrapper\n\t// creates duplicate IDs and breaks the native label association.\n\tconst canAssociateChild = React.isValidElement(children) && children.type !== React.Fragment &&\n\t\t(typeof children.type !== 'string' || ['input', 'select', 'textarea', 'button', 'meter', 'output', 'progress'].includes(children.type));\n\tconst childId =\n\t\tcanAssociateChild\n\t\t\t? (children.props as { id?: string }).id\n\t\t\t: undefined;\n\tconst resolvedHtmlFor = htmlFor ?? childId ?? (label && canAssociateChild ? `form-field-${generatedId}` : undefined);\n\tconst resolvedSupportingTextId = supportingTextId ?? `form-field-${generatedId}-supporting`;\n\tconst childProps = canAssociateChild ? (children.props as React.AriaAttributes & { id?: string }) : undefined;\n\tconst descriptionIds = [childProps?.['aria-describedby'], showBottomText ? resolvedSupportingTextId : undefined]\n\t\t.filter((id): id is string => Boolean(id)).flatMap(id => id.split(/\\s+/).filter(Boolean));\n\tconst describedBy = [...new Set(descriptionIds)].join(' ') || undefined;\n\tconst resolvedChildren = canAssociateChild\n\t\t? React.cloneElement(children as React.ReactElement<React.AriaAttributes & { id?: string }>, {\n\t\t\t...(resolvedHtmlFor && !childId ? { id: resolvedHtmlFor } : {}),\n\t\t\t'aria-describedby': describedBy,\n\t\t\t'aria-invalid': hasError ? true : childProps?.['aria-invalid'],\n\t\t\t'aria-required': childProps?.['aria-required'] ?? (resolvedRequired ? true : undefined),\n\t\t})\n\t\t: children;\n\n\treturn (\n\t\t<Stack ref={ref} gap=\"xs\" className={cn('form-field--component w-full box-border', className)} {...rootProps}>\n\t\t\t{!!label && (\n\t\t\t\t<Label\n\t\t\t\t\thtmlFor={resolvedHtmlFor}\n\t\t\t\t\tclassName={cn('form-field--label flex items-center gap-space-xs text-inherit', formLabelLineClass)}\n\t\t\t\t>\n\t\t\t\t\t{label}\n\t\t\t\t\t{!!resolvedRequired && (\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=\"inherit\"\n\t\t\t\t\t\t\ttype=\"error\"\n\t\t\t\t\t\t\tclassName=\"form-field--required\"\n\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t*\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t)}\n\t\t\t\t</Label>\n\t\t\t)}\n\n\t\t\t{resolvedChildren}\n\n\t\t\t{!!showBottomText && (\n\t\t\t\t<Text\n\t\t\t\t\tid={resolvedSupportingTextId}\n\t\t\t\t\ttag=\"p\"\n\t\t\t\t\tsize=\"xs\"\n\t\t\t\t\ttype={hasError ? 'error' : 'secondary'}\n\t\t\t\t\t{...(hasError ? { role: 'alert', 'aria-live': 'polite' } : {})}\n\t\t\t\t\tclassName=\"form-field--supporting\"\n\t\t\t\t>\n\t\t\t\t\t{supportingText}\n\t\t\t\t</Text>\n\t\t\t)}\n\t\t</Stack>\n\t);\n});\n\nFormField.displayName = 'FormField';\n"],"mappings":";;;;;;;;;AAgDA,IAAaM,IAAYC,EAA2C,SAAmB,EACtF,aACA,UACA,aACA,SACA,UACA,eACA,YACA,qBACA,cACA,GAAGC,KACD,GAAK;CACP,IAAMC,IAAW,EAAQC,GACnBC,IAAiBD,KAASE,MAAgBH,IAAkB,KAAA,IAAPI,IACrDC,IAAiB,EAAQH,GACzBI,IAAmBC,GACnBC,IAAcjB,EAAM,MAAM,GAI1BkB,IAAoBlB,EAAM,eAAemB,CAAQ,KAAKA,EAAS,SAASnB,EAAM,aAClF,OAAOmB,EAAS,QAAS,YAAY;EAAC;EAAS;EAAU;EAAY;EAAU;EAAS;EAAU;CAAU,CAAC,CAAC,SAASA,EAAS,IAAI,IAChIC,IACLF,IACIC,EAAS,MAA0B,KACpC,KAAA,GACEE,IAAkBC,KAAWF,MAAYG,KAASL,IAAoB,cAAcD,MAAgB,KAAA,IACpGO,IAA2BC,KAAoB,cAAcR,EAAY,cACzES,IAAaR,IAAqBC,EAAS,QAAmD,KAAA,GAC9FQ,IAAiB,CAACD,IAAa,qBAAqBZ,IAAiBU,IAA2B,KAAA,CAAS,CAAC,CAC9G,QAAQ,MAAqB,EAAQI,CAAG,CAAC,CAAC,SAAQ,MAAMA,EAAG,MAAM,KAAK,CAAC,CAAC,OAAO,OAAO,CAAC,GACnFC,IAAc,CAAC,GAAG,IAAI,IAAIF,CAAc,CAAC,CAAC,CAAC,KAAK,GAAG,KAAK,KAAA,GACxDG,IAAmBZ,IACtBlB,EAAM,aAAamB,GAAwE;EAC5F,GAAIE,KAAmB,CAACD,IAAU,EAAE,IAAIC,EAAgB,IAAI,CAAC;EAC7D,oBAAoBQ;EACpB,gBAAgBpB,IAAW,KAAOiB,IAAa;EAC/C,iBAAiBA,IAAa,qBAAqBX,IAAmB,KAAO,KAAA;CAC9E,CAAC,IACCI;CAEH,OACC,kBAACf,GAAD;EAAY;EAAK,KAAI;EAAK,WAAWH,EAAG,2CAA2C8B,CAAS;EAAG,GAAIvB;EAAnG,UAAA;GACE,CAAC,CAACe,KACF,kBAACrB,GAAD;IACC,SAASmB;IACT,WAAWpB,EAAG,iEAAA,WAAmF;IAFlG,UAAA,CAIEsB,GACA,CAAC,CAACR,KACF,kBAACZ,GAAD;KACC,KAAI;KACJ,MAAK;KACL,MAAK;KACL,WAAU;KACV,eAAY;KACZ,UAAA;IAEK,CAAA,CAED;;GAGP2B;GAEA,CAAC,CAAChB,KACF,kBAACX,GAAD;IACC,IAAIqB;IACJ,KAAI;IACJ,MAAK;IACL,MAAMf,IAAW,UAAU;IAC3B,GAAKA,IAAW;KAAE,MAAM;KAAS,aAAa;IAAS,IAAI,CAAC;IAC5D,WAAU;IAET,UAAAE;GACI,CAAA;EAED;;AAET,CAAC;AAED,EAAU,cAAc"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { v as e } from "./ui-provider-
|
|
2
|
-
import { t } from "./affordance-geometry.generated-
|
|
1
|
+
import { v as e } from "./ui-provider-CQCuCBcy.js";
|
|
2
|
+
import { t } from "./affordance-geometry.generated-B8yGOr8-.js";
|
|
3
3
|
import { t as n } from "./field-state-recipes-BVA2CWHo.js";
|
|
4
4
|
import { t as r } from "./editable-text-recipe-Cn61kEcv.js";
|
|
5
5
|
//#region src/components/base/forms/form-sizing.ts
|
|
@@ -122,4 +122,4 @@ function w(t, n) {
|
|
|
122
122
|
//#endregion
|
|
123
123
|
export { b as _, i as a, u as c, a as d, _ as f, x as g, S as h, d as i, h as l, C as m, m as n, o, v as p, p as r, l as s, f as t, s as u, y as v, w as y };
|
|
124
124
|
|
|
125
|
-
//# sourceMappingURL=form-sizing-
|
|
125
|
+
//# sourceMappingURL=form-sizing-NXgjkmBG.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"form-sizing-BdP_Mf5p.js","names":["resolveComponentScale","fieldStateRecipes","editableTextSizeClasses","formControlHeightClasses","affordanceGeometry","formControlSizeClasses","formControlHorizontalPaddingClasses","formControlPaddingClasses","formControlInlineGapClasses","formControlIconClasses","formControlIconOffsetClasses","formControlEndIconOffsetClasses","formControlAddonOffsetClasses","formControlEndAddonOffsetClasses","formControlCountOffsetClasses","formControlMinHeightClasses","fieldTriggerInteractionClasses","formFieldFrameClasses","size","formFieldTriggerClasses","formTextareaSizeClasses","formTextareaInsetClasses","formTextareaAffordanceTopClasses","formLabelSizeClasses","formLabelLineClass","resolveFormControlSize","sizeProp","defaultScale"],"sources":["../src/components/base/forms/form-sizing.ts"],"sourcesContent":["import { fieldStateRecipes } from '../../../lib/field-state-recipes';\nimport { affordanceGeometry } from '../../../lib/affordance-geometry.generated';\nimport { editableTextSizeClasses } from '../../../lib/editable-text-recipe';\nimport type { ComponentScale } from '../../../lib/component-vocabulary';\nimport { resolveComponentScale } from '../../../lib/ui-provider/scale';\n\n/** Ordinary heights for compound frames that retain auto-height and class overrides. */\nexport const formControlHeightClasses = {\n\tsm: `h-control-sm ${affordanceGeometry.controlTextMinHeight}`,\n\tmd: `h-control ${affordanceGeometry.controlTextMinHeight}`,\n\tlg: `h-control-lg ${affordanceGeometry.controlTextMinHeight}`,\n} satisfies Record<ComponentScale, string>;\n\n// Important height utilities let our resolved height win against shadcn primitives that\n// bake their own `data-[size=*]:h-{n}` defaults (Select, DatePicker\n// trigger via Button, etc.). Without `!`, the primitive's\n// attribute-selector specificity beats our class-selector and every\n// non-Input field renders 4px taller than Input.\n// Keep the important spellings literal so Tailwind emits them in package CSS.\nexport const formControlSizeClasses = {\n\tsm: [\n\t\t'box-border',\n\t\t'!h-control-sm',\n\t\taffordanceGeometry.controlTextMinHeight,\n\t\t'font-sans text-foreground',\n\t\t'text-pxs',\n\t].join(' '),\n\tmd: [\n\t\t'box-border',\n\t\t'!h-control',\n\t\taffordanceGeometry.controlTextMinHeight,\n\t\t'font-sans text-foreground',\n\t\t'text-sm',\n\t].join(' '),\n\tlg: [\n\t\t'box-border',\n\t\t'!h-control-lg',\n\t\taffordanceGeometry.controlTextMinHeight,\n\t\t'font-sans text-foreground',\n\t\t'text-sm',\n\t].join(' '),\n} satisfies Record<ComponentScale, string>;\n\nexport const formControlHorizontalPaddingClasses = {\n\tsm: 'px-control-sm',\n\tmd: 'px-control',\n\tlg: 'px-control',\n} satisfies Record<ComponentScale, string>;\n\nexport const formControlPaddingClasses = {\n\tsm: `${formControlHorizontalPaddingClasses.sm} ${affordanceGeometry.controlBlockPadding.sm}`,\n\tmd: `${formControlHorizontalPaddingClasses.md} ${affordanceGeometry.controlBlockPadding.md}`,\n\tlg: `${formControlHorizontalPaddingClasses.lg} ${affordanceGeometry.controlBlockPadding.lg}`,\n} satisfies Record<ComponentScale, string>;\n\nexport const formControlInlineGapClasses = {\n\tsm: 'gap-space-sm',\n\tmd: 'gap-space-md',\n\tlg: 'gap-space-lg',\n} satisfies Record<ComponentScale, string>;\n\nexport const formControlIconClasses = {\n\tsm: 'size-icon-sm',\n\tmd: 'size-icon',\n\tlg: 'size-icon-lg',\n} satisfies Record<ComponentScale, string>;\n\nexport const formControlIconOffsetClasses = {\n\tsm: 'ps-control-icon-sm',\n\tmd: 'ps-control-icon',\n\tlg: affordanceGeometry.largeIconStart,\n} satisfies Record<ComponentScale, string>;\n\nexport const formControlEndIconOffsetClasses = {\n\tsm: 'pe-control-icon-sm',\n\tmd: 'pe-control-icon',\n\tlg: affordanceGeometry.largeIconEnd,\n} satisfies Record<ComponentScale, string>;\n\nexport const formControlAddonOffsetClasses = {\n\tsm: 'ps-control-addon-sm',\n\tmd: 'ps-control-addon',\n\tlg: 'ps-control-addon',\n} satisfies Record<ComponentScale, string>;\n\nexport const formControlEndAddonOffsetClasses = {\n\tsm: 'pe-control-addon-sm',\n\tmd: 'pe-control-addon',\n\tlg: 'pe-control-addon',\n} satisfies Record<ComponentScale, string>;\n\nexport const formControlCountOffsetClasses = {\n\tsm: 'pe-control-count-sm',\n\tmd: 'pe-control-count',\n\tlg: 'pe-control-count',\n} satisfies Record<ComponentScale, string>;\n\n/**\n * Min-heights matching `formControlSizeClasses` so multi-line trigger\n * variants (e.g. `Select` showing wrapped descriptions) can keep the\n * size's vertical rhythm without locking to a fixed `h-{n}`.\n */\nexport const formControlMinHeightClasses = {\n\tsm: 'min-h-control-sm',\n\tmd: 'min-h-control',\n\tlg: 'min-h-control-lg',\n} satisfies Record<ComponentScale, string>;\n\n/**\n * Field triggers never take an action hover or press fill: a native field has\n * neither. The variants repeat the Button interaction recipe's exact selectors so\n * class merging replaces its fill instead of losing a specificity contest.\n */\nconst fieldTriggerInteractionClasses = [\n\t'[&:hover:not(:active):not(:disabled):not([data-disabled]):not([aria-disabled=true])]:bg-transparent',\n\t'[&:active:not(:disabled):not([data-disabled]):not([aria-disabled=true])]:bg-transparent',\n].join(' ');\n\n/**\n * The one field frame, drawn by `Input` on its native field and by\n * `formFieldTriggerClasses` on button-shaped triggers: the `--input` boundary,\n * inner radius, transparent fill (the library is intentionally flat), control\n * height, editable text size, control padding and the shared focus, invalid and\n * disabled states. Layout (`flex`, width) stays with each owner.\n *\n * The displayed value is the field's value, so it follows the editable text\n * recipe: on coarse pointers a trigger matches the touch input size of an\n * adjoining `Input` instead of rendering a step smaller.\n */\nexport function formFieldFrameClasses(size: ComponentScale): string {\n\treturn [\n\t\t'box-border rounded-inner border border-input bg-transparent',\n\t\t'shadow-none transition-[color,box-shadow] outline-none',\n\t\tformControlSizeClasses[size],\n\t\teditableTextSizeClasses[size],\n\t\tformControlPaddingClasses[size],\n\t\tfieldStateRecipes.focus,\n\t\tfieldStateRecipes.invalid,\n\t\t'disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50',\n\t].join(' ');\n}\n\n/**\n * Canonical \"input-shaped trigger\" chrome — used by any control that\n * renders as a button-style trigger but visually has to read as a form\n * field (DatePicker, TimePicker, Cascader, the inner Select inside composite\n * fields, etc.). It is `Input`'s own frame plus button resets, so when the\n * canonical input look changes every trigger picks it up.\n */\nexport function formFieldTriggerClasses(size: ComponentScale): string {\n\treturn [\n\t\t'flex w-full items-center justify-between text-start font-normal',\n\t\tformFieldFrameClasses(size),\n\t\tformControlInlineGapClasses[size],\n\t\t'data-disabled:pointer-events-none data-disabled:cursor-not-allowed data-disabled:opacity-50',\n\t\t// Read-only matches Input's read-only fill.\n\t\t'data-readonly:bg-muted',\n\t\tfieldTriggerInteractionClasses,\n\t].join(' ');\n}\n\nexport const formTextareaSizeClasses = {\n\tsm: [\n\t\t'min-h-textarea-sm',\n\t\t'font-sans text-foreground',\n\t\t'text-pxs',\n\t].join(' '),\n\tmd: [\n\t\t'min-h-textarea',\n\t\t'font-sans text-foreground',\n\t\t'text-sm',\n\t].join(' '),\n\tlg: [\n\t\t'min-h-textarea',\n\t\t'font-sans text-foreground',\n\t\t'text-sm',\n\t].join(' '),\n} satisfies Record<ComponentScale, string>;\n\n/**\n * Vertical inset of multi-line fields. Their first line sits exactly where a\n * single-line control of the same size draws its value (inside the 1px border),\n * so a Textarea beside an Input shares its first line. `1lh` is the field's own\n * line height, so the inset follows the editable text size on every pointer.\n */\nexport const formTextareaInsetClasses = affordanceGeometry.textareaBlockPadding satisfies Record<ComponentScale, string>;\n\n/**\n * Top offsets that centre multi-line field affordances on the first line, where a\n * single-line control of the same size centres them: the clear target\n * (`size-control-clear`) and a `size-icon` glyph such as the loading spinner.\n */\nexport const formTextareaAffordanceTopClasses = {\n\ttarget: affordanceGeometry.textareaClearTop,\n\ticon: affordanceGeometry.textareaIconTop,\n} as const satisfies Record<'target' | 'icon', Record<ComponentScale, string>>;\n\nexport const formLabelSizeClasses = {\n\tsm: 'text-xs',\n\tmd: 'text-sm',\n\tlg: 'text-base',\n} satisfies Record<ComponentScale, string>;\n\n/** Field labels share one line box, so a label row lines up beside its field at every size. */\nexport const formLabelLineClass = 'leading-6';\n\nexport function resolveFormControlSize(\n\tsizeProp: ComponentScale | undefined,\n\tdefaultScale: ComponentScale | undefined,\n): ComponentScale {\n\treturn resolveComponentScale(sizeProp, defaultScale);\n}\n\nexport function resolveFormLabelSize(\n\tsizeProp: ComponentScale | undefined,\n\tdefaultScale: ComponentScale | undefined,\n): ComponentScale {\n\treturn resolveComponentScale(sizeProp, defaultScale);\n}\n"],"mappings":";;;;;AAOA,IAAaG,IAA2B;CACvC,IAAI,gBAAgBC,EAAmB;CACvC,IAAI,aAAaA,EAAmB;CACpC,IAAI,gBAAgBA,EAAmB;AACxC,GAQaC,IAAyB;CACrC,IAAI;EACH;EACA;EACAD,EAAmB;EACnB;EACA;CACD,CAAC,CAAC,KAAK,GAAG;CACV,IAAI;EACH;EACA;EACAA,EAAmB;EACnB;EACA;CACD,CAAC,CAAC,KAAK,GAAG;CACV,IAAI;EACH;EACA;EACAA,EAAmB;EACnB;EACA;CACD,CAAC,CAAC,KAAK,GAAG;AACX,GAEaE,IAAsC;CAClD,IAAI;CACJ,IAAI;CACJ,IAAI;AACL,GAEaC,IAA4B;CACxC,IAAI,GAAGD,EAAoC,GAAG,GAAGF,EAAmB,oBAAoB;CACxF,IAAI,GAAGE,EAAoC,GAAG,GAAGF,EAAmB,oBAAoB;CACxF,IAAI,GAAGE,EAAoC,GAAG,GAAGF,EAAmB,oBAAoB;AACzF,GAEaI,IAA8B;CAC1C,IAAI;CACJ,IAAI;CACJ,IAAI;AACL,GAEaC,IAAyB;CACrC,IAAI;CACJ,IAAI;CACJ,IAAI;AACL,GAEaC,IAA+B;CAC3C,IAAI;CACJ,IAAI;CACJ,IAAIN,EAAmB;AACxB,GAEaO,IAAkC;CAC9C,IAAI;CACJ,IAAI;CACJ,IAAIP,EAAmB;AACxB,GAEaQ,IAAgC;CAC5C,IAAI;CACJ,IAAI;CACJ,IAAI;AACL,GAEaC,IAAmC;CAC/C,IAAI;CACJ,IAAI;CACJ,IAAI;AACL,GAEaC,IAAgC;CAC5C,IAAI;CACJ,IAAI;CACJ,IAAI;AACL,GAOaC,IAA8B;CAC1C,IAAI;CACJ,IAAI;CACJ,IAAI;AACL,GAOMC,IAAiC,CACtC,uGACA,yFACD,CAAC,CAAC,KAAK,GAAG;AAaV,SAAgBC,EAAsB,GAA8B;CACnE,OAAO;EACN;EACA;EACAZ,EAAuBa;EACvBhB,EAAwBgB;EACxBX,EAA0BW;EAC1BjB,EAAkB;EAClBA,EAAkB;EAClB;CACD,CAAC,CAAC,KAAK,GAAG;AACX;AASA,SAAgBkB,EAAwB,GAA8B;CACrE,OAAO;EACN;EACAF,EAAsBC,CAAI;EAC1BV,EAA4BU;EAC5B;EAEA;EACAF;CACD,CAAC,CAAC,KAAK,GAAG;AACX;AAEA,IAAaI,IAA0B;CACtC,IAAI;EACH;EACA;EACA;CACD,CAAC,CAAC,KAAK,GAAG;CACV,IAAI;EACH;EACA;EACA;CACD,CAAC,CAAC,KAAK,GAAG;CACV,IAAI;EACH;EACA;EACA;CACD,CAAC,CAAC,KAAK,GAAG;AACX,GAQaC,IAA2BjB,EAAmB,sBAO9CkB,IAAmC;CAC/C,QAAQlB,EAAmB;CAC3B,MAAMA,EAAmB;AAC1B,GAEamB,IAAuB;CACnC,IAAI;CACJ,IAAI;CACJ,IAAI;AACL,GAGaC,IAAqB;AAElC,SAAgBC,EACf,GACA,GACiB;CACjB,OAAOzB,EAAsB0B,GAAUC,CAAY;AACpD"}
|
|
1
|
+
{"version":3,"file":"form-sizing-NXgjkmBG.js","names":["resolveComponentScale","fieldStateRecipes","editableTextSizeClasses","formControlHeightClasses","affordanceGeometry","formControlSizeClasses","formControlHorizontalPaddingClasses","formControlPaddingClasses","formControlInlineGapClasses","formControlIconClasses","formControlIconOffsetClasses","formControlEndIconOffsetClasses","formControlAddonOffsetClasses","formControlEndAddonOffsetClasses","formControlCountOffsetClasses","formControlMinHeightClasses","fieldTriggerInteractionClasses","formFieldFrameClasses","size","formFieldTriggerClasses","formTextareaSizeClasses","formTextareaInsetClasses","formTextareaAffordanceTopClasses","formLabelSizeClasses","formLabelLineClass","resolveFormControlSize","sizeProp","defaultScale"],"sources":["../src/components/base/forms/form-sizing.ts"],"sourcesContent":["import { fieldStateRecipes } from '../../../lib/field-state-recipes';\nimport { affordanceGeometry } from '../../../lib/affordance-geometry.generated';\nimport { editableTextSizeClasses } from '../../../lib/editable-text-recipe';\nimport type { ComponentScale } from '../../../lib/component-vocabulary';\nimport { resolveComponentScale } from '../../../lib/ui-provider/scale';\n\n/** Ordinary heights for compound frames that retain auto-height and class overrides. */\nexport const formControlHeightClasses = {\n\tsm: `h-control-sm ${affordanceGeometry.controlTextMinHeight}`,\n\tmd: `h-control ${affordanceGeometry.controlTextMinHeight}`,\n\tlg: `h-control-lg ${affordanceGeometry.controlTextMinHeight}`,\n} satisfies Record<ComponentScale, string>;\n\n// Important height utilities let our resolved height win against shadcn primitives that\n// bake their own `data-[size=*]:h-{n}` defaults (Select, DatePicker\n// trigger via Button, etc.). Without `!`, the primitive's\n// attribute-selector specificity beats our class-selector and every\n// non-Input field renders 4px taller than Input.\n// Keep the important spellings literal so Tailwind emits them in package CSS.\nexport const formControlSizeClasses = {\n\tsm: [\n\t\t'box-border',\n\t\t'!h-control-sm',\n\t\taffordanceGeometry.controlTextMinHeight,\n\t\t'font-sans text-foreground',\n\t\t'text-pxs',\n\t].join(' '),\n\tmd: [\n\t\t'box-border',\n\t\t'!h-control',\n\t\taffordanceGeometry.controlTextMinHeight,\n\t\t'font-sans text-foreground',\n\t\t'text-sm',\n\t].join(' '),\n\tlg: [\n\t\t'box-border',\n\t\t'!h-control-lg',\n\t\taffordanceGeometry.controlTextMinHeight,\n\t\t'font-sans text-foreground',\n\t\t'text-sm',\n\t].join(' '),\n} satisfies Record<ComponentScale, string>;\n\nexport const formControlHorizontalPaddingClasses = {\n\tsm: 'px-control-sm',\n\tmd: 'px-control',\n\tlg: 'px-control',\n} satisfies Record<ComponentScale, string>;\n\nexport const formControlPaddingClasses = {\n\tsm: `${formControlHorizontalPaddingClasses.sm} ${affordanceGeometry.controlBlockPadding.sm}`,\n\tmd: `${formControlHorizontalPaddingClasses.md} ${affordanceGeometry.controlBlockPadding.md}`,\n\tlg: `${formControlHorizontalPaddingClasses.lg} ${affordanceGeometry.controlBlockPadding.lg}`,\n} satisfies Record<ComponentScale, string>;\n\nexport const formControlInlineGapClasses = {\n\tsm: 'gap-space-sm',\n\tmd: 'gap-space-md',\n\tlg: 'gap-space-lg',\n} satisfies Record<ComponentScale, string>;\n\nexport const formControlIconClasses = {\n\tsm: 'size-icon-sm',\n\tmd: 'size-icon',\n\tlg: 'size-icon-lg',\n} satisfies Record<ComponentScale, string>;\n\nexport const formControlIconOffsetClasses = {\n\tsm: 'ps-control-icon-sm',\n\tmd: 'ps-control-icon',\n\tlg: affordanceGeometry.largeIconStart,\n} satisfies Record<ComponentScale, string>;\n\nexport const formControlEndIconOffsetClasses = {\n\tsm: 'pe-control-icon-sm',\n\tmd: 'pe-control-icon',\n\tlg: affordanceGeometry.largeIconEnd,\n} satisfies Record<ComponentScale, string>;\n\nexport const formControlAddonOffsetClasses = {\n\tsm: 'ps-control-addon-sm',\n\tmd: 'ps-control-addon',\n\tlg: 'ps-control-addon',\n} satisfies Record<ComponentScale, string>;\n\nexport const formControlEndAddonOffsetClasses = {\n\tsm: 'pe-control-addon-sm',\n\tmd: 'pe-control-addon',\n\tlg: 'pe-control-addon',\n} satisfies Record<ComponentScale, string>;\n\nexport const formControlCountOffsetClasses = {\n\tsm: 'pe-control-count-sm',\n\tmd: 'pe-control-count',\n\tlg: 'pe-control-count',\n} satisfies Record<ComponentScale, string>;\n\n/**\n * Min-heights matching `formControlSizeClasses` so multi-line trigger\n * variants (e.g. `Select` showing wrapped descriptions) can keep the\n * size's vertical rhythm without locking to a fixed `h-{n}`.\n */\nexport const formControlMinHeightClasses = {\n\tsm: 'min-h-control-sm',\n\tmd: 'min-h-control',\n\tlg: 'min-h-control-lg',\n} satisfies Record<ComponentScale, string>;\n\n/**\n * Field triggers never take an action hover or press fill: a native field has\n * neither. The variants repeat the Button interaction recipe's exact selectors so\n * class merging replaces its fill instead of losing a specificity contest.\n */\nconst fieldTriggerInteractionClasses = [\n\t'[&:hover:not(:active):not(:disabled):not([data-disabled]):not([aria-disabled=true])]:bg-transparent',\n\t'[&:active:not(:disabled):not([data-disabled]):not([aria-disabled=true])]:bg-transparent',\n].join(' ');\n\n/**\n * The one field frame, drawn by `Input` on its native field and by\n * `formFieldTriggerClasses` on button-shaped triggers: the `--input` boundary,\n * inner radius, transparent fill (the library is intentionally flat), control\n * height, editable text size, control padding and the shared focus, invalid and\n * disabled states. Layout (`flex`, width) stays with each owner.\n *\n * The displayed value is the field's value, so it follows the editable text\n * recipe: on coarse pointers a trigger matches the touch input size of an\n * adjoining `Input` instead of rendering a step smaller.\n */\nexport function formFieldFrameClasses(size: ComponentScale): string {\n\treturn [\n\t\t'box-border rounded-inner border border-input bg-transparent',\n\t\t'shadow-none transition-[color,box-shadow] outline-none',\n\t\tformControlSizeClasses[size],\n\t\teditableTextSizeClasses[size],\n\t\tformControlPaddingClasses[size],\n\t\tfieldStateRecipes.focus,\n\t\tfieldStateRecipes.invalid,\n\t\t'disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50',\n\t].join(' ');\n}\n\n/**\n * Canonical \"input-shaped trigger\" chrome — used by any control that\n * renders as a button-style trigger but visually has to read as a form\n * field (DatePicker, TimePicker, Cascader, the inner Select inside composite\n * fields, etc.). It is `Input`'s own frame plus button resets, so when the\n * canonical input look changes every trigger picks it up.\n */\nexport function formFieldTriggerClasses(size: ComponentScale): string {\n\treturn [\n\t\t'flex w-full items-center justify-between text-start font-normal',\n\t\tformFieldFrameClasses(size),\n\t\tformControlInlineGapClasses[size],\n\t\t'data-disabled:pointer-events-none data-disabled:cursor-not-allowed data-disabled:opacity-50',\n\t\t// Read-only matches Input's read-only fill.\n\t\t'data-readonly:bg-muted',\n\t\tfieldTriggerInteractionClasses,\n\t].join(' ');\n}\n\nexport const formTextareaSizeClasses = {\n\tsm: [\n\t\t'min-h-textarea-sm',\n\t\t'font-sans text-foreground',\n\t\t'text-pxs',\n\t].join(' '),\n\tmd: [\n\t\t'min-h-textarea',\n\t\t'font-sans text-foreground',\n\t\t'text-sm',\n\t].join(' '),\n\tlg: [\n\t\t'min-h-textarea',\n\t\t'font-sans text-foreground',\n\t\t'text-sm',\n\t].join(' '),\n} satisfies Record<ComponentScale, string>;\n\n/**\n * Vertical inset of multi-line fields. Their first line sits exactly where a\n * single-line control of the same size draws its value (inside the 1px border),\n * so a Textarea beside an Input shares its first line. `1lh` is the field's own\n * line height, so the inset follows the editable text size on every pointer.\n */\nexport const formTextareaInsetClasses = affordanceGeometry.textareaBlockPadding satisfies Record<ComponentScale, string>;\n\n/**\n * Top offsets that centre multi-line field affordances on the first line, where a\n * single-line control of the same size centres them: the clear target\n * (`size-control-clear`) and a `size-icon` glyph such as the loading spinner.\n */\nexport const formTextareaAffordanceTopClasses = {\n\ttarget: affordanceGeometry.textareaClearTop,\n\ticon: affordanceGeometry.textareaIconTop,\n} as const satisfies Record<'target' | 'icon', Record<ComponentScale, string>>;\n\nexport const formLabelSizeClasses = {\n\tsm: 'text-xs',\n\tmd: 'text-sm',\n\tlg: 'text-base',\n} satisfies Record<ComponentScale, string>;\n\n/** Field labels share one line box, so a label row lines up beside its field at every size. */\nexport const formLabelLineClass = 'leading-6';\n\nexport function resolveFormControlSize(\n\tsizeProp: ComponentScale | undefined,\n\tdefaultScale: ComponentScale | undefined,\n): ComponentScale {\n\treturn resolveComponentScale(sizeProp, defaultScale);\n}\n\nexport function resolveFormLabelSize(\n\tsizeProp: ComponentScale | undefined,\n\tdefaultScale: ComponentScale | undefined,\n): ComponentScale {\n\treturn resolveComponentScale(sizeProp, defaultScale);\n}\n"],"mappings":";;;;;AAOA,IAAaG,IAA2B;CACvC,IAAI,gBAAgBC,EAAmB;CACvC,IAAI,aAAaA,EAAmB;CACpC,IAAI,gBAAgBA,EAAmB;AACxC,GAQaC,IAAyB;CACrC,IAAI;EACH;EACA;EACAD,EAAmB;EACnB;EACA;CACD,CAAC,CAAC,KAAK,GAAG;CACV,IAAI;EACH;EACA;EACAA,EAAmB;EACnB;EACA;CACD,CAAC,CAAC,KAAK,GAAG;CACV,IAAI;EACH;EACA;EACAA,EAAmB;EACnB;EACA;CACD,CAAC,CAAC,KAAK,GAAG;AACX,GAEaE,IAAsC;CAClD,IAAI;CACJ,IAAI;CACJ,IAAI;AACL,GAEaC,IAA4B;CACxC,IAAI,GAAGD,EAAoC,GAAG,GAAGF,EAAmB,oBAAoB;CACxF,IAAI,GAAGE,EAAoC,GAAG,GAAGF,EAAmB,oBAAoB;CACxF,IAAI,GAAGE,EAAoC,GAAG,GAAGF,EAAmB,oBAAoB;AACzF,GAEaI,IAA8B;CAC1C,IAAI;CACJ,IAAI;CACJ,IAAI;AACL,GAEaC,IAAyB;CACrC,IAAI;CACJ,IAAI;CACJ,IAAI;AACL,GAEaC,IAA+B;CAC3C,IAAI;CACJ,IAAI;CACJ,IAAIN,EAAmB;AACxB,GAEaO,IAAkC;CAC9C,IAAI;CACJ,IAAI;CACJ,IAAIP,EAAmB;AACxB,GAEaQ,IAAgC;CAC5C,IAAI;CACJ,IAAI;CACJ,IAAI;AACL,GAEaC,IAAmC;CAC/C,IAAI;CACJ,IAAI;CACJ,IAAI;AACL,GAEaC,IAAgC;CAC5C,IAAI;CACJ,IAAI;CACJ,IAAI;AACL,GAOaC,IAA8B;CAC1C,IAAI;CACJ,IAAI;CACJ,IAAI;AACL,GAOMC,IAAiC,CACtC,uGACA,yFACD,CAAC,CAAC,KAAK,GAAG;AAaV,SAAgBC,EAAsB,GAA8B;CACnE,OAAO;EACN;EACA;EACAZ,EAAuBa;EACvBhB,EAAwBgB;EACxBX,EAA0BW;EAC1BjB,EAAkB;EAClBA,EAAkB;EAClB;CACD,CAAC,CAAC,KAAK,GAAG;AACX;AASA,SAAgBkB,EAAwB,GAA8B;CACrE,OAAO;EACN;EACAF,EAAsBC,CAAI;EAC1BV,EAA4BU;EAC5B;EAEA;EACAF;CACD,CAAC,CAAC,KAAK,GAAG;AACX;AAEA,IAAaI,IAA0B;CACtC,IAAI;EACH;EACA;EACA;CACD,CAAC,CAAC,KAAK,GAAG;CACV,IAAI;EACH;EACA;EACA;CACD,CAAC,CAAC,KAAK,GAAG;CACV,IAAI;EACH;EACA;EACA;CACD,CAAC,CAAC,KAAK,GAAG;AACX,GAQaC,IAA2BjB,EAAmB,sBAO9CkB,IAAmC;CAC/C,QAAQlB,EAAmB;CAC3B,MAAMA,EAAmB;AAC1B,GAEamB,IAAuB;CACnC,IAAI;CACJ,IAAI;CACJ,IAAI;AACL,GAGaC,IAAqB;AAElC,SAAgBC,EACf,GACA,GACiB;CACjB,OAAOzB,EAAsB0B,GAAUC,CAAY;AACpD"}
|
|
@@ -1,52 +1,69 @@
|
|
|
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-
|
|
6
|
-
import { t as i } from "./structure-
|
|
7
|
-
import { h as a, m as o, p as s, t as c, v as l } from "./smart-card-
|
|
8
|
-
import {
|
|
9
|
-
import { t as
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
3
|
+
import { t } from "./utils-CF3c95Io.js";
|
|
4
|
+
import { n } from "./buttons-BbfzgczK.js";
|
|
5
|
+
import { c as r } from "./typography-CSyJrh28.js";
|
|
6
|
+
import { t as i } from "./structure-C0V0_Fyf.js";
|
|
7
|
+
import { h as a, m as o, p as s, t as c, v as l } from "./smart-card-CqkzQsK-.js";
|
|
8
|
+
import { n as u, t as d } from "./composition.recipes-COdiFhxB.js";
|
|
9
|
+
import { t as f } from "./input-Cdw4k0fb.js";
|
|
10
|
+
import { t as p } from "./form-field-CsgRmdit.js";
|
|
11
|
+
import { useMemo as m } from "react";
|
|
12
|
+
import { jsx as h, jsxs as g } from "react/jsx-runtime";
|
|
13
|
+
import { Controller as _, useForm as v } from "react-hook-form";
|
|
13
14
|
//#region src/components/base/forms/controlled-form-field.strings.ts
|
|
14
|
-
var
|
|
15
|
+
var y = {
|
|
15
16
|
required: "This field is required",
|
|
16
17
|
requiredWithLabel: "{{label}} is required",
|
|
17
18
|
invalid: "Invalid value"
|
|
18
19
|
};
|
|
19
|
-
function
|
|
20
|
+
function b(e, t) {
|
|
20
21
|
return e.replace(/\{\{\s*label\s*\}\}/g, t);
|
|
21
22
|
}
|
|
22
23
|
//#endregion
|
|
23
24
|
//#region src/components/base/forms/controlled-form-field.tsx
|
|
24
|
-
function
|
|
25
|
-
let l = e(
|
|
26
|
-
return /* @__PURE__ */
|
|
25
|
+
function x({ name: n, control: r, rules: i, error: a, strings: o, children: s, ...c }) {
|
|
26
|
+
let l = e(y, o);
|
|
27
|
+
return /* @__PURE__ */ h(_, {
|
|
27
28
|
name: n,
|
|
28
29
|
control: r,
|
|
29
30
|
rules: i,
|
|
30
31
|
render: ({ field: e, fieldState: r }) => {
|
|
31
|
-
let i = r.error?.message || (r.error ? r.error.type === "required" ? typeof c.label == "string" ?
|
|
32
|
-
return /* @__PURE__ */ p
|
|
32
|
+
let i = r.error?.message || (r.error ? r.error.type === "required" ? typeof c.label == "string" ? b(l.requiredWithLabel, c.label) : l.required : l.invalid : void 0), o = (typeof a == "function" ? a(n) : a) || i || void 0, u = typeof o == "string" ? o : i, d = !!o;
|
|
33
|
+
return /* @__PURE__ */ h(p, {
|
|
33
34
|
...c,
|
|
34
35
|
error: o,
|
|
35
|
-
htmlFor: n,
|
|
36
36
|
className: t("controlled-form-field--component", c.className),
|
|
37
|
-
children: s(e,
|
|
37
|
+
children: s(e, u, d, r)
|
|
38
38
|
});
|
|
39
39
|
}
|
|
40
40
|
});
|
|
41
41
|
}
|
|
42
|
-
|
|
42
|
+
x.displayName = "ControlledFormField";
|
|
43
|
+
//#endregion
|
|
44
|
+
//#region src/components/base/forms/server-errors.ts
|
|
45
|
+
function S(e, t, { fields: n, root: r = "root.server" }) {
|
|
46
|
+
if (!t || typeof t != "object" || Array.isArray(t)) return 0;
|
|
47
|
+
let i = new Set(n), a = [], o = 0;
|
|
48
|
+
for (let [n, r] of Object.entries(t)) {
|
|
49
|
+
let t = typeof r == "string" ? r.trim() ? r : void 0 : Array.isArray(r) && r.filter((e) => typeof e == "string" && e.trim() !== "").join("\n") || void 0;
|
|
50
|
+
t && (i.has(n) ? (e(n, {
|
|
51
|
+
type: "server",
|
|
52
|
+
message: t
|
|
53
|
+
}), o++) : a.push(t));
|
|
54
|
+
}
|
|
55
|
+
return a.length && (e(r, {
|
|
56
|
+
type: "server",
|
|
57
|
+
message: a.join("\n")
|
|
58
|
+
}), o++), o;
|
|
59
|
+
}
|
|
43
60
|
//#endregion
|
|
44
61
|
//#region src/components/base/forms/workflow.tsx
|
|
45
|
-
function
|
|
62
|
+
function C(e) {
|
|
46
63
|
return typeof e == "string" || typeof e == "number" || typeof e == "bigint";
|
|
47
64
|
}
|
|
48
|
-
function
|
|
49
|
-
return /* @__PURE__ */
|
|
65
|
+
function w({ title: e, description: n, actions: r, children: i, footer: a, surface: o = "card", padding: s, className: l, contentClassName: u }) {
|
|
66
|
+
return /* @__PURE__ */ h(c, {
|
|
50
67
|
"data-component": "form-section",
|
|
51
68
|
"data-slot": "form-section",
|
|
52
69
|
title: e,
|
|
@@ -54,36 +71,37 @@ function x({ title: e, description: n, actions: r, children: i, footer: a, surfa
|
|
|
54
71
|
headerAction: r,
|
|
55
72
|
footerSlot: a,
|
|
56
73
|
surface: o,
|
|
57
|
-
|
|
58
|
-
|
|
74
|
+
padding: s,
|
|
75
|
+
className: t("form-section--component", l),
|
|
76
|
+
contentClassName: t("form-section--content grid", d.related, u),
|
|
59
77
|
children: i
|
|
60
78
|
});
|
|
61
79
|
}
|
|
62
|
-
function
|
|
80
|
+
function T({ children: e, leading: n, trailing: a, sticky: o = !1, className: s }) {
|
|
63
81
|
let c = a ?? e;
|
|
64
|
-
return /* @__PURE__ */
|
|
82
|
+
return /* @__PURE__ */ h("div", {
|
|
65
83
|
className: t("form-actions-bar--component @container/form-actions-bar", o && "sticky bottom-0 z-30", s),
|
|
66
|
-
children: /* @__PURE__ */
|
|
84
|
+
children: /* @__PURE__ */ h("div", {
|
|
67
85
|
"data-component": "form-actions-bar",
|
|
68
86
|
"data-slot": "form-actions-bar",
|
|
69
87
|
className: "form-actions-bar--row border-t border-border bg-background p-surface",
|
|
70
|
-
children: /* @__PURE__ */
|
|
88
|
+
children: /* @__PURE__ */ g("div", {
|
|
71
89
|
className: "form-actions-bar--layout flex min-w-0 flex-col gap-space-lg @md/form-actions-bar:flex-row @md/form-actions-bar:items-center @md/form-actions-bar:flex-nowrap",
|
|
72
|
-
children: [n != null && /* @__PURE__ */
|
|
90
|
+
children: [n != null && /* @__PURE__ */ h("div", {
|
|
73
91
|
"data-slot": "form-actions-leading",
|
|
74
92
|
className: "form-actions-bar--leading min-w-0 flex-1",
|
|
75
|
-
children:
|
|
93
|
+
children: C(n) ? /* @__PURE__ */ h(r, {
|
|
76
94
|
tag: "span",
|
|
77
95
|
size: "xs",
|
|
78
96
|
type: "secondary",
|
|
79
97
|
className: "form-actions-bar--leading-text",
|
|
80
98
|
children: n
|
|
81
99
|
}) : n
|
|
82
|
-
}), c != null && /* @__PURE__ */
|
|
100
|
+
}), c != null && /* @__PURE__ */ h(i, {
|
|
83
101
|
"data-slot": "form-actions-trailing",
|
|
84
102
|
wrap: !0,
|
|
85
103
|
direction: "horizontal",
|
|
86
|
-
gap:
|
|
104
|
+
gap: u.commands,
|
|
87
105
|
justify: "end",
|
|
88
106
|
className: "form-actions-bar--trailing min-w-0 w-full max-w-full shrink-0 @md/form-actions-bar:ml-auto @md/form-actions-bar:w-auto @md/form-actions-bar:shrink",
|
|
89
107
|
children: c
|
|
@@ -92,53 +110,53 @@ function S({ children: e, leading: n, trailing: a, sticky: o = !1, className: s
|
|
|
92
110
|
})
|
|
93
111
|
});
|
|
94
112
|
}
|
|
95
|
-
function
|
|
96
|
-
return /* @__PURE__ */
|
|
113
|
+
function E({ title: e, description: n, errors: c = [], action: u, className: d }) {
|
|
114
|
+
return /* @__PURE__ */ g(s, {
|
|
97
115
|
"data-component": "error-summary",
|
|
98
116
|
"data-slot": "error-summary",
|
|
99
117
|
tone: "destructive",
|
|
100
118
|
className: t("error-summary--component", d),
|
|
101
119
|
children: [
|
|
102
|
-
/* @__PURE__ */
|
|
103
|
-
!!n && /* @__PURE__ */
|
|
104
|
-
c.length > 0 && /* @__PURE__ */
|
|
105
|
-
render: /* @__PURE__ */
|
|
120
|
+
/* @__PURE__ */ h(l, { children: e }),
|
|
121
|
+
!!n && /* @__PURE__ */ h(a, { children: n }),
|
|
122
|
+
c.length > 0 && /* @__PURE__ */ h(i, {
|
|
123
|
+
render: /* @__PURE__ */ h("ul", {}),
|
|
106
124
|
gap: "xs",
|
|
107
125
|
"data-slot": "error-summary-list",
|
|
108
126
|
className: "error-summary--list col-start-2 m-0 list-disc ps-space-xl text-sm text-muted-foreground",
|
|
109
|
-
children: c.map((e, t) => /* @__PURE__ */
|
|
127
|
+
children: c.map((e, t) => /* @__PURE__ */ h("li", { children: typeof e == "string" || typeof e == "number" || typeof e == "bigint" ? /* @__PURE__ */ h(r, {
|
|
110
128
|
tag: "span",
|
|
111
129
|
type: "secondary",
|
|
112
130
|
children: e
|
|
113
131
|
}) : e }, t))
|
|
114
132
|
}),
|
|
115
|
-
!!u && /* @__PURE__ */
|
|
133
|
+
!!u && /* @__PURE__ */ h(o, { children: u })
|
|
116
134
|
]
|
|
117
135
|
});
|
|
118
136
|
}
|
|
119
|
-
function
|
|
120
|
-
return /* @__PURE__ */
|
|
137
|
+
function D({ title: e, description: n, actions: r, tone: o = "warning", className: c }) {
|
|
138
|
+
return /* @__PURE__ */ g(s, {
|
|
121
139
|
"data-component": "dirty-state-banner",
|
|
122
140
|
"data-slot": "dirty-state-banner",
|
|
123
141
|
tone: o,
|
|
124
142
|
className: t("dirty-state-banner--component", c),
|
|
125
143
|
children: [
|
|
126
|
-
/* @__PURE__ */
|
|
127
|
-
!!n && /* @__PURE__ */
|
|
128
|
-
r != null && /* @__PURE__ */
|
|
144
|
+
/* @__PURE__ */ h(l, { children: e }),
|
|
145
|
+
!!n && /* @__PURE__ */ h(a, { children: n }),
|
|
146
|
+
r != null && /* @__PURE__ */ h("div", {
|
|
129
147
|
className: "dirty-state-banner--actions col-start-2 min-w-0 pt-space-sm",
|
|
130
|
-
children: /* @__PURE__ */
|
|
148
|
+
children: /* @__PURE__ */ h(i, {
|
|
131
149
|
direction: "horizontal",
|
|
132
150
|
wrap: !0,
|
|
133
|
-
gap:
|
|
151
|
+
gap: u.commands,
|
|
134
152
|
children: r
|
|
135
153
|
})
|
|
136
154
|
})
|
|
137
155
|
]
|
|
138
156
|
});
|
|
139
157
|
}
|
|
140
|
-
function
|
|
141
|
-
return /* @__PURE__ */
|
|
158
|
+
function O({ submitting: e = !1, dirty: r = !0, disableWhenPristine: i = !1, disabled: a, children: o, ...s }) {
|
|
159
|
+
return /* @__PURE__ */ h(n, {
|
|
142
160
|
tone: "primary",
|
|
143
161
|
...s,
|
|
144
162
|
"data-component": "submit-state-button",
|
|
@@ -152,43 +170,43 @@ function T({ submitting: e = !1, dirty: r = !0, disableWhenPristine: i = !1, dis
|
|
|
152
170
|
}
|
|
153
171
|
//#endregion
|
|
154
172
|
//#region src/components/base/forms/operation-password-form.tsx
|
|
155
|
-
function
|
|
173
|
+
function k(e) {
|
|
156
174
|
let { formId: t, onSubmit: n, errors: a, loading: o = !1, label: s } = e, c = ((e) => {
|
|
157
175
|
let t = a?.[e];
|
|
158
176
|
return Array.isArray(t) ? t[0] : t;
|
|
159
|
-
})("password"), l = c ? () => c : void 0,
|
|
177
|
+
})("password"), l = c ? () => c : void 0, u = (Array.isArray(a?.general) ? a.general[0] : a?.general) || (Array.isArray(a?.server) ? a.server[0] : a?.server), d = m(() => ({ password: "" }), []), { handleSubmit: p, control: _ } = v({ defaultValues: d }), y = async (e) => {
|
|
160
178
|
await n({ password: e.password });
|
|
161
|
-
},
|
|
162
|
-
return /* @__PURE__ */
|
|
163
|
-
render: /* @__PURE__ */
|
|
179
|
+
}, b = o;
|
|
180
|
+
return /* @__PURE__ */ g(i, {
|
|
181
|
+
render: /* @__PURE__ */ h("form", {}),
|
|
164
182
|
gap: "xl",
|
|
165
183
|
id: t,
|
|
166
|
-
onSubmit:
|
|
184
|
+
onSubmit: p(y),
|
|
167
185
|
className: "operation-password-form--component",
|
|
168
|
-
children: [!!
|
|
186
|
+
children: [!!u && /* @__PURE__ */ h(r, {
|
|
169
187
|
type: "error",
|
|
170
|
-
children:
|
|
171
|
-
}), /* @__PURE__ */
|
|
188
|
+
children: u
|
|
189
|
+
}), /* @__PURE__ */ h(x, {
|
|
172
190
|
name: "password",
|
|
173
|
-
control:
|
|
191
|
+
control: _,
|
|
174
192
|
error: l,
|
|
175
193
|
label: s,
|
|
176
194
|
required: !0,
|
|
177
|
-
children: (e, t, n) => /* @__PURE__ */
|
|
195
|
+
children: (e, t, n) => /* @__PURE__ */ h(f, {
|
|
178
196
|
type: "password",
|
|
179
197
|
value: e.value ?? "",
|
|
180
198
|
onChange: e.onChange,
|
|
181
199
|
onBlur: e.onBlur,
|
|
182
200
|
name: e.name,
|
|
183
201
|
invalid: n,
|
|
184
|
-
disabled:
|
|
202
|
+
disabled: b,
|
|
185
203
|
autoFocus: !0
|
|
186
204
|
})
|
|
187
205
|
})]
|
|
188
206
|
});
|
|
189
207
|
}
|
|
190
|
-
|
|
208
|
+
k.displayName = "OperationPasswordForm";
|
|
191
209
|
//#endregion
|
|
192
|
-
export {
|
|
210
|
+
export { w as a, x as c, T as i, y as l, D as n, O as o, E as r, S as s, k as t };
|
|
193
211
|
|
|
194
|
-
//# sourceMappingURL=forms-
|
|
212
|
+
//# sourceMappingURL=forms-BV5m5aQF.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"forms-BV5m5aQF.js","names":["Text","Stack","AlertDescription","AlertAction","Alert","Card","AlertTitle","compositionRhythm","compositionClasses","Input","FormField","defaultControlledFormFieldStrings","interpolateControlledFormFieldString","template","label","ControlledFormField","errorProp","stringsProp","chromeProps","strings","useStrings","Controller","validationError","fieldState","resolvedError","name","errorMessage","invalid","cn","children","field","applyServerErrors","errors","allowed","fields","rootMessages","applied","value","message","part","setError","root","isSimpleText","FormSection","actions","footer","className","contentClassName","FormActionsBar","trailing","sticky","leading","ErrorSummary","title","description","error","index","action","DirtyStateBanner","SubmitStateButton","props","Button","submitting","disabled","disableWhenPristine","dirty","OperationPasswordForm","passwordError","passwordErrorFn","topLevelError","defaultValues","useMemo","useForm","submit","onSubmit","values","loading","formId","handleSubmit"],"sources":["../src/components/base/forms/controlled-form-field.strings.ts","../src/components/base/forms/controlled-form-field.tsx","../src/components/base/forms/server-errors.ts","../src/components/base/forms/workflow.tsx","../src/components/base/forms/operation-password-form.tsx"],"sourcesContent":["export interface ControlledFormFieldStrings {\n\trequired: string;\n\trequiredWithLabel: string;\n\tinvalid: string;\n}\n\nexport const defaultControlledFormFieldStrings: ControlledFormFieldStrings = {\n\trequired: 'This field is required',\n\trequiredWithLabel: '{{label}} is required',\n\tinvalid: 'Invalid value',\n};\n\nexport function interpolateControlledFormFieldString(template: string, label: string) {\n\treturn template.replace(/\\{\\{\\s*label\\s*\\}\\}/g, label);\n}\n","/**\n * ControlledFormField — react-hook-form integration for the presentational\n * `FormField` component. Runtime state bindings stay in this module; the\n * published family still reports RHF for its exported bindings and types.\n */\nimport type { ComponentProps, ReactNode } from 'react';\nimport {\n\tController,\n\ttype Control,\n\ttype ControllerFieldState,\n\ttype ControllerRenderProps,\n\ttype FieldPath,\n\ttype FieldValues,\n\ttype RegisterOptions,\n} from 'react-hook-form';\n\nimport { FormField } from './form-field';\nimport {\n\tdefaultControlledFormFieldStrings,\n\tinterpolateControlledFormFieldString,\n\ttype ControlledFormFieldStrings,\n} from './controlled-form-field.strings';\nimport { useStrings, type StringsProp } from '../../../lib/strings';\nimport { cn } from '../../../lib/utils';\n\ntype FieldChromeProps = Omit<\n\tComponentProps<typeof FormField>,\n\t'children' | 'error'\n>;\n\nexport type FormFieldErrorGetter<TName extends string> = (field: TName) => string | undefined;\n\nexport interface ControlledFormFieldProps<\n\tTFieldValues extends FieldValues,\n\tTName extends FieldPath<TFieldValues>,\n> extends FieldChromeProps {\n\t/** Field name in the react-hook-form schema. */\n\tname: TName;\n\t/** The form's `control` object from `useForm`. */\n\tcontrol: Control<TFieldValues>;\n\t/** Validation rules passed to react-hook-form. */\n\trules?: RegisterOptions<TFieldValues, TName>;\n\t/** Validation message, overriding the one derived from form state. */\n\terror?: ReactNode | FormFieldErrorGetter<TName>;\n\t/** Overrides the field's own copy. */\n\tstrings?: StringsProp<ControlledFormFieldStrings>;\n\tchildren: (\n\t\tfield: ControllerRenderProps<TFieldValues, TName>,\n\t\t/** Validation message, overriding the one derived from form state. */\n\t\terror: string | undefined,\n\t\tinvalid: boolean,\n\t\tfieldState: ControllerFieldState,\n\t) => ReactNode;\n}\n\nexport function ControlledFormField<\n\tTFieldValues extends FieldValues,\n\tTName extends FieldPath<TFieldValues>,\n>({\n\tname,\n\tcontrol,\n\trules,\n\terror: errorProp,\n\tstrings: stringsProp,\n\tchildren,\n\t...chromeProps\n}: ControlledFormFieldProps<TFieldValues, TName>) {\n\tconst strings = useStrings(defaultControlledFormFieldStrings, stringsProp);\n\n\treturn (\n\t\t<Controller\n\t\t\tname={name}\n\t\t\tcontrol={control}\n\t\t\trules={rules}\n\t\t\trender={({ field, fieldState }) => {\n\t\t\t\tconst validationError = fieldState.error?.message\n\t\t\t\t\t|| (fieldState.error\n\t\t\t\t\t\t? fieldState.error.type === 'required'\n\t\t\t\t\t\t\t? typeof chromeProps.label === 'string'\n\t\t\t\t\t\t\t\t? interpolateControlledFormFieldString(strings.requiredWithLabel, chromeProps.label)\n\t\t\t\t\t\t\t\t: strings.required\n\t\t\t\t\t\t\t: strings.invalid\n\t\t\t\t\t\t: undefined);\n\t\t\t\tconst customError = typeof errorProp === 'function' ? errorProp(name) : errorProp;\n\t\t\t\tconst resolvedError = customError || validationError || undefined;\n\t\t\t\t// Rich chrome does not widen the established string callback contract.\n\t\t\t\tconst errorMessage = typeof resolvedError === 'string' ? resolvedError : validationError;\n\t\t\t\tconst invalid = Boolean(resolvedError);\n\n\t\t\t\treturn (\n\t\t\t\t\t<FormField\n\t\t\t\t\t\t{...chromeProps}\n\t\t\t\t\t\terror={resolvedError}\n\t\t\t\t\t\tclassName={cn('controlled-form-field--component', chromeProps.className)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{children(field, errorMessage, invalid, fieldState)}\n\t\t\t\t\t</FormField>\n\t\t\t\t);\n\t\t\t}}\n\t\t/>\n\t);\n}\n\nControlledFormField.displayName = 'ControlledFormField';\n\nexport {\n\tdefaultControlledFormFieldStrings,\n\ttype ControlledFormFieldStrings,\n} from './controlled-form-field.strings';\n","import type { FieldPath, FieldValues, UseFormSetError } from 'react-hook-form';\n\n/** Flat server validation messages; transport libraries keep ownership of requests. */\nexport type ServerErrors<TName extends string = string> = Partial<Record<TName, string | readonly string[]>>;\n\nexport interface ApplyServerErrorsOptions<TFieldValues extends FieldValues> {\n\t/** Allowed schema paths. Unknown server keys are reported at the root. */\n\tfields: readonly FieldPath<TFieldValues>[];\n\t/** Root error path for unknown fields and general errors. Defaults to root.server. */\n\troot?: `root.${string}`;\n}\n\n/**\n * Apply an untrusted transport error bag without importing a transport or RHF at\n * runtime. The allowlist prevents unknown server keys from becoming form fields.\n * Invalid/empty messages are ignored; arrays retain every string message.\n * Returns the number of field/root errors applied.\n */\nexport function applyServerErrors<TFieldValues extends FieldValues>(\n\tsetError: UseFormSetError<TFieldValues>,\n\terrors: unknown,\n\t{ fields, root = 'root.server' }: ApplyServerErrorsOptions<TFieldValues>,\n): number {\n\tif (!errors || typeof errors !== 'object' || Array.isArray(errors)) return 0;\n\tconst allowed = new Set<string>(fields);\n\tconst rootMessages: string[] = [];\n\tlet applied = 0;\n\tfor (const [name, value] of Object.entries(errors)) {\n\t\tconst message = typeof value === 'string'\n\t\t\t? value.trim() ? value : undefined\n\t\t\t: Array.isArray(value) ? value.filter((part): part is string => typeof part === 'string' && part.trim() !== '').join('\\n') || undefined : undefined;\n\t\tif (!message) continue;\n\t\tif (allowed.has(name)) {\n\t\t\tsetError(name as FieldPath<TFieldValues>, { type: 'server', message });\n\t\t\tapplied++;\n\t\t} else rootMessages.push(message);\n\t}\n\tif (rootMessages.length) {\n\t\tsetError(root, { type: 'server', message: rootMessages.join('\\n') });\n\t\tapplied++;\n\t}\n\treturn applied;\n}\n","/** Form workflow primitives — section chrome, errors, dirty state, and submit state. */\nimport type { ReactNode } from 'react';\n\nimport { Button } from '../buttons';\nimport type { ButtonProps } from '../buttons';\nimport { Card, type CardProps } from '../cards';\nimport { Stack } from '../structure';\nimport { compositionClasses, compositionRhythm } from '../structure/composition.recipes';\nimport type { SmartCardSurface } from '../cards';\nimport { Alert, AlertAction, AlertDescription, AlertTitle } from '../feedback';\nimport type { AlertTone } from '../feedback';\nimport { Text } from '../../typography';\nimport { cn } from '../../../lib/utils';\n\nfunction isSimpleText(value: ReactNode): value is string | number | bigint {\n\treturn typeof value === 'string' || typeof value === 'number' || typeof value === 'bigint';\n}\n\nexport interface FormSectionProps {\n\t/** Section title. */\n\ttitle?: ReactNode;\n\t/** Supporting sentence under the title. */\n\tdescription?: ReactNode;\n\t/** Controls in the section header. */\n\tactions?: ReactNode;\n\tchildren?: ReactNode;\n\t/** Content below the section body. */\n\tfooter?: ReactNode;\n\t/** Outer chrome. Use `flat` with `padding=\"none\"` inside a padded Card. */\n\tsurface?: SmartCardSurface;\n\t/** Card region insets. Defaults to Card's ordinary inset; use `none` when the parent already owns padding. */\n\tpadding?: CardProps['padding'];\n\tclassName?: string;\n\t/** Merged onto the section body. */\n\tcontentClassName?: string;\n}\n\nexport function FormSection({\n\ttitle,\n\tdescription,\n\tactions,\n\tchildren,\n\tfooter,\n\tsurface = 'card',\n\tpadding,\n\tclassName,\n\tcontentClassName,\n}: FormSectionProps) {\n\treturn (\n\t\t<Card\n\t\t\tdata-component=\"form-section\"\n\t\t\tdata-slot=\"form-section\"\n\t\t\ttitle={title}\n\t\t\tdescription={description}\n\t\t\theaderAction={actions}\n\t\t\tfooterSlot={footer}\n\t\t\tsurface={surface}\n\t\t\tpadding={padding}\n\t\t\tclassName={cn('form-section--component', className)}\n\t\t\tcontentClassName={cn('form-section--content grid', compositionClasses.related, contentClassName)}\n\t\t>\n\t\t\t{children}\n\t\t</Card>\n\t);\n}\n\nexport interface FormActionsBarProps {\n\t/** Action content used when `trailing` is not provided. */\n\tchildren?: ReactNode;\n\t/** Optional status or context shown before the actions. Scalar copy uses secondary Typography. */\n\tleading?: ReactNode;\n\t/** Preferred action slot. When provided, it takes precedence over `children`. */\n\ttrailing?: ReactNode;\n\t/** Keep the bar attached to the bottom of its nearest scrolling ancestor. */\n\tsticky?: boolean;\n\tclassName?: string;\n}\n\n/** Responsive form-footer chrome for status and consumer-owned actions. */\nexport function FormActionsBar({\n\tchildren,\n\tleading,\n\ttrailing,\n\tsticky = false,\n\tclassName,\n}: FormActionsBarProps) {\n\tconst actions = trailing ?? children;\n\n\treturn (\n\t\t/*\n\t\t * Two elements, because the bar has to be measured and stick at the same\n\t\t * time and one element cannot do both. Its stack/row switch depends on its\n\t\t * own width — a form footer is as often in a drawer as at page width — and\n\t\t * an element cannot match its own container query, so the row has to sit\n\t\t * inside the measured box. `sticky` then has to live on the OUTER element:\n\t\t * a sticky child is confined to its parent's box, so a sticky row inside an\n\t\t * auto-height wrapper has nowhere to travel and silently stops sticking.\n\t\t */\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t'form-actions-bar--component @container/form-actions-bar',\n\t\t\t\tsticky && 'sticky bottom-0 z-30',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t>\n\t\t<div\n\t\t\tdata-component=\"form-actions-bar\"\n\t\t\tdata-slot=\"form-actions-bar\"\n\t\t\t// Opaque, so a sticky bar covers content scrolling under it without a blur.\n\t\t\tclassName=\"form-actions-bar--row border-t border-border bg-background p-surface\"\n\t\t>\n\t\t<div className=\"form-actions-bar--layout flex min-w-0 flex-col gap-space-lg @md/form-actions-bar:flex-row @md/form-actions-bar:items-center @md/form-actions-bar:flex-nowrap\">\n\t\t\t{leading != null && (\n\t\t\t\t<div data-slot=\"form-actions-leading\" className=\"form-actions-bar--leading min-w-0 flex-1\">\n\t\t\t\t\t{isSimpleText(leading) ? (\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\ttype=\"secondary\"\n\t\t\t\t\t\t\tclassName=\"form-actions-bar--leading-text\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{leading}\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t) : leading}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t\t{actions != null && (\n\t\t\t\t<Stack\n\t\t\t\t\tdata-slot=\"form-actions-trailing\"\n\t\t\t\t\twrap\n\t\t\t\t\tdirection=\"horizontal\"\n\t\t\t\t\tgap={compositionRhythm.commands}\n\t\t\t\t\tjustify=\"end\"\n\t\t\t\t\tclassName=\"form-actions-bar--trailing min-w-0 w-full max-w-full shrink-0 @md/form-actions-bar:ml-auto @md/form-actions-bar:w-auto @md/form-actions-bar:shrink\"\n\t\t\t\t>\n\t\t\t\t\t{actions}\n\t\t\t\t</Stack>\n\t\t\t)}\n\t\t</div>\n\t\t</div>\n\t\t</div>\n\t);\n}\n\nexport interface ErrorSummaryProps {\n\t/** Section title. */\n\ttitle: ReactNode;\n\t/** Supporting sentence under the title. */\n\tdescription?: ReactNode;\n\t/** Validation messages listed in the error summary. */\n\terrors?: readonly ReactNode[];\n\t/** Control offered alongside the summary. */\n\taction?: ReactNode;\n\tclassName?: string;\n}\n\nexport function ErrorSummary({\n\ttitle,\n\tdescription,\n\terrors = [],\n\taction,\n\tclassName,\n}: ErrorSummaryProps) {\n\treturn (\n\t\t<Alert\n\t\t\tdata-component=\"error-summary\"\n\t\t\tdata-slot=\"error-summary\"\n\t\t\ttone=\"destructive\"\n\t\t\tclassName={cn('error-summary--component', className)}\n\t\t>\n\t\t\t<AlertTitle>{title}</AlertTitle>\n\t\t\t{!!description && <AlertDescription>{description}</AlertDescription>}\n\t\t\t{errors.length > 0 && (\n\t\t\t\t\t// The messages are the summary's content: they keep the description's\n\t\t\t\t\t// size and ink, and the bullets take that ink too.\n\t\t\t\t\t<Stack render={<ul />} gap=\"xs\" data-slot=\"error-summary-list\" className=\"error-summary--list col-start-2 m-0 list-disc ps-space-xl text-sm text-muted-foreground\">\n\t\t\t\t\t{errors.map((error, index) => (\n\t\t\t\t\t\t<li key={index}>\n\t\t\t\t\t\t\t{typeof error === 'string' || typeof error === 'number' || typeof error === 'bigint' ? (\n\t\t\t\t\t\t\t\t<Text tag=\"span\" type=\"secondary\">\n\t\t\t\t\t\t\t\t\t{error}\n\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t) : error}\n\t\t\t\t\t\t</li>\n\t\t\t\t\t))}\n\t\t\t\t\t</Stack>\n\t\t\t)}\n\t\t\t{!!action && <AlertAction>{action}</AlertAction>}\n\t\t</Alert>\n\t);\n}\n\nexport interface DirtyStateBannerProps {\n\t/** Section title. */\n\ttitle: ReactNode;\n\t/** Supporting sentence under the title. */\n\tdescription?: ReactNode;\n\t/** Controls in the section header. */\n\tactions?: ReactNode;\n\t/** Semantic tone of the banner. */\n\ttone?: Extract<AlertTone, 'neutral' | 'info' | 'warning'>;\n\tclassName?: string;\n}\n\nexport function DirtyStateBanner({\n\ttitle,\n\tdescription,\n\tactions,\n\ttone = 'warning',\n\tclassName,\n}: DirtyStateBannerProps) {\n\treturn (\n\t\t<Alert\n\t\t\tdata-component=\"dirty-state-banner\"\n\t\t\tdata-slot=\"dirty-state-banner\"\n\t\t\ttone={tone}\n\t\t\tclassName={cn('dirty-state-banner--component', className)}\n\t\t>\n\t\t\t<AlertTitle>{title}</AlertTitle>\n\t\t\t{!!description && (\n\t\t\t\t<AlertDescription>\n\t\t\t\t\t{description}\n\t\t\t\t</AlertDescription>\n\t\t\t)}\n\t\t\t{actions != null && (\n\t\t\t\t<div className=\"dirty-state-banner--actions col-start-2 min-w-0 pt-space-sm\">\n\t\t\t\t\t<Stack direction=\"horizontal\" wrap gap={compositionRhythm.commands}>{actions}</Stack>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</Alert>\n\t);\n}\n\nexport interface SubmitStateButtonProps extends Omit<ButtonProps, 'loading'> {\n\t/** Semantic color. Defaults to `primary`: submitting is the form's main command. */\n\ttone?: ButtonProps['tone'];\n\t/** Shows the pending state and blocks repeat submissions. */\n\tsubmitting?: boolean;\n\t/** Whether the form has unsaved changes. */\n\tdirty?: boolean;\n\t/** Disables submit until `dirty` is true, so a clean form cannot be re-saved. */\n\tdisableWhenPristine?: boolean;\n}\n\nexport function SubmitStateButton({\n\tsubmitting = false,\n\tdirty = true,\n\tdisableWhenPristine = false,\n\tdisabled,\n\tchildren,\n\t...props\n}: SubmitStateButtonProps) {\n\treturn (\n\t\t<Button\n\t\t\t// Submitting is the form's main command; props can still choose another tone.\n\t\t\ttone=\"primary\"\n\t\t\t{...props}\n\t\t\tdata-component=\"submit-state-button\"\n\t\t\tdata-slot=\"submit-state-button\"\n\t\t\ttype={props.type ?? 'submit'}\n\t\t\tloading={submitting}\n\t\t\tdisabled={disabled || (disableWhenPristine && !dirty)}\n\t\t\tclassName={cn('submit-state-button--component', props.className)}\n\t\t>\n\t\t\t{children}\n\t\t</Button>\n\t);\n}\n","import { useMemo } from 'react';\nimport type { SubmitHandler } from 'react-hook-form';\nimport { useForm } from 'react-hook-form';\n\nimport { ControlledFormField } from './controlled-form-field';\nimport { Input } from '../text-inputs';\nimport { Stack } from '../structure';\nimport { Text } from '../../typography';\n\nexport type ErrorBag = Record<string, string | string[] | undefined>;\n\nexport interface OperationPasswordFormProps {\n\tformId: string;\n\tonSubmit: (data: { password: string }) => Promise<void>;\n\terrors?: ErrorBag;\n\t/** Shows the pending indicator. */\n\tloading?: boolean;\n\t/** Display label. */\n\tlabel: string;\n}\n\ninterface PasswordFormValues {\n\tpassword: string;\n}\n\nexport function OperationPasswordForm(props: OperationPasswordFormProps) {\n\tconst { formId, onSubmit, errors, loading = false, label } = props;\n\n\tconst getError = (field: keyof PasswordFormValues): string | undefined => {\n\t\tconst value = errors?.[field];\n\t\treturn Array.isArray(value) ? value[0] : value;\n\t};\n\tconst passwordError = getError('password');\n\tconst passwordErrorFn = passwordError ? () => passwordError : undefined;\n\n\tconst topLevelError =\n\t\t(Array.isArray(errors?.general) ? errors.general[0] : errors?.general) ||\n\t\t(Array.isArray(errors?.server) ? errors.server[0] : errors?.server);\n\n\tconst defaultValues = useMemo<PasswordFormValues>(() => ({ password: '' }), []);\n\n\tconst { handleSubmit, control } = useForm<PasswordFormValues>({ defaultValues });\n\n\tconst submit: SubmitHandler<PasswordFormValues> = async (values) => {\n\t\tawait onSubmit({ password: values.password });\n\t};\n\n\tconst disabled = loading;\n\n\treturn (\n\t\t<Stack\n\t\t\trender={<form />}\n\t\t\tgap=\"xl\"\n\t\t\tid={formId}\n\t\t\tonSubmit={handleSubmit(submit)}\n\t\t\tclassName=\"operation-password-form--component\"\n\t\t>\n\t\t\t{Boolean(topLevelError) && (\n\t\t\t\t<Text\n\t\t\t\t\ttype=\"error\"\n\t\t\t\t>\n\t\t\t\t\t{topLevelError}\n\t\t\t\t</Text>\n\t\t\t)}\n\n\t\t\t<ControlledFormField\n\t\t\t\tname=\"password\"\n\t\t\t\tcontrol={control}\n\t\t\t\terror={passwordErrorFn}\n\t\t\t\tlabel={label}\n\t\t\t\trequired\n\t\t\t>\n\t\t\t\t{(field, _error, invalid) => (\n\t\t\t\t\t<Input\n\t\t\t\t\t\ttype=\"password\"\n\t\t\t\t\t\tvalue={field.value ?? ''}\n\t\t\t\t\t\tonChange={field.onChange}\n\t\t\t\t\t\tonBlur={field.onBlur}\n\t\t\t\t\t\tname={field.name}\n\t\t\t\t\t\tinvalid={invalid}\n\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\tautoFocus\n\t\t\t\t\t/>\n\t\t\t\t)}\n\t\t\t</ControlledFormField>\n\t\t</Stack>\n\t);\n}\n\nOperationPasswordForm.displayName = 'OperationPasswordForm';\n"],"mappings":"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"}
|