themelia-react-ui 2.0.4 → 2.0.6
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 +211 -0
- package/MIGRATION.md +119 -0
- package/README.md +122 -20
- package/dist/{accordion-96o0pN62.js → accordion-0tQUZ20r.js} +13 -13
- package/dist/accordion-0tQUZ20r.js.map +1 -0
- package/dist/{action-menu-CHgs8vmj.js → action-menu-C0gjzLyE.js} +48 -45
- package/dist/action-menu-C0gjzLyE.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-CGGpQryR.js} +281 -230
- package/dist/ai-artifact-CGGpQryR.js.map +1 -0
- package/dist/app-shell-EHuuRDGy.js +321 -0
- package/dist/app-shell-EHuuRDGy.js.map +1 -0
- package/dist/{attachment-DkoqHPPl.js → attachment-BCpA4e7i.js} +10 -10
- package/dist/{attachment-DkoqHPPl.js.map → attachment-BCpA4e7i.js.map} +1 -1
- package/dist/{auth-D2FVZ1MH.js → auth-B0girIk_.js} +49 -52
- package/dist/auth-B0girIk_.js.map +1 -0
- package/dist/{avatar-DWO_HHhB.js → avatar-B9Jnp-T-.js} +8 -8
- package/dist/avatar-B9Jnp-T-.js.map +1 -0
- package/dist/{badge-DErMA7ul.js → badge-wWauMgAt.js} +5 -5
- package/dist/{badge-DErMA7ul.js.map → badge-wWauMgAt.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 +4 -4
- 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 +200 -193
- 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 +8 -8
- package/dist/base/signature-pad.js.map +1 -1
- package/dist/base/skeleton.js +1 -1
- package/dist/base/spinner.js +6 -6
- package/dist/base/spinner.js.map +1 -1
- package/dist/base/structure.js +1 -1
- package/dist/base/table.js +1 -1
- package/dist/base/text-inputs.js +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-BoqWIIpV.js} +7 -7
- package/dist/batch-action-bar-BoqWIIpV.js.map +1 -0
- package/dist/blocks/admin.js +21 -21
- package/dist/blocks/admin.js.map +1 -1
- package/dist/blocks/ai.js +267 -247
- package/dist/blocks/ai.js.map +1 -1
- package/dist/blocks/analytics/usage-card.js +1 -1
- package/dist/blocks/analytics.js +537 -543
- 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 +1330 -1250
- 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-Bp9Ke7kd.js} +7 -7
- package/dist/breadcrumbs-Bp9Ke7kd.js.map +1 -0
- package/dist/{button-DkmK-z8E.js → button-ChBovTx0.js} +3 -3
- package/dist/button-ChBovTx0.js.map +1 -0
- package/dist/{buttons-BbfzgczK.js → buttons-DeW0bQeK.js} +16 -16
- package/dist/buttons-DeW0bQeK.js.map +1 -0
- package/dist/cards-CNXnmvV5.js +69 -0
- package/dist/cards-CNXnmvV5.js.map +1 -0
- package/dist/cascader-CrAl9zD5.js +439 -0
- package/dist/cascader-CrAl9zD5.js.map +1 -0
- package/dist/chart-I7ROnsl8.js +162 -0
- package/dist/chart-I7ROnsl8.js.map +1 -0
- package/dist/{checkbox-CzYUTPeJ.js → checkbox-MoyHIAPs.js} +3 -3
- package/dist/{checkbox-CzYUTPeJ.js.map → checkbox-MoyHIAPs.js.map} +1 -1
- package/dist/choice-inputs-DHGtx0QV.js +789 -0
- package/dist/choice-inputs-DHGtx0QV.js.map +1 -0
- package/dist/{code-block-CGNaUtAE.js → code-block-BSJyq9e-.js} +9 -9
- package/dist/code-block-BSJyq9e-.js.map +1 -0
- package/dist/{collapsible-Do4G0zcC.js → collapsible-BzJ91LUG.js} +5 -5
- package/dist/{collapsible-Do4G0zcC.js.map → collapsible-BzJ91LUG.js.map} +1 -1
- package/dist/{collection-content-C0e8SsTm.js → collection-content-CSnwtOTH.js} +3 -3
- package/dist/{collection-content-C0e8SsTm.js.map → collection-content-CSnwtOTH.js.map} +1 -1
- package/dist/combobox-Bcvu5J8O.js +363 -0
- package/dist/combobox-Bcvu5J8O.js.map +1 -0
- package/dist/combobox-C2JiSQPc.js +915 -0
- package/dist/combobox-C2JiSQPc.js.map +1 -0
- package/dist/{command-D8NrBj-b.js → command-9e52NPgK.js} +11 -11
- package/dist/command-9e52NPgK.js.map +1 -0
- package/dist/{comments-Di4w0H_S.js → comments-BsgErEqd.js} +44 -39
- package/dist/comments-BsgErEqd.js.map +1 -0
- 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 +5 -1
- package/dist/components/base/choice-inputs/pill-radio-group.d.ts +7 -6
- package/dist/components/base/combobox/combobox-field.d.ts +2 -2
- package/dist/components/base/combobox/index.d.ts +4 -2
- package/dist/components/base/date-pickers/date-picker-internals.d.ts +3 -1
- package/dist/components/base/date-pickers/datepicker.types.d.ts +10 -4
- package/dist/components/base/date-pickers/time-picker.d.ts +17 -3
- package/dist/components/base/feedback/alert.d.ts +1 -1
- package/dist/components/base/feedback/state-display.d.ts +5 -1
- package/dist/components/base/feedback/state-display.strings.d.ts +9 -0
- package/dist/components/base/forms/form-field.d.ts +7 -2
- 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 +8 -1
- package/dist/components/base/forms-numeric/decimal-input.d.ts +2 -2
- package/dist/components/base/forms-numeric/dimensions-input.d.ts +4 -1
- package/dist/components/base/forms-numeric/numeric-composite-field.d.ts +12 -0
- package/dist/components/base/forms-numeric/weight-input.d.ts +6 -1
- 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/language-switcher.d.ts +12 -4
- 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/repeaters/key-value-editor.d.ts +2 -1
- 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 +29 -5
- package/dist/components/base/toaster/index.d.ts +1 -0
- package/dist/components/base/upload/avatar-upload.d.ts +2 -1
- package/dist/components/base/upload/image-upload.d.ts +2 -1
- package/dist/components/blocks/ai/ai-citation/types.d.ts +2 -0
- package/dist/components/blocks/ai/ai-file-tree/types.d.ts +1 -1
- package/dist/components/blocks/ai/ai-reasoning/types.d.ts +2 -0
- package/dist/components/blocks/ai/ai-sources/types.d.ts +2 -0
- package/dist/components/blocks/ai/ai-tool-call/types.d.ts +5 -1
- package/dist/components/blocks/ai/ai.strings.d.ts +2 -0
- package/dist/components/blocks/analytics/metric/metric.d.ts +4 -0
- package/dist/components/blocks/analytics/metric-comparison/metric-comparison.d.ts +4 -0
- package/dist/components/blocks/analytics/metric-grid/metric-grid.d.ts +4 -5
- package/dist/components/blocks/analytics/types.d.ts +2 -2
- 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/order-status/types.d.ts +4 -0
- 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/blocks/data-display/empty-state/empty-state.types.d.ts +4 -3
- package/dist/components/features/activities/activities.types.d.ts +26 -13
- package/dist/components/features/activities/hooks/use-activity-resources.d.ts +2 -1
- 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/ai-chat/hooks/use-ai-chat-scroll.d.ts +1 -1
- package/dist/components/features/appointment-calendar/appointment-calendar.d.ts +1 -1
- package/dist/components/features/appointment-calendar/appointment-calendar.types.d.ts +4 -2
- package/dist/components/features/combobox/async-resource-combobox.d.ts +2 -2
- package/dist/components/features/combobox/combobox.d.ts +2 -2
- package/dist/components/features/combobox/hooks/use-combobox-core.d.ts +2 -1
- package/dist/components/features/combobox/hooks/use-combobox-state.d.ts +1 -0
- package/dist/components/features/combobox/hooks/use-load-more.d.ts +1 -0
- package/dist/components/features/combobox/types.d.ts +37 -8
- package/dist/components/features/email-composer/types.d.ts +3 -1
- 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/date-facet.d.ts +4 -2
- package/dist/components/features/filters/facets/range-facet.d.ts +12 -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 +6 -3
- package/dist/components/features/filters/partials/date-filter-content.d.ts +3 -2
- package/dist/components/features/filters/partials/filter-editor-header.d.ts +16 -0
- package/dist/components/features/filters/partials/filter-popover-content.d.ts +5 -3
- package/dist/components/features/filters/partials/nested-filter-options.d.ts +21 -0
- package/dist/components/features/filters/partials/range-filter-content.d.ts +12 -0
- package/dist/components/features/filters/partials/regular-filter-content.d.ts +2 -1
- package/dist/components/features/filters/utils/filter-utils.d.ts +25 -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/hooks/use-media-library.d.ts +1 -1
- package/dist/components/features/media-library/media-library.d.ts +1 -1
- package/dist/components/features/media-library/media-library.strings.d.ts +8 -0
- package/dist/components/features/media-library/media-library.types.d.ts +50 -12
- package/dist/components/features/media-library/partials/media-library-partials.d.ts +4 -4
- package/dist/components/features/mentions/hooks/use-mentions.d.ts +16 -1
- package/dist/components/features/mentions/partials/mention-inline-suggestions.d.ts +5 -1
- package/dist/components/features/mentions/utils/split-html-by-mentions.d.ts +1 -7
- package/dist/components/features/overlays/hooks/use-overlay-visibility.d.ts +2 -2
- 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 +45 -8
- package/dist/components/features/questionnaire/questionnaire.types.d.ts +3 -0
- package/dist/components/features/resource/resource.d.ts +6 -2
- package/dist/components/features/resource/resource.types.d.ts +14 -1
- package/dist/components/features/rich-text-editor/form-rich-text-editor.d.ts +1 -1
- package/dist/components/features/rich-text-editor/partials/caret-helpers.d.ts +1 -1
- package/dist/components/features/rich-text-editor/partials/editor-field-aria.d.ts +14 -0
- package/dist/components/features/rich-text-editor/partials/image-uploads.d.ts +1 -1
- package/dist/components/features/rich-text-editor/partials/rich-text-editor-toolbar.d.ts +3 -1
- package/dist/components/features/rich-text-editor/rich-text-editor.recipes.d.ts +12 -2
- package/dist/components/features/rich-text-editor/rich-text-editor.types.d.ts +17 -3
- package/dist/components/features/schema-form/hooks/use-schema-form.d.ts +5 -1
- package/dist/components/features/schema-form/partials/schema-form-field.d.ts +3 -1
- package/dist/components/features/schema-form/schema-form.utils.d.ts +1 -1
- package/dist/components/features/suggestions/suggestions.types.d.ts +1 -1
- package/dist/components/features/table/data-table.d.ts +1 -1
- package/dist/components/features/table/index.d.ts +1 -0
- package/dist/components/features/table/partials/resource-cell.d.ts +22 -5
- package/dist/components/features/table/table-body.d.ts +1 -1
- package/dist/components/features/table/table-helpers.d.ts +6 -3
- package/dist/components/features/table/table.strings.d.ts +3 -0
- package/dist/components/features/table/table.types.d.ts +18 -2
- 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 +9 -8
- package/dist/components/layout/layout.types.d.ts +5 -3
- package/dist/components/layout/navigation/section-nav/section-nav.d.ts +5 -0
- package/dist/components/layout/navigation/side-nav.d.ts +3 -2
- package/dist/components/layout/normalize-layout-path.d.ts +1 -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 +10 -3
- 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 +38 -0
- package/dist/components/layout/sidebar/sidebar.context.d.ts +6 -7
- package/dist/components/layout/sidebar/sidebar.types.d.ts +50 -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/primitives/link.d.ts +3 -2
- package/dist/components/primitives/money.d.ts +1 -1
- package/dist/components/primitives/number.d.ts +1 -1
- package/dist/components/typography/rich-text/rich-text-tree.d.ts +7 -5
- 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-CSdc32h9.js} +26 -18
- package/dist/containers-CSdc32h9.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-3fdHfMR3.js} +7 -7
- package/dist/{copyable-CnGCZdX4.js.map → copyable-3fdHfMR3.js.map} +1 -1
- package/dist/{data-display-D4oujtx0.js → data-display-Cmj-xZYl.js} +271 -279
- package/dist/data-display-Cmj-xZYl.js.map +1 -0
- package/dist/{date-Q7jnXxpk.js → date-Br0FicVv.js} +5 -5
- package/dist/{date-Q7jnXxpk.js.map → date-Br0FicVv.js.map} +1 -1
- package/dist/date-picker-CyQlFYsP.js +1617 -0
- package/dist/date-picker-CyQlFYsP.js.map +1 -0
- package/dist/date-pickers-tj2MXmXd.js +185 -0
- package/dist/date-pickers-tj2MXmXd.js.map +1 -0
- package/dist/{display-BB4BL_-K.js → display-CT_N2a3w.js} +9 -9
- package/dist/{display-BB4BL_-K.js.map → display-CT_N2a3w.js.map} +1 -1
- package/dist/dropdown-menu-C08iIugv.js +194 -0
- package/dist/dropdown-menu-C08iIugv.js.map +1 -0
- package/dist/features/activities.js +388 -326
- package/dist/features/activities.js.map +1 -1
- package/dist/features/ai-chat.js +46 -32
- package/dist/features/ai-chat.js.map +1 -1
- package/dist/features/appointment-calendar.js +130 -130
- 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 +243 -239
- package/dist/features/email-composer.js.map +1 -1
- package/dist/features/event-calendar.js +197 -199
- package/dist/features/event-calendar.js.map +1 -1
- package/dist/features/filters.js +2 -2
- package/dist/features/global-search.js +168 -143
- package/dist/features/global-search.js.map +1 -1
- package/dist/features/kanban.js +19 -30
- package/dist/features/kanban.js.map +1 -1
- package/dist/features/map/style.css +15 -0
- package/dist/features/map.js +369 -343
- package/dist/features/map.js.map +1 -1
- package/dist/features/media-library.js +1202 -975
- package/dist/features/media-library.js.map +1 -1
- package/dist/features/mentions.js +2 -2
- package/dist/features/overlays.js +1 -1
- package/dist/features/products.js +1270 -1183
- package/dist/features/products.js.map +1 -1
- package/dist/features/questionnaire.js +160 -153
- package/dist/features/questionnaire.js.map +1 -1
- package/dist/features/resource-assignment.js +8 -8
- package/dist/features/resource.js +119 -113
- package/dist/features/resource.js.map +1 -1
- package/dist/features/rich-text-editor.js +28 -19
- package/dist/features/rich-text-editor.js.map +1 -1
- package/dist/features/schema-form.js +297 -256
- package/dist/features/schema-form.js.map +1 -1
- package/dist/features/suggestions.js +57 -50
- package/dist/features/suggestions.js.map +1 -1
- package/dist/features/sync.js +3 -3
- package/dist/features/table.js +1 -1
- package/dist/features/theme-tweaker.js +470 -470
- package/dist/features/theme-tweaker.js.map +1 -1
- package/dist/feedback-Dzo1xtAU.js +246 -0
- package/dist/feedback-Dzo1xtAU.js.map +1 -0
- package/dist/{field-affordance-recipes-DjwGx8eM.js → field-affordance-recipes-D6H7tVJi.js} +5 -5
- package/dist/field-affordance-recipes-D6H7tVJi.js.map +1 -0
- package/dist/field-control-attributes-B6i335wr.js +18 -0
- package/dist/field-control-attributes-B6i335wr.js.map +1 -0
- package/dist/{field-state-recipes-BVA2CWHo.js → field-state-recipes-7sza8QbC.js} +4 -2
- package/dist/{field-state-recipes-BVA2CWHo.js.map → field-state-recipes-7sza8QbC.js.map} +1 -1
- package/dist/filters-Dl80yYtN.js +2415 -0
- package/dist/filters-Dl80yYtN.js.map +1 -0
- package/dist/form-field-CAPdwdnZ.js +74 -0
- package/dist/form-field-CAPdwdnZ.js.map +1 -0
- package/dist/{form-sizing-NXgjkmBG.js → form-sizing-CgcrUbLU.js} +5 -5
- package/dist/form-sizing-CgcrUbLU.js.map +1 -0
- package/dist/{forms-BV5m5aQF.js → forms-B3W8CH7-.js} +17 -13
- package/dist/forms-B3W8CH7-.js.map +1 -0
- package/dist/forms-numeric-CwjQJe-O.js +991 -0
- package/dist/forms-numeric-CwjQJe-O.js.map +1 -0
- package/dist/{header-BA697l4a.js → header-ZIIsRKxP.js} +145 -141
- package/dist/header-ZIIsRKxP.js.map +1 -0
- package/dist/header.recipes-BigdJjw1.js +6 -0
- package/dist/header.recipes-BigdJjw1.js.map +1 -0
- package/dist/hooks/use-files.d.ts +2 -0
- package/dist/{hooks-BQ-L7Uu2.js → hooks-BitHSh-Y.js} +27 -15
- package/dist/hooks-BitHSh-Y.js.map +1 -0
- package/dist/{icon-badge-COWbCCWu.js → icon-badge-npxF1SLX.js} +4 -4
- package/dist/{icon-badge-COWbCCWu.js.map → icon-badge-npxF1SLX.js.map} +1 -1
- package/dist/index.js +4 -5
- package/dist/{input-Cdw4k0fb.js → input-7KAc7XQL.js} +9 -9
- package/dist/{input-Cdw4k0fb.js.map → input-7KAc7XQL.js.map} +1 -1
- package/dist/input-DIREVYHs.js +21 -0
- package/dist/input-DIREVYHs.js.map +1 -0
- package/dist/{interaction-recipes-XR9ZpVYL.js → interaction-recipes-4wZ2tvfb.js} +2 -2
- package/dist/{interaction-recipes-XR9ZpVYL.js.map → interaction-recipes-4wZ2tvfb.js.map} +1 -1
- package/dist/item-FfWnaYST.js +278 -0
- package/dist/item-FfWnaYST.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 +12 -12
- package/dist/layout.types-E_GAApzO.js +30 -0
- package/dist/layout.types-E_GAApzO.js.map +1 -0
- 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/field-control-attributes.d.ts +11 -0
- package/dist/lib/field-state-recipes.d.ts +2 -0
- package/dist/lib/format.d.ts +1 -0
- 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/surface-recipes.d.ts +1 -1
- package/dist/lib/token-merge.generated.d.ts +18 -15
- package/dist/lib/utils.js +1 -1
- package/dist/map-demo-tile.svg +1 -1
- package/dist/{media-gallery-CSl5W1Fy.js → media-gallery-C81DAnKI.js} +6 -6
- package/dist/{media-gallery-CSl5W1Fy.js.map → media-gallery-C81DAnKI.js.map} +1 -1
- package/dist/{mentions-RKOQaaIB.js → mentions-qOnedSt4.js} +237 -168
- package/dist/mentions-qOnedSt4.js.map +1 -0
- package/dist/message-BJHnn43M.js +135 -0
- package/dist/message-BJHnn43M.js.map +1 -0
- package/dist/{metadata-list-qVV7AVxa.js → metadata-list-XkqZ_UXH.js} +64 -64
- package/dist/metadata-list-XkqZ_UXH.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-BgtPJAhi.js +288 -0
- package/dist/navigation-BgtPJAhi.js.map +1 -0
- package/dist/navigation-Bt-v7rWP.js +261 -0
- package/dist/navigation-Bt-v7rWP.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/normalize-layout-path-BmEgg6fu.js +14 -0
- package/dist/normalize-layout-path-BmEgg6fu.js.map +1 -0
- package/dist/{number-E_OiIfJz.js → number-CYqBcrSj.js} +79 -87
- package/dist/number-CYqBcrSj.js.map +1 -0
- package/dist/overflow-tab-bar-BQCA2Zn2.js +172 -0
- package/dist/overflow-tab-bar-BQCA2Zn2.js.map +1 -0
- package/dist/overlays-CC8zI3Du.js +1017 -0
- package/dist/overlays-CC8zI3Du.js.map +1 -0
- package/dist/page-BoQ1VaFJ.js +331 -0
- package/dist/page-BoQ1VaFJ.js.map +1 -0
- package/dist/page-header-commands-DIKspJfx.js +193 -0
- package/dist/page-header-commands-DIKspJfx.js.map +1 -0
- package/dist/{pagination-Ch8X_47u.js → pagination-Br8TdV9A.js} +7 -7
- package/dist/{pagination-Ch8X_47u.js.map → pagination-Br8TdV9A.js.map} +1 -1
- package/dist/popover-k8TdUcAt.js +201 -0
- package/dist/popover-k8TdUcAt.js.map +1 -0
- package/dist/{popover-menu-BYaCdFhf.js → popover-menu-yn-o0kyA.js} +7 -7
- package/dist/{popover-menu-BYaCdFhf.js.map → popover-menu-yn-o0kyA.js.map} +1 -1
- package/dist/{popover.recipes-D3j8R8Yp.js → popover.recipes-DJ0AkUan.js} +19 -12
- package/dist/popover.recipes-DJ0AkUan.js.map +1 -0
- package/dist/portal-recipes-DyUXqUtD.js +9 -0
- package/dist/portal-recipes-DyUXqUtD.js.map +1 -0
- package/dist/{primitives-Du64iDbb.js → primitives-BkkQjYl7.js} +23 -18
- package/dist/primitives-BkkQjYl7.js.map +1 -0
- package/dist/primitives.js +4 -4
- package/dist/{progress-BvF2oCdV.js → progress-DZFXXzPs.js} +9 -9
- package/dist/{progress-BvF2oCdV.js.map → progress-DZFXXzPs.js.map} +1 -1
- package/dist/{receipt-D789Jwyy.js → receipt-C7LhOg7Q.js} +7 -7
- package/dist/receipt-C7LhOg7Q.js.map +1 -0
- package/dist/rich-text-BnTzZjIo.js +45 -0
- package/dist/rich-text-BnTzZjIo.js.map +1 -0
- package/dist/{rich-text-editor-Cm1dpUpQ.js → rich-text-editor-CAurDwT5.js} +501 -424
- package/dist/rich-text-editor-CAurDwT5.js.map +1 -0
- package/dist/rich-text-editor-toolbar-DbXig7Jk.js +99 -0
- package/dist/rich-text-editor-toolbar-DbXig7Jk.js.map +1 -0
- package/dist/rich-text-tree-BqyQ_7-R.js +66 -0
- package/dist/rich-text-tree-BqyQ_7-R.js.map +1 -0
- package/dist/{sanitize-html-DsQmI48u.js → sanitize-html-BWkH4dLM.js} +29 -16
- package/dist/sanitize-html-BWkH4dLM.js.map +1 -0
- package/dist/{scroll-area-La5RXsEk.js → scroll-area-Bj6CRUif.js} +2 -2
- package/dist/{scroll-area-La5RXsEk.js.map → scroll-area-Bj6CRUif.js.map} +1 -1
- package/dist/{separator-DAEV0w65.js → separator-B9ewiCGO.js} +2 -2
- package/dist/{separator-DAEV0w65.js.map → separator-B9ewiCGO.js.map} +1 -1
- package/dist/{separator-GNfPG-90.js → separator-DM6gs2vu.js} +3 -3
- package/dist/{separator-GNfPG-90.js.map → separator-DM6gs2vu.js.map} +1 -1
- package/dist/services/actions.js +1 -1
- package/dist/settings-DZPHgpx4.js +155 -0
- package/dist/settings-DZPHgpx4.js.map +1 -0
- package/dist/sheet-C4DHsgLk.js +250 -0
- package/dist/sheet-C4DHsgLk.js.map +1 -0
- package/dist/sidebar-C8BnDwTH.js +709 -0
- package/dist/sidebar-C8BnDwTH.js.map +1 -0
- package/dist/sidebar-CmD6a-HK.js +1004 -0
- package/dist/sidebar-CmD6a-HK.js.map +1 -0
- package/dist/skeleton-DDgdhmu9.js +265 -0
- package/dist/skeleton-DDgdhmu9.js.map +1 -0
- package/dist/smart-card-B6vLxqa_.js +617 -0
- package/dist/smart-card-B6vLxqa_.js.map +1 -0
- package/dist/{structure-C0V0_Fyf.js → structure-DZJ2wbAU.js} +2 -2
- package/dist/{structure-C0V0_Fyf.js.map → structure-DZJ2wbAU.js.map} +1 -1
- package/dist/style.css +1 -1
- package/dist/{surface-recipes-BKRVW8Os.js → surface-recipes-C8mNycaY.js} +2 -2
- package/dist/{surface-recipes-BKRVW8Os.js.map → surface-recipes-C8mNycaY.js.map} +1 -1
- package/dist/{table-DH7rozUv.js → table-CBonSdTp.js} +573 -519
- package/dist/table-CBonSdTp.js.map +1 -0
- package/dist/{table-CpvnzJn9.js → table-CXSPHH25.js} +75 -71
- package/dist/table-CXSPHH25.js.map +1 -0
- package/dist/tabs-C4Kr_hCr.js +192 -0
- package/dist/tabs-C4Kr_hCr.js.map +1 -0
- package/dist/{text-inputs-DXItiR0O.js → text-inputs-jdkS3ReG.js} +18 -18
- package/dist/text-inputs-jdkS3ReG.js.map +1 -0
- package/dist/theme.css +40 -37
- package/dist/{timelines-DmtztAY_.js → timelines-CoPwdJP0.js} +13 -12
- package/dist/timelines-CoPwdJP0.js.map +1 -0
- package/dist/tooltip-31NwIpTo.js +113 -0
- package/dist/tooltip-31NwIpTo.js.map +1 -0
- package/dist/{tree-CV11PURP.js → tree-CeYVzdFE.js} +9 -9
- package/dist/{tree-CV11PURP.js.map → tree-CeYVzdFE.js.map} +1 -1
- package/dist/typography/rich-text.js +1 -1
- package/dist/{typography-CSyJrh28.js → typography-C7-YMW1S.js} +12 -12
- package/dist/{typography-CSyJrh28.js.map → typography-C7-YMW1S.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-Hdm5gObf.js} +309 -296
- package/dist/upload-Hdm5gObf.js.map +1 -0
- package/dist/{upload-queue-DhQJiSRc.js → upload-queue-D0sYPuqo.js} +16 -14
- package/dist/upload-queue-D0sYPuqo.js.map +1 -0
- package/dist/{usage-card-DVTRDmGz.js → usage-card-9s8hLDfn.js} +24 -17
- package/dist/usage-card-9s8hLDfn.js.map +1 -0
- package/dist/{utils-CF3c95Io.js → utils-DhuoqFy4.js} +255 -165
- package/dist/utils-DhuoqFy4.js.map +1 -0
- package/dist/value-inputs-D3aPgq9H.js +980 -0
- package/dist/value-inputs-D3aPgq9H.js.map +1 -0
- package/dist/{value-typography-ClupF0Gz.js → value-typography-uSzzG9Gf.js} +32 -26
- package/dist/value-typography-uSzzG9Gf.js.map +1 -0
- package/dist/{workspace-9EFVXUyk.js → workspace-CC8Vchiu.js} +51 -50
- package/dist/workspace-CC8Vchiu.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/edit.tsx +3 -3
- 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 +21 -19
- package/docs/consumer-skill/references/analytics.md +33 -1
- package/docs/consumer-skill/references/commerce-composition.md +97 -0
- package/docs/consumer-skill/references/component-contracts.json +21249 -14205
- package/docs/consumer-skill/references/composition-mapping.md +17 -3
- package/docs/consumer-skill/references/composition.md +177 -32
- 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 +12 -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 +62 -8
- package/docs/consumer-skill/references/integration.md +59 -1
- package/docs/consumer-skill/references/product-composition.md +94 -0
- package/docs/consumer-skill/references/public-api.json +3044 -445
- package/docs/consumer-skill/references/review.md +87 -10
- package/docs/consumer-skill/references/rhf-workflows.md +79 -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 +24 -20
- 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 +176 -26
- 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 +79 -7
- 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 +4 -2
- package/templates/admin-shell-template.tsx +1 -2
- package/templates/customers-template.tsx +18 -16
- 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/breadcrumbs-B-WFKecD.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 +0 -776
- package/dist/choice-inputs-JLtij2y4.js.map +0 -1
- package/dist/code-block-CGNaUtAE.js.map +0 -1
- package/dist/combobox-CBJDs6w_.js +0 -877
- 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/comments-Di4w0H_S.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 +0 -1542
- package/dist/date-picker-zOt1oNss.js.map +0 -1
- package/dist/date-pickers-cj8IXbDC.js +0 -179
- package/dist/date-pickers-cj8IXbDC.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 +0 -239
- package/dist/feedback-DZNL5Lg1.js.map +0 -1
- package/dist/field-affordance-recipes-DjwGx8eM.js.map +0 -1
- package/dist/filters-BcT-uoFy.js +0 -2209
- package/dist/filters-BcT-uoFy.js.map +0 -1
- package/dist/form-field-CsgRmdit.js +0 -63
- package/dist/form-field-CsgRmdit.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 +0 -906
- 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 +0 -277
- package/dist/item-BvZ2DR_x.js.map +0 -1
- package/dist/layout.types-Cn7aUzJp.js +0 -20
- package/dist/layout.types-Cn7aUzJp.js.map +0 -1
- package/dist/mentions-RKOQaaIB.js.map +0 -1
- package/dist/message-INU2xsxu.js +0 -128
- 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 +0 -269
- 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/number-E_OiIfJz.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/primitives-Du64iDbb.js.map +0 -1
- package/dist/receipt-D789Jwyy.js.map +0 -1
- package/dist/rich-text-CLJEf76s.js +0 -78
- package/dist/rich-text-CLJEf76s.js.map +0 -1
- package/dist/rich-text-editor-Cm1dpUpQ.js.map +0 -1
- package/dist/rich-text-editor-toolbar-L__e4x47.js +0 -94
- package/dist/rich-text-editor-toolbar-L__e4x47.js.map +0 -1
- package/dist/safe-image-src-C6kQSMBZ.js +0 -17
- package/dist/safe-image-src-C6kQSMBZ.js.map +0 -1
- package/dist/sanitize-html-DsQmI48u.js.map +0 -1
- package/dist/settings-BA2iboic.js +0 -174
- 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-CpvnzJn9.js.map +0 -1
- package/dist/table-DH7rozUv.js.map +0 -1
- package/dist/tabs-eqVsJZWO.js +0 -191
- 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/value-typography-ClupF0Gz.js.map +0 -1
- package/dist/workspace-9EFVXUyk.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"products.js","names":["getPlainText","_Fragment","_Fragment","useDensityConfig","resolveComponentScale","cn","Button","Text","DisplayLabel","focusRecipes","Grid","Stack","dotRecipes","Card","Progress","compositionRhythm","compositionClasses","useOverlayVisibility","ConfirmDialog","interactionRecipes","Value","SecondaryValue","Percent","Badge","BatchActionBar","Separator","fieldAffordanceRecipes","Input","FormField","Textarea","Switch","Select","Checkbox","ContentBlock","segmentedControlRecipes","controlGroupHeightClasses","ItemMedia","ItemDescription","ItemActions","ItemGroup","ItemContent","Item","ItemTitle","MetadataList","TableRow","TableCell","TableBody","TableHead","TableHeader","Table","InlineStat","EmptyState","DataTableActions","DataTable","Fragment$1","defaultProductReadinessCardStrings","defaultProductStructureCardStrings","defaultProductOperationsCardStrings","defaultProductDetailsCardStrings","defaultProductContractOverviewStrings","defaultProductOptionsSummaryStrings","defaultProductOptionActionMenuStrings","defaultProductOptionsMatrixStrings","defaultProductQuotePreviewCardStrings","defaultProductPoliciesCardStrings","defaultProductVariantsTableStrings","defaultProductVariantsBulkTableStrings","count","total","index","defaultProductVariantsManagerStrings","defaultProductVariantActionMenuStrings","defaultProductVariantDetailsStrings","defaultProductVariantEditorStrings","defaultProductOverviewStrings","ProductEmptyState","action","className","PRODUCT_TONE_BADGE","PRODUCT_TONE_TEXT","PRODUCT_STATUS_TONES","isProductStatusTone","tone","clampProductPercent","value","ProductToneDot","ProductMetricTile","icon","metric","ProductRowActions","actions","item","PRODUCT_ROW_CONTENT","PRODUCT_ROW_TITLE","PRODUCT_ROW_ACTIONS","ProductRowHeading","title","label","badge","ProductRowSelect","onSelect","ProductStructureMetricRow","ProductReadinessRow","state","select","actionFallback","ProductOperationRow","ProductSummaryRow","values","actionLabel","ProductContractOverview","stringsProp","strings","useStrings","hasContent","metrics","terms","rules","headerAction","onOpenContract","onEditContract","onCreateRule","Plus","onSelectRule","rule","onEdit","onEditRule","onDelete","onDeleteRule","ruleActions","Eye","Pencil","Trash2","rowActions","renderRuleActions","empty","ProductDetailsCard","onEditDetails","description","metadata","media","ProductOptionActionMenu","onSelectOption","option","onEditOption","onDeleteOption","renderOptionActions","menuLabel","ProductOperationsCard","onCreateOperation","items","onSelectOperation","onEditOperation","onDeleteOperation","operationActions","renderOperationActions","renderItem","getPlainText$1","isScalarText","getOptionEditLabel","optionName","prefix","getOptionDraft","ProductOptionsMatrix","showHeaderProp","isCollapsedControlled","collapsedOptionIds","internalCollapsedOptionIds","setInternalCollapsedOptionIds","useState","defaultCollapsedOptionIds","resolvedCollapsedOptionIds","collapsedOptionIdSet","useMemo","supportsInlineEditing","editingOptionId","defaultEditingOptionId","onEditingOptionIdChange","onOptionNameChange","onValueLabelChange","onDoneEditingOption","onSaveEditingOption","onCancelEditingOption","isEditingControlled","internalEditingOptionId","setInternalEditingOptionId","draftByOptionId","setDraftByOptionId","resolvedEditingOptionId","hasGroups","optionGroups","showPanelHeader","surface","showCreateRow","onCreateOption","updateCollapsedOptionIds","useCallback","nextIds","onCollapsedOptionIdsChange","toggleCollapsed","id","updateEditingOptionId","nextId","startEditing","current","getResolvedDraft","updateDraft","updater","cancelEditing","draft","_removed","rest","commitEditing","originalValues","originalValueIds","draftValueIds","draftValue","onAddValue","onDeleteValue","removeValuesConfirm","pendingSave","setPendingSave","saveEditing","removed","confirmDelete","deleteOption","deleteOptionConfirm","pendingDeleteOption","setPendingDeleteOption","requestDeleteOption","panelHeader","content","isCollapsed","isEditing","canEdit","canDelete","canAddValue","optionDraft","renderedActions","optionIndex","menuActions","defaultActions","showInlineActions","resolvedActions","GripVertical","nextName","event","nextLabel","nextIndex","optionSummary","deleteValue","renderedValue","renderValue","Fragment","X","showCollapseControls","ChevronDown","showVariantToggle","onToggleUsedForVariants","checked","PlusCircle","interpolateString","ProductOptionsSummary","hasOptionActions","cardActions","onManageOptions","SlidersHorizontal","options","renderOption","ProductPoliciesCard","onCreatePolicy","policies","onSelectPolicy","policy","onEditPolicy","onDeletePolicy","policyActions","renderPolicyActions","renderPolicy","ProductQuotePreviewCard","hasBreakdown","subtotal","tax","discount","onCreateLine","onOpenQuote","lines","onSelectLine","line","onEditLine","onDeleteLine","lineActions","renderLineActions","ProductReadinessCard","completion","score","onCreateReadinessItem","summary","scoreLabel","onSelectReadinessItem","onEditReadinessItem","onDeleteReadinessItem","readinessActions","renderReadinessItemActions","ProductStructureCard","onCreateMetric","onSelectMetric","onEditMetric","onDeleteMetric","metricActions","renderMetricActions","ProductVariantNameCell","variant","channelsLabel","ProductVariantValueCell","emphasis","ProductVariantsTable","renderVariantActions","actionsList","onSelectVariant","onEditVariant","onDuplicateVariant","Copy","onDeleteVariant","columns","baseColumns","row","onCreateVariant","variants","ProductOverview","hasRail","readiness","structure","operations","quote","slots","mainClassName","details","contract","railClassName","productVariantMenuActions","ProductVariantActionMenu","onDuplicate","onClick","isPresent","getDefaultMetadata","labels","ProductVariantDetails","resolvedMetadata","renderActions","hasCustomActions","onBack","ArrowLeft","selectedOptions","renderMetadata","optionItems","toSelectOptions","choices","choice","ProductVariantEditor","valueProp","formId","useId","isControlled","internalValue","setInternalValue","defaultValue","internalSubmitting","setInternalSubmitting","resolvedSubmitting","submitting","isDisabled","disabled","updateValue","next","onValueChange","updateField","field","nextValue","updateOption","handleSubmit","onSubmit","error","defaultFooter","onCancel","hasDefaultFooter","statusOptions","optionFields","fieldValue","hasChoices","footerSlot","DEFAULT_VISIBLE_COLUMNS","DEFAULT_OPTION_COMBINATION_DISPLAY","DEFAULT_CELL_DISPLAY","DEFAULT_SELECTION_MODE","getPlainText","getOptionValue","directValue","valueId","getVariantName","getVariantOptionSummary","getOptionCombinationLabel","getGroupLabel","selectedIdsToRows","ids","rowById","renderFieldValue","hasCellValue","isEditableField","column","resolveCellDisplay","display","getFieldChangeContext","renderVariantCellValue","plainValue","onBlur","Primitive","ProductVariantsBulkTable","isSelectionControlled","selectedVariantIds","internalSelectedIds","setInternalSelectedIds","defaultSelectedVariantIds","hasBulkActions","renderBulkActions","onBulkEdit","onBulkApply","onBulkDelete","isSelectable","selectionMode","onSelectedVariantIdsChange","selectedIds","selectedRows","selectedIdSet","visibleColumnSet","visibleColumns","groupByOption","groupByOptionId","rowIndexById","orderedVariants","valueOrder","aValueId","a","bValueId","b","aOrder","bOrder","resolvedAOrder","resolvedBOrder","groupCounts","counts","hasBulkControls","hasRows","allRowsSelected","someRowsSelected","selectAllRef","useRef","hasRowActions","tableColumnCount","updateSelection","nextRows","clearSelection","toggleRow","toggleAll","bulkContext","onGenerateVariants","customBulkActions","bulkToolbar","displayIndex","groupLabel","previousVariant","previousGroupLabel","shouldRenderGroup","isSelected","actionContext","summaryOptionGroups","groupedVariantName","variantName","optionLabel","optionLabelMatchesVariantName","createCellContext","onVariantFieldChange","onVariantFieldBlur","renderCellContent","context","rendered","renderCell","fallback","shouldRenderOptionCombination","optionCombinationDisplay","renderedOptionCombination","renderOptionCombination","defaultRowActions","valueIndex","cellDisplay","ProductVariantsManager","size","defaultScale","groupableOptions","fallbackGroupByOptionId","isGroupByControlled","internalGroupByOptionId","setInternalGroupByOptionId","defaultGroupByOptionId","resolvedGroupByOptionId","groupByOptions","updateGroupByOptionId","matchedOption","onGroupByOptionIdChange","optionsStrings","onSearchVariants","Search","onFilterVariants","ListFilter","controlsEnd","variantsStrings"],"sources":["../../src/components/features/products/products.strings.ts","../../src/components/features/products/partials/product-empty-state.tsx","../../src/components/features/products/partials/product-tone.tsx","../../src/components/features/products/partials/product-metric-tile.tsx","../../src/components/features/products/partials/product-actions.tsx","../../src/components/features/products/partials/product-rows.tsx","../../src/components/features/products/components/product-contract-overview.tsx","../../src/components/features/products/components/product-details-card.tsx","../../src/components/features/products/components/product-option-action-menu.tsx","../../src/components/features/products/components/product-operations-card.tsx","../../src/components/features/products/components/product-options-matrix.tsx","../../src/components/features/products/components/product-options-summary.tsx","../../src/components/features/products/components/product-policies-card.tsx","../../src/components/features/products/components/product-quote-preview-card.tsx","../../src/components/features/products/components/product-readiness-card.tsx","../../src/components/features/products/components/product-structure-card.tsx","../../src/components/features/products/components/product-variants-table.tsx","../../src/components/features/products/components/product-overview.tsx","../../src/components/features/products/components/product-variant-action-menu.tsx","../../src/components/features/products/components/product-variant-details.tsx","../../src/components/features/products/components/product-variant-editor.tsx","../../src/components/features/products/components/product-variants-bulk-table.tsx","../../src/components/features/products/components/product-variants-manager.tsx"],"sourcesContent":["export interface ProductReadinessCardStrings {\n\t/** Surface title. */\n\ttitle: string;\n\t/** Supporting copy shown under the label. */\n\tdescription: string;\n\tscoreLabel: string;\n\tprogressLabel: string;\n\tcreateLabel: string;\n\teditLabel: string;\n\tdeleteLabel: string;\n\tactionsLabel: string;\n\temptyTitle: string;\n\temptyDescription: string;\n\tactionLabel: string;\n}\n\nexport const defaultProductReadinessCardStrings: ProductReadinessCardStrings = {\n\ttitle: 'Readiness',\n\tdescription: 'Publishing checks and operational setup.',\n\tscoreLabel: 'Overall readiness',\n\tprogressLabel: 'Readiness progress',\n\tcreateLabel: 'Add check',\n\teditLabel: 'Edit check',\n\tdeleteLabel: 'Delete check',\n\tactionsLabel: 'Check actions',\n\temptyTitle: 'No readiness checks',\n\temptyDescription: 'Pass readiness items from your product workflow to show progress.',\n\tactionLabel: 'Open',\n};\n\nexport interface ProductStructureCardStrings {\n\t/** Surface title. */\n\ttitle: string;\n\t/** Supporting copy shown under the label. */\n\tdescription: string;\n\tcreateLabel: string;\n\tviewLabel: string;\n\teditLabel: string;\n\tdeleteLabel: string;\n\tactionsLabel: string;\n\temptyTitle: string;\n\temptyDescription: string;\n}\n\nexport const defaultProductStructureCardStrings: ProductStructureCardStrings = {\n\ttitle: 'Structure',\n\tdescription: 'Media, taxonomy, options, and content coverage.',\n\tcreateLabel: 'Add metric',\n\tviewLabel: 'Open',\n\teditLabel: 'Edit metric',\n\tdeleteLabel: 'Delete metric',\n\tactionsLabel: 'Metric actions',\n\temptyTitle: 'No structure metrics',\n\temptyDescription: 'Pass structure metrics to summarize the product setup.',\n};\n\nexport interface ProductOperationsCardStrings {\n\t/** Surface title. */\n\ttitle: string;\n\t/** Supporting copy shown under the label. */\n\tdescription: string;\n\tcreateLabel: string;\n\teditLabel: string;\n\tdeleteLabel: string;\n\tactionsLabel: string;\n\temptyTitle: string;\n\temptyDescription: string;\n\tactionLabel: string;\n}\n\nexport const defaultProductOperationsCardStrings: ProductOperationsCardStrings = {\n\ttitle: 'Operations',\n\tdescription: 'Availability, channels, service rules, and fulfilment signals.',\n\tcreateLabel: 'Add signal',\n\teditLabel: 'Edit signal',\n\tdeleteLabel: 'Delete signal',\n\tactionsLabel: 'Signal actions',\n\temptyTitle: 'No operational signals',\n\temptyDescription: 'Pass operational rows to show channel and availability health.',\n\tactionLabel: 'Open',\n};\n\nexport interface ProductDetailsCardStrings {\n\t/** Surface title. */\n\ttitle: string;\n\t/** Supporting copy shown under the label. */\n\tdescription: string;\n\teditLabel: string;\n\temptyTitle: string;\n\temptyDescription: string;\n}\n\nexport const defaultProductDetailsCardStrings: ProductDetailsCardStrings = {\n\ttitle: 'Product details',\n\tdescription: 'Core identity and catalogue fields.',\n\teditLabel: 'Edit details',\n\temptyTitle: 'No details',\n\temptyDescription: 'Pass metadata rows to render product details.',\n};\n\nexport interface ProductContractOverviewStrings {\n\t/** Surface title. */\n\ttitle: string;\n\t/** Supporting copy shown under the label. */\n\tdescription: string;\n\ttermsTitle: string;\n\trulesTitle: string;\n\tactionLabel: string;\n\teditLabel: string;\n\tcreateRuleLabel: string;\n\tviewRuleLabel: string;\n\teditRuleLabel: string;\n\tdeleteRuleLabel: string;\n\truleActionsLabel: string;\n\temptyTitle: string;\n\temptyDescription: string;\n}\n\nexport const defaultProductContractOverviewStrings: ProductContractOverviewStrings = {\n\ttitle: 'Contract',\n\tdescription: 'Commercial terms, pricing rules, and customer-facing conditions.',\n\ttermsTitle: 'Terms',\n\trulesTitle: 'Rules',\n\tactionLabel: 'Manage contract',\n\teditLabel: 'Edit contract',\n\tcreateRuleLabel: 'Add rule',\n\tviewRuleLabel: 'Open rule',\n\teditRuleLabel: 'Edit rule',\n\tdeleteRuleLabel: 'Delete rule',\n\truleActionsLabel: 'Rule actions',\n\temptyTitle: 'No contract summary',\n\temptyDescription: 'Pass metrics, terms, or rules to summarize the product contract.',\n};\n\nexport interface ProductOptionsSummaryStrings {\n\t/** Surface title. */\n\ttitle: string;\n\t/** Supporting copy shown under the label. */\n\tdescription: string;\n\tmanageLabel: string;\n\tcreateLabel: string;\n\tviewLabel: string;\n\teditLabel: string;\n\tdeleteLabel: string;\n\tactionsLabel: string;\n\temptyTitle: string;\n\temptyDescription: string;\n}\n\nexport const defaultProductOptionsSummaryStrings: ProductOptionsSummaryStrings = {\n\ttitle: 'Options',\n\tdescription: 'Variant-driving choices and add-ons customers can select.',\n\tmanageLabel: 'Manage options',\n\tcreateLabel: 'Add option',\n\tviewLabel: 'Open option',\n\teditLabel: 'Edit option',\n\tdeleteLabel: 'Delete option',\n\tactionsLabel: 'Option actions',\n\temptyTitle: 'No options',\n\temptyDescription: 'Pass option groups to summarize configurable product choices.',\n};\n\nexport interface ProductOptionActionMenuStrings {\n\tviewLabel: string;\n\teditLabel: string;\n\tdeleteLabel: string;\n\tactionsLabel: string;\n}\n\nexport const defaultProductOptionActionMenuStrings: ProductOptionActionMenuStrings = {\n\tviewLabel: 'Open option',\n\teditLabel: 'Edit option',\n\tdeleteLabel: 'Delete option',\n\tactionsLabel: 'Option actions',\n};\n\nexport interface ProductOptionsMatrixStrings {\n\t/** Surface title. */\n\ttitle: string;\n\t/** Supporting copy shown under the label. */\n\tdescription: string;\n\tcreateLabel: string;\n\teditLabel: string;\n\tdeleteLabel: string;\n\taddValueLabel: string;\n\taddAnotherValueLabel: string;\n\taddAnotherOptionLabel: string;\n\tdeleteValueLabel: string;\n\t/** Title of the confirmation shown before an option group is deleted. */\n\tconfirmDeleteOptionTitle: string;\n\t/** Title of the confirmation shown when saving would drop option values. */\n\tconfirmRemoveValuesTitle: string;\n\t/**\n\t * Consequence of saving an edit that drops values. Receives `{count}`, the\n\t * number of values the save removes.\n\t */\n\tconfirmRemoveValuesDescription: string;\n\t/** Confirm button for a save that drops values. */\n\tconfirmRemoveValuesLabel: string;\n\t/** Sentence explaining what deleting an option group takes with it. */\n\tconfirmDeleteOptionDescription: string;\n\tdoneLabel: string;\n\tsaveLabel: string;\n\tcancelLabel: string;\n\texpandOptionLabel: string;\n\tcollapseOptionLabel: string;\n\tactionsLabel: string;\n\toptionNameLabel: string;\n\toptionValuesLabel: string;\n\tvaluesLabel: string;\n\tuseForVariantsLabel: string;\n\tusedForVariantsLabel: string;\n\tnotUsedForVariantsLabel: string;\n\temptyTitle: string;\n\temptyDescription: string;\n\tnoValuesLabel: string;\n}\n\nexport const defaultProductOptionsMatrixStrings: ProductOptionsMatrixStrings = {\n\ttitle: 'Variant options',\n\tdescription: 'Define option groups and values before generating sellable variants.',\n\tcreateLabel: 'Add attribute',\n\teditLabel: 'Configure',\n\tdeleteLabel: 'Delete option',\n\taddValueLabel: 'Add value',\n\taddAnotherValueLabel: 'Add another value',\n\taddAnotherOptionLabel: 'Add another option',\n\tdeleteValueLabel: 'Delete value',\n\tconfirmDeleteOptionTitle: 'Delete this option?',\n\tconfirmRemoveValuesTitle: 'Save and remove these values?',\n\tconfirmRemoveValuesDescription: 'Saving removes {count} value(s) from this option, and any variant built from them goes with it. This cannot be undone.',\n\tconfirmRemoveValuesLabel: 'Save changes',\n\tconfirmDeleteOptionDescription: 'Its values are removed from the product, and any variant built from them goes with it. This cannot be undone.',\n\tdoneLabel: 'Done',\n\tsaveLabel: 'Save',\n\tcancelLabel: 'Cancel',\n\texpandOptionLabel: 'Expand option',\n\tcollapseOptionLabel: 'Collapse option',\n\tactionsLabel: 'Option actions',\n\toptionNameLabel: 'Option name',\n\toptionValuesLabel: 'Option values',\n\tvaluesLabel: 'Values',\n\tuseForVariantsLabel: 'Use for variants',\n\tusedForVariantsLabel: 'Used for variants',\n\tnotUsedForVariantsLabel: 'Not used for variants',\n\temptyTitle: 'No option groups',\n\temptyDescription: 'Add options such as size, color, or packaging to create variant combinations.',\n\tnoValuesLabel: 'No values',\n};\n\nexport interface ProductQuotePreviewCardStrings {\n\t/** Surface title. */\n\ttitle: string;\n\t/** Supporting copy shown under the label. */\n\tdescription: string;\n\tsubtotalLabel: string;\n\ttaxLabel: string;\n\tdiscountLabel: string;\n\ttotalLabel: string;\n\tactionLabel: string;\n\tcreateLineLabel: string;\n\tviewLineLabel: string;\n\teditLineLabel: string;\n\tdeleteLineLabel: string;\n\tlineActionsLabel: string;\n\temptyTitle: string;\n\temptyDescription: string;\n}\n\nexport const defaultProductQuotePreviewCardStrings: ProductQuotePreviewCardStrings = {\n\ttitle: 'Quote preview',\n\tdescription: 'How the product appears in a compact customer quote.',\n\tsubtotalLabel: 'Subtotal',\n\ttaxLabel: 'Tax',\n\tdiscountLabel: 'Discount',\n\ttotalLabel: 'Total',\n\tactionLabel: 'Open quote',\n\tcreateLineLabel: 'Add line',\n\tviewLineLabel: 'Open line',\n\teditLineLabel: 'Edit line',\n\tdeleteLineLabel: 'Delete line',\n\tlineActionsLabel: 'Line actions',\n\temptyTitle: 'No quote lines',\n\temptyDescription: 'Pass quote lines to preview pricing.',\n};\n\nexport interface ProductPoliciesCardStrings {\n\t/** Surface title. */\n\ttitle: string;\n\t/** Supporting copy shown under the label. */\n\tdescription: string;\n\tcreateLabel: string;\n\tviewLabel: string;\n\teditLabel: string;\n\tdeleteLabel: string;\n\tactionsLabel: string;\n\temptyTitle: string;\n\temptyDescription: string;\n}\n\nexport const defaultProductPoliciesCardStrings: ProductPoliciesCardStrings = {\n\ttitle: 'Policies',\n\tdescription: 'Cancellation, booking, service, and customer-facing rules.',\n\tcreateLabel: 'Add policy',\n\tviewLabel: 'View',\n\teditLabel: 'Edit policy',\n\tdeleteLabel: 'Delete policy',\n\tactionsLabel: 'Policy actions',\n\temptyTitle: 'No policies',\n\temptyDescription: 'Pass policies to summarize customer-facing rules.',\n};\n\nexport interface ProductVariantsTableStrings {\n\t/** Surface title. */\n\ttitle: string;\n\t/** Supporting copy shown under the label. */\n\tdescription: string;\n\tcreateLabel: string;\n\tviewLabel: string;\n\teditLabel: string;\n\tduplicateLabel: string;\n\tdeleteLabel: string;\n\temptyTitle: string;\n\temptyDescription: string;\n\theaders: {\n\t\tvariant: string;\n\t\tsku: string;\n\t\tprice: string;\n\t\tinventory: string;\n\t\tchannels: string;\n\t\tupdated: string;\n\t\tactions: string;\n\t};\n}\n\nexport const defaultProductVariantsTableStrings: ProductVariantsTableStrings = {\n\ttitle: 'Variants',\n\tdescription: 'Sellable combinations with price, availability, and SKU.',\n\tcreateLabel: 'Add variant',\n\tviewLabel: 'Open variant',\n\teditLabel: 'Edit',\n\tduplicateLabel: 'Duplicate',\n\tdeleteLabel: 'Delete',\n\temptyTitle: 'No variants',\n\temptyDescription: 'Create or pass variants to show sellable rows.',\n\theaders: {\n\t\tvariant: 'Variant',\n\t\tsku: 'SKU',\n\t\tprice: 'Price',\n\t\tinventory: 'Available',\n\t\tchannels: 'Channels',\n\t\tupdated: 'Updated',\n\t\tactions: 'Actions',\n\t},\n};\n\nexport interface ProductVariantBulkTableStrings {\n\t/** Surface title. */\n\ttitle: string;\n\t/** Supporting copy shown under the label. */\n\tdescription: string;\n\tcreateLabel: string;\n\tgenerateLabel: string;\n\tbulkEditLabel: string;\n\tviewLabel: string;\n\teditLabel: string;\n\tduplicateLabel: string;\n\tdeleteLabel: string;\n\tbulkApplyLabel: string;\n\tbulkDeleteLabel: string;\n\tselectedLabel: (count: number, total: number) => string;\n\tgroupCountLabel: (count: number) => string;\n\tclearSelectionLabel: string;\n\tselectAllLabel: string;\n\tselectRowLabel: (index: number) => string;\n\temptyTitle: string;\n\temptyDescription: string;\n\theaders: {\n\t\tvariant: string;\n\t\tprice: string;\n\t\tinventory: string;\n\t\tsku: string;\n\t\tstatus: string;\n\t\tupdated: string;\n\t\tactions: string;\n\t};\n}\n\nexport const defaultProductVariantsBulkTableStrings: ProductVariantBulkTableStrings = {\n\ttitle: 'Variants',\n\tdescription: 'Review generated combinations, select rows, and apply bulk operations.',\n\tcreateLabel: 'Add variant',\n\tgenerateLabel: 'Generate variants',\n\tbulkEditLabel: 'Bulk edit selected',\n\tviewLabel: 'Open variant',\n\teditLabel: 'Edit',\n\tduplicateLabel: 'Duplicate',\n\tdeleteLabel: 'Delete',\n\tbulkApplyLabel: 'Apply changes',\n\tbulkDeleteLabel: 'Delete selected',\n\tselectedLabel: (count, total) => `${count} of ${total} selected`,\n\tgroupCountLabel: (count) => `${count} ${count === 1 ? 'variant' : 'variants'}`,\n\tclearSelectionLabel: 'Clear',\n\tselectAllLabel: 'Select all variants',\n\tselectRowLabel: (index) => `Select row ${index + 1}`,\n\temptyTitle: 'No variants',\n\temptyDescription: 'Generate variants from option groups or pass sellable rows from the app.',\n\theaders: {\n\t\tvariant: 'Variant',\n\t\tprice: 'Price',\n\t\tinventory: 'Available',\n\t\tsku: 'SKU',\n\t\tstatus: 'Status',\n\t\tupdated: 'Updated',\n\t\tactions: 'Actions',\n\t},\n};\n\nexport interface ProductVariantsManagerStrings {\n\t/** Surface title. */\n\ttitle: string;\n\t/** Supporting copy shown under the label. */\n\tdescription: string;\n\toptionsTitle: string;\n\tvariantsTitle: string;\n\tgroupByLabel: string;\n\tsearchLabel: string;\n\tfilterLabel: string;\n\tgenerateLabel: string;\n\tcreateVariantLabel: string;\n\tactionsLabel: string;\n}\n\nexport const defaultProductVariantsManagerStrings: ProductVariantsManagerStrings = {\n\ttitle: 'Variants',\n\tdescription: 'Configure option groups first, then manage the generated sellable variants.',\n\toptionsTitle: 'Variant options',\n\tvariantsTitle: 'Variants',\n\tgroupByLabel: 'Group by',\n\tsearchLabel: 'Search variants',\n\tfilterLabel: 'Filter variants',\n\tgenerateLabel: 'Generate variants',\n\tcreateVariantLabel: 'Add variant',\n\tactionsLabel: 'Variant manager actions',\n};\n\nexport interface ProductVariantActionMenuStrings {\n\tviewLabel: string;\n\teditLabel: string;\n\tduplicateLabel: string;\n\tdeleteLabel: string;\n\tactionsLabel: string;\n}\n\nexport const defaultProductVariantActionMenuStrings: ProductVariantActionMenuStrings = {\n\tviewLabel: 'Open variant',\n\teditLabel: 'Edit',\n\tduplicateLabel: 'Duplicate',\n\tdeleteLabel: 'Delete',\n\tactionsLabel: 'Variant actions',\n};\n\nexport interface ProductVariantDetailsStrings {\n\t/** Surface title. */\n\ttitle: string;\n\t/** Supporting copy shown under the label. */\n\tdescription: string;\n\tbackLabel: string;\n\tfactsTitle: string;\n\tselectedOptionsTitle: string;\n\trelatedOptionsTitle: string;\n\tviewOptionLabel: string;\n\temptyTitle: string;\n\temptyDescription: string;\n\t/** Label/value facts rendered as a metadata list. */\n\tmetadata: {\n\t\tprice: string;\n\t\tinventory: string;\n\t\tsku: string;\n\t\tchannels: string;\n\t\tupdated: string;\n\t};\n}\n\nexport const defaultProductVariantDetailsStrings: ProductVariantDetailsStrings = {\n\ttitle: 'Variant',\n\tdescription: 'Sellable variant details, options, pricing, and fulfilment data.',\n\tbackLabel: 'Back',\n\tfactsTitle: 'Variant facts',\n\tselectedOptionsTitle: 'Selected options',\n\trelatedOptionsTitle: 'Option groups',\n\tviewOptionLabel: 'Open option',\n\temptyTitle: 'No variant selected',\n\temptyDescription: 'Pass a variant to render a standalone variant detail surface.',\n\tmetadata: {\n\t\tprice: 'Price',\n\t\tinventory: 'Available',\n\t\tsku: 'SKU',\n\t\tchannels: 'Channels',\n\t\tupdated: 'Updated',\n\t},\n};\n\nexport interface ProductVariantEditorStrings {\n\t/** Surface title. */\n\ttitle: string;\n\t/** Supporting copy shown under the label. */\n\tdescription: string;\n\tidentityTitle: string;\n\tcommercialTitle: string;\n\toptionsTitle: string;\n\tsaveLabel: string;\n\tsavingLabel: string;\n\tcancelLabel: string;\n\tdeleteLabel: string;\n\tstatusPlaceholder: string;\n\toptionPlaceholder: string;\n\tfields: {\n\t\tname: string;\n\t\tdescription: string;\n\t\tsku: string;\n\t\tprice: string;\n\t\tinventory: string;\n\t\tstatus: string;\n\t\tchannels: string;\n\t};\n\tplaceholders: {\n\t\tname: string;\n\t\tdescription: string;\n\t\tsku: string;\n\t\tprice: string;\n\t\tinventory: string;\n\t\tstatus: string;\n\t\tchannels: string;\n\t};\n}\n\nexport const defaultProductVariantEditorStrings: ProductVariantEditorStrings = {\n\ttitle: 'Edit variant',\n\tdescription: 'Controlled form for variant identity, pricing, inventory, and option values.',\n\tidentityTitle: 'Identity',\n\tcommercialTitle: 'Commercial setup',\n\toptionsTitle: 'Options',\n\tsaveLabel: 'Save variant',\n\tsavingLabel: 'Saving',\n\tcancelLabel: 'Cancel',\n\tdeleteLabel: 'Delete variant',\n\tstatusPlaceholder: 'Select status',\n\toptionPlaceholder: 'Select value',\n\tfields: {\n\t\tname: 'Name',\n\t\tdescription: 'Description',\n\t\tsku: 'SKU',\n\t\tprice: 'Price',\n\t\tinventory: 'Inventory',\n\t\tstatus: 'Status',\n\t\tchannels: 'Channels',\n\t},\n\tplaceholders: {\n\t\tname: '750 ml bottle',\n\t\tdescription: 'Standard retail pack',\n\t\tsku: 'BAL-750-CL',\n\t\tprice: 'US$ 24.00',\n\t\tinventory: '82',\n\t\tstatus: 'Active',\n\t\tchannels: 'Online store, POS',\n\t},\n};\n\nexport interface ProductOverviewStrings {\n\tmainLabel: string;\n\trailLabel: string;\n}\n\nexport const defaultProductOverviewStrings: ProductOverviewStrings = {\n\tmainLabel: 'Product overview',\n\trailLabel: 'Product supporting information',\n};\n","import type { ReactNode } from 'react';\n\nimport { EmptyState } from '../../../blocks/data-display';\nimport { cn } from '../../../../lib/utils';\n\nexport function ProductEmptyState({\n\ttitle,\n\tdescription,\n\taction,\n\tclassName,\n}: {\n\t/** Surface title. */\n\ttitle: ReactNode;\n\t/** Supporting copy under the title. */\n\tdescription: ReactNode;\n\t/** Control offered alongside the message. */\n\taction?: ReactNode;\n\tclassName?: string;\n}) {\n\treturn (\n\t\t<EmptyState\n\t\t\tpadding=\"md\"\n\t\t\tborder\n\t\t\ttitle={title}\n\t\t\tdescription={description}\n\t\t\tactions={action}\n\t\t\tclassName={cn('product-empty-state--component bg-muted/30', className)}\n\t\t/>\n\t);\n}\n","import type { BadgeTone } from '../../../base/badge';\nimport { cn } from '../../../../lib/utils';\n\nimport type { ProductTone } from '../products.types';\nimport { dotRecipes } from '../../../../lib/tone-recipes';\n\n/**\n * Badge tone for a product row value. Only status tones carry colour; neutral\n * and primary (reserved for the main command) render as neutral badges.\n */\nexport const PRODUCT_TONE_BADGE: Record<ProductTone, BadgeTone> = {\n\tneutral: 'secondary',\n\tprimary: 'secondary',\n\tsuccess: 'success',\n\twarning: 'warning',\n\tdestructive: 'destructive',\n\tinfo: 'info',\n};\n\n/**\n * Text colour for a figure whose tone states a status. Figures keep their width,\n * so a flagged metric lines up with its plain siblings instead of growing a chip.\n */\nexport const PRODUCT_TONE_TEXT: Record<ProductTone, string | undefined> = {\n\tneutral: undefined,\n\tprimary: undefined,\n\tsuccess: 'text-success',\n\twarning: 'text-warning-accent',\n\tdestructive: 'text-destructive',\n\tinfo: 'text-info',\n};\n\nconst PRODUCT_STATUS_TONES: ReadonlySet<ProductTone> = new Set<ProductTone>(['success', 'warning', 'destructive', 'info']);\n\n/** Whether a tone states a status. Neutral and primary are presentation, not state. */\nexport function isProductStatusTone(tone: ProductTone | undefined): tone is ProductTone {\n\treturn tone !== undefined && PRODUCT_STATUS_TONES.has(tone);\n}\n\nexport function clampProductPercent(value: number): number {\n\tif (!Number.isFinite(value)) return 0;\n\treturn Math.min(100, Math.max(0, Math.round(value)));\n}\n\nexport function ProductToneDot({ tone = 'neutral' }: { tone?: ProductTone }) {\n\treturn (\n\t\t<span\n\t\t\taria-hidden=\"true\"\n\t\t\tclassName={cn('product-tone-dot--component', dotRecipes.marker, {\n\t\t\t\t'bg-muted-foreground': tone === 'neutral' || tone === 'primary',\n\t\t\t\t'bg-success': tone === 'success',\n\t\t\t\t'bg-warning': tone === 'warning',\n\t\t\t\t'bg-destructive': tone === 'destructive',\n\t\t\t\t'bg-info': tone === 'info',\n\t\t\t})}\n\t\t/>\n\t);\n}\n","import { Value } from '../../../primitives';\nimport { Stack } from '../../../base/structure';\nimport { DisplayLabel, Text } from '../../../typography';\n\nimport type { ProductMetricSummary, ProductStructureMetric } from '../products.types';\nimport { ProductToneDot, isProductStatusTone } from './product-tone';\n\n/**\n * A headline fact: label above an emphasised value, in the same label-over-value\n * anatomy as the metadata lists beside it. No tile chrome — the parent grid's\n * gap separates metrics — and colour appears only as a status dot when the\n * metric's tone states a status.\n */\nexport function ProductMetricTile({ metric }: { metric: ProductStructureMetric | ProductMetricSummary }) {\n\tconst icon = 'icon' in metric ? metric.icon : undefined;\n\n\treturn (\n\t\t<Stack gap=\"dense\" className=\"product-metric-tile--component min-w-0\">\n\t\t\t<Stack direction=\"horizontal\" gap=\"sm\" wrap={false}>\n\t\t\t\t{isProductStatusTone(metric.tone) && <ProductToneDot tone={metric.tone} />}\n\t\t\t\t{!!icon && <span className=\"flex shrink-0 text-muted-foreground\">{icon}</span>}\n\t\t\t\t<DisplayLabel className=\"truncate text-inherit\">{metric.label}</DisplayLabel>\n\t\t\t</Stack>\n\t\t\t<Value type=\"inherit\" weight=\"semibold\" className=\"tabular-nums\">\n\t\t\t\t{metric.value}\n\t\t\t</Value>\n\t\t\t{!!metric.description && (\n\t\t\t\t<Text size=\"xs\" type=\"secondary\" lineHeight=\"snug\">\n\t\t\t\t\t{metric.description}\n\t\t\t\t</Text>\n\t\t\t)}\n\t\t</Stack>\n\t);\n}\n","import { DataTableActions, type TableAction } from '../../table';\nimport { cn } from '../../../../lib/utils';\n\nexport function ProductRowActions<TItem>({\n\titem,\n\tactions,\n\tmenuLabel,\n\tclassName,\n}: {\n\t/** The record this row represents. */\n\titem: TItem;\n\t/** Controls offered on the row. */\n\tactions: TableAction<TItem>[];\n\t/** Accessible name for the overflow trigger. */\n\tmenuLabel: string;\n\tclassName?: string;\n}) {\n\tif (actions.length === 0) return null;\n\n\treturn (\n\t\t<div className={cn('product-row-actions--component flex justify-end', className)}>\n\t\t\t<DataTableActions\n\t\t\t\trow={item}\n\t\t\t\tactions={actions}\n\t\t\t\tmenuLabel={menuLabel}\n\t\t\t\tdisplayMode=\"menu\"\n\t\t\t/>\n\t\t</div>\n\t);\n}\n","import type { ReactNode } from 'react';\n\nimport { Badge } from '../../../base/badge';\nimport { Button } from '../../../base/buttons';\nimport {\n\tItem,\n\tItemActions,\n\tItemContent,\n\tItemDescription,\n\tItemMedia,\n\tItemTitle,\n} from '../../../base/item';\nimport { Stack } from '../../../base/structure';\nimport { Value } from '../../../primitives';\nimport { Text } from '../../../typography';\nimport { cn } from '../../../../lib/utils';\n\nimport type {\n\tProductOperationsItem,\n\tProductOptionSummary,\n\tProductPolicySummary,\n\tProductReadinessItem,\n\tProductStructureMetric,\n\tProductTone,\n} from '../products.types';\nimport {\n\tPRODUCT_TONE_BADGE,\n\tPRODUCT_TONE_TEXT,\n\tProductToneDot,\n\tisProductStatusTone,\n} from './product-tone';\n\n// Match Item's readable identity basis so action-heavy rows wrap by parent width.\nconst PRODUCT_ROW_CONTENT = 'min-w-0 basis-48';\nconst PRODUCT_ROW_TITLE = 'line-clamp-none break-words overflow-visible';\nconst PRODUCT_ROW_ACTIONS = 'ml-auto shrink-0 flex-wrap justify-end gap-space-md';\n\n/**\n * Title line of a product row. A row's short value and chip sit beside the\n * label, so the trailing edge holds only commands and every row in a list keeps\n * the same trailing width. A status tone turns the value into a status badge;\n * any other value stays quiet secondary copy.\n */\nfunction ProductRowHeading({\n\tlabel,\n\tvalue,\n\ttone,\n\tbadge,\n}: {\n\tlabel: ReactNode;\n\tvalue?: ReactNode;\n\ttone?: ProductTone;\n\tbadge?: ReactNode;\n}) {\n\tconst title = <ItemTitle className={PRODUCT_ROW_TITLE}>{label}</ItemTitle>;\n\tif (!value && !badge) return title;\n\n\treturn (\n\t\t<Stack direction=\"horizontal\" gap=\"sm\" className=\"product-row--heading\">\n\t\t\t{title}\n\t\t\t{!!value && (isProductStatusTone(tone) ? (\n\t\t\t\t<Badge tone={PRODUCT_TONE_BADGE[tone]}>{value}</Badge>\n\t\t\t) : (\n\t\t\t\t<Text tag=\"span\" type=\"secondary\" lineHeight=\"tight\">{value}</Text>\n\t\t\t))}\n\t\t\t{badge}\n\t\t</Stack>\n\t);\n}\n\nfunction ProductRowSelect({ label, onSelect }: { label: ReactNode; onSelect: () => void }) {\n\treturn (\n\t\t<Button type=\"button\" tone=\"secondary\" buttonStyle=\"ghost\" onClick={onSelect}>\n\t\t\t{label}\n\t\t</Button>\n\t);\n}\n\nexport function ProductStructureMetricRow({\n\tmetric,\n\tactions,\n}: {\n\t/** The metric this row shows. */\n\tmetric: ProductStructureMetric;\n\t/** Controls offered on the row. */\n\tactions?: ReactNode;\n}) {\n\treturn (\n\t\t<Item className=\"product-structure-metric-row--component product-structure-card--item\">\n\t\t\t{!!metric.icon && (\n\t\t\t\t<ItemMedia variant=\"icon\" className=\"text-muted-foreground\">\n\t\t\t\t\t{metric.icon}\n\t\t\t\t</ItemMedia>\n\t\t\t)}\n\t\t\t<ItemContent className={PRODUCT_ROW_CONTENT}>\n\t\t\t\t<ItemTitle className={PRODUCT_ROW_TITLE}>{metric.label}</ItemTitle>\n\t\t\t\t{!!metric.description && <ItemDescription clamp={2}>{metric.description}</ItemDescription>}\n\t\t\t</ItemContent>\n\t\t\t<ItemActions className=\"ml-auto shrink-0 gap-space-md\">\n\t\t\t\t<Value type=\"inherit\" weight=\"semibold\" className={cn('tabular-nums', metric.tone && PRODUCT_TONE_TEXT[metric.tone])}>\n\t\t\t\t\t{metric.value}\n\t\t\t\t</Value>\n\t\t\t\t{actions}\n\t\t\t</ItemActions>\n\t\t</Item>\n\t);\n}\n\nexport function ProductReadinessRow({\n\titem,\n\tactionFallback,\n\tonSelect,\n\tactions,\n}: {\n\t/** The record this row represents. */\n\titem: ProductReadinessItem;\n\t/** Shown when a row has no actions. */\n\tactionFallback: ReactNode;\n\tonSelect?: () => void;\n\t/** Controls offered on the row. */\n\tactions?: ReactNode;\n}) {\n\t// The leading dot is the checklist state: done, flagged by tone, or pending.\n\tconst state = item.tone ?? (item.completed ? 'success' : 'neutral');\n\tconst select = item.onSelect ?? onSelect;\n\n\treturn (\n\t\t<Item className=\"product-readiness-row--component product-readiness-card--item\">\n\t\t\t<ItemMedia className=\"product-readiness-row--state h-icon-lg\">\n\t\t\t\t<ProductToneDot tone={state} />\n\t\t\t</ItemMedia>\n\t\t\t<ItemContent className={PRODUCT_ROW_CONTENT}>\n\t\t\t\t<ProductRowHeading label={item.label} value={item.value} tone={item.tone} />\n\t\t\t\t{!!item.description && <ItemDescription clamp={2}>{item.description}</ItemDescription>}\n\t\t\t</ItemContent>\n\t\t\t{!!(select || actions) && (\n\t\t\t\t<ItemActions className={PRODUCT_ROW_ACTIONS}>\n\t\t\t\t\t{!!select && <ProductRowSelect label={item.actionLabel ?? actionFallback} onSelect={select} />}\n\t\t\t\t\t{actions}\n\t\t\t\t</ItemActions>\n\t\t\t)}\n\t\t</Item>\n\t);\n}\n\nexport function ProductOperationRow({\n\titem,\n\tactionFallback,\n\tonSelect,\n\tactions,\n}: {\n\t/** The record this row represents. */\n\titem: ProductOperationsItem;\n\t/** Shown when a row has no actions. */\n\tactionFallback: ReactNode;\n\tonSelect?: () => void;\n\t/** Controls offered on the row. */\n\tactions?: ReactNode;\n}) {\n\tconst select = item.onSelect ?? onSelect;\n\n\treturn (\n\t\t<Item className=\"product-operation-row--component product-operations-card--item\">\n\t\t\t<ItemContent className={PRODUCT_ROW_CONTENT}>\n\t\t\t\t<ProductRowHeading label={item.label} value={item.value} tone={item.tone} />\n\t\t\t\t{!!item.description && <ItemDescription clamp={2}>{item.description}</ItemDescription>}\n\t\t\t</ItemContent>\n\t\t\t{!!(select || actions) && (\n\t\t\t\t<ItemActions className={PRODUCT_ROW_ACTIONS}>\n\t\t\t\t\t{!!select && <ProductRowSelect label={item.actionLabel ?? actionFallback} onSelect={select} />}\n\t\t\t\t\t{actions}\n\t\t\t\t</ItemActions>\n\t\t\t)}\n\t\t</Item>\n\t);\n}\n\nexport function ProductSummaryRow({\n\titem,\n\tactionLabel,\n\tonSelect,\n\tactions,\n}: {\n\t/** The record this row represents. */\n\titem: ProductOptionSummary | ProductPolicySummary;\n\t/** Copy for the row's inline action. */\n\tactionLabel?: ReactNode;\n\tonSelect?: () => void;\n\t/** Controls offered on the row. */\n\tactions?: ReactNode;\n}) {\n\tconst values = 'values' in item ? item.values : undefined;\n\n\treturn (\n\t\t<Item className=\"product-summary-row--component\">\n\t\t\t<ItemContent className={PRODUCT_ROW_CONTENT}>\n\t\t\t\t<ProductRowHeading label={item.label} value={item.value} tone={item.tone} badge={item.badge} />\n\t\t\t\t{!!item.description && <ItemDescription clamp={2}>{item.description}</ItemDescription>}\n\t\t\t\t{!!values?.length && (\n\t\t\t\t\t<div className=\"mt-space-md flex flex-wrap gap-space-xs\">\n\t\t\t\t\t\t{values.map((value, index) => (\n\t\t\t\t\t\t\t<Badge key={index} tone=\"secondary\">\n\t\t\t\t\t\t\t\t{value}\n\t\t\t\t\t\t\t</Badge>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t</ItemContent>\n\t\t\t{!!(onSelect || actions) && (\n\t\t\t\t<ItemActions className={PRODUCT_ROW_ACTIONS}>\n\t\t\t\t\t{!!onSelect && <ProductRowSelect label={actionLabel} onSelect={onSelect} />}\n\t\t\t\t\t{actions}\n\t\t\t\t</ItemActions>\n\t\t\t)}\n\t\t</Item>\n\t);\n}\n","import {\n\tEye,\n\tPencil,\n\tPlus,\n\tTrash2 } from 'lucide-react';\n\nimport { Button } from '../../../base/buttons';\nimport { ContentBlock } from '../../../base/display';\nimport { Grid, Stack } from '../../../base/structure';\nimport { MetadataList } from '../../../base/metadata-list';\nimport { ItemGroup } from '../../../base/item';\nimport { Text } from '../../../typography';\nimport { useStrings } from '../../../../lib/strings';\nimport { cn } from '../../../../lib/utils';\n\nimport { defaultProductContractOverviewStrings } from '../products.strings';\nimport type { ProductContractOverviewProps } from '../products.types';\nimport { ProductEmptyState } from '../partials/product-empty-state';\nimport { ProductMetricTile } from '../partials/product-metric-tile';\nimport { ProductRowActions } from '../partials/product-actions';\nimport { ProductSummaryRow } from '../partials/product-rows';\n\n/**\n * One main column region of the product editor.\n *\n * @deprecated An internal region of `ProductOverview`, which renders it from its `contract` prop (still typed `ProductContractOverviewProps`). Pass the same props there and add custom content through the overview's slots. Kept exported for compatibility.\n */\nexport function ProductContractOverview({\n\tmetrics = [],\n\tterms = [],\n\trules = [],\n\tonOpenContract,\n\tonEditContract,\n\tonCreateRule,\n\tonSelectRule,\n\tonEditRule,\n\tonDeleteRule,\n\trenderRuleActions,\n\tactions,\n\tfooterSlot,\n\tempty,\n\tclassName,\n\tstrings: stringsProp,\n}: ProductContractOverviewProps) {\n\tconst strings = useStrings(defaultProductContractOverviewStrings, stringsProp);\n\tconst hasContent = metrics.length > 0 || terms.length > 0 || rules.length > 0;\n\tconst headerAction = onOpenContract || onEditContract || onCreateRule ? (\n\t\t<div className=\"flex items-center gap-space-md\">\n\t\t\t{!!onCreateRule && (\n\t\t\t\t<Button type=\"button\" tone=\"secondary\" buttonStyle=\"ghost\" onClick={onCreateRule} icon={Plus}>\n\t\t\t\t\t{strings.createRuleLabel}\n\t\t\t\t</Button>\n\t\t\t)}\n\t\t\t{!!onEditContract && (\n\t\t\t\t<Button type=\"button\" tone=\"secondary\" buttonStyle=\"ghost\" onClick={onEditContract}>\n\t\t\t\t\t{strings.editLabel}\n\t\t\t\t</Button>\n\t\t\t)}\n\t\t\t{!!onOpenContract && (\n\t\t\t\t<Button type=\"button\" tone=\"secondary\" buttonStyle=\"ghost\" onClick={onOpenContract}>\n\t\t\t\t\t{strings.actionLabel}\n\t\t\t\t</Button>\n\t\t\t)}\n\t\t</div>\n\t) : undefined;\n\n\treturn (\n\t\t<ContentBlock\n\t\t\ttitle={strings.title}\n\t\t\tdescription={strings.description}\n\t\t\tactions={actions}\n\t\t\theaderAction={headerAction}\n\t\t\tfooterSlot={footerSlot}\n\t\t\tclassName={cn('product-contract-overview--component w-full', className)}\n\t\t>\n\t\t\t{!hasContent ? (\n\t\t\t\tempty ?? (\n\t\t\t\t\t<ProductEmptyState\n\t\t\t\t\t\ttitle={strings.emptyTitle}\n\t\t\t\t\t\tdescription={strings.emptyDescription}\n\t\t\t\t\t\taction={onCreateRule ? (\n\t\t\t\t\t\t\t<Button tone=\"primary\" type=\"button\" onClick={onCreateRule} icon={Plus}>\n\t\t\t\t\t\t\t\t{strings.createRuleLabel}\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t) : undefined}\n\t\t\t\t\t/>\n\t\t\t\t)\n\t\t\t) : (\n\t\t\t\t<Stack gap=\"2xl\">\n\t\t\t\t\t{metrics.length > 0 && (\n\t\t\t\t\t\t<Grid columns={{ base: 1, sm: 3 }} gap=\"md\">\n\t\t\t\t\t\t\t{metrics.map((metric) => (\n\t\t\t\t\t\t\t\t<ProductMetricTile key={metric.id} metric={metric} />\n\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t</Grid>\n\t\t\t\t\t)}\n\t\t\t\t\t{terms.length > 0 && (\n\t\t\t\t\t\t<Stack gap=\"md\">\n\t\t\t\t\t\t\t<Text type=\"inherit\" weight=\"semibold\">{strings.termsTitle}</Text>\n\t\t\t\t\t\t\t<MetadataList adaptTo=\"container\" items={terms} columns={2} density=\"compact\" />\n\t\t\t\t\t\t</Stack>\n\t\t\t\t\t)}\n\t\t\t\t\t{rules.length > 0 && (\n\t\t\t\t\t\t<Stack gap=\"md\">\n\t\t\t\t\t\t\t<Text type=\"inherit\" weight=\"semibold\">{strings.rulesTitle}</Text>\n\t\t\t\t\t\t\t<ItemGroup>\n\t\t\t\t\t\t\t\t{rules.map((rule, index) => {\n\t\t\t\t\t\t\t\t\tconst onSelect = onSelectRule ? () => onSelectRule(rule) : undefined;\n\t\t\t\t\t\t\t\t\tconst onEdit = onEditRule ? () => onEditRule(rule) : undefined;\n\t\t\t\t\t\t\t\t\tconst onDelete = onDeleteRule ? () => onDeleteRule(rule) : undefined;\n\t\t\t\t\t\t\t\t\tconst ruleActions = [\n\t\t\t\t\t\t\t\t\t\t...(onSelect ? [{\n\t\t\t\t\t\t\t\t\t\t\tid: 'open',\n\t\t\t\t\t\t\t\t\t\t\tlabel: strings.viewRuleLabel,\n\t\t\t\t\t\t\t\t\t\t\ticon: <Eye className=\"size-icon-md\" />,\n\t\t\t\t\t\t\t\t\t\t\tonClick: () => onSelect(),\n\t\t\t\t\t\t\t\t\t\t\ttone: 'secondary' as const, buttonStyle: 'ghost' as const,\n\t\t\t\t\t\t\t\t\t\t}] : []),\n\t\t\t\t\t\t\t\t\t\t...(onEdit ? [{\n\t\t\t\t\t\t\t\t\t\t\tid: 'edit',\n\t\t\t\t\t\t\t\t\t\t\tlabel: strings.editRuleLabel,\n\t\t\t\t\t\t\t\t\t\t\ticon: <Pencil className=\"size-icon-md\" />,\n\t\t\t\t\t\t\t\t\t\t\tonClick: () => onEdit(),\n\t\t\t\t\t\t\t\t\t\t\ttone: 'secondary' as const, buttonStyle: 'ghost' as const,\n\t\t\t\t\t\t\t\t\t\t}] : []),\n\t\t\t\t\t\t\t\t\t\t...(onDelete ? [{\n\t\t\t\t\t\t\t\t\t\t\tid: 'delete',\n\t\t\t\t\t\t\t\t\t\t\tlabel: strings.deleteRuleLabel,\n\t\t\t\t\t\t\t\t\t\t\ticon: <Trash2 className=\"size-icon-md\" />,\n\t\t\t\t\t\t\t\t\t\t\tonClick: () => onDelete(),\n\t\t\t\t\t\t\t\t\t\t\ttone: 'destructive' as const,\n\t\t\t\t\t\t\t\t\t\t}] : []),\n\t\t\t\t\t\t\t\t\t];\n\t\t\t\t\t\t\t\t\tconst rowActions = renderRuleActions\n\t\t\t\t\t\t\t\t\t\t? renderRuleActions(rule, { index, onSelect, onEdit, onDelete })\n\t\t\t\t\t\t\t\t\t\t: <ProductRowActions item={rule} actions={ruleActions} menuLabel={strings.ruleActionsLabel} />;\n\n\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t<ProductSummaryRow\n\t\t\t\t\t\t\t\t\t\t\tkey={rule.id}\n\t\t\t\t\t\t\t\t\t\t\titem={rule}\n\t\t\t\t\t\t\t\t\t\t\tactions={rowActions}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t</ItemGroup>\n\t\t\t\t\t\t</Stack>\n\t\t\t\t\t)}\n\t\t\t\t</Stack>\n\t\t\t)}\n\t\t</ContentBlock>\n\t);\n}\n\nProductContractOverview.displayName = 'ProductContractOverview';\n","import { Button } from '../../../base/buttons';\nimport { ContentBlock } from '../../../base/display';\nimport { MetadataList } from '../../../base/metadata-list';\nimport { useStrings } from '../../../../lib/strings';\nimport { cn } from '../../../../lib/utils';\n\nimport { defaultProductDetailsCardStrings } from '../products.strings';\nimport type { ProductDetailsCardProps } from '../products.types';\nimport { ProductEmptyState } from '../partials/product-empty-state';\n\n/**\n * One main column region of the product editor.\n *\n * @deprecated An internal region of `ProductOverview`, which renders it from its `details` prop (still typed `ProductDetailsCardProps`). Pass the same props there and add custom content through the overview's slots. Kept exported for compatibility.\n */\nexport function ProductDetailsCard({\n\ttitle,\n\tdescription,\n\tmetadata = [],\n\tmedia,\n\tonEditDetails,\n\tactions,\n\theaderEnd,\n\tfooterSlot,\n\tempty,\n\tclassName,\n\tstrings: stringsProp,\n}: ProductDetailsCardProps) {\n\tconst strings = useStrings(defaultProductDetailsCardStrings, stringsProp);\n\tconst headerAction = onEditDetails ? (\n\t\t<Button type=\"button\" tone=\"secondary\" buttonStyle=\"ghost\" onClick={onEditDetails}>\n\t\t\t{strings.editLabel}\n\t\t</Button>\n\t) : undefined;\n\n\treturn (\n\t\t<ContentBlock\n\t\t\ttitle={title ?? strings.title}\n\t\t\tdescription={description === false ? undefined : description ?? strings.description}\n\t\t\tactions={actions}\n\t\t\theaderAction={headerAction}\n\t\t\theaderEnd={headerEnd}\n\t\t\tfooterSlot={footerSlot}\n\t\t\tclassName={cn('product-details-card--component w-full', className)}\n\t\t>\n\t\t\t{metadata.length === 0 ? (\n\t\t\t\tempty ?? <ProductEmptyState title={strings.emptyTitle} description={strings.emptyDescription} />\n\t\t\t) : (\n\t\t\t\t<div className=\"@container/product-details\">\n\t\t\t\t\t<div className={cn('grid min-w-0 grid-cols-1 gap-space-xl', media && '@xl/product-details:grid-cols-[12rem_minmax(0,1fr)]')}>\n\t\t\t\t\t\t{!!media && (\n\t\t\t\t\t\t\t<div className=\"product-details-card--media self-start overflow-hidden rounded-inner border border-border bg-muted/30\">\n\t\t\t\t\t\t\t\t{media}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t<MetadataList\n\t\t\t\t\t\t\tadaptTo=\"container\"\n\t\t\t\t\t\t\titems={metadata}\n\t\t\t\t\t\t\tcolumns={media ? 1 : 2}\n\t\t\t\t\t\t\tdensity=\"compact\"\n\t\t\t\t\t\t\tclassName=\"min-w-0 [&_.metadata-list--value]:break-words\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</ContentBlock>\n\t);\n}\n\nProductDetailsCard.displayName = 'ProductDetailsCard';\n","import { Eye, Pencil, Trash2 } from 'lucide-react';\n\nimport { useStrings } from '../../../../lib/strings';\nimport { cn } from '../../../../lib/utils';\n\nimport {\n\tdefaultProductOptionActionMenuStrings,\n} from '../products.strings';\nimport type {\n\tProductOptionActionMenuProps,\n\tProductOptionSummary,\n} from '../products.types';\nimport { ProductRowActions } from '../partials/product-actions';\n\n/**\n * Row menu for one product option.\n *\n * @deprecated An internal part of `ProductOptionsSummary` (and so of `ProductOverview`), which renders it for every option. Replace it there with `renderOptionActions`, composing the base `ActionMenu` if needed. Kept exported for compatibility.\n */\nexport function ProductOptionActionMenu({\n\toption,\n\tindex = 0,\n\tonSelectOption,\n\tonEditOption,\n\tonDeleteOption,\n\trenderOptionActions,\n\tmenuLabel,\n\tclassName,\n\tstrings: stringsProp,\n}: ProductOptionActionMenuProps) {\n\tconst strings = useStrings(defaultProductOptionActionMenuStrings, stringsProp);\n\tconst onSelect = onSelectOption ? () => onSelectOption(option) : undefined;\n\tconst onEdit = onEditOption ? () => onEditOption(option) : undefined;\n\tconst onDelete = onDeleteOption ? () => onDeleteOption(option) : undefined;\n\tconst hasActions = !!(onSelect || onEdit || onDelete || renderOptionActions);\n\n\tif (!hasActions) return null;\n\n\tif (renderOptionActions) {\n\t\treturn (\n\t\t\t<div className={cn('product-option-action-menu--component flex justify-end', className)}>\n\t\t\t\t{renderOptionActions(option, { index, onSelect, onEdit, onDelete })}\n\t\t\t</div>\n\t\t);\n\t}\n\n\treturn (\n\t\t<ProductRowActions<ProductOptionSummary>\n\t\t\titem={option}\n\t\t\tmenuLabel={menuLabel ?? strings.actionsLabel}\n\t\t\tclassName={cn('product-option-action-menu--component', className)}\n\t\t\tactions={[\n\t\t\t\t...(onSelect ? [{\n\t\t\t\t\tid: 'open',\n\t\t\t\t\tlabel: strings.viewLabel,\n\t\t\t\t\ticon: <Eye className=\"size-icon-md\" />,\n\t\t\t\t\tonClick: () => onSelect(),\n\t\t\t\t\ttone: 'secondary' as const, buttonStyle: 'ghost' as const,\n\t\t\t\t}] : []),\n\t\t\t\t...(onEdit ? [{\n\t\t\t\t\tid: 'edit',\n\t\t\t\t\tlabel: strings.editLabel,\n\t\t\t\t\ticon: <Pencil className=\"size-icon-md\" />,\n\t\t\t\t\tonClick: () => onEdit(),\n\t\t\t\t\ttone: 'secondary' as const, buttonStyle: 'ghost' as const,\n\t\t\t\t}] : []),\n\t\t\t\t...(onDelete ? [{\n\t\t\t\t\tid: 'delete',\n\t\t\t\t\tlabel: strings.deleteLabel,\n\t\t\t\t\ticon: <Trash2 className=\"size-icon-md\" />,\n\t\t\t\t\tonClick: () => onDelete(),\n\t\t\t\t\ttone: 'destructive' as const,\n\t\t\t\t}] : []),\n\t\t\t]}\n\t\t/>\n\t);\n}\n\nProductOptionActionMenu.displayName = 'ProductOptionActionMenu';\n","import { Pencil, Plus, Trash2 } from 'lucide-react';\n\nimport { Button } from '../../../base/buttons';\nimport { ContentBlock } from '../../../base/display';\nimport { ItemGroup } from '../../../base/item';\nimport { useStrings } from '../../../../lib/strings';\nimport { cn } from '../../../../lib/utils';\n\nimport { defaultProductOperationsCardStrings } from '../products.strings';\nimport type { ProductOperationsCardProps } from '../products.types';\nimport { ProductEmptyState } from '../partials/product-empty-state';\nimport { ProductRowActions } from '../partials/product-actions';\nimport { ProductOperationRow } from '../partials/product-rows';\n\n/**\n * One support rail region of the product editor.\n *\n * @deprecated An internal region of `ProductOverview`, which renders it from its `operations` prop (still typed `ProductOperationsCardProps`). Pass the same props there and add custom content through the overview's slots. Kept exported for compatibility.\n */\nexport function ProductOperationsCard({\n\titems = [],\n\tonCreateOperation,\n\tonSelectOperation,\n\tonEditOperation,\n\tonDeleteOperation,\n\trenderOperationActions,\n\tactions,\n\tfooterSlot,\n\trenderItem,\n\tempty,\n\tclassName,\n\tstrings: stringsProp,\n}: ProductOperationsCardProps) {\n\tconst strings = useStrings(defaultProductOperationsCardStrings, stringsProp);\n\tconst headerAction = onCreateOperation ? (\n\t\t<Button type=\"button\" tone=\"secondary\" buttonStyle=\"ghost\" onClick={onCreateOperation} icon={Plus}>\n\t\t\t{strings.createLabel}\n\t\t</Button>\n\t) : undefined;\n\n\treturn (\n\t\t<ContentBlock\n\t\t\ttitle={strings.title}\n\t\t\tdescription={strings.description}\n\t\t\tactions={actions}\n\t\t\theaderAction={headerAction}\n\t\t\tfooterSlot={footerSlot}\n\t\t\tclassName={cn('product-operations-card--component w-full', className)}\n\t\t>\n\t\t\t{items.length === 0 ? (\n\t\t\t\tempty ?? (\n\t\t\t\t\t<ProductEmptyState\n\t\t\t\t\t\ttitle={strings.emptyTitle}\n\t\t\t\t\t\tdescription={strings.emptyDescription}\n\t\t\t\t\t\taction={onCreateOperation ? (\n\t\t\t\t\t\t\t<Button tone=\"primary\" type=\"button\" onClick={onCreateOperation} icon={Plus}>\n\t\t\t\t\t\t\t\t{strings.createLabel}\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t) : undefined}\n\t\t\t\t\t/>\n\t\t\t\t)\n\t\t\t) : (\n\t\t\t\t<ItemGroup>\n\t\t\t\t\t{items.map((item, index) => {\n\t\t\t\t\t\tconst onSelect = onSelectOperation ? () => onSelectOperation(item) : undefined;\n\t\t\t\t\t\tconst onEdit = onEditOperation ? () => onEditOperation(item) : undefined;\n\t\t\t\t\t\tconst onDelete = onDeleteOperation ? () => onDeleteOperation(item) : undefined;\n\t\t\t\t\t\tconst operationActions = [\n\t\t\t\t\t\t\t...(onEdit ? [{\n\t\t\t\t\t\t\t\tid: 'edit',\n\t\t\t\t\t\t\t\tlabel: strings.editLabel,\n\t\t\t\t\t\t\t\ticon: <Pencil className=\"size-icon-md\" />,\n\t\t\t\t\t\t\t\tonClick: () => onEdit(),\n\t\t\t\t\t\t\t\ttone: 'secondary' as const, buttonStyle: 'ghost' as const,\n\t\t\t\t\t\t\t}] : []),\n\t\t\t\t\t\t\t...(onDelete ? [{\n\t\t\t\t\t\t\t\tid: 'delete',\n\t\t\t\t\t\t\t\tlabel: strings.deleteLabel,\n\t\t\t\t\t\t\t\ticon: <Trash2 className=\"size-icon-md\" />,\n\t\t\t\t\t\t\t\tonClick: () => onDelete(),\n\t\t\t\t\t\t\t\ttone: 'destructive' as const,\n\t\t\t\t\t\t\t}] : []),\n\t\t\t\t\t\t];\n\t\t\t\t\t\tconst rowActions = renderOperationActions\n\t\t\t\t\t\t\t? renderOperationActions(item, { index, onSelect, onEdit, onDelete })\n\t\t\t\t\t\t\t: <ProductRowActions item={item} actions={operationActions} menuLabel={strings.actionsLabel} />;\n\n\t\t\t\t\t\treturn renderItem ? (\n\t\t\t\t\t\t\t<div key={item.id}>{renderItem(item, index)}</div>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<ProductOperationRow\n\t\t\t\t\t\t\t\tkey={item.id}\n\t\t\t\t\t\t\t\titem={item}\n\t\t\t\t\t\t\t\tactionFallback={strings.actionLabel}\n\t\t\t\t\t\t\t\tonSelect={onSelect}\n\t\t\t\t\t\t\t\tactions={rowActions}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t);\n\t\t\t\t\t})}\n\t\t\t\t</ItemGroup>\n\t\t\t)}\n\t\t</ContentBlock>\n\t);\n}\n\nProductOperationsCard.displayName = 'ProductOperationsCard';\n","import {compositionClasses} from '../../../base/structure/composition.recipes';\nimport { ChevronDown, GripVertical, Plus, PlusCircle, Trash2, X } from 'lucide-react';\nimport { Fragment, useCallback, useMemo, useState, type ReactNode } from 'react';\n\nimport { Badge } from '../../../base/badge';\nimport { Button } from '../../../base/buttons';\nimport { ConfirmDialog, useOverlayVisibility } from '../../overlays';\nimport { interpolateString } from '../../../../lib/strings';\nimport { ContentBlock } from '../../../base/display';\nimport { FormField } from '../../../base/forms';\nimport { Input } from '../../../base/text-inputs';\nimport { Switch } from '../../../base/choice-inputs';\nimport { Stack } from '../../../base/structure';\nimport { Text } from '../../../typography';\nimport { useStrings } from '../../../../lib/strings';\nimport { cn } from '../../../../lib/utils';\nimport { fieldAffordanceRecipes } from '../../../../lib/field-affordance-recipes';\n\nimport {\n\tdefaultProductOptionsMatrixStrings,\n} from '../products.strings';\nimport type {\n\tProductOptionEditDraft,\n\tProductOptionGroup,\n\tProductOptionsMatrixProps,\n} from '../products.types';\nimport { ProductEmptyState } from '../partials/product-empty-state';\nimport { ProductRowActions } from '../partials/product-actions';\nimport { focusRecipes } from '../../../../lib/focus-recipes';\nimport { interactionRecipes } from '../../../../lib/interaction-recipes';\n\nfunction getPlainText(value: ReactNode): string {\n\tif (typeof value === 'string' || typeof value === 'number') return String(value);\n\treturn '';\n}\n\nfunction isScalarText(value: ReactNode): value is string | number | bigint {\n\treturn typeof value === 'string' || typeof value === 'number' || typeof value === 'bigint';\n}\n\nfunction getOptionEditLabel(prefix: string, option: ProductOptionGroup): string {\n\tconst optionName = getPlainText(option.name);\n\treturn optionName ? `${prefix}: ${optionName}` : prefix;\n}\n\nfunction getOptionDraft(option: ProductOptionGroup): ProductOptionEditDraft {\n\treturn {\n\t\tname: getPlainText(option.name),\n\t\tvalues: (option.values ?? []).map((value) => ({\n\t\t\t...value,\n\t\t\tlabel: getPlainText(value.label),\n\t\t})),\n\t};\n}\n\nexport function ProductOptionsMatrix({\n\toptionGroups = [],\n\tsurface = 'card',\n\tcollapsedOptionIds,\n\tdefaultCollapsedOptionIds = [],\n\tonCollapsedOptionIdsChange,\n\teditingOptionId,\n\tdefaultEditingOptionId,\n\tonEditingOptionIdChange,\n\tonCreateOption,\n\tonEditOption,\n\tonDeleteOption,\n\tconfirmDelete,\n\tonAddValue,\n\tonDeleteValue,\n\tonOptionNameChange,\n\tonValueLabelChange,\n\tonDoneEditingOption,\n\tonSaveEditingOption,\n\tonCancelEditingOption,\n\tonToggleUsedForVariants,\n\trenderOptionActions,\n\trenderValue,\n\tshowHeader: showHeaderProp,\n\tshowCollapseControls = true,\n\tshowInlineActions = true,\n\tshowVariantToggle = true,\n\tactions,\n\theaderEnd,\n\tfooterSlot,\n\tempty,\n\tclassName,\n\tstrings: stringsProp,\n}: ProductOptionsMatrixProps) {\n\tconst strings = useStrings(defaultProductOptionsMatrixStrings, stringsProp);\n\tconst isCollapsedControlled = collapsedOptionIds !== undefined;\n\tconst [internalCollapsedOptionIds, setInternalCollapsedOptionIds] = useState(defaultCollapsedOptionIds);\n\tconst resolvedCollapsedOptionIds = isCollapsedControlled ? collapsedOptionIds : internalCollapsedOptionIds;\n\tconst collapsedOptionIdSet = useMemo(() => new Set(resolvedCollapsedOptionIds), [resolvedCollapsedOptionIds]);\n\tconst supportsInlineEditing =\n\t\teditingOptionId !== undefined ||\n\t\tdefaultEditingOptionId !== undefined ||\n\t\t!!onEditingOptionIdChange ||\n\t\t!!onOptionNameChange ||\n\t\t!!onValueLabelChange ||\n\t\t!!onDoneEditingOption ||\n\t\t!!onSaveEditingOption ||\n\t\t!!onCancelEditingOption;\n\tconst isEditingControlled = editingOptionId !== undefined;\n\tconst [internalEditingOptionId, setInternalEditingOptionId] = useState<string | null>(defaultEditingOptionId ?? null);\n\tconst [draftByOptionId, setDraftByOptionId] = useState<Record<string, ProductOptionEditDraft>>({});\n\tconst resolvedEditingOptionId = supportsInlineEditing\n\t\t? (isEditingControlled ? editingOptionId : internalEditingOptionId)\n\t\t: null;\n\tconst hasGroups = optionGroups.length > 0;\n\tconst showPanelHeader = surface === 'embedded' && showHeaderProp !== false;\n\tconst showCreateRow = hasGroups && !!onCreateOption;\n\n\tconst updateCollapsedOptionIds = useCallback(\n\t\t(nextIds: string[]) => {\n\t\t\tif (!isCollapsedControlled) {\n\t\t\t\tsetInternalCollapsedOptionIds(nextIds);\n\t\t\t}\n\t\t\tonCollapsedOptionIdsChange?.(\n\t\t\t\tnextIds,\n\t\t\t\toptionGroups.filter((option) => nextIds.includes(option.id)),\n\t\t\t);\n\t\t},\n\t\t[isCollapsedControlled, onCollapsedOptionIdsChange, optionGroups],\n\t);\n\n\tconst toggleCollapsed = useCallback(\n\t\t(option: ProductOptionGroup) => {\n\t\t\tconst nextIds = collapsedOptionIdSet.has(option.id)\n\t\t\t\t? resolvedCollapsedOptionIds.filter((id) => id !== option.id)\n\t\t\t\t: [...resolvedCollapsedOptionIds, option.id];\n\t\t\tupdateCollapsedOptionIds(nextIds);\n\t\t},\n\t\t[collapsedOptionIdSet, resolvedCollapsedOptionIds, updateCollapsedOptionIds],\n\t);\n\n\tconst updateEditingOptionId = useCallback(\n\t\t(nextId: string | null, option?: ProductOptionGroup) => {\n\t\t\tif (!supportsInlineEditing) return;\n\t\t\tif (!isEditingControlled) {\n\t\t\t\tsetInternalEditingOptionId(nextId);\n\t\t\t}\n\t\t\tonEditingOptionIdChange?.(nextId, option);\n\t\t},\n\t\t[isEditingControlled, onEditingOptionIdChange, supportsInlineEditing],\n\t);\n\n\tconst startEditing = useCallback(\n\t\t(option: ProductOptionGroup) => {\n\t\t\tsetDraftByOptionId((current) => ({\n\t\t\t\t...current,\n\t\t\t\t[option.id]: getOptionDraft(option),\n\t\t\t}));\n\t\t\tupdateEditingOptionId(option.id, option);\n\t\t\tonEditOption?.(option);\n\t\t},\n\t\t[onEditOption, updateEditingOptionId],\n\t);\n\n\tconst getResolvedDraft = useCallback(\n\t\t(option: ProductOptionGroup) => draftByOptionId[option.id] ?? getOptionDraft(option),\n\t\t[draftByOptionId],\n\t);\n\n\tconst updateDraft = useCallback(\n\t\t(option: ProductOptionGroup, updater: (draft: ProductOptionEditDraft) => ProductOptionEditDraft) => {\n\t\t\tsetDraftByOptionId((current) => ({\n\t\t\t\t...current,\n\t\t\t\t[option.id]: updater(current[option.id] ?? getOptionDraft(option)),\n\t\t\t}));\n\t\t},\n\t\t[],\n\t);\n\n\tconst cancelEditing = useCallback(\n\t\t(option: ProductOptionGroup) => {\n\t\t\tconst draft = getResolvedDraft(option);\n\t\t\tsetDraftByOptionId((current) => {\n\t\t\t\tconst { [option.id]: _removed, ...rest } = current;\n\t\t\t\treturn rest;\n\t\t\t});\n\t\t\tupdateEditingOptionId(null, option);\n\t\t\tonCancelEditingOption?.(option, draft);\n\t\t},\n\t\t[getResolvedDraft, onCancelEditingOption, updateEditingOptionId],\n\t);\n\n\t/*\n\t * The per-value trash button only edits a local draft — nothing is destroyed\n\t * until the edit is saved, and Cancel already abandons it. The destructive\n\t * moment is here, where the diff emits `onDeleteValue` once per dropped\n\t * value, so the confirmation belongs to the save and asks once for all of\n\t * them rather than once each.\n\t */\n\tconst commitEditing = useCallback(\n\t\t(option: ProductOptionGroup) => {\n\t\t\tconst draft = getResolvedDraft(option);\n\t\t\tconst originalValues = option.values ?? [];\n\t\t\tconst originalValueIds = new Set(originalValues.map((value) => value.id));\n\t\t\tconst draftValueIds = new Set(draft.values.map((value) => value.id));\n\n\t\t\tonSaveEditingOption?.(option, draft);\n\t\t\tonOptionNameChange?.(option, draft.name);\n\t\t\toriginalValues.forEach((value) => {\n\t\t\t\tconst draftValue = draft.values.find((item) => item.id === value.id);\n\t\t\t\tif (draftValue && getPlainText(value.label) !== getPlainText(draftValue.label)) {\n\t\t\t\t\tonValueLabelChange?.(option, value, getPlainText(draftValue.label));\n\t\t\t\t}\n\t\t\t});\n\t\t\tdraft.values.forEach((value) => {\n\t\t\t\tif (!originalValueIds.has(value.id)) {\n\t\t\t\t\tonAddValue?.(option);\n\t\t\t\t}\n\t\t\t});\n\t\t\toriginalValues.forEach((value) => {\n\t\t\t\tif (!draftValueIds.has(value.id)) {\n\t\t\t\t\tonDeleteValue?.(option, value);\n\t\t\t\t}\n\t\t\t});\n\t\t\tsetDraftByOptionId((current) => {\n\t\t\t\tconst { [option.id]: _removed, ...rest } = current;\n\t\t\t\treturn rest;\n\t\t\t});\n\t\t\tupdateEditingOptionId(null, option);\n\t\t\tonDoneEditingOption?.(option);\n\t\t},\n\t\t[getResolvedDraft, onAddValue, onDeleteValue, onDoneEditingOption, onOptionNameChange, onSaveEditingOption, onValueLabelChange, updateEditingOptionId],\n\t);\n\n\tconst removeValuesConfirm = useOverlayVisibility();\n\tconst [pendingSave, setPendingSave] = useState<{ option: ProductOptionGroup; removed: number } | null>(null);\n\n\tconst saveEditing = useCallback(\n\t\t(option: ProductOptionGroup) => {\n\t\t\tconst draft = getResolvedDraft(option);\n\t\t\tconst draftValueIds = new Set(draft.values.map((value) => value.id));\n\t\t\tconst removed = (option.values ?? []).filter((value) => !draftValueIds.has(value.id)).length;\n\n\t\t\tif (confirmDelete === false || removed === 0) {\n\t\t\t\tcommitEditing(option);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tsetPendingSave({ option, removed });\n\t\t\tremoveValuesConfirm.show();\n\t\t},\n\t\t[commitEditing, confirmDelete, getResolvedDraft, removeValuesConfirm],\n\t);\n\n\tconst deleteOption = useCallback(\n\t\t(option: ProductOptionGroup) => {\n\t\t\tif (resolvedEditingOptionId === option.id) {\n\t\t\t\tsetDraftByOptionId((current) => {\n\t\t\t\t\tconst { [option.id]: _removed, ...rest } = current;\n\t\t\t\t\treturn rest;\n\t\t\t\t});\n\t\t\t\tupdateEditingOptionId(null, option);\n\t\t\t}\n\t\t\tonDeleteOption?.(option);\n\t\t},\n\t\t[onDeleteOption, resolvedEditingOptionId, updateEditingOptionId],\n\t);\n\n\t/*\n\t * Deleting an option group silently takes its values — and every variant\n\t * built from them — with it. That is too much to lose to a single click on\n\t * an overflow-menu item, so it asks first. `confirmDelete={false}` opts out\n\t * for apps that already confirm upstream.\n\t */\n\tconst deleteOptionConfirm = useOverlayVisibility();\n\tconst [pendingDeleteOption, setPendingDeleteOption] = useState<ProductOptionGroup | null>(null);\n\n\tconst requestDeleteOption = useCallback(\n\t\t(option: ProductOptionGroup) => {\n\t\t\tif (confirmDelete === false) {\n\t\t\t\tdeleteOption(option);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tsetPendingDeleteOption(option);\n\t\t\tdeleteOptionConfirm.show();\n\t\t},\n\t\t[confirmDelete, deleteOption, deleteOptionConfirm],\n\t);\n\n\tconst headerAction = onCreateOption ? (\n\t\t<Button type=\"button\" tone=\"neutral\" onClick={onCreateOption} icon={Plus}>\n\t\t\t{strings.createLabel}\n\t\t</Button>\n\t) : undefined;\n\n\tconst panelHeader = showPanelHeader ? (\n\t\t<div className=\"product-options-matrix--panel-header p-surface\">\n\t\t<Stack direction=\"horizontal\" gap=\"md\" justify=\"between\">\n\t\t\t<Text type=\"inherit\" weight=\"semibold\">{strings.title}</Text>\n\t\t\t{headerAction}\n\t\t</Stack>\n\t\t</div>\n\t) : null;\n\n\tconst content = (\n\t\t<div className=\"product-options-matrix--body min-w-0\">\n\t\t\t<div className=\"product-options-matrix--panel overflow-hidden rounded-radius border border-border bg-background text-foreground\">\n\t\t\t\t{panelHeader}\n\n\t\t\t\t{!hasGroups ? (\n\t\t\t\t\t<div className={cn(showPanelHeader && 'border-t border-border/60')}>\n\t\t\t\t\t\t{empty ?? (\n\t\t\t\t\t\t\t<ProductEmptyState\n\t\t\t\t\t\t\t\ttitle={strings.emptyTitle}\n\t\t\t\t\t\t\t\tdescription={strings.emptyDescription}\n\t\t\t\t\t\t\t\taction={onCreateOption && !showPanelHeader ? (\n\t\t\t\t\t\t\t\t\t<Button tone=\"primary\" type=\"button\" onClick={onCreateOption} icon={Plus}>\n\t\t\t\t\t\t\t\t\t\t{strings.createLabel}\n\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t) : undefined}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\t\t\t\t) : (\n\t\t\t\t\t<div className={cn('product-options-matrix--list', showPanelHeader && 'border-t border-border/60')}>\n\t\t\t\t\t\t{optionGroups.map((option, optionIndex) => {\n\t\t\t\t\t\t\tconst values = option.values ?? [];\n\t\t\t\t\t\t\tconst isCollapsed = collapsedOptionIdSet.has(option.id);\n\t\t\t\t\t\t\tconst isEditing = resolvedEditingOptionId === option.id;\n\t\t\t\t\t\t\tconst canEdit = !!onEditOption || supportsInlineEditing;\n\t\t\t\t\t\t\tconst canDelete = !!onDeleteOption;\n\t\t\t\t\t\t\tconst canAddValue = !!onAddValue;\n\t\t\t\t\t\t\tconst optionDraft = getResolvedDraft(option);\n\t\t\t\t\t\t\tconst renderedActions = renderOptionActions?.(option, {\n\t\t\t\t\t\t\t\tindex: optionIndex,\n\t\t\t\t\t\t\t\tonEdit: canEdit ? () => startEditing(option) : undefined,\n\t\t\t\t\t\t\t\tonDelete: onDeleteOption ? () => requestDeleteOption(option) : undefined,\n\t\t\t\t\t\t\t\tonAddValue: onAddValue ? () => onAddValue(option) : undefined,\n\t\t\t\t\t\t\t\tonToggleCollapsed: () => toggleCollapsed(option),\n\t\t\t\t\t\t\t\tcollapsed: isCollapsed,\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\tconst menuActions = [\n\t\t\t\t\t\t\t\t...(canAddValue ? [{\n\t\t\t\t\t\t\t\t\tid: 'add-value',\n\t\t\t\t\t\t\t\t\tlabel: strings.addValueLabel,\n\t\t\t\t\t\t\t\t\ticon: <Plus className=\"size-icon-md\" />,\n\t\t\t\t\t\t\t\t\tonClick: () => onAddValue?.(option),\n\t\t\t\t\t\t\t\t\ttone: 'secondary' as const, buttonStyle: 'ghost' as const,\n\t\t\t\t\t\t\t\t}] : []),\n\t\t\t\t\t\t\t\t...(canDelete ? [{\n\t\t\t\t\t\t\t\t\tid: 'delete',\n\t\t\t\t\t\t\t\t\tlabel: strings.deleteLabel,\n\t\t\t\t\t\t\t\t\ticon: <Trash2 className=\"size-icon-md\" />,\n\t\t\t\t\t\t\t\t\tonClick: () => requestDeleteOption(option),\n\t\t\t\t\t\t\t\t\ttone: 'destructive' as const,\n\t\t\t\t\t\t\t\t}] : []),\n\t\t\t\t\t\t\t];\n\n\t\t\t\t\t\t\tconst defaultActions = showInlineActions ? (\n\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t{!!canEdit && (\n\t\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\ttone=\"secondary\"\n\t\t\t\t\t\t\t\t\t\t\tbuttonStyle=\"ghost\"\n\t\t\t\t\t\t\t\t\t\t\tonClick={() => startEditing(option)}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t{strings.editLabel}\n\t\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t<ProductRowActions\n\t\t\t\t\t\t\t\t\t\titem={option}\n\t\t\t\t\t\t\t\t\t\tactions={menuActions}\n\t\t\t\t\t\t\t\t\t\tmenuLabel={strings.actionsLabel}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t\t) : null;\n\t\t\t\t\t\t\tconst resolvedActions = renderedActions !== undefined ? renderedActions : defaultActions;\n\n\t\t\t\t\t\t\tif (isEditing) {\n\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\tkey={option.id}\n\t\t\t\t\t\t\t\t\t\tclassName=\"product-options-matrix--item product-options-matrix--item-editing border-b border-border/60 p-surface last:border-b-0\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<div className=\"grid min-w-0 grid-cols-[auto_minmax(0,1fr)] gap-x-space-md gap-y-space-lg\">\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"product-options-matrix--drag-handle self-start flex size-icon-lg items-center justify-center text-muted-foreground\" aria-hidden=\"true\">\n\t\t\t\t\t\t\t\t\t\t\t\t<GripVertical className=\"size-icon-sm\" />\n\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t\t<Stack gap=\"lg\" className=\"product-options-matrix--editor\">\n\t\t\t\t\t\t\t\t\t\t\t\t<FormField\n\t\t\t\t\t\t\t\t\t\t\t\t\tlabel={strings.optionNameLabel}\n\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"product-options-matrix--editor-field\"\n\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Input\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tvalue={optionDraft.name}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tonChange={(event) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tconst nextName = event.currentTarget.value;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tupdateDraft(option, (draft) => ({\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t...draft,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tname: nextName,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}));\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\taria-label={strings.optionNameLabel}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"bg-background\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\t</FormField>\n\n\t\t\t\t\t\t\t\t\t\t\t\t<Stack gap=\"sm\" className=\"product-options-matrix--editor-field\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Text type=\"inherit\" weight=\"medium\">{strings.optionValuesLabel}</Text>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Stack gap=\"xs\" className=\"product-options-matrix--editor-values\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{optionDraft.values.length === 0 && (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Text size=\"xs\" type=\"secondary\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{strings.noValuesLabel}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{optionDraft.values.map((value) => (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tkey={value.id}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"product-options-matrix--editor-value grid min-w-0 grid-cols-[auto_minmax(0,1fr)_auto] items-center gap-space-sm\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"flex size-icon-lg items-center justify-center text-muted-foreground\" aria-hidden=\"true\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<GripVertical className=\"size-icon-sm\" />\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Input\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvalue={getPlainText(value.label)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tonChange={(event) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tconst nextLabel = event.currentTarget.value;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tupdateDraft(option, (draft) => ({\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t...draft,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvalues: draft.values.map((item) => (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\titem.id === value.id\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? { ...item, label: nextLabel }\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: item\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t)),\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}));\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\taria-label={`${strings.optionValuesLabel}: ${getPlainText(value.label)}`}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"bg-background\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsize=\"sm\" iconOnly\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttone=\"secondary\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tbuttonStyle=\"ghost\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={() => updateDraft(option, (draft) => ({\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t...draft,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvalues: draft.values.filter((item) => item.id !== value.id),\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}))}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\taria-label={strings.deleteValueLabel}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"text-muted-foreground hover:text-destructive\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Trash2 className=\"size-icon-sm\" aria-hidden=\"true\" />\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Text tag=\"span\" size=\"pxs\" className=\"sr-only\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{strings.deleteValueLabel}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div className=\"product-options-matrix--editor-add-value grid min-w-0 grid-cols-[auto_minmax(0,1fr)_auto] items-center gap-space-sm\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"size-icon-lg\" aria-hidden=\"true\" />\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttone=\"secondary\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tbuttonStyle=\"outline\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={() => updateDraft(option, (draft) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tconst nextIndex = draft.values.length + 1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t...draft,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvalues: [\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t...draft.values,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{ id: `${option.id}-draft-value-${nextIndex}`, label: '' },\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfullWidth\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"justify-start text-muted-foreground\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{strings.addAnotherValueLabel}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"size-action-sm\" aria-hidden=\"true\" />\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t\t\t\t\t\t\t</Stack>\n\n\t\t\t\t\t\t\t\t\t\t\t<Stack direction=\"horizontal\" gap=\"md\" justify=\"between\" wrap={false} className=\"product-options-matrix--editor-actions\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{!!onDeleteOption && (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttone=\"destructive\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tbuttonStyle=\"outline\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={() => requestDeleteOption(option)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{strings.deleteLabel}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t<Stack direction=\"horizontal\" gap=\"sm\" justify=\"end\" wrap={false}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Button type=\"button\" tone=\"secondary\" buttonStyle=\"ghost\" onClick={() => cancelEditing(option)}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{strings.cancelLabel}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Button type=\"button\" tone=\"neutral\" onClick={() => saveEditing(option)}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{strings.saveLabel ?? strings.doneLabel}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tconst optionSummary = (\n\t\t\t\t\t\t\t\t<Stack render={<span />} gap=\"sm\">\n\t\t\t\t\t\t\t\t\t<Stack render={<span />} direction=\"horizontal\" gap=\"sm\">\n\t\t\t\t\t\t\t\t\t\t<Text type=\"inherit\" tag=\"span\" weight=\"semibold\" className=\"min-w-0 whitespace-normal break-words\">\n\t\t\t\t\t\t\t\t\t\t\t{option.name}\n\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t\t{option.badge}\n\t\t\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t\t\t\t{!!option.description && (\n\t\t\t\t\t\t\t\t\t\t<Text tag=\"span\" size=\"xs\" type=\"secondary\" className=\"max-w-prose\">\n\t\t\t\t\t\t\t\t\t\t\t{option.description}\n\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t{!isCollapsed && (\n\t\t\t\t\t\t\t\t\t\t<Stack render={<span />} gap=\"sm\" className=\"product-options-matrix--values\">\n\t\t\t\t\t\t\t\t\t\t\t{values.length === 0 ? (\n\t\t\t\t\t\t\t\t\t\t\t\t<Text tag=\"span\" size=\"xs\" type=\"secondary\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t{strings.noValuesLabel}\n\t\t\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"flex flex-wrap gap-space-xs\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t{values.map((value, valueIndex) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tconst deleteValue = onDeleteValue ? () => onDeleteValue(option, value) : undefined;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tconst renderedValue = renderValue?.(value, {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\toption,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\toptionIndex,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvalueIndex,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tonDelete: deleteValue,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tif (renderedValue) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\treturn <Fragment key={value.id}>{renderedValue}</Fragment>;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Badge\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tkey={value.id}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttone=\"neutral\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName={cn('product-options-matrix--value', value.disabled && 'opacity-50')}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{isScalarText(value.label) ? (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Text type=\"inherit\" tag=\"span\" size=\"inherit\" className=\"min-w-0 whitespace-normal break-words\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{value.label}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvalue.label\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{value.badge}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{!!deleteValue && showInlineActions && (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={deleteValue}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\taria-label={strings.deleteValueLabel}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t// The badge clips its label row, so the focus halo is drawn inside.\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName={cn(fieldAffordanceRecipes.target, fieldAffordanceRecipes.focus, focusRecipes.inset, fieldAffordanceRecipes.clear, 'hover:text-destructive')}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<X className={fieldAffordanceRecipes.icon} aria-hidden=\"true\" />\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Text tag=\"span\" size=\"pxs\" className=\"sr-only\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{strings.deleteValueLabel}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Badge>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\tkey={option.id}\n\t\t\t\t\t\t\t\t\tclassName=\"product-options-matrix--item border-b border-border/60 last:border-b-0\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<div className=\"grid min-w-0 grid-cols-[auto_minmax(0,1fr)] items-center gap-x-space-md gap-y-space-md p-surface @2xl/product-options-matrix:grid-cols-[auto_minmax(0,1fr)_auto]\">\n\t\t\t\t\t\t\t\t\t\t{showCollapseControls ? (\n\t\t\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\t\tsize=\"sm\" iconOnly\n\t\t\t\t\t\t\t\t\t\t\t\ttone=\"secondary\"\n\t\t\t\t\t\t\t\t\t\t\t\tbuttonStyle=\"ghost\"\n\t\t\t\t\t\t\t\t\t\t\t\tonClick={() => toggleCollapsed(option)}\n\t\t\t\t\t\t\t\t\t\t\t\taria-expanded={!isCollapsed}\n\t\t\t\t\t\t\t\t\t\t\t\taria-label={isCollapsed ? strings.expandOptionLabel : strings.collapseOptionLabel}\n\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"product-options-matrix--collapse-trigger mt-space-2xs shrink-0 text-muted-foreground\"\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t<ChevronDown className={cn('size-icon-sm transition-transform', isCollapsed && '-rotate-90')} aria-hidden=\"true\" />\n\t\t\t\t\t\t\t\t\t\t\t\t<Text tag=\"span\" size=\"pxs\" className=\"sr-only\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t{isCollapsed ? strings.expandOptionLabel : strings.collapseOptionLabel}\n\t\t\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"product-options-matrix--drag-handle flex size-icon-lg items-center justify-center text-muted-foreground\" aria-hidden=\"true\">\n\t\t\t\t\t\t\t\t\t\t\t\t<GripVertical className=\"size-icon-sm\" />\n\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t\t\t\t\t<div className=\"product-options-matrix--item-main min-w-0\">\n\t\t\t\t\t\t\t\t\t\t\t{canEdit && !showInlineActions ? (\n\t\t\t\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={() => startEditing(option)}\n\t\t\t\t\t\t\t\t\t\t\t\t\taria-label={getOptionEditLabel(strings.editLabel, option)}\n\t\t\t\t\t\t\t\t\t\t\t\t\tclassName={`product-options-matrix--edit-summary ${interactionRecipes.nativeButtonReset} block w-full cursor-pointer whitespace-normal rounded-inner text-start text-inherit outline-none ${focusRecipes.edge}`}\n\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t{optionSummary}\n\t\t\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t\t\t) : optionSummary}\n\t\t\t\t\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t\t\t\t\t{(showVariantToggle || !!resolvedActions) && (\n\t\t\t\t\t\t\t\t\t\t\t<div className={cn('product-options-matrix--item-actions col-start-2 flex min-w-fit items-center justify-start @2xl/product-options-matrix:justify-end lg:col-start-auto', compositionClasses.commands)}>\n\t\t\t\t\t\t\t\t\t\t\t\t{!!onToggleUsedForVariants && showVariantToggle && (\n\t\t\t\t\t\t\t\t\t\t\t\t\t<div className=\"inline-flex items-center gap-space-sm\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttag=\"span\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tid={`product-option-${option.id}-variant-toggle-label`}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsize=\"pxs\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"secondary\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tweight=\"medium\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{strings.useForVariantsLabel}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Switch\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tchecked={!!option.usedForVariants}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tonValueChange={(checked) => onToggleUsedForVariants(option, checked)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\taria-labelledby={`product-option-${option.id}-variant-toggle-label`}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t\t{resolvedActions}\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t})}\n\t\t\t\t\t\t{!!showCreateRow && (\n\t\t\t\t\t\t\t<div className=\"product-options-matrix--create-row border-t border-border/60 p-surface-xs\">\n\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\ttone=\"secondary\"\n\t\t\t\t\t\t\t\t\tbuttonStyle=\"ghost\"\n\t\t\t\t\t\t\t\t\tonClick={onCreateOption}\n\t\t\t\t\t\t\t\t\ticon={PlusCircle}\n\t\t\t\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t\t\t\tfullWidth\n\t\t\t\t\t\t\t\t\tclassName=\"justify-start text-foreground\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{strings.addAnotherOptionLabel}\n\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t\t{!!(confirmDelete !== false && pendingSave) && (\n\t\t\t\t<ConfirmDialog\n\t\t\t\t\t{...removeValuesConfirm.overlayProps}\n\t\t\t\t\tdestructive\n\t\t\t\t\ttitle={strings.confirmRemoveValuesTitle}\n\t\t\t\t\tdescription={interpolateString(strings.confirmRemoveValuesDescription, {\n\t\t\t\t\t\tcount: pendingSave.removed,\n\t\t\t\t\t})}\n\t\t\t\t\tstrings={{ confirm: strings.confirmRemoveValuesLabel }}\n\t\t\t\t\tonConfirm={() => commitEditing(pendingSave.option)}\n\t\t\t\t/>\n\t\t\t)}\n\t\t\t{!!(confirmDelete !== false && onDeleteOption) && (\n\t\t\t\t<ConfirmDialog\n\t\t\t\t\t{...deleteOptionConfirm.overlayProps}\n\t\t\t\t\tdestructive\n\t\t\t\t\ttitle={strings.confirmDeleteOptionTitle}\n\t\t\t\t\tdescription={strings.confirmDeleteOptionDescription}\n\t\t\t\t\tstrings={{ confirm: strings.deleteLabel }}\n\t\t\t\t\tonConfirm={() => {\n\t\t\t\t\t\tif (pendingDeleteOption) deleteOption(pendingDeleteOption);\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t)}\n\t\t</div>\n\t);\n\n\tif (surface === 'embedded') {\n\t\treturn (\n\t\t\t<section\n\t\t\t\taria-label={strings.title}\n\t\t\t\tclassName={cn('product-options-matrix--component @container/product-options-matrix min-w-0', className)}\n\t\t\t>\n\t\t\t\t{content}\n\t\t\t</section>\n\t\t);\n\t}\n\n\treturn (\n\t\t<ContentBlock\n\t\t\ttitle={strings.title}\n\t\t\tdescription={strings.description}\n\t\t\tactions={actions}\n\t\t\theaderAction={headerAction}\n\t\t\theaderEnd={headerEnd}\n\t\t\tfooterSlot={footerSlot}\n\t\t\tclassName={cn('product-options-matrix--component @container/product-options-matrix w-full', className)}\n\t\t>\n\t\t\t{content}\n\t\t</ContentBlock>\n\t);\n}\n\nProductOptionsMatrix.displayName = 'ProductOptionsMatrix';\n","import { Plus, SlidersHorizontal } from 'lucide-react';\n\nimport { Button } from '../../../base/buttons';\nimport { ContentBlock } from '../../../base/display';\nimport { ItemGroup } from '../../../base/item';\nimport { useStrings } from '../../../../lib/strings';\nimport { cn } from '../../../../lib/utils';\n\nimport { defaultProductOptionsSummaryStrings } from '../products.strings';\nimport type { ProductOptionsSummaryProps } from '../products.types';\nimport { ProductEmptyState } from '../partials/product-empty-state';\nimport { ProductSummaryRow } from '../partials/product-rows';\nimport { ProductOptionActionMenu } from './product-option-action-menu';\n\n/**\n * One main column region of the product editor.\n *\n * @deprecated An internal region of `ProductOverview`, which renders it from its `options` prop (still typed `ProductOptionsSummaryProps`). Pass the same props there and add custom content through the overview's slots. Kept exported for compatibility.\n */\nexport function ProductOptionsSummary({\n\toptions = [],\n\tonManageOptions,\n\tonCreateOption,\n\tonSelectOption,\n\tonEditOption,\n\tonDeleteOption,\n\trenderOptionActions,\n\tactions,\n\tfooterSlot,\n\trenderOption,\n\tempty,\n\tclassName,\n\tstrings: stringsProp,\n}: ProductOptionsSummaryProps) {\n\tconst strings = useStrings(defaultProductOptionsSummaryStrings, stringsProp);\n\tconst hasOptionActions = !!(\n\t\tonSelectOption ||\n\t\tonEditOption ||\n\t\tonDeleteOption ||\n\t\trenderOptionActions\n\t);\n\tconst cardActions = [\n\t\t...(actions ?? []),\n\t\t...(onCreateOption && onManageOptions ? [{\n\t\t\tid: 'manage-options',\n\t\t\tlabel: strings.manageLabel,\n\t\t\ticon: <SlidersHorizontal className=\"size-icon-md\" />,\n\t\t\tonClick: onManageOptions,\n\t\t}] : []),\n\t];\n\tconst headerAction = onCreateOption || onManageOptions ? (\n\t\t<Button\n\t\t\ttype=\"button\"\n\t\t\ttone=\"secondary\"\n\t\t\tbuttonStyle=\"ghost\"\n\t\t\tonClick={onCreateOption ?? onManageOptions}\n\t\t\ticon={onCreateOption ? Plus : undefined}\n\t\t>\n\t\t\t{onCreateOption ? strings.createLabel : strings.manageLabel}\n\t\t</Button>\n\t) : undefined;\n\n\treturn (\n\t\t<ContentBlock\n\t\t\ttitle={strings.title}\n\t\t\tdescription={strings.description}\n\t\t\tactions={cardActions.length > 0 ? cardActions : undefined}\n\t\t\theaderAction={headerAction}\n\t\t\tfooterSlot={footerSlot}\n\t\t\tclassName={cn('product-options-summary--component w-full', className)}\n\t\t>\n\t\t\t{options.length === 0 ? (\n\t\t\t\tempty ?? (\n\t\t\t\t\t<ProductEmptyState\n\t\t\t\t\t\ttitle={strings.emptyTitle}\n\t\t\t\t\t\tdescription={strings.emptyDescription}\n\t\t\t\t\t\taction={onCreateOption ? (\n\t\t\t\t\t\t\t<Button tone=\"primary\" type=\"button\" onClick={onCreateOption} icon={Plus}>\n\t\t\t\t\t\t\t\t{strings.createLabel}\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t) : undefined}\n\t\t\t\t\t/>\n\t\t\t\t)\n\t\t\t) : (\n\t\t\t\t<ItemGroup>\n\t\t\t\t\t{options.map((option, index) => (\n\t\t\t\t\t\t(() => {\n\t\t\t\t\t\t\tconst rowActions = hasOptionActions ? (\n\t\t\t\t\t\t\t\t<ProductOptionActionMenu\n\t\t\t\t\t\t\t\t\toption={option}\n\t\t\t\t\t\t\t\t\tindex={index}\n\t\t\t\t\t\t\t\t\tonSelectOption={onSelectOption}\n\t\t\t\t\t\t\t\t\tonEditOption={onEditOption}\n\t\t\t\t\t\t\t\t\tonDeleteOption={onDeleteOption}\n\t\t\t\t\t\t\t\t\trenderOptionActions={renderOptionActions}\n\t\t\t\t\t\t\t\t\tmenuLabel={strings.actionsLabel}\n\t\t\t\t\t\t\t\t\tstrings={{\n\t\t\t\t\t\t\t\t\t\tviewLabel: strings.viewLabel,\n\t\t\t\t\t\t\t\t\t\teditLabel: strings.editLabel,\n\t\t\t\t\t\t\t\t\t\tdeleteLabel: strings.deleteLabel,\n\t\t\t\t\t\t\t\t\t\tactionsLabel: strings.actionsLabel,\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t) : undefined;\n\n\t\t\t\t\t\t\treturn renderOption ? (\n\t\t\t\t\t\t\t\t<div key={option.id}>{renderOption(option, index)}</div>\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<ProductSummaryRow\n\t\t\t\t\t\t\t\t\tkey={option.id}\n\t\t\t\t\t\t\t\t\titem={option}\n\t\t\t\t\t\t\t\t\tactions={rowActions}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t})()\n\t\t\t\t\t))}\n\t\t\t\t</ItemGroup>\n\t\t\t)}\n\t\t</ContentBlock>\n\t);\n}\n\nProductOptionsSummary.displayName = 'ProductOptionsSummary';\n","import { Pencil, Plus, Trash2 } from 'lucide-react';\n\nimport { Button } from '../../../base/buttons';\nimport { ContentBlock } from '../../../base/display';\nimport { ItemGroup } from '../../../base/item';\nimport { useStrings } from '../../../../lib/strings';\nimport { cn } from '../../../../lib/utils';\n\nimport { defaultProductPoliciesCardStrings } from '../products.strings';\nimport type { ProductPoliciesCardProps } from '../products.types';\nimport { ProductEmptyState } from '../partials/product-empty-state';\nimport { ProductRowActions } from '../partials/product-actions';\nimport { ProductSummaryRow } from '../partials/product-rows';\n\n/**\n * One support rail region of the product editor.\n *\n * @deprecated An internal region of `ProductOverview`, which renders it from its `policies` prop (still typed `ProductPoliciesCardProps`). Pass the same props there and add custom content through the overview's slots. Kept exported for compatibility.\n */\nexport function ProductPoliciesCard({\n\tpolicies = [],\n\tonCreatePolicy,\n\tonSelectPolicy,\n\tonEditPolicy,\n\tonDeletePolicy,\n\trenderPolicyActions,\n\tactions,\n\tfooterSlot,\n\trenderPolicy,\n\tempty,\n\tclassName,\n\tstrings: stringsProp,\n}: ProductPoliciesCardProps) {\n\tconst strings = useStrings(defaultProductPoliciesCardStrings, stringsProp);\n\tconst headerAction = onCreatePolicy ? (\n\t\t<Button type=\"button\" tone=\"secondary\" buttonStyle=\"ghost\" onClick={onCreatePolicy} icon={Plus}>\n\t\t\t{strings.createLabel}\n\t\t</Button>\n\t) : undefined;\n\n\treturn (\n\t\t<ContentBlock\n\t\t\ttitle={strings.title}\n\t\t\tdescription={strings.description}\n\t\t\tactions={actions}\n\t\t\theaderAction={headerAction}\n\t\t\tfooterSlot={footerSlot}\n\t\t\tclassName={cn('product-policies-card--component w-full', className)}\n\t\t>\n\t\t\t{policies.length === 0 ? (\n\t\t\t\tempty ?? (\n\t\t\t\t\t<ProductEmptyState\n\t\t\t\t\t\ttitle={strings.emptyTitle}\n\t\t\t\t\t\tdescription={strings.emptyDescription}\n\t\t\t\t\t\taction={onCreatePolicy ? (\n\t\t\t\t\t\t\t<Button tone=\"primary\" type=\"button\" onClick={onCreatePolicy} icon={Plus}>\n\t\t\t\t\t\t\t\t{strings.createLabel}\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t) : undefined}\n\t\t\t\t\t/>\n\t\t\t\t)\n\t\t\t) : (\n\t\t\t\t<ItemGroup>\n\t\t\t\t\t{policies.map((policy, index) => (\n\t\t\t\t\t\t(() => {\n\t\t\t\t\t\t\tconst onSelect = onSelectPolicy ? () => onSelectPolicy(policy) : undefined;\n\t\t\t\t\t\t\tconst onEdit = onEditPolicy ? () => onEditPolicy(policy) : undefined;\n\t\t\t\t\t\t\tconst onDelete = onDeletePolicy ? () => onDeletePolicy(policy) : undefined;\n\t\t\t\t\t\t\tconst policyActions = [\n\t\t\t\t\t\t\t\t...(onEdit ? [{\n\t\t\t\t\t\t\t\t\tid: 'edit',\n\t\t\t\t\t\t\t\t\tlabel: strings.editLabel,\n\t\t\t\t\t\t\t\t\ticon: <Pencil className=\"size-icon-md\" />,\n\t\t\t\t\t\t\t\t\tonClick: () => onEdit(),\n\t\t\t\t\t\t\t\t\ttone: 'secondary' as const, buttonStyle: 'ghost' as const,\n\t\t\t\t\t\t\t\t}] : []),\n\t\t\t\t\t\t\t\t...(onDelete ? [{\n\t\t\t\t\t\t\t\t\tid: 'delete',\n\t\t\t\t\t\t\t\t\tlabel: strings.deleteLabel,\n\t\t\t\t\t\t\t\t\ticon: <Trash2 className=\"size-icon-md\" />,\n\t\t\t\t\t\t\t\t\tonClick: () => onDelete(),\n\t\t\t\t\t\t\t\t\ttone: 'destructive' as const,\n\t\t\t\t\t\t\t\t}] : []),\n\t\t\t\t\t\t\t];\n\t\t\t\t\t\t\tconst rowActions = renderPolicyActions\n\t\t\t\t\t\t\t\t? renderPolicyActions(policy, { index, onSelect, onEdit, onDelete })\n\t\t\t\t\t\t\t\t: <ProductRowActions item={policy} actions={policyActions} menuLabel={strings.actionsLabel} />;\n\n\t\t\t\t\t\t\treturn renderPolicy ? (\n\t\t\t\t\t\t\t\t<div key={policy.id}>{renderPolicy(policy, index)}</div>\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<ProductSummaryRow\n\t\t\t\t\t\t\t\t\tkey={policy.id}\n\t\t\t\t\t\t\t\t\titem={policy}\n\t\t\t\t\t\t\t\t\tactionLabel={strings.viewLabel}\n\t\t\t\t\t\t\t\t\tonSelect={onSelect}\n\t\t\t\t\t\t\t\t\tactions={rowActions}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t})()\n\t\t\t\t\t))}\n\t\t\t\t</ItemGroup>\n\t\t\t)}\n\t\t</ContentBlock>\n\t);\n}\n\nProductPoliciesCard.displayName = 'ProductPoliciesCard';\n","import {\n\tEye,\n\tPencil,\n\tPlus,\n\tTrash2 } from 'lucide-react';\n\nimport { Button } from '../../../base/buttons';\nimport { ContentBlock, Separator } from '../../../base/display';\nimport {\n\tItem,\n\tItemActions,\n\tItemContent,\n\tItemDescription,\n\tItemGroup,\n\tItemTitle,\n} from '../../../base/item';\nimport { Stack } from '../../../base/structure';\nimport { InlineStat } from '../../../blocks/data-display';\nimport { Value } from '../../../primitives';\nimport { Text } from '../../../typography';\nimport { useStrings } from '../../../../lib/strings';\nimport { cn } from '../../../../lib/utils';\n\nimport { defaultProductQuotePreviewCardStrings } from '../products.strings';\nimport type { ProductQuotePreviewCardProps } from '../products.types';\nimport { ProductEmptyState } from '../partials/product-empty-state';\nimport { ProductRowActions } from '../partials/product-actions';\nimport { PRODUCT_EMPTY_VALUE } from '../partials/product-values';\n\n/**\n * One support rail region of the product editor.\n *\n * @deprecated An internal region of `ProductOverview`, which renders it from its `quote` prop (still typed `ProductQuotePreviewCardProps`). Pass the same props there and add custom content through the overview's slots. Kept exported for compatibility.\n */\nexport function ProductQuotePreviewCard({\n\tlines = [],\n\tsubtotal,\n\ttax,\n\tdiscount,\n\ttotal,\n\tonOpenQuote,\n\tonCreateLine,\n\tonSelectLine,\n\tonEditLine,\n\tonDeleteLine,\n\trenderLineActions,\n\tactions,\n\tfooterSlot,\n\tempty,\n\tclassName,\n\tstrings: stringsProp,\n}: ProductQuotePreviewCardProps) {\n\tconst strings = useStrings(defaultProductQuotePreviewCardStrings, stringsProp);\n\tconst hasBreakdown = subtotal !== undefined || tax !== undefined || discount !== undefined;\n\tconst headerAction = onCreateLine || onOpenQuote ? (\n\t\t<div className=\"flex items-center gap-space-md\">\n\t\t\t{!!onCreateLine && (\n\t\t\t\t<Button type=\"button\" tone=\"secondary\" buttonStyle=\"ghost\" onClick={onCreateLine} icon={Plus}>\n\t\t\t\t\t{strings.createLineLabel}\n\t\t\t\t</Button>\n\t\t\t)}\n\t\t\t{!!onOpenQuote && (\n\t\t\t\t<Button type=\"button\" tone=\"secondary\" buttonStyle=\"ghost\" onClick={onOpenQuote}>\n\t\t\t\t\t{strings.actionLabel}\n\t\t\t\t</Button>\n\t\t\t)}\n\t\t</div>\n\t) : undefined;\n\n\treturn (\n\t\t<ContentBlock\n\t\t\ttitle={strings.title}\n\t\t\tdescription={strings.description}\n\t\t\tactions={actions}\n\t\t\theaderAction={headerAction}\n\t\t\tfooterSlot={footerSlot}\n\t\t\tclassName={cn('product-quote-preview-card--component w-full', className)}\n\t\t>\n\t\t\t{lines.length === 0 ? (\n\t\t\t\tempty ?? (\n\t\t\t\t\t<ProductEmptyState\n\t\t\t\t\t\ttitle={strings.emptyTitle}\n\t\t\t\t\t\tdescription={strings.emptyDescription}\n\t\t\t\t\t\taction={onCreateLine ? (\n\t\t\t\t\t\t\t<Button tone=\"primary\" type=\"button\" onClick={onCreateLine} icon={Plus}>\n\t\t\t\t\t\t\t\t{strings.createLineLabel}\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t) : undefined}\n\t\t\t\t\t/>\n\t\t\t\t)\n\t\t\t) : (\n\t\t\t\t<Stack gap=\"2xl\" className=\"product-quote-preview-card--body\">\n\t\t\t\t\t<ItemGroup>\n\t\t\t\t\t\t{lines.map((line, index) => {\n\t\t\t\t\t\t\tconst onSelect = onSelectLine ? () => onSelectLine(line) : undefined;\n\t\t\t\t\t\t\tconst onEdit = onEditLine ? () => onEditLine(line) : undefined;\n\t\t\t\t\t\t\tconst onDelete = onDeleteLine ? () => onDeleteLine(line) : undefined;\n\t\t\t\t\t\t\tconst lineActions = [\n\t\t\t\t\t\t\t\t...(onSelect ? [{\n\t\t\t\t\t\t\t\t\tid: 'open',\n\t\t\t\t\t\t\t\t\tlabel: strings.viewLineLabel,\n\t\t\t\t\t\t\t\t\ticon: <Eye className=\"size-icon-md\" />,\n\t\t\t\t\t\t\t\t\tonClick: () => onSelect(),\n\t\t\t\t\t\t\t\t\ttone: 'secondary' as const, buttonStyle: 'ghost' as const,\n\t\t\t\t\t\t\t\t}] : []),\n\t\t\t\t\t\t\t\t...(onEdit ? [{\n\t\t\t\t\t\t\t\t\tid: 'edit',\n\t\t\t\t\t\t\t\t\tlabel: strings.editLineLabel,\n\t\t\t\t\t\t\t\t\ticon: <Pencil className=\"size-icon-md\" />,\n\t\t\t\t\t\t\t\t\tonClick: () => onEdit(),\n\t\t\t\t\t\t\t\t\ttone: 'secondary' as const, buttonStyle: 'ghost' as const,\n\t\t\t\t\t\t\t\t}] : []),\n\t\t\t\t\t\t\t\t...(onDelete ? [{\n\t\t\t\t\t\t\t\t\tid: 'delete',\n\t\t\t\t\t\t\t\t\tlabel: strings.deleteLineLabel,\n\t\t\t\t\t\t\t\t\ticon: <Trash2 className=\"size-icon-md\" />,\n\t\t\t\t\t\t\t\t\tonClick: () => onDelete(),\n\t\t\t\t\t\t\t\t\ttone: 'destructive' as const,\n\t\t\t\t\t\t\t\t}] : []),\n\t\t\t\t\t\t\t];\n\t\t\t\t\t\t\tconst rowActions = renderLineActions\n\t\t\t\t\t\t\t\t? renderLineActions(line, { index, onSelect, onEdit, onDelete })\n\t\t\t\t\t\t\t\t: <ProductRowActions item={line} actions={lineActions} menuLabel={strings.lineActionsLabel} />;\n\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t<Item key={line.id} className=\"product-quote-preview-card--line\">\n\t\t\t\t\t\t\t\t\t<ItemContent>\n\t\t\t\t\t\t\t\t\t\t<ItemTitle>{line.label}</ItemTitle>\n\t\t\t\t\t\t\t\t\t\t{!!line.description && <ItemDescription>{line.description}</ItemDescription>}\n\t\t\t\t\t\t\t\t\t\t{!!line.quantity && <ItemDescription>{line.quantity}</ItemDescription>}\n\t\t\t\t\t\t\t\t\t</ItemContent>\n\t\t\t\t\t\t\t\t\t<ItemActions>\n\t\t\t\t\t\t\t\t\t\t<Value type=\"inherit\" className=\"tabular-nums\">{line.amount}</Value>\n\t\t\t\t\t\t\t\t\t\t{rowActions}\n\t\t\t\t\t\t\t\t\t</ItemActions>\n\t\t\t\t\t\t\t\t</Item>\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t})}\n\t\t\t\t\t</ItemGroup>\n\t\t\t\t\t{/* Amounts stay in the sans UI font with tabular figures; the one rule sits above the grand total. */}\n\t\t\t\t\t<Stack gap=\"lg\" className=\"product-quote-preview-card--totals\">\n\t\t\t\t\t\t{!!hasBreakdown && (\n\t\t\t\t\t\t\t<Stack gap=\"sm\">\n\t\t\t\t\t\t\t\t{subtotal !== undefined && <InlineStat label={strings.subtotalLabel} value={subtotal} valueClassName=\"tabular-nums\" />}\n\t\t\t\t\t\t\t\t{tax !== undefined && <InlineStat label={strings.taxLabel} value={tax} valueClassName=\"tabular-nums\" />}\n\t\t\t\t\t\t\t\t{discount !== undefined && <InlineStat label={strings.discountLabel} value={discount} valueClassName=\"tabular-nums text-success\" />}\n\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{!!hasBreakdown && <Separator />}\n\t\t\t\t\t\t<InlineStat label={<Text type=\"inherit\" tag=\"span\" weight=\"semibold\" lineHeight=\"tight\">{strings.totalLabel}</Text>} value={total ?? PRODUCT_EMPTY_VALUE} valueClassName=\"font-semibold tabular-nums\" />\n\t\t\t\t\t</Stack>\n\t\t\t\t</Stack>\n\t\t\t)}\n\t\t</ContentBlock>\n\t);\n}\n\nProductQuotePreviewCard.displayName = 'ProductQuotePreviewCard';\n","import {\n\tPencil,\n\tPlus,\n\tTrash2 } from 'lucide-react';\n\nimport { Button } from '../../../base/buttons';\nimport { ContentBlock } from '../../../base/display';\nimport { Progress } from '../../../base/feedback';\nimport { ItemGroup } from '../../../base/item';\nimport { Percent } from '../../../primitives';\nimport { Text } from '../../../typography';\nimport { useStrings } from '../../../../lib/strings';\nimport { cn } from '../../../../lib/utils';\n\nimport { defaultProductReadinessCardStrings } from '../products.strings';\nimport type { ProductReadinessCardProps } from '../products.types';\nimport { ProductEmptyState } from '../partials/product-empty-state';\nimport { ProductRowActions } from '../partials/product-actions';\nimport { ProductReadinessRow } from '../partials/product-rows';\nimport { clampProductPercent } from '../partials/product-tone';\nimport { Stack } from '../../../base/structure';\n\n/**\n * One support rail region of the product editor.\n *\n * @deprecated An internal region of `ProductOverview`, which renders it from its `readiness` prop (still typed `ProductReadinessCardProps`). Pass the same props there and add custom content through the overview's slots. Kept exported for compatibility.\n */\nexport function ProductReadinessCard({\n\titems = [],\n\tscore,\n\tscoreLabel,\n\tsummary,\n\tonCreateReadinessItem,\n\tonSelectReadinessItem,\n\tonEditReadinessItem,\n\tonDeleteReadinessItem,\n\trenderReadinessItemActions,\n\tactions,\n\tfooterSlot,\n\trenderItem,\n\tempty,\n\tclassName,\n\tstrings: stringsProp,\n}: ProductReadinessCardProps) {\n\tconst strings = useStrings(defaultProductReadinessCardStrings, stringsProp);\n\tconst completion = score === undefined ? undefined : clampProductPercent(score);\n\tconst headerAction = onCreateReadinessItem ? (\n\t\t<Button type=\"button\" tone=\"secondary\" buttonStyle=\"ghost\" onClick={onCreateReadinessItem} icon={Plus}>\n\t\t\t{strings.createLabel}\n\t\t</Button>\n\t) : undefined;\n\n\treturn (\n\t\t<ContentBlock\n\t\t\ttitle={strings.title}\n\t\t\tdescription={strings.description}\n\t\t\tactions={actions}\n\t\t\theaderAction={headerAction}\n\t\t\tfooterSlot={footerSlot}\n\t\t\tcontentGap=\"2xl\"\n\t\t\tclassName={cn('product-readiness-card--component w-full', className)}\n\t\t>\n\t\t\t{(completion !== undefined || !!summary) && (\n\t\t\t\t<Stack gap=\"lg\" className=\"product-readiness-card--summary\">\n\t\t\t\t\t{completion !== undefined && (\n\t\t\t\t\t\t<Stack gap=\"sm\" className=\"product-readiness-card--score\">\n\t\t\t\t\t\t\t<Stack direction=\"horizontal\" justify=\"between\" gap=\"lg\">\n\t\t\t\t\t\t\t\t<Text size=\"xs\" type=\"secondary\">{scoreLabel ?? strings.scoreLabel}</Text>\n\t\t\t\t\t\t\t\t<Percent type=\"inherit\" value={completion} scaled size=\"xs\" weight=\"semibold\" />\n\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t\t<Progress\n\t\t\t\t\t\t\t\tvalue={completion}\n\t\t\t\t\t\t\t\taria-label={typeof scoreLabel === 'string' ? scoreLabel : strings.progressLabel}\n\t\t\t\t\t\t\t\taria-valuetext={`${completion}%`}\n\t\t\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</Stack>\n\t\t\t\t\t)}\n\t\t\t\t\t{!!summary && <Text type=\"secondary\">{summary}</Text>}\n\t\t\t\t</Stack>\n\t\t\t)}\n\t\t\t{items.length === 0 ? (\n\t\t\t\tempty ?? (\n\t\t\t\t\t<ProductEmptyState\n\t\t\t\t\t\ttitle={strings.emptyTitle}\n\t\t\t\t\t\tdescription={strings.emptyDescription}\n\t\t\t\t\t\taction={onCreateReadinessItem ? (\n\t\t\t\t\t\t\t<Button tone=\"primary\" type=\"button\" onClick={onCreateReadinessItem} icon={Plus}>\n\t\t\t\t\t\t\t\t{strings.createLabel}\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t) : undefined}\n\t\t\t\t\t/>\n\t\t\t\t)\n\t\t\t) : (\n\t\t\t\t<ItemGroup>\n\t\t\t\t\t{items.map((item, index) => {\n\t\t\t\t\t\tconst onSelect = onSelectReadinessItem ? () => onSelectReadinessItem(item) : undefined;\n\t\t\t\t\t\tconst onEdit = onEditReadinessItem ? () => onEditReadinessItem(item) : undefined;\n\t\t\t\t\t\tconst onDelete = onDeleteReadinessItem ? () => onDeleteReadinessItem(item) : undefined;\n\t\t\t\t\t\tconst readinessActions = [\n\t\t\t\t\t\t\t...(onEdit ? [{\n\t\t\t\t\t\t\t\tid: 'edit',\n\t\t\t\t\t\t\t\tlabel: strings.editLabel,\n\t\t\t\t\t\t\t\ticon: <Pencil className=\"size-icon-md\" />,\n\t\t\t\t\t\t\t\tonClick: () => onEdit(),\n\t\t\t\t\t\t\t\ttone: 'secondary' as const, buttonStyle: 'ghost' as const,\n\t\t\t\t\t\t\t}] : []),\n\t\t\t\t\t\t\t...(onDelete ? [{\n\t\t\t\t\t\t\t\tid: 'delete',\n\t\t\t\t\t\t\t\tlabel: strings.deleteLabel,\n\t\t\t\t\t\t\t\ticon: <Trash2 className=\"size-icon-md\" />,\n\t\t\t\t\t\t\t\tonClick: () => onDelete(),\n\t\t\t\t\t\t\t\ttone: 'destructive' as const,\n\t\t\t\t\t\t\t}] : []),\n\t\t\t\t\t\t];\n\t\t\t\t\t\tconst rowActions = renderReadinessItemActions\n\t\t\t\t\t\t\t? renderReadinessItemActions(item, { index, onSelect, onEdit, onDelete })\n\t\t\t\t\t\t\t: <ProductRowActions item={item} actions={readinessActions} menuLabel={strings.actionsLabel} />;\n\n\t\t\t\t\t\treturn renderItem ? (\n\t\t\t\t\t\t\t<div key={item.id}>{renderItem(item, index)}</div>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<ProductReadinessRow\n\t\t\t\t\t\t\t\tkey={item.id}\n\t\t\t\t\t\t\t\titem={item}\n\t\t\t\t\t\t\t\tactionFallback={strings.actionLabel}\n\t\t\t\t\t\t\t\tonSelect={onSelect}\n\t\t\t\t\t\t\t\tactions={rowActions}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t);\n\t\t\t\t\t})}\n\t\t\t\t</ItemGroup>\n\t\t\t)}\n\t\t</ContentBlock>\n\t);\n}\n\nProductReadinessCard.displayName = 'ProductReadinessCard';\n","import { Eye, Pencil, Plus, Trash2 } from 'lucide-react';\n\nimport { Button } from '../../../base/buttons';\nimport { ContentBlock } from '../../../base/display';\nimport { ItemGroup } from '../../../base/item';\nimport { useStrings } from '../../../../lib/strings';\nimport { cn } from '../../../../lib/utils';\n\nimport { defaultProductStructureCardStrings } from '../products.strings';\nimport type { ProductStructureCardProps } from '../products.types';\nimport { ProductEmptyState } from '../partials/product-empty-state';\nimport { ProductRowActions } from '../partials/product-actions';\nimport { ProductStructureMetricRow } from '../partials/product-rows';\n\n/**\n * One support rail region of the product editor.\n *\n * @deprecated An internal region of `ProductOverview`, which renders it from its `structure` prop (still typed `ProductStructureCardProps`). Pass the same props there and add custom content through the overview's slots. Kept exported for compatibility.\n */\nexport function ProductStructureCard({\n\tmetrics = [],\n\tonCreateMetric,\n\tonSelectMetric,\n\tonEditMetric,\n\tonDeleteMetric,\n\trenderMetricActions,\n\tactions,\n\tfooterSlot,\n\tempty,\n\tclassName,\n\tstrings: stringsProp,\n}: ProductStructureCardProps) {\n\tconst strings = useStrings(defaultProductStructureCardStrings, stringsProp);\n\tconst headerAction = onCreateMetric ? (\n\t\t<Button type=\"button\" tone=\"secondary\" buttonStyle=\"ghost\" onClick={onCreateMetric} icon={Plus}>\n\t\t\t{strings.createLabel}\n\t\t</Button>\n\t) : undefined;\n\n\treturn (\n\t\t<ContentBlock\n\t\t\ttitle={strings.title}\n\t\t\tdescription={strings.description}\n\t\t\tactions={actions}\n\t\t\theaderAction={headerAction}\n\t\t\tfooterSlot={footerSlot}\n\t\t\tclassName={cn('product-structure-card--component w-full', className)}\n\t\t>\n\t\t\t{metrics.length === 0 ? (\n\t\t\t\tempty ?? (\n\t\t\t\t\t<ProductEmptyState\n\t\t\t\t\t\ttitle={strings.emptyTitle}\n\t\t\t\t\t\tdescription={strings.emptyDescription}\n\t\t\t\t\t\taction={onCreateMetric ? (\n\t\t\t\t\t\t\t<Button tone=\"primary\" type=\"button\" onClick={onCreateMetric} icon={Plus}>\n\t\t\t\t\t\t\t\t{strings.createLabel}\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t) : undefined}\n\t\t\t\t\t/>\n\t\t\t\t)\n\t\t\t) : (\n\t\t\t\t<ItemGroup>\n\t\t\t\t\t{metrics.map((metric, index) => {\n\t\t\t\t\t\tconst onSelect = onSelectMetric ? () => onSelectMetric(metric) : undefined;\n\t\t\t\t\t\tconst onEdit = onEditMetric ? () => onEditMetric(metric) : undefined;\n\t\t\t\t\t\tconst onDelete = onDeleteMetric ? () => onDeleteMetric(metric) : undefined;\n\t\t\t\t\t\tconst metricActions = [\n\t\t\t\t\t\t\t...(onSelect ? [{\n\t\t\t\t\t\t\t\tid: 'open',\n\t\t\t\t\t\t\t\tlabel: strings.viewLabel,\n\t\t\t\t\t\t\t\ticon: <Eye className=\"size-icon-md\" />,\n\t\t\t\t\t\t\t\tonClick: () => onSelect(),\n\t\t\t\t\t\t\t\ttone: 'secondary' as const, buttonStyle: 'ghost' as const,\n\t\t\t\t\t\t\t}] : []),\n\t\t\t\t\t\t\t...(onEdit ? [{\n\t\t\t\t\t\t\t\tid: 'edit',\n\t\t\t\t\t\t\t\tlabel: strings.editLabel,\n\t\t\t\t\t\t\t\ticon: <Pencil className=\"size-icon-md\" />,\n\t\t\t\t\t\t\t\tonClick: () => onEdit(),\n\t\t\t\t\t\t\t\ttone: 'secondary' as const, buttonStyle: 'ghost' as const,\n\t\t\t\t\t\t\t}] : []),\n\t\t\t\t\t\t\t...(onDelete ? [{\n\t\t\t\t\t\t\t\tid: 'delete',\n\t\t\t\t\t\t\t\tlabel: strings.deleteLabel,\n\t\t\t\t\t\t\t\ticon: <Trash2 className=\"size-icon-md\" />,\n\t\t\t\t\t\t\t\tonClick: () => onDelete(),\n\t\t\t\t\t\t\t\ttone: 'destructive' as const,\n\t\t\t\t\t\t\t}] : []),\n\t\t\t\t\t\t];\n\t\t\t\t\t\tconst rowActions = renderMetricActions\n\t\t\t\t\t\t\t? renderMetricActions(metric, { index, onSelect, onEdit, onDelete })\n\t\t\t\t\t\t\t: <ProductRowActions item={metric} actions={metricActions} menuLabel={strings.actionsLabel} />;\n\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<ProductStructureMetricRow\n\t\t\t\t\t\t\t\tkey={metric.id}\n\t\t\t\t\t\t\t\tmetric={metric}\n\t\t\t\t\t\t\t\tactions={rowActions}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t);\n\t\t\t\t\t})}\n\t\t\t\t</ItemGroup>\n\t\t\t)}\n\t\t</ContentBlock>\n\t);\n}\n\nProductStructureCard.displayName = 'ProductStructureCard';\n","import { Copy, Eye, Pencil, Plus, Trash2 } from 'lucide-react';\nimport { useMemo } from 'react';\nimport type { ReactNode } from 'react';\nimport type { ColumnDef } from '@tanstack/react-table';\n\nimport { Badge } from '../../../base/badge';\nimport { Button } from '../../../base/buttons';\nimport { ContentBlock } from '../../../base/display';\nimport { Stack } from '../../../base/structure';\nimport { DataTable, type TableAction } from '../../table';\nimport { SecondaryValue, Value } from '../../../primitives';\nimport { Text } from '../../../typography';\nimport { useStrings } from '../../../../lib/strings';\nimport { cn } from '../../../../lib/utils';\n\nimport { defaultProductVariantsTableStrings } from '../products.strings';\nimport type { ProductVariantsTableProps } from '../products.types';\nimport { ProductEmptyState } from '../partials/product-empty-state';\nimport { PRODUCT_EMPTY_VALUE } from '../partials/product-values';\nimport type { ProductVariantSummary } from '../products.types';\n\nfunction ProductVariantNameCell({\n\tvariant,\n\tchannelsLabel,\n}: {\n\tvariant: ProductVariantSummary;\n\tchannelsLabel: string;\n}) {\n\treturn (\n\t\t<Stack gap=\"xs\" className=\"product-variants-table--variant-cell min-w-0\">\n\t\t\t<Stack gap=\"dense\">\n\t\t\t\t<Stack direction=\"horizontal\" gap=\"sm\">\n\t\t\t\t\t<Text type=\"inherit\" weight=\"semibold\" className=\"truncate\">{variant.name}</Text>\n\t\t\t\t\t{!!variant.status && (\n\t\t\t\t\t\t<Badge tone={variant.statusTone ?? 'secondary'}>{variant.status}</Badge>\n\t\t\t\t\t)}\n\t\t\t\t</Stack>\n\t\t\t\t{!!variant.description && (\n\t\t\t\t\t<Text size=\"xs\" type=\"secondary\">\n\t\t\t\t\t\t{variant.description}\n\t\t\t\t\t</Text>\n\t\t\t\t)}\n\t\t\t</Stack>\n\t\t\t{!!(variant.options?.length || variant.channels) && (\n\t\t\t\t<Stack direction=\"horizontal\" gap=\"xs\">\n\t\t\t\t\t{variant.options?.map((option, optionIndex) => (\n\t\t\t\t\t\t<Badge key={optionIndex} tone=\"secondary\">\n\t\t\t\t\t\t\t{option}\n\t\t\t\t\t\t</Badge>\n\t\t\t\t\t))}\n\t\t\t\t\t{!!variant.channels && (\n\t\t\t\t\t\t<Text tag=\"span\" size=\"xs\" type=\"secondary\">\n\t\t\t\t\t\t\t{channelsLabel}: {variant.channels}\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t)}\n\t\t\t\t</Stack>\n\t\t\t)}\n\t\t</Stack>\n\t);\n}\n\nfunction ProductVariantValueCell({\n\tvalue,\n\temphasis = false,\n}: {\n\tvalue?: ReactNode;\n\temphasis?: boolean;\n}) {\n\tconst Primitive = value ? Value : SecondaryValue;\n\n\treturn (\n\t\t<Primitive\n\t\t\ttype={value ? 'inherit' : 'secondary'}\n\t\t\tweight={emphasis ? 'semibold' : undefined}\n\t\t\tclassName=\"min-w-0 tabular-nums\"\n\t\t>\n\t\t\t{value ?? PRODUCT_EMPTY_VALUE}\n\t\t</Primitive>\n\t);\n}\n\nexport function ProductVariantsTable({\n\tvariants = [],\n\tonCreateVariant,\n\tonSelectVariant,\n\tonEditVariant,\n\tonDuplicateVariant,\n\tonDeleteVariant,\n\trenderVariantActions,\n\tactions,\n\tfooterSlot,\n\tempty,\n\tclassName,\n\tstrings: stringsProp,\n}: ProductVariantsTableProps) {\n\tconst strings = useStrings(defaultProductVariantsTableStrings, stringsProp);\n\tconst rowActions = useMemo<TableAction<ProductVariantSummary>[] | undefined>(() => {\n\t\tif (renderVariantActions) return undefined;\n\n\t\tconst actionsList: TableAction<ProductVariantSummary>[] = [\n\t\t\t...(onSelectVariant ? [{\n\t\t\t\tid: 'open',\n\t\t\t\tlabel: strings.viewLabel,\n\t\t\t\ticon: <Eye className=\"size-icon-sm\" aria-hidden=\"true\" />,\n\t\t\t\tonClick: onSelectVariant,\n\t\t\t\tbuttonStyle: 'ghost' as const,\n\t\t\t}] : []),\n\t\t\t...(onEditVariant ? [{\n\t\t\t\tid: 'edit',\n\t\t\t\tlabel: strings.editLabel,\n\t\t\t\ticon: <Pencil className=\"size-icon-sm\" aria-hidden=\"true\" />,\n\t\t\t\tonClick: onEditVariant,\n\t\t\t\tbuttonStyle: 'ghost' as const,\n\t\t\t}] : []),\n\t\t\t...(onDuplicateVariant ? [{\n\t\t\t\tid: 'duplicate',\n\t\t\t\tlabel: strings.duplicateLabel,\n\t\t\t\ticon: <Copy className=\"size-icon-sm\" aria-hidden=\"true\" />,\n\t\t\t\tonClick: onDuplicateVariant,\n\t\t\t\tbuttonStyle: 'ghost' as const,\n\t\t\t}] : []),\n\t\t\t...(onDeleteVariant ? [{\n\t\t\t\tid: 'delete',\n\t\t\t\tlabel: strings.deleteLabel,\n\t\t\t\ticon: <Trash2 className=\"size-icon-sm\" aria-hidden=\"true\" />,\n\t\t\t\tonClick: onDeleteVariant,\n\t\t\t\ttone: 'destructive' as const,\n\t\t\t}] : []),\n\t\t];\n\n\t\treturn actionsList.length > 0 ? actionsList : undefined;\n\t}, [\n\t\tonDeleteVariant,\n\t\tonDuplicateVariant,\n\t\tonEditVariant,\n\t\tonSelectVariant,\n\t\trenderVariantActions,\n\t\tstrings.deleteLabel,\n\t\tstrings.duplicateLabel,\n\t\tstrings.editLabel,\n\t\tstrings.viewLabel,\n\t]);\n\tconst columns = useMemo<ColumnDef<ProductVariantSummary>[]>(() => {\n\t\tconst baseColumns: ColumnDef<ProductVariantSummary>[] = [\n\t\t\t{\n\t\t\t\taccessorKey: 'name',\n\t\t\t\theader: strings.headers.variant,\n\t\t\t\tcell: ({ row }) => (\n\t\t\t\t\t<ProductVariantNameCell\n\t\t\t\t\t\tvariant={row.original}\n\t\t\t\t\t\tchannelsLabel={strings.headers.channels}\n\t\t\t\t\t/>\n\t\t\t\t),\n\t\t\t},\n\t\t\t{\n\t\t\t\taccessorKey: 'price',\n\t\t\t\theader: strings.headers.price,\n\t\t\t\tcell: ({ row }) => <ProductVariantValueCell value={row.original.price} emphasis />,\n\t\t\t\tmeta: { align: 'start' },\n\t\t\t},\n\t\t\t{\n\t\t\t\taccessorKey: 'inventory',\n\t\t\t\theader: strings.headers.inventory,\n\t\t\t\tcell: ({ row }) => <ProductVariantValueCell value={row.original.inventory} />,\n\t\t\t},\n\t\t\t{\n\t\t\t\taccessorKey: 'sku',\n\t\t\t\theader: strings.headers.sku,\n\t\t\t\tcell: ({ row }) => <ProductVariantValueCell value={row.original.sku} />,\n\t\t\t},\n\t\t\t{\n\t\t\t\taccessorKey: 'updatedAt',\n\t\t\t\theader: strings.headers.updated,\n\t\t\t\tcell: ({ row }) => <ProductVariantValueCell value={row.original.updatedAt} />,\n\t\t\t},\n\t\t];\n\n\t\tif (renderVariantActions) {\n\t\t\tbaseColumns.push({\n\t\t\t\tid: 'actions',\n\t\t\t\theader: strings.headers.actions,\n\t\t\t\tcell: ({ row }) => renderVariantActions(row.original, {\n\t\t\t\t\tindex: row.index,\n\t\t\t\t\tonSelect: onSelectVariant ? () => onSelectVariant(row.original) : undefined,\n\t\t\t\t\tonEdit: onEditVariant ? () => onEditVariant(row.original) : undefined,\n\t\t\t\t\tonDuplicate: onDuplicateVariant ? () => onDuplicateVariant(row.original) : undefined,\n\t\t\t\t\tonDelete: onDeleteVariant ? () => onDeleteVariant(row.original) : undefined,\n\t\t\t\t}),\n\t\t\t\tmeta: { align: 'end' },\n\t\t\t});\n\t\t}\n\n\t\treturn baseColumns;\n\t}, [\n\t\tonDeleteVariant,\n\t\tonDuplicateVariant,\n\t\tonEditVariant,\n\t\tonSelectVariant,\n\t\trenderVariantActions,\n\t\tstrings.headers.actions,\n\t\tstrings.headers.channels,\n\t\tstrings.headers.inventory,\n\t\tstrings.headers.price,\n\t\tstrings.headers.sku,\n\t\tstrings.headers.updated,\n\t\tstrings.headers.variant,\n\t]);\n\tconst headerAction = onCreateVariant ? (\n\t\t<Button type=\"button\" tone=\"secondary\" buttonStyle=\"ghost\" onClick={onCreateVariant} icon={Plus}>\n\t\t\t{strings.createLabel}\n\t\t</Button>\n\t) : undefined;\n\n\treturn (\n\t\t<ContentBlock\n\t\t\ttitle={strings.title}\n\t\t\tdescription={strings.description}\n\t\t\tactions={actions}\n\t\t\theaderAction={headerAction}\n\t\t\tfooterSlot={footerSlot}\n\t\t\tclassName={cn('product-variants-table--component w-full', className)}\n\t\t>\n\t\t\t{variants.length === 0 ? (\n\t\t\t\tempty ?? (\n\t\t\t\t\t<ProductEmptyState\n\t\t\t\t\t\ttitle={strings.emptyTitle}\n\t\t\t\t\t\tdescription={strings.emptyDescription}\n\t\t\t\t\t\taction={onCreateVariant ? (\n\t\t\t\t\t\t\t<Button tone=\"primary\" type=\"button\" onClick={onCreateVariant} icon={Plus}>\n\t\t\t\t\t\t\t\t{strings.createLabel}\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t) : undefined}\n\t\t\t\t\t/>\n\t\t\t\t)\n\t\t\t) : (\n\t\t\t\t<DataTable<ProductVariantSummary>\n\t\t\t\t\tdata={variants}\n\t\t\t\t\tcolumns={columns}\n\t\t\t\t\tgetRowId={(variant) => variant.id}\n\t\t\t\t\tenableColumnVisibility\n\t\t\t\t\tsurface=\"glass\"\n\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\trowActions={rowActions}\n\t\t\t\t\trowActionsMenuLabel={strings.headers.actions}\n\t\t\t\t\trowActionsDisplayMode=\"menu\"\n\t\t\t\t\tstorageKey=\"product-variants\"\n\t\t\t\t\tclassName=\"product-variants-table--table\"\n\t\t\t\t\ttableContainerClassName=\"max-h-none\"\n\t\t\t\t\tstrings={{\n\t\t\t\t\t\temptyState: {\n\t\t\t\t\t\t\tmessage: strings.emptyTitle,\n\t\t\t\t\t\t},\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t)}\n\t\t</ContentBlock>\n\t);\n}\n\nProductVariantsTable.displayName = 'ProductVariantsTable';\n","import { useStrings } from '../../../../lib/strings';\nimport { Stack } from '../../../base/structure';\nimport { cn } from '../../../../lib/utils';\n\nimport { defaultProductOverviewStrings } from '../products.strings';\nimport type { ProductOverviewProps } from '../products.types';\nimport { ProductContractOverview } from './product-contract-overview';\nimport { ProductDetailsCard } from './product-details-card';\nimport { ProductOperationsCard } from './product-operations-card';\nimport { ProductOptionsSummary } from './product-options-summary';\nimport { ProductPoliciesCard } from './product-policies-card';\nimport { ProductQuotePreviewCard } from './product-quote-preview-card';\nimport { ProductReadinessCard } from './product-readiness-card';\nimport { ProductStructureCard } from './product-structure-card';\nimport { ProductVariantsTable } from './product-variants-table';\n\nexport function ProductOverview({\n\tdetails,\n\tcontract,\n\toptions,\n\tvariants,\n\treadiness,\n\tstructure,\n\toperations,\n\tquote,\n\tpolicies,\n\tslots,\n\tclassName,\n\tmainClassName,\n\trailClassName,\n\tstrings: stringsProp,\n}: ProductOverviewProps) {\n\tconst strings = useStrings(defaultProductOverviewStrings, stringsProp);\n\tconst hasRail = !!(readiness || structure || operations || quote || policies || slots?.railTop || slots?.railBottom);\n\n\treturn (\n\t\t// The cards are unframed sections, so the gap between them is the only thing that\n\t\t// separates them: page rhythm (3xl), clearly wider than the 2xl between sub-sections\n\t\t// inside a card and the row spacing inside a list.\n\t\t<Stack gap=\"3xl\" className={cn('product-overview--component @container/product-overview', className)}>\n\t\t\t{slots?.before}\n\t\t\t<div className={cn('grid min-w-0 grid-cols-1 gap-space-3xl', hasRail && '@5xl/product-overview:grid-cols-[minmax(0,1fr)_22rem]')}>\n\t\t\t\t<Stack render={<section />} gap=\"3xl\" aria-label={strings.mainLabel} className={cn('product-overview--main', mainClassName)}>\n\t\t\t\t\t{slots?.mainTop}\n\t\t\t\t\t{!!details && <ProductDetailsCard {...details} />}\n\t\t\t\t\t{!!contract && <ProductContractOverview {...contract} />}\n\t\t\t\t\t{!!options && <ProductOptionsSummary {...options} />}\n\t\t\t\t\t{!!variants && <ProductVariantsTable {...variants} />}\n\t\t\t\t\t{slots?.mainBottom}\n\t\t\t\t</Stack>\n\t\t\t\t{!!hasRail && (\n\t\t\t\t\t<Stack render={<aside />} gap=\"3xl\" aria-label={strings.railLabel} className={cn('product-overview--rail', railClassName)}>\n\t\t\t\t\t\t{slots?.railTop}\n\t\t\t\t\t\t{!!readiness && <ProductReadinessCard {...readiness} />}\n\t\t\t\t\t\t{!!structure && <ProductStructureCard {...structure} />}\n\t\t\t\t\t\t{!!operations && <ProductOperationsCard {...operations} />}\n\t\t\t\t\t\t{!!quote && <ProductQuotePreviewCard {...quote} />}\n\t\t\t\t\t\t{!!policies && <ProductPoliciesCard {...policies} />}\n\t\t\t\t\t\t{slots?.railBottom}\n\t\t\t\t\t</Stack>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t\t{slots?.after}\n\t\t</Stack>\n\t);\n}\n\nProductOverview.displayName = 'ProductOverview';\n","import { Copy, Eye, Pencil, Trash2 } from 'lucide-react';\nimport type { ReactNode } from 'react';\n\nimport { useStrings } from '../../../../lib/strings';\nimport { cn } from '../../../../lib/utils';\n\nimport {\n\tdefaultProductVariantActionMenuStrings,\n\ttype ProductVariantActionMenuStrings,\n} from '../products.strings';\nimport type {\n\tProductVariantActionMenuProps,\n\tProductVariantSummary,\n} from '../products.types';\nimport { ProductRowActions } from '../partials/product-actions';\n\ntype VariantCommandHandlers = Pick<\n\tProductVariantActionMenuProps,\n\t'onSelectVariant' | 'onEditVariant' | 'onDuplicateVariant' | 'onDeleteVariant'\n>;\n\ninterface VariantCommand {\n\tid: string;\n\tlabel: string;\n\ticon: ReactNode;\n\tonClick: () => void;\n\ttone: 'secondary' | 'destructive';\n\tbuttonStyle?: 'ghost';\n}\n\n/**\n * The default variant commands, in order, with the destructive one last. The\n * row menu and the details card's single overflow menu both build on these.\n */\nexport function productVariantMenuActions(\n\tvariant: ProductVariantSummary,\n\t{ onSelectVariant, onEditVariant, onDuplicateVariant, onDeleteVariant }: VariantCommandHandlers,\n\tstrings: ProductVariantActionMenuStrings,\n): VariantCommand[] {\n\treturn [\n\t\t...(onSelectVariant ? [{\n\t\t\tid: 'open',\n\t\t\tlabel: strings.viewLabel,\n\t\t\ticon: <Eye className=\"size-icon-md\" />,\n\t\t\tonClick: () => onSelectVariant(variant),\n\t\t\ttone: 'secondary' as const, buttonStyle: 'ghost' as const,\n\t\t}] : []),\n\t\t...(onEditVariant ? [{\n\t\t\tid: 'edit',\n\t\t\tlabel: strings.editLabel,\n\t\t\ticon: <Pencil className=\"size-icon-md\" />,\n\t\t\tonClick: () => onEditVariant(variant),\n\t\t\ttone: 'secondary' as const, buttonStyle: 'ghost' as const,\n\t\t}] : []),\n\t\t...(onDuplicateVariant ? [{\n\t\t\tid: 'duplicate',\n\t\t\tlabel: strings.duplicateLabel,\n\t\t\ticon: <Copy className=\"size-icon-md\" />,\n\t\t\tonClick: () => onDuplicateVariant(variant),\n\t\t\ttone: 'secondary' as const, buttonStyle: 'ghost' as const,\n\t\t}] : []),\n\t\t...(onDeleteVariant ? [{\n\t\t\tid: 'delete',\n\t\t\tlabel: strings.deleteLabel,\n\t\t\ticon: <Trash2 className=\"size-icon-md\" />,\n\t\t\tonClick: () => onDeleteVariant(variant),\n\t\t\ttone: 'destructive' as const,\n\t\t}] : []),\n\t];\n}\n\n/**\n * Row menu for one product variant.\n *\n * @deprecated An internal part of the variant tables and `ProductVariantDetails`, which render it for every variant. Replace it there with `renderVariantActions`, composing the base `ActionMenu` if needed. Kept exported for compatibility.\n */\nexport function ProductVariantActionMenu({\n\tvariant,\n\tindex = 0,\n\tonSelectVariant,\n\tonEditVariant,\n\tonDuplicateVariant,\n\tonDeleteVariant,\n\trenderVariantActions,\n\tmenuLabel,\n\tclassName,\n\tstrings: stringsProp,\n}: ProductVariantActionMenuProps) {\n\tconst strings = useStrings(defaultProductVariantActionMenuStrings, stringsProp);\n\tconst onSelect = onSelectVariant ? () => onSelectVariant(variant) : undefined;\n\tconst onEdit = onEditVariant ? () => onEditVariant(variant) : undefined;\n\tconst onDuplicate = onDuplicateVariant ? () => onDuplicateVariant(variant) : undefined;\n\tconst onDelete = onDeleteVariant ? () => onDeleteVariant(variant) : undefined;\n\tconst hasActions = !!(onSelect || onEdit || onDuplicate || onDelete || renderVariantActions);\n\n\tif (!hasActions) return null;\n\n\tif (renderVariantActions) {\n\t\treturn (\n\t\t\t<div className={cn('product-variant-action-menu--component flex justify-end', className)}>\n\t\t\t\t{renderVariantActions(variant, { index, onSelect, onEdit, onDuplicate, onDelete })}\n\t\t\t</div>\n\t\t);\n\t}\n\n\treturn (\n\t\t<ProductRowActions<ProductVariantSummary>\n\t\t\titem={variant}\n\t\t\tmenuLabel={menuLabel ?? strings.actionsLabel}\n\t\t\tclassName={cn('product-variant-action-menu--component', className)}\n\t\t\tactions={productVariantMenuActions(\n\t\t\t\tvariant,\n\t\t\t\t{ onSelectVariant, onEditVariant, onDuplicateVariant, onDeleteVariant },\n\t\t\t\tstrings,\n\t\t\t).map(({ onClick, ...action }) => ({ ...action, onClick: () => onClick() }))}\n\t\t/>\n\t);\n}\n\nProductVariantActionMenu.displayName = 'ProductVariantActionMenu';\n","import {compositionClasses} from '../../../base/structure/composition.recipes';\nimport { ArrowLeft } from 'lucide-react';\nimport type { ReactNode } from 'react';\n\nimport { Badge } from '../../../base/badge';\nimport { Button } from '../../../base/buttons';\nimport { ContentBlock } from '../../../base/display';\nimport { MetadataList, type MetadataListItem } from '../../../base/metadata-list';\nimport { ItemGroup } from '../../../base/item';\nimport { Stack } from '../../../base/structure';\nimport { Text } from '../../../typography';\nimport { useStrings } from '../../../../lib/strings';\nimport { cn } from '../../../../lib/utils';\n\nimport {\n\tdefaultProductVariantActionMenuStrings,\n\tdefaultProductVariantDetailsStrings,\n} from '../products.strings';\nimport type {\n\tProductOptionSummary,\n\tProductVariantDetailsProps,\n\tProductVariantSummary,\n} from '../products.types';\nimport { ProductEmptyState } from '../partials/product-empty-state';\nimport { ProductSummaryRow } from '../partials/product-rows';\nimport { ProductVariantActionMenu, productVariantMenuActions } from './product-variant-action-menu';\n\nconst isPresent = (value: ReactNode): boolean => (\n\tvalue !== undefined &&\n\tvalue !== null &&\n\tvalue !== false &&\n\tvalue !== ''\n);\n\ntype ProductVariantMetadataLabels = {\n\tprice: string;\n\tinventory: string;\n\tsku: string;\n\tchannels: string;\n\tupdated: string;\n};\n\nfunction getDefaultMetadata(\n\tvariant: ProductVariantSummary,\n\tlabels: ProductVariantMetadataLabels,\n): MetadataListItem[] {\n\treturn [\n\t\t{ label: labels.price, value: variant.price },\n\t\t{ label: labels.inventory, value: variant.inventory },\n\t\t{ label: labels.sku, value: variant.sku },\n\t\t{ label: labels.channels, value: variant.channels },\n\t\t{ label: labels.updated, value: variant.updatedAt },\n\t].filter((item) => isPresent(item.value));\n}\n\nexport function ProductVariantDetails({\n\tvariant,\n\tmetadata,\n\toptionItems = [],\n\tmedia,\n\tonBack,\n\tonSelectVariant,\n\tonEditVariant,\n\tonDuplicateVariant,\n\tonDeleteVariant,\n\tonSelectOption,\n\tactions,\n\theaderEnd,\n\tfooterSlot,\n\tempty,\n\trenderActions,\n\trenderMetadata,\n\trenderOption,\n\tclassName,\n\tstrings: stringsProp,\n}: ProductVariantDetailsProps) {\n\tconst strings = useStrings(defaultProductVariantDetailsStrings, stringsProp);\n\tconst resolvedMetadata = variant ? (metadata ?? getDefaultMetadata(variant, strings.metadata)) : [];\n\t// One header, one overflow menu: the default variant commands join the\n\t// card's own `actions` in the trailing ⋯, which sorts Delete last. A custom\n\t// `renderActions` stays the consumer's own header content.\n\tconst variantActions = variant && !renderActions\n\t\t? productVariantMenuActions(\n\t\t\tvariant,\n\t\t\t{ onSelectVariant, onEditVariant, onDuplicateVariant, onDeleteVariant },\n\t\t\tdefaultProductVariantActionMenuStrings,\n\t\t)\n\t\t: [];\n\tconst menuActions = [...variantActions, ...(actions ?? [])];\n\tconst hasCustomActions = !!(variant && renderActions);\n\tconst headerAction = (\n\t\t<div className={cn('product-variant-details--header-actions flex items-center', compositionClasses.commands)}>\n\t\t\t{!!onBack && (\n\t\t\t\t<Button type=\"button\" tone=\"secondary\" buttonStyle=\"ghost\" onClick={onBack} icon={ArrowLeft}>\n\t\t\t\t\t{strings.backLabel}\n\t\t\t\t</Button>\n\t\t\t)}\n\t\t\t{!!hasCustomActions && variant && (\n\t\t\t\t<ProductVariantActionMenu\n\t\t\t\t\tvariant={variant}\n\t\t\t\t\tonSelectVariant={onSelectVariant}\n\t\t\t\t\tonEditVariant={onEditVariant}\n\t\t\t\t\tonDuplicateVariant={onDuplicateVariant}\n\t\t\t\t\tonDeleteVariant={onDeleteVariant}\n\t\t\t\t\trenderVariantActions={renderActions}\n\t\t\t\t/>\n\t\t\t)}\n\t\t</div>\n\t);\n\tconst selectedOptions = variant?.options ?? [];\n\n\treturn (\n\t\t<ContentBlock\n\t\t\ttitle={variant?.name ?? strings.title}\n\t\t\ttitleSuffix={variant?.status ? (\n\t\t\t\t<Badge tone={variant.statusTone ?? 'secondary'}>{variant.status}</Badge>\n\t\t\t) : undefined}\n\t\t\tdescription={variant?.description ?? strings.description}\n\t\t\tactions={menuActions.length ? menuActions : undefined}\n\t\t\theaderAction={onBack || hasCustomActions ? headerAction : undefined}\n\t\t\theaderEnd={headerEnd}\n\t\t\tfooterSlot={footerSlot}\n\t\t\tclassName={cn('product-variant-details--component w-full', className)}\n\t\t>\n\t\t\t{!variant ? (\n\t\t\t\tempty ?? (\n\t\t\t\t\t<ProductEmptyState\n\t\t\t\t\t\ttitle={strings.emptyTitle}\n\t\t\t\t\t\tdescription={strings.emptyDescription}\n\t\t\t\t\t/>\n\t\t\t\t)\n\t\t\t) : (\n\t\t\t\t<Stack gap=\"2xl\" className=\"product-variant-details--body\">\n\t\t\t\t\t{!!media && (\n\t\t\t\t\t\t<div className=\"product-variant-details--media overflow-hidden rounded-inner border border-border bg-muted/30\">\n\t\t\t\t\t\t\t{media}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)}\n\n\t\t\t\t\t{renderMetadata ? (\n\t\t\t\t\t\trenderMetadata(variant)\n\t\t\t\t\t) : resolvedMetadata.some(Boolean) && (\n\t\t\t\t\t\t// Same sub-section heading recipe as the option sections below.\n\t\t\t\t\t\t<Stack gap=\"md\" className=\"product-variant-details--facts\">\n\t\t\t\t\t\t\t<Text type=\"inherit\" weight=\"semibold\">{strings.factsTitle}</Text>\n\t\t\t\t\t\t\t<MetadataList\n\t\t\t\t\t\t\t\tadaptTo=\"container\"\n\t\t\t\t\t\t\t\titems={resolvedMetadata}\n\t\t\t\t\t\t\t\tcolumns={3}\n\t\t\t\t\t\t\t\tdensity=\"compact\"\n\t\t\t\t\t\t\t\tclassName=\"product-variant-details--metadata\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</Stack>\n\t\t\t\t\t)}\n\n\t\t\t\t\t{!!selectedOptions.length && (\n\t\t\t\t\t\t<Stack gap=\"md\" className=\"product-variant-details--selected-options\">\n\t\t\t\t\t\t\t<Text type=\"inherit\" weight=\"semibold\">{strings.selectedOptionsTitle}</Text>\n\t\t\t\t\t\t\t<div className=\"flex flex-wrap gap-space-sm\">\n\t\t\t\t\t\t\t\t{selectedOptions.map((option, index) => (\n\t\t\t\t\t\t\t\t\t<Badge key={index} tone=\"secondary\">\n\t\t\t\t\t\t\t\t\t\t{option}\n\t\t\t\t\t\t\t\t\t</Badge>\n\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</Stack>\n\t\t\t\t\t)}\n\n\t\t\t\t\t{!!optionItems.length && (\n\t\t\t\t\t\t<Stack gap=\"md\" className=\"product-variant-details--related-options\">\n\t\t\t\t\t\t\t<Text type=\"inherit\" weight=\"semibold\">{strings.relatedOptionsTitle}</Text>\n\t\t\t\t\t\t\t<ItemGroup>\n\t\t\t\t\t\t\t\t{optionItems.map((option: ProductOptionSummary, index) => (\n\t\t\t\t\t\t\t\t\trenderOption ? (\n\t\t\t\t\t\t\t\t\t\t<div key={option.id}>{renderOption(option, index)}</div>\n\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t<ProductSummaryRow\n\t\t\t\t\t\t\t\t\t\t\tkey={option.id}\n\t\t\t\t\t\t\t\t\t\t\titem={option}\n\t\t\t\t\t\t\t\t\t\t\tactionLabel={strings.viewOptionLabel}\n\t\t\t\t\t\t\t\t\t\t\tonSelect={onSelectOption ? () => onSelectOption(option) : undefined}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t</ItemGroup>\n\t\t\t\t\t\t</Stack>\n\t\t\t\t\t)}\n\t\t\t\t</Stack>\n\t\t\t)}\n\t\t</ContentBlock>\n\t);\n}\n\nProductVariantDetails.displayName = 'ProductVariantDetails';\n","import { type FormEvent, useId, useState } from 'react';\n\nimport { Button } from '../../../base/buttons';\nimport { ContentBlock } from '../../../base/display';\nimport { FormField } from '../../../base/forms';\nimport { Input, Textarea } from '../../../base/text-inputs';\nimport { Select } from '../../../base/choice-inputs';\nimport { Stack } from '../../../base/structure';\nimport { Text } from '../../../typography';\nimport { useStrings } from '../../../../lib/strings';\nimport { cn } from '../../../../lib/utils';\n\nimport { defaultProductVariantEditorStrings } from '../products.strings';\nimport type {\n\tProductChoice,\n\tProductVariantEditorProps,\n\tProductVariantEditorValues,\n\tProductVariantOptionField,\n} from '../products.types';\n\nconst toSelectOptions = (choices: ProductChoice[]) => (\n\tchoices.map((choice) => ({\n\t\tvalue: choice.value,\n\t\tlabel: choice.label,\n\t\tdisabled: choice.disabled,\n\t}))\n);\n\nexport function ProductVariantEditor({\n\tvalue: valueProp,\n\tdefaultValue,\n\toptionFields = [],\n\tstatusOptions = [],\n\tonValueChange,\n\tonSubmit,\n\tonError,\n\tonCancel,\n\tonDelete,\n\tactions,\n\theaderEnd,\n\tfooterSlot,\n\tdisabled = false,\n\tsubmitting = false,\n\tclassName,\n\tstrings: stringsProp,\n}: ProductVariantEditorProps) {\n\tconst strings = useStrings(defaultProductVariantEditorStrings, stringsProp);\n\tconst formId = useId();\n\tconst isControlled = valueProp !== undefined;\n\tconst [internalValue, setInternalValue] = useState<ProductVariantEditorValues>(defaultValue ?? {});\n\tconst [internalSubmitting, setInternalSubmitting] = useState(false);\n\tconst value = (isControlled ? valueProp : internalValue) ?? {};\n\tconst resolvedSubmitting = submitting || internalSubmitting;\n\tconst isDisabled = disabled || resolvedSubmitting;\n\n\tconst updateValue = (next: ProductVariantEditorValues) => {\n\t\tif (!isControlled) {\n\t\t\tsetInternalValue(next);\n\t\t}\n\n\t\tonValueChange?.(next);\n\t};\n\n\tconst updateField = (field: keyof Omit<ProductVariantEditorValues, 'options'>, nextValue: string) => {\n\t\tupdateValue({\n\t\t\t...value,\n\t\t\t[field]: nextValue,\n\t\t});\n\t};\n\n\tconst updateOption = (field: ProductVariantOptionField, nextValue: string | undefined) => {\n\t\tupdateValue({\n\t\t\t...value,\n\t\t\toptions: {\n\t\t\t\t...value.options,\n\t\t\t\t[field.id]: nextValue,\n\t\t\t},\n\t\t});\n\t};\n\n\tconst handleSubmit = async (event: FormEvent<HTMLFormElement>) => {\n\t\tevent.preventDefault();\n\t\tif (!onSubmit || resolvedSubmitting) return;\n\n\t\tsetInternalSubmitting(true);\n\t\ttry {\n\t\t\tawait onSubmit(value);\n\t\t} catch (error) {\n\t\t\tif (import.meta.env?.DEV) {\n\t\t\t\tconsole.warn('[ProductVariantEditor] Submit failed.', error);\n\t\t\t}\n\t\t\tonError?.(error);\n\t\t} finally {\n\t\t\tsetInternalSubmitting(false);\n\t\t}\n\t};\n\n\tconst defaultFooter = (\n\t\t<div className=\"product-variant-editor--footer flex flex-col-reverse gap-space-md @sm/product-variant-editor:flex-row @sm/product-variant-editor:items-center @sm/product-variant-editor:justify-between\">\n\t\t\t<div>\n\t\t\t\t{!!onDelete && (\n\t\t\t\t\t<Button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\ttone=\"destructive\"\n\t\t\t\t\t\tbuttonStyle=\"ghost\"\n\t\t\t\t\t\tonClick={() => onDelete(value)}\n\t\t\t\t\t\tdisabled={isDisabled}\n\t\t\t\t\t>\n\t\t\t\t\t\t{strings.deleteLabel}\n\t\t\t\t\t</Button>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t\t<div className=\"flex flex-col-reverse gap-space-md @sm/product-variant-editor:flex-row @sm/product-variant-editor:justify-end\">\n\t\t\t\t{!!onCancel && (\n\t\t\t\t\t<Button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\ttone=\"secondary\"\n\t\t\t\t\t\tbuttonStyle=\"ghost\"\n\t\t\t\t\t\tonClick={onCancel}\n\t\t\t\t\t\tdisabled={isDisabled}\n\t\t\t\t\t>\n\t\t\t\t\t\t{strings.cancelLabel}\n\t\t\t\t\t</Button>\n\t\t\t\t)}\n\t\t\t\t{!!onSubmit && (\n\t\t\t\t\t<Button tone=\"primary\"\n\t\t\t\t\t\ttype=\"submit\"\n\t\t\t\t\t\tform={formId}\n\t\t\t\t\t\tdisabled={isDisabled}\n\t\t\t\t\t>\n\t\t\t\t\t\t{resolvedSubmitting ? strings.savingLabel : strings.saveLabel}\n\t\t\t\t\t</Button>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t</div>\n\t);\n\tconst hasDefaultFooter = !!(onDelete || onCancel || onSubmit);\n\n\treturn (\n\t\t<ContentBlock\n\t\t\ttitle={strings.title}\n\t\t\tdescription={strings.description}\n\t\t\tactions={actions}\n\t\t\theaderEnd={headerEnd}\n\t\t\tfooterSlot={footerSlot}\n\t\t\t/*\n\t\t\t * The editor is a query container and its field pairs, footer, and\n\t\t\t * description span all switch on its width. It is mounted in a drawer or\n\t\t\t * a detail rail far more often than at page width; keyed to the viewport\n\t\t\t * it kept two-up fields in a 320px drawer on a desktop screen, at ~150px\n\t\t\t * a field. The 384px tier holds the two-column layout everywhere it\n\t\t\t * already renders — the narrowest is the 439px variant-details example —\n\t\t\t * and drops to one column below that.\n\t\t\t */\n\t\t\tclassName={cn('product-variant-editor--component @container/product-variant-editor w-full', className)}\n\t\t>\n\t\t\t<Stack render={<form id={formId} onSubmit={handleSubmit} />} gap=\"2xl\" className=\"product-variant-editor--form\">\n\t\t\t\t<section className=\"product-variant-editor--section grid gap-space-lg\">\n\t\t\t\t\t<Text type=\"inherit\" weight=\"semibold\">{strings.identityTitle}</Text>\n\t\t\t\t\t<div className=\"grid gap-space-lg @sm/product-variant-editor:grid-cols-2\">\n\t\t\t\t\t\t<FormField label={strings.fields.name} required>\n\t\t\t\t\t\t\t<Input\n\t\t\t\t\t\t\t\tvalue={value.name ?? ''}\n\t\t\t\t\t\t\t\tonChange={(event) => updateField('name', event.target.value)}\n\t\t\t\t\t\t\t\tplaceholder={strings.placeholders.name}\n\t\t\t\t\t\t\t\tdisabled={isDisabled}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</FormField>\n\t\t\t\t\t\t<FormField label={strings.fields.sku}>\n\t\t\t\t\t\t\t<Input\n\t\t\t\t\t\t\t\tvalue={value.sku ?? ''}\n\t\t\t\t\t\t\t\tonChange={(event) => updateField('sku', event.target.value)}\n\t\t\t\t\t\t\t\tplaceholder={strings.placeholders.sku}\n\t\t\t\t\t\t\t\tdisabled={isDisabled}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</FormField>\n\t\t\t\t\t\t<FormField label={strings.fields.description} className=\"@sm/product-variant-editor:col-span-2\">\n\t\t\t\t\t\t\t<Textarea\n\t\t\t\t\t\t\t\tvalue={value.description ?? ''}\n\t\t\t\t\t\t\t\tonChange={(event) => updateField('description', event.target.value)}\n\t\t\t\t\t\t\t\tplaceholder={strings.placeholders.description}\n\t\t\t\t\t\t\t\tdisabled={isDisabled}\n\t\t\t\t\t\t\t\tautoResize\n\t\t\t\t\t\t\t\tminRows={2}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</FormField>\n\t\t\t\t\t</div>\n\t\t\t\t</section>\n\n\t\t\t\t<section className=\"product-variant-editor--section grid gap-space-lg\">\n\t\t\t\t\t<Text type=\"inherit\" weight=\"semibold\">{strings.commercialTitle}</Text>\n\t\t\t\t\t<div className=\"grid gap-space-lg @sm/product-variant-editor:grid-cols-2\">\n\t\t\t\t\t\t<FormField label={strings.fields.price}>\n\t\t\t\t\t\t\t<Input\n\t\t\t\t\t\t\t\tvalue={value.price ?? ''}\n\t\t\t\t\t\t\t\tonChange={(event) => updateField('price', event.target.value)}\n\t\t\t\t\t\t\t\tplaceholder={strings.placeholders.price}\n\t\t\t\t\t\t\t\tdisabled={isDisabled}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</FormField>\n\t\t\t\t\t\t<FormField label={strings.fields.inventory}>\n\t\t\t\t\t\t\t<Input\n\t\t\t\t\t\t\t\tvalue={value.inventory ?? ''}\n\t\t\t\t\t\t\t\tonChange={(event) => updateField('inventory', event.target.value)}\n\t\t\t\t\t\t\t\tplaceholder={strings.placeholders.inventory}\n\t\t\t\t\t\t\t\tdisabled={isDisabled}\n\t\t\t\t\t\t\t\tinputMode=\"numeric\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</FormField>\n\t\t\t\t\t\t<FormField label={strings.fields.status}>\n\t\t\t\t\t\t\t{statusOptions.length > 0 ? (\n\t\t\t\t\t\t\t\t<Select\n\t\t\t\t\t\t\t\t\toptions={toSelectOptions(statusOptions)}\n\t\t\t\t\t\t\t\t\tvalue={value.status ?? null}\n\t\t\t\t\t\t\t\t\tonValueChange={(nextValue) => updateField('status', nextValue ?? '')}\n\t\t\t\t\t\t\t\t\tplaceholder={strings.statusPlaceholder}\n\t\t\t\t\t\t\t\t\tdisabled={isDisabled}\n\t\t\t\t\t\t\t\t\taria-label={strings.fields.status}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<Input\n\t\t\t\t\t\t\t\t\tvalue={value.status ?? ''}\n\t\t\t\t\t\t\t\t\tonChange={(event) => updateField('status', event.target.value)}\n\t\t\t\t\t\t\t\t\tplaceholder={strings.placeholders.status}\n\t\t\t\t\t\t\t\t\tdisabled={isDisabled}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</FormField>\n\t\t\t\t\t\t<FormField label={strings.fields.channels}>\n\t\t\t\t\t\t\t<Input\n\t\t\t\t\t\t\t\tvalue={value.channels ?? ''}\n\t\t\t\t\t\t\t\tonChange={(event) => updateField('channels', event.target.value)}\n\t\t\t\t\t\t\t\tplaceholder={strings.placeholders.channels}\n\t\t\t\t\t\t\t\tdisabled={isDisabled}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</FormField>\n\t\t\t\t\t</div>\n\t\t\t\t</section>\n\n\t\t\t\t{!!optionFields.length && (\n\t\t\t\t\t<section className=\"product-variant-editor--section grid gap-space-lg\">\n\t\t\t\t\t\t<Text type=\"inherit\" weight=\"semibold\">{strings.optionsTitle}</Text>\n\t\t\t\t\t\t<div className=\"grid gap-space-lg @sm/product-variant-editor:grid-cols-2\">\n\t\t\t\t\t\t\t{optionFields.map((field) => {\n\t\t\t\t\t\t\t\tconst fieldValue = field.value ?? value.options?.[field.id] ?? '';\n\t\t\t\t\t\t\t\tconst hasChoices = !!field.choices?.length;\n\n\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t<FormField\n\t\t\t\t\t\t\t\t\t\tkey={field.id}\n\t\t\t\t\t\t\t\t\t\tlabel={field.label}\n\t\t\t\t\t\t\t\t\t\thelperText={field.helperText}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{hasChoices ? (\n\t\t\t\t\t\t\t\t\t\t\t<Select\n\t\t\t\t\t\t\t\t\t\t\t\toptions={toSelectOptions(field.choices ?? [])}\n\t\t\t\t\t\t\t\t\t\t\t\tvalue={fieldValue || null}\n\t\t\t\t\t\t\t\t\t\t\t\tonValueChange={(nextValue) => updateOption(field, nextValue)}\n\t\t\t\t\t\t\t\t\t\t\t\tplaceholder={field.placeholder ?? strings.optionPlaceholder}\n\t\t\t\t\t\t\t\t\t\t\t\tdisabled={isDisabled}\n\t\t\t\t\t\t\t\t\t\t\t\taria-label={field.label}\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t\t<Input\n\t\t\t\t\t\t\t\t\t\t\t\tvalue={fieldValue}\n\t\t\t\t\t\t\t\t\t\t\t\tonChange={(event) => updateOption(field, event.target.value)}\n\t\t\t\t\t\t\t\t\t\t\t\tplaceholder={field.placeholder ?? strings.optionPlaceholder}\n\t\t\t\t\t\t\t\t\t\t\t\tdisabled={isDisabled}\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t</FormField>\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</section>\n\t\t\t\t)}\n\t\t\t\t{/* The default commands close the form, so the form's section gap owns their space; a consumer footerSlot replaces them in the footer. */}\n\t\t\t\t{(footerSlot === undefined || footerSlot === null) && hasDefaultFooter && defaultFooter}\n\t\t\t</Stack>\n\t\t</ContentBlock>\n\t);\n}\n\nProductVariantEditor.displayName = 'ProductVariantEditor';\n","import {compositionRhythm} from '../../../base/structure/composition.recipes';\nimport { Copy, Eye, Pencil, Plus, Trash2 } from 'lucide-react';\nimport { Fragment, useCallback, useMemo, useRef, useState, type ReactNode } from 'react';\n\nimport { Badge } from '../../../base/badge';\nimport { BatchActionBar } from '../../../base/batch-action-bar';\nimport { Button } from '../../../base/buttons';\nimport { ContentBlock } from '../../../base/display';\nimport { Checkbox } from '../../../base/choice-inputs';\nimport { Input } from '../../../base/text-inputs';\nimport {\n\tTable,\n\tTableBody,\n\tTableCell,\n\tTableHead,\n\tTableHeader,\n\tTableRow,\n} from '../../../base/table';\nimport { Stack } from '../../../base/structure';\nimport { SecondaryValue, Value } from '../../../primitives';\nimport { DisplayLabel, Text } from '../../../typography';\nimport { useStrings } from '../../../../lib/strings';\nimport { cn } from '../../../../lib/utils';\n\nimport {\n\tdefaultProductVariantsBulkTableStrings,\n} from '../products.strings';\nimport type {\n\tProductOptionGroup,\n\tProductVariantBulkActionContext,\n\tProductVariantCellDisplay,\n\tProductVariantCellDisplayConfig,\n\tProductVariantCellRenderContext,\n\tProductVariantEditableField,\n\tProductVariantFieldChangeContext,\n\tProductVariantOptionCombinationDisplay,\n\tProductVariantRow,\n\tProductVariantSelectionMode,\n\tProductVariantsBulkTableColumn,\n\tProductVariantsBulkTableProps,\n} from '../products.types';\nimport { ProductEmptyState } from '../partials/product-empty-state';\nimport { ProductRowActions } from '../partials/product-actions';\nimport { PRODUCT_EMPTY_VALUE } from '../partials/product-values';\n\nconst DEFAULT_VISIBLE_COLUMNS: ProductVariantsBulkTableColumn[] = ['variant', 'sku', 'price', 'inventory', 'status'];\nconst DEFAULT_OPTION_COMBINATION_DISPLAY: ProductVariantOptionCombinationDisplay = 'text';\nconst DEFAULT_CELL_DISPLAY: ProductVariantCellDisplay = 'text';\nconst DEFAULT_SELECTION_MODE: ProductVariantSelectionMode = 'multiple';\n\nfunction getPlainText(value: unknown): string {\n\tif (typeof value === 'string' || typeof value === 'number') return String(value);\n\treturn '';\n}\n\nfunction getOptionValue(variant: ProductVariantRow, option: ProductOptionGroup) {\n\tconst directValue = variant.optionValues?.[option.id];\n\tif (directValue !== undefined && directValue !== null && directValue !== false && directValue !== '') {\n\t\treturn directValue;\n\t}\n\n\tconst valueId = variant.optionValueIds?.[option.id];\n\tconst matchedValue = option.values?.find((value) => value.id === valueId);\n\treturn matchedValue?.label ?? undefined;\n}\n\nfunction getVariantName(variant: ProductVariantRow, optionGroups: ProductOptionGroup[]) {\n\tif (variant.name !== undefined && variant.name !== null && variant.name !== '') {\n\t\treturn variant.name;\n\t}\n\n\tconst derivedName = optionGroups\n\t\t.filter((option) => option.usedForVariants !== false)\n\t\t.map((option) => getOptionValue(variant, option))\n\t\t.filter((value): value is NonNullable<typeof value> => value !== undefined && value !== null && value !== '')\n\t\t.map((value) => getPlainText(value))\n\t\t.filter(Boolean)\n\t\t.join(' / ');\n\n\treturn derivedName || PRODUCT_EMPTY_VALUE;\n}\n\nfunction getVariantOptionSummary(variant: ProductVariantRow, optionGroups: ProductOptionGroup[]) {\n\treturn optionGroups\n\t\t.filter((option) => option.usedForVariants !== false)\n\t\t.map((option) => getOptionValue(variant, option))\n\t\t.filter((value): value is NonNullable<typeof value> => value !== undefined && value !== null && value !== '');\n}\n\nfunction getOptionCombinationLabel(values: ReactNode[]) {\n\treturn values.map(getPlainText).filter(Boolean).join(' / ');\n}\n\nfunction getGroupLabel(variant: ProductVariantRow, option: ProductOptionGroup) {\n\tconst value = getOptionValue(variant, option);\n\tconst label = getPlainText(value);\n\treturn label || PRODUCT_EMPTY_VALUE;\n}\n\nfunction selectedIdsToRows(ids: string[], rowById: Map<string, ProductVariantRow>): ProductVariantRow[] {\n\treturn ids.map((id) => rowById.get(id)).filter((row): row is ProductVariantRow => !!row);\n}\n\nfunction renderFieldValue(value: ReactNode | undefined) {\n\tif (value === undefined || value === null || value === '') return PRODUCT_EMPTY_VALUE;\n\treturn value;\n}\n\nfunction hasCellValue(value: ReactNode | undefined) {\n\treturn value !== undefined && value !== null && value !== '';\n}\n\nfunction isEditableField(column: ProductVariantsBulkTableColumn): column is ProductVariantEditableField {\n\treturn column === 'sku' || column === 'price' || column === 'inventory';\n}\n\nfunction resolveCellDisplay(display: ProductVariantCellDisplayConfig, field: ProductVariantEditableField): ProductVariantCellDisplay {\n\tif (display === 'text' || display === 'field') return display;\n\treturn display[field] ?? DEFAULT_CELL_DISPLAY;\n}\n\nfunction getFieldChangeContext(\n\tindex: number,\n\tfield: ProductVariantEditableField,\n\tpreviousValue: ReactNode | undefined,\n\tvalue: string,\n): ProductVariantFieldChangeContext {\n\treturn {\n\t\tindex,\n\t\tfield,\n\t\tpreviousValue,\n\t\tvalue,\n\t};\n}\n\nfunction renderVariantCellValue(\n\tvalue: ReactNode | undefined,\n\tlabel: string,\n\tdisplay: ProductVariantCellDisplay,\n\tonValueChange?: (value: string) => void,\n\tonBlur?: (value: string) => void,\n) {\n\tconst plainValue = getPlainText(value);\n\n\tif (display === 'field') {\n\t\tconst canEdit = !!onValueChange;\n\n\t\treturn (\n\t\t\t<Input\n\t\t\t\treadOnly={!canEdit}\n\t\t\t\tvalue={plainValue}\n\t\t\t\tonChange={canEdit ? (event) => onValueChange(event.currentTarget.value) : undefined}\n\t\t\t\tonBlur={onBlur ? (event) => onBlur(event.currentTarget.value) : undefined}\n\t\t\t\taria-label={label}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'h-control-lg w-full min-w-24 bg-background px-control shadow-xs',\n\t\t\t\t\t!canEdit && 'text-muted-foreground',\n\t\t\t\t)}\n\t\t\t/>\n\t\t);\n\t}\n\n\tconst Primitive = hasCellValue(value) ? Value : SecondaryValue;\n\n\treturn (\n\t\t<Primitive className=\"min-w-0 whitespace-normal break-words tabular-nums\">\n\t\t\t{renderFieldValue(value)}\n\t\t</Primitive>\n\t);\n}\n\nexport function ProductVariantsBulkTable({\n\tvariants = [],\n\toptionGroups = [],\n\tgroupByOptionId,\n\tvisibleColumns = DEFAULT_VISIBLE_COLUMNS,\n\toptionCombinationDisplay = DEFAULT_OPTION_COMBINATION_DISPLAY,\n\tcellDisplay = DEFAULT_CELL_DISPLAY,\n\tselectionMode,\n\trenderOptionCombination,\n\trenderCell,\n\tselectedVariantIds,\n\tdefaultSelectedVariantIds = [],\n\tonSelectedVariantIdsChange,\n\tonVariantFieldChange,\n\tonVariantFieldBlur,\n\tonCreateVariant,\n\tonGenerateVariants,\n\tonSelectVariant,\n\tonEditVariant,\n\tonDuplicateVariant,\n\tonDeleteVariant,\n\tonBulkEdit,\n\tonBulkApply,\n\tonBulkDelete,\n\trenderVariantActions,\n\trenderBulkActions,\n\tactions,\n\theaderEnd,\n\tfooterSlot,\n\tempty,\n\tsurface = 'card',\n\tclassName,\n\tstrings: stringsProp,\n}: ProductVariantsBulkTableProps) {\n\tconst strings = useStrings(defaultProductVariantsBulkTableStrings, stringsProp);\n\tconst isSelectionControlled = selectedVariantIds !== undefined;\n\tconst [internalSelectedIds, setInternalSelectedIds] = useState(defaultSelectedVariantIds);\n\tconst hasBulkActions = !!(renderBulkActions || onBulkEdit || onBulkApply || onBulkDelete);\n\tconst resolvedSelectionMode = selectionMode\n\t\t?? (hasBulkActions || isSelectionControlled || !!onSelectedVariantIdsChange ? DEFAULT_SELECTION_MODE : 'none');\n\tconst isSelectable = resolvedSelectionMode === 'multiple';\n\tconst selectedIds = useMemo(\n\t\t() => (isSelectable ? (isSelectionControlled ? selectedVariantIds : internalSelectedIds) : []),\n\t\t[internalSelectedIds, isSelectable, isSelectionControlled, selectedVariantIds],\n\t);\n\tconst rowById = useMemo(\n\t\t() => new Map(variants.map((variant) => [variant.id, variant])),\n\t\t[variants],\n\t);\n\tconst selectedRows = useMemo(\n\t\t() => selectedIdsToRows(selectedIds, rowById),\n\t\t[rowById, selectedIds],\n\t);\n\tconst selectedIdSet = useMemo(() => new Set(selectedIds), [selectedIds]);\n\tconst visibleColumnSet = useMemo(() => new Set(visibleColumns), [visibleColumns]);\n\tconst groupByOption = useMemo(\n\t\t() => optionGroups.find((option) => option.id === groupByOptionId),\n\t\t[optionGroups, groupByOptionId],\n\t);\n\tconst rowIndexById = useMemo(\n\t\t() => new Map(variants.map((variant, index) => [variant.id, index])),\n\t\t[variants],\n\t);\n\tconst orderedVariants = useMemo(() => {\n\t\tif (!groupByOption) return variants;\n\t\tconst valueOrder = new Map((groupByOption.values ?? []).map((value, index) => [value.id, index]));\n\n\t\treturn [...variants].sort((a, b) => {\n\t\t\tconst aValueId = a.optionValueIds?.[groupByOption.id];\n\t\t\tconst bValueId = b.optionValueIds?.[groupByOption.id];\n\t\t\tconst aOrder = aValueId !== undefined ? valueOrder.get(aValueId) : undefined;\n\t\t\tconst bOrder = bValueId !== undefined ? valueOrder.get(bValueId) : undefined;\n\t\t\tconst resolvedAOrder = aOrder ?? Number.MAX_SAFE_INTEGER;\n\t\t\tconst resolvedBOrder = bOrder ?? Number.MAX_SAFE_INTEGER;\n\t\t\tif (resolvedAOrder !== resolvedBOrder) return resolvedAOrder - resolvedBOrder;\n\t\t\treturn (rowIndexById.get(a.id) ?? 0) - (rowIndexById.get(b.id) ?? 0);\n\t\t});\n\t}, [groupByOption, rowIndexById, variants]);\n\tconst groupCounts = useMemo(() => {\n\t\tif (!groupByOption) return new Map<string, number>();\n\t\tconst counts = new Map<string, number>();\n\t\tvariants.forEach((variant) => {\n\t\t\tconst label = getGroupLabel(variant, groupByOption);\n\t\t\tcounts.set(label, (counts.get(label) ?? 0) + 1);\n\t\t});\n\t\treturn counts;\n\t}, [groupByOption, variants]);\n\tconst hasBulkControls = isSelectable && hasBulkActions;\n\tconst hasRows = variants.length > 0;\n\tconst allRowsSelected = isSelectable && hasRows && variants.every((variant) => selectedIdSet.has(variant.id));\n\tconst someRowsSelected = selectedRows.length > 0 && !allRowsSelected;\n\t// Where focus lands when the bulk bar goes away with focus inside it.\n\tconst selectAllRef = useRef<HTMLElement>(null);\n\tconst hasRowActions = !!(\n\t\tonSelectVariant ||\n\t\tonEditVariant ||\n\t\tonDuplicateVariant ||\n\t\tonDeleteVariant ||\n\t\trenderVariantActions\n\t);\n\tconst visibleColumnCount = visibleColumns.filter((column) => visibleColumnSet.has(column)).length;\n\tconst tableColumnCount = visibleColumnCount + (isSelectable ? 1 : 0) + (hasRowActions ? 1 : 0);\n\n\tconst updateSelection = useCallback(\n\t\t(nextIds: string[]) => {\n\t\t\tconst nextRows = selectedIdsToRows(nextIds, rowById);\n\t\t\tif (!isSelectionControlled) {\n\t\t\t\tsetInternalSelectedIds(nextIds);\n\t\t\t}\n\t\t\tonSelectedVariantIdsChange?.(nextIds, nextRows);\n\t\t},\n\t\t[isSelectionControlled, onSelectedVariantIdsChange, rowById],\n\t);\n\n\tconst clearSelection = useCallback(() => updateSelection([]), [updateSelection]);\n\tconst toggleRow = useCallback(\n\t\t(variant: ProductVariantRow, checked: boolean | 'indeterminate') => {\n\t\t\tif (!isSelectable) return;\n\t\t\tconst shouldSelect = checked === true;\n\t\t\tconst nextIds = shouldSelect\n\t\t\t\t? Array.from(new Set([...selectedIds, variant.id]))\n\t\t\t\t: selectedIds.filter((id) => id !== variant.id);\n\t\t\tupdateSelection(nextIds);\n\t\t},\n\t\t[isSelectable, selectedIds, updateSelection],\n\t);\n\tconst toggleAll = useCallback(\n\t\t(checked: boolean | 'indeterminate') => {\n\t\t\tif (!isSelectable) return;\n\t\t\tupdateSelection(checked === true ? variants.map((variant) => variant.id) : []);\n\t\t},\n\t\t[isSelectable, updateSelection, variants],\n\t);\n\n\tconst bulkContext: ProductVariantBulkActionContext = {\n\t\tselectedRows,\n\t\tselectedIds,\n\t\tallRows: variants,\n\t\tselectedCount: selectedRows.length,\n\t\ttotalCount: variants.length,\n\t\tallRowsSelected,\n\t\tclearSelection,\n\t\tsetSelectedIds: updateSelection,\n\t};\n\n\tconst headerAction = (onCreateVariant || onGenerateVariants) ? (\n\t\t<Stack direction=\"horizontal\" gap={compositionRhythm.commands} justify=\"end\" className=\"product-variants-bulk-table--header-actions\">\n\t\t\t{!!onGenerateVariants && (\n\t\t\t\t<Button type=\"button\" tone=\"secondary\" buttonStyle=\"outline\" onClick={onGenerateVariants}>\n\t\t\t\t\t{strings.generateLabel}\n\t\t\t\t</Button>\n\t\t\t)}\n\t\t\t{!!onCreateVariant && (\n\t\t\t\t<Button type=\"button\" tone=\"secondary\" buttonStyle=\"ghost\" onClick={onCreateVariant} icon={Plus}>\n\t\t\t\t\t{strings.createLabel}\n\t\t\t\t</Button>\n\t\t\t)}\n\t\t</Stack>\n\t) : undefined;\n\n\tconst customBulkActions = selectedRows.length > 0 ? renderBulkActions?.(bulkContext) : undefined;\n\t/*\n\t * The shared base BatchActionBar, inline: a docked bar would cover the rows\n\t * being selected. It renders nothing until a variant is selected, and\n\t * `renderBulkActions` replaces the default commands.\n\t */\n\tconst bulkToolbar = hasBulkControls ? (\n\t\t<BatchActionBar\n\t\t\tplacement=\"inline\"\n\t\t\tclassName=\"product-variants-bulk-table--bulk-toolbar\"\n\t\t\tselectedCount={selectedRows.length}\n\t\t\ttotalCount={variants.length}\n\t\t\tonClear={clearSelection}\n\t\t\treturnFocusRef={selectAllRef}\n\t\t\tstrings={{\n\t\t\t\tsummary: (count, total) => strings.selectedLabel(count, total ?? variants.length),\n\t\t\t\tclear: strings.clearSelectionLabel,\n\t\t\t}}\n\t\t>\n\t\t\t{customBulkActions ?? (\n\t\t\t\t<>\n\t\t\t\t\t{!!onBulkEdit && (\n\t\t\t\t\t\t<Button type=\"button\" onClick={() => onBulkEdit(selectedRows)}>\n\t\t\t\t\t\t\t{strings.bulkEditLabel}\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t)}\n\t\t\t\t\t{!!onBulkApply && (\n\t\t\t\t\t\t<Button type=\"button\" tone=\"neutral\" buttonStyle=\"ghost\" onClick={() => onBulkApply(selectedRows)}>\n\t\t\t\t\t\t\t{strings.bulkApplyLabel}\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t)}\n\t\t\t\t\t{/* Destructive commands stay last, after every other bulk command. */}\n\t\t\t\t\t{!!onBulkDelete && (\n\t\t\t\t\t\t<Button type=\"button\" tone=\"destructive\" buttonStyle=\"ghost\" onClick={() => onBulkDelete(selectedRows)}>\n\t\t\t\t\t\t\t{strings.bulkDeleteLabel}\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t)}\n\t\t\t\t</>\n\t\t\t)}\n\t\t</BatchActionBar>\n\t) : null;\n\n\tconst content = variants.length === 0 ? (\n\t\tempty ?? (\n\t\t\t<ProductEmptyState\n\t\t\t\ttitle={strings.emptyTitle}\n\t\t\t\tdescription={strings.emptyDescription}\n\t\t\t\taction={onGenerateVariants ? (\n\t\t\t\t\t<Button tone=\"primary\" type=\"button\" onClick={onGenerateVariants}>\n\t\t\t\t\t\t{strings.generateLabel}\n\t\t\t\t\t</Button>\n\t\t\t\t) : undefined}\n\t\t\t/>\n\t\t)\n\t) : (\n\t\t<Stack gap=\"md\" className=\"product-variants-bulk-table--body\">\n\t\t\t{bulkToolbar}\n\t\t\t<div\n\t\t\t\tclassName=\"product-variants-bulk-table--table overflow-hidden rounded-radius border border-border bg-background text-foreground\"\n\t\t\t>\n\t\t\t\t<Table\n\t\t\t\t\tcontainerClassName=\"[scrollbar-gutter:stable] [scrollbar-width:thin] [&::-webkit-scrollbar]:h-2.5 [&::-webkit-scrollbar-thumb]:rounded-full [&::-webkit-scrollbar-thumb]:bg-border [&::-webkit-scrollbar-track]:bg-muted/30\"\n\t\t\t\t\tclassName=\"w-full border-collapse\"\n\t\t\t\t>\n\t\t\t\t\t\t<colgroup>\n\t\t\t\t\t\t\t{isSelectable && <col className=\"w-14 min-w-14 max-w-14\" />}\n\t\t\t\t\t\t\t{visibleColumnSet.has('variant') && <col />}\n\t\t\t\t\t\t\t{visibleColumnSet.has('sku') && <col />}\n\t\t\t\t\t\t\t{visibleColumnSet.has('price') && <col />}\n\t\t\t\t\t\t\t{visibleColumnSet.has('inventory') && <col />}\n\t\t\t\t\t\t\t{visibleColumnSet.has('status') && <col />}\n\t\t\t\t\t\t\t{visibleColumnSet.has('updated') && <col />}\n\t\t\t\t\t\t\t{hasRowActions && <col className=\"w-18\" />}\n\t\t\t\t\t\t</colgroup>\n\t\t\t\t\t\t<TableHeader>\n\t\t\t\t\t\t\t<TableRow className=\"h-12 border-b border-border/60 bg-muted/50\">\n\t\t\t\t\t\t\t\t{isSelectable && (\n\t\t\t\t\t\t\t\t\t<TableHead className=\"w-14 min-w-14 max-w-14 px-0 py-space-md text-center align-middle\">\n\t\t\t\t\t\t\t\t\t\t<Checkbox\n\t\t\t\t\t\t\t\t\t\t\tref={selectAllRef}\n\t\t\t\t\t\t\t\t\t\t\tchecked={allRowsSelected}\n\t\t\t\t\t\t\t\t\t\t\tindeterminate={someRowsSelected}\n\t\t\t\t\t\t\t\t\t\t\tonCheckedChange={toggleAll}\n\t\t\t\t\t\t\t\t\t\t\taria-label={strings.selectAllLabel}\n\t\t\t\t\t\t\t\t\t\t\tclassName=\"mx-auto\"\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t</TableHead>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t{visibleColumnSet.has('variant') && (\n\t\t\t\t\t\t\t\t\t<TableHead className=\"px-space-lg py-space-md text-left align-middle\">\n\t\t\t\t\t\t\t\t\t\t<DisplayLabel className=\"whitespace-normal\">\n\t\t\t\t\t\t\t\t\t\t\t{strings.headers.variant}\n\t\t\t\t\t\t\t\t\t\t</DisplayLabel>\n\t\t\t\t\t\t\t\t\t</TableHead>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t{visibleColumnSet.has('sku') && (\n\t\t\t\t\t\t\t\t\t<TableHead className=\"px-space-lg py-space-md text-left align-middle\">\n\t\t\t\t\t\t\t\t\t\t<DisplayLabel className=\"whitespace-normal\">\n\t\t\t\t\t\t\t\t\t\t\t{strings.headers.sku}\n\t\t\t\t\t\t\t\t\t\t</DisplayLabel>\n\t\t\t\t\t\t\t\t\t</TableHead>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t{visibleColumnSet.has('price') && (\n\t\t\t\t\t\t\t\t\t<TableHead className=\"px-space-lg py-space-md text-left align-middle\">\n\t\t\t\t\t\t\t\t\t\t<DisplayLabel className=\"whitespace-normal\">\n\t\t\t\t\t\t\t\t\t\t\t{strings.headers.price}\n\t\t\t\t\t\t\t\t\t\t</DisplayLabel>\n\t\t\t\t\t\t\t\t\t</TableHead>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t{visibleColumnSet.has('inventory') && (\n\t\t\t\t\t\t\t\t\t<TableHead className=\"px-space-lg py-space-md text-left align-middle\">\n\t\t\t\t\t\t\t\t\t\t<DisplayLabel className=\"whitespace-normal\">\n\t\t\t\t\t\t\t\t\t\t\t{strings.headers.inventory}\n\t\t\t\t\t\t\t\t\t\t</DisplayLabel>\n\t\t\t\t\t\t\t\t\t</TableHead>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t{visibleColumnSet.has('status') && (\n\t\t\t\t\t\t\t\t\t<TableHead className=\"px-space-lg py-space-md text-left align-middle\">\n\t\t\t\t\t\t\t\t\t\t<DisplayLabel className=\"whitespace-normal\">\n\t\t\t\t\t\t\t\t\t\t\t{strings.headers.status}\n\t\t\t\t\t\t\t\t\t\t</DisplayLabel>\n\t\t\t\t\t\t\t\t\t</TableHead>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t{visibleColumnSet.has('updated') && (\n\t\t\t\t\t\t\t\t\t<TableHead className=\"px-space-lg py-space-md text-left align-middle\">\n\t\t\t\t\t\t\t\t\t\t<DisplayLabel className=\"whitespace-normal\">\n\t\t\t\t\t\t\t\t\t\t\t{strings.headers.updated}\n\t\t\t\t\t\t\t\t\t\t</DisplayLabel>\n\t\t\t\t\t\t\t\t\t</TableHead>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t{hasRowActions && (\n\t\t\t\t\t\t\t\t\t<TableHead className=\"px-space-lg py-space-md text-right align-middle\">\n\t\t\t\t\t\t\t\t\t\t<DisplayLabel className=\"whitespace-normal\">\n\t\t\t\t\t\t\t\t\t\t\t{strings.headers.actions}\n\t\t\t\t\t\t\t\t\t\t</DisplayLabel>\n\t\t\t\t\t\t\t\t\t</TableHead>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</TableRow>\n\t\t\t\t\t\t</TableHeader>\n\t\t\t\t\t\t<TableBody>\n\t\t\t\t\t\t\t{orderedVariants.map((variant, displayIndex) => {\n\t\t\t\t\t\t\t\tconst index = rowIndexById.get(variant.id) ?? displayIndex;\n\t\t\t\t\t\t\t\tconst groupLabel = groupByOption ? getGroupLabel(variant, groupByOption) : null;\n\t\t\t\t\t\t\t\tconst previousVariant = displayIndex > 0 ? orderedVariants[displayIndex - 1] : undefined;\n\t\t\t\t\t\t\t\tconst previousGroupLabel = groupByOption && previousVariant\n\t\t\t\t\t\t\t\t\t? getGroupLabel(previousVariant, groupByOption)\n\t\t\t\t\t\t\t\t\t: null;\n\t\t\t\t\t\t\t\tconst shouldRenderGroup = !!groupByOption && groupLabel !== previousGroupLabel;\n\t\t\t\t\t\t\t\tconst isSelected = selectedIdSet.has(variant.id);\n\t\t\t\t\t\t\t\tconst actionContext = {\n\t\t\t\t\t\t\t\t\tindex,\n\t\t\t\t\t\t\t\t\tonSelect: onSelectVariant ? () => onSelectVariant(variant) : undefined,\n\t\t\t\t\t\t\t\t\tonEdit: onEditVariant ? () => onEditVariant(variant) : undefined,\n\t\t\t\t\t\t\t\t\tonDuplicate: onDuplicateVariant ? () => onDuplicateVariant(variant) : undefined,\n\t\t\t\t\t\t\t\t\tonDelete: onDeleteVariant ? () => onDeleteVariant(variant) : undefined,\n\t\t\t\t\t\t\t\t\tisSelected,\n\t\t\t\t\t\t\t\t\tonToggleSelected: isSelectable ? (checked: boolean) => toggleRow(variant, checked) : undefined,\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\tconst summaryOptionGroups = groupByOption\n\t\t\t\t\t\t\t\t\t? optionGroups.filter((option) => option.id !== groupByOption.id)\n\t\t\t\t\t\t\t\t\t: optionGroups;\n\t\t\t\t\t\t\t\tconst optionSummary = getVariantOptionSummary(variant, summaryOptionGroups);\n\t\t\t\t\t\t\t\tconst groupedVariantName = groupByOption\n\t\t\t\t\t\t\t\t\t? getVariantName({ ...variant, name: undefined }, summaryOptionGroups)\n\t\t\t\t\t\t\t\t\t: getVariantName(variant, optionGroups);\n\t\t\t\t\t\t\t\tconst variantName = groupedVariantName === PRODUCT_EMPTY_VALUE && groupByOption\n\t\t\t\t\t\t\t\t\t? getVariantName(variant, optionGroups)\n\t\t\t\t\t\t\t\t\t: groupedVariantName;\n\t\t\t\t\t\t\t\tconst optionLabel = getOptionCombinationLabel(optionSummary);\n\t\t\t\t\t\t\t\tconst optionLabelMatchesVariantName = optionLabel === getPlainText(variantName);\n\t\t\t\t\t\t\t\tconst createCellContext = (\n\t\t\t\t\t\t\t\t\tcolumn: ProductVariantsBulkTableColumn,\n\t\t\t\t\t\t\t\t\tvalue: ReactNode | undefined,\n\t\t\t\t\t\t\t\t\tdisplay: ProductVariantCellDisplay = DEFAULT_CELL_DISPLAY,\n\t\t\t\t\t\t\t\t): ProductVariantCellRenderContext => {\n\t\t\t\t\t\t\t\t\tconst onValueChange = isEditableField(column) && onVariantFieldChange\n\t\t\t\t\t\t\t\t\t\t? (nextValue: string) => onVariantFieldChange(\n\t\t\t\t\t\t\t\t\t\t\tvariant,\n\t\t\t\t\t\t\t\t\t\t\tcolumn,\n\t\t\t\t\t\t\t\t\t\t\tnextValue,\n\t\t\t\t\t\t\t\t\t\t\tgetFieldChangeContext(index, column, value, nextValue),\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t: undefined;\n\t\t\t\t\t\t\t\t\tconst onBlur = isEditableField(column) && onVariantFieldBlur\n\t\t\t\t\t\t\t\t\t\t? (nextValue: string) => onVariantFieldBlur(\n\t\t\t\t\t\t\t\t\t\t\tvariant,\n\t\t\t\t\t\t\t\t\t\t\tcolumn,\n\t\t\t\t\t\t\t\t\t\t\tnextValue,\n\t\t\t\t\t\t\t\t\t\t\tgetFieldChangeContext(index, column, value, nextValue),\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t: undefined;\n\n\t\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\t\tindex,\n\t\t\t\t\t\t\t\t\t\tcolumn,\n\t\t\t\t\t\t\t\t\t\tvalue,\n\t\t\t\t\t\t\t\t\t\tvariantName,\n\t\t\t\t\t\t\t\t\t\toptionValues: optionSummary,\n\t\t\t\t\t\t\t\t\t\toptionLabel,\n\t\t\t\t\t\t\t\t\t\tcellDisplay: display,\n\t\t\t\t\t\t\t\t\t\tonValueChange,\n\t\t\t\t\t\t\t\t\t\tonBlur,\n\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\tconst renderCellContent = (\n\t\t\t\t\t\t\t\t\tcolumn: ProductVariantsBulkTableColumn,\n\t\t\t\t\t\t\t\t\tvalue: ReactNode | undefined,\n\t\t\t\t\t\t\t\t\tdisplay: ProductVariantCellDisplay,\n\t\t\t\t\t\t\t\t\tfallback: (context: ProductVariantCellRenderContext) => ReactNode,\n\t\t\t\t\t\t\t\t) => {\n\t\t\t\t\t\t\t\t\tconst context = createCellContext(column, value, display);\n\t\t\t\t\t\t\t\t\tconst rendered = renderCell?.(variant, context);\n\t\t\t\t\t\t\t\t\treturn rendered !== undefined ? rendered : fallback(context);\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\tconst shouldRenderOptionCombination =\n\t\t\t\t\t\t\t\t\toptionCombinationDisplay !== 'none' &&\n\t\t\t\t\t\t\t\t\toptionSummary.length > 0 &&\n\t\t\t\t\t\t\t\t\t(groupByOption ? !optionLabelMatchesVariantName : (optionCombinationDisplay === 'tags' || !optionLabelMatchesVariantName));\n\t\t\t\t\t\t\t\tconst renderedOptionCombination = optionCombinationDisplay !== 'none'\n\t\t\t\t\t\t\t\t\t? renderOptionCombination?.(variant, {\n\t\t\t\t\t\t\t\t\t\toptionGroups,\n\t\t\t\t\t\t\t\t\t\toptionValues: optionSummary,\n\t\t\t\t\t\t\t\t\t\toptionLabel,\n\t\t\t\t\t\t\t\t\t\tdisplay: optionCombinationDisplay,\n\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t: null;\n\t\t\t\t\t\t\t\tconst defaultRowActions = [\n\t\t\t\t\t\t\t\t\t...(onSelectVariant ? [{\n\t\t\t\t\t\t\t\t\t\tid: 'view',\n\t\t\t\t\t\t\t\t\t\tlabel: strings.viewLabel,\n\t\t\t\t\t\t\t\t\t\ticon: <Eye className=\"size-icon-md\" />,\n\t\t\t\t\t\t\t\t\t\tonClick: () => onSelectVariant(variant),\n\t\t\t\t\t\t\t\t\t\ttone: 'secondary' as const, buttonStyle: 'ghost' as const,\n\t\t\t\t\t\t\t\t\t}] : []),\n\t\t\t\t\t\t\t\t\t...(onEditVariant ? [{\n\t\t\t\t\t\t\t\t\t\tid: 'edit',\n\t\t\t\t\t\t\t\t\t\tlabel: strings.editLabel,\n\t\t\t\t\t\t\t\t\t\ticon: <Pencil className=\"size-icon-md\" />,\n\t\t\t\t\t\t\t\t\t\tonClick: () => onEditVariant(variant),\n\t\t\t\t\t\t\t\t\t\ttone: 'secondary' as const, buttonStyle: 'ghost' as const,\n\t\t\t\t\t\t\t\t\t}] : []),\n\t\t\t\t\t\t\t\t\t...(onDuplicateVariant ? [{\n\t\t\t\t\t\t\t\t\t\tid: 'duplicate',\n\t\t\t\t\t\t\t\t\t\tlabel: strings.duplicateLabel,\n\t\t\t\t\t\t\t\t\t\ticon: <Copy className=\"size-icon-md\" />,\n\t\t\t\t\t\t\t\t\t\tonClick: () => onDuplicateVariant(variant),\n\t\t\t\t\t\t\t\t\t\ttone: 'secondary' as const, buttonStyle: 'ghost' as const,\n\t\t\t\t\t\t\t\t\t}] : []),\n\t\t\t\t\t\t\t\t\t...(onDeleteVariant ? [{\n\t\t\t\t\t\t\t\t\t\tid: 'delete',\n\t\t\t\t\t\t\t\t\t\tlabel: strings.deleteLabel,\n\t\t\t\t\t\t\t\t\t\ticon: <Trash2 className=\"size-icon-md\" />,\n\t\t\t\t\t\t\t\t\t\tonClick: () => onDeleteVariant(variant),\n\t\t\t\t\t\t\t\t\t\ttone: 'destructive' as const,\n\t\t\t\t\t\t\t\t\t}] : []),\n\t\t\t\t\t\t\t\t];\n\n\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t<Fragment key={variant.id}>\n\t\t\t\t\t\t\t\t\t\t{shouldRenderGroup && (\n\t\t\t\t\t\t\t\t\t\t\t<TableRow className=\"product-variants-bulk-table--group-row border-b border-border/60 bg-muted/30\">\n\t\t\t\t\t\t\t\t\t\t\t\t<TableCell colSpan={tableColumnCount} className=\"px-space-lg py-space-md align-middle\">\n\t\t\t\t\t\t\t\t\t\t\t<Stack direction=\"horizontal\" gap=\"sm\" wrap={false}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Text type=\"inherit\" tag=\"span\" weight=\"semibold\" className=\"min-w-0 whitespace-normal break-words\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{groupLabel}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Text tag=\"span\" size=\"xs\" type=\"secondary\" className=\"whitespace-nowrap\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{strings.groupCountLabel(groupCounts.get(groupLabel ?? '') ?? 0)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t\t\t\t\t\t\t</TableCell>\n\t\t\t\t\t\t\t\t\t\t\t</TableRow>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t<TableRow className=\"h-20 border-b border-border/60 last:border-b-0\">\n\t\t\t\t\t\t\t\t\t\t{isSelectable && (\n\t\t\t\t\t\t\t\t\t\t\t<TableCell className=\"w-14 min-w-14 max-w-14 px-0 py-space-lg text-center align-middle\">\n\t\t\t\t\t\t\t\t\t\t\t\t<Checkbox\n\t\t\t\t\t\t\t\t\t\t\t\t\tchecked={isSelected}\n\t\t\t\t\t\t\t\t\t\t\t\t\tonCheckedChange={(checked) => toggleRow(variant, checked)}\n\t\t\t\t\t\t\t\t\t\t\t\t\taria-label={strings.selectRowLabel(index)}\n\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"mx-auto\"\n\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t</TableCell>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t{visibleColumnSet.has('variant') && (\n\t\t\t\t\t\t\t\t\t\t\t<TableCell className=\"px-space-lg py-space-lg align-middle\">\n\t\t\t\t\t\t\t\t\t\t\t\t{renderCellContent('variant', variantName, DEFAULT_CELL_DISPLAY, () => (\n\t\t\t\t\t\t\t\t\t\t\t\t<Stack gap=\"xs\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Text type=\"inherit\" weight=\"medium\" className=\"min-w-0 whitespace-normal break-words\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{variantName}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{renderedOptionCombination}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{!renderedOptionCombination && shouldRenderOptionCombination && optionCombinationDisplay === 'text' && (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Text size=\"xs\" type=\"secondary\" className=\"min-w-0 whitespace-normal break-words\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{optionSummary.map((value, valueIndex) => (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span key={`${variant.id}-option-text-${valueIndex}`}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{valueIndex > 0 ? ' / ' : null}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{value}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t{!renderedOptionCombination && shouldRenderOptionCombination && optionCombinationDisplay === 'tags' && (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Stack direction=\"horizontal\" gap=\"xs\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{optionSummary.map((value, valueIndex) => (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Badge\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tkey={`${variant.id}-option-${valueIndex}`}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttone=\"secondary\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"max-w-full\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{value}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Badge>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t\t\t\t</TableCell>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t{visibleColumnSet.has('sku') && (\n\t\t\t\t\t\t\t\t\t\t\t<TableCell className=\"px-space-lg py-space-md align-middle\">\n\t\t\t\t\t\t\t\t\t\t\t\t{renderCellContent('sku', variant.sku, resolveCellDisplay(cellDisplay, 'sku'), (context) => renderVariantCellValue(\n\t\t\t\t\t\t\t\t\t\t\t\t\tvariant.sku,\n\t\t\t\t\t\t\t\t\t\t\t\t\t`${strings.headers.sku}: ${getPlainText(variantName)}`,\n\t\t\t\t\t\t\t\t\t\t\t\t\tcontext.cellDisplay,\n\t\t\t\t\t\t\t\t\t\t\t\t\tcontext.onValueChange,\n\t\t\t\t\t\t\t\t\t\t\t\t\tcontext.onBlur,\n\t\t\t\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t\t\t\t</TableCell>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t{visibleColumnSet.has('price') && (\n\t\t\t\t\t\t\t\t\t\t\t<TableCell className=\"px-space-lg py-space-md align-middle\">\n\t\t\t\t\t\t\t\t\t\t\t\t{renderCellContent('price', variant.price, resolveCellDisplay(cellDisplay, 'price'), (context) => renderVariantCellValue(\n\t\t\t\t\t\t\t\t\t\t\t\t\tvariant.price,\n\t\t\t\t\t\t\t\t\t\t\t\t\t`${strings.headers.price}: ${getPlainText(variantName)}`,\n\t\t\t\t\t\t\t\t\t\t\t\t\tcontext.cellDisplay,\n\t\t\t\t\t\t\t\t\t\t\t\t\tcontext.onValueChange,\n\t\t\t\t\t\t\t\t\t\t\t\t\tcontext.onBlur,\n\t\t\t\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t\t\t\t</TableCell>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t{visibleColumnSet.has('inventory') && (\n\t\t\t\t\t\t\t\t\t\t\t<TableCell className=\"px-space-lg py-space-md align-middle\">\n\t\t\t\t\t\t\t\t\t\t\t\t{renderCellContent('inventory', variant.inventory, resolveCellDisplay(cellDisplay, 'inventory'), (context) => renderVariantCellValue(\n\t\t\t\t\t\t\t\t\t\t\t\t\tvariant.inventory,\n\t\t\t\t\t\t\t\t\t\t\t\t\t`${strings.headers.inventory}: ${getPlainText(variantName)}`,\n\t\t\t\t\t\t\t\t\t\t\t\t\tcontext.cellDisplay,\n\t\t\t\t\t\t\t\t\t\t\t\t\tcontext.onValueChange,\n\t\t\t\t\t\t\t\t\t\t\t\t\tcontext.onBlur,\n\t\t\t\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t\t\t\t</TableCell>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t{visibleColumnSet.has('status') && (\n\t\t\t\t\t\t\t\t\t\t\t<TableCell className=\"px-space-lg py-space-lg align-middle\">\n\t\t\t\t\t\t\t\t\t\t\t\t{renderCellContent('status', variant.status, DEFAULT_CELL_DISPLAY, () => (\n\t\t\t\t\t\t\t\t\t\t\t\t\tvariant.status ? (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Badge tone={variant.statusTone ?? 'secondary'}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{variant.status}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Badge>\n\t\t\t\t\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Text type=\"secondary\">{PRODUCT_EMPTY_VALUE}</Text>\n\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t\t\t\t</TableCell>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t{visibleColumnSet.has('updated') && (\n\t\t\t\t\t\t\t\t\t\t\t<TableCell className=\"px-space-lg py-space-lg align-middle\">\n\t\t\t\t\t\t\t\t\t\t\t\t{/* A date keeps the size and figures of its sibling value cells. */}\n\t\t\t\t\t\t\t\t\t\t\t\t{renderCellContent('updated', variant.updatedAt, DEFAULT_CELL_DISPLAY, () => renderVariantCellValue(\n\t\t\t\t\t\t\t\t\t\t\t\t\tvariant.updatedAt,\n\t\t\t\t\t\t\t\t\t\t\t\t\t`${strings.headers.updated}: ${getPlainText(variantName)}`,\n\t\t\t\t\t\t\t\t\t\t\t\t\t'text',\n\t\t\t\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t\t\t\t</TableCell>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t{hasRowActions && (\n\t\t\t\t\t\t\t\t\t\t\t<TableCell className=\"px-space-lg py-space-lg text-right align-middle\">\n\t\t\t\t\t\t\t\t\t\t\t\t{renderVariantActions ? (\n\t\t\t\t\t\t\t\t\t\t\t\t\trenderVariantActions(variant, actionContext)\n\t\t\t\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t\t\t\t<ProductRowActions\n\t\t\t\t\t\t\t\t\t\t\t\t\t\titem={variant}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tactions={defaultRowActions}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tmenuLabel={strings.headers.actions}\n\t\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t</TableCell>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t</TableRow>\n\t\t\t\t\t\t\t\t\t</Fragment>\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t</TableBody>\n\t\t\t\t</Table>\n\t\t\t</div>\n\t\t</Stack>\n\t);\n\n\tif (surface === 'embedded') {\n\t\treturn (\n\t\t\t<section\n\t\t\t\taria-label={strings.title}\n\t\t\t\tclassName={cn('product-variants-bulk-table--component min-w-0', className)}\n\t\t\t>\n\t\t\t\t{content}\n\t\t\t</section>\n\t\t);\n\t}\n\n\treturn (\n\t\t<ContentBlock\n\t\t\ttitle={strings.title}\n\t\t\tdescription={strings.description}\n\t\t\tactions={actions}\n\t\t\theaderAction={headerAction}\n\t\t\theaderEnd={headerEnd}\n\t\t\tfooterSlot={footerSlot}\n\t\t\tclassName={cn('product-variants-bulk-table--component w-full', className)}\n\t\t>\n\t\t\t{content}\n\t\t</ContentBlock>\n\t);\n}\n\nProductVariantsBulkTable.displayName = 'ProductVariantsBulkTable';\n","import {compositionRhythm} from '../../../base/structure/composition.recipes';\nimport { ListFilter, Plus, Search } from 'lucide-react';\nimport { useCallback, useMemo, useState } from 'react';\n\nimport { Button } from '../../../base/buttons';\nimport { Card } from '../../../base/cards';\nimport { Stack } from '../../../base/structure';\nimport { Select } from '../../../base/choice-inputs';\nimport { Text } from '../../../typography';\nimport { useStrings } from '../../../../lib/strings';\nimport { cn } from '../../../../lib/utils';\nimport { controlGroupHeightClasses, segmentedControlRecipes } from '../../../../lib/control-group-recipes';\nimport { useDensityConfig } from '../../../../lib/ui-provider';\nimport { resolveComponentScale } from '../../../../lib/ui-provider/scale';\n\nimport { defaultProductVariantsManagerStrings } from '../products.strings';\nimport type { ProductVariantsManagerProps } from '../products.types';\nimport { ProductOptionsMatrix } from './product-options-matrix';\nimport { ProductVariantsBulkTable } from './product-variants-bulk-table';\n\nexport function ProductVariantsManager({\n\toptionGroups = [],\n\tvariants = [],\n\tvisibleColumns,\n\toptionCombinationDisplay,\n\tcellDisplay,\n\tselectionMode,\n\trenderOptionCombination,\n\trenderCell,\n\tselectedVariantIds,\n\tdefaultSelectedVariantIds,\n\tonSelectedVariantIdsChange,\n\tonVariantFieldChange,\n\tonVariantFieldBlur,\n\tcollapsedOptionIds,\n\tdefaultCollapsedOptionIds,\n\tonCollapsedOptionIdsChange,\n\teditingOptionId,\n\tdefaultEditingOptionId,\n\tonEditingOptionIdChange,\n\tonCreateOption,\n\tonEditOption,\n\tonDeleteOption,\n\tonAddValue,\n\tonDeleteValue,\n\tonOptionNameChange,\n\tonValueLabelChange,\n\tonDoneEditingOption,\n\tonSaveEditingOption,\n\tonCancelEditingOption,\n\tonToggleUsedForVariants,\n\trenderOptionActions,\n\trenderValue,\n\tonCreateVariant,\n\tonGenerateVariants,\n\tonSelectVariant,\n\tonEditVariant,\n\tonDuplicateVariant,\n\tonDeleteVariant,\n\tonBulkEdit,\n\tonBulkApply,\n\tonBulkDelete,\n\trenderVariantActions,\n\trenderBulkActions,\n\tgroupByOptionId,\n\tdefaultGroupByOptionId,\n\tonGroupByOptionIdChange,\n\tonSearchVariants,\n\tonFilterVariants,\n\tcontrolsEnd,\n\tactions,\n\theaderEnd,\n\tfooterSlot,\n\tsurface = 'flat',\n\tpadding = surface === 'flat' ? 'none' : 'md',\n\theaderDivider,\n\tfooterDivider,\n\tclassName,\n\tstrings: stringsProp,\n\toptionsStrings,\n\tvariantsStrings,\n}: ProductVariantsManagerProps) {\n\tconst { defaultScale } = useDensityConfig();\n\tconst size = resolveComponentScale(undefined, defaultScale);\n\tconst strings = useStrings(defaultProductVariantsManagerStrings, stringsProp);\n\tconst groupableOptions = useMemo(\n\t\t() => optionGroups.filter((option) => option.usedForVariants !== false),\n\t\t[optionGroups],\n\t);\n\tconst fallbackGroupByOptionId = groupableOptions[0]?.id ?? null;\n\tconst isGroupByControlled = groupByOptionId !== undefined;\n\tconst [internalGroupByOptionId, setInternalGroupByOptionId] = useState<string | null>(\n\t\tdefaultGroupByOptionId ?? fallbackGroupByOptionId,\n\t);\n\tconst resolvedGroupByOptionId = groupByOptionId ?? internalGroupByOptionId ?? fallbackGroupByOptionId;\n\tconst groupByOptions = useMemo(\n\t\t() =>\n\t\t\tgroupableOptions.map((option) => ({\n\t\t\t\tvalue: option.id,\n\t\t\t\tlabel: String(typeof option.name === 'string' || typeof option.name === 'number' ? option.name : option.id),\n\t\t\t})),\n\t\t[groupableOptions],\n\t);\n\tconst updateGroupByOptionId = useCallback(\n\t\t(nextId: string | undefined) => {\n\t\t\tconst matchedOption = optionGroups.find((option) => option.id === nextId);\n\t\t\tif (!isGroupByControlled) {\n\t\t\t\tsetInternalGroupByOptionId(nextId ?? null);\n\t\t\t}\n\t\t\tonGroupByOptionIdChange?.(nextId, matchedOption);\n\t\t},\n\t\t[isGroupByControlled, onGroupByOptionIdChange, optionGroups],\n\t);\n\tconst headerAction =\n\t\tonGenerateVariants || onCreateVariant ? (\n\t\t\t<Stack direction=\"horizontal\" gap={compositionRhythm.commands} justify=\"end\" className=\"product-variants-manager--header-actions\">\n\t\t\t\t{!!onGenerateVariants && (\n\t\t\t\t\t<Button type=\"button\" tone=\"secondary\" buttonStyle=\"outline\" onClick={onGenerateVariants}>\n\t\t\t\t\t\t{strings.generateLabel}\n\t\t\t\t\t</Button>\n\t\t\t\t)}\n\t\t\t\t{!!onCreateVariant && (\n\t\t\t\t\t<Button type=\"button\" tone=\"secondary\" buttonStyle=\"outline\" onClick={onCreateVariant} icon={Plus}>\n\t\t\t\t\t\t{strings.createVariantLabel}\n\t\t\t\t\t</Button>\n\t\t\t\t)}\n\t\t\t</Stack>\n\t\t) : undefined;\n\n\treturn (\n\t\t<Card\n\t\t\tsurface={surface}\n\t\t\tpadding={padding}\n\t\t\theaderDivider={headerDivider}\n\t\t\tfooterDivider={footerDivider}\n\t\t\ttitle={strings.title}\n\t\t\tdescription={strings.description}\n\t\t\tactions={actions}\n\t\t\tactionsLabel={strings.actionsLabel}\n\t\t\theaderAction={headerAction}\n\t\t\theaderEnd={headerEnd}\n\t\t\tfooterSlot={footerSlot}\n\t\t\tclassName={cn('product-variants-manager--component w-full', className)}\n\t\t>\n\t\t\t<Stack gap=\"2xl\" className=\"product-variants-manager--body\">\n\t\t\t\t<section className=\"product-variants-manager--options min-w-0\">\n\t\t\t\t\t<ProductOptionsMatrix\n\t\t\t\t\t\toptionGroups={optionGroups}\n\t\t\t\t\t\tcollapsedOptionIds={collapsedOptionIds}\n\t\t\t\t\t\tdefaultCollapsedOptionIds={defaultCollapsedOptionIds}\n\t\t\t\t\t\tonCollapsedOptionIdsChange={onCollapsedOptionIdsChange}\n\t\t\t\t\t\teditingOptionId={editingOptionId}\n\t\t\t\t\t\tdefaultEditingOptionId={defaultEditingOptionId}\n\t\t\t\t\t\tonEditingOptionIdChange={onEditingOptionIdChange}\n\t\t\t\t\t\tsurface=\"embedded\"\n\t\t\t\t\t\tonCreateOption={onCreateOption}\n\t\t\t\t\t\tonEditOption={onEditOption}\n\t\t\t\t\t\tonDeleteOption={onDeleteOption}\n\t\t\t\t\t\tonAddValue={onAddValue}\n\t\t\t\t\t\tonDeleteValue={onDeleteValue}\n\t\t\t\t\t\tonOptionNameChange={onOptionNameChange}\n\t\t\t\t\t\tonValueLabelChange={onValueLabelChange}\n\t\t\t\t\t\tonDoneEditingOption={onDoneEditingOption}\n\t\t\t\t\t\tonSaveEditingOption={onSaveEditingOption}\n\t\t\t\t\t\tonCancelEditingOption={onCancelEditingOption}\n\t\t\t\t\t\tonToggleUsedForVariants={onToggleUsedForVariants}\n\t\t\t\t\t\trenderOptionActions={renderOptionActions}\n\t\t\t\t\t\trenderValue={renderValue}\n\t\t\t\t\t\tshowHeader={false}\n\t\t\t\t\t\tshowCollapseControls={false}\n\t\t\t\t\t\tshowInlineActions={false}\n\t\t\t\t\t\tshowVariantToggle={false}\n\t\t\t\t\t\tstrings={{\n\t\t\t\t\t\t\ttitle: strings.optionsTitle,\n\t\t\t\t\t\t\t...optionsStrings,\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t</section>\n\n\t\t\t\t<Stack gap=\"md\" className=\"product-variants-manager--variants-region\">\n\t\t\t\t\t<div className=\"product-variants-manager--controls\">\n\t\t\t\t\t\t<Stack direction=\"horizontal\" gap=\"md\" justify=\"between\">\n\t\t\t\t\t\t\t<Stack direction=\"horizontal\" gap=\"sm\" wrap={false} className=\"product-variants-manager--group-by\">\n\t\t\t\t\t\t\t\t<Text type=\"secondary\" className=\"whitespace-nowrap\">\n\t\t\t\t\t\t\t\t\t{strings.groupByLabel}\n\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t{groupByOptions.length > 0 && (\n\t\t\t\t\t\t\t\t\t<Select\n\t\t\t\t\t\t\t\t\t\toptions={groupByOptions}\n\t\t\t\t\t\t\t\t\t\tvalue={resolvedGroupByOptionId}\n\t\t\t\t\t\t\t\t\t\tonValueChange={updateGroupByOptionId}\n\t\t\t\t\t\t\t\t\t\taria-label={strings.groupByLabel}\n\t\t\t\t\t\t\t\t\t\tclassName=\"min-w-32 bg-background\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t\t<Stack\n\t\t\t\t\t\t\t\tdirection=\"horizontal\"\n\t\t\t\t\t\t\t\tgap=\"sm\"\n\t\t\t\t\t\t\t\tjustify=\"end\"\n\t\t\t\t\t\t\t\twrap={false}\n\t\t\t\t\t\t\t\tclassName=\"product-variants-manager--controls-end\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<div className={cn('product-variants-manager--tool-buttons bg-background shadow-xs', segmentedControlRecipes.joinedFrame, controlGroupHeightClasses[size])}>\n\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t\t\t\t\ticonOnly\n\t\t\t\t\t\t\t\t\t\ttone=\"secondary\"\n\t\t\t\t\t\t\t\t\t\tbuttonStyle=\"ghost\"\n\t\t\t\t\t\t\t\t\t\tonClick={onSearchVariants}\n\t\t\t\t\t\t\t\t\t\taria-label={strings.searchLabel}\n\t\t\t\t\t\t\t\t\t\tclassName={cn(segmentedControlRecipes.joinedItem, segmentedControlRecipes.firstItem, 'border-r border-border text-muted-foreground hover:text-foreground')}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<Search className=\"size-icon-sm\" aria-hidden=\"true\" />\n\t\t\t\t\t\t\t\t\t\t<Text tag=\"span\" size=\"pxs\" className=\"sr-only\">\n\t\t\t\t\t\t\t\t\t\t\t{strings.searchLabel}\n\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t\t\t\t\ticonOnly\n\t\t\t\t\t\t\t\t\t\ttone=\"secondary\"\n\t\t\t\t\t\t\t\t\t\tbuttonStyle=\"ghost\"\n\t\t\t\t\t\t\t\t\t\tonClick={onFilterVariants}\n\t\t\t\t\t\t\t\t\t\taria-label={strings.filterLabel}\n\t\t\t\t\t\t\t\t\t\tclassName={cn(segmentedControlRecipes.joinedItem, segmentedControlRecipes.lastItem, 'text-muted-foreground hover:text-foreground')}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<ListFilter className=\"size-icon-sm\" aria-hidden=\"true\" />\n\t\t\t\t\t\t\t\t\t\t<Text tag=\"span\" size=\"pxs\" className=\"sr-only\">\n\t\t\t\t\t\t\t\t\t\t\t{strings.filterLabel}\n\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t{controlsEnd}\n\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t</Stack>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<section className=\"product-variants-manager--variants min-w-0\">\n\t\t\t\t\t\t<ProductVariantsBulkTable\n\t\t\t\t\t\t\tvariants={variants}\n\t\t\t\t\t\t\toptionGroups={optionGroups}\n\t\t\t\t\t\t\tgroupByOptionId={resolvedGroupByOptionId}\n\t\t\t\t\t\t\tvisibleColumns={visibleColumns}\n\t\t\t\t\t\t\toptionCombinationDisplay={optionCombinationDisplay}\n\t\t\t\t\t\t\tcellDisplay={cellDisplay}\n\t\t\t\t\t\t\tselectionMode={selectionMode}\n\t\t\t\t\t\t\trenderOptionCombination={renderOptionCombination}\n\t\t\t\t\t\t\trenderCell={renderCell}\n\t\t\t\t\t\t\tsurface=\"embedded\"\n\t\t\t\t\t\t\tselectedVariantIds={selectedVariantIds}\n\t\t\t\t\t\t\tdefaultSelectedVariantIds={defaultSelectedVariantIds}\n\t\t\t\t\t\t\tonSelectedVariantIdsChange={onSelectedVariantIdsChange}\n\t\t\t\t\t\t\tonVariantFieldChange={onVariantFieldChange}\n\t\t\t\t\t\t\tonVariantFieldBlur={onVariantFieldBlur}\n\t\t\t\t\t\t\tonCreateVariant={onCreateVariant}\n\t\t\t\t\t\t\tonGenerateVariants={onGenerateVariants}\n\t\t\t\t\t\t\tonSelectVariant={onSelectVariant}\n\t\t\t\t\t\t\tonEditVariant={onEditVariant}\n\t\t\t\t\t\t\tonDuplicateVariant={onDuplicateVariant}\n\t\t\t\t\t\t\tonDeleteVariant={onDeleteVariant}\n\t\t\t\t\t\t\tonBulkEdit={onBulkEdit}\n\t\t\t\t\t\t\tonBulkApply={onBulkApply}\n\t\t\t\t\t\t\tonBulkDelete={onBulkDelete}\n\t\t\t\t\t\t\trenderVariantActions={renderVariantActions}\n\t\t\t\t\t\t\trenderBulkActions={renderBulkActions}\n\t\t\t\t\t\t\tstrings={{\n\t\t\t\t\t\t\t\ttitle: strings.variantsTitle,\n\t\t\t\t\t\t\t\tgenerateLabel: strings.generateLabel,\n\t\t\t\t\t\t\t\t...variantsStrings,\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</section>\n\t\t\t\t</Stack>\n\t\t\t</Stack>\n\t\t</Card>\n\t);\n}\n\nProductVariantsManager.displayName = 'ProductVariantsManager';\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"products.js","names":["getPlainText","_Fragment","_Fragment","resolveComponentScale","useDensityConfig","cn","Button","Text","DisplayLabel","focusRecipes","Grid","Stack","dotRecipes","AlertDescription","Card","AlertTitle","Progress","compositionRhythm","compositionClasses","useOverlayVisibility","ConfirmDialog","interactionRecipes","Value","SecondaryValue","Percent","Badge","BatchActionBar","Separator","fieldAffordanceRecipes","Input","FormField","Textarea","Switch","Select","Checkbox","ContentBlock","segmentedControlRecipes","controlGroupHeightClasses","ItemMedia","ItemDescription","ItemActions","ItemGroup","ItemContent","Item","ItemTitle","MetadataList","TableRow","TableCell","TableBody","TableHead","TableHeader","Table","InlineStat","EmptyState","DataTableActions","DataTable","Fragment$1","defaultProductReadinessCardStrings","defaultProductStructureCardStrings","defaultProductOperationsCardStrings","defaultProductDetailsCardStrings","defaultProductContractOverviewStrings","defaultProductOptionsSummaryStrings","defaultProductOptionActionMenuStrings","defaultProductOptionsMatrixStrings","defaultProductQuotePreviewCardStrings","defaultProductPoliciesCardStrings","defaultProductVariantsTableStrings","defaultProductVariantsBulkTableStrings","count","total","index","defaultProductVariantsManagerStrings","defaultProductVariantActionMenuStrings","defaultProductVariantDetailsStrings","defaultProductVariantEditorStrings","defaultProductOverviewStrings","ProductEmptyState","action","className","PRODUCT_TONE_BADGE","PRODUCT_TONE_TEXT","PRODUCT_STATUS_TONES","isProductStatusTone","tone","clampProductPercent","value","ProductToneDot","ProductMetricTile","icon","metric","ProductRowActions","actions","item","PRODUCT_ROW_CONTENT","PRODUCT_ROW_TITLE","PRODUCT_ROW_ACTIONS","ProductRowHeading","title","label","badge","ProductRowSelect","onSelect","ProductStructureMetricRow","ProductReadinessRow","state","select","actionFallback","ProductOperationRow","ProductSummaryRow","values","actionLabel","ProductContractOverview","stringsProp","strings","useStrings","hasContent","metrics","terms","rules","headerAction","onOpenContract","onEditContract","onCreateRule","Plus","onSelectRule","rule","onEdit","onEditRule","onDelete","onDeleteRule","ruleActions","Eye","Pencil","Trash2","rowActions","renderRuleActions","empty","ProductDetailsCard","onEditDetails","description","metadata","media","ProductOptionActionMenu","onSelectOption","option","onEditOption","onDeleteOption","renderOptionActions","menuLabel","ProductOperationsCard","onCreateOperation","items","onSelectOperation","onEditOperation","onDeleteOperation","operationActions","renderOperationActions","renderItem","getPlainText$1","isScalarText","getOptionEditLabel","optionName","prefix","getOptionDraft","ProductOptionsMatrix","showHeaderProp","isCollapsedControlled","collapsedOptionIds","internalCollapsedOptionIds","setInternalCollapsedOptionIds","useState","defaultCollapsedOptionIds","resolvedCollapsedOptionIds","collapsedOptionIdSet","useMemo","supportsInlineEditing","editingOptionId","defaultEditingOptionId","onEditingOptionIdChange","onOptionNameChange","onValueLabelChange","onDoneEditingOption","onSaveEditingOption","onCancelEditingOption","isEditingControlled","internalEditingOptionId","setInternalEditingOptionId","draftByOptionId","setDraftByOptionId","savingRef","useRef","mountedRef","savingOptionId","setSavingOptionId","saveFailure","setSaveFailure","errorRef","nextDraftValueId","focusValueIdRef","focusAddedValue","useCallback","node","isSaving","resolvedEditingOptionId","hasGroups","optionGroups","showPanelHeader","surface","showCreateRow","onCreateOption","updateCollapsedOptionIds","nextIds","onCollapsedOptionIdsChange","toggleCollapsed","id","updateEditingOptionId","nextId","startEditing","current","getResolvedDraft","updateDraft","updater","cancelEditing","draft","_removed","rest","commitEditing","originalValues","originalValueIds","draftValueIds","result","draftValue","onAddValue","onDeleteValue","error","onError","removeValuesConfirm","pendingSave","setPendingSave","saveEditing","removed","confirmDelete","deleteOption","deleteOptionConfirm","pendingDeleteOption","setPendingDeleteOption","requestDeleteOption","panelHeader","content","isCollapsed","canInlineEdit","isEditing","canEdit","canDelete","canAddValue","optionDraft","optionFailure","isSavingOption","renderedActions","optionIndex","menuActions","defaultActions","showInlineActions","resolvedActions","Alert","nextName","event","nextLabel","reservedIds","optionSummary","deleteValue","renderedValue","renderValue","Fragment","X","showCollapseControls","ChevronDown","onToggleUsedForVariants","showVariantToggle","checked","PlusCircle","interpolateString","ProductOptionsSummary","hasOptionActions","cardActions","onManageOptions","SlidersHorizontal","options","renderOption","ProductPoliciesCard","onCreatePolicy","policies","onSelectPolicy","policy","onEditPolicy","onDeletePolicy","policyActions","renderPolicyActions","renderPolicy","ProductQuotePreviewCard","hasBreakdown","subtotal","tax","discount","onCreateLine","onOpenQuote","lines","onSelectLine","line","onEditLine","onDeleteLine","lineActions","renderLineActions","ProductReadinessCard","completion","score","onCreateReadinessItem","summary","scoreLabel","onSelectReadinessItem","onEditReadinessItem","onDeleteReadinessItem","readinessActions","renderReadinessItemActions","ProductStructureCard","onCreateMetric","onSelectMetric","onEditMetric","onDeleteMetric","metricActions","renderMetricActions","ProductVariantNameCell","variant","channelsLabel","ProductVariantValueCell","emphasis","ProductVariantsTable","renderVariantActions","actionsList","onSelectVariant","onEditVariant","onDuplicateVariant","Copy","onDeleteVariant","columns","baseColumns","row","onCreateVariant","variants","ProductOverview","hasRail","readiness","structure","operations","quote","slots","mainClassName","details","contract","railClassName","productVariantMenuActions","ProductVariantActionMenu","onDuplicate","onClick","isPresent","getDefaultMetadata","labels","ProductVariantDetails","resolvedMetadata","renderActions","hasCustomActions","onBack","ArrowLeft","selectedOptions","renderMetadata","optionItems","toSelectOptions","choices","choice","ProductVariantEditor","valueProp","formIdProp","generatedFormId","useId","formId","isControlled","internalValue","setInternalValue","defaultValue","internalSubmitting","setInternalSubmitting","currentValue","currentOptions","missingOptionDefaults","optionFields","field","resolvedSubmitting","submitting","isDisabled","disabled","isFieldVisible","visibleFields","showIdentity","showCommercial","updateValue","next","onValueChange","updateField","nextValue","updateOption","handleSubmit","onSubmit","defaultFooter","onCancel","hasDefaultFooter","showHeader","errors","statusOptions","fieldValue","hasChoices","children","footerSlot","DEFAULT_VISIBLE_COLUMNS","DEFAULT_OPTION_COMBINATION_DISPLAY","DEFAULT_CELL_DISPLAY","DEFAULT_SELECTION_MODE","getPlainText","getOptionValue","directValue","valueId","getVariantName","getVariantOptionSummary","getOptionCombinationLabel","getGroupLabel","selectedIdsToRows","ids","rowById","renderFieldValue","hasCellValue","isEditableField","column","resolveCellDisplay","display","getFieldChangeContext","renderVariantCellValue","plainValue","onBlur","Primitive","textClassName","ProductVariantsBulkTable","isSelectionControlled","selectedVariantIds","internalSelectedIds","setInternalSelectedIds","defaultSelectedVariantIds","hasBulkActions","renderBulkActions","onBulkEdit","onBulkApply","onBulkDelete","isSelectable","selectionMode","onSelectedVariantIdsChange","selectedIds","selectedRows","selectedIdSet","visibleColumnSet","visibleColumns","groupByOption","groupByOptionId","rowIndexById","orderedVariants","valueOrder","aValueId","a","bValueId","b","aOrder","bOrder","resolvedAOrder","resolvedBOrder","groupCounts","counts","hasBulkControls","hasRows","allRowsSelected","someRowsSelected","selectAllRef","hasRowActions","tableColumnCount","updateSelection","nextRows","clearSelection","toggleRow","toggleAll","bulkContext","onGenerateVariants","customBulkActions","bulkToolbar","displayIndex","groupLabel","previousVariant","previousGroupLabel","shouldRenderGroup","isSelected","actionContext","summaryOptionGroups","groupedVariantName","variantName","optionLabel","optionLabelMatchesVariantName","createCellContext","onVariantFieldChange","onVariantFieldBlur","renderCellContent","context","rendered","renderCell","fallback","shouldRenderOptionCombination","optionCombinationDisplay","renderedOptionCombination","renderOptionCombination","defaultRowActions","valueIndex","cellDisplay","ProductVariantsManager","size","defaultScale","groupableOptions","fallbackGroupByOptionId","isGroupByControlled","internalGroupByOptionId","setInternalGroupByOptionId","defaultGroupByOptionId","resolvedGroupByOptionId","showGroupBy","hasJoinedTools","onSearchVariants","onFilterVariants","hasTools","groupByOptions","updateGroupByOptionId","matchedOption","onGroupByOptionIdChange","optionsStrings","controlsEnd","Search","ListFilter","variantsStrings"],"sources":["../../src/components/features/products/products.strings.ts","../../src/components/features/products/partials/product-empty-state.tsx","../../src/components/features/products/partials/product-tone.tsx","../../src/components/features/products/partials/product-metric-tile.tsx","../../src/components/features/products/partials/product-actions.tsx","../../src/components/features/products/partials/product-rows.tsx","../../src/components/features/products/components/product-contract-overview.tsx","../../src/components/features/products/components/product-details-card.tsx","../../src/components/features/products/components/product-option-action-menu.tsx","../../src/components/features/products/components/product-operations-card.tsx","../../src/components/features/products/components/product-options-matrix.tsx","../../src/components/features/products/components/product-options-summary.tsx","../../src/components/features/products/components/product-policies-card.tsx","../../src/components/features/products/components/product-quote-preview-card.tsx","../../src/components/features/products/components/product-readiness-card.tsx","../../src/components/features/products/components/product-structure-card.tsx","../../src/components/features/products/components/product-variants-table.tsx","../../src/components/features/products/components/product-overview.tsx","../../src/components/features/products/components/product-variant-action-menu.tsx","../../src/components/features/products/components/product-variant-details.tsx","../../src/components/features/products/components/product-variant-editor.tsx","../../src/components/features/products/components/product-variants-bulk-table.tsx","../../src/components/features/products/components/product-variants-manager.tsx"],"sourcesContent":["export interface ProductReadinessCardStrings {\n\t/** Surface title. */\n\ttitle: string;\n\t/** Supporting copy shown under the label. */\n\tdescription: string;\n\tscoreLabel: string;\n\tprogressLabel: string;\n\tcreateLabel: string;\n\teditLabel: string;\n\tdeleteLabel: string;\n\tactionsLabel: string;\n\temptyTitle: string;\n\temptyDescription: string;\n\tactionLabel: string;\n}\n\nexport const defaultProductReadinessCardStrings: ProductReadinessCardStrings = {\n\ttitle: 'Readiness',\n\tdescription: 'Publishing checks and operational setup.',\n\tscoreLabel: 'Overall readiness',\n\tprogressLabel: 'Readiness progress',\n\tcreateLabel: 'Add check',\n\teditLabel: 'Edit check',\n\tdeleteLabel: 'Delete check',\n\tactionsLabel: 'Check actions',\n\temptyTitle: 'No readiness checks',\n\temptyDescription: 'Pass readiness items from your product workflow to show progress.',\n\tactionLabel: 'Open',\n};\n\nexport interface ProductStructureCardStrings {\n\t/** Surface title. */\n\ttitle: string;\n\t/** Supporting copy shown under the label. */\n\tdescription: string;\n\tcreateLabel: string;\n\tviewLabel: string;\n\teditLabel: string;\n\tdeleteLabel: string;\n\tactionsLabel: string;\n\temptyTitle: string;\n\temptyDescription: string;\n}\n\nexport const defaultProductStructureCardStrings: ProductStructureCardStrings = {\n\ttitle: 'Structure',\n\tdescription: 'Media, taxonomy, options, and content coverage.',\n\tcreateLabel: 'Add metric',\n\tviewLabel: 'Open',\n\teditLabel: 'Edit metric',\n\tdeleteLabel: 'Delete metric',\n\tactionsLabel: 'Metric actions',\n\temptyTitle: 'No structure metrics',\n\temptyDescription: 'Pass structure metrics to summarize the product setup.',\n};\n\nexport interface ProductOperationsCardStrings {\n\t/** Surface title. */\n\ttitle: string;\n\t/** Supporting copy shown under the label. */\n\tdescription: string;\n\tcreateLabel: string;\n\teditLabel: string;\n\tdeleteLabel: string;\n\tactionsLabel: string;\n\temptyTitle: string;\n\temptyDescription: string;\n\tactionLabel: string;\n}\n\nexport const defaultProductOperationsCardStrings: ProductOperationsCardStrings = {\n\ttitle: 'Operations',\n\tdescription: 'Availability, channels, service rules, and fulfilment signals.',\n\tcreateLabel: 'Add signal',\n\teditLabel: 'Edit signal',\n\tdeleteLabel: 'Delete signal',\n\tactionsLabel: 'Signal actions',\n\temptyTitle: 'No operational signals',\n\temptyDescription: 'Pass operational rows to show channel and availability health.',\n\tactionLabel: 'Open',\n};\n\nexport interface ProductDetailsCardStrings {\n\t/** Surface title. */\n\ttitle: string;\n\t/** Supporting copy shown under the label. */\n\tdescription: string;\n\teditLabel: string;\n\temptyTitle: string;\n\temptyDescription: string;\n}\n\nexport const defaultProductDetailsCardStrings: ProductDetailsCardStrings = {\n\ttitle: 'Product details',\n\tdescription: 'Core identity and catalogue fields.',\n\teditLabel: 'Edit details',\n\temptyTitle: 'No details',\n\temptyDescription: 'Pass metadata rows to render product details.',\n};\n\nexport interface ProductContractOverviewStrings {\n\t/** Surface title. */\n\ttitle: string;\n\t/** Supporting copy shown under the label. */\n\tdescription: string;\n\ttermsTitle: string;\n\trulesTitle: string;\n\tactionLabel: string;\n\teditLabel: string;\n\tcreateRuleLabel: string;\n\tviewRuleLabel: string;\n\teditRuleLabel: string;\n\tdeleteRuleLabel: string;\n\truleActionsLabel: string;\n\temptyTitle: string;\n\temptyDescription: string;\n}\n\nexport const defaultProductContractOverviewStrings: ProductContractOverviewStrings = {\n\ttitle: 'Contract',\n\tdescription: 'Commercial terms, pricing rules, and customer-facing conditions.',\n\ttermsTitle: 'Terms',\n\trulesTitle: 'Rules',\n\tactionLabel: 'Manage contract',\n\teditLabel: 'Edit contract',\n\tcreateRuleLabel: 'Add rule',\n\tviewRuleLabel: 'Open rule',\n\teditRuleLabel: 'Edit rule',\n\tdeleteRuleLabel: 'Delete rule',\n\truleActionsLabel: 'Rule actions',\n\temptyTitle: 'No contract summary',\n\temptyDescription: 'Pass metrics, terms, or rules to summarize the product contract.',\n};\n\nexport interface ProductOptionsSummaryStrings {\n\t/** Surface title. */\n\ttitle: string;\n\t/** Supporting copy shown under the label. */\n\tdescription: string;\n\tmanageLabel: string;\n\tcreateLabel: string;\n\tviewLabel: string;\n\teditLabel: string;\n\tdeleteLabel: string;\n\tactionsLabel: string;\n\temptyTitle: string;\n\temptyDescription: string;\n}\n\nexport const defaultProductOptionsSummaryStrings: ProductOptionsSummaryStrings = {\n\ttitle: 'Options',\n\tdescription: 'Variant-driving choices and add-ons customers can select.',\n\tmanageLabel: 'Manage options',\n\tcreateLabel: 'Add option',\n\tviewLabel: 'Open option',\n\teditLabel: 'Edit option',\n\tdeleteLabel: 'Delete option',\n\tactionsLabel: 'Option actions',\n\temptyTitle: 'No options',\n\temptyDescription: 'Pass option groups to summarize configurable product choices.',\n};\n\nexport interface ProductOptionActionMenuStrings {\n\tviewLabel: string;\n\teditLabel: string;\n\tdeleteLabel: string;\n\tactionsLabel: string;\n}\n\nexport const defaultProductOptionActionMenuStrings: ProductOptionActionMenuStrings = {\n\tviewLabel: 'Open option',\n\teditLabel: 'Edit option',\n\tdeleteLabel: 'Delete option',\n\tactionsLabel: 'Option actions',\n};\n\nexport interface ProductOptionsMatrixStrings {\n\t/** Surface title. */\n\ttitle: string;\n\t/** Supporting copy shown under the label. */\n\tdescription: string;\n\tcreateLabel: string;\n\teditLabel: string;\n\tdeleteLabel: string;\n\taddValueLabel: string;\n\taddAnotherValueLabel: string;\n\taddAnotherOptionLabel: string;\n\tdeleteValueLabel: string;\n\t/** Title of the confirmation shown before an option group is deleted. */\n\tconfirmDeleteOptionTitle: string;\n\t/** Title of the confirmation shown when saving would drop option values. */\n\tconfirmRemoveValuesTitle: string;\n\t/**\n\t * Consequence of saving an edit that drops values. Receives `{{count}}`, the\n\t * number of values the save removes.\n\t */\n\tconfirmRemoveValuesDescription: string;\n\t/** Confirm button for a save that drops values. */\n\tconfirmRemoveValuesLabel: string;\n\t/** Sentence explaining what deleting an option group takes with it. */\n\tconfirmDeleteOptionDescription: string;\n\tdoneLabel: string;\n\tsaveLabel: string;\n\t/** Pending option-save copy. Optional for compatibility with complete legacy string objects. */\n\tsavingLabel?: string;\n\t/** Heading for a rejected option save. */\n\tsaveErrorTitle?: string;\n\t/** Fallback when a rejection has no displayable Error message. */\n\tsaveErrorMessage?: string;\n\t/** Save command after a rejected option save. */\n\tretrySaveLabel?: string;\n\tcancelLabel: string;\n\texpandOptionLabel: string;\n\tcollapseOptionLabel: string;\n\tactionsLabel: string;\n\toptionNameLabel: string;\n\toptionValuesLabel: string;\n\tvaluesLabel: string;\n\tuseForVariantsLabel: string;\n\tusedForVariantsLabel: string;\n\tnotUsedForVariantsLabel: string;\n\temptyTitle: string;\n\temptyDescription: string;\n\tnoValuesLabel: string;\n}\n\nexport const defaultProductOptionsMatrixStrings: ProductOptionsMatrixStrings = {\n\ttitle: 'Variant options',\n\tdescription: 'Define option groups and values before generating sellable variants.',\n\tcreateLabel: 'Add attribute',\n\teditLabel: 'Configure',\n\tdeleteLabel: 'Delete option',\n\taddValueLabel: 'Add value',\n\taddAnotherValueLabel: 'Add another value',\n\taddAnotherOptionLabel: 'Add another option',\n\tdeleteValueLabel: 'Delete value',\n\tconfirmDeleteOptionTitle: 'Delete this option?',\n\tconfirmRemoveValuesTitle: 'Save and remove these values?',\n\tconfirmRemoveValuesDescription: 'Saving removes {{count}} value(s) from this option, and any variant built from them goes with it. This cannot be undone.',\n\tconfirmRemoveValuesLabel: 'Save changes',\n\tconfirmDeleteOptionDescription: 'Its values are removed from the product, and any variant built from them goes with it. This cannot be undone.',\n\tdoneLabel: 'Done',\n\tsaveLabel: 'Save',\n\tsavingLabel: 'Saving…',\n\tsaveErrorTitle: 'Changes were not saved',\n\tsaveErrorMessage: 'Your draft has been kept. Try again.',\n\tretrySaveLabel: 'Retry save',\n\tcancelLabel: 'Cancel',\n\texpandOptionLabel: 'Expand option',\n\tcollapseOptionLabel: 'Collapse option',\n\tactionsLabel: 'Option actions',\n\toptionNameLabel: 'Option name',\n\toptionValuesLabel: 'Option values',\n\tvaluesLabel: 'Values',\n\tuseForVariantsLabel: 'Use for variants',\n\tusedForVariantsLabel: 'Used for variants',\n\tnotUsedForVariantsLabel: 'Not used for variants',\n\temptyTitle: 'No option groups',\n\temptyDescription: 'Add options such as size, color, or packaging to create variant combinations.',\n\tnoValuesLabel: 'No values',\n};\n\nexport interface ProductQuotePreviewCardStrings {\n\t/** Surface title. */\n\ttitle: string;\n\t/** Supporting copy shown under the label. */\n\tdescription: string;\n\tsubtotalLabel: string;\n\ttaxLabel: string;\n\tdiscountLabel: string;\n\ttotalLabel: string;\n\tactionLabel: string;\n\tcreateLineLabel: string;\n\tviewLineLabel: string;\n\teditLineLabel: string;\n\tdeleteLineLabel: string;\n\tlineActionsLabel: string;\n\temptyTitle: string;\n\temptyDescription: string;\n}\n\nexport const defaultProductQuotePreviewCardStrings: ProductQuotePreviewCardStrings = {\n\ttitle: 'Quote preview',\n\tdescription: 'How the product appears in a compact customer quote.',\n\tsubtotalLabel: 'Subtotal',\n\ttaxLabel: 'Tax',\n\tdiscountLabel: 'Discount',\n\ttotalLabel: 'Total',\n\tactionLabel: 'Open quote',\n\tcreateLineLabel: 'Add line',\n\tviewLineLabel: 'Open line',\n\teditLineLabel: 'Edit line',\n\tdeleteLineLabel: 'Delete line',\n\tlineActionsLabel: 'Line actions',\n\temptyTitle: 'No quote lines',\n\temptyDescription: 'Pass quote lines to preview pricing.',\n};\n\nexport interface ProductPoliciesCardStrings {\n\t/** Surface title. */\n\ttitle: string;\n\t/** Supporting copy shown under the label. */\n\tdescription: string;\n\tcreateLabel: string;\n\tviewLabel: string;\n\teditLabel: string;\n\tdeleteLabel: string;\n\tactionsLabel: string;\n\temptyTitle: string;\n\temptyDescription: string;\n}\n\nexport const defaultProductPoliciesCardStrings: ProductPoliciesCardStrings = {\n\ttitle: 'Policies',\n\tdescription: 'Cancellation, booking, service, and customer-facing rules.',\n\tcreateLabel: 'Add policy',\n\tviewLabel: 'View',\n\teditLabel: 'Edit policy',\n\tdeleteLabel: 'Delete policy',\n\tactionsLabel: 'Policy actions',\n\temptyTitle: 'No policies',\n\temptyDescription: 'Pass policies to summarize customer-facing rules.',\n};\n\nexport interface ProductVariantsTableStrings {\n\t/** Surface title. */\n\ttitle: string;\n\t/** Supporting copy shown under the label. */\n\tdescription: string;\n\tcreateLabel: string;\n\tviewLabel: string;\n\teditLabel: string;\n\tduplicateLabel: string;\n\tdeleteLabel: string;\n\temptyTitle: string;\n\temptyDescription: string;\n\theaders: {\n\t\tvariant: string;\n\t\tsku: string;\n\t\tprice: string;\n\t\tinventory: string;\n\t\tchannels: string;\n\t\tupdated: string;\n\t\tactions: string;\n\t};\n}\n\nexport const defaultProductVariantsTableStrings: ProductVariantsTableStrings = {\n\ttitle: 'Variants',\n\tdescription: 'Sellable combinations with price, availability, and SKU.',\n\tcreateLabel: 'Add variant',\n\tviewLabel: 'Open variant',\n\teditLabel: 'Edit',\n\tduplicateLabel: 'Duplicate',\n\tdeleteLabel: 'Delete',\n\temptyTitle: 'No variants',\n\temptyDescription: 'Create or pass variants to show sellable rows.',\n\theaders: {\n\t\tvariant: 'Variant',\n\t\tsku: 'SKU',\n\t\tprice: 'Price',\n\t\tinventory: 'Available',\n\t\tchannels: 'Channels',\n\t\tupdated: 'Updated',\n\t\tactions: 'Actions',\n\t},\n};\n\nexport interface ProductVariantBulkTableStrings {\n\t/** Surface title. */\n\ttitle: string;\n\t/** Supporting copy shown under the label. */\n\tdescription: string;\n\tcreateLabel: string;\n\tgenerateLabel: string;\n\tbulkEditLabel: string;\n\tviewLabel: string;\n\teditLabel: string;\n\tduplicateLabel: string;\n\tdeleteLabel: string;\n\tbulkApplyLabel: string;\n\tbulkDeleteLabel: string;\n\tselectedLabel: (count: number, total: number) => string;\n\tgroupCountLabel: (count: number) => string;\n\tclearSelectionLabel: string;\n\tselectAllLabel: string;\n\tselectRowLabel: (index: number) => string;\n\temptyTitle: string;\n\temptyDescription: string;\n\theaders: {\n\t\tvariant: string;\n\t\tprice: string;\n\t\tinventory: string;\n\t\tsku: string;\n\t\tstatus: string;\n\t\tupdated: string;\n\t\tactions: string;\n\t};\n}\n\nexport const defaultProductVariantsBulkTableStrings: ProductVariantBulkTableStrings = {\n\ttitle: 'Variants',\n\tdescription: 'Review generated combinations, select rows, and apply bulk operations.',\n\tcreateLabel: 'Add variant',\n\tgenerateLabel: 'Generate variants',\n\tbulkEditLabel: 'Bulk edit selected',\n\tviewLabel: 'Open variant',\n\teditLabel: 'Edit',\n\tduplicateLabel: 'Duplicate',\n\tdeleteLabel: 'Delete',\n\tbulkApplyLabel: 'Apply changes',\n\tbulkDeleteLabel: 'Delete selected',\n\tselectedLabel: (count, total) => `${count} of ${total} selected`,\n\tgroupCountLabel: (count) => `${count} ${count === 1 ? 'variant' : 'variants'}`,\n\tclearSelectionLabel: 'Clear',\n\tselectAllLabel: 'Select all variants',\n\tselectRowLabel: (index) => `Select row ${index + 1}`,\n\temptyTitle: 'No variants',\n\temptyDescription: 'Generate variants from option groups or pass sellable rows from the app.',\n\theaders: {\n\t\tvariant: 'Variant',\n\t\tprice: 'Price',\n\t\tinventory: 'Available',\n\t\tsku: 'SKU',\n\t\tstatus: 'Status',\n\t\tupdated: 'Updated',\n\t\tactions: 'Actions',\n\t},\n};\n\nexport interface ProductVariantsManagerStrings {\n\t/** Surface title. */\n\ttitle: string;\n\t/** Supporting copy shown under the label. */\n\tdescription: string;\n\toptionsTitle: string;\n\tvariantsTitle: string;\n\tgroupByLabel: string;\n\tsearchLabel: string;\n\tfilterLabel: string;\n\tgenerateLabel: string;\n\tcreateVariantLabel: string;\n\tactionsLabel: string;\n}\n\nexport const defaultProductVariantsManagerStrings: ProductVariantsManagerStrings = {\n\ttitle: 'Variants',\n\tdescription: 'Configure option groups first, then manage the generated sellable variants.',\n\toptionsTitle: 'Variant options',\n\tvariantsTitle: 'Variants',\n\tgroupByLabel: 'Group by',\n\tsearchLabel: 'Search variants',\n\tfilterLabel: 'Filter variants',\n\tgenerateLabel: 'Generate variants',\n\tcreateVariantLabel: 'Add variant',\n\tactionsLabel: 'Variant manager actions',\n};\n\nexport interface ProductVariantActionMenuStrings {\n\tviewLabel: string;\n\teditLabel: string;\n\tduplicateLabel: string;\n\tdeleteLabel: string;\n\tactionsLabel: string;\n}\n\nexport const defaultProductVariantActionMenuStrings: ProductVariantActionMenuStrings = {\n\tviewLabel: 'Open variant',\n\teditLabel: 'Edit',\n\tduplicateLabel: 'Duplicate',\n\tdeleteLabel: 'Delete',\n\tactionsLabel: 'Variant actions',\n};\n\nexport interface ProductVariantDetailsStrings {\n\t/** Surface title. */\n\ttitle: string;\n\t/** Supporting copy shown under the label. */\n\tdescription: string;\n\tbackLabel: string;\n\tfactsTitle: string;\n\tselectedOptionsTitle: string;\n\trelatedOptionsTitle: string;\n\tviewOptionLabel: string;\n\temptyTitle: string;\n\temptyDescription: string;\n\t/** Label/value facts rendered as a metadata list. */\n\tmetadata: {\n\t\tprice: string;\n\t\tinventory: string;\n\t\tsku: string;\n\t\tchannels: string;\n\t\tupdated: string;\n\t};\n}\n\nexport const defaultProductVariantDetailsStrings: ProductVariantDetailsStrings = {\n\ttitle: 'Variant',\n\tdescription: 'Sellable variant details, options, pricing, and fulfilment data.',\n\tbackLabel: 'Back',\n\tfactsTitle: 'Variant facts',\n\tselectedOptionsTitle: 'Selected options',\n\trelatedOptionsTitle: 'Option groups',\n\tviewOptionLabel: 'Open option',\n\temptyTitle: 'No variant selected',\n\temptyDescription: 'Pass a variant to render a standalone variant detail surface.',\n\tmetadata: {\n\t\tprice: 'Price',\n\t\tinventory: 'Available',\n\t\tsku: 'SKU',\n\t\tchannels: 'Channels',\n\t\tupdated: 'Updated',\n\t},\n};\n\nexport interface ProductVariantEditorStrings {\n\t/** Surface title. */\n\ttitle: string;\n\t/** Supporting copy shown under the label. */\n\tdescription: string;\n\tidentityTitle: string;\n\tcommercialTitle: string;\n\toptionsTitle: string;\n\tsaveLabel: string;\n\tsavingLabel: string;\n\tcancelLabel: string;\n\tdeleteLabel: string;\n\tstatusPlaceholder: string;\n\toptionPlaceholder: string;\n\tfields: {\n\t\tname: string;\n\t\tdescription: string;\n\t\tsku: string;\n\t\tprice: string;\n\t\tinventory: string;\n\t\tstatus: string;\n\t\tchannels: string;\n\t};\n\tplaceholders: {\n\t\tname: string;\n\t\tdescription: string;\n\t\tsku: string;\n\t\tprice: string;\n\t\tinventory: string;\n\t\tstatus: string;\n\t\tchannels: string;\n\t};\n}\n\nexport const defaultProductVariantEditorStrings: ProductVariantEditorStrings = {\n\ttitle: 'Edit variant',\n\tdescription: 'Controlled form for variant identity, pricing, inventory, and option values.',\n\tidentityTitle: 'Identity',\n\tcommercialTitle: 'Commercial setup',\n\toptionsTitle: 'Options',\n\tsaveLabel: 'Save variant',\n\tsavingLabel: 'Saving',\n\tcancelLabel: 'Cancel',\n\tdeleteLabel: 'Delete variant',\n\tstatusPlaceholder: 'Select status',\n\toptionPlaceholder: 'Select value',\n\tfields: {\n\t\tname: 'Name',\n\t\tdescription: 'Description',\n\t\tsku: 'SKU',\n\t\tprice: 'Price',\n\t\tinventory: 'Inventory',\n\t\tstatus: 'Status',\n\t\tchannels: 'Channels',\n\t},\n\tplaceholders: {\n\t\tname: '750 ml bottle',\n\t\tdescription: 'Standard retail pack',\n\t\tsku: 'BAL-750-CL',\n\t\tprice: 'US$ 24.00',\n\t\tinventory: '82',\n\t\tstatus: 'Active',\n\t\tchannels: 'Online store, POS',\n\t},\n};\n\nexport interface ProductOverviewStrings {\n\tmainLabel: string;\n\trailLabel: string;\n}\n\nexport const defaultProductOverviewStrings: ProductOverviewStrings = {\n\tmainLabel: 'Product overview',\n\trailLabel: 'Product supporting information',\n};\n","import type { ReactNode } from 'react';\n\nimport { EmptyState } from '../../../blocks/data-display';\nimport { cn } from '../../../../lib/utils';\n\nexport function ProductEmptyState({\n\ttitle,\n\tdescription,\n\taction,\n\tclassName,\n}: {\n\t/** Surface title. */\n\ttitle: ReactNode;\n\t/** Supporting copy under the title. */\n\tdescription: ReactNode;\n\t/** Control offered alongside the message. */\n\taction?: ReactNode;\n\tclassName?: string;\n}) {\n\treturn (\n\t\t<EmptyState\n\t\t\tpadding=\"md\"\n\t\t\tborder\n\t\t\ttitle={title}\n\t\t\tdescription={description}\n\t\t\tactions={action}\n\t\t\tclassName={cn('product-empty-state--component bg-muted/30', className)}\n\t\t/>\n\t);\n}\n","import type { BadgeTone } from '../../../base/badge';\nimport { cn } from '../../../../lib/utils';\n\nimport type { ProductTone } from '../products.types';\nimport { dotRecipes } from '../../../../lib/tone-recipes';\n\n/**\n * Badge tone for a product row value. Only status tones carry colour; neutral\n * and primary (reserved for the main command) render as neutral badges.\n */\nexport const PRODUCT_TONE_BADGE: Record<ProductTone, BadgeTone> = {\n\tneutral: 'secondary',\n\tprimary: 'secondary',\n\tsuccess: 'success',\n\twarning: 'warning',\n\tdestructive: 'destructive',\n\tinfo: 'info',\n};\n\n/**\n * Text colour for a figure whose tone states a status. Figures keep their width,\n * so a flagged metric lines up with its plain siblings instead of growing a chip.\n */\nexport const PRODUCT_TONE_TEXT: Record<ProductTone, string | undefined> = {\n\tneutral: undefined,\n\tprimary: undefined,\n\tsuccess: 'text-success',\n\twarning: 'text-warning-accent',\n\tdestructive: 'text-destructive',\n\tinfo: 'text-info',\n};\n\nconst PRODUCT_STATUS_TONES: ReadonlySet<ProductTone> = new Set<ProductTone>(['success', 'warning', 'destructive', 'info']);\n\n/** Whether a tone states a status. Neutral and primary are presentation, not state. */\nexport function isProductStatusTone(tone: ProductTone | undefined): tone is ProductTone {\n\treturn tone !== undefined && PRODUCT_STATUS_TONES.has(tone);\n}\n\nexport function clampProductPercent(value: number): number {\n\tif (!Number.isFinite(value)) return 0;\n\treturn Math.min(100, Math.max(0, Math.round(value)));\n}\n\nexport function ProductToneDot({ tone = 'neutral' }: { tone?: ProductTone }) {\n\treturn (\n\t\t<span\n\t\t\taria-hidden=\"true\"\n\t\t\tclassName={cn('product-tone-dot--component', dotRecipes.marker, {\n\t\t\t\t'bg-muted-foreground': tone === 'neutral' || tone === 'primary',\n\t\t\t\t'bg-success': tone === 'success',\n\t\t\t\t'bg-warning': tone === 'warning',\n\t\t\t\t'bg-destructive': tone === 'destructive',\n\t\t\t\t'bg-info': tone === 'info',\n\t\t\t})}\n\t\t/>\n\t);\n}\n","import { Value } from '../../../primitives';\nimport { Stack } from '../../../base/structure';\nimport { DisplayLabel, Text } from '../../../typography';\n\nimport type { ProductMetricSummary, ProductStructureMetric } from '../products.types';\nimport { ProductToneDot, isProductStatusTone } from './product-tone';\n\n/**\n * A headline fact: label above an emphasised value, in the same label-over-value\n * anatomy as the metadata lists beside it. No tile chrome — the parent grid's\n * gap separates metrics — and colour appears only as a status dot when the\n * metric's tone states a status.\n */\nexport function ProductMetricTile({ metric }: { metric: ProductStructureMetric | ProductMetricSummary }) {\n\tconst icon = 'icon' in metric ? metric.icon : undefined;\n\n\treturn (\n\t\t<Stack gap=\"dense\" className=\"product-metric-tile--component min-w-0\">\n\t\t\t<Stack direction=\"horizontal\" gap=\"sm\" wrap={false}>\n\t\t\t\t{isProductStatusTone(metric.tone) && <ProductToneDot tone={metric.tone} />}\n\t\t\t\t{!!icon && <span className=\"flex shrink-0 text-muted-foreground\">{icon}</span>}\n\t\t\t\t<DisplayLabel className=\"truncate text-inherit\">{metric.label}</DisplayLabel>\n\t\t\t</Stack>\n\t\t\t<Value type=\"inherit\" weight=\"semibold\" className=\"tabular-nums\">\n\t\t\t\t{metric.value}\n\t\t\t</Value>\n\t\t\t{!!metric.description && (\n\t\t\t\t<Text size=\"xs\" type=\"secondary\" lineHeight=\"snug\">\n\t\t\t\t\t{metric.description}\n\t\t\t\t</Text>\n\t\t\t)}\n\t\t</Stack>\n\t);\n}\n","import { DataTableActions, type TableAction } from '../../table';\nimport { cn } from '../../../../lib/utils';\n\nexport function ProductRowActions<TItem>({\n\titem,\n\tactions,\n\tmenuLabel,\n\tclassName,\n}: {\n\t/** The record this row represents. */\n\titem: TItem;\n\t/** Controls offered on the row. */\n\tactions: TableAction<TItem>[];\n\t/** Accessible name for the overflow trigger. */\n\tmenuLabel: string;\n\tclassName?: string;\n}) {\n\tif (actions.length === 0) return null;\n\n\treturn (\n\t\t<div className={cn('product-row-actions--component flex justify-end', className)}>\n\t\t\t<DataTableActions\n\t\t\t\trow={item}\n\t\t\t\tactions={actions}\n\t\t\t\tmenuLabel={menuLabel}\n\t\t\t\tdisplayMode=\"menu\"\n\t\t\t/>\n\t\t</div>\n\t);\n}\n","import type { ReactNode } from 'react';\n\nimport { Badge } from '../../../base/badge';\nimport { Button } from '../../../base/buttons';\nimport {\n\tItem,\n\tItemActions,\n\tItemContent,\n\tItemDescription,\n\tItemMedia,\n\tItemTitle,\n} from '../../../base/item';\nimport { Stack } from '../../../base/structure';\nimport { Value } from '../../../primitives';\nimport { Text } from '../../../typography';\nimport { cn } from '../../../../lib/utils';\n\nimport type {\n\tProductOperationsItem,\n\tProductOptionSummary,\n\tProductPolicySummary,\n\tProductReadinessItem,\n\tProductStructureMetric,\n\tProductTone,\n} from '../products.types';\nimport {\n\tPRODUCT_TONE_BADGE,\n\tPRODUCT_TONE_TEXT,\n\tProductToneDot,\n\tisProductStatusTone,\n} from './product-tone';\n\n// Match Item's readable identity basis so action-heavy rows wrap by parent width.\nconst PRODUCT_ROW_CONTENT = 'min-w-0 basis-48';\nconst PRODUCT_ROW_TITLE = 'line-clamp-none break-words overflow-visible';\nconst PRODUCT_ROW_ACTIONS = 'ml-auto shrink-0 flex-wrap justify-end gap-space-md';\n\n/**\n * Title line of a product row. A row's short value and chip sit beside the\n * label, so the trailing edge holds only commands and every row in a list keeps\n * the same trailing width. A status tone turns the value into a status badge;\n * any other value stays quiet secondary copy.\n */\nfunction ProductRowHeading({\n\tlabel,\n\tvalue,\n\ttone,\n\tbadge,\n}: {\n\tlabel: ReactNode;\n\tvalue?: ReactNode;\n\ttone?: ProductTone;\n\tbadge?: ReactNode;\n}) {\n\tconst title = <ItemTitle className={PRODUCT_ROW_TITLE}>{label}</ItemTitle>;\n\tif (!value && !badge) return title;\n\n\treturn (\n\t\t<Stack direction=\"horizontal\" gap=\"sm\" className=\"product-row--heading\">\n\t\t\t{title}\n\t\t\t{!!value && (isProductStatusTone(tone) ? (\n\t\t\t\t<Badge tone={PRODUCT_TONE_BADGE[tone]}>{value}</Badge>\n\t\t\t) : (\n\t\t\t\t<Text tag=\"span\" type=\"secondary\" lineHeight=\"tight\">{value}</Text>\n\t\t\t))}\n\t\t\t{badge}\n\t\t</Stack>\n\t);\n}\n\nfunction ProductRowSelect({ label, onSelect }: { label: ReactNode; onSelect: () => void }) {\n\treturn (\n\t\t<Button type=\"button\" tone=\"secondary\" buttonStyle=\"ghost\" onClick={onSelect}>\n\t\t\t{label}\n\t\t</Button>\n\t);\n}\n\nexport function ProductStructureMetricRow({\n\tmetric,\n\tactions,\n}: {\n\t/** The metric this row shows. */\n\tmetric: ProductStructureMetric;\n\t/** Controls offered on the row. */\n\tactions?: ReactNode;\n}) {\n\treturn (\n\t\t<Item className=\"product-structure-metric-row--component product-structure-card--item\">\n\t\t\t{!!metric.icon && (\n\t\t\t\t<ItemMedia variant=\"icon\" className=\"text-muted-foreground\">\n\t\t\t\t\t{metric.icon}\n\t\t\t\t</ItemMedia>\n\t\t\t)}\n\t\t\t<ItemContent className={PRODUCT_ROW_CONTENT}>\n\t\t\t\t<ItemTitle className={PRODUCT_ROW_TITLE}>{metric.label}</ItemTitle>\n\t\t\t\t{!!metric.description && <ItemDescription clamp={2}>{metric.description}</ItemDescription>}\n\t\t\t</ItemContent>\n\t\t\t<ItemActions className=\"ml-auto shrink-0 gap-space-md\">\n\t\t\t\t<Value type=\"inherit\" weight=\"semibold\" className={cn('tabular-nums', metric.tone && PRODUCT_TONE_TEXT[metric.tone])}>\n\t\t\t\t\t{metric.value}\n\t\t\t\t</Value>\n\t\t\t\t{actions}\n\t\t\t</ItemActions>\n\t\t</Item>\n\t);\n}\n\nexport function ProductReadinessRow({\n\titem,\n\tactionFallback,\n\tonSelect,\n\tactions,\n}: {\n\t/** The record this row represents. */\n\titem: ProductReadinessItem;\n\t/** Shown when a row has no actions. */\n\tactionFallback: ReactNode;\n\tonSelect?: () => void;\n\t/** Controls offered on the row. */\n\tactions?: ReactNode;\n}) {\n\t// The leading dot is the checklist state: done, flagged by tone, or pending.\n\tconst state = item.tone ?? (item.completed ? 'success' : 'neutral');\n\tconst select = item.onSelect ?? onSelect;\n\n\treturn (\n\t\t<Item className=\"product-readiness-row--component product-readiness-card--item\">\n\t\t\t<ItemMedia className=\"product-readiness-row--state h-icon-lg\">\n\t\t\t\t<ProductToneDot tone={state} />\n\t\t\t</ItemMedia>\n\t\t\t<ItemContent className={PRODUCT_ROW_CONTENT}>\n\t\t\t\t<ProductRowHeading label={item.label} value={item.value} tone={item.tone} />\n\t\t\t\t{!!item.description && <ItemDescription clamp={2}>{item.description}</ItemDescription>}\n\t\t\t</ItemContent>\n\t\t\t{!!(select || actions) && (\n\t\t\t\t<ItemActions className={PRODUCT_ROW_ACTIONS}>\n\t\t\t\t\t{!!select && <ProductRowSelect label={item.actionLabel ?? actionFallback} onSelect={select} />}\n\t\t\t\t\t{actions}\n\t\t\t\t</ItemActions>\n\t\t\t)}\n\t\t</Item>\n\t);\n}\n\nexport function ProductOperationRow({\n\titem,\n\tactionFallback,\n\tonSelect,\n\tactions,\n}: {\n\t/** The record this row represents. */\n\titem: ProductOperationsItem;\n\t/** Shown when a row has no actions. */\n\tactionFallback: ReactNode;\n\tonSelect?: () => void;\n\t/** Controls offered on the row. */\n\tactions?: ReactNode;\n}) {\n\tconst select = item.onSelect ?? onSelect;\n\n\treturn (\n\t\t<Item className=\"product-operation-row--component product-operations-card--item\">\n\t\t\t<ItemContent className={PRODUCT_ROW_CONTENT}>\n\t\t\t\t<ProductRowHeading label={item.label} value={item.value} tone={item.tone} />\n\t\t\t\t{!!item.description && <ItemDescription clamp={2}>{item.description}</ItemDescription>}\n\t\t\t</ItemContent>\n\t\t\t{!!(select || actions) && (\n\t\t\t\t<ItemActions className={PRODUCT_ROW_ACTIONS}>\n\t\t\t\t\t{!!select && <ProductRowSelect label={item.actionLabel ?? actionFallback} onSelect={select} />}\n\t\t\t\t\t{actions}\n\t\t\t\t</ItemActions>\n\t\t\t)}\n\t\t</Item>\n\t);\n}\n\nexport function ProductSummaryRow({\n\titem,\n\tactionLabel,\n\tonSelect,\n\tactions,\n}: {\n\t/** The record this row represents. */\n\titem: ProductOptionSummary | ProductPolicySummary;\n\t/** Copy for the row's inline action. */\n\tactionLabel?: ReactNode;\n\tonSelect?: () => void;\n\t/** Controls offered on the row. */\n\tactions?: ReactNode;\n}) {\n\tconst values = 'values' in item ? item.values : undefined;\n\n\treturn (\n\t\t<Item className=\"product-summary-row--component\">\n\t\t\t<ItemContent className={PRODUCT_ROW_CONTENT}>\n\t\t\t\t<ProductRowHeading label={item.label} value={item.value} tone={item.tone} badge={item.badge} />\n\t\t\t\t{!!item.description && <ItemDescription clamp={2}>{item.description}</ItemDescription>}\n\t\t\t\t{!!values?.length && (\n\t\t\t\t\t<div className=\"mt-space-md flex flex-wrap gap-space-xs\">\n\t\t\t\t\t\t{values.map((value, index) => (\n\t\t\t\t\t\t\t<Badge key={index} tone=\"secondary\">\n\t\t\t\t\t\t\t\t{value}\n\t\t\t\t\t\t\t</Badge>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t</ItemContent>\n\t\t\t{!!(onSelect || actions) && (\n\t\t\t\t<ItemActions className={PRODUCT_ROW_ACTIONS}>\n\t\t\t\t\t{!!onSelect && <ProductRowSelect label={actionLabel} onSelect={onSelect} />}\n\t\t\t\t\t{actions}\n\t\t\t\t</ItemActions>\n\t\t\t)}\n\t\t</Item>\n\t);\n}\n","import {\n\tEye,\n\tPencil,\n\tPlus,\n\tTrash2 } from 'lucide-react';\n\nimport { Button } from '../../../base/buttons';\nimport { ContentBlock } from '../../../base/display';\nimport { Grid, Stack } from '../../../base/structure';\nimport { MetadataList } from '../../../base/metadata-list';\nimport { ItemGroup } from '../../../base/item';\nimport { Text } from '../../../typography';\nimport { useStrings } from '../../../../lib/strings';\nimport { cn } from '../../../../lib/utils';\n\nimport { defaultProductContractOverviewStrings } from '../products.strings';\nimport type { ProductContractOverviewProps } from '../products.types';\nimport { ProductEmptyState } from '../partials/product-empty-state';\nimport { ProductMetricTile } from '../partials/product-metric-tile';\nimport { ProductRowActions } from '../partials/product-actions';\nimport { ProductSummaryRow } from '../partials/product-rows';\n\n/**\n * One main column region of the product editor.\n *\n * @deprecated An internal region of `ProductOverview`, which renders it from its `contract` prop (still typed `ProductContractOverviewProps`). Pass the same props there and add custom content through the overview's slots. Kept exported for compatibility.\n */\nexport function ProductContractOverview({\n\tmetrics = [],\n\tterms = [],\n\trules = [],\n\tonOpenContract,\n\tonEditContract,\n\tonCreateRule,\n\tonSelectRule,\n\tonEditRule,\n\tonDeleteRule,\n\trenderRuleActions,\n\tactions,\n\tfooterSlot,\n\tempty,\n\tclassName,\n\tstrings: stringsProp,\n}: ProductContractOverviewProps) {\n\tconst strings = useStrings(defaultProductContractOverviewStrings, stringsProp);\n\tconst hasContent = metrics.length > 0 || terms.length > 0 || rules.length > 0;\n\tconst headerAction = onOpenContract || onEditContract || onCreateRule ? (\n\t\t<div className=\"flex items-center gap-space-md\">\n\t\t\t{!!onCreateRule && (\n\t\t\t\t<Button type=\"button\" tone=\"secondary\" buttonStyle=\"ghost\" onClick={onCreateRule} icon={Plus}>\n\t\t\t\t\t{strings.createRuleLabel}\n\t\t\t\t</Button>\n\t\t\t)}\n\t\t\t{!!onEditContract && (\n\t\t\t\t<Button type=\"button\" tone=\"secondary\" buttonStyle=\"ghost\" onClick={onEditContract}>\n\t\t\t\t\t{strings.editLabel}\n\t\t\t\t</Button>\n\t\t\t)}\n\t\t\t{!!onOpenContract && (\n\t\t\t\t<Button type=\"button\" tone=\"secondary\" buttonStyle=\"ghost\" onClick={onOpenContract}>\n\t\t\t\t\t{strings.actionLabel}\n\t\t\t\t</Button>\n\t\t\t)}\n\t\t</div>\n\t) : undefined;\n\n\treturn (\n\t\t<ContentBlock\n\t\t\ttitle={strings.title}\n\t\t\tdescription={strings.description}\n\t\t\tactions={actions}\n\t\t\theaderAction={headerAction}\n\t\t\tfooterSlot={footerSlot}\n\t\t\tclassName={cn('product-contract-overview--component w-full', className)}\n\t\t>\n\t\t\t{!hasContent ? (\n\t\t\t\tempty ?? (\n\t\t\t\t\t<ProductEmptyState\n\t\t\t\t\t\ttitle={strings.emptyTitle}\n\t\t\t\t\t\tdescription={strings.emptyDescription}\n\t\t\t\t\t\taction={onCreateRule ? (\n\t\t\t\t\t\t\t<Button tone=\"primary\" type=\"button\" onClick={onCreateRule} icon={Plus}>\n\t\t\t\t\t\t\t\t{strings.createRuleLabel}\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t) : undefined}\n\t\t\t\t\t/>\n\t\t\t\t)\n\t\t\t) : (\n\t\t\t\t<Stack gap=\"2xl\">\n\t\t\t\t\t{metrics.length > 0 && (\n\t\t\t\t\t\t<Grid columns={{ base: 1, sm: 3 }} gap=\"md\">\n\t\t\t\t\t\t\t{metrics.map((metric) => (\n\t\t\t\t\t\t\t\t<ProductMetricTile key={metric.id} metric={metric} />\n\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t</Grid>\n\t\t\t\t\t)}\n\t\t\t\t\t{terms.length > 0 && (\n\t\t\t\t\t\t<Stack gap=\"md\">\n\t\t\t\t\t\t\t<Text type=\"inherit\" weight=\"semibold\">{strings.termsTitle}</Text>\n\t\t\t\t\t\t\t<MetadataList adaptTo=\"container\" items={terms} columns={2} density=\"compact\" />\n\t\t\t\t\t\t</Stack>\n\t\t\t\t\t)}\n\t\t\t\t\t{rules.length > 0 && (\n\t\t\t\t\t\t<Stack gap=\"md\">\n\t\t\t\t\t\t\t<Text type=\"inherit\" weight=\"semibold\">{strings.rulesTitle}</Text>\n\t\t\t\t\t\t\t<ItemGroup>\n\t\t\t\t\t\t\t\t{rules.map((rule, index) => {\n\t\t\t\t\t\t\t\t\tconst onSelect = onSelectRule ? () => onSelectRule(rule) : undefined;\n\t\t\t\t\t\t\t\t\tconst onEdit = onEditRule ? () => onEditRule(rule) : undefined;\n\t\t\t\t\t\t\t\t\tconst onDelete = onDeleteRule ? () => onDeleteRule(rule) : undefined;\n\t\t\t\t\t\t\t\t\tconst ruleActions = [\n\t\t\t\t\t\t\t\t\t\t...(onSelect ? [{\n\t\t\t\t\t\t\t\t\t\t\tid: 'open',\n\t\t\t\t\t\t\t\t\t\t\tlabel: strings.viewRuleLabel,\n\t\t\t\t\t\t\t\t\t\t\ticon: <Eye className=\"size-icon-md\" />,\n\t\t\t\t\t\t\t\t\t\t\tonClick: () => onSelect(),\n\t\t\t\t\t\t\t\t\t\t\ttone: 'secondary' as const, buttonStyle: 'ghost' as const,\n\t\t\t\t\t\t\t\t\t\t}] : []),\n\t\t\t\t\t\t\t\t\t\t...(onEdit ? [{\n\t\t\t\t\t\t\t\t\t\t\tid: 'edit',\n\t\t\t\t\t\t\t\t\t\t\tlabel: strings.editRuleLabel,\n\t\t\t\t\t\t\t\t\t\t\ticon: <Pencil className=\"size-icon-md\" />,\n\t\t\t\t\t\t\t\t\t\t\tonClick: () => onEdit(),\n\t\t\t\t\t\t\t\t\t\t\ttone: 'secondary' as const, buttonStyle: 'ghost' as const,\n\t\t\t\t\t\t\t\t\t\t}] : []),\n\t\t\t\t\t\t\t\t\t\t...(onDelete ? [{\n\t\t\t\t\t\t\t\t\t\t\tid: 'delete',\n\t\t\t\t\t\t\t\t\t\t\tlabel: strings.deleteRuleLabel,\n\t\t\t\t\t\t\t\t\t\t\ticon: <Trash2 className=\"size-icon-md\" />,\n\t\t\t\t\t\t\t\t\t\t\tonClick: () => onDelete(),\n\t\t\t\t\t\t\t\t\t\t\ttone: 'destructive' as const,\n\t\t\t\t\t\t\t\t\t\t}] : []),\n\t\t\t\t\t\t\t\t\t];\n\t\t\t\t\t\t\t\t\tconst rowActions = renderRuleActions\n\t\t\t\t\t\t\t\t\t\t? renderRuleActions(rule, { index, onSelect, onEdit, onDelete })\n\t\t\t\t\t\t\t\t\t\t: <ProductRowActions item={rule} actions={ruleActions} menuLabel={strings.ruleActionsLabel} />;\n\n\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t<ProductSummaryRow\n\t\t\t\t\t\t\t\t\t\t\tkey={rule.id}\n\t\t\t\t\t\t\t\t\t\t\titem={rule}\n\t\t\t\t\t\t\t\t\t\t\tactions={rowActions}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t</ItemGroup>\n\t\t\t\t\t\t</Stack>\n\t\t\t\t\t)}\n\t\t\t\t</Stack>\n\t\t\t)}\n\t\t</ContentBlock>\n\t);\n}\n\nProductContractOverview.displayName = 'ProductContractOverview';\n","import { Button } from '../../../base/buttons';\nimport { ContentBlock } from '../../../base/display';\nimport { MetadataList } from '../../../base/metadata-list';\nimport { useStrings } from '../../../../lib/strings';\nimport { cn } from '../../../../lib/utils';\n\nimport { defaultProductDetailsCardStrings } from '../products.strings';\nimport type { ProductDetailsCardProps } from '../products.types';\nimport { ProductEmptyState } from '../partials/product-empty-state';\n\n/**\n * One main column region of the product editor.\n *\n * @deprecated An internal region of `ProductOverview`, which renders it from its `details` prop (still typed `ProductDetailsCardProps`). Pass the same props there and add custom content through the overview's slots. Kept exported for compatibility.\n */\nexport function ProductDetailsCard({\n\ttitle,\n\tdescription,\n\tmetadata = [],\n\tmedia,\n\tonEditDetails,\n\tactions,\n\theaderEnd,\n\tfooterSlot,\n\tempty,\n\tclassName,\n\tstrings: stringsProp,\n}: ProductDetailsCardProps) {\n\tconst strings = useStrings(defaultProductDetailsCardStrings, stringsProp);\n\tconst headerAction = onEditDetails ? (\n\t\t<Button type=\"button\" tone=\"secondary\" buttonStyle=\"ghost\" onClick={onEditDetails}>\n\t\t\t{strings.editLabel}\n\t\t</Button>\n\t) : undefined;\n\n\treturn (\n\t\t<ContentBlock\n\t\t\ttitle={title ?? strings.title}\n\t\t\tdescription={description === false ? undefined : description ?? strings.description}\n\t\t\tactions={actions}\n\t\t\theaderAction={headerAction}\n\t\t\theaderEnd={headerEnd}\n\t\t\tfooterSlot={footerSlot}\n\t\t\tclassName={cn('product-details-card--component w-full', className)}\n\t\t>\n\t\t\t{metadata.length === 0 && !media ? (\n\t\t\t\tempty ?? <ProductEmptyState title={strings.emptyTitle} description={strings.emptyDescription} />\n\t\t\t) : (\n\t\t\t\t<div className=\"@container/product-details\">\n\t\t\t\t\t<div className={cn('grid min-w-0 grid-cols-1 gap-space-xl', media && metadata.length > 0 && '@xl/product-details:grid-cols-[12rem_minmax(0,1fr)]')}>\n\t\t\t\t\t\t{!!media && (\n\t\t\t\t\t\t\t<div className=\"product-details-card--media self-start overflow-hidden rounded-radius border border-border bg-muted/30\">\n\t\t\t\t\t\t\t\t{media}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{metadata.length > 0 && <MetadataList\n\t\t\t\t\t\t\tadaptTo=\"container\"\n\t\t\t\t\t\t\titems={metadata}\n\t\t\t\t\t\t\tcolumns={media ? 1 : 2}\n\t\t\t\t\t\t\tdensity=\"compact\"\n\t\t\t\t\t\t\tclassName=\"min-w-0 [&_.metadata-list--value]:break-words\"\n\t\t\t\t\t\t/>}\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</ContentBlock>\n\t);\n}\n\nProductDetailsCard.displayName = 'ProductDetailsCard';\n","import { Eye, Pencil, Trash2 } from 'lucide-react';\n\nimport { useStrings } from '../../../../lib/strings';\nimport { cn } from '../../../../lib/utils';\n\nimport {\n\tdefaultProductOptionActionMenuStrings,\n} from '../products.strings';\nimport type {\n\tProductOptionActionMenuProps,\n\tProductOptionSummary,\n} from '../products.types';\nimport { ProductRowActions } from '../partials/product-actions';\n\n/**\n * Row menu for one product option.\n *\n * @deprecated An internal part of `ProductOptionsSummary` (and so of `ProductOverview`), which renders it for every option. Replace it there with `renderOptionActions`, composing the base `ActionMenu` if needed. Kept exported for compatibility.\n */\nexport function ProductOptionActionMenu({\n\toption,\n\tindex = 0,\n\tonSelectOption,\n\tonEditOption,\n\tonDeleteOption,\n\trenderOptionActions,\n\tmenuLabel,\n\tclassName,\n\tstrings: stringsProp,\n}: ProductOptionActionMenuProps) {\n\tconst strings = useStrings(defaultProductOptionActionMenuStrings, stringsProp);\n\tconst onSelect = onSelectOption ? () => onSelectOption(option) : undefined;\n\tconst onEdit = onEditOption ? () => onEditOption(option) : undefined;\n\tconst onDelete = onDeleteOption ? () => onDeleteOption(option) : undefined;\n\tconst hasActions = !!(onSelect || onEdit || onDelete || renderOptionActions);\n\n\tif (!hasActions) return null;\n\n\tif (renderOptionActions) {\n\t\treturn (\n\t\t\t<div className={cn('product-option-action-menu--component flex justify-end', className)}>\n\t\t\t\t{renderOptionActions(option, { index, onSelect, onEdit, onDelete })}\n\t\t\t</div>\n\t\t);\n\t}\n\n\treturn (\n\t\t<ProductRowActions<ProductOptionSummary>\n\t\t\titem={option}\n\t\t\tmenuLabel={menuLabel ?? strings.actionsLabel}\n\t\t\tclassName={cn('product-option-action-menu--component', className)}\n\t\t\tactions={[\n\t\t\t\t...(onSelect ? [{\n\t\t\t\t\tid: 'open',\n\t\t\t\t\tlabel: strings.viewLabel,\n\t\t\t\t\ticon: <Eye className=\"size-icon-md\" />,\n\t\t\t\t\tonClick: () => onSelect(),\n\t\t\t\t\ttone: 'secondary' as const, buttonStyle: 'ghost' as const,\n\t\t\t\t}] : []),\n\t\t\t\t...(onEdit ? [{\n\t\t\t\t\tid: 'edit',\n\t\t\t\t\tlabel: strings.editLabel,\n\t\t\t\t\ticon: <Pencil className=\"size-icon-md\" />,\n\t\t\t\t\tonClick: () => onEdit(),\n\t\t\t\t\ttone: 'secondary' as const, buttonStyle: 'ghost' as const,\n\t\t\t\t}] : []),\n\t\t\t\t...(onDelete ? [{\n\t\t\t\t\tid: 'delete',\n\t\t\t\t\tlabel: strings.deleteLabel,\n\t\t\t\t\ticon: <Trash2 className=\"size-icon-md\" />,\n\t\t\t\t\tonClick: () => onDelete(),\n\t\t\t\t\ttone: 'destructive' as const,\n\t\t\t\t}] : []),\n\t\t\t]}\n\t\t/>\n\t);\n}\n\nProductOptionActionMenu.displayName = 'ProductOptionActionMenu';\n","import { Pencil, Plus, Trash2 } from 'lucide-react';\n\nimport { Button } from '../../../base/buttons';\nimport { ContentBlock } from '../../../base/display';\nimport { ItemGroup } from '../../../base/item';\nimport { useStrings } from '../../../../lib/strings';\nimport { cn } from '../../../../lib/utils';\n\nimport { defaultProductOperationsCardStrings } from '../products.strings';\nimport type { ProductOperationsCardProps } from '../products.types';\nimport { ProductEmptyState } from '../partials/product-empty-state';\nimport { ProductRowActions } from '../partials/product-actions';\nimport { ProductOperationRow } from '../partials/product-rows';\n\n/**\n * One support rail region of the product editor.\n *\n * @deprecated An internal region of `ProductOverview`, which renders it from its `operations` prop (still typed `ProductOperationsCardProps`). Pass the same props there and add custom content through the overview's slots. Kept exported for compatibility.\n */\nexport function ProductOperationsCard({\n\titems = [],\n\tonCreateOperation,\n\tonSelectOperation,\n\tonEditOperation,\n\tonDeleteOperation,\n\trenderOperationActions,\n\tactions,\n\tfooterSlot,\n\trenderItem,\n\tempty,\n\tclassName,\n\tstrings: stringsProp,\n}: ProductOperationsCardProps) {\n\tconst strings = useStrings(defaultProductOperationsCardStrings, stringsProp);\n\tconst headerAction = onCreateOperation ? (\n\t\t<Button type=\"button\" tone=\"secondary\" buttonStyle=\"ghost\" onClick={onCreateOperation} icon={Plus}>\n\t\t\t{strings.createLabel}\n\t\t</Button>\n\t) : undefined;\n\n\treturn (\n\t\t<ContentBlock\n\t\t\ttitle={strings.title}\n\t\t\tdescription={strings.description}\n\t\t\tactions={actions}\n\t\t\theaderAction={headerAction}\n\t\t\tfooterSlot={footerSlot}\n\t\t\tclassName={cn('product-operations-card--component w-full', className)}\n\t\t>\n\t\t\t{items.length === 0 ? (\n\t\t\t\tempty ?? (\n\t\t\t\t\t<ProductEmptyState\n\t\t\t\t\t\ttitle={strings.emptyTitle}\n\t\t\t\t\t\tdescription={strings.emptyDescription}\n\t\t\t\t\t\taction={onCreateOperation ? (\n\t\t\t\t\t\t\t<Button tone=\"primary\" type=\"button\" onClick={onCreateOperation} icon={Plus}>\n\t\t\t\t\t\t\t\t{strings.createLabel}\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t) : undefined}\n\t\t\t\t\t/>\n\t\t\t\t)\n\t\t\t) : (\n\t\t\t\t<ItemGroup>\n\t\t\t\t\t{items.map((item, index) => {\n\t\t\t\t\t\tconst onSelect = onSelectOperation ? () => onSelectOperation(item) : undefined;\n\t\t\t\t\t\tconst onEdit = onEditOperation ? () => onEditOperation(item) : undefined;\n\t\t\t\t\t\tconst onDelete = onDeleteOperation ? () => onDeleteOperation(item) : undefined;\n\t\t\t\t\t\tconst operationActions = [\n\t\t\t\t\t\t\t...(onEdit ? [{\n\t\t\t\t\t\t\t\tid: 'edit',\n\t\t\t\t\t\t\t\tlabel: strings.editLabel,\n\t\t\t\t\t\t\t\ticon: <Pencil className=\"size-icon-md\" />,\n\t\t\t\t\t\t\t\tonClick: () => onEdit(),\n\t\t\t\t\t\t\t\ttone: 'secondary' as const, buttonStyle: 'ghost' as const,\n\t\t\t\t\t\t\t}] : []),\n\t\t\t\t\t\t\t...(onDelete ? [{\n\t\t\t\t\t\t\t\tid: 'delete',\n\t\t\t\t\t\t\t\tlabel: strings.deleteLabel,\n\t\t\t\t\t\t\t\ticon: <Trash2 className=\"size-icon-md\" />,\n\t\t\t\t\t\t\t\tonClick: () => onDelete(),\n\t\t\t\t\t\t\t\ttone: 'destructive' as const,\n\t\t\t\t\t\t\t}] : []),\n\t\t\t\t\t\t];\n\t\t\t\t\t\tconst rowActions = renderOperationActions\n\t\t\t\t\t\t\t? renderOperationActions(item, { index, onSelect, onEdit, onDelete })\n\t\t\t\t\t\t\t: <ProductRowActions item={item} actions={operationActions} menuLabel={strings.actionsLabel} />;\n\n\t\t\t\t\t\treturn renderItem ? (\n\t\t\t\t\t\t\t<div key={item.id}>{renderItem(item, index)}</div>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<ProductOperationRow\n\t\t\t\t\t\t\t\tkey={item.id}\n\t\t\t\t\t\t\t\titem={item}\n\t\t\t\t\t\t\t\tactionFallback={strings.actionLabel}\n\t\t\t\t\t\t\t\tonSelect={onSelect}\n\t\t\t\t\t\t\t\tactions={rowActions}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t);\n\t\t\t\t\t})}\n\t\t\t\t</ItemGroup>\n\t\t\t)}\n\t\t</ContentBlock>\n\t);\n}\n\nProductOperationsCard.displayName = 'ProductOperationsCard';\n","import {compositionClasses} from '../../../base/structure/composition.recipes';\nimport { ChevronDown, Plus, PlusCircle, Trash2, X } from 'lucide-react';\nimport { Fragment, useCallback, useEffect, useMemo, useRef, useState, type ReactNode } from 'react';\n\nimport { Badge } from '../../../base/badge';\nimport { Button } from '../../../base/buttons';\nimport { Alert, AlertDescription, AlertTitle } from '../../../base/feedback';\nimport { ConfirmDialog, useOverlayVisibility } from '../../overlays';\nimport { interpolateString } from '../../../../lib/strings';\nimport { ContentBlock } from '../../../base/display';\nimport { FormField } from '../../../base/forms';\nimport { Input } from '../../../base/text-inputs';\nimport { Switch } from '../../../base/choice-inputs';\nimport { Stack } from '../../../base/structure';\nimport { Text } from '../../../typography';\nimport { useStrings } from '../../../../lib/strings';\nimport { cn } from '../../../../lib/utils';\nimport { fieldAffordanceRecipes } from '../../../../lib/field-affordance-recipes';\n\nimport {\n\tdefaultProductOptionsMatrixStrings,\n} from '../products.strings';\nimport type {\n\tProductOptionEditDraft,\n\tProductOptionGroup,\n\tProductOptionsMatrixProps,\n} from '../products.types';\nimport { ProductEmptyState } from '../partials/product-empty-state';\nimport { ProductRowActions } from '../partials/product-actions';\nimport { focusRecipes } from '../../../../lib/focus-recipes';\nimport { interactionRecipes } from '../../../../lib/interaction-recipes';\n\nfunction getPlainText(value: ReactNode): string {\n\treturn isScalarText(value) ? String(value) : '';\n}\n\nfunction isScalarText(value: ReactNode): value is string | number | bigint {\n\treturn typeof value === 'string' || typeof value === 'number' || typeof value === 'bigint';\n}\n\nfunction getOptionEditLabel(prefix: string, option: ProductOptionGroup): string {\n\tconst optionName = getPlainText(option.name);\n\treturn optionName ? `${prefix}: ${optionName}` : prefix;\n}\n\nfunction getOptionDraft(option: ProductOptionGroup): ProductOptionEditDraft {\n\treturn {\n\t\tname: getPlainText(option.name),\n\t\tvalues: (option.values ?? []).map((value) => ({\n\t\t\t...value,\n\t\t})),\n\t};\n}\n\nexport function ProductOptionsMatrix({\n\toptionGroups = [],\n\tsurface = 'card',\n\tcollapsedOptionIds,\n\tdefaultCollapsedOptionIds = [],\n\tonCollapsedOptionIdsChange,\n\teditingOptionId,\n\tdefaultEditingOptionId,\n\tonEditingOptionIdChange,\n\tonCreateOption,\n\tonEditOption,\n\tonDeleteOption,\n\tconfirmDelete,\n\tonAddValue,\n\tonDeleteValue,\n\tonOptionNameChange,\n\tonValueLabelChange,\n\tonDoneEditingOption,\n\tonSaveEditingOption,\n\tonError,\n\tonCancelEditingOption,\n\tonToggleUsedForVariants,\n\trenderOptionActions,\n\trenderValue,\n\tshowHeader: showHeaderProp,\n\tshowCollapseControls = true,\n\tshowInlineActions = true,\n\tshowVariantToggle = true,\n\tactions,\n\theaderEnd,\n\tfooterSlot,\n\tempty,\n\tclassName,\n\tstrings: stringsProp,\n}: ProductOptionsMatrixProps) {\n\tconst strings = useStrings(defaultProductOptionsMatrixStrings, stringsProp);\n\tconst isCollapsedControlled = collapsedOptionIds !== undefined;\n\tconst [internalCollapsedOptionIds, setInternalCollapsedOptionIds] = useState(defaultCollapsedOptionIds);\n\tconst resolvedCollapsedOptionIds = isCollapsedControlled ? collapsedOptionIds : internalCollapsedOptionIds;\n\tconst collapsedOptionIdSet = useMemo(() => new Set(resolvedCollapsedOptionIds), [resolvedCollapsedOptionIds]);\n\tconst supportsInlineEditing =\n\t\teditingOptionId !== undefined ||\n\t\tdefaultEditingOptionId !== undefined ||\n\t\t!!onEditingOptionIdChange ||\n\t\t!!onOptionNameChange ||\n\t\t!!onValueLabelChange ||\n\t\t!!onDoneEditingOption ||\n\t\t!!onSaveEditingOption ||\n\t\t!!onCancelEditingOption;\n\tconst isEditingControlled = editingOptionId !== undefined;\n\tconst [internalEditingOptionId, setInternalEditingOptionId] = useState<string | null>(defaultEditingOptionId ?? null);\n\tconst [draftByOptionId, setDraftByOptionId] = useState<Record<string, ProductOptionEditDraft>>({});\n\tconst savingRef = useRef(false);\n\tconst mountedRef = useRef(true);\n\tconst [savingOptionId, setSavingOptionId] = useState<string | null>(null);\n\tconst [saveFailure, setSaveFailure] = useState<{ optionId: string; message: string } | null>(null);\n\tconst errorRef = useRef<HTMLDivElement>(null);\n\tconst nextDraftValueId = useRef(0);\n\t// A value added from the editor takes focus, so it can be typed at once.\n\tconst focusValueIdRef = useRef<string | null>(null);\n\tconst focusAddedValue = useCallback((node: HTMLInputElement | null) => {\n\t\tif (!node) return;\n\t\tnode.focus();\n\t\tfocusValueIdRef.current = null;\n\t}, []);\n\tconst isSaving = savingOptionId !== null;\n\tuseEffect(() => {\n\t\tmountedRef.current = true;\n\t\treturn () => { mountedRef.current = false; };\n\t}, []);\n\tconst resolvedEditingOptionId = supportsInlineEditing\n\t\t? (isEditingControlled ? editingOptionId : internalEditingOptionId)\n\t\t: null;\n\tconst hasGroups = optionGroups.length > 0;\n\tconst showPanelHeader = surface === 'embedded' && showHeaderProp !== false;\n\tconst showCreateRow = hasGroups && !!onCreateOption;\n\n\tconst updateCollapsedOptionIds = useCallback(\n\t\t(nextIds: string[]) => {\n\t\t\tif (!isCollapsedControlled) {\n\t\t\t\tsetInternalCollapsedOptionIds(nextIds);\n\t\t\t}\n\t\t\tonCollapsedOptionIdsChange?.(\n\t\t\t\tnextIds,\n\t\t\t\toptionGroups.filter((option) => nextIds.includes(option.id)),\n\t\t\t);\n\t\t},\n\t\t[isCollapsedControlled, onCollapsedOptionIdsChange, optionGroups],\n\t);\n\n\tconst toggleCollapsed = useCallback(\n\t\t(option: ProductOptionGroup) => {\n\t\t\tif (savingRef.current) return;\n\t\t\tconst nextIds = collapsedOptionIdSet.has(option.id)\n\t\t\t\t? resolvedCollapsedOptionIds.filter((id) => id !== option.id)\n\t\t\t\t: [...resolvedCollapsedOptionIds, option.id];\n\t\t\tupdateCollapsedOptionIds(nextIds);\n\t\t},\n\t\t[collapsedOptionIdSet, resolvedCollapsedOptionIds, updateCollapsedOptionIds],\n\t);\n\n\tconst updateEditingOptionId = useCallback(\n\t\t(nextId: string | null, option?: ProductOptionGroup) => {\n\t\t\tif (!supportsInlineEditing) return;\n\t\t\tif (!isEditingControlled) {\n\t\t\t\tsetInternalEditingOptionId(nextId);\n\t\t\t}\n\t\t\tonEditingOptionIdChange?.(nextId, option);\n\t\t},\n\t\t[isEditingControlled, onEditingOptionIdChange, supportsInlineEditing],\n\t);\n\n\tconst startEditing = useCallback(\n\t\t(option: ProductOptionGroup) => {\n\t\t\tif (savingRef.current) return;\n\t\t\tif (supportsInlineEditing && isScalarText(option.name)) {\n\t\t\t\tsetSaveFailure(null);\n\t\t\t\tsetDraftByOptionId((current) => ({\n\t\t\t\t\t...current,\n\t\t\t\t\t[option.id]: getOptionDraft(option),\n\t\t\t\t}));\n\t\t\t\tupdateEditingOptionId(option.id, option);\n\t\t\t}\n\t\t\tonEditOption?.(option);\n\t\t},\n\t\t[onEditOption, supportsInlineEditing, updateEditingOptionId],\n\t);\n\n\tconst getResolvedDraft = useCallback(\n\t\t(option: ProductOptionGroup) => draftByOptionId[option.id] ?? getOptionDraft(option),\n\t\t[draftByOptionId],\n\t);\n\n\tconst updateDraft = useCallback(\n\t\t(option: ProductOptionGroup, updater: (draft: ProductOptionEditDraft) => ProductOptionEditDraft) => {\n\t\t\tif (savingRef.current) return;\n\t\t\tsetDraftByOptionId((current) => ({\n\t\t\t\t...current,\n\t\t\t\t[option.id]: updater(current[option.id] ?? getOptionDraft(option)),\n\t\t\t}));\n\t\t},\n\t\t[],\n\t);\n\n\tconst cancelEditing = useCallback(\n\t\t(option: ProductOptionGroup) => {\n\t\t\tif (savingRef.current) return;\n\t\t\tconst draft = getResolvedDraft(option);\n\t\t\tsetSaveFailure(null);\n\t\t\tsetDraftByOptionId((current) => {\n\t\t\t\tconst { [option.id]: _removed, ...rest } = current;\n\t\t\t\treturn rest;\n\t\t\t});\n\t\t\tupdateEditingOptionId(null, option);\n\t\t\tonCancelEditingOption?.(option, draft);\n\t\t},\n\t\t[getResolvedDraft, onCancelEditingOption, updateEditingOptionId],\n\t);\n\n\t/*\n\t * The per-value trash button only edits a local draft — nothing is destroyed\n\t * until the edit is saved, and Cancel already abandons it. The destructive\n\t * moment is here, where the diff emits `onDeleteValue` once per dropped\n\t * value, so the confirmation belongs to the save and asks once for all of\n\t * them rather than once each.\n\t */\n\tconst commitEditing = useCallback(\n\t\tasync (option: ProductOptionGroup) => {\n\t\t\tif (savingRef.current) return false;\n\t\t\tsavingRef.current = true;\n\t\t\tsetSavingOptionId(option.id);\n\t\t\tsetSaveFailure(null);\n\t\t\tconst draft = getResolvedDraft(option);\n\t\t\tconst originalValues = option.values ?? [];\n\t\t\tconst originalValueIds = new Set(originalValues.map((value) => value.id));\n\t\t\tconst draftValueIds = new Set(draft.values.map((value) => value.id));\n\n\t\t\ttry {\n\t\t\t\t// Void callbacks keep their existing synchronous notification timing.\n\t\t\t\t// Only a returned Promise defers acceptance and the draft's disposal.\n\t\t\t\tconst result = onSaveEditingOption?.(option, draft);\n\t\t\t\tif (result) await result;\n\t\t\t\tif (!mountedRef.current) return false;\n\t\t\t\tif (draft.name !== getPlainText(option.name)) onOptionNameChange?.(option, draft.name);\n\t\t\t\toriginalValues.forEach((value) => {\n\t\t\t\t\tconst draftValue = draft.values.find((item) => item.id === value.id);\n\t\t\t\t\tif (draftValue && getPlainText(value.label) !== getPlainText(draftValue.label)) {\n\t\t\t\t\t\tonValueLabelChange?.(option, value, getPlainText(draftValue.label));\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tdraft.values.forEach((value) => {\n\t\t\t\t\tif (!originalValueIds.has(value.id)) {\n\t\t\t\t\t\tonAddValue?.(option);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\toriginalValues.forEach((value) => {\n\t\t\t\t\tif (!draftValueIds.has(value.id)) {\n\t\t\t\t\t\tonDeleteValue?.(option, value);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tsetDraftByOptionId((current) => {\n\t\t\t\t\tconst { [option.id]: _removed, ...rest } = current;\n\t\t\t\t\treturn rest;\n\t\t\t\t});\n\t\t\t\tupdateEditingOptionId(null, option);\n\t\t\t\tonDoneEditingOption?.(option);\n\t\t\t\treturn true;\n\t\t\t} catch (error) {\n\t\t\t\tif (mountedRef.current) {\n\t\t\t\t\tsetSaveFailure({ optionId: option.id, message: error instanceof Error && error.message ? error.message : strings.saveErrorMessage ?? defaultProductOptionsMatrixStrings.saveErrorMessage! });\n\t\t\t\t\tonError?.(error);\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t} finally {\n\t\t\t\tsavingRef.current = false;\n\t\t\t\tif (mountedRef.current) setSavingOptionId(null);\n\t\t\t}\n\t\t},\n\t\t[getResolvedDraft, onAddValue, onDeleteValue, onDoneEditingOption, onOptionNameChange, onSaveEditingOption, onError, onValueLabelChange, strings.saveErrorMessage, updateEditingOptionId],\n\t);\n\n\tconst removeValuesConfirm = useOverlayVisibility();\n\tconst [pendingSave, setPendingSave] = useState<{ option: ProductOptionGroup; removed: number } | null>(null);\n\tuseEffect(() => {\n\t\tif (saveFailure && !removeValuesConfirm.isOpen) {\n\t\t\terrorRef.current?.focus();\n\t\t\terrorRef.current?.scrollIntoView?.({ block: 'nearest' });\n\t\t}\n\t}, [saveFailure, removeValuesConfirm.isOpen]);\n\n\tconst saveEditing = useCallback(\n\t\t(option: ProductOptionGroup) => {\n\t\t\tif (savingRef.current) return;\n\t\t\tconst draft = getResolvedDraft(option);\n\t\t\tconst draftValueIds = new Set(draft.values.map((value) => value.id));\n\t\t\tconst removed = (option.values ?? []).filter((value) => !draftValueIds.has(value.id)).length;\n\n\t\t\tif (confirmDelete === false || removed === 0) {\n\t\t\t\tvoid commitEditing(option);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tsetPendingSave({ option, removed });\n\t\t\tremoveValuesConfirm.show();\n\t\t},\n\t\t[commitEditing, confirmDelete, getResolvedDraft, removeValuesConfirm],\n\t);\n\n\tconst deleteOption = useCallback(\n\t\t(option: ProductOptionGroup) => {\n\t\t\tif (savingRef.current) return;\n\t\t\tif (resolvedEditingOptionId === option.id) {\n\t\t\t\tsetDraftByOptionId((current) => {\n\t\t\t\t\tconst { [option.id]: _removed, ...rest } = current;\n\t\t\t\t\treturn rest;\n\t\t\t\t});\n\t\t\t\tupdateEditingOptionId(null, option);\n\t\t\t}\n\t\t\tonDeleteOption?.(option);\n\t\t},\n\t\t[onDeleteOption, resolvedEditingOptionId, updateEditingOptionId],\n\t);\n\n\t/*\n\t * Deleting an option group silently takes its values — and every variant\n\t * built from them — with it. That is too much to lose to a single click on\n\t * an overflow-menu item, so it asks first. `confirmDelete={false}` opts out\n\t * for apps that already confirm upstream.\n\t */\n\tconst deleteOptionConfirm = useOverlayVisibility();\n\tconst [pendingDeleteOption, setPendingDeleteOption] = useState<ProductOptionGroup | null>(null);\n\n\tconst requestDeleteOption = useCallback(\n\t\t(option: ProductOptionGroup) => {\n\t\t\tif (savingRef.current) return;\n\t\t\tif (confirmDelete === false) {\n\t\t\t\tdeleteOption(option);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tsetPendingDeleteOption(option);\n\t\t\tdeleteOptionConfirm.show();\n\t\t},\n\t\t[confirmDelete, deleteOption, deleteOptionConfirm],\n\t);\n\n\tconst headerAction = onCreateOption ? (\n\t\t<Button type=\"button\" tone=\"neutral\" onClick={() => { if (!savingRef.current) onCreateOption(); }} disabled={isSaving} icon={Plus}>\n\t\t\t{strings.createLabel}\n\t\t</Button>\n\t) : undefined;\n\n\tconst panelHeader = showPanelHeader ? (\n\t\t<div className=\"product-options-matrix--panel-header p-surface\">\n\t\t<Stack direction=\"horizontal\" gap=\"md\" justify=\"between\">\n\t\t\t<Text type=\"inherit\" weight=\"semibold\">{strings.title}</Text>\n\t\t\t{headerAction}\n\t\t</Stack>\n\t\t</div>\n\t) : null;\n\n\tconst content = (\n\t\t<div className=\"product-options-matrix--body min-w-0\">\n\t\t\t<div className=\"product-options-matrix--panel overflow-hidden rounded-surface border border-border bg-background text-foreground\">\n\t\t\t\t{panelHeader}\n\n\t\t\t\t{!hasGroups ? (\n\t\t\t\t\t<div className={cn(showPanelHeader && 'border-t border-border/60')}>\n\t\t\t\t\t\t{empty ?? (\n\t\t\t\t\t\t\t<ProductEmptyState\n\t\t\t\t\t\t\t\ttitle={strings.emptyTitle}\n\t\t\t\t\t\t\t\tdescription={strings.emptyDescription}\n\t\t\t\t\t\t\t\taction={onCreateOption && !showPanelHeader ? (\n\t\t\t\t\t\t\t\t\t<Button tone=\"primary\" type=\"button\" onClick={onCreateOption} icon={Plus}>\n\t\t\t\t\t\t\t\t\t\t{strings.createLabel}\n\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t) : undefined}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\t\t\t\t) : (\n\t\t\t\t\t<div className={cn('product-options-matrix--list', showPanelHeader && 'border-t border-border/60')}>\n\t\t\t\t\t\t{optionGroups.map((option, optionIndex) => {\n\t\t\t\t\t\t\tconst values = option.values ?? [];\n\t\t\t\t\t\t\tconst isCollapsed = collapsedOptionIdSet.has(option.id);\n\t\t\t\t\t\t\tconst canInlineEdit = supportsInlineEditing && isScalarText(option.name);\n\t\t\t\t\t\t\tconst isEditing = canInlineEdit && resolvedEditingOptionId === option.id;\n\t\t\t\t\t\t\tconst canEdit = !!onEditOption || canInlineEdit;\n\t\t\t\t\t\t\tconst canDelete = !!onDeleteOption;\n\t\t\t\t\t\t\tconst canAddValue = !!onAddValue;\n\t\t\t\t\t\t\tconst optionDraft = getResolvedDraft(option);\n\t\t\t\t\t\t\tconst optionFailure = saveFailure?.optionId === option.id ? saveFailure : null;\n\t\t\t\t\t\t\tconst isSavingOption = savingOptionId === option.id;\n\t\t\t\t\t\t\tconst renderedActions = renderOptionActions?.(option, {\n\t\t\t\t\t\t\t\tindex: optionIndex,\n\t\t\t\t\t\t\t\tonEdit: canEdit && !isSaving ? () => startEditing(option) : undefined,\n\t\t\t\t\t\t\t\tonDelete: onDeleteOption && !isSaving ? () => requestDeleteOption(option) : undefined,\n\t\t\t\t\t\t\t\tonAddValue: onAddValue && !isSaving ? () => { if (!savingRef.current) onAddValue(option); } : undefined,\n\t\t\t\t\t\t\t\tonToggleCollapsed: () => toggleCollapsed(option),\n\t\t\t\t\t\t\t\tcollapsed: isCollapsed,\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\tconst menuActions = [\n\t\t\t\t\t\t\t\t...(canAddValue ? [{\n\t\t\t\t\t\t\t\t\tid: 'add-value',\n\t\t\t\t\t\t\t\t\tlabel: strings.addValueLabel,\n\t\t\t\t\t\t\t\t\tdisabled: isSaving,\n\t\t\t\t\t\t\t\t\ticon: <Plus className=\"size-icon-md\" />,\n\t\t\t\t\t\t\t\t\tonClick: () => { if (!savingRef.current) onAddValue?.(option); },\n\t\t\t\t\t\t\t\t\ttone: 'secondary' as const, buttonStyle: 'ghost' as const,\n\t\t\t\t\t\t\t\t}] : []),\n\t\t\t\t\t\t\t\t...(canDelete ? [{\n\t\t\t\t\t\t\t\t\tid: 'delete',\n\t\t\t\t\t\t\t\t\tlabel: strings.deleteLabel,\n\t\t\t\t\t\t\t\t\tdisabled: isSaving,\n\t\t\t\t\t\t\t\t\ticon: <Trash2 className=\"size-icon-md\" />,\n\t\t\t\t\t\t\t\t\tonClick: () => requestDeleteOption(option),\n\t\t\t\t\t\t\t\t\ttone: 'destructive' as const,\n\t\t\t\t\t\t\t\t}] : []),\n\t\t\t\t\t\t\t];\n\n\t\t\t\t\t\t\tconst defaultActions = showInlineActions && (canEdit || menuActions.length > 0) ? (\n\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t{!!canEdit && (\n\t\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\ttone=\"secondary\"\n\t\t\t\t\t\t\t\t\t\t\tbuttonStyle=\"ghost\"\n\t\t\t\t\t\t\t\t\t\t\tonClick={() => startEditing(option)}\n\t\t\t\t\t\t\t\t\t\t\tdisabled={isSaving}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t{strings.editLabel}\n\t\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t<ProductRowActions\n\t\t\t\t\t\t\t\t\t\titem={option}\n\t\t\t\t\t\t\t\t\t\tactions={menuActions}\n\t\t\t\t\t\t\t\t\t\tmenuLabel={strings.actionsLabel}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t\t) : null;\n\t\t\t\t\t\t\tconst resolvedActions = renderedActions !== undefined ? renderedActions : defaultActions;\n\n\t\t\t\t\t\t\tif (isEditing) {\n\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\tkey={option.id}\n\t\t\t\t\t\t\t\t\t\tclassName=\"product-options-matrix--item product-options-matrix--item-editing border-b border-border/60 p-surface last:border-b-0\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t<Stack gap=\"lg\" className=\"product-options-matrix--editor\" aria-busy={isSavingOption}>\n\t\t\t\t\t\t\t\t\t\t\t\t{optionFailure && <Alert ref={errorRef} tabIndex={-1} tone=\"destructive\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<AlertTitle>{strings.saveErrorTitle ?? defaultProductOptionsMatrixStrings.saveErrorTitle}</AlertTitle>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<AlertDescription>{optionFailure.message}</AlertDescription>\n\t\t\t\t\t\t\t\t\t\t\t\t</Alert>}\n\t\t\t\t\t\t\t\t\t\t\t\t<FormField\n\t\t\t\t\t\t\t\t\t\t\t\t\tlabel={strings.optionNameLabel}\n\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"product-options-matrix--editor-field\"\n\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Input\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tvalue={optionDraft.name}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisabled={isSaving}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tonChange={(event) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tconst nextName = event.currentTarget.value;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tupdateDraft(option, (draft) => ({\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t...draft,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tname: nextName,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}));\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\taria-label={strings.optionNameLabel}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"bg-background\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\t</FormField>\n\n\t\t\t\t\t\t\t\t\t\t\t\t<Stack gap=\"sm\" className=\"product-options-matrix--editor-field\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Text type=\"inherit\" weight=\"medium\">{strings.optionValuesLabel}</Text>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Stack gap=\"xs\" className=\"product-options-matrix--editor-values\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{optionDraft.values.length === 0 && (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Text size=\"xs\" type=\"secondary\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{strings.noValuesLabel}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{optionDraft.values.map((value) => (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tkey={value.id}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"product-options-matrix--editor-value grid min-w-0 grid-cols-[minmax(0,1fr)_auto] items-center gap-space-sm\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{isScalarText(value.label) ? (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Input\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tref={value.id === focusValueIdRef.current ? focusAddedValue : undefined}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvalue={getPlainText(value.label)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisabled={isSaving}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tonChange={(event) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tconst nextLabel = event.currentTarget.value;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tupdateDraft(option, (draft) => ({\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t...draft,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvalues: draft.values.map((item) => (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\titem.id === value.id\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? { ...item, label: nextLabel }\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: item\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t)),\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}));\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\taria-label={`${strings.optionValuesLabel}: ${getPlainText(value.label)}`}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"bg-background\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div className=\"min-w-0\">{value.label}</div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsize=\"sm\" iconOnly\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttone=\"secondary\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tbuttonStyle=\"ghost\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={() => updateDraft(option, (draft) => ({\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t...draft,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvalues: draft.values.filter((item) => item.id !== value.id),\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}))}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\taria-label={strings.deleteValueLabel}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisabled={isSaving}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"text-muted-foreground hover:text-destructive\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Trash2 className=\"size-icon-sm\" aria-hidden=\"true\" />\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Text tag=\"span\" size=\"pxs\" className=\"sr-only\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{strings.deleteValueLabel}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div className=\"product-options-matrix--editor-add-value min-w-0\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttone=\"secondary\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tbuttonStyle=\"outline\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisabled={isSaving}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tif (savingRef.current) return;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tconst reservedIds = new Set([...(option.values ?? []), ...optionDraft.values].map((value) => value.id));\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tlet id: string;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdo {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tid = `${option.id}-draft-value-${++nextDraftValueId.current}`;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t} while (reservedIds.has(id));\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfocusValueIdRef.current = id;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tupdateDraft(option, (draft) => ({\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t...draft,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvalues: [...draft.values, { id, label: '' }],\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}));\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfullWidth\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"justify-start text-muted-foreground\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{strings.addAnotherValueLabel}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t\t\t\t\t\t\t</Stack>\n\n\t\t\t\t\t\t\t\t\t\t\t<Stack direction=\"horizontal\" gap=\"md\" justify=\"between\" wrap={false} className=\"product-options-matrix--editor-actions\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{!!onDeleteOption && (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttone=\"destructive\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tbuttonStyle=\"outline\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={() => requestDeleteOption(option)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisabled={isSaving}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{strings.deleteLabel}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t<Stack direction=\"horizontal\" gap=\"sm\" justify=\"end\" wrap={false}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Button type=\"button\" tone=\"secondary\" buttonStyle=\"ghost\" onClick={() => cancelEditing(option)} disabled={isSaving}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{strings.cancelLabel}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Button type=\"button\" tone=\"neutral\" onClick={() => saveEditing(option)} disabled={isSaving} loading={isSavingOption} strings={{ loading: strings.savingLabel }}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{optionFailure ? strings.retrySaveLabel ?? strings.saveLabel : strings.saveLabel ?? strings.doneLabel}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tconst optionSummary = (\n\t\t\t\t\t\t\t\t<Stack render={<span />} gap=\"sm\">\n\t\t\t\t\t\t\t\t\t<Stack render={<span />} direction=\"horizontal\" gap=\"sm\">\n\t\t\t\t\t\t\t\t\t\t<Text type=\"inherit\" tag=\"span\" weight=\"semibold\" className=\"min-w-0 whitespace-normal break-words\">\n\t\t\t\t\t\t\t\t\t\t\t{option.name}\n\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t\t{option.badge}\n\t\t\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t\t\t\t{!!option.description && (\n\t\t\t\t\t\t\t\t\t\t<Text tag=\"span\" size=\"xs\" type=\"secondary\" className=\"max-w-prose\">\n\t\t\t\t\t\t\t\t\t\t\t{option.description}\n\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t{!isCollapsed && (\n\t\t\t\t\t\t\t\t\t\t<Stack render={<span />} gap=\"sm\" className=\"product-options-matrix--values\">\n\t\t\t\t\t\t\t\t\t\t\t{values.length === 0 ? (\n\t\t\t\t\t\t\t\t\t\t\t\t<Text tag=\"span\" size=\"xs\" type=\"secondary\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t{strings.noValuesLabel}\n\t\t\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"flex flex-wrap gap-space-xs\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t{values.map((value, valueIndex) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tconst deleteValue = onDeleteValue ? () => { if (!savingRef.current) onDeleteValue(option, value); } : undefined;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tconst renderedValue = renderValue?.(value, {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\toption,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\toptionIndex,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvalueIndex,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tonDelete: deleteValue,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tif (renderedValue) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\treturn <Fragment key={value.id}>{renderedValue}</Fragment>;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Badge\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tkey={value.id}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttone=\"neutral\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName={cn('product-options-matrix--value', value.disabled && 'opacity-50')}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{isScalarText(value.label) ? (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Text type=\"inherit\" tag=\"span\" size=\"inherit\" className=\"min-w-0 whitespace-normal break-words\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{value.label}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvalue.label\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{value.badge}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{!!deleteValue && showInlineActions && (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={deleteValue}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisabled={isSaving}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\taria-label={strings.deleteValueLabel}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t// The badge clips its label row, so the focus halo is drawn inside.\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName={cn(fieldAffordanceRecipes.target, fieldAffordanceRecipes.focus, focusRecipes.inset, fieldAffordanceRecipes.clear, 'hover:text-destructive')}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<X className={fieldAffordanceRecipes.icon} aria-hidden=\"true\" />\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Text tag=\"span\" size=\"pxs\" className=\"sr-only\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{strings.deleteValueLabel}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Badge>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\tkey={option.id}\n\t\t\t\t\t\t\t\t\tclassName=\"product-options-matrix--item border-b border-border/60 last:border-b-0\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<div className={cn('grid min-w-0 items-center gap-x-space-md gap-y-space-md p-surface', showCollapseControls ? 'grid-cols-[auto_minmax(0,1fr)] @2xl/product-options-matrix:grid-cols-[auto_minmax(0,1fr)_auto]' : 'grid-cols-1 @2xl/product-options-matrix:grid-cols-[minmax(0,1fr)_auto]')}>\n\t\t\t\t\t\t\t\t\t\t{showCollapseControls && (\n\t\t\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\t\tsize=\"sm\" iconOnly\n\t\t\t\t\t\t\t\t\t\t\t\ttone=\"secondary\"\n\t\t\t\t\t\t\t\t\t\t\t\tbuttonStyle=\"ghost\"\n\t\t\t\t\t\t\t\t\t\t\t\tonClick={() => toggleCollapsed(option)}\n\t\t\t\t\t\t\t\t\t\t\t\tdisabled={isSaving}\n\t\t\t\t\t\t\t\t\t\t\t\taria-expanded={!isCollapsed}\n\t\t\t\t\t\t\t\t\t\t\t\taria-label={isCollapsed ? strings.expandOptionLabel : strings.collapseOptionLabel}\n\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"product-options-matrix--collapse-trigger mt-space-2xs shrink-0 text-muted-foreground\"\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t<ChevronDown className={cn('size-icon-sm transition-transform', isCollapsed && '-rotate-90')} aria-hidden=\"true\" />\n\t\t\t\t\t\t\t\t\t\t\t\t<Text tag=\"span\" size=\"pxs\" className=\"sr-only\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t{isCollapsed ? strings.expandOptionLabel : strings.collapseOptionLabel}\n\t\t\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t\t\t\t\t<div className=\"product-options-matrix--item-main min-w-0\">\n\t\t\t\t\t\t\t\t\t\t\t{canEdit && !showInlineActions ? (\n\t\t\t\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={() => startEditing(option)}\n\t\t\t\t\t\t\t\t\t\t\t\t\tdisabled={isSaving}\n\t\t\t\t\t\t\t\t\t\t\t\t\taria-label={getOptionEditLabel(strings.editLabel, option)}\n\t\t\t\t\t\t\t\t\t\t\t\t\tclassName={`product-options-matrix--edit-summary ${interactionRecipes.nativeButtonReset} block w-full cursor-pointer whitespace-normal rounded-radius text-start text-inherit outline-none ${focusRecipes.edge}`}\n\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t{optionSummary}\n\t\t\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t\t\t) : optionSummary}\n\t\t\t\t\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t\t\t\t\t{((!!onToggleUsedForVariants && showVariantToggle) || !!resolvedActions) && (\n\t\t\t\t\t\t\t\t\t\t\t<div className={cn('product-options-matrix--item-actions flex min-w-0 flex-wrap items-center justify-start @2xl/product-options-matrix:col-start-auto @2xl/product-options-matrix:justify-end', showCollapseControls ? 'col-start-2' : 'col-start-1', compositionClasses.commands)}>\n\t\t\t\t\t\t\t\t\t\t\t\t{!!onToggleUsedForVariants && showVariantToggle && (\n\t\t\t\t\t\t\t\t\t\t\t\t\t<div className=\"inline-flex items-center gap-space-sm\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttag=\"span\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tid={`product-option-${option.id}-variant-toggle-label`}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsize=\"pxs\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"secondary\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tweight=\"medium\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{strings.useForVariantsLabel}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Switch\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tchecked={!!option.usedForVariants}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisabled={isSaving}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tonValueChange={(checked) => { if (!savingRef.current) onToggleUsedForVariants(option, checked); }}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\taria-labelledby={`product-option-${option.id}-variant-toggle-label`}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t\t{resolvedActions}\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t})}\n\t\t\t\t\t\t{!!showCreateRow && (\n\t\t\t\t\t\t\t<div className=\"product-options-matrix--create-row border-t border-border/60 p-surface-xs\">\n\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\ttone=\"secondary\"\n\t\t\t\t\t\t\t\t\tbuttonStyle=\"ghost\"\n\t\t\t\t\t\t\t\t\tonClick={() => { if (!savingRef.current) onCreateOption?.(); }}\n\t\t\t\t\t\t\t\t\tdisabled={isSaving}\n\t\t\t\t\t\t\t\t\ticon={PlusCircle}\n\t\t\t\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t\t\t\tfullWidth\n\t\t\t\t\t\t\t\t\tclassName=\"justify-start text-foreground\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{strings.addAnotherOptionLabel}\n\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t\t{!!(confirmDelete !== false && pendingSave) && (\n\t\t\t\t<ConfirmDialog\n\t\t\t\t\t{...removeValuesConfirm.overlayProps}\n\t\t\t\t\tdestructive\n\t\t\t\t\ttitle={strings.confirmRemoveValuesTitle}\n\t\t\t\t\tdescription={interpolateString(strings.confirmRemoveValuesDescription, {\n\t\t\t\t\t\tcount: pendingSave.removed,\n\t\t\t\t\t})}\n\t\t\t\t\tstrings={{ confirm: saveFailure?.optionId === pendingSave.option.id ? strings.retrySaveLabel : strings.confirmRemoveValuesLabel, loading: strings.savingLabel }}\n\t\t\t\t\talertMessage={saveFailure?.optionId === pendingSave.option.id ? saveFailure.message : undefined}\n\t\t\t\t\tcloseOnAsyncComplete={false}\n\t\t\t\t\tonAsyncConfirm={async () => {\n\t\t\t\t\t\tif (await commitEditing(pendingSave.option)) removeValuesConfirm.hide();\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t)}\n\t\t\t{!!(confirmDelete !== false && onDeleteOption) && (\n\t\t\t\t<ConfirmDialog\n\t\t\t\t\t{...deleteOptionConfirm.overlayProps}\n\t\t\t\t\tdestructive\n\t\t\t\t\ttitle={strings.confirmDeleteOptionTitle}\n\t\t\t\t\tdescription={strings.confirmDeleteOptionDescription}\n\t\t\t\t\tstrings={{ confirm: strings.deleteLabel }}\n\t\t\t\t\tonConfirm={() => {\n\t\t\t\t\t\tif (pendingDeleteOption) deleteOption(pendingDeleteOption);\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t)}\n\t\t</div>\n\t);\n\n\tif (surface === 'embedded') {\n\t\treturn (\n\t\t\t<section\n\t\t\t\taria-label={strings.title}\n\t\t\t\tclassName={cn('product-options-matrix--component @container/product-options-matrix min-w-0', className)}\n\t\t\t>\n\t\t\t\t{content}\n\t\t\t</section>\n\t\t);\n\t}\n\n\treturn (\n\t\t<ContentBlock\n\t\t\ttitle={strings.title}\n\t\t\tdescription={strings.description}\n\t\t\tactions={actions}\n\t\t\theaderAction={headerAction}\n\t\t\theaderEnd={headerEnd}\n\t\t\tfooterSlot={footerSlot}\n\t\t\tclassName={cn('product-options-matrix--component @container/product-options-matrix w-full', className)}\n\t\t>\n\t\t\t{content}\n\t\t</ContentBlock>\n\t);\n}\n\nProductOptionsMatrix.displayName = 'ProductOptionsMatrix';\n","import { Plus, SlidersHorizontal } from 'lucide-react';\n\nimport { Button } from '../../../base/buttons';\nimport { ContentBlock } from '../../../base/display';\nimport { ItemGroup } from '../../../base/item';\nimport { useStrings } from '../../../../lib/strings';\nimport { cn } from '../../../../lib/utils';\n\nimport { defaultProductOptionsSummaryStrings } from '../products.strings';\nimport type { ProductOptionsSummaryProps } from '../products.types';\nimport { ProductEmptyState } from '../partials/product-empty-state';\nimport { ProductSummaryRow } from '../partials/product-rows';\nimport { ProductOptionActionMenu } from './product-option-action-menu';\n\n/**\n * One main column region of the product editor.\n *\n * @deprecated An internal region of `ProductOverview`, which renders it from its `options` prop (still typed `ProductOptionsSummaryProps`). Pass the same props there and add custom content through the overview's slots. Kept exported for compatibility.\n */\nexport function ProductOptionsSummary({\n\toptions = [],\n\tonManageOptions,\n\tonCreateOption,\n\tonSelectOption,\n\tonEditOption,\n\tonDeleteOption,\n\trenderOptionActions,\n\tactions,\n\tfooterSlot,\n\trenderOption,\n\tempty,\n\tclassName,\n\tstrings: stringsProp,\n}: ProductOptionsSummaryProps) {\n\tconst strings = useStrings(defaultProductOptionsSummaryStrings, stringsProp);\n\tconst hasOptionActions = !!(\n\t\tonSelectOption ||\n\t\tonEditOption ||\n\t\tonDeleteOption ||\n\t\trenderOptionActions\n\t);\n\tconst cardActions = [\n\t\t...(actions ?? []),\n\t\t...(onCreateOption && onManageOptions ? [{\n\t\t\tid: 'manage-options',\n\t\t\tlabel: strings.manageLabel,\n\t\t\ticon: <SlidersHorizontal className=\"size-icon-md\" />,\n\t\t\tonClick: onManageOptions,\n\t\t}] : []),\n\t];\n\tconst headerAction = onCreateOption || onManageOptions ? (\n\t\t<Button\n\t\t\ttype=\"button\"\n\t\t\ttone=\"secondary\"\n\t\t\tbuttonStyle=\"ghost\"\n\t\t\tonClick={onCreateOption ?? onManageOptions}\n\t\t\ticon={onCreateOption ? Plus : undefined}\n\t\t>\n\t\t\t{onCreateOption ? strings.createLabel : strings.manageLabel}\n\t\t</Button>\n\t) : undefined;\n\n\treturn (\n\t\t<ContentBlock\n\t\t\ttitle={strings.title}\n\t\t\tdescription={strings.description}\n\t\t\tactions={cardActions.length > 0 ? cardActions : undefined}\n\t\t\theaderAction={headerAction}\n\t\t\tfooterSlot={footerSlot}\n\t\t\tclassName={cn('product-options-summary--component w-full', className)}\n\t\t>\n\t\t\t{options.length === 0 ? (\n\t\t\t\tempty ?? (\n\t\t\t\t\t<ProductEmptyState\n\t\t\t\t\t\ttitle={strings.emptyTitle}\n\t\t\t\t\t\tdescription={strings.emptyDescription}\n\t\t\t\t\t\taction={onCreateOption ? (\n\t\t\t\t\t\t\t<Button tone=\"primary\" type=\"button\" onClick={onCreateOption} icon={Plus}>\n\t\t\t\t\t\t\t\t{strings.createLabel}\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t) : undefined}\n\t\t\t\t\t/>\n\t\t\t\t)\n\t\t\t) : (\n\t\t\t\t<ItemGroup>\n\t\t\t\t\t{options.map((option, index) => (\n\t\t\t\t\t\t(() => {\n\t\t\t\t\t\t\tconst rowActions = hasOptionActions ? (\n\t\t\t\t\t\t\t\t<ProductOptionActionMenu\n\t\t\t\t\t\t\t\t\toption={option}\n\t\t\t\t\t\t\t\t\tindex={index}\n\t\t\t\t\t\t\t\t\tonSelectOption={onSelectOption}\n\t\t\t\t\t\t\t\t\tonEditOption={onEditOption}\n\t\t\t\t\t\t\t\t\tonDeleteOption={onDeleteOption}\n\t\t\t\t\t\t\t\t\trenderOptionActions={renderOptionActions}\n\t\t\t\t\t\t\t\t\tmenuLabel={strings.actionsLabel}\n\t\t\t\t\t\t\t\t\tstrings={{\n\t\t\t\t\t\t\t\t\t\tviewLabel: strings.viewLabel,\n\t\t\t\t\t\t\t\t\t\teditLabel: strings.editLabel,\n\t\t\t\t\t\t\t\t\t\tdeleteLabel: strings.deleteLabel,\n\t\t\t\t\t\t\t\t\t\tactionsLabel: strings.actionsLabel,\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t) : undefined;\n\n\t\t\t\t\t\t\treturn renderOption ? (\n\t\t\t\t\t\t\t\t<div key={option.id}>{renderOption(option, index)}</div>\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<ProductSummaryRow\n\t\t\t\t\t\t\t\t\tkey={option.id}\n\t\t\t\t\t\t\t\t\titem={option}\n\t\t\t\t\t\t\t\t\tactions={rowActions}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t})()\n\t\t\t\t\t))}\n\t\t\t\t</ItemGroup>\n\t\t\t)}\n\t\t</ContentBlock>\n\t);\n}\n\nProductOptionsSummary.displayName = 'ProductOptionsSummary';\n","import { Pencil, Plus, Trash2 } from 'lucide-react';\n\nimport { Button } from '../../../base/buttons';\nimport { ContentBlock } from '../../../base/display';\nimport { ItemGroup } from '../../../base/item';\nimport { useStrings } from '../../../../lib/strings';\nimport { cn } from '../../../../lib/utils';\n\nimport { defaultProductPoliciesCardStrings } from '../products.strings';\nimport type { ProductPoliciesCardProps } from '../products.types';\nimport { ProductEmptyState } from '../partials/product-empty-state';\nimport { ProductRowActions } from '../partials/product-actions';\nimport { ProductSummaryRow } from '../partials/product-rows';\n\n/**\n * One support rail region of the product editor.\n *\n * @deprecated An internal region of `ProductOverview`, which renders it from its `policies` prop (still typed `ProductPoliciesCardProps`). Pass the same props there and add custom content through the overview's slots. Kept exported for compatibility.\n */\nexport function ProductPoliciesCard({\n\tpolicies = [],\n\tonCreatePolicy,\n\tonSelectPolicy,\n\tonEditPolicy,\n\tonDeletePolicy,\n\trenderPolicyActions,\n\tactions,\n\tfooterSlot,\n\trenderPolicy,\n\tempty,\n\tclassName,\n\tstrings: stringsProp,\n}: ProductPoliciesCardProps) {\n\tconst strings = useStrings(defaultProductPoliciesCardStrings, stringsProp);\n\tconst headerAction = onCreatePolicy ? (\n\t\t<Button type=\"button\" tone=\"secondary\" buttonStyle=\"ghost\" onClick={onCreatePolicy} icon={Plus}>\n\t\t\t{strings.createLabel}\n\t\t</Button>\n\t) : undefined;\n\n\treturn (\n\t\t<ContentBlock\n\t\t\ttitle={strings.title}\n\t\t\tdescription={strings.description}\n\t\t\tactions={actions}\n\t\t\theaderAction={headerAction}\n\t\t\tfooterSlot={footerSlot}\n\t\t\tclassName={cn('product-policies-card--component w-full', className)}\n\t\t>\n\t\t\t{policies.length === 0 ? (\n\t\t\t\tempty ?? (\n\t\t\t\t\t<ProductEmptyState\n\t\t\t\t\t\ttitle={strings.emptyTitle}\n\t\t\t\t\t\tdescription={strings.emptyDescription}\n\t\t\t\t\t\taction={onCreatePolicy ? (\n\t\t\t\t\t\t\t<Button tone=\"primary\" type=\"button\" onClick={onCreatePolicy} icon={Plus}>\n\t\t\t\t\t\t\t\t{strings.createLabel}\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t) : undefined}\n\t\t\t\t\t/>\n\t\t\t\t)\n\t\t\t) : (\n\t\t\t\t<ItemGroup>\n\t\t\t\t\t{policies.map((policy, index) => (\n\t\t\t\t\t\t(() => {\n\t\t\t\t\t\t\tconst onSelect = onSelectPolicy ? () => onSelectPolicy(policy) : undefined;\n\t\t\t\t\t\t\tconst onEdit = onEditPolicy ? () => onEditPolicy(policy) : undefined;\n\t\t\t\t\t\t\tconst onDelete = onDeletePolicy ? () => onDeletePolicy(policy) : undefined;\n\t\t\t\t\t\t\tconst policyActions = [\n\t\t\t\t\t\t\t\t...(onEdit ? [{\n\t\t\t\t\t\t\t\t\tid: 'edit',\n\t\t\t\t\t\t\t\t\tlabel: strings.editLabel,\n\t\t\t\t\t\t\t\t\ticon: <Pencil className=\"size-icon-md\" />,\n\t\t\t\t\t\t\t\t\tonClick: () => onEdit(),\n\t\t\t\t\t\t\t\t\ttone: 'secondary' as const, buttonStyle: 'ghost' as const,\n\t\t\t\t\t\t\t\t}] : []),\n\t\t\t\t\t\t\t\t...(onDelete ? [{\n\t\t\t\t\t\t\t\t\tid: 'delete',\n\t\t\t\t\t\t\t\t\tlabel: strings.deleteLabel,\n\t\t\t\t\t\t\t\t\ticon: <Trash2 className=\"size-icon-md\" />,\n\t\t\t\t\t\t\t\t\tonClick: () => onDelete(),\n\t\t\t\t\t\t\t\t\ttone: 'destructive' as const,\n\t\t\t\t\t\t\t\t}] : []),\n\t\t\t\t\t\t\t];\n\t\t\t\t\t\t\tconst rowActions = renderPolicyActions\n\t\t\t\t\t\t\t\t? renderPolicyActions(policy, { index, onSelect, onEdit, onDelete })\n\t\t\t\t\t\t\t\t: <ProductRowActions item={policy} actions={policyActions} menuLabel={strings.actionsLabel} />;\n\n\t\t\t\t\t\t\treturn renderPolicy ? (\n\t\t\t\t\t\t\t\t<div key={policy.id}>{renderPolicy(policy, index)}</div>\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<ProductSummaryRow\n\t\t\t\t\t\t\t\t\tkey={policy.id}\n\t\t\t\t\t\t\t\t\titem={policy}\n\t\t\t\t\t\t\t\t\tactionLabel={strings.viewLabel}\n\t\t\t\t\t\t\t\t\tonSelect={onSelect}\n\t\t\t\t\t\t\t\t\tactions={rowActions}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t})()\n\t\t\t\t\t))}\n\t\t\t\t</ItemGroup>\n\t\t\t)}\n\t\t</ContentBlock>\n\t);\n}\n\nProductPoliciesCard.displayName = 'ProductPoliciesCard';\n","import {\n\tEye,\n\tPencil,\n\tPlus,\n\tTrash2 } from 'lucide-react';\n\nimport { Button } from '../../../base/buttons';\nimport { ContentBlock, Separator } from '../../../base/display';\nimport {\n\tItem,\n\tItemActions,\n\tItemContent,\n\tItemDescription,\n\tItemGroup,\n\tItemTitle,\n} from '../../../base/item';\nimport { Stack } from '../../../base/structure';\nimport { InlineStat } from '../../../blocks/data-display';\nimport { Value } from '../../../primitives';\nimport { Text } from '../../../typography';\nimport { useStrings } from '../../../../lib/strings';\nimport { cn } from '../../../../lib/utils';\n\nimport { defaultProductQuotePreviewCardStrings } from '../products.strings';\nimport type { ProductQuotePreviewCardProps } from '../products.types';\nimport { ProductEmptyState } from '../partials/product-empty-state';\nimport { ProductRowActions } from '../partials/product-actions';\nimport { PRODUCT_EMPTY_VALUE } from '../partials/product-values';\n\n/**\n * One support rail region of the product editor.\n *\n * @deprecated An internal region of `ProductOverview`, which renders it from its `quote` prop (still typed `ProductQuotePreviewCardProps`). Pass the same props there and add custom content through the overview's slots. Kept exported for compatibility.\n */\nexport function ProductQuotePreviewCard({\n\tlines = [],\n\tsubtotal,\n\ttax,\n\tdiscount,\n\ttotal,\n\tonOpenQuote,\n\tonCreateLine,\n\tonSelectLine,\n\tonEditLine,\n\tonDeleteLine,\n\trenderLineActions,\n\tactions,\n\tfooterSlot,\n\tempty,\n\tclassName,\n\tstrings: stringsProp,\n}: ProductQuotePreviewCardProps) {\n\tconst strings = useStrings(defaultProductQuotePreviewCardStrings, stringsProp);\n\tconst hasBreakdown = subtotal !== undefined || tax !== undefined || discount !== undefined;\n\tconst headerAction = onCreateLine || onOpenQuote ? (\n\t\t<div className=\"flex items-center gap-space-md\">\n\t\t\t{!!onCreateLine && (\n\t\t\t\t<Button type=\"button\" tone=\"secondary\" buttonStyle=\"ghost\" onClick={onCreateLine} icon={Plus}>\n\t\t\t\t\t{strings.createLineLabel}\n\t\t\t\t</Button>\n\t\t\t)}\n\t\t\t{!!onOpenQuote && (\n\t\t\t\t<Button type=\"button\" tone=\"secondary\" buttonStyle=\"ghost\" onClick={onOpenQuote}>\n\t\t\t\t\t{strings.actionLabel}\n\t\t\t\t</Button>\n\t\t\t)}\n\t\t</div>\n\t) : undefined;\n\n\treturn (\n\t\t<ContentBlock\n\t\t\ttitle={strings.title}\n\t\t\tdescription={strings.description}\n\t\t\tactions={actions}\n\t\t\theaderAction={headerAction}\n\t\t\tfooterSlot={footerSlot}\n\t\t\tclassName={cn('product-quote-preview-card--component w-full', className)}\n\t\t>\n\t\t\t{lines.length === 0 ? (\n\t\t\t\tempty ?? (\n\t\t\t\t\t<ProductEmptyState\n\t\t\t\t\t\ttitle={strings.emptyTitle}\n\t\t\t\t\t\tdescription={strings.emptyDescription}\n\t\t\t\t\t\taction={onCreateLine ? (\n\t\t\t\t\t\t\t<Button tone=\"primary\" type=\"button\" onClick={onCreateLine} icon={Plus}>\n\t\t\t\t\t\t\t\t{strings.createLineLabel}\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t) : undefined}\n\t\t\t\t\t/>\n\t\t\t\t)\n\t\t\t) : (\n\t\t\t\t<Stack gap=\"2xl\" className=\"product-quote-preview-card--body\">\n\t\t\t\t\t<ItemGroup>\n\t\t\t\t\t\t{lines.map((line, index) => {\n\t\t\t\t\t\t\tconst onSelect = onSelectLine ? () => onSelectLine(line) : undefined;\n\t\t\t\t\t\t\tconst onEdit = onEditLine ? () => onEditLine(line) : undefined;\n\t\t\t\t\t\t\tconst onDelete = onDeleteLine ? () => onDeleteLine(line) : undefined;\n\t\t\t\t\t\t\tconst lineActions = [\n\t\t\t\t\t\t\t\t...(onSelect ? [{\n\t\t\t\t\t\t\t\t\tid: 'open',\n\t\t\t\t\t\t\t\t\tlabel: strings.viewLineLabel,\n\t\t\t\t\t\t\t\t\ticon: <Eye className=\"size-icon-md\" />,\n\t\t\t\t\t\t\t\t\tonClick: () => onSelect(),\n\t\t\t\t\t\t\t\t\ttone: 'secondary' as const, buttonStyle: 'ghost' as const,\n\t\t\t\t\t\t\t\t}] : []),\n\t\t\t\t\t\t\t\t...(onEdit ? [{\n\t\t\t\t\t\t\t\t\tid: 'edit',\n\t\t\t\t\t\t\t\t\tlabel: strings.editLineLabel,\n\t\t\t\t\t\t\t\t\ticon: <Pencil className=\"size-icon-md\" />,\n\t\t\t\t\t\t\t\t\tonClick: () => onEdit(),\n\t\t\t\t\t\t\t\t\ttone: 'secondary' as const, buttonStyle: 'ghost' as const,\n\t\t\t\t\t\t\t\t}] : []),\n\t\t\t\t\t\t\t\t...(onDelete ? [{\n\t\t\t\t\t\t\t\t\tid: 'delete',\n\t\t\t\t\t\t\t\t\tlabel: strings.deleteLineLabel,\n\t\t\t\t\t\t\t\t\ticon: <Trash2 className=\"size-icon-md\" />,\n\t\t\t\t\t\t\t\t\tonClick: () => onDelete(),\n\t\t\t\t\t\t\t\t\ttone: 'destructive' as const,\n\t\t\t\t\t\t\t\t}] : []),\n\t\t\t\t\t\t\t];\n\t\t\t\t\t\t\tconst rowActions = renderLineActions\n\t\t\t\t\t\t\t\t? renderLineActions(line, { index, onSelect, onEdit, onDelete })\n\t\t\t\t\t\t\t\t: <ProductRowActions item={line} actions={lineActions} menuLabel={strings.lineActionsLabel} />;\n\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t<Item key={line.id} className=\"product-quote-preview-card--line\">\n\t\t\t\t\t\t\t\t\t<ItemContent>\n\t\t\t\t\t\t\t\t\t\t<ItemTitle>{line.label}</ItemTitle>\n\t\t\t\t\t\t\t\t\t\t{!!line.description && <ItemDescription>{line.description}</ItemDescription>}\n\t\t\t\t\t\t\t\t\t\t{!!line.quantity && <ItemDescription>{line.quantity}</ItemDescription>}\n\t\t\t\t\t\t\t\t\t</ItemContent>\n\t\t\t\t\t\t\t\t\t<ItemActions>\n\t\t\t\t\t\t\t\t\t\t<Value type=\"inherit\" className=\"tabular-nums\">{line.amount}</Value>\n\t\t\t\t\t\t\t\t\t\t{rowActions}\n\t\t\t\t\t\t\t\t\t</ItemActions>\n\t\t\t\t\t\t\t\t</Item>\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t})}\n\t\t\t\t\t</ItemGroup>\n\t\t\t\t\t{/* Amounts stay in the sans UI font with tabular figures; the one rule sits above the grand total. */}\n\t\t\t\t\t<Stack gap=\"lg\" className=\"product-quote-preview-card--totals\">\n\t\t\t\t\t\t{!!hasBreakdown && (\n\t\t\t\t\t\t\t<Stack gap=\"sm\">\n\t\t\t\t\t\t\t\t{subtotal !== undefined && <InlineStat label={strings.subtotalLabel} value={subtotal} valueClassName=\"tabular-nums\" />}\n\t\t\t\t\t\t\t\t{tax !== undefined && <InlineStat label={strings.taxLabel} value={tax} valueClassName=\"tabular-nums\" />}\n\t\t\t\t\t\t\t\t{discount !== undefined && <InlineStat label={strings.discountLabel} value={discount} valueClassName=\"tabular-nums text-success\" />}\n\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{!!hasBreakdown && <Separator />}\n\t\t\t\t\t\t<InlineStat label={<Text type=\"inherit\" tag=\"span\" weight=\"semibold\" lineHeight=\"tight\">{strings.totalLabel}</Text>} value={total ?? PRODUCT_EMPTY_VALUE} valueClassName=\"font-semibold tabular-nums\" />\n\t\t\t\t\t</Stack>\n\t\t\t\t</Stack>\n\t\t\t)}\n\t\t</ContentBlock>\n\t);\n}\n\nProductQuotePreviewCard.displayName = 'ProductQuotePreviewCard';\n","import {\n\tPencil,\n\tPlus,\n\tTrash2 } from 'lucide-react';\n\nimport { Button } from '../../../base/buttons';\nimport { ContentBlock } from '../../../base/display';\nimport { Progress } from '../../../base/feedback';\nimport { ItemGroup } from '../../../base/item';\nimport { Percent } from '../../../primitives';\nimport { Text } from '../../../typography';\nimport { useStrings } from '../../../../lib/strings';\nimport { cn } from '../../../../lib/utils';\n\nimport { defaultProductReadinessCardStrings } from '../products.strings';\nimport type { ProductReadinessCardProps } from '../products.types';\nimport { ProductEmptyState } from '../partials/product-empty-state';\nimport { ProductRowActions } from '../partials/product-actions';\nimport { ProductReadinessRow } from '../partials/product-rows';\nimport { clampProductPercent } from '../partials/product-tone';\nimport { Stack } from '../../../base/structure';\n\n/**\n * One support rail region of the product editor.\n *\n * @deprecated An internal region of `ProductOverview`, which renders it from its `readiness` prop (still typed `ProductReadinessCardProps`). Pass the same props there and add custom content through the overview's slots. Kept exported for compatibility.\n */\nexport function ProductReadinessCard({\n\titems = [],\n\tscore,\n\tscoreLabel,\n\tsummary,\n\tonCreateReadinessItem,\n\tonSelectReadinessItem,\n\tonEditReadinessItem,\n\tonDeleteReadinessItem,\n\trenderReadinessItemActions,\n\tactions,\n\tfooterSlot,\n\trenderItem,\n\tempty,\n\tclassName,\n\tstrings: stringsProp,\n}: ProductReadinessCardProps) {\n\tconst strings = useStrings(defaultProductReadinessCardStrings, stringsProp);\n\tconst completion = score === undefined ? undefined : clampProductPercent(score);\n\tconst headerAction = onCreateReadinessItem ? (\n\t\t<Button type=\"button\" tone=\"secondary\" buttonStyle=\"ghost\" onClick={onCreateReadinessItem} icon={Plus}>\n\t\t\t{strings.createLabel}\n\t\t</Button>\n\t) : undefined;\n\n\treturn (\n\t\t<ContentBlock\n\t\t\ttitle={strings.title}\n\t\t\tdescription={strings.description}\n\t\t\tactions={actions}\n\t\t\theaderAction={headerAction}\n\t\t\tfooterSlot={footerSlot}\n\t\t\tcontentGap=\"2xl\"\n\t\t\tclassName={cn('product-readiness-card--component w-full', className)}\n\t\t>\n\t\t\t{(completion !== undefined || !!summary) && (\n\t\t\t\t<Stack gap=\"lg\" className=\"product-readiness-card--summary\">\n\t\t\t\t\t{completion !== undefined && (\n\t\t\t\t\t\t<Stack gap=\"sm\" className=\"product-readiness-card--score\">\n\t\t\t\t\t\t\t<Stack direction=\"horizontal\" justify=\"between\" gap=\"lg\">\n\t\t\t\t\t\t\t\t<Text size=\"xs\" type=\"secondary\">{scoreLabel ?? strings.scoreLabel}</Text>\n\t\t\t\t\t\t\t\t<Percent type=\"inherit\" value={completion} scaled size=\"xs\" weight=\"semibold\" />\n\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t\t<Progress\n\t\t\t\t\t\t\t\tvalue={completion}\n\t\t\t\t\t\t\t\taria-label={typeof scoreLabel === 'string' ? scoreLabel : strings.progressLabel}\n\t\t\t\t\t\t\t\taria-valuetext={`${completion}%`}\n\t\t\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</Stack>\n\t\t\t\t\t)}\n\t\t\t\t\t{!!summary && <Text type=\"secondary\">{summary}</Text>}\n\t\t\t\t</Stack>\n\t\t\t)}\n\t\t\t{items.length === 0 ? (\n\t\t\t\tempty ?? (\n\t\t\t\t\t<ProductEmptyState\n\t\t\t\t\t\ttitle={strings.emptyTitle}\n\t\t\t\t\t\tdescription={strings.emptyDescription}\n\t\t\t\t\t\taction={onCreateReadinessItem ? (\n\t\t\t\t\t\t\t<Button tone=\"primary\" type=\"button\" onClick={onCreateReadinessItem} icon={Plus}>\n\t\t\t\t\t\t\t\t{strings.createLabel}\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t) : undefined}\n\t\t\t\t\t/>\n\t\t\t\t)\n\t\t\t) : (\n\t\t\t\t<ItemGroup>\n\t\t\t\t\t{items.map((item, index) => {\n\t\t\t\t\t\tconst onSelect = onSelectReadinessItem ? () => onSelectReadinessItem(item) : undefined;\n\t\t\t\t\t\tconst onEdit = onEditReadinessItem ? () => onEditReadinessItem(item) : undefined;\n\t\t\t\t\t\tconst onDelete = onDeleteReadinessItem ? () => onDeleteReadinessItem(item) : undefined;\n\t\t\t\t\t\tconst readinessActions = [\n\t\t\t\t\t\t\t...(onEdit ? [{\n\t\t\t\t\t\t\t\tid: 'edit',\n\t\t\t\t\t\t\t\tlabel: strings.editLabel,\n\t\t\t\t\t\t\t\ticon: <Pencil className=\"size-icon-md\" />,\n\t\t\t\t\t\t\t\tonClick: () => onEdit(),\n\t\t\t\t\t\t\t\ttone: 'secondary' as const, buttonStyle: 'ghost' as const,\n\t\t\t\t\t\t\t}] : []),\n\t\t\t\t\t\t\t...(onDelete ? [{\n\t\t\t\t\t\t\t\tid: 'delete',\n\t\t\t\t\t\t\t\tlabel: strings.deleteLabel,\n\t\t\t\t\t\t\t\ticon: <Trash2 className=\"size-icon-md\" />,\n\t\t\t\t\t\t\t\tonClick: () => onDelete(),\n\t\t\t\t\t\t\t\ttone: 'destructive' as const,\n\t\t\t\t\t\t\t}] : []),\n\t\t\t\t\t\t];\n\t\t\t\t\t\tconst rowActions = renderReadinessItemActions\n\t\t\t\t\t\t\t? renderReadinessItemActions(item, { index, onSelect, onEdit, onDelete })\n\t\t\t\t\t\t\t: <ProductRowActions item={item} actions={readinessActions} menuLabel={strings.actionsLabel} />;\n\n\t\t\t\t\t\treturn renderItem ? (\n\t\t\t\t\t\t\t<div key={item.id}>{renderItem(item, index)}</div>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<ProductReadinessRow\n\t\t\t\t\t\t\t\tkey={item.id}\n\t\t\t\t\t\t\t\titem={item}\n\t\t\t\t\t\t\t\tactionFallback={strings.actionLabel}\n\t\t\t\t\t\t\t\tonSelect={onSelect}\n\t\t\t\t\t\t\t\tactions={rowActions}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t);\n\t\t\t\t\t})}\n\t\t\t\t</ItemGroup>\n\t\t\t)}\n\t\t</ContentBlock>\n\t);\n}\n\nProductReadinessCard.displayName = 'ProductReadinessCard';\n","import { Eye, Pencil, Plus, Trash2 } from 'lucide-react';\n\nimport { Button } from '../../../base/buttons';\nimport { ContentBlock } from '../../../base/display';\nimport { ItemGroup } from '../../../base/item';\nimport { useStrings } from '../../../../lib/strings';\nimport { cn } from '../../../../lib/utils';\n\nimport { defaultProductStructureCardStrings } from '../products.strings';\nimport type { ProductStructureCardProps } from '../products.types';\nimport { ProductEmptyState } from '../partials/product-empty-state';\nimport { ProductRowActions } from '../partials/product-actions';\nimport { ProductStructureMetricRow } from '../partials/product-rows';\n\n/**\n * One support rail region of the product editor.\n *\n * @deprecated An internal region of `ProductOverview`, which renders it from its `structure` prop (still typed `ProductStructureCardProps`). Pass the same props there and add custom content through the overview's slots. Kept exported for compatibility.\n */\nexport function ProductStructureCard({\n\tmetrics = [],\n\tonCreateMetric,\n\tonSelectMetric,\n\tonEditMetric,\n\tonDeleteMetric,\n\trenderMetricActions,\n\tactions,\n\tfooterSlot,\n\tempty,\n\tclassName,\n\tstrings: stringsProp,\n}: ProductStructureCardProps) {\n\tconst strings = useStrings(defaultProductStructureCardStrings, stringsProp);\n\tconst headerAction = onCreateMetric ? (\n\t\t<Button type=\"button\" tone=\"secondary\" buttonStyle=\"ghost\" onClick={onCreateMetric} icon={Plus}>\n\t\t\t{strings.createLabel}\n\t\t</Button>\n\t) : undefined;\n\n\treturn (\n\t\t<ContentBlock\n\t\t\ttitle={strings.title}\n\t\t\tdescription={strings.description}\n\t\t\tactions={actions}\n\t\t\theaderAction={headerAction}\n\t\t\tfooterSlot={footerSlot}\n\t\t\tclassName={cn('product-structure-card--component w-full', className)}\n\t\t>\n\t\t\t{metrics.length === 0 ? (\n\t\t\t\tempty ?? (\n\t\t\t\t\t<ProductEmptyState\n\t\t\t\t\t\ttitle={strings.emptyTitle}\n\t\t\t\t\t\tdescription={strings.emptyDescription}\n\t\t\t\t\t\taction={onCreateMetric ? (\n\t\t\t\t\t\t\t<Button tone=\"primary\" type=\"button\" onClick={onCreateMetric} icon={Plus}>\n\t\t\t\t\t\t\t\t{strings.createLabel}\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t) : undefined}\n\t\t\t\t\t/>\n\t\t\t\t)\n\t\t\t) : (\n\t\t\t\t<ItemGroup>\n\t\t\t\t\t{metrics.map((metric, index) => {\n\t\t\t\t\t\tconst onSelect = onSelectMetric ? () => onSelectMetric(metric) : undefined;\n\t\t\t\t\t\tconst onEdit = onEditMetric ? () => onEditMetric(metric) : undefined;\n\t\t\t\t\t\tconst onDelete = onDeleteMetric ? () => onDeleteMetric(metric) : undefined;\n\t\t\t\t\t\tconst metricActions = [\n\t\t\t\t\t\t\t...(onSelect ? [{\n\t\t\t\t\t\t\t\tid: 'open',\n\t\t\t\t\t\t\t\tlabel: strings.viewLabel,\n\t\t\t\t\t\t\t\ticon: <Eye className=\"size-icon-md\" />,\n\t\t\t\t\t\t\t\tonClick: () => onSelect(),\n\t\t\t\t\t\t\t\ttone: 'secondary' as const, buttonStyle: 'ghost' as const,\n\t\t\t\t\t\t\t}] : []),\n\t\t\t\t\t\t\t...(onEdit ? [{\n\t\t\t\t\t\t\t\tid: 'edit',\n\t\t\t\t\t\t\t\tlabel: strings.editLabel,\n\t\t\t\t\t\t\t\ticon: <Pencil className=\"size-icon-md\" />,\n\t\t\t\t\t\t\t\tonClick: () => onEdit(),\n\t\t\t\t\t\t\t\ttone: 'secondary' as const, buttonStyle: 'ghost' as const,\n\t\t\t\t\t\t\t}] : []),\n\t\t\t\t\t\t\t...(onDelete ? [{\n\t\t\t\t\t\t\t\tid: 'delete',\n\t\t\t\t\t\t\t\tlabel: strings.deleteLabel,\n\t\t\t\t\t\t\t\ticon: <Trash2 className=\"size-icon-md\" />,\n\t\t\t\t\t\t\t\tonClick: () => onDelete(),\n\t\t\t\t\t\t\t\ttone: 'destructive' as const,\n\t\t\t\t\t\t\t}] : []),\n\t\t\t\t\t\t];\n\t\t\t\t\t\tconst rowActions = renderMetricActions\n\t\t\t\t\t\t\t? renderMetricActions(metric, { index, onSelect, onEdit, onDelete })\n\t\t\t\t\t\t\t: <ProductRowActions item={metric} actions={metricActions} menuLabel={strings.actionsLabel} />;\n\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<ProductStructureMetricRow\n\t\t\t\t\t\t\t\tkey={metric.id}\n\t\t\t\t\t\t\t\tmetric={metric}\n\t\t\t\t\t\t\t\tactions={rowActions}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t);\n\t\t\t\t\t})}\n\t\t\t\t</ItemGroup>\n\t\t\t)}\n\t\t</ContentBlock>\n\t);\n}\n\nProductStructureCard.displayName = 'ProductStructureCard';\n","import { Copy, Eye, Pencil, Plus, Trash2 } from 'lucide-react';\nimport { useMemo } from 'react';\nimport type { ReactNode } from 'react';\nimport type { ColumnDef } from '@tanstack/react-table';\n\nimport { Badge } from '../../../base/badge';\nimport { Button } from '../../../base/buttons';\nimport { ContentBlock } from '../../../base/display';\nimport { Stack } from '../../../base/structure';\nimport { DataTable, type TableAction } from '../../table';\nimport { SecondaryValue, Value } from '../../../primitives';\nimport { Text } from '../../../typography';\nimport { useStrings } from '../../../../lib/strings';\nimport { cn } from '../../../../lib/utils';\n\nimport { defaultProductVariantsTableStrings } from '../products.strings';\nimport type { ProductVariantsTableProps } from '../products.types';\nimport { ProductEmptyState } from '../partials/product-empty-state';\nimport { PRODUCT_EMPTY_VALUE } from '../partials/product-values';\nimport type { ProductVariantSummary } from '../products.types';\n\nfunction ProductVariantNameCell({\n\tvariant,\n\tchannelsLabel,\n}: {\n\tvariant: ProductVariantSummary;\n\tchannelsLabel: string;\n}) {\n\treturn (\n\t\t<Stack gap=\"xs\" className=\"product-variants-table--variant-cell min-w-0\">\n\t\t\t<Stack gap=\"dense\">\n\t\t\t\t<Stack direction=\"horizontal\" gap=\"sm\">\n\t\t\t\t\t<Text type=\"inherit\" weight=\"semibold\" className=\"truncate\">{variant.name}</Text>\n\t\t\t\t\t{!!variant.status && (\n\t\t\t\t\t\t<Badge tone={variant.statusTone ?? 'secondary'}>{variant.status}</Badge>\n\t\t\t\t\t)}\n\t\t\t\t</Stack>\n\t\t\t\t{!!variant.description && (\n\t\t\t\t\t<Text size=\"xs\" type=\"secondary\">\n\t\t\t\t\t\t{variant.description}\n\t\t\t\t\t</Text>\n\t\t\t\t)}\n\t\t\t</Stack>\n\t\t\t{!!(variant.options?.length || variant.channels) && (\n\t\t\t\t<Stack direction=\"horizontal\" gap=\"xs\">\n\t\t\t\t\t{variant.options?.map((option, optionIndex) => (\n\t\t\t\t\t\t<Badge key={optionIndex} tone=\"secondary\">\n\t\t\t\t\t\t\t{option}\n\t\t\t\t\t\t</Badge>\n\t\t\t\t\t))}\n\t\t\t\t\t{!!variant.channels && (\n\t\t\t\t\t\t<Text tag=\"span\" size=\"xs\" type=\"secondary\">\n\t\t\t\t\t\t\t{channelsLabel}: {variant.channels}\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t)}\n\t\t\t\t</Stack>\n\t\t\t)}\n\t\t</Stack>\n\t);\n}\n\nfunction ProductVariantValueCell({\n\tvalue,\n\temphasis = false,\n}: {\n\tvalue?: ReactNode;\n\temphasis?: boolean;\n}) {\n\tconst Primitive = value ? Value : SecondaryValue;\n\n\treturn (\n\t\t<Primitive\n\t\t\ttype={value ? 'inherit' : 'secondary'}\n\t\t\tweight={emphasis ? 'semibold' : undefined}\n\t\t\tclassName=\"min-w-0 tabular-nums\"\n\t\t>\n\t\t\t{value ?? PRODUCT_EMPTY_VALUE}\n\t\t</Primitive>\n\t);\n}\n\nexport function ProductVariantsTable({\n\tvariants = [],\n\tonCreateVariant,\n\tonSelectVariant,\n\tonEditVariant,\n\tonDuplicateVariant,\n\tonDeleteVariant,\n\trenderVariantActions,\n\tactions,\n\tfooterSlot,\n\tempty,\n\tclassName,\n\tstrings: stringsProp,\n}: ProductVariantsTableProps) {\n\tconst strings = useStrings(defaultProductVariantsTableStrings, stringsProp);\n\tconst rowActions = useMemo<TableAction<ProductVariantSummary>[] | undefined>(() => {\n\t\tif (renderVariantActions) return undefined;\n\n\t\tconst actionsList: TableAction<ProductVariantSummary>[] = [\n\t\t\t...(onSelectVariant ? [{\n\t\t\t\tid: 'open',\n\t\t\t\tlabel: strings.viewLabel,\n\t\t\t\ticon: <Eye className=\"size-icon-sm\" aria-hidden=\"true\" />,\n\t\t\t\tonClick: onSelectVariant,\n\t\t\t\tbuttonStyle: 'ghost' as const,\n\t\t\t}] : []),\n\t\t\t...(onEditVariant ? [{\n\t\t\t\tid: 'edit',\n\t\t\t\tlabel: strings.editLabel,\n\t\t\t\ticon: <Pencil className=\"size-icon-sm\" aria-hidden=\"true\" />,\n\t\t\t\tonClick: onEditVariant,\n\t\t\t\tbuttonStyle: 'ghost' as const,\n\t\t\t}] : []),\n\t\t\t...(onDuplicateVariant ? [{\n\t\t\t\tid: 'duplicate',\n\t\t\t\tlabel: strings.duplicateLabel,\n\t\t\t\ticon: <Copy className=\"size-icon-sm\" aria-hidden=\"true\" />,\n\t\t\t\tonClick: onDuplicateVariant,\n\t\t\t\tbuttonStyle: 'ghost' as const,\n\t\t\t}] : []),\n\t\t\t...(onDeleteVariant ? [{\n\t\t\t\tid: 'delete',\n\t\t\t\tlabel: strings.deleteLabel,\n\t\t\t\ticon: <Trash2 className=\"size-icon-sm\" aria-hidden=\"true\" />,\n\t\t\t\tonClick: onDeleteVariant,\n\t\t\t\ttone: 'destructive' as const,\n\t\t\t}] : []),\n\t\t];\n\n\t\treturn actionsList.length > 0 ? actionsList : undefined;\n\t}, [\n\t\tonDeleteVariant,\n\t\tonDuplicateVariant,\n\t\tonEditVariant,\n\t\tonSelectVariant,\n\t\trenderVariantActions,\n\t\tstrings.deleteLabel,\n\t\tstrings.duplicateLabel,\n\t\tstrings.editLabel,\n\t\tstrings.viewLabel,\n\t]);\n\tconst columns = useMemo<ColumnDef<ProductVariantSummary>[]>(() => {\n\t\tconst baseColumns: ColumnDef<ProductVariantSummary>[] = [\n\t\t\t{\n\t\t\t\taccessorKey: 'name',\n\t\t\t\theader: strings.headers.variant,\n\t\t\t\tcell: ({ row }) => (\n\t\t\t\t\t<ProductVariantNameCell\n\t\t\t\t\t\tvariant={row.original}\n\t\t\t\t\t\tchannelsLabel={strings.headers.channels}\n\t\t\t\t\t/>\n\t\t\t\t),\n\t\t\t},\n\t\t\t{\n\t\t\t\taccessorKey: 'price',\n\t\t\t\theader: strings.headers.price,\n\t\t\t\tcell: ({ row }) => <ProductVariantValueCell value={row.original.price} emphasis />,\n\t\t\t\tmeta: { align: 'start' },\n\t\t\t},\n\t\t\t{\n\t\t\t\taccessorKey: 'inventory',\n\t\t\t\theader: strings.headers.inventory,\n\t\t\t\tcell: ({ row }) => <ProductVariantValueCell value={row.original.inventory} />,\n\t\t\t},\n\t\t\t{\n\t\t\t\taccessorKey: 'sku',\n\t\t\t\theader: strings.headers.sku,\n\t\t\t\tcell: ({ row }) => <ProductVariantValueCell value={row.original.sku} />,\n\t\t\t},\n\t\t\t{\n\t\t\t\taccessorKey: 'updatedAt',\n\t\t\t\theader: strings.headers.updated,\n\t\t\t\tcell: ({ row }) => <ProductVariantValueCell value={row.original.updatedAt} />,\n\t\t\t},\n\t\t];\n\n\t\tif (renderVariantActions) {\n\t\t\tbaseColumns.push({\n\t\t\t\tid: 'actions',\n\t\t\t\theader: strings.headers.actions,\n\t\t\t\tcell: ({ row }) => renderVariantActions(row.original, {\n\t\t\t\t\tindex: row.index,\n\t\t\t\t\tonSelect: onSelectVariant ? () => onSelectVariant(row.original) : undefined,\n\t\t\t\t\tonEdit: onEditVariant ? () => onEditVariant(row.original) : undefined,\n\t\t\t\t\tonDuplicate: onDuplicateVariant ? () => onDuplicateVariant(row.original) : undefined,\n\t\t\t\t\tonDelete: onDeleteVariant ? () => onDeleteVariant(row.original) : undefined,\n\t\t\t\t}),\n\t\t\t\tmeta: { align: 'end' },\n\t\t\t});\n\t\t}\n\n\t\treturn baseColumns;\n\t}, [\n\t\tonDeleteVariant,\n\t\tonDuplicateVariant,\n\t\tonEditVariant,\n\t\tonSelectVariant,\n\t\trenderVariantActions,\n\t\tstrings.headers.actions,\n\t\tstrings.headers.channels,\n\t\tstrings.headers.inventory,\n\t\tstrings.headers.price,\n\t\tstrings.headers.sku,\n\t\tstrings.headers.updated,\n\t\tstrings.headers.variant,\n\t]);\n\tconst headerAction = onCreateVariant ? (\n\t\t<Button type=\"button\" tone=\"secondary\" buttonStyle=\"ghost\" onClick={onCreateVariant} icon={Plus}>\n\t\t\t{strings.createLabel}\n\t\t</Button>\n\t) : undefined;\n\n\treturn (\n\t\t<ContentBlock\n\t\t\ttitle={strings.title}\n\t\t\tdescription={strings.description}\n\t\t\tactions={actions}\n\t\t\theaderAction={headerAction}\n\t\t\tfooterSlot={footerSlot}\n\t\t\tclassName={cn('product-variants-table--component w-full', className)}\n\t\t>\n\t\t\t{variants.length === 0 ? (\n\t\t\t\tempty ?? (\n\t\t\t\t\t<ProductEmptyState\n\t\t\t\t\t\ttitle={strings.emptyTitle}\n\t\t\t\t\t\tdescription={strings.emptyDescription}\n\t\t\t\t\t\taction={onCreateVariant ? (\n\t\t\t\t\t\t\t<Button tone=\"primary\" type=\"button\" onClick={onCreateVariant} icon={Plus}>\n\t\t\t\t\t\t\t\t{strings.createLabel}\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t) : undefined}\n\t\t\t\t\t/>\n\t\t\t\t)\n\t\t\t) : (\n\t\t\t\t<DataTable<ProductVariantSummary>\n\t\t\t\t\tdata={variants}\n\t\t\t\t\tcolumns={columns}\n\t\t\t\t\tgetRowId={(variant) => variant.id}\n\t\t\t\t\tenableColumnVisibility\n\t\t\t\t\tsurface=\"glass\"\n\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\trowActions={rowActions}\n\t\t\t\t\trowActionsMenuLabel={strings.headers.actions}\n\t\t\t\t\trowActionsDisplayMode=\"menu\"\n\t\t\t\t\tstorageKey=\"product-variants\"\n\t\t\t\t\tclassName=\"product-variants-table--table\"\n\t\t\t\t\ttableContainerClassName=\"max-h-none\"\n\t\t\t\t\tstrings={{\n\t\t\t\t\t\temptyState: {\n\t\t\t\t\t\t\tmessage: strings.emptyTitle,\n\t\t\t\t\t\t},\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t)}\n\t\t</ContentBlock>\n\t);\n}\n\nProductVariantsTable.displayName = 'ProductVariantsTable';\n","import { useStrings } from '../../../../lib/strings';\nimport { Stack } from '../../../base/structure';\nimport { cn } from '../../../../lib/utils';\n\nimport { defaultProductOverviewStrings } from '../products.strings';\nimport type { ProductOverviewProps } from '../products.types';\nimport { ProductContractOverview } from './product-contract-overview';\nimport { ProductDetailsCard } from './product-details-card';\nimport { ProductOperationsCard } from './product-operations-card';\nimport { ProductOptionsSummary } from './product-options-summary';\nimport { ProductPoliciesCard } from './product-policies-card';\nimport { ProductQuotePreviewCard } from './product-quote-preview-card';\nimport { ProductReadinessCard } from './product-readiness-card';\nimport { ProductStructureCard } from './product-structure-card';\nimport { ProductVariantsTable } from './product-variants-table';\n\nexport function ProductOverview({\n\tdetails,\n\tcontract,\n\toptions,\n\tvariants,\n\treadiness,\n\tstructure,\n\toperations,\n\tquote,\n\tpolicies,\n\tslots,\n\tclassName,\n\tmainClassName,\n\trailClassName,\n\tstrings: stringsProp,\n}: ProductOverviewProps) {\n\tconst strings = useStrings(defaultProductOverviewStrings, stringsProp);\n\tconst hasRail = !!(readiness || structure || operations || quote || policies || slots?.railTop || slots?.railBottom);\n\n\treturn (\n\t\t// The cards are unframed sections, so the gap between them is the only thing that\n\t\t// separates them: page rhythm (3xl), clearly wider than the 2xl between sub-sections\n\t\t// inside a card and the row spacing inside a list.\n\t\t<Stack gap=\"3xl\" className={cn('product-overview--component @container/product-overview', className)}>\n\t\t\t{slots?.before}\n\t\t\t<div className={cn('grid min-w-0 grid-cols-1 gap-space-3xl', hasRail && '@5xl/product-overview:grid-cols-[minmax(0,1fr)_22rem]')}>\n\t\t\t\t<Stack render={<section />} gap=\"3xl\" aria-label={strings.mainLabel} className={cn('product-overview--main', mainClassName)}>\n\t\t\t\t\t{slots?.mainTop}\n\t\t\t\t\t{!!details && <ProductDetailsCard {...details} />}\n\t\t\t\t\t{!!contract && <ProductContractOverview {...contract} />}\n\t\t\t\t\t{!!options && <ProductOptionsSummary {...options} />}\n\t\t\t\t\t{!!variants && <ProductVariantsTable {...variants} />}\n\t\t\t\t\t{slots?.mainBottom}\n\t\t\t\t</Stack>\n\t\t\t\t{!!hasRail && (\n\t\t\t\t\t<Stack render={<aside />} gap=\"3xl\" aria-label={strings.railLabel} className={cn('product-overview--rail', railClassName)}>\n\t\t\t\t\t\t{slots?.railTop}\n\t\t\t\t\t\t{!!readiness && <ProductReadinessCard {...readiness} />}\n\t\t\t\t\t\t{!!structure && <ProductStructureCard {...structure} />}\n\t\t\t\t\t\t{!!operations && <ProductOperationsCard {...operations} />}\n\t\t\t\t\t\t{!!quote && <ProductQuotePreviewCard {...quote} />}\n\t\t\t\t\t\t{!!policies && <ProductPoliciesCard {...policies} />}\n\t\t\t\t\t\t{slots?.railBottom}\n\t\t\t\t\t</Stack>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t\t{slots?.after}\n\t\t</Stack>\n\t);\n}\n\nProductOverview.displayName = 'ProductOverview';\n","import { Copy, Eye, Pencil, Trash2 } from 'lucide-react';\nimport type { ReactNode } from 'react';\n\nimport { useStrings } from '../../../../lib/strings';\nimport { cn } from '../../../../lib/utils';\n\nimport {\n\tdefaultProductVariantActionMenuStrings,\n\ttype ProductVariantActionMenuStrings,\n} from '../products.strings';\nimport type {\n\tProductVariantActionMenuProps,\n\tProductVariantSummary,\n} from '../products.types';\nimport { ProductRowActions } from '../partials/product-actions';\n\ntype VariantCommandHandlers = Pick<\n\tProductVariantActionMenuProps,\n\t'onSelectVariant' | 'onEditVariant' | 'onDuplicateVariant' | 'onDeleteVariant'\n>;\n\ninterface VariantCommand {\n\tid: string;\n\tlabel: string;\n\ticon: ReactNode;\n\tonClick: () => void;\n\ttone: 'secondary' | 'destructive';\n\tbuttonStyle?: 'ghost';\n}\n\n/**\n * The default variant commands, in order, with the destructive one last. The\n * row menu and the details card's single overflow menu both build on these.\n */\nexport function productVariantMenuActions(\n\tvariant: ProductVariantSummary,\n\t{ onSelectVariant, onEditVariant, onDuplicateVariant, onDeleteVariant }: VariantCommandHandlers,\n\tstrings: ProductVariantActionMenuStrings,\n): VariantCommand[] {\n\treturn [\n\t\t...(onSelectVariant ? [{\n\t\t\tid: 'open',\n\t\t\tlabel: strings.viewLabel,\n\t\t\ticon: <Eye className=\"size-icon-md\" />,\n\t\t\tonClick: () => onSelectVariant(variant),\n\t\t\ttone: 'secondary' as const, buttonStyle: 'ghost' as const,\n\t\t}] : []),\n\t\t...(onEditVariant ? [{\n\t\t\tid: 'edit',\n\t\t\tlabel: strings.editLabel,\n\t\t\ticon: <Pencil className=\"size-icon-md\" />,\n\t\t\tonClick: () => onEditVariant(variant),\n\t\t\ttone: 'secondary' as const, buttonStyle: 'ghost' as const,\n\t\t}] : []),\n\t\t...(onDuplicateVariant ? [{\n\t\t\tid: 'duplicate',\n\t\t\tlabel: strings.duplicateLabel,\n\t\t\ticon: <Copy className=\"size-icon-md\" />,\n\t\t\tonClick: () => onDuplicateVariant(variant),\n\t\t\ttone: 'secondary' as const, buttonStyle: 'ghost' as const,\n\t\t}] : []),\n\t\t...(onDeleteVariant ? [{\n\t\t\tid: 'delete',\n\t\t\tlabel: strings.deleteLabel,\n\t\t\ticon: <Trash2 className=\"size-icon-md\" />,\n\t\t\tonClick: () => onDeleteVariant(variant),\n\t\t\ttone: 'destructive' as const,\n\t\t}] : []),\n\t];\n}\n\n/**\n * Row menu for one product variant.\n *\n * @deprecated An internal part of the variant tables and `ProductVariantDetails`, which render it for every variant. Replace it there with `renderVariantActions`, composing the base `ActionMenu` if needed. Kept exported for compatibility.\n */\nexport function ProductVariantActionMenu({\n\tvariant,\n\tindex = 0,\n\tonSelectVariant,\n\tonEditVariant,\n\tonDuplicateVariant,\n\tonDeleteVariant,\n\trenderVariantActions,\n\tmenuLabel,\n\tclassName,\n\tstrings: stringsProp,\n}: ProductVariantActionMenuProps) {\n\tconst strings = useStrings(defaultProductVariantActionMenuStrings, stringsProp);\n\tconst onSelect = onSelectVariant ? () => onSelectVariant(variant) : undefined;\n\tconst onEdit = onEditVariant ? () => onEditVariant(variant) : undefined;\n\tconst onDuplicate = onDuplicateVariant ? () => onDuplicateVariant(variant) : undefined;\n\tconst onDelete = onDeleteVariant ? () => onDeleteVariant(variant) : undefined;\n\tconst hasActions = !!(onSelect || onEdit || onDuplicate || onDelete || renderVariantActions);\n\n\tif (!hasActions) return null;\n\n\tif (renderVariantActions) {\n\t\treturn (\n\t\t\t<div className={cn('product-variant-action-menu--component flex justify-end', className)}>\n\t\t\t\t{renderVariantActions(variant, { index, onSelect, onEdit, onDuplicate, onDelete })}\n\t\t\t</div>\n\t\t);\n\t}\n\n\treturn (\n\t\t<ProductRowActions<ProductVariantSummary>\n\t\t\titem={variant}\n\t\t\tmenuLabel={menuLabel ?? strings.actionsLabel}\n\t\t\tclassName={cn('product-variant-action-menu--component', className)}\n\t\t\tactions={productVariantMenuActions(\n\t\t\t\tvariant,\n\t\t\t\t{ onSelectVariant, onEditVariant, onDuplicateVariant, onDeleteVariant },\n\t\t\t\tstrings,\n\t\t\t).map(({ onClick, ...action }) => ({ ...action, onClick: () => onClick() }))}\n\t\t/>\n\t);\n}\n\nProductVariantActionMenu.displayName = 'ProductVariantActionMenu';\n","import {compositionClasses} from '../../../base/structure/composition.recipes';\nimport { ArrowLeft } from 'lucide-react';\nimport type { ReactNode } from 'react';\n\nimport { Badge } from '../../../base/badge';\nimport { Button } from '../../../base/buttons';\nimport { ContentBlock } from '../../../base/display';\nimport { MetadataList, type MetadataListItem } from '../../../base/metadata-list';\nimport { ItemGroup } from '../../../base/item';\nimport { Stack } from '../../../base/structure';\nimport { Text } from '../../../typography';\nimport { useStrings } from '../../../../lib/strings';\nimport { cn } from '../../../../lib/utils';\n\nimport {\n\tdefaultProductVariantActionMenuStrings,\n\tdefaultProductVariantDetailsStrings,\n} from '../products.strings';\nimport type {\n\tProductOptionSummary,\n\tProductVariantDetailsProps,\n\tProductVariantSummary,\n} from '../products.types';\nimport { ProductEmptyState } from '../partials/product-empty-state';\nimport { ProductSummaryRow } from '../partials/product-rows';\nimport { ProductVariantActionMenu, productVariantMenuActions } from './product-variant-action-menu';\n\nconst isPresent = (value: ReactNode): boolean => (\n\tvalue !== undefined &&\n\tvalue !== null &&\n\tvalue !== false &&\n\tvalue !== ''\n);\n\ntype ProductVariantMetadataLabels = {\n\tprice: string;\n\tinventory: string;\n\tsku: string;\n\tchannels: string;\n\tupdated: string;\n};\n\nfunction getDefaultMetadata(\n\tvariant: ProductVariantSummary,\n\tlabels: ProductVariantMetadataLabels,\n): MetadataListItem[] {\n\treturn [\n\t\t{ label: labels.price, value: variant.price },\n\t\t{ label: labels.inventory, value: variant.inventory },\n\t\t{ label: labels.sku, value: variant.sku },\n\t\t{ label: labels.channels, value: variant.channels },\n\t\t{ label: labels.updated, value: variant.updatedAt },\n\t].filter((item) => isPresent(item.value));\n}\n\nexport function ProductVariantDetails({\n\tvariant,\n\tmetadata,\n\toptionItems = [],\n\tmedia,\n\tonBack,\n\tonSelectVariant,\n\tonEditVariant,\n\tonDuplicateVariant,\n\tonDeleteVariant,\n\tonSelectOption,\n\tactions,\n\theaderEnd,\n\tfooterSlot,\n\tempty,\n\trenderActions,\n\trenderMetadata,\n\trenderOption,\n\tclassName,\n\tstrings: stringsProp,\n}: ProductVariantDetailsProps) {\n\tconst strings = useStrings(defaultProductVariantDetailsStrings, stringsProp);\n\tconst resolvedMetadata = variant ? (metadata ?? getDefaultMetadata(variant, strings.metadata)) : [];\n\t// One header, one overflow menu: the default variant commands join the\n\t// card's own `actions` in the trailing ⋯, which sorts Delete last. A custom\n\t// `renderActions` stays the consumer's own header content.\n\tconst variantActions = variant && !renderActions\n\t\t? productVariantMenuActions(\n\t\t\tvariant,\n\t\t\t{ onSelectVariant, onEditVariant, onDuplicateVariant, onDeleteVariant },\n\t\t\tdefaultProductVariantActionMenuStrings,\n\t\t)\n\t\t: [];\n\tconst menuActions = [...variantActions, ...(actions ?? [])];\n\tconst hasCustomActions = !!(variant && renderActions);\n\tconst headerAction = (\n\t\t<div className={cn('product-variant-details--header-actions flex items-center', compositionClasses.commands)}>\n\t\t\t{!!onBack && (\n\t\t\t\t<Button type=\"button\" tone=\"secondary\" buttonStyle=\"ghost\" onClick={onBack} icon={ArrowLeft}>\n\t\t\t\t\t{strings.backLabel}\n\t\t\t\t</Button>\n\t\t\t)}\n\t\t\t{!!hasCustomActions && variant && (\n\t\t\t\t<ProductVariantActionMenu\n\t\t\t\t\tvariant={variant}\n\t\t\t\t\tonSelectVariant={onSelectVariant}\n\t\t\t\t\tonEditVariant={onEditVariant}\n\t\t\t\t\tonDuplicateVariant={onDuplicateVariant}\n\t\t\t\t\tonDeleteVariant={onDeleteVariant}\n\t\t\t\t\trenderVariantActions={renderActions}\n\t\t\t\t/>\n\t\t\t)}\n\t\t</div>\n\t);\n\tconst selectedOptions = variant?.options ?? [];\n\n\treturn (\n\t\t<ContentBlock\n\t\t\ttitle={variant?.name ?? strings.title}\n\t\t\ttitleSuffix={variant?.status ? (\n\t\t\t\t<Badge tone={variant.statusTone ?? 'secondary'}>{variant.status}</Badge>\n\t\t\t) : undefined}\n\t\t\tdescription={variant?.description ?? strings.description}\n\t\t\tactions={menuActions.length ? menuActions : undefined}\n\t\t\theaderAction={onBack || hasCustomActions ? headerAction : undefined}\n\t\t\theaderEnd={headerEnd}\n\t\t\tfooterSlot={footerSlot}\n\t\t\tclassName={cn('product-variant-details--component w-full', className)}\n\t\t>\n\t\t\t{!variant ? (\n\t\t\t\tempty ?? (\n\t\t\t\t\t<ProductEmptyState\n\t\t\t\t\t\ttitle={strings.emptyTitle}\n\t\t\t\t\t\tdescription={strings.emptyDescription}\n\t\t\t\t\t/>\n\t\t\t\t)\n\t\t\t) : (\n\t\t\t\t<Stack gap=\"2xl\" className=\"product-variant-details--body\">\n\t\t\t\t\t{!!media && (\n\t\t\t\t\t\t<div className=\"product-variant-details--media overflow-hidden rounded-radius border border-border bg-muted/30\">\n\t\t\t\t\t\t\t{media}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)}\n\n\t\t\t\t\t{renderMetadata ? (\n\t\t\t\t\t\trenderMetadata(variant)\n\t\t\t\t\t) : resolvedMetadata.some(Boolean) && (\n\t\t\t\t\t\t// Same sub-section heading recipe as the option sections below.\n\t\t\t\t\t\t<Stack gap=\"md\" className=\"product-variant-details--facts\">\n\t\t\t\t\t\t\t<Text type=\"inherit\" weight=\"semibold\">{strings.factsTitle}</Text>\n\t\t\t\t\t\t\t<MetadataList\n\t\t\t\t\t\t\t\tadaptTo=\"container\"\n\t\t\t\t\t\t\t\titems={resolvedMetadata}\n\t\t\t\t\t\t\t\tcolumns={3}\n\t\t\t\t\t\t\t\tdensity=\"compact\"\n\t\t\t\t\t\t\t\tclassName=\"product-variant-details--metadata\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</Stack>\n\t\t\t\t\t)}\n\n\t\t\t\t\t{!!selectedOptions.length && (\n\t\t\t\t\t\t<Stack gap=\"md\" className=\"product-variant-details--selected-options\">\n\t\t\t\t\t\t\t<Text type=\"inherit\" weight=\"semibold\">{strings.selectedOptionsTitle}</Text>\n\t\t\t\t\t\t\t<div className=\"flex flex-wrap gap-space-sm\">\n\t\t\t\t\t\t\t\t{selectedOptions.map((option, index) => (\n\t\t\t\t\t\t\t\t\t<Badge key={index} tone=\"secondary\">\n\t\t\t\t\t\t\t\t\t\t{option}\n\t\t\t\t\t\t\t\t\t</Badge>\n\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</Stack>\n\t\t\t\t\t)}\n\n\t\t\t\t\t{!!optionItems.length && (\n\t\t\t\t\t\t<Stack gap=\"md\" className=\"product-variant-details--related-options\">\n\t\t\t\t\t\t\t<Text type=\"inherit\" weight=\"semibold\">{strings.relatedOptionsTitle}</Text>\n\t\t\t\t\t\t\t<ItemGroup>\n\t\t\t\t\t\t\t\t{optionItems.map((option: ProductOptionSummary, index) => (\n\t\t\t\t\t\t\t\t\trenderOption ? (\n\t\t\t\t\t\t\t\t\t\t<div key={option.id}>{renderOption(option, index)}</div>\n\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t<ProductSummaryRow\n\t\t\t\t\t\t\t\t\t\t\tkey={option.id}\n\t\t\t\t\t\t\t\t\t\t\titem={option}\n\t\t\t\t\t\t\t\t\t\t\tactionLabel={strings.viewOptionLabel}\n\t\t\t\t\t\t\t\t\t\t\tonSelect={onSelectOption ? () => onSelectOption(option) : undefined}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t</ItemGroup>\n\t\t\t\t\t\t</Stack>\n\t\t\t\t\t)}\n\t\t\t\t</Stack>\n\t\t\t)}\n\t\t</ContentBlock>\n\t);\n}\n\nProductVariantDetails.displayName = 'ProductVariantDetails';\n","import { type FormEvent, useId, useState } from 'react';\n\nimport { Button } from '../../../base/buttons';\nimport { ContentBlock } from '../../../base/display';\nimport { FormField } from '../../../base/forms';\nimport { Input, Textarea } from '../../../base/text-inputs';\nimport { Select } from '../../../base/choice-inputs';\nimport { Stack } from '../../../base/structure';\nimport { compositionClasses } from '../../../base/structure/composition.recipes';\nimport { Text } from '../../../typography';\nimport { useStrings } from '../../../../lib/strings';\nimport { cn } from '../../../../lib/utils';\n\nimport { defaultProductVariantEditorStrings } from '../products.strings';\nimport type {\n\tProductChoice,\n\tProductVariantEditorField,\n\tProductVariantEditorProps,\n\tProductVariantEditorValues,\n\tProductVariantOptionField,\n} from '../products.types';\n\nconst toSelectOptions = (choices: ProductChoice[]) => (\n\tchoices.map((choice) => ({\n\t\tvalue: choice.value,\n\t\tlabel: choice.label,\n\t\tdisabled: choice.disabled,\n\t}))\n);\n\nexport function ProductVariantEditor({\n\tvalue: valueProp,\n\tdefaultValue,\n\toptionFields = [],\n\tstatusOptions = [],\n\tonValueChange,\n\tonSubmit,\n\tonError,\n\tonCancel,\n\tonDelete,\n\tactions,\n\theaderEnd,\n\tfooterSlot,\n\tvisibleFields,\n\terrors,\n\tformId: formIdProp,\n\tshowHeader = true,\n\tchildren,\n\tdisabled = false,\n\tsubmitting = false,\n\tclassName,\n\tstrings: stringsProp,\n}: ProductVariantEditorProps) {\n\tconst strings = useStrings(defaultProductVariantEditorStrings, stringsProp);\n\tconst generatedFormId = useId();\n\tconst formId = formIdProp ?? generatedFormId;\n\tconst isControlled = valueProp !== undefined;\n\tconst [internalValue, setInternalValue] = useState<ProductVariantEditorValues>(defaultValue ?? {});\n\tconst [internalSubmitting, setInternalSubmitting] = useState(false);\n\tconst currentValue = (isControlled ? valueProp : internalValue) ?? {};\n\tconst currentOptions = currentValue.options;\n\tconst missingOptionDefaults = optionFields.filter((field) => (\n\t\tfield.value !== undefined && (!currentOptions || !Object.hasOwn(currentOptions, field.id))\n\t));\n\tconst value = missingOptionDefaults.length > 0\n\t\t? {\n\t\t\t...currentValue,\n\t\t\toptions: {\n\t\t\t\t...currentOptions,\n\t\t\t\t...Object.fromEntries(missingOptionDefaults.map((field) => [field.id, field.value])),\n\t\t\t},\n\t\t}\n\t\t: currentValue;\n\tconst resolvedSubmitting = submitting || internalSubmitting;\n\tconst isDisabled = disabled || resolvedSubmitting;\n\tconst isFieldVisible = (field: ProductVariantEditorField) => visibleFields?.[field] !== false;\n\tconst showIdentity = isFieldVisible('name') || isFieldVisible('sku') || isFieldVisible('description');\n\tconst showCommercial = isFieldVisible('price') || isFieldVisible('inventory') || isFieldVisible('status') || isFieldVisible('channels');\n\n\tconst updateValue = (next: ProductVariantEditorValues) => {\n\t\tif (!isControlled) {\n\t\t\tsetInternalValue(next);\n\t\t}\n\n\t\tonValueChange?.(next);\n\t};\n\n\tconst updateField = (field: keyof Omit<ProductVariantEditorValues, 'options'>, nextValue: string) => {\n\t\tupdateValue({\n\t\t\t...value,\n\t\t\t[field]: nextValue,\n\t\t});\n\t};\n\n\tconst updateOption = (field: ProductVariantOptionField, nextValue: string | undefined) => {\n\t\tupdateValue({\n\t\t\t...value,\n\t\t\toptions: {\n\t\t\t\t...value.options,\n\t\t\t\t[field.id]: nextValue,\n\t\t\t},\n\t\t});\n\t};\n\n\tconst handleSubmit = async (event: FormEvent<HTMLFormElement>) => {\n\t\tevent.preventDefault();\n\t\tif (!onSubmit || resolvedSubmitting) return;\n\n\t\tsetInternalSubmitting(true);\n\t\ttry {\n\t\t\tawait onSubmit(value);\n\t\t} catch (error) {\n\t\t\tif (import.meta.env?.DEV) {\n\t\t\t\tconsole.warn('[ProductVariantEditor] Submit failed.', error);\n\t\t\t}\n\t\t\tonError?.(error);\n\t\t} finally {\n\t\t\tsetInternalSubmitting(false);\n\t\t}\n\t};\n\n\tconst defaultFooter = (\n\t\t<div className=\"product-variant-editor--footer flex flex-col-reverse gap-space-md @sm/product-variant-editor:flex-row @sm/product-variant-editor:items-center @sm/product-variant-editor:justify-between\">\n\t\t\t<div>\n\t\t\t\t{!!onDelete && (\n\t\t\t\t\t<Button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\ttone=\"destructive\"\n\t\t\t\t\t\tbuttonStyle=\"ghost\"\n\t\t\t\t\t\tonClick={() => onDelete(value)}\n\t\t\t\t\t\tdisabled={isDisabled}\n\t\t\t\t\t>\n\t\t\t\t\t\t{strings.deleteLabel}\n\t\t\t\t\t</Button>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t\t<div className=\"flex flex-col-reverse gap-space-md @sm/product-variant-editor:flex-row @sm/product-variant-editor:justify-end\">\n\t\t\t\t{!!onCancel && (\n\t\t\t\t\t<Button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\ttone=\"secondary\"\n\t\t\t\t\t\tbuttonStyle=\"ghost\"\n\t\t\t\t\t\tonClick={onCancel}\n\t\t\t\t\t\tdisabled={isDisabled}\n\t\t\t\t\t>\n\t\t\t\t\t\t{strings.cancelLabel}\n\t\t\t\t\t</Button>\n\t\t\t\t)}\n\t\t\t\t{!!onSubmit && (\n\t\t\t\t\t<Button tone=\"primary\"\n\t\t\t\t\t\ttype=\"submit\"\n\t\t\t\t\t\tform={formId}\n\t\t\t\t\t\tdisabled={isDisabled}\n\t\t\t\t\t>\n\t\t\t\t\t\t{resolvedSubmitting ? strings.savingLabel : strings.saveLabel}\n\t\t\t\t\t</Button>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t</div>\n\t);\n\tconst hasDefaultFooter = !!(onDelete || onCancel || onSubmit);\n\n\treturn (\n\t\t<ContentBlock\n\t\t\ttitle={showHeader ? strings.title : undefined}\n\t\t\tdescription={showHeader ? strings.description : undefined}\n\t\t\tactions={actions}\n\t\t\theaderEnd={headerEnd}\n\t\t\tfooterSlot={footerSlot}\n\t\t\t/*\n\t\t\t * The editor is a query container and its field pairs, footer, and\n\t\t\t * description span all switch on its width. It is mounted in a drawer or\n\t\t\t * a detail rail far more often than at page width; keyed to the viewport\n\t\t\t * it kept two-up fields in a 320px drawer on a desktop screen, at ~150px\n\t\t\t * a field. The 384px tier holds the two-column layout everywhere it\n\t\t\t * already renders — the narrowest is the 439px variant-details example —\n\t\t\t * and drops to one column below that.\n\t\t\t */\n\t\t\tclassName={cn('product-variant-editor--component @container/product-variant-editor w-full', className)}\n\t\t>\n\t\t\t<Stack render={<form id={formId} onSubmit={handleSubmit} />} gap=\"2xl\" className=\"product-variant-editor--form\">\n\t\t\t\t{showIdentity && <section className={cn('product-variant-editor--section grid', compositionClasses.related)}>\n\t\t\t\t\t<Text type=\"inherit\" weight=\"semibold\">{strings.identityTitle}</Text>\n\t\t\t\t\t<div className={cn('grid @sm/product-variant-editor:grid-cols-2', compositionClasses.related)}>\n\t\t\t\t\t\t{isFieldVisible('name') && <FormField label={strings.fields.name} error={errors?.name} required>\n\t\t\t\t\t\t\t<Input\n\t\t\t\t\t\t\t\tvalue={value.name ?? ''}\n\t\t\t\t\t\t\t\tonChange={(event) => updateField('name', event.target.value)}\n\t\t\t\t\t\t\t\tinvalid={!!errors?.name}\n\t\t\t\t\t\t\t\tplaceholder={strings.placeholders.name}\n\t\t\t\t\t\t\t\tdisabled={isDisabled}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</FormField>}\n\t\t\t\t\t\t{isFieldVisible('sku') && <FormField label={strings.fields.sku} error={errors?.sku}>\n\t\t\t\t\t\t\t<Input\n\t\t\t\t\t\t\t\tvalue={value.sku ?? ''}\n\t\t\t\t\t\t\t\tonChange={(event) => updateField('sku', event.target.value)}\n\t\t\t\t\t\t\t\tinvalid={!!errors?.sku}\n\t\t\t\t\t\t\t\tplaceholder={strings.placeholders.sku}\n\t\t\t\t\t\t\t\tdisabled={isDisabled}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</FormField>}\n\t\t\t\t\t\t{isFieldVisible('description') && <FormField label={strings.fields.description} error={errors?.description} className=\"@sm/product-variant-editor:col-span-2\">\n\t\t\t\t\t\t\t<Textarea\n\t\t\t\t\t\t\t\tvalue={value.description ?? ''}\n\t\t\t\t\t\t\t\tonChange={(event) => updateField('description', event.target.value)}\n\t\t\t\t\t\t\t\tinvalid={!!errors?.description}\n\t\t\t\t\t\t\t\tplaceholder={strings.placeholders.description}\n\t\t\t\t\t\t\t\tdisabled={isDisabled}\n\t\t\t\t\t\t\t\tautoResize\n\t\t\t\t\t\t\t\tminRows={2}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</FormField>}\n\t\t\t\t\t</div>\n\t\t\t\t</section>}\n\n\t\t\t\t{showCommercial && <section className={cn('product-variant-editor--section grid', compositionClasses.related)}>\n\t\t\t\t\t<Text type=\"inherit\" weight=\"semibold\">{strings.commercialTitle}</Text>\n\t\t\t\t\t<div className={cn('grid @sm/product-variant-editor:grid-cols-2', compositionClasses.related)}>\n\t\t\t\t\t\t{isFieldVisible('price') && <FormField label={strings.fields.price} error={errors?.price}>\n\t\t\t\t\t\t\t<Input\n\t\t\t\t\t\t\t\tvalue={value.price ?? ''}\n\t\t\t\t\t\t\t\tonChange={(event) => updateField('price', event.target.value)}\n\t\t\t\t\t\t\t\tinvalid={!!errors?.price}\n\t\t\t\t\t\t\t\tplaceholder={strings.placeholders.price}\n\t\t\t\t\t\t\t\tdisabled={isDisabled}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</FormField>}\n\t\t\t\t\t\t{isFieldVisible('inventory') && <FormField label={strings.fields.inventory} error={errors?.inventory}>\n\t\t\t\t\t\t\t<Input\n\t\t\t\t\t\t\t\tvalue={value.inventory ?? ''}\n\t\t\t\t\t\t\t\tonChange={(event) => updateField('inventory', event.target.value)}\n\t\t\t\t\t\t\t\tinvalid={!!errors?.inventory}\n\t\t\t\t\t\t\t\tplaceholder={strings.placeholders.inventory}\n\t\t\t\t\t\t\t\tdisabled={isDisabled}\n\t\t\t\t\t\t\t\tinputMode=\"numeric\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</FormField>}\n\t\t\t\t\t\t{isFieldVisible('status') && <FormField label={strings.fields.status} error={errors?.status}>\n\t\t\t\t\t\t\t{statusOptions.length > 0 ? (\n\t\t\t\t\t\t\t\t<Select\n\t\t\t\t\t\t\t\t\toptions={toSelectOptions(statusOptions)}\n\t\t\t\t\t\t\t\t\tvalue={value.status ?? null}\n\t\t\t\t\t\t\t\t\tonValueChange={(nextValue) => updateField('status', nextValue ?? '')}\n\t\t\t\t\t\t\t\t\tinvalid={!!errors?.status}\n\t\t\t\t\t\t\t\t\tplaceholder={strings.statusPlaceholder}\n\t\t\t\t\t\t\t\t\tdisabled={isDisabled}\n\t\t\t\t\t\t\t\t\taria-label={strings.fields.status}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<Input\n\t\t\t\t\t\t\t\t\tvalue={value.status ?? ''}\n\t\t\t\t\t\t\t\t\tonChange={(event) => updateField('status', event.target.value)}\n\t\t\t\t\t\t\t\t\tinvalid={!!errors?.status}\n\t\t\t\t\t\t\t\t\tplaceholder={strings.placeholders.status}\n\t\t\t\t\t\t\t\t\tdisabled={isDisabled}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</FormField>}\n\t\t\t\t\t\t{isFieldVisible('channels') && <FormField label={strings.fields.channels} error={errors?.channels}>\n\t\t\t\t\t\t\t<Input\n\t\t\t\t\t\t\t\tvalue={value.channels ?? ''}\n\t\t\t\t\t\t\t\tonChange={(event) => updateField('channels', event.target.value)}\n\t\t\t\t\t\t\t\tinvalid={!!errors?.channels}\n\t\t\t\t\t\t\t\tplaceholder={strings.placeholders.channels}\n\t\t\t\t\t\t\t\tdisabled={isDisabled}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</FormField>}\n\t\t\t\t\t</div>\n\t\t\t\t</section>}\n\n\t\t\t\t{!!optionFields.length && (\n\t\t\t\t\t<section className={cn('product-variant-editor--section grid', compositionClasses.related)}>\n\t\t\t\t\t\t<Text type=\"inherit\" weight=\"semibold\">{strings.optionsTitle}</Text>\n\t\t\t\t\t\t<div className={cn('grid @sm/product-variant-editor:grid-cols-2', compositionClasses.related)}>\n\t\t\t\t\t\t\t{optionFields.map((field) => {\n\t\t\t\t\t\t\t\tconst fieldValue = value.options?.[field.id] ?? '';\n\t\t\t\t\t\t\t\tconst hasChoices = !!field.choices?.length;\n\n\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t<FormField\n\t\t\t\t\t\t\t\t\t\tkey={field.id}\n\t\t\t\t\t\t\t\t\t\tlabel={field.label}\n\t\t\t\t\t\t\t\t\t\thelperText={field.helperText}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{hasChoices ? (\n\t\t\t\t\t\t\t\t\t\t\t<Select\n\t\t\t\t\t\t\t\t\t\t\t\toptions={toSelectOptions(field.choices ?? [])}\n\t\t\t\t\t\t\t\t\t\t\t\tvalue={fieldValue || null}\n\t\t\t\t\t\t\t\t\t\t\t\tonValueChange={(nextValue) => updateOption(field, nextValue)}\n\t\t\t\t\t\t\t\t\t\t\t\tplaceholder={field.placeholder ?? strings.optionPlaceholder}\n\t\t\t\t\t\t\t\t\t\t\t\tdisabled={isDisabled}\n\t\t\t\t\t\t\t\t\t\t\t\taria-label={field.label}\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t\t<Input\n\t\t\t\t\t\t\t\t\t\t\t\tvalue={fieldValue}\n\t\t\t\t\t\t\t\t\t\t\t\tonChange={(event) => updateOption(field, event.target.value)}\n\t\t\t\t\t\t\t\t\t\t\t\tplaceholder={field.placeholder ?? strings.optionPlaceholder}\n\t\t\t\t\t\t\t\t\t\t\t\tdisabled={isDisabled}\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t</FormField>\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</section>\n\t\t\t\t)}\n\t\t\t\t{/* App-owned fields join the form's section rhythm, before its commands. */}\n\t\t\t\t{children}\n\t\t\t\t{/* The default commands close the form, so the form's section gap owns their space; a consumer footerSlot replaces them in the footer. */}\n\t\t\t\t{(footerSlot === undefined || footerSlot === null) && hasDefaultFooter && defaultFooter}\n\t\t\t</Stack>\n\t\t</ContentBlock>\n\t);\n}\n\nProductVariantEditor.displayName = 'ProductVariantEditor';\n","import {compositionRhythm} from '../../../base/structure/composition.recipes';\nimport { Copy, Eye, Pencil, Plus, Trash2 } from 'lucide-react';\nimport { Fragment, useCallback, useMemo, useRef, useState, type ReactNode } from 'react';\n\nimport { Badge } from '../../../base/badge';\nimport { BatchActionBar } from '../../../base/batch-action-bar';\nimport { Button } from '../../../base/buttons';\nimport { ContentBlock } from '../../../base/display';\nimport { Checkbox } from '../../../base/choice-inputs';\nimport { Input } from '../../../base/text-inputs';\nimport {\n\tTable,\n\tTableBody,\n\tTableCell,\n\tTableHead,\n\tTableHeader,\n\tTableRow,\n} from '../../../base/table';\nimport { Stack } from '../../../base/structure';\nimport { SecondaryValue, Value } from '../../../primitives';\nimport { DisplayLabel, Text } from '../../../typography';\nimport { useStrings } from '../../../../lib/strings';\nimport { cn } from '../../../../lib/utils';\n\nimport {\n\tdefaultProductVariantsBulkTableStrings,\n} from '../products.strings';\nimport type {\n\tProductOptionGroup,\n\tProductVariantBulkActionContext,\n\tProductVariantCellDisplay,\n\tProductVariantCellDisplayConfig,\n\tProductVariantCellRenderContext,\n\tProductVariantEditableField,\n\tProductVariantFieldChangeContext,\n\tProductVariantOptionCombinationDisplay,\n\tProductVariantRow,\n\tProductVariantSelectionMode,\n\tProductVariantsBulkTableColumn,\n\tProductVariantsBulkTableProps,\n} from '../products.types';\nimport { ProductEmptyState } from '../partials/product-empty-state';\nimport { ProductRowActions } from '../partials/product-actions';\nimport { PRODUCT_EMPTY_VALUE } from '../partials/product-values';\n\nconst DEFAULT_VISIBLE_COLUMNS: ProductVariantsBulkTableColumn[] = ['variant', 'sku', 'price', 'inventory', 'status'];\nconst DEFAULT_OPTION_COMBINATION_DISPLAY: ProductVariantOptionCombinationDisplay = 'text';\nconst DEFAULT_CELL_DISPLAY: ProductVariantCellDisplay = 'text';\nconst DEFAULT_SELECTION_MODE: ProductVariantSelectionMode = 'multiple';\n\nfunction getPlainText(value: unknown): string {\n\tif (typeof value === 'string' || typeof value === 'number') return String(value);\n\treturn '';\n}\n\nfunction getOptionValue(variant: ProductVariantRow, option: ProductOptionGroup) {\n\tconst directValue = variant.optionValues?.[option.id];\n\tif (directValue !== undefined && directValue !== null && directValue !== false && directValue !== '') {\n\t\treturn directValue;\n\t}\n\n\tconst valueId = variant.optionValueIds?.[option.id];\n\tconst matchedValue = option.values?.find((value) => value.id === valueId);\n\treturn matchedValue?.label ?? undefined;\n}\n\nfunction getVariantName(variant: ProductVariantRow, optionGroups: ProductOptionGroup[]) {\n\tif (variant.name !== undefined && variant.name !== null && variant.name !== '') {\n\t\treturn variant.name;\n\t}\n\n\tconst derivedName = optionGroups\n\t\t.filter((option) => option.usedForVariants !== false)\n\t\t.map((option) => getOptionValue(variant, option))\n\t\t.filter((value): value is NonNullable<typeof value> => value !== undefined && value !== null && value !== '')\n\t\t.map((value) => getPlainText(value))\n\t\t.filter(Boolean)\n\t\t.join(' / ');\n\n\treturn derivedName || PRODUCT_EMPTY_VALUE;\n}\n\nfunction getVariantOptionSummary(variant: ProductVariantRow, optionGroups: ProductOptionGroup[]) {\n\treturn optionGroups\n\t\t.filter((option) => option.usedForVariants !== false)\n\t\t.map((option) => getOptionValue(variant, option))\n\t\t.filter((value): value is NonNullable<typeof value> => value !== undefined && value !== null && value !== '');\n}\n\nfunction getOptionCombinationLabel(values: ReactNode[]) {\n\treturn values.map(getPlainText).filter(Boolean).join(' / ');\n}\n\nfunction getGroupLabel(variant: ProductVariantRow, option: ProductOptionGroup) {\n\tconst value = getOptionValue(variant, option);\n\tconst label = getPlainText(value);\n\treturn label || PRODUCT_EMPTY_VALUE;\n}\n\nfunction selectedIdsToRows(ids: string[], rowById: Map<string, ProductVariantRow>): ProductVariantRow[] {\n\treturn ids.map((id) => rowById.get(id)).filter((row): row is ProductVariantRow => !!row);\n}\n\nfunction renderFieldValue(value: ReactNode | undefined) {\n\tif (value === undefined || value === null || value === '') return PRODUCT_EMPTY_VALUE;\n\treturn value;\n}\n\nfunction hasCellValue(value: ReactNode | undefined) {\n\treturn value !== undefined && value !== null && value !== '';\n}\n\nfunction isEditableField(column: ProductVariantsBulkTableColumn): column is ProductVariantEditableField {\n\treturn column === 'sku' || column === 'price' || column === 'inventory';\n}\n\nfunction resolveCellDisplay(display: ProductVariantCellDisplayConfig, field: ProductVariantEditableField): ProductVariantCellDisplay {\n\tif (display === 'text' || display === 'field') return display;\n\treturn display[field] ?? DEFAULT_CELL_DISPLAY;\n}\n\nfunction getFieldChangeContext(\n\tindex: number,\n\tfield: ProductVariantEditableField,\n\tpreviousValue: ReactNode | undefined,\n\tvalue: string,\n): ProductVariantFieldChangeContext {\n\treturn {\n\t\tindex,\n\t\tfield,\n\t\tpreviousValue,\n\t\tvalue,\n\t};\n}\n\nfunction renderVariantCellValue(\n\tvalue: ReactNode | undefined,\n\tlabel: string,\n\tdisplay: ProductVariantCellDisplay,\n\tonValueChange?: (value: string) => void,\n\tonBlur?: (value: string) => void,\n\ttextClassName = 'whitespace-normal break-words',\n) {\n\tconst plainValue = getPlainText(value);\n\n\tif (display === 'field') {\n\t\tconst canEdit = !!onValueChange;\n\n\t\treturn (\n\t\t\t<Input\n\t\t\t\treadOnly={!canEdit}\n\t\t\t\tvalue={plainValue}\n\t\t\t\tonChange={canEdit ? (event) => onValueChange(event.currentTarget.value) : undefined}\n\t\t\t\tonBlur={onBlur ? (event) => onBlur(event.currentTarget.value) : undefined}\n\t\t\t\taria-label={label}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t// Content sizing lets the column grow to the whole value (a long\n\t\t\t\t\t// SKU), while the field still fills a wider column.\n\t\t\t\t\t'h-control-lg w-full min-w-24 field-sizing-content bg-background px-control shadow-xs',\n\t\t\t\t\t!canEdit && 'text-muted-foreground',\n\t\t\t\t)}\n\t\t\t/>\n\t\t);\n\t}\n\n\tconst Primitive = hasCellValue(value) ? Value : SecondaryValue;\n\n\treturn (\n\t\t<Primitive className={cn('min-w-0 tabular-nums', textClassName)}>\n\t\t\t{renderFieldValue(value)}\n\t\t</Primitive>\n\t);\n}\n\nexport function ProductVariantsBulkTable({\n\tvariants = [],\n\toptionGroups = [],\n\tgroupByOptionId,\n\tvisibleColumns = DEFAULT_VISIBLE_COLUMNS,\n\toptionCombinationDisplay = DEFAULT_OPTION_COMBINATION_DISPLAY,\n\tcellDisplay = DEFAULT_CELL_DISPLAY,\n\tselectionMode,\n\trenderOptionCombination,\n\trenderCell,\n\tselectedVariantIds,\n\tdefaultSelectedVariantIds = [],\n\tonSelectedVariantIdsChange,\n\tonVariantFieldChange,\n\tonVariantFieldBlur,\n\tonCreateVariant,\n\tonGenerateVariants,\n\tonSelectVariant,\n\tonEditVariant,\n\tonDuplicateVariant,\n\tonDeleteVariant,\n\tonBulkEdit,\n\tonBulkApply,\n\tonBulkDelete,\n\trenderVariantActions,\n\trenderBulkActions,\n\tactions,\n\theaderEnd,\n\tfooterSlot,\n\tempty,\n\tsurface = 'card',\n\tclassName,\n\tstrings: stringsProp,\n}: ProductVariantsBulkTableProps) {\n\tconst strings = useStrings(defaultProductVariantsBulkTableStrings, stringsProp);\n\tconst isSelectionControlled = selectedVariantIds !== undefined;\n\tconst [internalSelectedIds, setInternalSelectedIds] = useState(defaultSelectedVariantIds);\n\tconst hasBulkActions = !!(renderBulkActions || onBulkEdit || onBulkApply || onBulkDelete);\n\tconst resolvedSelectionMode = selectionMode\n\t\t?? (hasBulkActions || isSelectionControlled || !!onSelectedVariantIdsChange ? DEFAULT_SELECTION_MODE : 'none');\n\tconst isSelectable = resolvedSelectionMode === 'multiple';\n\tconst selectedIds = useMemo(\n\t\t() => (isSelectable ? (isSelectionControlled ? selectedVariantIds : internalSelectedIds) : []),\n\t\t[internalSelectedIds, isSelectable, isSelectionControlled, selectedVariantIds],\n\t);\n\tconst rowById = useMemo(\n\t\t() => new Map(variants.map((variant) => [variant.id, variant])),\n\t\t[variants],\n\t);\n\tconst selectedRows = useMemo(\n\t\t() => selectedIdsToRows(selectedIds, rowById),\n\t\t[rowById, selectedIds],\n\t);\n\tconst selectedIdSet = useMemo(() => new Set(selectedIds), [selectedIds]);\n\tconst visibleColumnSet = useMemo(() => new Set(visibleColumns), [visibleColumns]);\n\tconst groupByOption = useMemo(\n\t\t() => optionGroups.find((option) => option.id === groupByOptionId),\n\t\t[optionGroups, groupByOptionId],\n\t);\n\tconst rowIndexById = useMemo(\n\t\t() => new Map(variants.map((variant, index) => [variant.id, index])),\n\t\t[variants],\n\t);\n\tconst orderedVariants = useMemo(() => {\n\t\tif (!groupByOption) return variants;\n\t\tconst valueOrder = new Map((groupByOption.values ?? []).map((value, index) => [value.id, index]));\n\n\t\treturn [...variants].sort((a, b) => {\n\t\t\tconst aValueId = a.optionValueIds?.[groupByOption.id];\n\t\t\tconst bValueId = b.optionValueIds?.[groupByOption.id];\n\t\t\tconst aOrder = aValueId !== undefined ? valueOrder.get(aValueId) : undefined;\n\t\t\tconst bOrder = bValueId !== undefined ? valueOrder.get(bValueId) : undefined;\n\t\t\tconst resolvedAOrder = aOrder ?? Number.MAX_SAFE_INTEGER;\n\t\t\tconst resolvedBOrder = bOrder ?? Number.MAX_SAFE_INTEGER;\n\t\t\tif (resolvedAOrder !== resolvedBOrder) return resolvedAOrder - resolvedBOrder;\n\t\t\treturn (rowIndexById.get(a.id) ?? 0) - (rowIndexById.get(b.id) ?? 0);\n\t\t});\n\t}, [groupByOption, rowIndexById, variants]);\n\tconst groupCounts = useMemo(() => {\n\t\tif (!groupByOption) return new Map<string, number>();\n\t\tconst counts = new Map<string, number>();\n\t\tvariants.forEach((variant) => {\n\t\t\tconst label = getGroupLabel(variant, groupByOption);\n\t\t\tcounts.set(label, (counts.get(label) ?? 0) + 1);\n\t\t});\n\t\treturn counts;\n\t}, [groupByOption, variants]);\n\tconst hasBulkControls = isSelectable && hasBulkActions;\n\tconst hasRows = variants.length > 0;\n\tconst allRowsSelected = isSelectable && hasRows && variants.every((variant) => selectedIdSet.has(variant.id));\n\tconst someRowsSelected = selectedRows.length > 0 && !allRowsSelected;\n\t// Where focus lands when the bulk bar goes away with focus inside it.\n\tconst selectAllRef = useRef<HTMLElement>(null);\n\tconst hasRowActions = !!(\n\t\tonSelectVariant ||\n\t\tonEditVariant ||\n\t\tonDuplicateVariant ||\n\t\tonDeleteVariant ||\n\t\trenderVariantActions\n\t);\n\tconst visibleColumnCount = visibleColumns.filter((column) => visibleColumnSet.has(column)).length;\n\tconst tableColumnCount = visibleColumnCount + (isSelectable ? 1 : 0) + (hasRowActions ? 1 : 0);\n\n\tconst updateSelection = useCallback(\n\t\t(nextIds: string[]) => {\n\t\t\tconst nextRows = selectedIdsToRows(nextIds, rowById);\n\t\t\tif (!isSelectionControlled) {\n\t\t\t\tsetInternalSelectedIds(nextIds);\n\t\t\t}\n\t\t\tonSelectedVariantIdsChange?.(nextIds, nextRows);\n\t\t},\n\t\t[isSelectionControlled, onSelectedVariantIdsChange, rowById],\n\t);\n\n\tconst clearSelection = useCallback(() => updateSelection([]), [updateSelection]);\n\tconst toggleRow = useCallback(\n\t\t(variant: ProductVariantRow, checked: boolean | 'indeterminate') => {\n\t\t\tif (!isSelectable) return;\n\t\t\tconst shouldSelect = checked === true;\n\t\t\tconst nextIds = shouldSelect\n\t\t\t\t? Array.from(new Set([...selectedIds, variant.id]))\n\t\t\t\t: selectedIds.filter((id) => id !== variant.id);\n\t\t\tupdateSelection(nextIds);\n\t\t},\n\t\t[isSelectable, selectedIds, updateSelection],\n\t);\n\tconst toggleAll = useCallback(\n\t\t(checked: boolean | 'indeterminate') => {\n\t\t\tif (!isSelectable) return;\n\t\t\tupdateSelection(checked === true ? variants.map((variant) => variant.id) : []);\n\t\t},\n\t\t[isSelectable, updateSelection, variants],\n\t);\n\n\tconst bulkContext: ProductVariantBulkActionContext = {\n\t\tselectedRows,\n\t\tselectedIds,\n\t\tallRows: variants,\n\t\tselectedCount: selectedRows.length,\n\t\ttotalCount: variants.length,\n\t\tallRowsSelected,\n\t\tclearSelection,\n\t\tsetSelectedIds: updateSelection,\n\t};\n\n\tconst headerAction = (onCreateVariant || onGenerateVariants) ? (\n\t\t<Stack direction=\"horizontal\" gap={compositionRhythm.commands} justify=\"end\" className=\"product-variants-bulk-table--header-actions\">\n\t\t\t{!!onGenerateVariants && (\n\t\t\t\t<Button type=\"button\" tone=\"secondary\" buttonStyle=\"outline\" onClick={onGenerateVariants}>\n\t\t\t\t\t{strings.generateLabel}\n\t\t\t\t</Button>\n\t\t\t)}\n\t\t\t{!!onCreateVariant && (\n\t\t\t\t<Button type=\"button\" tone=\"secondary\" buttonStyle=\"ghost\" onClick={onCreateVariant} icon={Plus}>\n\t\t\t\t\t{strings.createLabel}\n\t\t\t\t</Button>\n\t\t\t)}\n\t\t</Stack>\n\t) : undefined;\n\n\tconst customBulkActions = selectedRows.length > 0 ? renderBulkActions?.(bulkContext) : undefined;\n\t/*\n\t * The shared base BatchActionBar, inline: a docked bar would cover the rows\n\t * being selected. It renders nothing until a variant is selected, and\n\t * `renderBulkActions` replaces the default commands.\n\t */\n\tconst bulkToolbar = hasBulkControls ? (\n\t\t<BatchActionBar\n\t\t\tplacement=\"inline\"\n\t\t\tclassName=\"product-variants-bulk-table--bulk-toolbar\"\n\t\t\tselectedCount={selectedRows.length}\n\t\t\ttotalCount={variants.length}\n\t\t\tonClear={clearSelection}\n\t\t\treturnFocusRef={selectAllRef}\n\t\t\tstrings={{\n\t\t\t\tsummary: (count, total) => strings.selectedLabel(count, total ?? variants.length),\n\t\t\t\tclear: strings.clearSelectionLabel,\n\t\t\t}}\n\t\t>\n\t\t\t{customBulkActions ?? (\n\t\t\t\t<>\n\t\t\t\t\t{!!onBulkEdit && (\n\t\t\t\t\t\t<Button type=\"button\" onClick={() => onBulkEdit(selectedRows)}>\n\t\t\t\t\t\t\t{strings.bulkEditLabel}\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t)}\n\t\t\t\t\t{!!onBulkApply && (\n\t\t\t\t\t\t<Button type=\"button\" tone=\"neutral\" buttonStyle=\"ghost\" onClick={() => onBulkApply(selectedRows)}>\n\t\t\t\t\t\t\t{strings.bulkApplyLabel}\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t)}\n\t\t\t\t\t{/* Destructive commands stay last, after every other bulk command. */}\n\t\t\t\t\t{!!onBulkDelete && (\n\t\t\t\t\t\t<Button type=\"button\" tone=\"destructive\" buttonStyle=\"ghost\" onClick={() => onBulkDelete(selectedRows)}>\n\t\t\t\t\t\t\t{strings.bulkDeleteLabel}\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t)}\n\t\t\t\t</>\n\t\t\t)}\n\t\t</BatchActionBar>\n\t) : null;\n\n\tconst content = variants.length === 0 ? (\n\t\tempty ?? (\n\t\t\t<ProductEmptyState\n\t\t\t\ttitle={strings.emptyTitle}\n\t\t\t\tdescription={strings.emptyDescription}\n\t\t\t\taction={onGenerateVariants ? (\n\t\t\t\t\t<Button tone=\"primary\" type=\"button\" onClick={onGenerateVariants}>\n\t\t\t\t\t\t{strings.generateLabel}\n\t\t\t\t\t</Button>\n\t\t\t\t) : undefined}\n\t\t\t/>\n\t\t)\n\t) : (\n\t\t<Stack gap=\"md\" className=\"product-variants-bulk-table--body\">\n\t\t\t{bulkToolbar}\n\t\t\t<div\n\t\t\t\tclassName=\"product-variants-bulk-table--table overflow-hidden rounded-surface border border-border bg-background text-foreground\"\n\t\t\t>\n\t\t\t\t{/* The shared Table container scrolls as every DataTable does; a reserved\n\t\t\t\t\tscrollbar gutter stopped the header and rows short of the frame edge. */}\n\t\t\t\t<Table className=\"w-full border-collapse\">\n\t\t\t\t\t\t<colgroup>\n\t\t\t\t\t\t\t{isSelectable && <col className=\"w-14 min-w-14 max-w-14\" />}\n\t\t\t\t\t\t\t{visibleColumnSet.has('variant') && <col />}\n\t\t\t\t\t\t\t{visibleColumnSet.has('sku') && <col />}\n\t\t\t\t\t\t\t{visibleColumnSet.has('price') && <col />}\n\t\t\t\t\t\t\t{visibleColumnSet.has('inventory') && <col />}\n\t\t\t\t\t\t\t{visibleColumnSet.has('status') && <col />}\n\t\t\t\t\t\t\t{visibleColumnSet.has('updated') && <col />}\n\t\t\t\t\t\t\t{hasRowActions && <col className=\"w-18\" />}\n\t\t\t\t\t\t</colgroup>\n\t\t\t\t\t\t<TableHeader>\n\t\t\t\t\t\t\t<TableRow className=\"h-12 border-b border-border/60 bg-muted/50\">\n\t\t\t\t\t\t\t\t{isSelectable && (\n\t\t\t\t\t\t\t\t\t<TableHead className=\"w-14 min-w-14 max-w-14 px-0 py-space-md text-center align-middle\">\n\t\t\t\t\t\t\t\t\t\t<Checkbox\n\t\t\t\t\t\t\t\t\t\t\tref={selectAllRef}\n\t\t\t\t\t\t\t\t\t\t\tchecked={allRowsSelected}\n\t\t\t\t\t\t\t\t\t\t\tindeterminate={someRowsSelected}\n\t\t\t\t\t\t\t\t\t\t\tonCheckedChange={toggleAll}\n\t\t\t\t\t\t\t\t\t\t\taria-label={strings.selectAllLabel}\n\t\t\t\t\t\t\t\t\t\t\tclassName=\"mx-auto\"\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t</TableHead>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t{visibleColumnSet.has('variant') && (\n\t\t\t\t\t\t\t\t\t<TableHead className=\"px-space-lg py-space-md text-left align-middle\">\n\t\t\t\t\t\t\t\t\t\t<DisplayLabel className=\"whitespace-normal\">\n\t\t\t\t\t\t\t\t\t\t\t{strings.headers.variant}\n\t\t\t\t\t\t\t\t\t\t</DisplayLabel>\n\t\t\t\t\t\t\t\t\t</TableHead>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t{visibleColumnSet.has('sku') && (\n\t\t\t\t\t\t\t\t\t<TableHead className=\"px-space-lg py-space-md text-left align-middle\">\n\t\t\t\t\t\t\t\t\t\t<DisplayLabel className=\"whitespace-normal\">\n\t\t\t\t\t\t\t\t\t\t\t{strings.headers.sku}\n\t\t\t\t\t\t\t\t\t\t</DisplayLabel>\n\t\t\t\t\t\t\t\t\t</TableHead>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t{visibleColumnSet.has('price') && (\n\t\t\t\t\t\t\t\t\t<TableHead className=\"px-space-lg py-space-md text-left align-middle\">\n\t\t\t\t\t\t\t\t\t\t<DisplayLabel className=\"whitespace-normal\">\n\t\t\t\t\t\t\t\t\t\t\t{strings.headers.price}\n\t\t\t\t\t\t\t\t\t\t</DisplayLabel>\n\t\t\t\t\t\t\t\t\t</TableHead>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t{visibleColumnSet.has('inventory') && (\n\t\t\t\t\t\t\t\t\t<TableHead className=\"px-space-lg py-space-md text-left align-middle\">\n\t\t\t\t\t\t\t\t\t\t<DisplayLabel className=\"whitespace-normal\">\n\t\t\t\t\t\t\t\t\t\t\t{strings.headers.inventory}\n\t\t\t\t\t\t\t\t\t\t</DisplayLabel>\n\t\t\t\t\t\t\t\t\t</TableHead>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t{visibleColumnSet.has('status') && (\n\t\t\t\t\t\t\t\t\t<TableHead className=\"px-space-lg py-space-md text-left align-middle\">\n\t\t\t\t\t\t\t\t\t\t<DisplayLabel className=\"whitespace-normal\">\n\t\t\t\t\t\t\t\t\t\t\t{strings.headers.status}\n\t\t\t\t\t\t\t\t\t\t</DisplayLabel>\n\t\t\t\t\t\t\t\t\t</TableHead>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t{visibleColumnSet.has('updated') && (\n\t\t\t\t\t\t\t\t\t<TableHead className=\"px-space-lg py-space-md text-left align-middle\">\n\t\t\t\t\t\t\t\t\t\t<DisplayLabel className=\"whitespace-normal\">\n\t\t\t\t\t\t\t\t\t\t\t{strings.headers.updated}\n\t\t\t\t\t\t\t\t\t\t</DisplayLabel>\n\t\t\t\t\t\t\t\t\t</TableHead>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t{hasRowActions && (\n\t\t\t\t\t\t\t\t\t<TableHead className=\"px-space-lg py-space-md text-right align-middle\">\n\t\t\t\t\t\t\t\t\t\t<DisplayLabel className=\"whitespace-normal\">\n\t\t\t\t\t\t\t\t\t\t\t{strings.headers.actions}\n\t\t\t\t\t\t\t\t\t\t</DisplayLabel>\n\t\t\t\t\t\t\t\t\t</TableHead>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</TableRow>\n\t\t\t\t\t\t</TableHeader>\n\t\t\t\t\t\t<TableBody>\n\t\t\t\t\t\t\t{orderedVariants.map((variant, displayIndex) => {\n\t\t\t\t\t\t\t\tconst index = rowIndexById.get(variant.id) ?? displayIndex;\n\t\t\t\t\t\t\t\tconst groupLabel = groupByOption ? getGroupLabel(variant, groupByOption) : null;\n\t\t\t\t\t\t\t\tconst previousVariant = displayIndex > 0 ? orderedVariants[displayIndex - 1] : undefined;\n\t\t\t\t\t\t\t\tconst previousGroupLabel = groupByOption && previousVariant\n\t\t\t\t\t\t\t\t\t? getGroupLabel(previousVariant, groupByOption)\n\t\t\t\t\t\t\t\t\t: null;\n\t\t\t\t\t\t\t\tconst shouldRenderGroup = !!groupByOption && groupLabel !== previousGroupLabel;\n\t\t\t\t\t\t\t\tconst isSelected = selectedIdSet.has(variant.id);\n\t\t\t\t\t\t\t\tconst actionContext = {\n\t\t\t\t\t\t\t\t\tindex,\n\t\t\t\t\t\t\t\t\tonSelect: onSelectVariant ? () => onSelectVariant(variant) : undefined,\n\t\t\t\t\t\t\t\t\tonEdit: onEditVariant ? () => onEditVariant(variant) : undefined,\n\t\t\t\t\t\t\t\t\tonDuplicate: onDuplicateVariant ? () => onDuplicateVariant(variant) : undefined,\n\t\t\t\t\t\t\t\t\tonDelete: onDeleteVariant ? () => onDeleteVariant(variant) : undefined,\n\t\t\t\t\t\t\t\t\tisSelected,\n\t\t\t\t\t\t\t\t\tonToggleSelected: isSelectable ? (checked: boolean) => toggleRow(variant, checked) : undefined,\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\tconst summaryOptionGroups = groupByOption\n\t\t\t\t\t\t\t\t\t? optionGroups.filter((option) => option.id !== groupByOption.id)\n\t\t\t\t\t\t\t\t\t: optionGroups;\n\t\t\t\t\t\t\t\tconst optionSummary = getVariantOptionSummary(variant, summaryOptionGroups);\n\t\t\t\t\t\t\t\tconst groupedVariantName = groupByOption\n\t\t\t\t\t\t\t\t\t? getVariantName({ ...variant, name: undefined }, summaryOptionGroups)\n\t\t\t\t\t\t\t\t\t: getVariantName(variant, optionGroups);\n\t\t\t\t\t\t\t\tconst variantName = groupedVariantName === PRODUCT_EMPTY_VALUE && groupByOption\n\t\t\t\t\t\t\t\t\t? getVariantName(variant, optionGroups)\n\t\t\t\t\t\t\t\t\t: groupedVariantName;\n\t\t\t\t\t\t\t\tconst optionLabel = getOptionCombinationLabel(optionSummary);\n\t\t\t\t\t\t\t\tconst optionLabelMatchesVariantName = optionLabel === getPlainText(variantName);\n\t\t\t\t\t\t\t\tconst createCellContext = (\n\t\t\t\t\t\t\t\t\tcolumn: ProductVariantsBulkTableColumn,\n\t\t\t\t\t\t\t\t\tvalue: ReactNode | undefined,\n\t\t\t\t\t\t\t\t\tdisplay: ProductVariantCellDisplay = DEFAULT_CELL_DISPLAY,\n\t\t\t\t\t\t\t\t): ProductVariantCellRenderContext => {\n\t\t\t\t\t\t\t\t\tconst onValueChange = isEditableField(column) && onVariantFieldChange\n\t\t\t\t\t\t\t\t\t\t? (nextValue: string) => onVariantFieldChange(\n\t\t\t\t\t\t\t\t\t\t\tvariant,\n\t\t\t\t\t\t\t\t\t\t\tcolumn,\n\t\t\t\t\t\t\t\t\t\t\tnextValue,\n\t\t\t\t\t\t\t\t\t\t\tgetFieldChangeContext(index, column, value, nextValue),\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t: undefined;\n\t\t\t\t\t\t\t\t\tconst onBlur = isEditableField(column) && onVariantFieldBlur\n\t\t\t\t\t\t\t\t\t\t? (nextValue: string) => onVariantFieldBlur(\n\t\t\t\t\t\t\t\t\t\t\tvariant,\n\t\t\t\t\t\t\t\t\t\t\tcolumn,\n\t\t\t\t\t\t\t\t\t\t\tnextValue,\n\t\t\t\t\t\t\t\t\t\t\tgetFieldChangeContext(index, column, value, nextValue),\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t: undefined;\n\n\t\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\t\tindex,\n\t\t\t\t\t\t\t\t\t\tcolumn,\n\t\t\t\t\t\t\t\t\t\tvalue,\n\t\t\t\t\t\t\t\t\t\tvariantName,\n\t\t\t\t\t\t\t\t\t\toptionValues: optionSummary,\n\t\t\t\t\t\t\t\t\t\toptionLabel,\n\t\t\t\t\t\t\t\t\t\tcellDisplay: display,\n\t\t\t\t\t\t\t\t\t\tonValueChange,\n\t\t\t\t\t\t\t\t\t\tonBlur,\n\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\tconst renderCellContent = (\n\t\t\t\t\t\t\t\t\tcolumn: ProductVariantsBulkTableColumn,\n\t\t\t\t\t\t\t\t\tvalue: ReactNode | undefined,\n\t\t\t\t\t\t\t\t\tdisplay: ProductVariantCellDisplay,\n\t\t\t\t\t\t\t\t\tfallback: (context: ProductVariantCellRenderContext) => ReactNode,\n\t\t\t\t\t\t\t\t) => {\n\t\t\t\t\t\t\t\t\tconst context = createCellContext(column, value, display);\n\t\t\t\t\t\t\t\t\tconst rendered = renderCell?.(variant, context);\n\t\t\t\t\t\t\t\t\treturn rendered !== undefined ? rendered : fallback(context);\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\tconst shouldRenderOptionCombination =\n\t\t\t\t\t\t\t\t\toptionCombinationDisplay !== 'none' &&\n\t\t\t\t\t\t\t\t\toptionSummary.length > 0 &&\n\t\t\t\t\t\t\t\t\t// The combination is supporting detail: shown only when it adds to the\n\t\t\t\t\t\t\t\t\t// variant title, never repeating a title that already lists the values.\n\t\t\t\t\t\t\t\t\t!optionLabelMatchesVariantName;\n\t\t\t\t\t\t\t\tconst renderedOptionCombination = optionCombinationDisplay !== 'none'\n\t\t\t\t\t\t\t\t\t? renderOptionCombination?.(variant, {\n\t\t\t\t\t\t\t\t\t\toptionGroups,\n\t\t\t\t\t\t\t\t\t\toptionValues: optionSummary,\n\t\t\t\t\t\t\t\t\t\toptionLabel,\n\t\t\t\t\t\t\t\t\t\tdisplay: optionCombinationDisplay,\n\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t: null;\n\t\t\t\t\t\t\t\tconst defaultRowActions = [\n\t\t\t\t\t\t\t\t\t...(onSelectVariant ? [{\n\t\t\t\t\t\t\t\t\t\tid: 'view',\n\t\t\t\t\t\t\t\t\t\tlabel: strings.viewLabel,\n\t\t\t\t\t\t\t\t\t\ticon: <Eye className=\"size-icon-md\" />,\n\t\t\t\t\t\t\t\t\t\tonClick: () => onSelectVariant(variant),\n\t\t\t\t\t\t\t\t\t\ttone: 'secondary' as const, buttonStyle: 'ghost' as const,\n\t\t\t\t\t\t\t\t\t}] : []),\n\t\t\t\t\t\t\t\t\t...(onEditVariant ? [{\n\t\t\t\t\t\t\t\t\t\tid: 'edit',\n\t\t\t\t\t\t\t\t\t\tlabel: strings.editLabel,\n\t\t\t\t\t\t\t\t\t\ticon: <Pencil className=\"size-icon-md\" />,\n\t\t\t\t\t\t\t\t\t\tonClick: () => onEditVariant(variant),\n\t\t\t\t\t\t\t\t\t\ttone: 'secondary' as const, buttonStyle: 'ghost' as const,\n\t\t\t\t\t\t\t\t\t}] : []),\n\t\t\t\t\t\t\t\t\t...(onDuplicateVariant ? [{\n\t\t\t\t\t\t\t\t\t\tid: 'duplicate',\n\t\t\t\t\t\t\t\t\t\tlabel: strings.duplicateLabel,\n\t\t\t\t\t\t\t\t\t\ticon: <Copy className=\"size-icon-md\" />,\n\t\t\t\t\t\t\t\t\t\tonClick: () => onDuplicateVariant(variant),\n\t\t\t\t\t\t\t\t\t\ttone: 'secondary' as const, buttonStyle: 'ghost' as const,\n\t\t\t\t\t\t\t\t\t}] : []),\n\t\t\t\t\t\t\t\t\t...(onDeleteVariant ? [{\n\t\t\t\t\t\t\t\t\t\tid: 'delete',\n\t\t\t\t\t\t\t\t\t\tlabel: strings.deleteLabel,\n\t\t\t\t\t\t\t\t\t\ticon: <Trash2 className=\"size-icon-md\" />,\n\t\t\t\t\t\t\t\t\t\tonClick: () => onDeleteVariant(variant),\n\t\t\t\t\t\t\t\t\t\ttone: 'destructive' as const,\n\t\t\t\t\t\t\t\t\t}] : []),\n\t\t\t\t\t\t\t\t];\n\n\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t<Fragment key={variant.id}>\n\t\t\t\t\t\t\t\t\t\t{shouldRenderGroup && (\n\t\t\t\t\t\t\t\t\t\t\t<TableRow className=\"product-variants-bulk-table--group-row border-b border-border/60 bg-muted/30\">\n\t\t\t\t\t\t\t\t\t\t\t\t<TableCell colSpan={tableColumnCount} className=\"px-space-lg py-space-md align-middle\">\n\t\t\t\t\t\t\t\t\t\t\t<Stack direction=\"horizontal\" gap=\"sm\" wrap={false}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Text type=\"inherit\" tag=\"span\" weight=\"semibold\" className=\"min-w-0 whitespace-normal break-words\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{groupLabel}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Text tag=\"span\" size=\"xs\" type=\"secondary\" className=\"whitespace-nowrap\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{strings.groupCountLabel(groupCounts.get(groupLabel ?? '') ?? 0)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t\t\t\t\t\t\t</TableCell>\n\t\t\t\t\t\t\t\t\t\t\t</TableRow>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t<TableRow className=\"h-20 border-b border-border/60 last:border-b-0\">\n\t\t\t\t\t\t\t\t\t\t{isSelectable && (\n\t\t\t\t\t\t\t\t\t\t\t<TableCell className=\"w-14 min-w-14 max-w-14 px-0 py-space-lg text-center align-middle\">\n\t\t\t\t\t\t\t\t\t\t\t\t<Checkbox\n\t\t\t\t\t\t\t\t\t\t\t\t\tchecked={isSelected}\n\t\t\t\t\t\t\t\t\t\t\t\t\tonCheckedChange={(checked) => toggleRow(variant, checked)}\n\t\t\t\t\t\t\t\t\t\t\t\t\taria-label={strings.selectRowLabel(index)}\n\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"mx-auto\"\n\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t</TableCell>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t{visibleColumnSet.has('variant') && (\n\t\t\t\t\t\t\t\t\t\t\t<TableCell className=\"px-space-lg py-space-lg align-middle\">\n\t\t\t\t\t\t\t\t\t\t\t\t{renderCellContent('variant', variantName, DEFAULT_CELL_DISPLAY, () => (\n\t\t\t\t\t\t\t\t\t\t\t\t<Stack gap=\"xs\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Text type=\"inherit\" weight=\"medium\" className=\"min-w-0 whitespace-normal break-words\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{variantName}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{renderedOptionCombination}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{!renderedOptionCombination && shouldRenderOptionCombination && optionCombinationDisplay === 'text' && (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Text size=\"xs\" type=\"secondary\" className=\"min-w-0 whitespace-normal break-words\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{optionSummary.map((value, valueIndex) => (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span key={`${variant.id}-option-text-${valueIndex}`}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{valueIndex > 0 ? ' / ' : null}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{value}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t{!renderedOptionCombination && shouldRenderOptionCombination && optionCombinationDisplay === 'tags' && (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Stack direction=\"horizontal\" gap=\"xs\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{optionSummary.map((value, valueIndex) => (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Badge\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tkey={`${variant.id}-option-${valueIndex}`}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttone=\"secondary\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"max-w-full\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{value}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Badge>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t\t\t\t</TableCell>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t{visibleColumnSet.has('sku') && (\n\t\t\t\t\t\t\t\t\t\t\t<TableCell className=\"px-space-lg py-space-md align-middle\">\n\t\t\t\t\t\t\t\t\t\t\t\t{renderCellContent('sku', variant.sku, resolveCellDisplay(cellDisplay, 'sku'), (context) => renderVariantCellValue(\n\t\t\t\t\t\t\t\t\t\t\t\t\tvariant.sku,\n\t\t\t\t\t\t\t\t\t\t\t\t\t`${strings.headers.sku}: ${getPlainText(variantName)}`,\n\t\t\t\t\t\t\t\t\t\t\t\t\tcontext.cellDisplay,\n\t\t\t\t\t\t\t\t\t\t\t\t\tcontext.onValueChange,\n\t\t\t\t\t\t\t\t\t\t\t\t\tcontext.onBlur,\n\t\t\t\t\t\t\t\t\t\t\t\t\t'whitespace-nowrap',\n\t\t\t\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t\t\t\t</TableCell>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t{visibleColumnSet.has('price') && (\n\t\t\t\t\t\t\t\t\t\t\t<TableCell className=\"px-space-lg py-space-md align-middle\">\n\t\t\t\t\t\t\t\t\t\t\t\t{renderCellContent('price', variant.price, resolveCellDisplay(cellDisplay, 'price'), (context) => renderVariantCellValue(\n\t\t\t\t\t\t\t\t\t\t\t\t\tvariant.price,\n\t\t\t\t\t\t\t\t\t\t\t\t\t`${strings.headers.price}: ${getPlainText(variantName)}`,\n\t\t\t\t\t\t\t\t\t\t\t\t\tcontext.cellDisplay,\n\t\t\t\t\t\t\t\t\t\t\t\t\tcontext.onValueChange,\n\t\t\t\t\t\t\t\t\t\t\t\t\tcontext.onBlur,\n\t\t\t\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t\t\t\t</TableCell>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t{visibleColumnSet.has('inventory') && (\n\t\t\t\t\t\t\t\t\t\t\t<TableCell className=\"px-space-lg py-space-md align-middle\">\n\t\t\t\t\t\t\t\t\t\t\t\t{renderCellContent('inventory', variant.inventory, resolveCellDisplay(cellDisplay, 'inventory'), (context) => renderVariantCellValue(\n\t\t\t\t\t\t\t\t\t\t\t\t\tvariant.inventory,\n\t\t\t\t\t\t\t\t\t\t\t\t\t`${strings.headers.inventory}: ${getPlainText(variantName)}`,\n\t\t\t\t\t\t\t\t\t\t\t\t\tcontext.cellDisplay,\n\t\t\t\t\t\t\t\t\t\t\t\t\tcontext.onValueChange,\n\t\t\t\t\t\t\t\t\t\t\t\t\tcontext.onBlur,\n\t\t\t\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t\t\t\t</TableCell>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t{visibleColumnSet.has('status') && (\n\t\t\t\t\t\t\t\t\t\t\t<TableCell className=\"px-space-lg py-space-lg align-middle\">\n\t\t\t\t\t\t\t\t\t\t\t\t{renderCellContent('status', variant.status, DEFAULT_CELL_DISPLAY, () => (\n\t\t\t\t\t\t\t\t\t\t\t\t\tvariant.status ? (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Badge tone={variant.statusTone ?? 'secondary'}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{variant.status}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Badge>\n\t\t\t\t\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Text type=\"secondary\">{PRODUCT_EMPTY_VALUE}</Text>\n\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t\t\t\t</TableCell>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t{visibleColumnSet.has('updated') && (\n\t\t\t\t\t\t\t\t\t\t\t<TableCell className=\"px-space-lg py-space-lg align-middle\">\n\t\t\t\t\t\t\t\t\t\t\t\t{/* A date keeps the size and figures of its sibling value cells. */}\n\t\t\t\t\t\t\t\t\t\t\t\t{renderCellContent('updated', variant.updatedAt, DEFAULT_CELL_DISPLAY, () => renderVariantCellValue(\n\t\t\t\t\t\t\t\t\t\t\t\t\tvariant.updatedAt,\n\t\t\t\t\t\t\t\t\t\t\t\t\t`${strings.headers.updated}: ${getPlainText(variantName)}`,\n\t\t\t\t\t\t\t\t\t\t\t\t\t'text',\n\t\t\t\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t\t\t\t</TableCell>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t{hasRowActions && (\n\t\t\t\t\t\t\t\t\t\t\t<TableCell className=\"px-space-lg py-space-lg text-right align-middle\">\n\t\t\t\t\t\t\t\t\t\t\t\t{renderVariantActions ? (\n\t\t\t\t\t\t\t\t\t\t\t\t\trenderVariantActions(variant, actionContext)\n\t\t\t\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t\t\t\t<ProductRowActions\n\t\t\t\t\t\t\t\t\t\t\t\t\t\titem={variant}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tactions={defaultRowActions}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tmenuLabel={strings.headers.actions}\n\t\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t</TableCell>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t</TableRow>\n\t\t\t\t\t\t\t\t\t</Fragment>\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t</TableBody>\n\t\t\t\t</Table>\n\t\t\t</div>\n\t\t</Stack>\n\t);\n\n\tif (surface === 'embedded') {\n\t\treturn (\n\t\t\t<section\n\t\t\t\taria-label={strings.title}\n\t\t\t\tclassName={cn('product-variants-bulk-table--component min-w-0', className)}\n\t\t\t>\n\t\t\t\t{content}\n\t\t\t</section>\n\t\t);\n\t}\n\n\treturn (\n\t\t<ContentBlock\n\t\t\ttitle={strings.title}\n\t\t\tdescription={strings.description}\n\t\t\tactions={actions}\n\t\t\theaderAction={headerAction}\n\t\t\theaderEnd={headerEnd}\n\t\t\tfooterSlot={footerSlot}\n\t\t\tclassName={cn('product-variants-bulk-table--component w-full', className)}\n\t\t>\n\t\t\t{content}\n\t\t</ContentBlock>\n\t);\n}\n\nProductVariantsBulkTable.displayName = 'ProductVariantsBulkTable';\n","import {compositionRhythm} from '../../../base/structure/composition.recipes';\nimport { ListFilter, Plus, Search } from 'lucide-react';\nimport { useCallback, useMemo, useState } from 'react';\n\nimport { Button } from '../../../base/buttons';\nimport { Card } from '../../../base/cards';\nimport { Stack } from '../../../base/structure';\nimport { Select } from '../../../base/choice-inputs';\nimport { Text } from '../../../typography';\nimport { useStrings } from '../../../../lib/strings';\nimport { cn } from '../../../../lib/utils';\nimport { controlGroupHeightClasses, segmentedControlRecipes } from '../../../../lib/control-group-recipes';\nimport { useDensityConfig } from '../../../../lib/ui-provider';\nimport { resolveComponentScale } from '../../../../lib/ui-provider/scale';\n\nimport { defaultProductVariantsManagerStrings } from '../products.strings';\nimport type { ProductVariantsManagerProps } from '../products.types';\nimport { ProductOptionsMatrix } from './product-options-matrix';\nimport { ProductVariantsBulkTable } from './product-variants-bulk-table';\n\nexport function ProductVariantsManager({\n\toptionGroups = [],\n\tvariants = [],\n\tvisibleColumns,\n\toptionCombinationDisplay,\n\tcellDisplay,\n\tselectionMode,\n\trenderOptionCombination,\n\trenderCell,\n\tselectedVariantIds,\n\tdefaultSelectedVariantIds,\n\tonSelectedVariantIdsChange,\n\tonVariantFieldChange,\n\tonVariantFieldBlur,\n\tcollapsedOptionIds,\n\tdefaultCollapsedOptionIds,\n\tonCollapsedOptionIdsChange,\n\teditingOptionId,\n\tdefaultEditingOptionId,\n\tonEditingOptionIdChange,\n\tonCreateOption,\n\tonEditOption,\n\tonDeleteOption,\n\tonAddValue,\n\tonDeleteValue,\n\tonOptionNameChange,\n\tonValueLabelChange,\n\tonDoneEditingOption,\n\tonSaveEditingOption,\n\tonError,\n\tonCancelEditingOption,\n\tonToggleUsedForVariants,\n\trenderOptionActions,\n\trenderValue,\n\tonCreateVariant,\n\tonGenerateVariants,\n\tonSelectVariant,\n\tonEditVariant,\n\tonDuplicateVariant,\n\tonDeleteVariant,\n\tonBulkEdit,\n\tonBulkApply,\n\tonBulkDelete,\n\trenderVariantActions,\n\trenderBulkActions,\n\tgroupByOptionId,\n\tdefaultGroupByOptionId,\n\tonGroupByOptionIdChange,\n\tshowGroupBy = true,\n\tonSearchVariants,\n\tonFilterVariants,\n\tcontrolsEnd,\n\tactions,\n\theaderEnd,\n\tfooterSlot,\n\tsurface = 'flat',\n\tpadding = surface === 'flat' ? 'none' : 'md',\n\theaderDivider,\n\tfooterDivider,\n\tclassName,\n\tstrings: stringsProp,\n\toptionsStrings,\n\tvariantsStrings,\n}: ProductVariantsManagerProps) {\n\tconst { defaultScale } = useDensityConfig();\n\tconst size = resolveComponentScale(undefined, defaultScale);\n\tconst strings = useStrings(defaultProductVariantsManagerStrings, stringsProp);\n\tconst groupableOptions = useMemo(\n\t\t() => optionGroups.filter((option) => option.usedForVariants !== false),\n\t\t[optionGroups],\n\t);\n\tconst fallbackGroupByOptionId = groupableOptions[0]?.id ?? null;\n\tconst isGroupByControlled = groupByOptionId !== undefined;\n\tconst [internalGroupByOptionId, setInternalGroupByOptionId] = useState<string | null | undefined>(defaultGroupByOptionId);\n\t// Without the control nobody could undo an implicit or earlier choice, so a\n\t// hidden control keeps the list flat unless the app names an option.\n\tconst resolvedGroupByOptionId = isGroupByControlled\n\t\t? groupByOptionId\n\t\t: !showGroupBy ? defaultGroupByOptionId ?? null\n\t\t: internalGroupByOptionId === undefined ? fallbackGroupByOptionId : internalGroupByOptionId;\n\tconst hasJoinedTools = !!onSearchVariants && !!onFilterVariants;\n\tconst hasTools = !!onSearchVariants || !!onFilterVariants;\n\tconst groupByOptions = useMemo(\n\t\t() =>\n\t\t\t!showGroupBy ? [] : groupableOptions.map((option) => ({\n\t\t\t\tvalue: option.id,\n\t\t\t\tlabel: String(typeof option.name === 'string' || typeof option.name === 'number' ? option.name : option.id),\n\t\t\t})),\n\t\t[groupableOptions, showGroupBy],\n\t);\n\tconst updateGroupByOptionId = useCallback(\n\t\t(nextId: string | undefined) => {\n\t\t\tconst matchedOption = optionGroups.find((option) => option.id === nextId);\n\t\t\tif (!isGroupByControlled) {\n\t\t\t\tsetInternalGroupByOptionId(nextId ?? null);\n\t\t\t}\n\t\t\tonGroupByOptionIdChange?.(nextId, matchedOption);\n\t\t},\n\t\t[isGroupByControlled, onGroupByOptionIdChange, optionGroups],\n\t);\n\tconst headerAction =\n\t\tonGenerateVariants || onCreateVariant ? (\n\t\t\t<Stack direction=\"horizontal\" gap={compositionRhythm.commands} justify=\"end\" className=\"product-variants-manager--header-actions\">\n\t\t\t\t{!!onGenerateVariants && (\n\t\t\t\t\t<Button type=\"button\" tone=\"secondary\" buttonStyle=\"outline\" onClick={onGenerateVariants}>\n\t\t\t\t\t\t{strings.generateLabel}\n\t\t\t\t\t</Button>\n\t\t\t\t)}\n\t\t\t\t{!!onCreateVariant && (\n\t\t\t\t\t<Button type=\"button\" tone=\"secondary\" buttonStyle=\"outline\" onClick={onCreateVariant} icon={Plus}>\n\t\t\t\t\t\t{strings.createVariantLabel}\n\t\t\t\t\t</Button>\n\t\t\t\t)}\n\t\t\t</Stack>\n\t\t) : undefined;\n\n\treturn (\n\t\t<Card\n\t\t\tsurface={surface}\n\t\t\tpadding={padding}\n\t\t\theaderDivider={headerDivider}\n\t\t\tfooterDivider={footerDivider}\n\t\t\ttitle={strings.title}\n\t\t\tdescription={strings.description}\n\t\t\tactions={actions}\n\t\t\tactionsLabel={strings.actionsLabel}\n\t\t\theaderAction={headerAction}\n\t\t\theaderEnd={headerEnd}\n\t\t\tfooterSlot={footerSlot}\n\t\t\tclassName={cn('product-variants-manager--component w-full', className)}\n\t\t>\n\t\t\t<Stack gap=\"2xl\" className=\"product-variants-manager--body\">\n\t\t\t\t<section className=\"product-variants-manager--options min-w-0\">\n\t\t\t\t\t<ProductOptionsMatrix\n\t\t\t\t\t\toptionGroups={optionGroups}\n\t\t\t\t\t\tcollapsedOptionIds={collapsedOptionIds}\n\t\t\t\t\t\tdefaultCollapsedOptionIds={defaultCollapsedOptionIds}\n\t\t\t\t\t\tonCollapsedOptionIdsChange={onCollapsedOptionIdsChange}\n\t\t\t\t\t\teditingOptionId={editingOptionId}\n\t\t\t\t\t\tdefaultEditingOptionId={defaultEditingOptionId}\n\t\t\t\t\t\tonEditingOptionIdChange={onEditingOptionIdChange}\n\t\t\t\t\t\tsurface=\"embedded\"\n\t\t\t\t\t\tonCreateOption={onCreateOption}\n\t\t\t\t\t\tonEditOption={onEditOption}\n\t\t\t\t\t\tonDeleteOption={onDeleteOption}\n\t\t\t\t\t\tonAddValue={onAddValue}\n\t\t\t\t\t\tonDeleteValue={onDeleteValue}\n\t\t\t\t\t\tonOptionNameChange={onOptionNameChange}\n\t\t\t\t\t\tonValueLabelChange={onValueLabelChange}\n\t\t\t\t\t\tonDoneEditingOption={onDoneEditingOption}\n\t\t\t\t\t\tonSaveEditingOption={onSaveEditingOption}\n\t\t\t\t\t\tonError={onError}\n\t\t\t\t\t\tonCancelEditingOption={onCancelEditingOption}\n\t\t\t\t\t\tonToggleUsedForVariants={onToggleUsedForVariants}\n\t\t\t\t\t\trenderOptionActions={renderOptionActions}\n\t\t\t\t\t\trenderValue={renderValue}\n\t\t\t\t\t\tshowHeader={false}\n\t\t\t\t\t\tshowCollapseControls={false}\n\t\t\t\t\t\tshowInlineActions={false}\n\t\t\t\t\t\tshowVariantToggle={false}\n\t\t\t\t\t\tstrings={{\n\t\t\t\t\t\t\ttitle: strings.optionsTitle,\n\t\t\t\t\t\t\t...optionsStrings,\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t</section>\n\n\t\t\t\t<Stack gap=\"md\" className=\"product-variants-manager--variants-region\">\n\t\t\t\t\t{(groupByOptions.length > 0 || hasTools || controlsEnd) && <div className=\"product-variants-manager--controls\">\n\t\t\t\t\t\t<Stack direction=\"horizontal\" gap=\"md\" justify=\"between\">\n\t\t\t\t\t\t\t{groupByOptions.length > 0 && <Stack direction=\"horizontal\" gap=\"sm\" wrap={false} className=\"product-variants-manager--group-by\">\n\t\t\t\t\t\t\t\t<Text type=\"secondary\" className=\"whitespace-nowrap\">\n\t\t\t\t\t\t\t\t\t{strings.groupByLabel}\n\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t{groupByOptions.length > 0 && (\n\t\t\t\t\t\t\t\t\t<Select\n\t\t\t\t\t\t\t\t\t\toptions={groupByOptions}\n\t\t\t\t\t\t\t\t\t\tvalue={resolvedGroupByOptionId ?? undefined}\n\t\t\t\t\t\t\t\t\t\tonValueChange={updateGroupByOptionId}\n\t\t\t\t\t\t\t\t\t\taria-label={strings.groupByLabel}\n\t\t\t\t\t\t\t\t\t\tclassName=\"min-w-32 bg-background\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</Stack>}\n\t\t\t\t\t\t\t{(hasTools || controlsEnd) && <Stack\n\t\t\t\t\t\t\t\tdirection=\"horizontal\"\n\t\t\t\t\t\t\t\tgap=\"sm\"\n\t\t\t\t\t\t\t\tjustify=\"end\"\n\t\t\t\t\t\t\t\twrap={false}\n\t\t\t\t\t\t\t\tclassName=\"product-variants-manager--controls-end ms-auto\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{hasTools && <div className={cn('flex', hasJoinedTools && ['product-variants-manager--tool-buttons bg-background shadow-xs', segmentedControlRecipes.joinedFrame, controlGroupHeightClasses[size]])}>\n\t\t\t\t\t\t\t\t\t{onSearchVariants && <Button\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\tsize={size}\n\t\t\t\t\t\t\t\t\t\ticonOnly\n\t\t\t\t\t\t\t\t\t\ttone=\"secondary\"\n\t\t\t\t\t\t\t\t\t\tbuttonStyle={hasJoinedTools ? 'ghost' : 'outline'}\n\t\t\t\t\t\t\t\t\t\tonClick={onSearchVariants}\n\t\t\t\t\t\t\t\t\t\taria-label={strings.searchLabel}\n\t\t\t\t\t\t\t\t\t\tclassName={cn(hasJoinedTools && [segmentedControlRecipes.joinedItem, segmentedControlRecipes.firstItem, 'border-r border-border'], 'text-muted-foreground hover:text-foreground')}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<Search className=\"size-icon-sm\" aria-hidden=\"true\" />\n\t\t\t\t\t\t\t\t\t\t<Text tag=\"span\" size=\"pxs\" className=\"sr-only\">\n\t\t\t\t\t\t\t\t\t\t\t{strings.searchLabel}\n\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t</Button>}\n\t\t\t\t\t\t\t\t\t{onFilterVariants && <Button\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\tsize={size}\n\t\t\t\t\t\t\t\t\t\ticonOnly\n\t\t\t\t\t\t\t\t\t\ttone=\"secondary\"\n\t\t\t\t\t\t\t\t\t\tbuttonStyle={hasJoinedTools ? 'ghost' : 'outline'}\n\t\t\t\t\t\t\t\t\t\tonClick={onFilterVariants}\n\t\t\t\t\t\t\t\t\t\taria-label={strings.filterLabel}\n\t\t\t\t\t\t\t\t\t\tclassName={cn(hasJoinedTools && [segmentedControlRecipes.joinedItem, segmentedControlRecipes.lastItem], 'text-muted-foreground hover:text-foreground')}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<ListFilter className=\"size-icon-sm\" aria-hidden=\"true\" />\n\t\t\t\t\t\t\t\t\t\t<Text tag=\"span\" size=\"pxs\" className=\"sr-only\">\n\t\t\t\t\t\t\t\t\t\t\t{strings.filterLabel}\n\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t</Button>}\n\t\t\t\t\t\t\t\t</div>}\n\t\t\t\t\t\t\t\t{controlsEnd}\n\t\t\t\t\t\t\t</Stack>}\n\t\t\t\t\t\t</Stack>\n\t\t\t\t\t</div>}\n\n\t\t\t\t\t<section className=\"product-variants-manager--variants min-w-0\">\n\t\t\t\t\t\t<ProductVariantsBulkTable\n\t\t\t\t\t\t\tvariants={variants}\n\t\t\t\t\t\t\toptionGroups={optionGroups}\n\t\t\t\t\t\t\tgroupByOptionId={resolvedGroupByOptionId}\n\t\t\t\t\t\t\tvisibleColumns={visibleColumns}\n\t\t\t\t\t\t\toptionCombinationDisplay={optionCombinationDisplay}\n\t\t\t\t\t\t\tcellDisplay={cellDisplay}\n\t\t\t\t\t\t\tselectionMode={selectionMode}\n\t\t\t\t\t\t\trenderOptionCombination={renderOptionCombination}\n\t\t\t\t\t\t\trenderCell={renderCell}\n\t\t\t\t\t\t\tsurface=\"embedded\"\n\t\t\t\t\t\t\tselectedVariantIds={selectedVariantIds}\n\t\t\t\t\t\t\tdefaultSelectedVariantIds={defaultSelectedVariantIds}\n\t\t\t\t\t\t\tonSelectedVariantIdsChange={onSelectedVariantIdsChange}\n\t\t\t\t\t\t\tonVariantFieldChange={onVariantFieldChange}\n\t\t\t\t\t\t\tonVariantFieldBlur={onVariantFieldBlur}\n\t\t\t\t\t\t\tonCreateVariant={onCreateVariant}\n\t\t\t\t\t\t\tonGenerateVariants={onGenerateVariants}\n\t\t\t\t\t\t\tonSelectVariant={onSelectVariant}\n\t\t\t\t\t\t\tonEditVariant={onEditVariant}\n\t\t\t\t\t\t\tonDuplicateVariant={onDuplicateVariant}\n\t\t\t\t\t\t\tonDeleteVariant={onDeleteVariant}\n\t\t\t\t\t\t\tonBulkEdit={onBulkEdit}\n\t\t\t\t\t\t\tonBulkApply={onBulkApply}\n\t\t\t\t\t\t\tonBulkDelete={onBulkDelete}\n\t\t\t\t\t\t\trenderVariantActions={renderVariantActions}\n\t\t\t\t\t\t\trenderBulkActions={renderBulkActions}\n\t\t\t\t\t\t\tstrings={{\n\t\t\t\t\t\t\t\ttitle: strings.variantsTitle,\n\t\t\t\t\t\t\t\tgenerateLabel: strings.generateLabel,\n\t\t\t\t\t\t\t\t...variantsStrings,\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</section>\n\t\t\t\t</Stack>\n\t\t\t</Stack>\n\t\t</Card>\n\t);\n}\n\nProductVariantsManager.displayName = 'ProductVariantsManager';\n"],"mappings":"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"}
|