themelia-react-ui 2.0.4 → 2.0.5
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 +135 -0
- package/README.md +113 -18
- package/dist/{accordion-96o0pN62.js → accordion-B9MHG0cT.js} +11 -11
- package/dist/accordion-B9MHG0cT.js.map +1 -0
- package/dist/{action-menu-CHgs8vmj.js → action-menu-Dr8K-ghE.js} +48 -45
- package/dist/action-menu-Dr8K-ghE.js.map +1 -0
- package/dist/{affordance-geometry.generated-B8yGOr8-.js → affordance-geometry.generated-P-aVJisu.js} +36 -36
- package/dist/affordance-geometry.generated-P-aVJisu.js.map +1 -0
- package/dist/{ai-artifact-BZUGwBq6.js → ai-artifact-C58tQcBy.js} +210 -174
- package/dist/ai-artifact-C58tQcBy.js.map +1 -0
- package/dist/app-shell-B_IuNWOo.js +321 -0
- package/dist/app-shell-B_IuNWOo.js.map +1 -0
- package/dist/{attachment-DkoqHPPl.js → attachment-Dg_69lPS.js} +9 -9
- package/dist/{attachment-DkoqHPPl.js.map → attachment-Dg_69lPS.js.map} +1 -1
- package/dist/{auth-D2FVZ1MH.js → auth-DTkkshS8.js} +43 -46
- package/dist/auth-DTkkshS8.js.map +1 -0
- package/dist/{avatar-DWO_HHhB.js → avatar-CeZaFmNH.js} +8 -8
- package/dist/avatar-CeZaFmNH.js.map +1 -0
- package/dist/{badge-DErMA7ul.js → badge-xIiV_E7f.js} +5 -5
- package/dist/{badge-DErMA7ul.js.map → badge-xIiV_E7f.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 +2 -372
- 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 +2 -2
- 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 +2 -2
- 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 +7 -7
- 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 +12 -12
- package/dist/base/repeaters.js.map +1 -1
- package/dist/base/sheet.js +1 -1
- package/dist/base/sidebar.js +2 -2
- package/dist/base/signature-pad.js +7 -7
- package/dist/base/signature-pad.js.map +1 -1
- 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 +36 -36
- package/dist/base/toaster.js.map +1 -1
- package/dist/base/tree.js +1 -1
- package/dist/base/upload-queue.js +1 -1
- package/dist/base/upload.js +3 -3
- package/dist/base/value-inputs.js +1 -1
- package/dist/{batch-action-bar-CdfIkCsV.js → batch-action-bar-Cb8cuvyy.js} +6 -6
- package/dist/batch-action-bar-Cb8cuvyy.js.map +1 -0
- package/dist/blocks/admin.js +21 -21
- package/dist/blocks/admin.js.map +1 -1
- package/dist/blocks/ai.js +230 -216
- package/dist/blocks/ai.js.map +1 -1
- package/dist/blocks/analytics/usage-card.js +1 -1
- package/dist/blocks/analytics.js +325 -306
- 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 +1259 -1184
- package/dist/blocks/commerce.js.map +1 -1
- package/dist/blocks/data-display.js +2 -2
- package/dist/blocks/onboarding.js +6 -6
- package/dist/blocks/onboarding.js.map +1 -1
- package/dist/blocks/planning.js +11 -11
- package/dist/blocks/timelines.js +1 -1
- package/dist/{breadcrumbs-B-WFKecD.js → breadcrumbs-J-K2kl4c.js} +6 -6
- package/dist/{breadcrumbs-B-WFKecD.js.map → breadcrumbs-J-K2kl4c.js.map} +1 -1
- package/dist/{button-DkmK-z8E.js → button-S2Cubiiz.js} +3 -3
- package/dist/button-S2Cubiiz.js.map +1 -0
- package/dist/{buttons-BbfzgczK.js → buttons-BedGfygC.js} +16 -16
- package/dist/buttons-BedGfygC.js.map +1 -0
- package/dist/cards-rNX1M4Xn.js +69 -0
- package/dist/cards-rNX1M4Xn.js.map +1 -0
- package/dist/cascader-B1MiqkBq.js +439 -0
- package/dist/cascader-B1MiqkBq.js.map +1 -0
- package/dist/chart-Darg_0Kv.js +162 -0
- package/dist/chart-Darg_0Kv.js.map +1 -0
- package/dist/{checkbox-CzYUTPeJ.js → checkbox-fflqmODR.js} +2 -2
- package/dist/{checkbox-CzYUTPeJ.js.map → checkbox-fflqmODR.js.map} +1 -1
- package/dist/{choice-inputs-JLtij2y4.js → choice-inputs-zUgBZfE4.js} +258 -257
- package/dist/choice-inputs-zUgBZfE4.js.map +1 -0
- package/dist/{code-block-CGNaUtAE.js → code-block-BzmM9Eig.js} +8 -8
- package/dist/code-block-BzmM9Eig.js.map +1 -0
- package/dist/{collapsible-Do4G0zcC.js → collapsible-BkAI_XD4.js} +5 -5
- package/dist/{collapsible-Do4G0zcC.js.map → collapsible-BkAI_XD4.js.map} +1 -1
- package/dist/{collection-content-C0e8SsTm.js → collection-content-gDh1v6O4.js} +3 -3
- package/dist/{collection-content-C0e8SsTm.js.map → collection-content-gDh1v6O4.js.map} +1 -1
- package/dist/combobox-BEx0vJgF.js +362 -0
- package/dist/combobox-BEx0vJgF.js.map +1 -0
- package/dist/{combobox-CBJDs6w_.js → combobox-BwzoXFSG.js} +254 -247
- package/dist/combobox-BwzoXFSG.js.map +1 -0
- package/dist/{command-D8NrBj-b.js → command-CrlPIL6m.js} +11 -11
- package/dist/command-CrlPIL6m.js.map +1 -0
- package/dist/{comments-Di4w0H_S.js → comments-Dmpp0YIc.js} +29 -29
- package/dist/{comments-Di4w0H_S.js.map → comments-Dmpp0YIc.js.map} +1 -1
- package/dist/components/base/action-menu/action-menu.d.ts +7 -1
- package/dist/components/base/buttons/button-group.recipes.d.ts +2 -2
- package/dist/components/base/cards/card.recipes.d.ts +6 -4
- package/dist/components/base/cards/partials/card-primitives.d.ts +9 -2
- package/dist/components/base/cards/partials/smart-card-header-row.d.ts +3 -1
- package/dist/components/base/cards/smart-card.types.d.ts +3 -4
- package/dist/components/base/cascader/cascader-panel.d.ts +76 -0
- package/dist/components/base/chart/chart.d.ts +6 -1
- package/dist/components/base/choice-inputs/choice-types.d.ts +1 -1
- package/dist/components/base/combobox/index.d.ts +4 -2
- package/dist/components/base/feedback/alert.d.ts +1 -1
- package/dist/components/base/forms/form-sizing.d.ts +7 -7
- package/dist/components/base/forms/workflow.d.ts +7 -1
- package/dist/components/base/forms-numeric/coordinates-input.d.ts +4 -0
- package/dist/components/base/metadata-list/metadata-list.d.ts +1 -1
- package/dist/components/base/navigation/dropdown-menu.d.ts +1 -1
- package/dist/components/base/navigation/page-header/page-header-commands.d.ts +14 -7
- package/dist/components/base/navigation/page-header/page-header.d.ts +10 -3
- package/dist/components/base/popover/popover.d.ts +3 -3
- package/dist/components/base/popover/popover.recipes.d.ts +10 -6
- package/dist/components/base/sheet/sheet.d.ts +2 -0
- package/dist/components/base/sidebar/index.d.ts +1 -1
- package/dist/components/base/sidebar/sidebar.d.ts +27 -5
- package/dist/components/base/toaster/index.d.ts +1 -0
- package/dist/components/blocks/ai/ai-file-tree/types.d.ts +1 -1
- package/dist/components/blocks/ai/ai-tool-call/types.d.ts +3 -1
- package/dist/components/blocks/ai/ai.strings.d.ts +2 -0
- package/dist/components/blocks/analytics/metric-comparison/metric-comparison.d.ts +2 -0
- package/dist/components/blocks/analytics/usage-card/usage-card.strings.d.ts +2 -0
- package/dist/components/blocks/commerce/cart-summary/cart-summary.d.ts +1 -1
- package/dist/components/blocks/commerce/cart-summary/types.d.ts +3 -1
- package/dist/components/blocks/commerce/discount-stack/discount-stack.d.ts +1 -1
- package/dist/components/blocks/commerce/discount-stack/types.d.ts +3 -1
- package/dist/components/blocks/commerce/fulfillment-group/fulfillment-group.d.ts +1 -1
- package/dist/components/blocks/commerce/fulfillment-group/types.d.ts +11 -2
- package/dist/components/blocks/commerce/index.d.ts +7 -6
- package/dist/components/blocks/commerce/inventory-section/inventory-section.d.ts +1 -1
- package/dist/components/blocks/commerce/inventory-section/types.d.ts +7 -2
- package/dist/components/blocks/commerce/invoice-header/index.d.ts +2 -1
- package/dist/components/blocks/commerce/invoice-header/invoice-header.d.ts +1 -1
- package/dist/components/blocks/commerce/invoice-header/types.d.ts +20 -6
- package/dist/components/blocks/commerce/invoice-line-items/invoice-line-items.d.ts +1 -1
- package/dist/components/blocks/commerce/invoice-line-items/types.d.ts +24 -7
- package/dist/components/blocks/commerce/invoice-mini/index.d.ts +2 -1
- package/dist/components/blocks/commerce/invoice-mini/types.d.ts +7 -1
- package/dist/components/blocks/commerce/order-customer/order-customer.d.ts +1 -1
- package/dist/components/blocks/commerce/order-customer/types.d.ts +9 -1
- package/dist/components/blocks/commerce/refund-status/refund-status.d.ts +1 -1
- package/dist/components/blocks/commerce/refund-status/types.d.ts +3 -1
- package/dist/components/blocks/commerce/shipment-tracking/shipment-tracking.d.ts +1 -1
- package/dist/components/blocks/commerce/shipment-tracking/types.d.ts +3 -1
- package/dist/components/blocks/commerce/tax-breakdown/tax-breakdown.d.ts +1 -1
- package/dist/components/blocks/commerce/tax-breakdown/types.d.ts +3 -1
- package/dist/components/features/activities/activities.types.d.ts +8 -2
- package/dist/components/features/activities/partials/activity-marker.d.ts +7 -3
- package/dist/components/features/activities/partials/activity-row.d.ts +24 -0
- package/dist/components/features/event-calendar/colors.d.ts +2 -2
- package/dist/components/features/event-calendar/event-calendar.types.d.ts +4 -0
- package/dist/components/features/filters/facets/select-facet.d.ts +2 -1
- package/dist/components/features/filters/filters.strings.d.ts +4 -0
- package/dist/components/features/filters/filters.types.d.ts +3 -0
- package/dist/components/features/filters/partials/filter-editor-header.d.ts +16 -0
- package/dist/components/features/filters/partials/filter-popover-content.d.ts +1 -1
- package/dist/components/features/filters/partials/nested-filter-options.d.ts +21 -0
- package/dist/components/features/filters/partials/regular-filter-content.d.ts +2 -1
- package/dist/components/features/filters/utils/filter-utils.d.ts +21 -3
- package/dist/components/features/global-search/global-search.types.d.ts +2 -0
- package/dist/components/features/global-search/partials/global-search-input.d.ts +10 -0
- package/dist/components/features/global-search/partials/global-search-result-row.d.ts +7 -1
- package/dist/components/features/media-library/media-library.strings.d.ts +2 -0
- package/dist/components/features/media-library/media-library.types.d.ts +14 -4
- package/dist/components/features/media-library/partials/media-library-partials.d.ts +1 -1
- package/dist/components/features/products/components/product-options-matrix.d.ts +1 -1
- package/dist/components/features/products/components/product-variant-editor.d.ts +1 -1
- package/dist/components/features/products/components/product-variants-manager.d.ts +1 -1
- package/dist/components/features/products/products.strings.d.ts +9 -1
- package/dist/components/features/products/products.types.d.ts +43 -6
- package/dist/components/features/resource/resource.d.ts +5 -1
- package/dist/components/features/resource/resource.types.d.ts +12 -1
- package/dist/components/features/rich-text-editor/partials/image-uploads.d.ts +1 -1
- package/dist/components/features/rich-text-editor/rich-text-editor.recipes.d.ts +12 -2
- package/dist/components/features/table/partials/resource-cell.d.ts +22 -5
- package/dist/components/features/table/table.types.d.ts +1 -1
- package/dist/components/layout/app-shell/app-shell.types.d.ts +35 -6
- package/dist/components/layout/app-shell/index.d.ts +1 -1
- package/dist/components/layout/app-shell/shell-regions.d.ts +27 -0
- package/dist/components/layout/app-shell/sidebar-inset-layout.d.ts +1 -1
- package/dist/components/layout/app-shell/stacked-layout.d.ts +1 -1
- package/dist/components/layout/app-shell/topbar-sidebar-layout.d.ts +1 -1
- package/dist/components/layout/containers/two-column-layout.d.ts +2 -0
- package/dist/components/layout/header/header.recipes.d.ts +6 -0
- package/dist/components/layout/header/header.types.d.ts +6 -6
- package/dist/components/layout/navigation/section-nav/section-nav.d.ts +5 -0
- package/dist/components/layout/page/index.d.ts +2 -1
- package/dist/components/layout/page/page.d.ts +1 -0
- package/dist/components/layout/page/page.strings.d.ts +11 -0
- package/dist/components/layout/page/page.types.d.ts +69 -17
- package/dist/components/layout/page/partials/page-header.d.ts +1 -1
- package/dist/components/layout/settings/settings.d.ts +9 -2
- package/dist/components/layout/sidebar/app-sidebar.d.ts +1 -1
- package/dist/components/layout/sidebar/components/sidebar-grouped-navigation.d.ts +1 -1
- package/dist/components/layout/sidebar/components/sidebar-navigation.d.ts +1 -1
- package/dist/components/layout/sidebar/index.d.ts +2 -1
- package/dist/components/layout/sidebar/sidebar-navigation-rail.d.ts +36 -0
- package/dist/components/layout/sidebar/sidebar.context.d.ts +5 -7
- package/dist/components/layout/sidebar/sidebar.types.d.ts +48 -10
- package/dist/components/layout/sidebar/sidebar.utils.d.ts +9 -1
- package/dist/components/layout/workspace/workspace.types.d.ts +8 -1
- package/dist/components/ui/alert-dialog.d.ts +2 -2
- package/dist/components/ui/combobox.d.ts +1 -1
- package/dist/components/ui/dialog.d.ts +2 -2
- package/dist/components/ui/overlay-layer.d.ts +18 -0
- package/dist/components/ui/sheet.d.ts +5 -1
- package/dist/components/ui/sidebar-state.d.ts +82 -0
- package/dist/components/ui/sidebar.d.ts +5 -17
- package/dist/{containers-CRmHf7GP.js → containers-CIxwbZt5.js} +26 -18
- package/dist/containers-CIxwbZt5.js.map +1 -0
- package/dist/{control-group-recipes-DBXmfh2E.js → control-group-recipes-fMuFo0H7.js} +6 -6
- package/dist/control-group-recipes-fMuFo0H7.js.map +1 -0
- package/dist/{copyable-CnGCZdX4.js → copyable-DIznBqiT.js} +7 -7
- package/dist/{copyable-CnGCZdX4.js.map → copyable-DIznBqiT.js.map} +1 -1
- package/dist/{data-display-D4oujtx0.js → data-display-BdgCAw8T.js} +268 -277
- package/dist/data-display-BdgCAw8T.js.map +1 -0
- package/dist/{date-Q7jnXxpk.js → date-Cq8ioE4o.js} +5 -5
- package/dist/{date-Q7jnXxpk.js.map → date-Cq8ioE4o.js.map} +1 -1
- package/dist/{date-picker-zOt1oNss.js → date-picker-RlIzKom_.js} +446 -437
- package/dist/date-picker-RlIzKom_.js.map +1 -0
- package/dist/{date-pickers-cj8IXbDC.js → date-pickers-DY-CpXS1.js} +12 -12
- package/dist/{date-pickers-cj8IXbDC.js.map → date-pickers-DY-CpXS1.js.map} +1 -1
- package/dist/{display-BB4BL_-K.js → display-KsZLw9Ov.js} +9 -9
- package/dist/{display-BB4BL_-K.js.map → display-KsZLw9Ov.js.map} +1 -1
- package/dist/dropdown-menu-CLs8Lihj.js +194 -0
- package/dist/dropdown-menu-CLs8Lihj.js.map +1 -0
- package/dist/features/activities.js +302 -253
- package/dist/features/activities.js.map +1 -1
- package/dist/features/ai-chat.js +15 -14
- package/dist/features/ai-chat.js.map +1 -1
- package/dist/features/appointment-calendar.js +22 -22
- package/dist/features/appointment-calendar.js.map +1 -1
- package/dist/features/async-preview.js +11 -10
- package/dist/features/async-preview.js.map +1 -1
- package/dist/features/combobox.js +1 -1
- package/dist/features/comments.js +1 -1
- package/dist/features/data-view.js +13 -13
- package/dist/features/data-view.js.map +1 -1
- package/dist/features/email-composer.js +237 -238
- package/dist/features/email-composer.js.map +1 -1
- package/dist/features/event-calendar.js +140 -146
- package/dist/features/event-calendar.js.map +1 -1
- package/dist/features/filters.js +1 -1
- package/dist/features/global-search.js +167 -138
- package/dist/features/global-search.js.map +1 -1
- package/dist/features/kanban.js +6 -7
- package/dist/features/kanban.js.map +1 -1
- package/dist/features/map.js +269 -260
- package/dist/features/map.js.map +1 -1
- package/dist/features/media-library.js +375 -326
- 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 +1266 -1193
- package/dist/features/products.js.map +1 -1
- package/dist/features/questionnaire.js +13 -13
- package/dist/features/questionnaire.js.map +1 -1
- package/dist/features/resource-assignment.js +8 -8
- package/dist/features/resource.js +69 -66
- package/dist/features/resource.js.map +1 -1
- package/dist/features/rich-text-editor.js +2 -2
- package/dist/features/schema-form.js +13 -13
- 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 +94 -95
- package/dist/features/theme-tweaker.js.map +1 -1
- package/dist/{feedback-DZNL5Lg1.js → feedback-Dm4izqFn.js} +80 -79
- package/dist/feedback-Dm4izqFn.js.map +1 -0
- package/dist/{field-affordance-recipes-DjwGx8eM.js → field-affordance-recipes-DWcNcOjh.js} +4 -4
- package/dist/field-affordance-recipes-DWcNcOjh.js.map +1 -0
- package/dist/{filters-BcT-uoFy.js → filters-DzgSJpMK.js} +693 -645
- package/dist/filters-DzgSJpMK.js.map +1 -0
- package/dist/{form-field-CsgRmdit.js → form-field-BriWAXyg.js} +6 -6
- package/dist/{form-field-CsgRmdit.js.map → form-field-BriWAXyg.js.map} +1 -1
- package/dist/{form-sizing-NXgjkmBG.js → form-sizing-Bs2qFUeE.js} +4 -4
- package/dist/form-sizing-Bs2qFUeE.js.map +1 -0
- package/dist/{forms-BV5m5aQF.js → forms-C0RGnJTe.js} +17 -13
- package/dist/forms-C0RGnJTe.js.map +1 -0
- package/dist/{forms-numeric-Cd33AKbD.js → forms-numeric-DIhghX1Q.js} +86 -82
- package/dist/forms-numeric-DIhghX1Q.js.map +1 -0
- package/dist/{header-BA697l4a.js → header-DMMxG__r.js} +67 -63
- package/dist/header-DMMxG__r.js.map +1 -0
- package/dist/header.recipes-BigdJjw1.js +6 -0
- package/dist/header.recipes-BigdJjw1.js.map +1 -0
- package/dist/{hooks-BQ-L7Uu2.js → hooks-DB6CJ4MR.js} +26 -14
- package/dist/hooks-DB6CJ4MR.js.map +1 -0
- package/dist/{icon-badge-COWbCCWu.js → icon-badge-DZF-YjQp.js} +4 -4
- package/dist/{icon-badge-COWbCCWu.js.map → icon-badge-DZF-YjQp.js.map} +1 -1
- package/dist/index.js +4 -5
- package/dist/{input-Cdw4k0fb.js → input-CvyDQlY7.js} +8 -8
- package/dist/{input-Cdw4k0fb.js.map → input-CvyDQlY7.js.map} +1 -1
- package/dist/input-DMBwAZmr.js +21 -0
- package/dist/input-DMBwAZmr.js.map +1 -0
- package/dist/{item-BvZ2DR_x.js → item-DjCcM18E.js} +16 -16
- package/dist/item-DjCcM18E.js.map +1 -0
- package/dist/layout/app-shell.js +1 -1
- package/dist/layout/auth.js +1 -1
- package/dist/layout/containers.js +1 -1
- package/dist/layout/header.js +1 -1
- package/dist/layout/hooks.js +1 -1
- package/dist/layout/navigation.js +1 -1
- package/dist/layout/page.js +2 -2
- package/dist/layout/settings.js +1 -1
- package/dist/layout/sidebar.js +3 -3
- package/dist/layout/workspace.js +1 -1
- package/dist/layout.js +11 -11
- package/dist/lib/affordance-geometry.generated.d.ts +35 -35
- package/dist/lib/control-group-recipes.d.ts +5 -5
- package/dist/lib/field-affordance-recipes.d.ts +2 -2
- package/dist/lib/motion-recipes.d.ts +3 -0
- package/dist/lib/navigation-row-recipes.d.ts +7 -7
- package/dist/lib/overlay-anatomy-recipes.d.ts +3 -3
- package/dist/lib/portal-recipes.d.ts +3 -0
- package/dist/lib/token-merge.generated.d.ts +13 -10
- package/dist/lib/utils.js +1 -1
- package/dist/map-demo-tile.svg +1 -1
- package/dist/{media-gallery-CSl5W1Fy.js → media-gallery-C-vChPmE.js} +6 -6
- package/dist/{media-gallery-CSl5W1Fy.js.map → media-gallery-C-vChPmE.js.map} +1 -1
- package/dist/{mentions-RKOQaaIB.js → mentions-0_4nWuI-.js} +10 -10
- package/dist/{mentions-RKOQaaIB.js.map → mentions-0_4nWuI-.js.map} +1 -1
- package/dist/{message-INU2xsxu.js → message-g8p7eVtN.js} +7 -7
- package/dist/message-g8p7eVtN.js.map +1 -0
- package/dist/{metadata-list-qVV7AVxa.js → metadata-list-C3MkU-Om.js} +64 -64
- package/dist/metadata-list-C3MkU-Om.js.map +1 -0
- package/dist/{motion-recipes-ChBg4HBq.js → motion-recipes-DitYv6P2.js} +10 -2
- package/dist/motion-recipes-DitYv6P2.js.map +1 -0
- package/dist/navigation-C90-oQFq.js +255 -0
- package/dist/navigation-C90-oQFq.js.map +1 -0
- package/dist/{navigation-BQNcg1jT.js → navigation-DaRjthVk.js} +101 -82
- package/dist/navigation-DaRjthVk.js.map +1 -0
- package/dist/{navigation-row-recipes-WZEs-hYo.js → navigation-row-recipes-BGVLvU_O.js} +9 -9
- package/dist/navigation-row-recipes-BGVLvU_O.js.map +1 -0
- package/dist/{number-E_OiIfJz.js → number-CRU3kGuk.js} +5 -5
- package/dist/{number-E_OiIfJz.js.map → number-CRU3kGuk.js.map} +1 -1
- package/dist/overflow-tab-bar-IVFVQFV6.js +172 -0
- package/dist/overflow-tab-bar-IVFVQFV6.js.map +1 -0
- package/dist/overlays-BSgCtM2v.js +1013 -0
- package/dist/overlays-BSgCtM2v.js.map +1 -0
- package/dist/page-DUUKDAjo.js +331 -0
- package/dist/page-DUUKDAjo.js.map +1 -0
- package/dist/page-header-commands-7P3sfE9u.js +193 -0
- package/dist/page-header-commands-7P3sfE9u.js.map +1 -0
- package/dist/{pagination-Ch8X_47u.js → pagination-CgCjElfu.js} +7 -7
- package/dist/{pagination-Ch8X_47u.js.map → pagination-CgCjElfu.js.map} +1 -1
- package/dist/popover-B85RenIl.js +201 -0
- package/dist/popover-B85RenIl.js.map +1 -0
- package/dist/{popover-menu-BYaCdFhf.js → popover-menu-DlnQ2zlR.js} +7 -7
- package/dist/{popover-menu-BYaCdFhf.js.map → popover-menu-DlnQ2zlR.js.map} +1 -1
- package/dist/{popover.recipes-D3j8R8Yp.js → popover.recipes-DdiEp0rd.js} +18 -11
- package/dist/popover.recipes-DdiEp0rd.js.map +1 -0
- package/dist/portal-recipes-BpsV_iRw.js +9 -0
- package/dist/portal-recipes-BpsV_iRw.js.map +1 -0
- package/dist/{primitives-Du64iDbb.js → primitives-ByWgGUgt.js} +5 -5
- package/dist/{primitives-Du64iDbb.js.map → primitives-ByWgGUgt.js.map} +1 -1
- package/dist/primitives.js +4 -4
- package/dist/{progress-BvF2oCdV.js → progress-BJhQP9WX.js} +9 -9
- package/dist/{progress-BvF2oCdV.js.map → progress-BJhQP9WX.js.map} +1 -1
- package/dist/{receipt-D789Jwyy.js → receipt-tOc7B3hw.js} +7 -7
- package/dist/receipt-tOc7B3hw.js.map +1 -0
- package/dist/{rich-text-CLJEf76s.js → rich-text-Dth5E882.js} +3 -3
- package/dist/{rich-text-CLJEf76s.js.map → rich-text-Dth5E882.js.map} +1 -1
- package/dist/{rich-text-editor-Cm1dpUpQ.js → rich-text-editor-C1fOjBTd.js} +429 -430
- package/dist/rich-text-editor-C1fOjBTd.js.map +1 -0
- package/dist/{rich-text-editor-toolbar-L__e4x47.js → rich-text-editor-toolbar-laT3tpBT.js} +32 -28
- package/dist/rich-text-editor-toolbar-laT3tpBT.js.map +1 -0
- package/dist/{scroll-area-La5RXsEk.js → scroll-area-B0dB2cBi.js} +2 -2
- package/dist/{scroll-area-La5RXsEk.js.map → scroll-area-B0dB2cBi.js.map} +1 -1
- package/dist/{separator-DAEV0w65.js → separator-Bb17I4pu.js} +2 -2
- package/dist/{separator-DAEV0w65.js.map → separator-Bb17I4pu.js.map} +1 -1
- package/dist/{separator-GNfPG-90.js → separator-Ct_WSWTJ.js} +3 -3
- package/dist/{separator-GNfPG-90.js.map → separator-Ct_WSWTJ.js.map} +1 -1
- package/dist/services/actions.js +1 -1
- package/dist/{settings-BA2iboic.js → settings-Bar5wiSo.js} +31 -38
- package/dist/settings-Bar5wiSo.js.map +1 -0
- package/dist/sheet-BGPERY55.js +250 -0
- package/dist/sheet-BGPERY55.js.map +1 -0
- package/dist/sidebar-D-JYMMbY.js +686 -0
- package/dist/sidebar-D-JYMMbY.js.map +1 -0
- package/dist/sidebar-f9gRWXIR.js +1001 -0
- package/dist/sidebar-f9gRWXIR.js.map +1 -0
- package/dist/skeleton-BapcJd9C.js +265 -0
- package/dist/skeleton-BapcJd9C.js.map +1 -0
- package/dist/smart-card-CW0hjetE.js +617 -0
- package/dist/smart-card-CW0hjetE.js.map +1 -0
- package/dist/{structure-C0V0_Fyf.js → structure-DuxKl954.js} +2 -2
- package/dist/{structure-C0V0_Fyf.js.map → structure-DuxKl954.js.map} +1 -1
- package/dist/style.css +1 -1
- package/dist/{table-CpvnzJn9.js → table-B4TE7iOV.js} +3 -3
- package/dist/{table-CpvnzJn9.js.map → table-B4TE7iOV.js.map} +1 -1
- package/dist/{table-DH7rozUv.js → table-CFOWY9pQ.js} +394 -388
- package/dist/table-CFOWY9pQ.js.map +1 -0
- package/dist/{tabs-eqVsJZWO.js → tabs-e7ko9S2o.js} +11 -11
- package/dist/tabs-e7ko9S2o.js.map +1 -0
- package/dist/{text-inputs-DXItiR0O.js → text-inputs-B1culiSK.js} +17 -17
- package/dist/text-inputs-B1culiSK.js.map +1 -0
- package/dist/theme.css +40 -37
- package/dist/{timelines-DmtztAY_.js → timelines-D3Sl9ueq.js} +13 -12
- package/dist/timelines-D3Sl9ueq.js.map +1 -0
- package/dist/tooltip-8wz5S_Zr.js +113 -0
- package/dist/tooltip-8wz5S_Zr.js.map +1 -0
- package/dist/{tree-CV11PURP.js → tree-CzUJHnFs.js} +8 -8
- package/dist/{tree-CV11PURP.js.map → tree-CzUJHnFs.js.map} +1 -1
- package/dist/typography/rich-text.js +1 -1
- package/dist/{typography-CSyJrh28.js → typography-BQnine1k.js} +12 -12
- package/dist/{typography-CSyJrh28.js.map → typography-BQnine1k.js.map} +1 -1
- package/dist/typography.js +1 -1
- package/dist/ui-provider-C-74NVLc.js +178 -0
- package/dist/ui-provider-C-74NVLc.js.map +1 -0
- package/dist/ui-provider.js +2 -3
- package/dist/{upload-C9SA0X-8.js → upload-BOW6U2tI.js} +25 -24
- package/dist/upload-BOW6U2tI.js.map +1 -0
- package/dist/{upload-queue-DhQJiSRc.js → upload-queue-qUXn1ykN.js} +16 -14
- package/dist/upload-queue-qUXn1ykN.js.map +1 -0
- package/dist/{usage-card-DVTRDmGz.js → usage-card-BeSLY0i0.js} +24 -17
- package/dist/usage-card-BeSLY0i0.js.map +1 -0
- package/dist/{utils-CF3c95Io.js → utils-B6kKb8jB.js} +237 -141
- package/dist/utils-B6kKb8jB.js.map +1 -0
- package/dist/value-inputs-skdVB2zh.js +980 -0
- package/dist/value-inputs-skdVB2zh.js.map +1 -0
- package/dist/{value-typography-ClupF0Gz.js → value-typography-uAmWUAL1.js} +2 -2
- package/dist/{value-typography-ClupF0Gz.js.map → value-typography-uAmWUAL1.js.map} +1 -1
- package/dist/{workspace-9EFVXUyk.js → workspace-DHeHv0qw.js} +50 -49
- package/dist/workspace-DHeHv0qw.js.map +1 -0
- package/docs/consumer-skill/SKILL.md +4 -3
- package/docs/consumer-skill/agents/themelia-ui-designer.md +96 -0
- package/docs/consumer-skill/examples/app-layout.tsx +52 -1
- package/docs/consumer-skill/examples/commerce-lines.tsx +271 -0
- package/docs/consumer-skill/examples/custom-composition.tsx +21 -0
- package/docs/consumer-skill/examples/detail.tsx +5 -4
- package/docs/consumer-skill/examples/editable-sections.tsx +38 -0
- package/docs/consumer-skill/examples/index-table.tsx +4 -4
- package/docs/consumer-skill/examples/manifest.json +38 -1
- package/docs/consumer-skill/examples/product-media.tsx +41 -0
- package/docs/consumer-skill/examples/product-parts.tsx +81 -0
- package/docs/consumer-skill/examples/rhf-edit-page.tsx +1 -1
- package/docs/consumer-skill/examples/rhf-overlay-form.tsx +24 -11
- package/docs/consumer-skill/examples/token-domain-structure.tsx +68 -0
- package/docs/consumer-skill/references/agents-md.md +19 -17
- package/docs/consumer-skill/references/analytics.md +18 -1
- package/docs/consumer-skill/references/commerce-composition.md +97 -0
- package/docs/consumer-skill/references/component-contracts.json +7131 -1754
- package/docs/consumer-skill/references/composition-mapping.md +17 -3
- package/docs/consumer-skill/references/composition.md +159 -31
- package/docs/consumer-skill/references/critique-rubric.md +98 -0
- package/docs/consumer-skill/references/custom-composition.md +261 -0
- package/docs/consumer-skill/references/data-reading.md +79 -0
- package/docs/consumer-skill/references/design-contract.md +11 -9
- package/docs/consumer-skill/references/discovery.md +27 -3
- package/docs/consumer-skill/references/domain-structures.md +124 -0
- package/docs/consumer-skill/references/installation.md +15 -4
- package/docs/consumer-skill/references/integration.md +35 -0
- package/docs/consumer-skill/references/product-composition.md +94 -0
- package/docs/consumer-skill/references/public-api.json +2881 -420
- package/docs/consumer-skill/references/review.md +39 -2
- package/docs/consumer-skill/references/rhf-workflows.md +7 -0
- package/docs/consumer-skill/references/screen-archetypes.md +19 -7
- package/docs/consumer-skill/references/screen-decisions.md +126 -0
- package/docs/consumer-skill/references/theming.md +17 -18
- package/docs/consumer-skill/references/tokens.json +9 -9
- package/docs/consumer-skill/references/view-craft.md +153 -0
- package/docs/consumer-skill/references/view-spec.md +73 -0
- package/docs/consumer-skill/references/workflows.md +7 -1
- package/docs/consumer-skill/scripts/composition-policy.mjs +39 -3
- package/docs/consumer-skill/scripts/composition-schema.mjs +1 -1
- package/docs/consumer-skill/scripts/composition.mjs +61 -5
- package/docs/consumer-skill/scripts/discovery.mjs +54 -0
- package/docs/consumer-skill/scripts/inspect-component.mjs +1 -1
- package/docs/consumer-skill/scripts/inspection.mjs +73 -18
- package/docs/consumer-skill/scripts/setup-skills.mjs +41 -6
- package/docs/consumer-skill/scripts/surface-policy.mjs +5 -5
- package/docs/consumer-skills/themelia-components/SKILL.md +14 -13
- package/docs/consumer-skills/themelia-composition/SKILL.md +16 -17
- package/docs/consumer-skills/themelia-design/SKILL.md +55 -0
- package/docs/consumer-skills/themelia-foundation/SKILL.md +2 -1
- package/docs/consumer-skills/themelia-tokenization/SKILL.md +24 -17
- package/package.json +1 -1
- package/dist/accordion-96o0pN62.js.map +0 -1
- package/dist/action-menu-CHgs8vmj.js.map +0 -1
- package/dist/affordance-geometry.generated-B8yGOr8-.js.map +0 -1
- package/dist/ai-artifact-BZUGwBq6.js.map +0 -1
- package/dist/app-shell-D63ATkIK.js +0 -237
- package/dist/app-shell-D63ATkIK.js.map +0 -1
- package/dist/auth-D2FVZ1MH.js.map +0 -1
- package/dist/avatar-DWO_HHhB.js.map +0 -1
- package/dist/base/cascader.js.map +0 -1
- package/dist/batch-action-bar-CdfIkCsV.js.map +0 -1
- package/dist/button-DkmK-z8E.js.map +0 -1
- package/dist/buttons-BbfzgczK.js.map +0 -1
- package/dist/cards-4JTWqvVe.js +0 -68
- package/dist/cards-4JTWqvVe.js.map +0 -1
- package/dist/chart-C19flDQb.js +0 -155
- package/dist/chart-C19flDQb.js.map +0 -1
- package/dist/choice-inputs-JLtij2y4.js.map +0 -1
- package/dist/code-block-CGNaUtAE.js.map +0 -1
- package/dist/combobox-CBJDs6w_.js.map +0 -1
- package/dist/combobox-hbhSS18O.js +0 -355
- package/dist/combobox-hbhSS18O.js.map +0 -1
- package/dist/command-D8NrBj-b.js.map +0 -1
- package/dist/containers-CRmHf7GP.js.map +0 -1
- package/dist/control-group-recipes-DBXmfh2E.js.map +0 -1
- package/dist/data-display-D4oujtx0.js.map +0 -1
- package/dist/date-picker-zOt1oNss.js.map +0 -1
- package/dist/dropdown-menu-CjY8Vt7W.js +0 -193
- package/dist/dropdown-menu-CjY8Vt7W.js.map +0 -1
- package/dist/feedback-DZNL5Lg1.js.map +0 -1
- package/dist/field-affordance-recipes-DjwGx8eM.js.map +0 -1
- package/dist/filters-BcT-uoFy.js.map +0 -1
- package/dist/form-sizing-NXgjkmBG.js.map +0 -1
- package/dist/forms-BV5m5aQF.js.map +0 -1
- package/dist/forms-numeric-Cd33AKbD.js.map +0 -1
- package/dist/header-BA697l4a.js.map +0 -1
- package/dist/hooks-BQ-L7Uu2.js.map +0 -1
- package/dist/input-DOPL5_QE.js +0 -21
- package/dist/input-DOPL5_QE.js.map +0 -1
- package/dist/item-BvZ2DR_x.js.map +0 -1
- package/dist/message-INU2xsxu.js.map +0 -1
- package/dist/metadata-list-qVV7AVxa.js.map +0 -1
- package/dist/motion-recipes-ChBg4HBq.js.map +0 -1
- package/dist/navigation-BQNcg1jT.js.map +0 -1
- package/dist/navigation-DLF3E1IC.js +0 -145
- package/dist/navigation-DLF3E1IC.js.map +0 -1
- package/dist/navigation-row-recipes-WZEs-hYo.js.map +0 -1
- package/dist/overflow-tab-bar-CrbqMteP.js +0 -284
- package/dist/overflow-tab-bar-CrbqMteP.js.map +0 -1
- package/dist/overlays-BlKynmde.js +0 -1004
- package/dist/overlays-BlKynmde.js.map +0 -1
- package/dist/page-CIwNUtGr.js +0 -227
- package/dist/page-CIwNUtGr.js.map +0 -1
- package/dist/page-header-commands-DFMlNYzN.js +0 -128
- package/dist/page-header-commands-DFMlNYzN.js.map +0 -1
- package/dist/popover-uwzX2vo7.js +0 -198
- package/dist/popover-uwzX2vo7.js.map +0 -1
- package/dist/popover.recipes-D3j8R8Yp.js.map +0 -1
- package/dist/receipt-D789Jwyy.js.map +0 -1
- package/dist/rich-text-editor-Cm1dpUpQ.js.map +0 -1
- package/dist/rich-text-editor-toolbar-L__e4x47.js.map +0 -1
- package/dist/settings-BA2iboic.js.map +0 -1
- package/dist/sheet-DoAxTb2J.js +0 -213
- package/dist/sheet-DoAxTb2J.js.map +0 -1
- package/dist/sidebar-ByqKR_W5.js +0 -512
- package/dist/sidebar-ByqKR_W5.js.map +0 -1
- package/dist/sidebar-D2iSnGJ7.js +0 -619
- package/dist/sidebar-D2iSnGJ7.js.map +0 -1
- package/dist/skeleton-CUj8O5Bd.js +0 -264
- package/dist/skeleton-CUj8O5Bd.js.map +0 -1
- package/dist/smart-card-CqkzQsK-.js +0 -614
- package/dist/smart-card-CqkzQsK-.js.map +0 -1
- package/dist/table-DH7rozUv.js.map +0 -1
- package/dist/tabs-eqVsJZWO.js.map +0 -1
- package/dist/text-inputs-DXItiR0O.js.map +0 -1
- package/dist/theme-scope-BJ6eE2xt.js +0 -50
- package/dist/theme-scope-BJ6eE2xt.js.map +0 -1
- package/dist/timelines-DmtztAY_.js.map +0 -1
- package/dist/tooltip-B4hjKtoV.js +0 -111
- package/dist/tooltip-B4hjKtoV.js.map +0 -1
- package/dist/ui-provider-CQCuCBcy.js +0 -136
- package/dist/ui-provider-CQCuCBcy.js.map +0 -1
- package/dist/upload-C9SA0X-8.js.map +0 -1
- package/dist/upload-queue-DhQJiSRc.js.map +0 -1
- package/dist/usage-card-DVTRDmGz.js.map +0 -1
- package/dist/use-mobile-vaLKwgyf.js +0 -15
- package/dist/use-mobile-vaLKwgyf.js.map +0 -1
- package/dist/utils-CF3c95Io.js.map +0 -1
- package/dist/value-inputs-C0o70p-U.js +0 -980
- package/dist/value-inputs-C0o70p-U.js.map +0 -1
- package/dist/workspace-9EFVXUyk.js.map +0 -1
|
@@ -1,22 +1,22 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import {
|
|
2
|
+
import { S as e, d as t } from "../ui-provider-C-74NVLc.js";
|
|
3
3
|
import { useStrings as n } from "../lib/strings.js";
|
|
4
|
-
import { t as r } from "../utils-
|
|
5
|
-
import { n as i } from "../buttons-
|
|
6
|
-
import { a, c as o, s } from "../typography-
|
|
7
|
-
import { t as c } from "../structure-
|
|
8
|
-
import { t as l } from "../progress-
|
|
9
|
-
import { h as u } from "../form-sizing-
|
|
10
|
-
import { t as d } from "../input-
|
|
11
|
-
import { t as f } from "../form-field-
|
|
12
|
-
import { d as p } from "../text-inputs-
|
|
13
|
-
import { l as m, r as h, s as g } from "../choice-inputs-
|
|
14
|
-
import { t as _ } from "../checkbox-
|
|
4
|
+
import { t as r } from "../utils-B6kKb8jB.js";
|
|
5
|
+
import { n as i } from "../buttons-BedGfygC.js";
|
|
6
|
+
import { a, c as o, s } from "../typography-BQnine1k.js";
|
|
7
|
+
import { t as c } from "../structure-DuxKl954.js";
|
|
8
|
+
import { t as l } from "../progress-BJhQP9WX.js";
|
|
9
|
+
import { h as u } from "../form-sizing-Bs2qFUeE.js";
|
|
10
|
+
import { t as d } from "../input-CvyDQlY7.js";
|
|
11
|
+
import { t as f } from "../form-field-BriWAXyg.js";
|
|
12
|
+
import { d as p } from "../text-inputs-B1culiSK.js";
|
|
13
|
+
import { l as m, r as h, s as g } from "../choice-inputs-zUgBZfE4.js";
|
|
14
|
+
import { t as _ } from "../checkbox-fflqmODR.js";
|
|
15
15
|
import { forwardRef as v, useEffect as y, useId as b, useRef as x, useState as S } from "react";
|
|
16
16
|
import { Fragment as C, jsx as w, jsxs as T } from "react/jsx-runtime";
|
|
17
17
|
//#region src/components/features/questionnaire/questionnaire-control.tsx
|
|
18
18
|
function ee({ question: n, answer: i, disabled: s, error: l, labelId: f, descriptionId: v, onAnswerChange: y, ...b }) {
|
|
19
|
-
let { defaultScale: x } =
|
|
19
|
+
let { defaultScale: x } = t(), S = r("questionnaire--check", g, u[e(void 0, x)]), C = {
|
|
20
20
|
disabled: s,
|
|
21
21
|
invalid: !!l,
|
|
22
22
|
"aria-labelledby": f,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"questionnaire.js","names":["_Fragment","useDensityConfig","resolveComponentScale","cn","Button","Text","Stack","Progress","formLabelSizeClasses","Input","FormField","Textarea","Select","CardRadioGroup","choiceControlTrackClasses","Checkbox","Fragment$1","QuestionnaireControl","context","checkTrack","defaultScale","common","error","labelId","descriptionId","question","answer","onAnswerChange","event","values","optionId","index","disabled","option","checked","entry","Label","defaultQuestionnaireStrings","current","total","getVisibleQuestions","questions","answers","getQuestionnaireAnswer","id","validateQuestion","value","empty","strings","selected","url","result","getSubmissionAnswers","emptyAnswers","Questionnaire","forwardRef","controlledValue","stringsProp","formProps","props","controlled","stepControlled","internalValue","setInternalValue","useState","defaultValue","answersRef","useRef","visible","internalId","setInternalId","defaultQuestionId","requestedId","questionId","position","errors","setErrors","submitError","setSubmitError","busy","setBusy","completed","setCompleted","submission","resetTimer","mounted","stageRef","useStrings","useId","locked","cancelReset","cancel","goTo","nextId","onQuestionChange","setAnswer","next","onValueChange","previous","useEffect","advance","submit","validation","firstInvalid","controller","snapshot","onSubmit","onComplete","formatSubmitError","onError","currentError","description","className","nativeEvent","initialVisible","initialQuestion","headerSlot","completionSlot","Heading","emptySlot"],"sources":["../../src/components/features/questionnaire/questionnaire-control.tsx","../../src/components/features/questionnaire/questionnaire.types.ts","../../src/components/features/questionnaire/questionnaire.utils.ts","../../src/components/features/questionnaire/questionnaire.tsx"],"sourcesContent":["import { CardRadioGroup, Checkbox, Select } from '../../base/choice-inputs';\nimport { choiceControlTrackClasses } from '../../base/choice-inputs/choice-types';\nimport { formLabelSizeClasses } from '../../base/forms/form-sizing';\nimport { Input, Textarea } from '../../base/text-inputs';\nimport { Stack } from '../../base/structure';\nimport { Label, Text } from '../../typography';\nimport { useDensityConfig } from '../../../lib/ui-provider';\nimport { resolveComponentScale } from '../../../lib/ui-provider/scale';\nimport { cn } from '../../../lib/utils';\nimport type { QuestionnaireQuestionContext } from './questionnaire.types';\n\n/** All interactive behavior remains with public Base UI-backed field owners. */\nexport function QuestionnaireControl({ question, answer, disabled, error, labelId, descriptionId, onAnswerChange, ...context }: QuestionnaireQuestionContext) {\n\tconst { defaultScale } = useDensityConfig();\n\t// Each checkbox sits in a track one Label line tall, so it centres on the\n\t// option's first line whether or not the label wraps.\n\tconst checkTrack = cn('questionnaire--check', choiceControlTrackClasses, formLabelSizeClasses[resolveComponentScale(undefined, defaultScale)]);\n\tconst common = { disabled, invalid: Boolean(error), 'aria-labelledby': labelId, 'aria-describedby': descriptionId, required: question.required };\n\tif (question.type === 'custom') return question.render({ ...context, question, answer, disabled, error, labelId, descriptionId, onAnswerChange });\n\tif (question.type === 'text') return <Input {...common} type={question.inputType ?? 'text'} maxLength={question.maxLength} placeholder={question.placeholder} value={typeof answer === 'string' ? answer : ''} onChange={(event) => onAnswerChange(event.target.value)} />;\n\tif (question.type === 'textarea') return <Textarea {...common} rows={question.rows ?? 4} maxLength={question.maxLength} placeholder={question.placeholder} value={typeof answer === 'string' ? answer : ''} onChange={(event) => onAnswerChange(event.target.value)} />;\n\tif (question.type === 'select') return <Select {...common} options={question.options} value={typeof answer === 'string' ? answer : null} onValueChange={onAnswerChange} />;\n\tif (question.type === 'single') return <fieldset aria-labelledby={labelId} aria-describedby={descriptionId} className=\"questionnaire--choices m-0 min-w-0 border-0 p-0\"><CardRadioGroup options={question.options} value={typeof answer === 'string' ? answer : ''} disabled={disabled} invalid={Boolean(error)} onValueChange={onAnswerChange} columns={1} /></fieldset>;\n\tif (question.type === 'multiple') return <fieldset aria-labelledby={labelId} aria-describedby={descriptionId} className=\"questionnaire--choices m-0 min-w-0 border-0 p-0\"><Stack gap=\"sm\">{question.options.map((option, index) => {\n\t\tconst values = Array.isArray(answer) ? answer : [];\n\t\tconst optionId = `${labelId}-option-${index}`;\n\t\treturn <Stack key={option.value} direction=\"horizontal\" align=\"start\" gap=\"sm\">\n\t\t\t<span className={checkTrack}><Checkbox id={optionId} disabled={disabled || option.disabled} aria-invalid={Boolean(error) || undefined} aria-describedby={[descriptionId, option.description ? `${optionId}-description` : undefined].filter(Boolean).join(' ') || undefined} checked={values.includes(option.value)} onCheckedChange={(checked) => onAnswerChange(checked ? [...values, option.value] : values.filter((entry) => entry !== option.value))} /></span>\n\t\t\t<Stack gap=\"dense\"><Label htmlFor={optionId} className=\"text-inherit\">{option.label}</Label>{option.description && <Text id={`${optionId}-description`} size=\"xs\" type=\"secondary\">{option.description}</Text>}</Stack>\n\t\t</Stack>;\n\t})}</Stack></fieldset>;\n\tif (question.type === 'boolean') return <Stack direction=\"horizontal\" align=\"start\" gap=\"sm\"><span className={checkTrack}><Checkbox {...common} aria-labelledby={undefined} id={`${labelId}-checkbox`} checked={answer === true} onCheckedChange={(checked) => onAnswerChange(checked)} /></span><Label htmlFor={`${labelId}-checkbox`} className=\"text-inherit\">{question.label ?? question.title}</Label></Stack>;\n\treturn null;\n}\n","import type { ComponentPropsWithoutRef, ReactNode } from 'react';\nimport type { StringsProp } from '../../../lib/strings';\n\nexport type QuestionnaireAnswer = string | string[] | boolean | undefined;\nexport type QuestionnaireAnswers = Record<string, QuestionnaireAnswer>;\nexport interface QuestionnaireOption { value: string; label: string; description?: string; disabled?: boolean }\nexport interface QuestionnaireQuestionBase {\n\t/** Unique stable key, used to retain answers across conditional visibility changes. */\n\tid: string;\n\ttitle: string;\n\tdescription?: string;\n\trequired?: boolean;\n\tdisabled?: boolean;\n\t/** Hidden answers are retained for editing, but excluded from validation/submission. */\n\twhen?: (answers: QuestionnaireAnswers) => boolean;\n\t/** Return an error message, or undefined/true for a valid answer. */\n\tvalidate?: (answer: QuestionnaireAnswer, answers: QuestionnaireAnswers) => string | true | undefined;\n}\nexport interface QuestionnaireTextQuestion extends QuestionnaireQuestionBase {\n\ttype: 'text' | 'textarea';\n\tplaceholder?: string;\n\t/** Native text input type. */\n\tinputType?: 'text' | 'email' | 'url' | 'tel';\n\trows?: number;\n\tmaxLength?: number;\n}\nexport interface QuestionnaireChoiceQuestion extends QuestionnaireQuestionBase {\n\ttype: 'single' | 'multiple' | 'select';\n\toptions: QuestionnaireOption[];\n}\nexport interface QuestionnaireBooleanQuestion extends QuestionnaireQuestionBase { type: 'boolean'; label?: string }\nexport interface QuestionnaireCustomQuestion extends QuestionnaireQuestionBase {\n\ttype: 'custom';\n\trender: (context: QuestionnaireQuestionContext) => ReactNode;\n}\nexport type QuestionnaireQuestion = QuestionnaireTextQuestion | QuestionnaireChoiceQuestion | QuestionnaireBooleanQuestion | QuestionnaireCustomQuestion;\nexport interface QuestionnaireQuestionContext {\n\tquestion: QuestionnaireQuestion;\n\tanswer: QuestionnaireAnswer;\n\tanswers: QuestionnaireAnswers;\n\tdisabled: boolean;\n\terror?: string;\n\t/** Connect custom controls to the visible title and description/error. */\n\tlabelId: string;\n\tdescriptionId?: string;\n\tonAnswerChange: (answer: QuestionnaireAnswer) => void;\n}\nexport interface QuestionnaireSubmitContext { signal: AbortSignal }\nexport interface QuestionnaireStrings {\n\tprevious: string; next: string; submit: string; retry: string; cancel: string;\n\tsubmitting: string; submitted: string; editAnswers: string; empty: string;\n\trequired: string; invalidChoice: string; invalidFormat: string; progress: string;\n\tstep: (current: number, total: number) => string;\n\tsubmitError: string;\n}\nexport const defaultQuestionnaireStrings: QuestionnaireStrings = {\n\tprevious: 'Previous', next: 'Next', submit: 'Submit answers', retry: 'Try again', cancel: 'Cancel submission',\n\tsubmitting: 'Submitting answers…', submitted: 'Your answers have been submitted.', editAnswers: 'Edit answers',\n\tempty: 'There are no questions to answer.', required: 'Please answer this question.', invalidChoice: 'Choose an available option.',\n\tinvalidFormat: 'Enter a valid answer.', progress: 'Questionnaire progress', step: (current, total) => `Question ${current} of ${total}`,\n\tsubmitError: 'Answers could not be submitted. Please try again.',\n};\nexport interface QuestionnaireProps extends Omit<ComponentPropsWithoutRef<'form'>, 'children' | 'onSubmit' | 'defaultValue' | 'onChange'> {\n\tquestions: readonly QuestionnaireQuestion[];\n\t/** Controlled answers. */\n\tvalue?: QuestionnaireAnswers;\n\t/** Initial answers for uncontrolled use. */\n\tdefaultValue?: QuestionnaireAnswers;\n\tonValueChange?: (answers: QuestionnaireAnswers) => void;\n\t/** Controlled active question key. */\n\tquestionId?: string;\n\tdefaultQuestionId?: string;\n\tonQuestionChange?: (id: string) => void;\n\tdisabled?: boolean;\n\t/** Receives only visible, enabled questions. Respect signal to cancel application requests. */\n\tonSubmit?: (answers: QuestionnaireAnswers, context: QuestionnaireSubmitContext) => void | Promise<void>;\n\tonComplete?: (answers: QuestionnaireAnswers) => void;\n\tonError?: (error: unknown) => void;\n\tformatSubmitError?: (error: unknown) => string;\n\theaderSlot?: ReactNode;\n\temptySlot?: ReactNode;\n\t/** Replaces the completion state; default includes an edit-answers action. */\n\tcompletionSlot?: ReactNode;\n\tstrings?: StringsProp<QuestionnaireStrings>;\n}\n","import type { QuestionnaireAnswers, QuestionnaireQuestion, QuestionnaireStrings } from './questionnaire.types';\n\nexport function getVisibleQuestions(questions: readonly QuestionnaireQuestion[], answers: QuestionnaireAnswers) {\n\treturn questions.filter((question) => !question.when || question.when(answers));\n}\nexport function getQuestionnaireAnswer(answers: QuestionnaireAnswers, id: string) {\n\treturn Object.hasOwn(answers, id) ? answers[id] : undefined;\n}\nexport function validateQuestion(question: QuestionnaireQuestion, answers: QuestionnaireAnswers, strings: QuestionnaireStrings): string | undefined {\n\tif (question.disabled) return;\n\tconst value = getQuestionnaireAnswer(answers, question.id);\n\tconst empty = value === undefined || (typeof value === 'string' && !value.trim()) || (Array.isArray(value) && value.length === 0);\n\tif (question.required && (empty || (question.type === 'boolean' && value !== true))) return strings.required;\n\tif (value !== undefined) {\n\t\tif ((question.type === 'text' || question.type === 'textarea') && typeof value !== 'string') return strings.invalidFormat;\n\t\tif (question.type === 'boolean' && typeof value !== 'boolean') return strings.invalidFormat;\n\t\tif ((question.type === 'multiple' && !Array.isArray(value)) || ((question.type === 'single' || question.type === 'select') && typeof value !== 'string')) return strings.invalidChoice;\n\t}\n\tif (!empty) {\n\t\tif (question.type === 'single' || question.type === 'select' || question.type === 'multiple') {\n\t\t\tconst selected = Array.isArray(value) ? value : [value];\n\t\t\tif ((question.type === 'multiple' ? !Array.isArray(value) : typeof value !== 'string') || selected.some((entry) => !question.options.some((option) => option.value === entry && !option.disabled))) return strings.invalidChoice;\n\t\t} else if (question.type === 'text' || question.type === 'textarea') {\n\t\t\tif (typeof value !== 'string' || (question.maxLength !== undefined && value.length > question.maxLength)) return strings.invalidFormat;\n\t\t\tif (question.inputType === 'email' && !/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(value)) return strings.invalidFormat;\n\t\t\tif (question.inputType === 'url') { try { const url = new URL(value); if (!url.host || !['http:', 'https:'].includes(url.protocol)) return strings.invalidFormat; } catch { return strings.invalidFormat; } }\n\t\t} else if (question.type === 'boolean' && typeof value !== 'boolean') return strings.invalidFormat;\n\t}\n\tconst result = question.validate?.(value, answers);\n\treturn typeof result === 'string' && result.length > 0 ? result : undefined;\n}\n\nexport function getSubmissionAnswers(questions: readonly QuestionnaireQuestion[], answers: QuestionnaireAnswers): QuestionnaireAnswers {\n\treturn Object.fromEntries(getVisibleQuestions(questions, answers).filter((question) => !question.disabled).map((question) => {\n\t\tconst answer = getQuestionnaireAnswer(answers, question.id);\n\t\treturn [question.id, Array.isArray(answer) ? [...answer] : answer];\n\t}));\n}\n","import { forwardRef, useEffect, useId, useRef, useState } from 'react';\nimport { Button } from '../../base/buttons';\nimport { FormField } from '../../base/forms/form-field';\nimport { Progress } from '../../base/feedback';\nimport { Stack } from '../../base/structure';\nimport { Heading, Text } from '../../typography';\nimport { useStrings } from '../../../lib/strings';\nimport { cn } from '../../../lib/utils';\nimport { QuestionnaireControl } from './questionnaire-control';\nimport { defaultQuestionnaireStrings, type QuestionnaireAnswer, type QuestionnaireAnswers, type QuestionnaireProps } from './questionnaire.types';\nimport { getQuestionnaireAnswer, getSubmissionAnswers, getVisibleQuestions, validateQuestion } from './questionnaire.utils';\n\nconst emptyAnswers: QuestionnaireAnswers = {};\n\nexport const Questionnaire = forwardRef<HTMLFormElement, QuestionnaireProps>(function Questionnaire(props, ref) {\n\tconst { questions, value: controlledValue, defaultValue = {}, onValueChange, questionId, defaultQuestionId, onQuestionChange,\n\t\tdisabled = false, onSubmit, onComplete, onError, formatSubmitError, headerSlot, emptySlot, completionSlot, strings: stringsProp,\n\t\tclassName, onReset, ...formProps } = props;\n\tconst controlled = Object.prototype.hasOwnProperty.call(props, 'value');\n\tconst stepControlled = Object.prototype.hasOwnProperty.call(props, 'questionId');\n\tconst [internalValue, setInternalValue] = useState<QuestionnaireAnswers>(defaultValue);\n\tconst answers = controlled ? controlledValue ?? emptyAnswers : internalValue;\n\tconst answersRef = useRef(answers); answersRef.current = answers;\n\tconst visible = getVisibleQuestions(questions, answers);\n\tconst [internalId, setInternalId] = useState<string | undefined>(defaultQuestionId ?? visible[0]?.id);\n\tconst requestedId = stepControlled ? questionId : internalId;\n\tconst current = visible.find((question) => question.id === requestedId) ?? visible[0];\n\tconst position = current ? visible.indexOf(current) : 0;\n\tconst [errors, setErrors] = useState<Record<string, string | undefined>>({});\n\tconst [submitError, setSubmitError] = useState<string>();\n\tconst [busy, setBusy] = useState(false);\n\tconst [completed, setCompleted] = useState(false);\n\tconst submission = useRef<AbortController | null>(null);\n\tconst resetTimer = useRef<ReturnType<typeof setTimeout> | undefined>(undefined);\n\tconst mounted = useRef(true);\n\tconst stageRef = useRef<HTMLDivElement>(null);\n\tconst strings = useStrings(defaultQuestionnaireStrings, stringsProp);\n\tconst id = useId();\n\tconst labelId = `${id}-title`;\n\tconst descriptionId = `${id}-description`;\n\tconst locked = busy || disabled;\n\tconst cancelReset = () => { clearTimeout(resetTimer.current); resetTimer.current = undefined; };\n\tconst cancel = () => { submission.current?.abort(); submission.current = null; setBusy(false); };\n\tconst goTo = (nextId: string) => { if (!stepControlled) setInternalId(nextId); onQuestionChange?.(nextId); };\n\tconst setAnswer = (answer: QuestionnaireAnswer) => {\n\t\tif (!current || current.disabled || locked) return;\n\t\tconst next = { ...answersRef.current, [current.id]: answer };\n\t\tif (!controlled) { answersRef.current = next; setInternalValue(next); }\n\t\tonValueChange?.(next);\n\t\tsetErrors((previous) => ({ ...previous, [current.id]: undefined })); setSubmitError(undefined); setCompleted(false);\n\t};\n\tuseEffect(() => { stageRef.current?.focus(); }, [current?.id, completed]);\n\tuseEffect(() => {\n\t\t// Replacing data/schema or disabling during a request invalidates that result.\n\t\tcancelReset(); cancel(); setErrors({}); setSubmitError(undefined); setCompleted(false);\n\t}, [answers, questions, disabled]);\n\tuseEffect(() => { mounted.current = true; return () => { mounted.current = false; cancelReset(); submission.current?.abort(); submission.current = null; }; }, []);\n\tconst advance = () => {\n\t\tif (!current || locked) return;\n\t\tconst error = validateQuestion(current, answersRef.current, strings);\n\t\tsetErrors((previous) => ({ ...previous, [current.id]: error }));\n\t\tif (error) { stageRef.current?.focus(); return; }\n\t\tif (visible[position + 1]) goTo(visible[position + 1].id);\n\t};\n\tconst submit = async () => {\n\t\tif (submission.current || disabled || !visible.length) return;\n\t\tconst validation = Object.fromEntries(visible.map((question) => [question.id, validateQuestion(question, answersRef.current, strings)]));\n\t\tsetErrors(validation);\n\t\tconst firstInvalid = visible.find((question) => validation[question.id]);\n\t\tif (firstInvalid) { goTo(firstInvalid.id); stageRef.current?.focus(); return; }\n\t\tconst controller = new AbortController(); submission.current = controller;\n\t\tsetSubmitError(undefined); setBusy(true);\n\t\tconst snapshot = getSubmissionAnswers(questions, answersRef.current);\n\t\ttry {\n\t\t\tawait onSubmit?.(snapshot, { signal: controller.signal });\n\t\t\tif (submission.current !== controller || controller.signal.aborted) return;\n\t\t\tsetCompleted(true); onComplete?.(snapshot);\n\t\t} catch (error) {\n\t\t\tif (submission.current !== controller || controller.signal.aborted) return;\n\t\t\tsetSubmitError(formatSubmitError?.(error) ?? strings.submitError); onError?.(error);\n\t\t} finally { if (submission.current === controller) { submission.current = null; setBusy(false); } }\n\t};\n\tconst currentError = current && Object.hasOwn(errors, current.id) ? errors[current.id] : undefined;\n\tconst description = current && (currentError || current.description);\n\treturn <form {...formProps} ref={ref} noValidate aria-busy={busy || undefined} className={cn('questionnaire--component min-w-0', className)} onSubmit={(event) => { event.preventDefault(); if (position < visible.length - 1) advance(); else void submit(); }} onReset={(event) => {\n\t\tonReset?.(event); const nativeEvent = event.nativeEvent;\n\t\t// Trusted events can run microtasks before native ancestor listeners have cancelled reset.\n\t\tcancelReset(); resetTimer.current = setTimeout(() => {\n\t\t\tresetTimer.current = undefined;\n\t\t\tif (!mounted.current || nativeEvent.defaultPrevented || disabled) return; cancel();\n\t\t\tif (!controlled) { answersRef.current = defaultValue; setInternalValue(defaultValue); } onValueChange?.(defaultValue);\n\t\t\tsetErrors({}); setSubmitError(undefined); setCompleted(false);\n\t\t\tconst initialVisible = getVisibleQuestions(questions, defaultValue);\n\t\t\tconst initialQuestion = initialVisible.find((question) => question.id === defaultQuestionId) ?? initialVisible[0];\n\t\t\tif (initialQuestion) goTo(initialQuestion.id); else if (!stepControlled) setInternalId(undefined);\n\t\t}, 0);\n\t}}>\n\t\t<Stack gap=\"lg\">\n\t\t\t{headerSlot}\n\t\t\t{!current ? emptySlot ?? <Text type=\"secondary\">{strings.empty}</Text> : completed ? completionSlot ?? <Stack gap=\"sm\"><Text type=\"inherit\" role=\"status\">{strings.submitted}</Text><Button disabled={disabled} type=\"button\" buttonStyle=\"outline\" onClick={() => { setCompleted(false); if (visible[0]) goTo(visible[0].id); }}>{strings.editAnswers}</Button></Stack> : <>\n\t\t\t\t<Progress value={position + 1} max={visible.length} label={strings.progress} valueSlot={<Text size=\"xs\" type=\"secondary\" aria-live=\"polite\">{strings.step(position + 1, visible.length)}</Text>} />\n\t\t\t\t<Stack ref={stageRef} gap=\"normal\" tabIndex={-1} role=\"group\" aria-labelledby={labelId} className=\"questionnaire--question outline-none\">\n\t\t\t\t\t<Heading className=\"text-inherit\" id={labelId} tag=\"h3\">{current.title}</Heading>\n\t\t\t\t\t<FormField required={current.required} error={currentError} hint={current.description} supportingTextId={descriptionId}>\n\t\t\t\t\t\t<QuestionnaireControl key={current.id} question={current} answer={getQuestionnaireAnswer(answers, current.id)} answers={answers} disabled={locked || Boolean(current.disabled)} error={currentError} labelId={labelId} descriptionId={description ? descriptionId : undefined} onAnswerChange={setAnswer} />\n\t\t\t\t\t</FormField>\n\t\t\t\t</Stack>\n\t\t\t\t{submitError && <Text role=\"alert\" type=\"error\">{submitError}</Text>}\n\t\t\t\t{busy && <Text role=\"status\" type=\"secondary\">{strings.submitting}</Text>}\n\t\t\t\t<Stack direction=\"horizontal\" gap=\"sm\" wrap>\n\t\t\t\t\t<Button type=\"button\" buttonStyle=\"outline\" disabled={locked || position === 0} onClick={() => { setSubmitError(undefined); goTo(visible[position - 1].id); }}>{strings.previous}</Button>\n\t\t\t\t\t{position < visible.length - 1 ? <Button tone=\"primary\" type=\"button\" disabled={locked} onClick={advance}>{strings.next}</Button> : <Button tone=\"primary\" type=\"submit\" disabled={locked}>{submitError ? strings.retry : strings.submit}</Button>}\n\t\t\t\t\t{busy && <Button type=\"button\" buttonStyle=\"outline\" disabled={disabled} onClick={cancel}>{strings.cancel}</Button>}\n\t\t\t\t</Stack>\n\t\t\t</>}\n\t\t</Stack>\n\t</form>;\n});\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"questionnaire.js","names":["_Fragment","resolveComponentScale","useDensityConfig","cn","Button","Text","Stack","Progress","formLabelSizeClasses","Input","FormField","Textarea","Select","CardRadioGroup","choiceControlTrackClasses","Checkbox","Fragment$1","QuestionnaireControl","context","checkTrack","defaultScale","common","error","labelId","descriptionId","question","answer","onAnswerChange","event","values","optionId","index","disabled","option","checked","entry","Label","defaultQuestionnaireStrings","current","total","getVisibleQuestions","questions","answers","getQuestionnaireAnswer","id","validateQuestion","value","empty","strings","selected","url","result","getSubmissionAnswers","emptyAnswers","Questionnaire","forwardRef","controlledValue","stringsProp","formProps","props","controlled","stepControlled","internalValue","setInternalValue","useState","defaultValue","answersRef","useRef","visible","internalId","setInternalId","defaultQuestionId","requestedId","questionId","position","errors","setErrors","submitError","setSubmitError","busy","setBusy","completed","setCompleted","submission","resetTimer","mounted","stageRef","useStrings","useId","locked","cancelReset","cancel","goTo","nextId","onQuestionChange","setAnswer","next","onValueChange","previous","useEffect","advance","submit","validation","firstInvalid","controller","snapshot","onSubmit","onComplete","formatSubmitError","onError","currentError","description","className","nativeEvent","initialVisible","initialQuestion","headerSlot","completionSlot","Heading","emptySlot"],"sources":["../../src/components/features/questionnaire/questionnaire-control.tsx","../../src/components/features/questionnaire/questionnaire.types.ts","../../src/components/features/questionnaire/questionnaire.utils.ts","../../src/components/features/questionnaire/questionnaire.tsx"],"sourcesContent":["import { CardRadioGroup, Checkbox, Select } from '../../base/choice-inputs';\nimport { choiceControlTrackClasses } from '../../base/choice-inputs/choice-types';\nimport { formLabelSizeClasses } from '../../base/forms/form-sizing';\nimport { Input, Textarea } from '../../base/text-inputs';\nimport { Stack } from '../../base/structure';\nimport { Label, Text } from '../../typography';\nimport { useDensityConfig } from '../../../lib/ui-provider';\nimport { resolveComponentScale } from '../../../lib/ui-provider/scale';\nimport { cn } from '../../../lib/utils';\nimport type { QuestionnaireQuestionContext } from './questionnaire.types';\n\n/** All interactive behavior remains with public Base UI-backed field owners. */\nexport function QuestionnaireControl({ question, answer, disabled, error, labelId, descriptionId, onAnswerChange, ...context }: QuestionnaireQuestionContext) {\n\tconst { defaultScale } = useDensityConfig();\n\t// Each checkbox sits in a track one Label line tall, so it centres on the\n\t// option's first line whether or not the label wraps.\n\tconst checkTrack = cn('questionnaire--check', choiceControlTrackClasses, formLabelSizeClasses[resolveComponentScale(undefined, defaultScale)]);\n\tconst common = { disabled, invalid: Boolean(error), 'aria-labelledby': labelId, 'aria-describedby': descriptionId, required: question.required };\n\tif (question.type === 'custom') return question.render({ ...context, question, answer, disabled, error, labelId, descriptionId, onAnswerChange });\n\tif (question.type === 'text') return <Input {...common} type={question.inputType ?? 'text'} maxLength={question.maxLength} placeholder={question.placeholder} value={typeof answer === 'string' ? answer : ''} onChange={(event) => onAnswerChange(event.target.value)} />;\n\tif (question.type === 'textarea') return <Textarea {...common} rows={question.rows ?? 4} maxLength={question.maxLength} placeholder={question.placeholder} value={typeof answer === 'string' ? answer : ''} onChange={(event) => onAnswerChange(event.target.value)} />;\n\tif (question.type === 'select') return <Select {...common} options={question.options} value={typeof answer === 'string' ? answer : null} onValueChange={onAnswerChange} />;\n\tif (question.type === 'single') return <fieldset aria-labelledby={labelId} aria-describedby={descriptionId} className=\"questionnaire--choices m-0 min-w-0 border-0 p-0\"><CardRadioGroup options={question.options} value={typeof answer === 'string' ? answer : ''} disabled={disabled} invalid={Boolean(error)} onValueChange={onAnswerChange} columns={1} /></fieldset>;\n\tif (question.type === 'multiple') return <fieldset aria-labelledby={labelId} aria-describedby={descriptionId} className=\"questionnaire--choices m-0 min-w-0 border-0 p-0\"><Stack gap=\"sm\">{question.options.map((option, index) => {\n\t\tconst values = Array.isArray(answer) ? answer : [];\n\t\tconst optionId = `${labelId}-option-${index}`;\n\t\treturn <Stack key={option.value} direction=\"horizontal\" align=\"start\" gap=\"sm\">\n\t\t\t<span className={checkTrack}><Checkbox id={optionId} disabled={disabled || option.disabled} aria-invalid={Boolean(error) || undefined} aria-describedby={[descriptionId, option.description ? `${optionId}-description` : undefined].filter(Boolean).join(' ') || undefined} checked={values.includes(option.value)} onCheckedChange={(checked) => onAnswerChange(checked ? [...values, option.value] : values.filter((entry) => entry !== option.value))} /></span>\n\t\t\t<Stack gap=\"dense\"><Label htmlFor={optionId} className=\"text-inherit\">{option.label}</Label>{option.description && <Text id={`${optionId}-description`} size=\"xs\" type=\"secondary\">{option.description}</Text>}</Stack>\n\t\t</Stack>;\n\t})}</Stack></fieldset>;\n\tif (question.type === 'boolean') return <Stack direction=\"horizontal\" align=\"start\" gap=\"sm\"><span className={checkTrack}><Checkbox {...common} aria-labelledby={undefined} id={`${labelId}-checkbox`} checked={answer === true} onCheckedChange={(checked) => onAnswerChange(checked)} /></span><Label htmlFor={`${labelId}-checkbox`} className=\"text-inherit\">{question.label ?? question.title}</Label></Stack>;\n\treturn null;\n}\n","import type { ComponentPropsWithoutRef, ReactNode } from 'react';\nimport type { StringsProp } from '../../../lib/strings';\n\nexport type QuestionnaireAnswer = string | string[] | boolean | undefined;\nexport type QuestionnaireAnswers = Record<string, QuestionnaireAnswer>;\nexport interface QuestionnaireOption { value: string; label: string; description?: string; disabled?: boolean }\nexport interface QuestionnaireQuestionBase {\n\t/** Unique stable key, used to retain answers across conditional visibility changes. */\n\tid: string;\n\ttitle: string;\n\tdescription?: string;\n\trequired?: boolean;\n\tdisabled?: boolean;\n\t/** Hidden answers are retained for editing, but excluded from validation/submission. */\n\twhen?: (answers: QuestionnaireAnswers) => boolean;\n\t/** Return an error message, or undefined/true for a valid answer. */\n\tvalidate?: (answer: QuestionnaireAnswer, answers: QuestionnaireAnswers) => string | true | undefined;\n}\nexport interface QuestionnaireTextQuestion extends QuestionnaireQuestionBase {\n\ttype: 'text' | 'textarea';\n\tplaceholder?: string;\n\t/** Native text input type. */\n\tinputType?: 'text' | 'email' | 'url' | 'tel';\n\trows?: number;\n\tmaxLength?: number;\n}\nexport interface QuestionnaireChoiceQuestion extends QuestionnaireQuestionBase {\n\ttype: 'single' | 'multiple' | 'select';\n\toptions: QuestionnaireOption[];\n}\nexport interface QuestionnaireBooleanQuestion extends QuestionnaireQuestionBase { type: 'boolean'; label?: string }\nexport interface QuestionnaireCustomQuestion extends QuestionnaireQuestionBase {\n\ttype: 'custom';\n\trender: (context: QuestionnaireQuestionContext) => ReactNode;\n}\nexport type QuestionnaireQuestion = QuestionnaireTextQuestion | QuestionnaireChoiceQuestion | QuestionnaireBooleanQuestion | QuestionnaireCustomQuestion;\nexport interface QuestionnaireQuestionContext {\n\tquestion: QuestionnaireQuestion;\n\tanswer: QuestionnaireAnswer;\n\tanswers: QuestionnaireAnswers;\n\tdisabled: boolean;\n\terror?: string;\n\t/** Connect custom controls to the visible title and description/error. */\n\tlabelId: string;\n\tdescriptionId?: string;\n\tonAnswerChange: (answer: QuestionnaireAnswer) => void;\n}\nexport interface QuestionnaireSubmitContext { signal: AbortSignal }\nexport interface QuestionnaireStrings {\n\tprevious: string; next: string; submit: string; retry: string; cancel: string;\n\tsubmitting: string; submitted: string; editAnswers: string; empty: string;\n\trequired: string; invalidChoice: string; invalidFormat: string; progress: string;\n\tstep: (current: number, total: number) => string;\n\tsubmitError: string;\n}\nexport const defaultQuestionnaireStrings: QuestionnaireStrings = {\n\tprevious: 'Previous', next: 'Next', submit: 'Submit answers', retry: 'Try again', cancel: 'Cancel submission',\n\tsubmitting: 'Submitting answers…', submitted: 'Your answers have been submitted.', editAnswers: 'Edit answers',\n\tempty: 'There are no questions to answer.', required: 'Please answer this question.', invalidChoice: 'Choose an available option.',\n\tinvalidFormat: 'Enter a valid answer.', progress: 'Questionnaire progress', step: (current, total) => `Question ${current} of ${total}`,\n\tsubmitError: 'Answers could not be submitted. Please try again.',\n};\nexport interface QuestionnaireProps extends Omit<ComponentPropsWithoutRef<'form'>, 'children' | 'onSubmit' | 'defaultValue' | 'onChange'> {\n\tquestions: readonly QuestionnaireQuestion[];\n\t/** Controlled answers. */\n\tvalue?: QuestionnaireAnswers;\n\t/** Initial answers for uncontrolled use. */\n\tdefaultValue?: QuestionnaireAnswers;\n\tonValueChange?: (answers: QuestionnaireAnswers) => void;\n\t/** Controlled active question key. */\n\tquestionId?: string;\n\tdefaultQuestionId?: string;\n\tonQuestionChange?: (id: string) => void;\n\tdisabled?: boolean;\n\t/** Receives only visible, enabled questions. Respect signal to cancel application requests. */\n\tonSubmit?: (answers: QuestionnaireAnswers, context: QuestionnaireSubmitContext) => void | Promise<void>;\n\tonComplete?: (answers: QuestionnaireAnswers) => void;\n\tonError?: (error: unknown) => void;\n\tformatSubmitError?: (error: unknown) => string;\n\theaderSlot?: ReactNode;\n\temptySlot?: ReactNode;\n\t/** Replaces the completion state; default includes an edit-answers action. */\n\tcompletionSlot?: ReactNode;\n\tstrings?: StringsProp<QuestionnaireStrings>;\n}\n","import type { QuestionnaireAnswers, QuestionnaireQuestion, QuestionnaireStrings } from './questionnaire.types';\n\nexport function getVisibleQuestions(questions: readonly QuestionnaireQuestion[], answers: QuestionnaireAnswers) {\n\treturn questions.filter((question) => !question.when || question.when(answers));\n}\nexport function getQuestionnaireAnswer(answers: QuestionnaireAnswers, id: string) {\n\treturn Object.hasOwn(answers, id) ? answers[id] : undefined;\n}\nexport function validateQuestion(question: QuestionnaireQuestion, answers: QuestionnaireAnswers, strings: QuestionnaireStrings): string | undefined {\n\tif (question.disabled) return;\n\tconst value = getQuestionnaireAnswer(answers, question.id);\n\tconst empty = value === undefined || (typeof value === 'string' && !value.trim()) || (Array.isArray(value) && value.length === 0);\n\tif (question.required && (empty || (question.type === 'boolean' && value !== true))) return strings.required;\n\tif (value !== undefined) {\n\t\tif ((question.type === 'text' || question.type === 'textarea') && typeof value !== 'string') return strings.invalidFormat;\n\t\tif (question.type === 'boolean' && typeof value !== 'boolean') return strings.invalidFormat;\n\t\tif ((question.type === 'multiple' && !Array.isArray(value)) || ((question.type === 'single' || question.type === 'select') && typeof value !== 'string')) return strings.invalidChoice;\n\t}\n\tif (!empty) {\n\t\tif (question.type === 'single' || question.type === 'select' || question.type === 'multiple') {\n\t\t\tconst selected = Array.isArray(value) ? value : [value];\n\t\t\tif ((question.type === 'multiple' ? !Array.isArray(value) : typeof value !== 'string') || selected.some((entry) => !question.options.some((option) => option.value === entry && !option.disabled))) return strings.invalidChoice;\n\t\t} else if (question.type === 'text' || question.type === 'textarea') {\n\t\t\tif (typeof value !== 'string' || (question.maxLength !== undefined && value.length > question.maxLength)) return strings.invalidFormat;\n\t\t\tif (question.inputType === 'email' && !/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(value)) return strings.invalidFormat;\n\t\t\tif (question.inputType === 'url') { try { const url = new URL(value); if (!url.host || !['http:', 'https:'].includes(url.protocol)) return strings.invalidFormat; } catch { return strings.invalidFormat; } }\n\t\t} else if (question.type === 'boolean' && typeof value !== 'boolean') return strings.invalidFormat;\n\t}\n\tconst result = question.validate?.(value, answers);\n\treturn typeof result === 'string' && result.length > 0 ? result : undefined;\n}\n\nexport function getSubmissionAnswers(questions: readonly QuestionnaireQuestion[], answers: QuestionnaireAnswers): QuestionnaireAnswers {\n\treturn Object.fromEntries(getVisibleQuestions(questions, answers).filter((question) => !question.disabled).map((question) => {\n\t\tconst answer = getQuestionnaireAnswer(answers, question.id);\n\t\treturn [question.id, Array.isArray(answer) ? [...answer] : answer];\n\t}));\n}\n","import { forwardRef, useEffect, useId, useRef, useState } from 'react';\nimport { Button } from '../../base/buttons';\nimport { FormField } from '../../base/forms/form-field';\nimport { Progress } from '../../base/feedback';\nimport { Stack } from '../../base/structure';\nimport { Heading, Text } from '../../typography';\nimport { useStrings } from '../../../lib/strings';\nimport { cn } from '../../../lib/utils';\nimport { QuestionnaireControl } from './questionnaire-control';\nimport { defaultQuestionnaireStrings, type QuestionnaireAnswer, type QuestionnaireAnswers, type QuestionnaireProps } from './questionnaire.types';\nimport { getQuestionnaireAnswer, getSubmissionAnswers, getVisibleQuestions, validateQuestion } from './questionnaire.utils';\n\nconst emptyAnswers: QuestionnaireAnswers = {};\n\nexport const Questionnaire = forwardRef<HTMLFormElement, QuestionnaireProps>(function Questionnaire(props, ref) {\n\tconst { questions, value: controlledValue, defaultValue = {}, onValueChange, questionId, defaultQuestionId, onQuestionChange,\n\t\tdisabled = false, onSubmit, onComplete, onError, formatSubmitError, headerSlot, emptySlot, completionSlot, strings: stringsProp,\n\t\tclassName, onReset, ...formProps } = props;\n\tconst controlled = Object.prototype.hasOwnProperty.call(props, 'value');\n\tconst stepControlled = Object.prototype.hasOwnProperty.call(props, 'questionId');\n\tconst [internalValue, setInternalValue] = useState<QuestionnaireAnswers>(defaultValue);\n\tconst answers = controlled ? controlledValue ?? emptyAnswers : internalValue;\n\tconst answersRef = useRef(answers); answersRef.current = answers;\n\tconst visible = getVisibleQuestions(questions, answers);\n\tconst [internalId, setInternalId] = useState<string | undefined>(defaultQuestionId ?? visible[0]?.id);\n\tconst requestedId = stepControlled ? questionId : internalId;\n\tconst current = visible.find((question) => question.id === requestedId) ?? visible[0];\n\tconst position = current ? visible.indexOf(current) : 0;\n\tconst [errors, setErrors] = useState<Record<string, string | undefined>>({});\n\tconst [submitError, setSubmitError] = useState<string>();\n\tconst [busy, setBusy] = useState(false);\n\tconst [completed, setCompleted] = useState(false);\n\tconst submission = useRef<AbortController | null>(null);\n\tconst resetTimer = useRef<ReturnType<typeof setTimeout> | undefined>(undefined);\n\tconst mounted = useRef(true);\n\tconst stageRef = useRef<HTMLDivElement>(null);\n\tconst strings = useStrings(defaultQuestionnaireStrings, stringsProp);\n\tconst id = useId();\n\tconst labelId = `${id}-title`;\n\tconst descriptionId = `${id}-description`;\n\tconst locked = busy || disabled;\n\tconst cancelReset = () => { clearTimeout(resetTimer.current); resetTimer.current = undefined; };\n\tconst cancel = () => { submission.current?.abort(); submission.current = null; setBusy(false); };\n\tconst goTo = (nextId: string) => { if (!stepControlled) setInternalId(nextId); onQuestionChange?.(nextId); };\n\tconst setAnswer = (answer: QuestionnaireAnswer) => {\n\t\tif (!current || current.disabled || locked) return;\n\t\tconst next = { ...answersRef.current, [current.id]: answer };\n\t\tif (!controlled) { answersRef.current = next; setInternalValue(next); }\n\t\tonValueChange?.(next);\n\t\tsetErrors((previous) => ({ ...previous, [current.id]: undefined })); setSubmitError(undefined); setCompleted(false);\n\t};\n\tuseEffect(() => { stageRef.current?.focus(); }, [current?.id, completed]);\n\tuseEffect(() => {\n\t\t// Replacing data/schema or disabling during a request invalidates that result.\n\t\tcancelReset(); cancel(); setErrors({}); setSubmitError(undefined); setCompleted(false);\n\t}, [answers, questions, disabled]);\n\tuseEffect(() => { mounted.current = true; return () => { mounted.current = false; cancelReset(); submission.current?.abort(); submission.current = null; }; }, []);\n\tconst advance = () => {\n\t\tif (!current || locked) return;\n\t\tconst error = validateQuestion(current, answersRef.current, strings);\n\t\tsetErrors((previous) => ({ ...previous, [current.id]: error }));\n\t\tif (error) { stageRef.current?.focus(); return; }\n\t\tif (visible[position + 1]) goTo(visible[position + 1].id);\n\t};\n\tconst submit = async () => {\n\t\tif (submission.current || disabled || !visible.length) return;\n\t\tconst validation = Object.fromEntries(visible.map((question) => [question.id, validateQuestion(question, answersRef.current, strings)]));\n\t\tsetErrors(validation);\n\t\tconst firstInvalid = visible.find((question) => validation[question.id]);\n\t\tif (firstInvalid) { goTo(firstInvalid.id); stageRef.current?.focus(); return; }\n\t\tconst controller = new AbortController(); submission.current = controller;\n\t\tsetSubmitError(undefined); setBusy(true);\n\t\tconst snapshot = getSubmissionAnswers(questions, answersRef.current);\n\t\ttry {\n\t\t\tawait onSubmit?.(snapshot, { signal: controller.signal });\n\t\t\tif (submission.current !== controller || controller.signal.aborted) return;\n\t\t\tsetCompleted(true); onComplete?.(snapshot);\n\t\t} catch (error) {\n\t\t\tif (submission.current !== controller || controller.signal.aborted) return;\n\t\t\tsetSubmitError(formatSubmitError?.(error) ?? strings.submitError); onError?.(error);\n\t\t} finally { if (submission.current === controller) { submission.current = null; setBusy(false); } }\n\t};\n\tconst currentError = current && Object.hasOwn(errors, current.id) ? errors[current.id] : undefined;\n\tconst description = current && (currentError || current.description);\n\treturn <form {...formProps} ref={ref} noValidate aria-busy={busy || undefined} className={cn('questionnaire--component min-w-0', className)} onSubmit={(event) => { event.preventDefault(); if (position < visible.length - 1) advance(); else void submit(); }} onReset={(event) => {\n\t\tonReset?.(event); const nativeEvent = event.nativeEvent;\n\t\t// Trusted events can run microtasks before native ancestor listeners have cancelled reset.\n\t\tcancelReset(); resetTimer.current = setTimeout(() => {\n\t\t\tresetTimer.current = undefined;\n\t\t\tif (!mounted.current || nativeEvent.defaultPrevented || disabled) return; cancel();\n\t\t\tif (!controlled) { answersRef.current = defaultValue; setInternalValue(defaultValue); } onValueChange?.(defaultValue);\n\t\t\tsetErrors({}); setSubmitError(undefined); setCompleted(false);\n\t\t\tconst initialVisible = getVisibleQuestions(questions, defaultValue);\n\t\t\tconst initialQuestion = initialVisible.find((question) => question.id === defaultQuestionId) ?? initialVisible[0];\n\t\t\tif (initialQuestion) goTo(initialQuestion.id); else if (!stepControlled) setInternalId(undefined);\n\t\t}, 0);\n\t}}>\n\t\t<Stack gap=\"lg\">\n\t\t\t{headerSlot}\n\t\t\t{!current ? emptySlot ?? <Text type=\"secondary\">{strings.empty}</Text> : completed ? completionSlot ?? <Stack gap=\"sm\"><Text type=\"inherit\" role=\"status\">{strings.submitted}</Text><Button disabled={disabled} type=\"button\" buttonStyle=\"outline\" onClick={() => { setCompleted(false); if (visible[0]) goTo(visible[0].id); }}>{strings.editAnswers}</Button></Stack> : <>\n\t\t\t\t<Progress value={position + 1} max={visible.length} label={strings.progress} valueSlot={<Text size=\"xs\" type=\"secondary\" aria-live=\"polite\">{strings.step(position + 1, visible.length)}</Text>} />\n\t\t\t\t<Stack ref={stageRef} gap=\"normal\" tabIndex={-1} role=\"group\" aria-labelledby={labelId} className=\"questionnaire--question outline-none\">\n\t\t\t\t\t<Heading className=\"text-inherit\" id={labelId} tag=\"h3\">{current.title}</Heading>\n\t\t\t\t\t<FormField required={current.required} error={currentError} hint={current.description} supportingTextId={descriptionId}>\n\t\t\t\t\t\t<QuestionnaireControl key={current.id} question={current} answer={getQuestionnaireAnswer(answers, current.id)} answers={answers} disabled={locked || Boolean(current.disabled)} error={currentError} labelId={labelId} descriptionId={description ? descriptionId : undefined} onAnswerChange={setAnswer} />\n\t\t\t\t\t</FormField>\n\t\t\t\t</Stack>\n\t\t\t\t{submitError && <Text role=\"alert\" type=\"error\">{submitError}</Text>}\n\t\t\t\t{busy && <Text role=\"status\" type=\"secondary\">{strings.submitting}</Text>}\n\t\t\t\t<Stack direction=\"horizontal\" gap=\"sm\" wrap>\n\t\t\t\t\t<Button type=\"button\" buttonStyle=\"outline\" disabled={locked || position === 0} onClick={() => { setSubmitError(undefined); goTo(visible[position - 1].id); }}>{strings.previous}</Button>\n\t\t\t\t\t{position < visible.length - 1 ? <Button tone=\"primary\" type=\"button\" disabled={locked} onClick={advance}>{strings.next}</Button> : <Button tone=\"primary\" type=\"submit\" disabled={locked}>{submitError ? strings.retry : strings.submit}</Button>}\n\t\t\t\t\t{busy && <Button type=\"button\" buttonStyle=\"outline\" disabled={disabled} onClick={cancel}>{strings.cancel}</Button>}\n\t\t\t\t</Stack>\n\t\t\t</>}\n\t\t</Stack>\n\t</form>;\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, o as i } from "../typography-
|
|
6
|
-
import { t as a } from "../structure-
|
|
7
|
-
import { n as o } from "../cards-
|
|
8
|
-
import { r as s } from "../overlays-
|
|
9
|
-
import { n as c } from "../display-
|
|
10
|
-
import { s as l } from "../data-display-
|
|
3
|
+
import { t } from "../utils-B6kKb8jB.js";
|
|
4
|
+
import { n } from "../buttons-BedGfygC.js";
|
|
5
|
+
import { c as r, o as i } from "../typography-BQnine1k.js";
|
|
6
|
+
import { t as a } from "../structure-DuxKl954.js";
|
|
7
|
+
import { n as o } from "../cards-rNX1M4Xn.js";
|
|
8
|
+
import { r as s } from "../overlays-BSgCtM2v.js";
|
|
9
|
+
import { n as c } from "../display-KsZLw9Ov.js";
|
|
10
|
+
import { s as l } from "../data-display-BdgCAw8T.js";
|
|
11
11
|
import { useCallback as u, useEffect as d, useMemo as f, useRef as p, useState as m } from "react";
|
|
12
12
|
import { Fragment as h, jsx as g, jsxs as _ } from "react/jsx-runtime";
|
|
13
13
|
import { Eye as v, PackageOpen as y } from "lucide-react";
|
|
@@ -1,17 +1,18 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { useStrings as e } from "../lib/strings.js";
|
|
3
|
-
import { t } from "../utils-
|
|
4
|
-
import { c as n } from "../typography-
|
|
5
|
-
import { t as r } from "../structure-
|
|
6
|
-
import { n as i, t as a } from "../feedback-
|
|
3
|
+
import { t } from "../utils-B6kKb8jB.js";
|
|
4
|
+
import { c as n } from "../typography-BQnine1k.js";
|
|
5
|
+
import { t as r } from "../structure-DuxKl954.js";
|
|
6
|
+
import { n as i, t as a } from "../feedback-Dm4izqFn.js";
|
|
7
7
|
import { n as o, t as s } from "../composition.recipes-COdiFhxB.js";
|
|
8
|
-
import { u as c } from "../primitives-
|
|
9
|
-
import { t as l } from "../icon-badge-
|
|
10
|
-
import { i as u, n as d, s as f } from "../avatar-
|
|
11
|
-
import { n as p } from "../display-
|
|
12
|
-
import { t as m } from "../metadata-list-
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
8
|
+
import { u as c } from "../primitives-ByWgGUgt.js";
|
|
9
|
+
import { t as l } from "../icon-badge-DZF-YjQp.js";
|
|
10
|
+
import { i as u, n as d, s as f } from "../avatar-CeZaFmNH.js";
|
|
11
|
+
import { n as p } from "../display-KsZLw9Ov.js";
|
|
12
|
+
import { t as m } from "../metadata-list-C3MkU-Om.js";
|
|
13
|
+
import { t as h } from "../navigation-C90-oQFq.js";
|
|
14
|
+
import { t as g } from "../overflow-tab-bar-IVFVQFV6.js";
|
|
15
|
+
import { s as _ } from "../data-display-BdgCAw8T.js";
|
|
15
16
|
import { jsx as v, jsxs as y } from "react/jsx-runtime";
|
|
16
17
|
//#region src/components/features/resource/resource.strings.ts
|
|
17
18
|
var b = {
|
|
@@ -26,27 +27,27 @@ var b = {
|
|
|
26
27
|
};
|
|
27
28
|
//#endregion
|
|
28
29
|
//#region src/components/features/resource/resource.tsx
|
|
29
|
-
function x({ title: e, description: n, eyebrow: i, media: a, avatarUrl: o, avatarAlt: s, avatarFallback: p, icon: m, iconTone: g = "neutral", badges: _, metadata: b, actions: x, primaryAction: S, secondaryActions: C,
|
|
30
|
-
let
|
|
31
|
-
className: t("resource-header--avatar size-avatar-lg",
|
|
30
|
+
function x({ title: e, description: n, eyebrow: i, media: a, avatarUrl: o, avatarAlt: s, avatarFallback: p, icon: m, iconTone: g = "neutral", badges: _, metadata: b, actions: x, primaryAction: S, secondaryActions: C, maxVisibleSecondaryActions: w, moreActionsLabel: T, renderLink: E, className: D, contentClassName: O, mediaClassName: k }) {
|
|
31
|
+
let A = m, j = typeof e == "string" ? e : "", M = a ?? (o || p ? /* @__PURE__ */ y(d, {
|
|
32
|
+
className: t("resource-header--avatar size-avatar-lg", k),
|
|
32
33
|
children: [!!o && /* @__PURE__ */ v(f, {
|
|
33
34
|
src: o,
|
|
34
|
-
alt: s ??
|
|
35
|
+
alt: s ?? j
|
|
35
36
|
}), /* @__PURE__ */ v(u, { children: p ?? /* @__PURE__ */ v(c, {
|
|
36
|
-
value:
|
|
37
|
+
value: j,
|
|
37
38
|
strategy: "first-words"
|
|
38
39
|
}) })]
|
|
39
|
-
}) :
|
|
40
|
-
icon:
|
|
40
|
+
}) : A ? /* @__PURE__ */ v(l, {
|
|
41
|
+
icon: A,
|
|
41
42
|
shape: "square",
|
|
42
43
|
tone: g,
|
|
43
|
-
className: t("resource-header--icon size-avatar-lg [&>svg]:size-icon-lg",
|
|
44
|
+
className: t("resource-header--icon size-avatar-lg [&>svg]:size-icon-lg", k)
|
|
44
45
|
}) : null);
|
|
45
46
|
return /* @__PURE__ */ v(h, {
|
|
46
47
|
eyebrow: i,
|
|
47
48
|
title: e,
|
|
48
49
|
description: n,
|
|
49
|
-
leading:
|
|
50
|
+
leading: M,
|
|
50
51
|
titleSuffix: _ ? /* @__PURE__ */ v(r, {
|
|
51
52
|
"data-slot": "resource-header-badges",
|
|
52
53
|
direction: "horizontal",
|
|
@@ -64,11 +65,12 @@ function x({ title: e, description: n, eyebrow: i, media: a, avatarUrl: o, avata
|
|
|
64
65
|
actions: x,
|
|
65
66
|
primaryAction: S,
|
|
66
67
|
secondaryActions: C,
|
|
67
|
-
|
|
68
|
-
|
|
68
|
+
maxVisibleSecondaryActions: w,
|
|
69
|
+
moreActionsLabel: T,
|
|
70
|
+
renderLink: E,
|
|
69
71
|
withSeparator: !1,
|
|
70
|
-
className: t("resource-header--component",
|
|
71
|
-
contentClassName:
|
|
72
|
+
className: t("resource-header--component", D),
|
|
73
|
+
contentClassName: O,
|
|
72
74
|
eyebrowClassName: "resource-header--eyebrow",
|
|
73
75
|
titleClassName: "resource-header--title truncate",
|
|
74
76
|
descriptionClassName: "resource-header--description max-w-3xl",
|
|
@@ -79,7 +81,7 @@ function S({ children: e, leading: n, trailing: i, sticky: a = !1, className: o
|
|
|
79
81
|
return /* @__PURE__ */ v("div", {
|
|
80
82
|
"data-component": "resource-action-bar",
|
|
81
83
|
"data-slot": "resource-action-bar",
|
|
82
|
-
className: t("resource-action-bar--component box-border rounded-
|
|
84
|
+
className: t("resource-action-bar--component box-border rounded-surface border border-border bg-card text-card-foreground px-surface py-row-y-lg shadow-xs", a && "sticky top-shell-header z-30", o),
|
|
83
85
|
children: /* @__PURE__ */ y(r, {
|
|
84
86
|
direction: {
|
|
85
87
|
base: "vertical",
|
|
@@ -114,66 +116,67 @@ function C(e) {
|
|
|
114
116
|
className: t("resource-empty-state--component", e.className)
|
|
115
117
|
});
|
|
116
118
|
}
|
|
117
|
-
function w({ children: n, title: c, description: l, actions: u, primaryAction: d, secondaryActions: f,
|
|
118
|
-
let
|
|
119
|
+
function w({ children: n, title: c, description: l, actions: u, primaryAction: d, secondaryActions: f, maxVisibleSecondaryActions: p, moreActionsLabel: m, renderLink: h, toolbar: g, emptySlot: _, empty: S = !1, loading: w = !1, error: T, onRetry: E, slots: D, className: O, headerClassName: k, contentClassName: A, strings: j, asideClassName: M, variant: N }) {
|
|
120
|
+
let P = e(b, j), F = D?.header ?? (c ? /* @__PURE__ */ v(x, {
|
|
119
121
|
title: c,
|
|
120
122
|
description: l,
|
|
121
123
|
actions: u,
|
|
122
124
|
primaryAction: d,
|
|
123
125
|
secondaryActions: f,
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
126
|
+
maxVisibleSecondaryActions: p,
|
|
127
|
+
moreActionsLabel: m,
|
|
128
|
+
renderLink: h,
|
|
129
|
+
className: k
|
|
130
|
+
}) : null), I = D?.toolbar ?? g, L = D?.loading ?? /* @__PURE__ */ v(i, {
|
|
128
131
|
variant: "panel",
|
|
129
|
-
label:
|
|
130
|
-
description:
|
|
132
|
+
label: P.loadingLabel,
|
|
133
|
+
description: P.loadingDescription,
|
|
131
134
|
skeleton: !0,
|
|
132
135
|
lines: 4,
|
|
133
|
-
className: "resource-shell--loading rounded-
|
|
134
|
-
}),
|
|
135
|
-
title:
|
|
136
|
-
description:
|
|
136
|
+
className: "resource-shell--loading rounded-surface border border-border bg-card"
|
|
137
|
+
}), R = D?.empty ?? _ ?? /* @__PURE__ */ v(C, {
|
|
138
|
+
title: P.emptyTitle,
|
|
139
|
+
description: P.emptyDescription,
|
|
137
140
|
border: !0
|
|
138
|
-
}),
|
|
139
|
-
title:
|
|
140
|
-
description:
|
|
141
|
-
onRetry:
|
|
142
|
-
retryLabel:
|
|
143
|
-
}),
|
|
141
|
+
}), z = /* @__PURE__ */ v(a, {
|
|
142
|
+
title: P.errorTitle,
|
|
143
|
+
description: T instanceof Error ? T.message : typeof T == "string" || typeof T == "number" ? String(T) : P.errorDescription,
|
|
144
|
+
onRetry: E,
|
|
145
|
+
retryLabel: P.retryLabel
|
|
146
|
+
}), B = D?.error ?? (T && typeof T != "boolean" && typeof T != "string" && typeof T != "number" && !(T instanceof Error) ? T : z), V = w ? L : T ? B : S ? R : n;
|
|
144
147
|
return /* @__PURE__ */ y("section", {
|
|
145
|
-
"data-component": `resource-${
|
|
146
|
-
"data-slot": `resource-${
|
|
147
|
-
className: t(`resource-${
|
|
148
|
+
"data-component": `resource-${N}-shell`,
|
|
149
|
+
"data-slot": `resource-${N}-shell`,
|
|
150
|
+
className: t(`resource-${N}-shell--component flex min-w-0 flex-col`, s.subjects, N === "index" && "@container/resource-index", N === "show" && "@container/resource-show", O),
|
|
148
151
|
children: [
|
|
149
|
-
!!P && /* @__PURE__ */ v("div", {
|
|
150
|
-
"data-slot": `resource-${M}-header`,
|
|
151
|
-
className: `resource-${M}-shell--header`,
|
|
152
|
-
children: P
|
|
153
|
-
}),
|
|
154
152
|
!!F && /* @__PURE__ */ v("div", {
|
|
155
|
-
"data-slot": `resource-${
|
|
156
|
-
className: `resource-${
|
|
153
|
+
"data-slot": `resource-${N}-header`,
|
|
154
|
+
className: `resource-${N}-shell--header`,
|
|
157
155
|
children: F
|
|
158
156
|
}),
|
|
157
|
+
!!I && /* @__PURE__ */ v("div", {
|
|
158
|
+
"data-slot": `resource-${N}-toolbar`,
|
|
159
|
+
className: `resource-${N}-shell--toolbar`,
|
|
160
|
+
children: I
|
|
161
|
+
}),
|
|
159
162
|
/* @__PURE__ */ y("div", {
|
|
160
|
-
"data-slot": `resource-${
|
|
161
|
-
className: t(`resource-${
|
|
163
|
+
"data-slot": `resource-${N}-layout`,
|
|
164
|
+
className: t(`resource-${N}-shell--layout grid min-w-0`, s.subjects, D?.aside && N === "show" && "@4xl/resource-show:grid-cols-[minmax(0,1fr)_var(--shell-sidebar-width)]", D?.aside && N === "index" && "@4xl/resource-index:grid-cols-[minmax(0,1fr)_var(--shell-sidebar-width)]"),
|
|
162
165
|
children: [/* @__PURE__ */ y(r, {
|
|
163
166
|
gap: o.subjects,
|
|
164
167
|
children: [/* @__PURE__ */ v("div", {
|
|
165
|
-
"data-slot": `resource-${
|
|
166
|
-
className: t(`resource-${
|
|
167
|
-
children:
|
|
168
|
-
}), !!
|
|
169
|
-
"data-slot": `resource-${
|
|
170
|
-
className: `resource-${
|
|
171
|
-
children:
|
|
168
|
+
"data-slot": `resource-${N}-content`,
|
|
169
|
+
className: t(`resource-${N}-shell--content flex min-w-0 flex-col`, s.subjects, A),
|
|
170
|
+
children: V
|
|
171
|
+
}), !!D?.footer && /* @__PURE__ */ v("div", {
|
|
172
|
+
"data-slot": `resource-${N}-footer`,
|
|
173
|
+
className: `resource-${N}-shell--footer`,
|
|
174
|
+
children: D.footer
|
|
172
175
|
})]
|
|
173
|
-
}), !!
|
|
174
|
-
"data-slot": `resource-${
|
|
175
|
-
className: t(`resource-${
|
|
176
|
-
children:
|
|
176
|
+
}), !!D?.aside && /* @__PURE__ */ v("aside", {
|
|
177
|
+
"data-slot": `resource-${N}-aside`,
|
|
178
|
+
className: t(`resource-${N}-shell--aside flex min-w-0 flex-col`, s.subjects, M),
|
|
179
|
+
children: D.aside
|
|
177
180
|
})]
|
|
178
181
|
})
|
|
179
182
|
]
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resource.js","names":["Text","Stack","LoadingState","ErrorState","compositionRhythm","compositionClasses","Initials","IconBadge","AvatarFallback","Avatar","AvatarImage","ContentBlock","MetadataList","PageHeading","OverflowTabBar","EmptyState","defaultResourceStrings","ResourceHeader","Icon","icon","titleText","title","resolvedMedia","media","avatarUrl","avatarFallback","cn","mediaClassName","avatarAlt","iconTone","badges","metadata","className","ResourceActionBar","sticky","leading","children","trailing","ResourceEmptyState","props","ResourceShellFrame","emptyState","stringsProp","strings","useStrings","header","slots","headerClassName","toolbarNode","toolbar","loadingNode","emptyNode","emptySlot","defaultErrorNode","error","errorNode","body","loading","variant","contentClassName","asideClassName","ResourceIndexShell","ResourceShowShell","TabbedResourceShell","tabs","activeTab","onTabChange","tabsClassName","moreLabel","tabsAriaLabel","ResourceCard","name","footer","ResourceDetailsSection","metadataColumns","metadataDense","help"],"sources":["../../src/components/features/resource/resource.strings.ts","../../src/components/features/resource/resource.tsx"],"sourcesContent":["/** Default copy for state-aware resource workspace replacement states. */\nexport interface ResourceStrings {\n\tloadingLabel: string;\n\tloadingDescription: string;\n\temptyTitle: string;\n\temptyDescription: string;\n\terrorTitle: string;\n\terrorDescription: string;\n\tretryLabel: string;\n\ttabsAriaLabel: string;\n}\n\nexport const defaultResourceStrings: ResourceStrings = {\n\tloadingLabel: 'Loading resources',\n\tloadingDescription: 'Preparing the latest data for this view.',\n\temptyTitle: 'No resources found',\n\temptyDescription: 'There are no records available for this view.',\n\terrorTitle: 'Resources unavailable',\n\terrorDescription: 'The resource data could not be loaded.',\n\tretryLabel: 'Try again',\n\ttabsAriaLabel: 'Resource sections',\n};\n","/** State-aware resource workspace primitives for coordinated index/show surfaces. */\nimport { ContentBlock, IconBadge } from '../../base/display';\nimport { Avatar, AvatarFallback, AvatarImage } from '../../base/avatar';\nimport { ErrorState, LoadingState } from '../../base/feedback';\nimport { MetadataList } from '../../base/metadata-list';\nimport { EmptyState } from '../../blocks/data-display';\nimport { OverflowTabBar, PageHeading } from '../../base/navigation';\nimport { Stack } from '../../base/structure';\nimport {compositionClasses, compositionRhythm} from '../../base/structure/composition.recipes';\nimport { Initials } from '../../primitives';\nimport { Text } from '../../typography';\nimport { useStrings } from '../../../lib/strings';\nimport { cn } from '../../../lib/utils';\n\nimport { defaultResourceStrings } from './resource.strings';\nimport type {\n\tResourceActionBarProps,\n\tResourceDetailsSectionProps,\n\tResourceEmptyStateProps,\n\tResourceHeaderProps,\n\tResourceIndexShellProps,\n\tResourceShowShellProps,\n\tTabbedResourceShellProps,\n} from './resource.types';\n\nexport function ResourceHeader({\n\ttitle,\n\tdescription,\n\teyebrow,\n\tmedia,\n\tavatarUrl,\n\tavatarAlt,\n\tavatarFallback,\n\ticon,\n\ticonTone = 'neutral',\n\tbadges,\n\tmetadata,\n\tactions,\n\tprimaryAction,\n\tsecondaryActions,\n\tmoreActionsLabel,\n\trenderLink,\n\tclassName,\n\tcontentClassName,\n\tmediaClassName,\n}: ResourceHeaderProps) {\n\tconst Icon = icon;\n\tconst titleText = typeof title === 'string' ? title : '';\n\tconst resolvedMedia =\n\t\tmedia ??\n\t\t(avatarUrl || avatarFallback ? (\n\t\t\t<Avatar className={cn('resource-header--avatar size-avatar-lg', mediaClassName)}>\n\t\t\t\t{!!avatarUrl && <AvatarImage src={avatarUrl} alt={avatarAlt ?? titleText} />}\n\t\t\t\t<AvatarFallback>{avatarFallback ?? <Initials value={titleText} strategy=\"first-words\" />}</AvatarFallback>\n\t\t\t</Avatar>\n\t\t) : Icon ? (\n\t\t\t<IconBadge\n\t\t\t\ticon={Icon}\n\t\t\t\tshape=\"square\"\n\t\t\t\ttone={iconTone}\n\t\t\t\tclassName={cn('resource-header--icon size-avatar-lg [&>svg]:size-icon-lg', mediaClassName)}\n\t\t\t/>\n\t\t) : null);\n\n\treturn (\n\t\t<PageHeading\n\t\t\teyebrow={eyebrow}\n\t\t\ttitle={title}\n\t\t\tdescription={description}\n\t\t\tleading={resolvedMedia}\n\t\t\ttitleSuffix={\n\t\t\t\tbadges ? (\n\t\t\t\t\t<Stack\n\t\t\t\t\t\tdata-slot=\"resource-header-badges\"\n\t\t\t\t\t\tdirection=\"horizontal\"\n\t\t\t\t\t\tgap=\"sm\"\n\t\t\t\t\t\tclassName=\"resource-header--badges shrink-0\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{badges}\n\t\t\t\t\t</Stack>\n\t\t\t\t) : undefined\n\t\t\t}\n\t\t\tafterDescription={\n\t\t\t\tmetadata ? (\n\t\t\t\t\t<Stack\n\t\t\t\t\t\tdata-slot=\"resource-header-metadata\"\n\t\t\t\t\t\tdirection=\"horizontal\"\n\t\t\t\t\t\tgap=\"md\"\n\t\t\t\t\t\tclassName=\"resource-header--metadata mt-space-sm\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{metadata}\n\t\t\t\t\t</Stack>\n\t\t\t\t) : undefined\n\t\t\t}\n\t\t\tactions={actions}\n\t\t\tprimaryAction={primaryAction}\n\t\t\tsecondaryActions={secondaryActions}\n\t\t\tmoreActionsLabel={moreActionsLabel}\n\t\t\trenderLink={renderLink}\n\t\t\twithSeparator={false}\n\t\t\tclassName={cn('resource-header--component', className)}\n\t\t\tcontentClassName={contentClassName}\n\t\t\teyebrowClassName=\"resource-header--eyebrow\"\n\t\t\ttitleClassName=\"resource-header--title truncate\"\n\t\t\tdescriptionClassName=\"resource-header--description max-w-3xl\"\n\t\t\tactionsClassName=\"resource-header--actions flex-wrap\"\n\t\t/>\n\t);\n}\n\nexport function ResourceActionBar({ children, leading, trailing, sticky = false, className }: ResourceActionBarProps) {\n\treturn (\n\t\t<div\n\t\t\tdata-component=\"resource-action-bar\"\n\t\t\tdata-slot=\"resource-action-bar\"\n\t\t\tclassName={cn(\n\t\t\t\t'resource-action-bar--component box-border rounded-radius border border-border bg-card text-card-foreground px-surface py-row-y-lg shadow-xs',\n\t\t\t\tsticky && 'sticky top-shell-header z-30',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t>\n\t\t\t<Stack\n\t\t\t\tdirection={{ base: 'vertical', sm: 'horizontal' }}\n\t\t\t\tgap=\"lg\"\n\t\t\t\talign={{ sm: 'center' }}\n\t\t\t\tjustify={{ sm: 'between' }}\n\t\t\t\twrap={{ sm: false }}\n\t\t\t\tclassName=\"resource-action-bar--layout\"\n\t\t\t>\n\t\t\t\t<Stack\n\t\t\t\t\tdata-slot=\"resource-action-leading\"\n\t\t\t\t\tdirection=\"horizontal\"\n\t\t\t\t\tgap=\"md\"\n\t\t\t\t\tclassName=\"resource-action-bar--leading flex-1\"\n\t\t\t\t>\n\t\t\t\t\t{leading ?? children}\n\t\t\t\t</Stack>\n\t\t\t\t{!!trailing && (\n\t\t\t\t\t<Stack\n\t\t\t\t\t\tdata-slot=\"resource-action-trailing\"\n\t\t\t\t\t\tdirection=\"horizontal\"\n\t\t\t\t\t\tgap=\"md\"\n\t\t\t\t\t\tclassName=\"resource-action-bar--trailing shrink-0\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{trailing}\n\t\t\t\t\t</Stack>\n\t\t\t\t)}\n\t\t\t</Stack>\n\t\t</div>\n\t);\n}\n\nexport function ResourceEmptyState(props: ResourceEmptyStateProps) {\n\treturn (\n\t\t<EmptyState\n\t\t\t{...props}\n\t\t\tdata-component=\"resource-empty-state\"\n\t\t\tdata-slot=\"resource-empty-state\"\n\t\t\tclassName={cn('resource-empty-state--component', props.className)}\n\t\t/>\n\t);\n}\n\nfunction ResourceShellFrame({\n\tchildren,\n\ttitle,\n\tdescription,\n\tactions,\n\tprimaryAction,\n\tsecondaryActions,\n\tmoreActionsLabel,\n\trenderLink,\n\ttoolbar,\n\temptySlot,\n\tempty: emptyState = false,\n\tloading = false,\n\terror,\n\tonRetry,\n\tslots,\n\tclassName,\n\theaderClassName,\n\tcontentClassName,\n\tstrings: stringsProp,\n\tasideClassName,\n\tvariant,\n}: ResourceIndexShellProps & {\n\tasideClassName?: string;\n\tvariant: 'index' | 'show';\n}) {\n\tconst strings = useStrings(defaultResourceStrings, stringsProp);\n\tconst header =\n\t\tslots?.header ??\n\t\t(title ? (\n\t\t\t<ResourceHeader\n\t\t\t\ttitle={title}\n\t\t\t\tdescription={description}\n\t\t\t\tactions={actions}\n\t\t\t\tprimaryAction={primaryAction}\n\t\t\t\tsecondaryActions={secondaryActions}\n\t\t\t\tmoreActionsLabel={moreActionsLabel}\n\t\t\t\trenderLink={renderLink}\n\t\t\t\tclassName={headerClassName}\n\t\t\t/>\n\t\t) : null);\n\tconst toolbarNode = slots?.toolbar ?? toolbar;\n\tconst loadingNode = slots?.loading ?? (\n\t\t<LoadingState\n\t\t\tvariant=\"panel\"\n\t\t\tlabel={strings.loadingLabel}\n\t\t\tdescription={strings.loadingDescription}\n\t\t\tskeleton\n\t\t\tlines={4}\n\t\t\tclassName=\"resource-shell--loading rounded-radius border border-border bg-card\"\n\t\t/>\n\t);\n\tconst emptyNode = slots?.empty ?? emptySlot ?? (\n\t\t<ResourceEmptyState title={strings.emptyTitle} description={strings.emptyDescription} border />\n\t);\n\tconst defaultErrorNode = (\n\t\t<ErrorState\n\t\t\ttitle={strings.errorTitle}\n\t\t\tdescription={\n\t\t\t\terror instanceof Error\n\t\t\t\t\t? error.message\n\t\t\t\t\t: typeof error === 'string' || typeof error === 'number'\n\t\t\t\t\t\t? String(error)\n\t\t\t\t\t\t: strings.errorDescription\n\t\t\t}\n\t\t\tonRetry={onRetry}\n\t\t\tretryLabel={strings.retryLabel}\n\t\t/>\n\t);\n\tconst errorNode =\n\t\tslots?.error ??\n\t\t(error &&\n\t\ttypeof error !== 'boolean' &&\n\t\ttypeof error !== 'string' &&\n\t\ttypeof error !== 'number' &&\n\t\t!(error instanceof Error)\n\t\t\t? error\n\t\t\t: defaultErrorNode);\n\tconst body = loading ? loadingNode : error ? errorNode : emptyState ? emptyNode : children;\n\n\treturn (\n\t\t<section\n\t\t\tdata-component={`resource-${variant}-shell`}\n\t\t\tdata-slot={`resource-${variant}-shell`}\n\t\t\tclassName={cn(\n\t\t\t\t`resource-${variant}-shell--component flex min-w-0 flex-col`, compositionClasses.subjects,\n\t\t\t\tvariant === 'index' && '@container/resource-index',\n\t\t\t\tvariant === 'show' && '@container/resource-show',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t>\n\t\t\t{!!header && (\n\t\t\t\t<div data-slot={`resource-${variant}-header`} className={`resource-${variant}-shell--header`}>\n\t\t\t\t\t{header}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t\t{!!toolbarNode && (\n\t\t\t\t<div data-slot={`resource-${variant}-toolbar`} className={`resource-${variant}-shell--toolbar`}>\n\t\t\t\t\t{toolbarNode}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t\t<div\n\t\t\t\tdata-slot={`resource-${variant}-layout`}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t`resource-${variant}-shell--layout grid min-w-0`, compositionClasses.subjects,\n\t\t\t\t\tslots?.aside &&\n\t\t\t\t\t\tvariant === 'show' &&\n\t\t\t\t\t\t'@4xl/resource-show:grid-cols-[minmax(0,1fr)_var(--shell-sidebar-width)]',\n\t\t\t\t\tslots?.aside &&\n\t\t\t\t\t\tvariant === 'index' &&\n\t\t\t\t\t\t'@4xl/resource-index:grid-cols-[minmax(0,1fr)_var(--shell-sidebar-width)]',\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t<Stack gap={compositionRhythm.subjects}>\n\t\t\t\t\t<div\n\t\t\t\t\t\tdata-slot={`resource-${variant}-content`}\n\t\t\t\t\t\tclassName={cn(`resource-${variant}-shell--content flex min-w-0 flex-col`, compositionClasses.subjects, contentClassName)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{body}\n\t\t\t\t\t</div>\n\t\t\t\t\t{!!slots?.footer && (\n\t\t\t\t\t\t<div data-slot={`resource-${variant}-footer`} className={`resource-${variant}-shell--footer`}>\n\t\t\t\t\t\t\t{slots.footer}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)}\n\t\t\t\t</Stack>\n\t\t\t\t{!!slots?.aside && (\n\t\t\t\t\t<aside\n\t\t\t\t\t\tdata-slot={`resource-${variant}-aside`}\n\t\t\t\t\t\tclassName={cn(`resource-${variant}-shell--aside flex min-w-0 flex-col`, compositionClasses.subjects, asideClassName)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{slots.aside}\n\t\t\t\t\t</aside>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t</section>\n\t);\n}\n\nexport function ResourceIndexShell(props: ResourceIndexShellProps) {\n\treturn <ResourceShellFrame {...props} variant=\"index\" />;\n}\n\nexport function ResourceShowShell(props: ResourceShowShellProps) {\n\treturn <ResourceShellFrame {...props} variant=\"show\" />;\n}\n\nexport function TabbedResourceShell({\n\ttabs,\n\tactiveTab,\n\tonTabChange,\n\ttabsClassName,\n\tmoreLabel,\n\ttabsAriaLabel,\n\ttoolbar,\n\tslots,\n\tclassName,\n\tstrings: stringsProp,\n\t...props\n}: TabbedResourceShellProps) {\n\tconst strings = useStrings(defaultResourceStrings, stringsProp);\n\tconst toolbarNode = (\n\t\t<Stack gap=\"lg\" data-slot=\"tabbed-resource-toolbar\" className=\"tabbed-resource-shell--toolbar\">\n\t\t\t<OverflowTabBar\n\t\t\t\titems={tabs}\n\t\t\t\tvalue={activeTab}\n\t\t\t\tonValueChange={onTabChange}\n\t\t\t\tclassName={tabsClassName}\n\t\t\t\tstrings={{\n\t\t\t\t\tmore: moreLabel,\n\t\t\t\t\tnavigationLabel: tabsAriaLabel ?? strings.tabsAriaLabel,\n\t\t\t\t}}\n\t\t\t/>\n\t\t\t{toolbar}\n\t\t</Stack>\n\t);\n\n\treturn (\n\t\t<ResourceShowShell\n\t\t\t{...props}\n\t\t\tstrings={stringsProp}\n\t\t\tclassName={cn('tabbed-resource-shell--component', className)}\n\t\t\ttoolbar={toolbarNode}\n\t\t\tslots={{ ...slots, toolbar: slots?.toolbar ?? toolbarNode }}\n\t\t/>\n\t);\n}\n\nfunction ResourceCard({\n\ttitle,\n\tdescription,\n\tactions,\n\theaderAction,\n\tchildren,\n\tfooter,\n\tpadding = 'md',\n\tsurface = 'card',\n\tclassName,\n\tcontentClassName,\n\tname,\n}: ResourceDetailsSectionProps & { name: string }) {\n\treturn (\n\t\t<ContentBlock\n\t\t\tdata-component={name}\n\t\t\tdata-slot={name}\n\t\t\ttitle={title}\n\t\t\tdescription={description}\n\t\t\tactions={actions}\n\t\t\theaderAction={headerAction}\n\t\t\tfooterSlot={footer}\n\t\t\tpadding={padding}\n\t\t\tsurface={surface}\n\t\t\tclassName={cn(`${name}--component`, className)}\n\t\t\tcontentClassName={contentClassName}\n\t\t>\n\t\t\t{children}\n\t\t</ContentBlock>\n\t);\n}\n\nexport function ResourceDetailsSection({\n\tmetadata,\n\tmetadataColumns = 2,\n\tmetadataDense = false,\n\tbody,\n\thelp,\n\tchildren,\n\tcontentClassName,\n\t...props\n}: ResourceDetailsSectionProps) {\n\treturn (\n\t\t<ResourceCard\n\t\t\t{...props}\n\t\t\tname=\"resource-details-section\"\n\t\t\tcontentClassName={cn('resource-details-section--content grid gap-space-xl', contentClassName)}\n\t\t>\n\t\t\t{!!metadata?.length && (\n\t\t\t\t<MetadataList adaptTo=\"container\" items={metadata} columns={metadataColumns} density={metadataDense ? 'compact' : 'default'} />\n\t\t\t)}\n\t\t\t{body}\n\t\t\t{children}\n\t\t\t{!!help && (\n\t\t\t\t<Text size=\"xs\" type=\"secondary\" className=\"resource-details-section--help\">\n\t\t\t\t\t{help}\n\t\t\t\t</Text>\n\t\t\t)}\n\t\t</ResourceCard>\n\t);\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"resource.js","names":["Text","Stack","LoadingState","ErrorState","compositionRhythm","compositionClasses","Initials","IconBadge","AvatarFallback","Avatar","AvatarImage","ContentBlock","MetadataList","PageHeading","OverflowTabBar","EmptyState","defaultResourceStrings","ResourceHeader","Icon","icon","titleText","title","resolvedMedia","media","avatarUrl","avatarFallback","cn","mediaClassName","avatarAlt","iconTone","badges","metadata","className","ResourceActionBar","sticky","leading","children","trailing","ResourceEmptyState","props","ResourceShellFrame","emptyState","stringsProp","strings","useStrings","header","slots","headerClassName","toolbarNode","toolbar","loadingNode","emptyNode","emptySlot","defaultErrorNode","error","errorNode","body","loading","variant","contentClassName","asideClassName","ResourceIndexShell","ResourceShowShell","TabbedResourceShell","tabs","activeTab","onTabChange","tabsClassName","moreLabel","tabsAriaLabel","ResourceCard","name","footer","ResourceDetailsSection","metadataColumns","metadataDense","help"],"sources":["../../src/components/features/resource/resource.strings.ts","../../src/components/features/resource/resource.tsx"],"sourcesContent":["/** Default copy for state-aware resource workspace replacement states. */\nexport interface ResourceStrings {\n\tloadingLabel: string;\n\tloadingDescription: string;\n\temptyTitle: string;\n\temptyDescription: string;\n\terrorTitle: string;\n\terrorDescription: string;\n\tretryLabel: string;\n\ttabsAriaLabel: string;\n}\n\nexport const defaultResourceStrings: ResourceStrings = {\n\tloadingLabel: 'Loading resources',\n\tloadingDescription: 'Preparing the latest data for this view.',\n\temptyTitle: 'No resources found',\n\temptyDescription: 'There are no records available for this view.',\n\terrorTitle: 'Resources unavailable',\n\terrorDescription: 'The resource data could not be loaded.',\n\tretryLabel: 'Try again',\n\ttabsAriaLabel: 'Resource sections',\n};\n","/** State-aware resource workspace primitives for coordinated index/show surfaces. */\nimport { ContentBlock, IconBadge } from '../../base/display';\nimport { Avatar, AvatarFallback, AvatarImage } from '../../base/avatar';\nimport { ErrorState, LoadingState } from '../../base/feedback';\nimport { MetadataList } from '../../base/metadata-list';\nimport { EmptyState } from '../../blocks/data-display';\nimport { OverflowTabBar, PageHeading } from '../../base/navigation';\nimport { Stack } from '../../base/structure';\nimport {compositionClasses, compositionRhythm} from '../../base/structure/composition.recipes';\nimport { Initials } from '../../primitives';\nimport { Text } from '../../typography';\nimport { useStrings } from '../../../lib/strings';\nimport { cn } from '../../../lib/utils';\n\nimport { defaultResourceStrings } from './resource.strings';\nimport type {\n\tResourceActionBarProps,\n\tResourceDetailsSectionProps,\n\tResourceEmptyStateProps,\n\tResourceHeaderProps,\n\tResourceIndexShellProps,\n\tResourceShowShellProps,\n\tTabbedResourceShellProps,\n} from './resource.types';\n\n/** @deprecated Use Page from themelia-react-ui/layout/page; PageHeader is available for embedded headers. */\nexport function ResourceHeader({\n\ttitle,\n\tdescription,\n\teyebrow,\n\tmedia,\n\tavatarUrl,\n\tavatarAlt,\n\tavatarFallback,\n\ticon,\n\ticonTone = 'neutral',\n\tbadges,\n\tmetadata,\n\tactions,\n\tprimaryAction,\n\tsecondaryActions,\n\tmaxVisibleSecondaryActions,\n\tmoreActionsLabel,\n\trenderLink,\n\tclassName,\n\tcontentClassName,\n\tmediaClassName,\n}: ResourceHeaderProps) {\n\tconst Icon = icon;\n\tconst titleText = typeof title === 'string' ? title : '';\n\tconst resolvedMedia =\n\t\tmedia ??\n\t\t(avatarUrl || avatarFallback ? (\n\t\t\t<Avatar className={cn('resource-header--avatar size-avatar-lg', mediaClassName)}>\n\t\t\t\t{!!avatarUrl && <AvatarImage src={avatarUrl} alt={avatarAlt ?? titleText} />}\n\t\t\t\t<AvatarFallback>{avatarFallback ?? <Initials value={titleText} strategy=\"first-words\" />}</AvatarFallback>\n\t\t\t</Avatar>\n\t\t) : Icon ? (\n\t\t\t<IconBadge\n\t\t\t\ticon={Icon}\n\t\t\t\tshape=\"square\"\n\t\t\t\ttone={iconTone}\n\t\t\t\tclassName={cn('resource-header--icon size-avatar-lg [&>svg]:size-icon-lg', mediaClassName)}\n\t\t\t/>\n\t\t) : null);\n\n\treturn (\n\t\t<PageHeading\n\t\t\teyebrow={eyebrow}\n\t\t\ttitle={title}\n\t\t\tdescription={description}\n\t\t\tleading={resolvedMedia}\n\t\t\ttitleSuffix={\n\t\t\t\tbadges ? (\n\t\t\t\t\t<Stack\n\t\t\t\t\t\tdata-slot=\"resource-header-badges\"\n\t\t\t\t\t\tdirection=\"horizontal\"\n\t\t\t\t\t\tgap=\"sm\"\n\t\t\t\t\t\tclassName=\"resource-header--badges shrink-0\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{badges}\n\t\t\t\t\t</Stack>\n\t\t\t\t) : undefined\n\t\t\t}\n\t\t\tafterDescription={\n\t\t\t\tmetadata ? (\n\t\t\t\t\t<Stack\n\t\t\t\t\t\tdata-slot=\"resource-header-metadata\"\n\t\t\t\t\t\tdirection=\"horizontal\"\n\t\t\t\t\t\tgap=\"md\"\n\t\t\t\t\t\tclassName=\"resource-header--metadata mt-space-sm\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{metadata}\n\t\t\t\t\t</Stack>\n\t\t\t\t) : undefined\n\t\t\t}\n\t\t\tactions={actions}\n\t\t\tprimaryAction={primaryAction}\n\t\t\tsecondaryActions={secondaryActions}\n\t\t\tmaxVisibleSecondaryActions={maxVisibleSecondaryActions}\n\t\t\tmoreActionsLabel={moreActionsLabel}\n\t\t\trenderLink={renderLink}\n\t\t\twithSeparator={false}\n\t\t\tclassName={cn('resource-header--component', className)}\n\t\t\tcontentClassName={contentClassName}\n\t\t\teyebrowClassName=\"resource-header--eyebrow\"\n\t\t\ttitleClassName=\"resource-header--title truncate\"\n\t\t\tdescriptionClassName=\"resource-header--description max-w-3xl\"\n\t\t\tactionsClassName=\"resource-header--actions flex-wrap\"\n\t\t/>\n\t);\n}\n\nexport function ResourceActionBar({ children, leading, trailing, sticky = false, className }: ResourceActionBarProps) {\n\treturn (\n\t\t<div\n\t\t\tdata-component=\"resource-action-bar\"\n\t\t\tdata-slot=\"resource-action-bar\"\n\t\t\tclassName={cn(\n\t\t\t\t'resource-action-bar--component box-border rounded-surface border border-border bg-card text-card-foreground px-surface py-row-y-lg shadow-xs',\n\t\t\t\tsticky && 'sticky top-shell-header z-30',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t>\n\t\t\t<Stack\n\t\t\t\tdirection={{ base: 'vertical', sm: 'horizontal' }}\n\t\t\t\tgap=\"lg\"\n\t\t\t\talign={{ sm: 'center' }}\n\t\t\t\tjustify={{ sm: 'between' }}\n\t\t\t\twrap={{ sm: false }}\n\t\t\t\tclassName=\"resource-action-bar--layout\"\n\t\t\t>\n\t\t\t\t<Stack\n\t\t\t\t\tdata-slot=\"resource-action-leading\"\n\t\t\t\t\tdirection=\"horizontal\"\n\t\t\t\t\tgap=\"md\"\n\t\t\t\t\tclassName=\"resource-action-bar--leading flex-1\"\n\t\t\t\t>\n\t\t\t\t\t{leading ?? children}\n\t\t\t\t</Stack>\n\t\t\t\t{!!trailing && (\n\t\t\t\t\t<Stack\n\t\t\t\t\t\tdata-slot=\"resource-action-trailing\"\n\t\t\t\t\t\tdirection=\"horizontal\"\n\t\t\t\t\t\tgap=\"md\"\n\t\t\t\t\t\tclassName=\"resource-action-bar--trailing shrink-0\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{trailing}\n\t\t\t\t\t</Stack>\n\t\t\t\t)}\n\t\t\t</Stack>\n\t\t</div>\n\t);\n}\n\nexport function ResourceEmptyState(props: ResourceEmptyStateProps) {\n\treturn (\n\t\t<EmptyState\n\t\t\t{...props}\n\t\t\tdata-component=\"resource-empty-state\"\n\t\t\tdata-slot=\"resource-empty-state\"\n\t\t\tclassName={cn('resource-empty-state--component', props.className)}\n\t\t/>\n\t);\n}\n\nfunction ResourceShellFrame({\n\tchildren,\n\ttitle,\n\tdescription,\n\tactions,\n\tprimaryAction,\n\tsecondaryActions,\n\tmaxVisibleSecondaryActions,\n\tmoreActionsLabel,\n\trenderLink,\n\ttoolbar,\n\temptySlot,\n\tempty: emptyState = false,\n\tloading = false,\n\terror,\n\tonRetry,\n\tslots,\n\tclassName,\n\theaderClassName,\n\tcontentClassName,\n\tstrings: stringsProp,\n\tasideClassName,\n\tvariant,\n}: ResourceIndexShellProps & {\n\tasideClassName?: string;\n\tvariant: 'index' | 'show';\n}) {\n\tconst strings = useStrings(defaultResourceStrings, stringsProp);\n\tconst header =\n\t\tslots?.header ??\n\t\t(title ? (\n\t\t\t<ResourceHeader\n\t\t\t\ttitle={title}\n\t\t\t\tdescription={description}\n\t\t\t\tactions={actions}\n\t\t\t\tprimaryAction={primaryAction}\n\t\t\t\tsecondaryActions={secondaryActions}\n\t\t\t\tmaxVisibleSecondaryActions={maxVisibleSecondaryActions}\n\t\t\t\tmoreActionsLabel={moreActionsLabel}\n\t\t\t\trenderLink={renderLink}\n\t\t\t\tclassName={headerClassName}\n\t\t\t/>\n\t\t) : null);\n\tconst toolbarNode = slots?.toolbar ?? toolbar;\n\tconst loadingNode = slots?.loading ?? (\n\t\t<LoadingState\n\t\t\tvariant=\"panel\"\n\t\t\tlabel={strings.loadingLabel}\n\t\t\tdescription={strings.loadingDescription}\n\t\t\tskeleton\n\t\t\tlines={4}\n\t\t\tclassName=\"resource-shell--loading rounded-surface border border-border bg-card\"\n\t\t/>\n\t);\n\tconst emptyNode = slots?.empty ?? emptySlot ?? (\n\t\t<ResourceEmptyState title={strings.emptyTitle} description={strings.emptyDescription} border />\n\t);\n\tconst defaultErrorNode = (\n\t\t<ErrorState\n\t\t\ttitle={strings.errorTitle}\n\t\t\tdescription={\n\t\t\t\terror instanceof Error\n\t\t\t\t\t? error.message\n\t\t\t\t\t: typeof error === 'string' || typeof error === 'number'\n\t\t\t\t\t\t? String(error)\n\t\t\t\t\t\t: strings.errorDescription\n\t\t\t}\n\t\t\tonRetry={onRetry}\n\t\t\tretryLabel={strings.retryLabel}\n\t\t/>\n\t);\n\tconst errorNode =\n\t\tslots?.error ??\n\t\t(error &&\n\t\ttypeof error !== 'boolean' &&\n\t\ttypeof error !== 'string' &&\n\t\ttypeof error !== 'number' &&\n\t\t!(error instanceof Error)\n\t\t\t? error\n\t\t\t: defaultErrorNode);\n\tconst body = loading ? loadingNode : error ? errorNode : emptyState ? emptyNode : children;\n\n\treturn (\n\t\t<section\n\t\t\tdata-component={`resource-${variant}-shell`}\n\t\t\tdata-slot={`resource-${variant}-shell`}\n\t\t\tclassName={cn(\n\t\t\t\t`resource-${variant}-shell--component flex min-w-0 flex-col`, compositionClasses.subjects,\n\t\t\t\tvariant === 'index' && '@container/resource-index',\n\t\t\t\tvariant === 'show' && '@container/resource-show',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t>\n\t\t\t{!!header && (\n\t\t\t\t<div data-slot={`resource-${variant}-header`} className={`resource-${variant}-shell--header`}>\n\t\t\t\t\t{header}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t\t{!!toolbarNode && (\n\t\t\t\t<div data-slot={`resource-${variant}-toolbar`} className={`resource-${variant}-shell--toolbar`}>\n\t\t\t\t\t{toolbarNode}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t\t<div\n\t\t\t\tdata-slot={`resource-${variant}-layout`}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t`resource-${variant}-shell--layout grid min-w-0`, compositionClasses.subjects,\n\t\t\t\t\tslots?.aside &&\n\t\t\t\t\t\tvariant === 'show' &&\n\t\t\t\t\t\t'@4xl/resource-show:grid-cols-[minmax(0,1fr)_var(--shell-sidebar-width)]',\n\t\t\t\t\tslots?.aside &&\n\t\t\t\t\t\tvariant === 'index' &&\n\t\t\t\t\t\t'@4xl/resource-index:grid-cols-[minmax(0,1fr)_var(--shell-sidebar-width)]',\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t<Stack gap={compositionRhythm.subjects}>\n\t\t\t\t\t<div\n\t\t\t\t\t\tdata-slot={`resource-${variant}-content`}\n\t\t\t\t\t\tclassName={cn(`resource-${variant}-shell--content flex min-w-0 flex-col`, compositionClasses.subjects, contentClassName)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{body}\n\t\t\t\t\t</div>\n\t\t\t\t\t{!!slots?.footer && (\n\t\t\t\t\t\t<div data-slot={`resource-${variant}-footer`} className={`resource-${variant}-shell--footer`}>\n\t\t\t\t\t\t\t{slots.footer}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)}\n\t\t\t\t</Stack>\n\t\t\t\t{!!slots?.aside && (\n\t\t\t\t\t<aside\n\t\t\t\t\t\tdata-slot={`resource-${variant}-aside`}\n\t\t\t\t\t\tclassName={cn(`resource-${variant}-shell--aside flex min-w-0 flex-col`, compositionClasses.subjects, asideClassName)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{slots.aside}\n\t\t\t\t\t</aside>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t</section>\n\t);\n}\n\n/** @deprecated Use Page from themelia-react-ui/layout/page; PageHeader is available for embedded headers. */\nexport function ResourceIndexShell(props: ResourceIndexShellProps) {\n\treturn <ResourceShellFrame {...props} variant=\"index\" />;\n}\n\n/** @deprecated Use Page from themelia-react-ui/layout/page; PageHeader is available for embedded headers. */\nexport function ResourceShowShell(props: ResourceShowShellProps) {\n\treturn <ResourceShellFrame {...props} variant=\"show\" />;\n}\n\n/** @deprecated Use Page from themelia-react-ui/layout/page; PageHeader is available for embedded headers. */\nexport function TabbedResourceShell({\n\ttabs,\n\tactiveTab,\n\tonTabChange,\n\ttabsClassName,\n\tmoreLabel,\n\ttabsAriaLabel,\n\ttoolbar,\n\tslots,\n\tclassName,\n\tstrings: stringsProp,\n\t...props\n}: TabbedResourceShellProps) {\n\tconst strings = useStrings(defaultResourceStrings, stringsProp);\n\tconst toolbarNode = (\n\t\t<Stack gap=\"lg\" data-slot=\"tabbed-resource-toolbar\" className=\"tabbed-resource-shell--toolbar\">\n\t\t\t<OverflowTabBar\n\t\t\t\titems={tabs}\n\t\t\t\tvalue={activeTab}\n\t\t\t\tonValueChange={onTabChange}\n\t\t\t\tclassName={tabsClassName}\n\t\t\t\tstrings={{\n\t\t\t\t\tmore: moreLabel,\n\t\t\t\t\tnavigationLabel: tabsAriaLabel ?? strings.tabsAriaLabel,\n\t\t\t\t}}\n\t\t\t/>\n\t\t\t{toolbar}\n\t\t</Stack>\n\t);\n\n\treturn (\n\t\t<ResourceShowShell\n\t\t\t{...props}\n\t\t\tstrings={stringsProp}\n\t\t\tclassName={cn('tabbed-resource-shell--component', className)}\n\t\t\ttoolbar={toolbarNode}\n\t\t\tslots={{ ...slots, toolbar: slots?.toolbar ?? toolbarNode }}\n\t\t/>\n\t);\n}\n\nfunction ResourceCard({\n\ttitle,\n\tdescription,\n\tactions,\n\theaderAction,\n\tchildren,\n\tfooter,\n\tpadding = 'md',\n\tsurface = 'card',\n\tclassName,\n\tcontentClassName,\n\tname,\n}: ResourceDetailsSectionProps & { name: string }) {\n\treturn (\n\t\t<ContentBlock\n\t\t\tdata-component={name}\n\t\t\tdata-slot={name}\n\t\t\ttitle={title}\n\t\t\tdescription={description}\n\t\t\tactions={actions}\n\t\t\theaderAction={headerAction}\n\t\t\tfooterSlot={footer}\n\t\t\tpadding={padding}\n\t\t\tsurface={surface}\n\t\t\tclassName={cn(`${name}--component`, className)}\n\t\t\tcontentClassName={contentClassName}\n\t\t>\n\t\t\t{children}\n\t\t</ContentBlock>\n\t);\n}\n\nexport function ResourceDetailsSection({\n\tmetadata,\n\tmetadataColumns = 2,\n\tmetadataDense = false,\n\tbody,\n\thelp,\n\tchildren,\n\tcontentClassName,\n\t...props\n}: ResourceDetailsSectionProps) {\n\treturn (\n\t\t<ResourceCard\n\t\t\t{...props}\n\t\t\tname=\"resource-details-section\"\n\t\t\tcontentClassName={cn('resource-details-section--content grid gap-space-xl', contentClassName)}\n\t\t>\n\t\t\t{!!metadata?.length && (\n\t\t\t\t<MetadataList adaptTo=\"container\" items={metadata} columns={metadataColumns} density={metadataDense ? 'compact' : 'default'} />\n\t\t\t)}\n\t\t\t{body}\n\t\t\t{children}\n\t\t\t{!!help && (\n\t\t\t\t<Text size=\"xs\" type=\"secondary\" className=\"resource-details-section--help\">\n\t\t\t\t\t{help}\n\t\t\t\t</Text>\n\t\t\t)}\n\t\t</ResourceCard>\n\t);\n}\n"],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { t as e } from "../rich-text-editor-toolbar-
|
|
2
|
+
import { t as e } from "../rich-text-editor-toolbar-laT3tpBT.js";
|
|
3
3
|
import { t } from "../rich-text-editor.strings-CB59ekH2.js";
|
|
4
|
-
import { n, t as r } from "../rich-text-editor-
|
|
4
|
+
import { n, t as r } from "../rich-text-editor-C1fOjBTd.js";
|
|
5
5
|
import { useMemo as i, useRef as a } from "react";
|
|
6
6
|
import { jsx as o } from "react/jsx-runtime";
|
|
7
7
|
import { useController as s, useFormContext as c } from "react-hook-form";
|
|
@@ -1,20 +1,20 @@
|
|
|
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-B6kKb8jB.js";
|
|
4
|
+
import { n } from "../buttons-BedGfygC.js";
|
|
5
|
+
import { c as r } from "../typography-BQnine1k.js";
|
|
6
6
|
import { t as i } from "../text.styles-B64My8RZ.js";
|
|
7
|
-
import { t as a } from "../structure-
|
|
8
|
-
import { t as o } from "../smart-card-
|
|
7
|
+
import { t as a } from "../structure-DuxKl954.js";
|
|
8
|
+
import { t as o } from "../smart-card-CW0hjetE.js";
|
|
9
9
|
import { n as s } from "../composition.recipes-COdiFhxB.js";
|
|
10
|
-
import { t as c } from "../input-
|
|
11
|
-
import { t as l } from "../form-field-
|
|
12
|
-
import { d as u } from "../text-inputs-
|
|
13
|
-
import { a as d, i as f, l as p, o as m, r as h } from "../choice-inputs-
|
|
14
|
-
import { n as g } from "../display-
|
|
15
|
-
import { u as _ } from "../value-inputs-
|
|
16
|
-
import { d as v } from "../forms-numeric-
|
|
17
|
-
import { s as y } from "../data-display-
|
|
10
|
+
import { t as c } from "../input-CvyDQlY7.js";
|
|
11
|
+
import { t as l } from "../form-field-BriWAXyg.js";
|
|
12
|
+
import { d as u } from "../text-inputs-B1culiSK.js";
|
|
13
|
+
import { a as d, i as f, l as p, o as m, r as h } from "../choice-inputs-zUgBZfE4.js";
|
|
14
|
+
import { n as g } from "../display-KsZLw9Ov.js";
|
|
15
|
+
import { u as _ } from "../value-inputs-skdVB2zh.js";
|
|
16
|
+
import { d as v } from "../forms-numeric-DIhghX1Q.js";
|
|
17
|
+
import { s as y } from "../data-display-BdgCAw8T.js";
|
|
18
18
|
import { Fragment as b, useCallback as x, useEffect as S, useId as C, useMemo as w, useState as T } from "react";
|
|
19
19
|
import { jsx as E, jsxs as D } from "react/jsx-runtime";
|
|
20
20
|
//#region src/components/features/schema-form/schema-form.utils.ts
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { useStrings as e } from "../lib/strings.js";
|
|
3
|
-
import { t } from "../utils-
|
|
4
|
-
import { t as n } from "../feedback-
|
|
3
|
+
import { t } from "../utils-B6kKb8jB.js";
|
|
4
|
+
import { t as n } from "../feedback-Dm4izqFn.js";
|
|
5
5
|
import { t as r } from "../use-debounced-callback-Cx1h-hdv.js";
|
|
6
|
-
import { r as i } from "../combobox-
|
|
6
|
+
import { r as i } from "../combobox-BwzoXFSG.js";
|
|
7
7
|
import { useCallback as a, useEffect as o, useMemo as s, useRef as c, useState as l } from "react";
|
|
8
8
|
import { jsx as u, jsxs as d } from "react/jsx-runtime";
|
|
9
9
|
//#region src/components/features/suggestions/hooks/use-suggestions.ts
|