themelia-react-ui 1.0.2 → 2.0.1
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 +632 -1
- package/README.md +31 -13
- package/dist/accordion-B6a3vVgA.js +207 -0
- package/dist/accordion-B6a3vVgA.js.map +1 -0
- package/dist/action-menu-TzCoSlwL.js +280 -0
- package/dist/action-menu-TzCoSlwL.js.map +1 -0
- package/dist/{affordance-geometry.generated-CL84ZN9A.js → affordance-geometry.generated-B5iu-Mkr.js} +9 -3
- package/dist/affordance-geometry.generated-B5iu-Mkr.js.map +1 -0
- package/dist/{ai-artifact-DLVdK0Py.js → ai-artifact-BMJdv-6q.js} +389 -391
- package/dist/ai-artifact-BMJdv-6q.js.map +1 -0
- package/dist/{app-shell-C_fKpljx.js → app-shell-ZK5RWdo6.js} +4 -4
- package/dist/{app-shell-C_fKpljx.js.map → app-shell-ZK5RWdo6.js.map} +1 -1
- package/dist/attachment-BtfhGm8i.js +245 -0
- package/dist/attachment-BtfhGm8i.js.map +1 -0
- package/dist/{auth-CAQcasMV.js → auth-CYxKfo69.js} +239 -237
- package/dist/auth-CYxKfo69.js.map +1 -0
- package/dist/{avatar-Bu2HhitA.js → avatar-BBnEJIx8.js} +71 -68
- package/dist/avatar-BBnEJIx8.js.map +1 -0
- package/dist/badge-MrKVNzW9.js +93 -0
- package/dist/badge-MrKVNzW9.js.map +1 -0
- 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 +3 -0
- package/dist/base/buttons.js +2 -3
- package/dist/base/cards.js +2 -2
- package/dist/base/carousel.js +19 -19
- package/dist/base/carousel.js.map +1 -1
- package/dist/base/cascader.js +234 -224
- package/dist/base/cascader.js.map +1 -1
- package/dist/base/chart.js +1 -1
- package/dist/base/choice-inputs.js +3 -3
- package/dist/base/code-block.js +1 -1
- package/dist/base/combobox.js +1 -1
- package/dist/base/command.js +1 -1
- package/dist/base/copyable.js +1 -1
- package/dist/base/date-pickers.js +2 -2
- package/dist/base/display.js +7 -7
- package/dist/base/feedback.js +3 -3
- package/dist/base/forms-numeric.js +1 -1
- package/dist/base/forms.js +2 -2
- package/dist/base/inline-edit.js +81 -76
- package/dist/base/inline-edit.js.map +1 -1
- package/dist/base/item.js +1 -1
- package/dist/base/media-gallery.js +1 -1
- package/dist/base/metadata-list.js +3 -0
- 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 +7 -4
- package/dist/base/qr-code.js.map +1 -1
- package/dist/base/repeaters.js +175 -174
- package/dist/base/repeaters.js.map +1 -1
- package/dist/base/sheet.js +1 -1
- package/dist/base/sidebar.js +1 -1
- package/dist/base/signature-pad.js +148 -138
- package/dist/base/signature-pad.js.map +1 -1
- package/dist/base/skeleton.js +1 -1
- package/dist/base/spinner.js +1 -1
- package/dist/base/structure.js +1 -1
- package/dist/base/table.js +1 -1
- package/dist/base/text-inputs.js +2 -2
- package/dist/base/toaster.js +4 -4
- 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 +2 -2
- package/dist/batch-action-bar-BZGDG-Si.js +104 -0
- package/dist/batch-action-bar-BZGDG-Si.js.map +1 -0
- package/dist/blocks/admin.js +264 -253
- package/dist/blocks/admin.js.map +1 -1
- package/dist/blocks/ai.js +293 -323
- package/dist/blocks/ai.js.map +1 -1
- package/dist/blocks/analytics/usage-card.js +1 -1
- package/dist/blocks/analytics.js +596 -587
- 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 +2246 -1693
- package/dist/blocks/commerce.js.map +1 -1
- package/dist/blocks/data-display.js +3 -2
- package/dist/blocks/onboarding.js +50 -49
- package/dist/blocks/onboarding.js.map +1 -1
- package/dist/blocks/planning.js +82 -91
- package/dist/blocks/planning.js.map +1 -1
- package/dist/blocks/timelines.js +1 -1
- package/dist/breadcrumbs-D5t7I023.js +129 -0
- package/dist/breadcrumbs-D5t7I023.js.map +1 -0
- package/dist/{button-BZyfTvwm.js → button-QYwiyhD2.js} +15 -14
- package/dist/button-QYwiyhD2.js.map +1 -0
- package/dist/buttons-SbIcm1HJ.js +661 -0
- package/dist/buttons-SbIcm1HJ.js.map +1 -0
- package/dist/{cards-qGSErLw_.js → cards-CiiHpKYd.js} +8 -8
- package/dist/cards-CiiHpKYd.js.map +1 -0
- package/dist/{chart-Bsc5BICK.js → chart-QfrARkXl.js} +17 -15
- package/dist/chart-QfrARkXl.js.map +1 -0
- package/dist/checkbox-DhB6K0bK.js +36 -0
- package/dist/checkbox-DhB6K0bK.js.map +1 -0
- package/dist/choice-inputs-t6w3ATNz.js +766 -0
- package/dist/choice-inputs-t6w3ATNz.js.map +1 -0
- package/dist/code-block-Dgbu-CU3.js +185 -0
- package/dist/code-block-Dgbu-CU3.js.map +1 -0
- package/dist/{collapsible-ClvC7Bj3.js → collapsible-D8AEGU1-.js} +4 -4
- package/dist/{collapsible-ClvC7Bj3.js.map → collapsible-D8AEGU1-.js.map} +1 -1
- package/dist/{collection-content-D6S8cv_n.js → collection-content-uK16Grv0.js} +3 -3
- package/dist/{collection-content-D6S8cv_n.js.map → collection-content-uK16Grv0.js.map} +1 -1
- package/dist/{combobox-BFnbJJp3.js → combobox-2Ic8N9bL.js} +103 -98
- package/dist/combobox-2Ic8N9bL.js.map +1 -0
- package/dist/combobox-DLl0bfiq.js +867 -0
- package/dist/combobox-DLl0bfiq.js.map +1 -0
- package/dist/{command-BnmSchli.js → command-kNR20o7x.js} +34 -30
- package/dist/command-kNR20o7x.js.map +1 -0
- package/dist/{comments-u5L0OGip.js → comments-BpDuCUUu.js} +304 -301
- package/dist/comments-BpDuCUUu.js.map +1 -0
- package/dist/components/base/accordion/accordion-variants.d.ts +3 -3
- package/dist/components/base/action-menu/action-menu.d.ts +27 -5
- package/dist/components/base/action-menu/action-menu.recipes.d.ts +21 -0
- package/dist/components/base/action-menu/index.d.ts +1 -0
- package/dist/components/base/avatar/stacked-avatars.d.ts +5 -4
- package/dist/components/base/badge/badge.d.ts +1 -1
- package/dist/components/base/badge/badge.recipes.d.ts +6 -6
- package/dist/components/base/batch-action-bar/batch-action-bar.d.ts +50 -0
- package/dist/components/base/batch-action-bar/batch-action-bar.strings.d.ts +20 -0
- package/dist/components/base/batch-action-bar/index.d.ts +8 -0
- package/dist/components/base/buttons/base-button.d.ts +7 -0
- package/dist/components/base/buttons/button-group.recipes.d.ts +2 -2
- package/dist/components/base/buttons/button.recipes.d.ts +2 -2
- package/dist/components/base/buttons/button.variants.d.ts +1 -0
- package/dist/components/base/buttons/loader-button.d.ts +3 -1
- package/dist/components/base/buttons/text-button.d.ts +2 -2
- package/dist/components/base/carousel/carousel.d.ts +3 -1
- package/dist/components/base/chart/chart.d.ts +7 -7
- package/dist/components/base/choice-inputs/checkbox.d.ts +6 -7
- package/dist/components/base/choice-inputs/choice-types.d.ts +24 -3
- package/dist/components/base/choice-inputs/pill-radio-group.d.ts +9 -0
- package/dist/components/base/choice-inputs/select-popup.d.ts +9 -1
- package/dist/components/base/choice-inputs/switch-card.d.ts +1 -1
- package/dist/components/base/date-pickers/date-picker-field.d.ts +23 -0
- package/dist/components/base/date-pickers/datepicker.types.d.ts +13 -3
- package/dist/components/base/display/alert-dialog.d.ts +10 -3
- package/dist/components/base/display/content-block.d.ts +4 -2
- package/dist/components/base/display/date-block.d.ts +1 -1
- package/dist/components/base/display/dialog.d.ts +8 -5
- package/dist/components/base/display/icon-badge/icon-badge.d.ts +1 -1
- package/dist/components/base/display/surface-title.d.ts +6 -1
- package/dist/components/base/feedback/alert.d.ts +1 -1
- package/dist/components/base/feedback/state-display.d.ts +5 -4
- package/dist/components/base/forms/form-sizing.d.ts +43 -8
- package/dist/components/base/forms/workflow.d.ts +2 -0
- package/dist/components/base/forms-numeric/coordinates-input.d.ts +3 -0
- package/dist/components/base/forms-numeric/rounding-mode-select.d.ts +4 -1
- package/dist/components/base/metadata-list/index.d.ts +12 -0
- package/dist/components/{blocks/data-display/metadata → base/metadata-list}/metadata-list.d.ts +28 -25
- package/dist/components/{blocks/data-display/metadata → base/metadata-list}/metadata-value.d.ts +2 -2
- package/dist/components/base/navigation/dropdown-menu.d.ts +2 -2
- package/dist/components/base/navigation/index.d.ts +1 -1
- package/dist/components/base/navigation/language-switcher.d.ts +4 -1
- package/dist/components/base/navigation/overflow-tab-bar.d.ts +7 -0
- package/dist/components/base/navigation/page-header/index.d.ts +1 -0
- package/dist/components/base/navigation/page-header/page-header-commands.d.ts +73 -0
- package/dist/components/base/navigation/page-header/page-header.d.ts +30 -4
- package/dist/components/base/qr-code/qr-code.d.ts +2 -0
- package/dist/components/base/sheet/index.d.ts +29 -1
- package/dist/components/base/sheet/sheet.d.ts +10 -5
- package/dist/components/base/signature-pad/signature-pad.types.d.ts +5 -1
- package/dist/components/base/signature-pad/signature-pad.utils.d.ts +11 -3
- package/dist/components/base/spinner/spinner.d.ts +3 -2
- package/dist/components/base/structure/structure.types.d.ts +1 -1
- package/dist/components/base/text-inputs/field-clear-button.d.ts +6 -0
- package/dist/components/base/text-inputs/input-group.d.ts +2 -2
- package/dist/components/base/upload/upload.recipes.d.ts +33 -0
- package/dist/components/base/value-inputs/date-time-input.d.ts +4 -2
- package/dist/components/base/value-inputs/index.d.ts +5 -5
- package/dist/components/base/value-inputs/tags-input.d.ts +38 -12
- package/dist/components/blocks/admin/api-key-list/api-key-list.types.d.ts +1 -1
- package/dist/components/blocks/analytics/format-metric-value.d.ts +11 -1
- package/dist/components/blocks/analytics/index.d.ts +1 -1
- package/dist/components/blocks/analytics/use-metric-format-options.d.ts +3 -0
- package/dist/components/blocks/commerce/address-card/address-card.d.ts +1 -1
- package/dist/components/blocks/commerce/address-card/types.d.ts +4 -1
- package/dist/components/blocks/commerce/booking-calendar-event-card/booking-calendar-event-card.d.ts +4 -0
- package/dist/components/blocks/commerce/booking-calendar-event-card/booking-calendar-event-card.types.d.ts +2 -2
- package/dist/components/blocks/commerce/cart-summary/cart-summary.d.ts +3 -1
- package/dist/components/blocks/commerce/cart-summary/index.d.ts +2 -2
- package/dist/components/blocks/commerce/cart-summary/types.d.ts +6 -1
- package/dist/components/blocks/commerce/discount-stack/discount-stack.d.ts +3 -1
- package/dist/components/blocks/commerce/discount-stack/index.d.ts +2 -2
- package/dist/components/blocks/commerce/discount-stack/types.d.ts +16 -4
- package/dist/components/blocks/commerce/fulfillment-group/fulfillment-group.d.ts +5 -0
- package/dist/components/blocks/commerce/fulfillment-group/index.d.ts +2 -0
- package/dist/components/blocks/commerce/fulfillment-group/types.d.ts +43 -0
- package/dist/components/blocks/commerce/index.d.ts +13 -5
- package/dist/components/blocks/commerce/inventory-section/types.d.ts +4 -1
- package/dist/components/blocks/commerce/invoice-header/invoice-header.d.ts +1 -1
- package/dist/components/blocks/commerce/invoice-header/types.d.ts +4 -2
- package/dist/components/blocks/commerce/invoice-mini/invoice-mini.d.ts +1 -1
- package/dist/components/blocks/commerce/invoice-mini/types.d.ts +2 -1
- package/dist/components/blocks/commerce/loyalty-points/types.d.ts +1 -1
- package/dist/components/blocks/commerce/order-customer/index.d.ts +2 -0
- package/dist/components/blocks/commerce/order-customer/order-customer.d.ts +5 -0
- package/dist/components/blocks/commerce/order-customer/types.d.ts +48 -0
- package/dist/components/blocks/commerce/order-header/index.d.ts +2 -0
- package/dist/components/blocks/commerce/order-header/order-header.d.ts +5 -0
- package/dist/components/blocks/commerce/order-header/types.d.ts +37 -0
- package/dist/components/blocks/commerce/order-line-item/index.d.ts +2 -0
- package/dist/components/blocks/commerce/order-line-item/order-line-item.d.ts +5 -0
- package/dist/components/blocks/commerce/order-line-item/types.d.ts +46 -0
- package/dist/components/blocks/commerce/order-status/types.d.ts +4 -0
- package/dist/components/blocks/commerce/order-summary/index.d.ts +2 -0
- package/dist/components/blocks/commerce/order-summary/order-summary.d.ts +5 -0
- package/dist/components/blocks/commerce/order-summary/types.d.ts +42 -0
- package/dist/components/blocks/commerce/order-transactions/index.d.ts +2 -0
- package/dist/components/blocks/commerce/order-transactions/order-transactions.d.ts +5 -0
- package/dist/components/blocks/commerce/order-transactions/types.d.ts +46 -0
- package/dist/components/blocks/commerce/payment-method/index.d.ts +2 -2
- package/dist/components/blocks/commerce/payment-method/payment-method.d.ts +9 -1
- package/dist/components/blocks/commerce/payment-method/types.d.ts +14 -1
- package/dist/components/blocks/commerce/refund-status/index.d.ts +2 -2
- package/dist/components/blocks/commerce/refund-status/refund-status.d.ts +3 -1
- package/dist/components/blocks/commerce/refund-status/types.d.ts +6 -3
- package/dist/components/blocks/commerce/seo-listing/seo-listing-card.d.ts +1 -1
- package/dist/components/blocks/commerce/seo-listing/types.d.ts +3 -1
- package/dist/components/blocks/commerce/shared/address-lines.d.ts +21 -0
- package/dist/components/blocks/commerce/shared/line-thumbnail.d.ts +9 -0
- package/dist/components/blocks/commerce/shared/order-status.d.ts +51 -0
- package/dist/components/blocks/commerce/shipment-tracking/shipment-tracking.d.ts +1 -1
- package/dist/components/blocks/commerce/shipment-tracking/types.d.ts +27 -6
- package/dist/components/blocks/commerce/summary-panel/amount-row.d.ts +2 -0
- package/dist/components/blocks/commerce/summary-panel/index.d.ts +3 -0
- package/dist/components/blocks/commerce/summary-panel/summary-panel.d.ts +2 -0
- package/dist/components/blocks/commerce/summary-panel/types.d.ts +26 -0
- package/dist/components/blocks/commerce/tax-breakdown/tax-breakdown.d.ts +1 -1
- package/dist/components/blocks/commerce/tax-breakdown/types.d.ts +2 -1
- package/dist/components/blocks/commerce/vendor-profile/types.d.ts +4 -1
- package/dist/components/blocks/data-display/dense-info-card/dense-info.strings.d.ts +4 -1
- package/dist/components/blocks/data-display/inline-stat/inline-stat.d.ts +4 -1
- package/dist/components/blocks/data-display/metadata/index.d.ts +30 -4
- package/dist/components/features/activities/partials/activity-row.d.ts +6 -2
- package/dist/components/features/activities/partials/tone-tokens.d.ts +0 -6
- package/dist/components/features/global-search/partials/global-search-group-heading.d.ts +15 -0
- package/dist/components/features/global-search/partials/global-search-idle-state.d.ts +1 -1
- package/dist/components/features/global-search/partials/tone-palettes.d.ts +0 -5
- package/dist/components/features/kanban/kanban.d.ts +1 -1
- package/dist/components/features/kanban/kanban.strings.d.ts +1 -1
- package/dist/components/features/kanban/kanban.types.d.ts +2 -2
- package/dist/components/features/media-library/hooks/use-media-library.d.ts +1 -1
- package/dist/components/features/media-library/index.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 +4 -0
- package/dist/components/features/media-library/media-library.types.d.ts +74 -1
- package/dist/components/features/media-library/partials/media-library-partials.d.ts +3 -3
- package/dist/components/features/mentions/partials/mention-kind-toggles.d.ts +16 -0
- package/dist/components/features/overlays/alert-dialog.d.ts +1 -1
- package/dist/components/features/overlays/dialog.d.ts +1 -1
- package/dist/components/features/overlays/drawer.d.ts +1 -1
- package/dist/components/features/overlays/hooks/use-overlay-actions.d.ts +2 -2
- package/dist/components/features/overlays/hooks/use-overlay-visibility.d.ts +11 -4
- package/dist/components/features/overlays/index.d.ts +1 -1
- package/dist/components/features/overlays/overlay-tone-icon.d.ts +37 -0
- package/dist/components/features/overlays/overlays.types.d.ts +62 -19
- package/dist/components/features/products/components/product-contract-overview.d.ts +5 -0
- package/dist/components/features/products/components/product-details-card.d.ts +5 -0
- package/dist/components/features/products/components/product-operations-card.d.ts +5 -0
- package/dist/components/features/products/components/product-option-action-menu.d.ts +5 -0
- package/dist/components/features/products/components/product-options-summary.d.ts +5 -0
- package/dist/components/features/products/components/product-policies-card.d.ts +5 -0
- package/dist/components/features/products/components/product-quote-preview-card.d.ts +5 -0
- package/dist/components/features/products/components/product-readiness-card.d.ts +5 -0
- package/dist/components/features/products/components/product-structure-card.d.ts +5 -0
- package/dist/components/features/products/components/product-variant-action-menu.d.ts +23 -1
- package/dist/components/features/products/components/product-variants-manager.d.ts +1 -1
- package/dist/components/features/products/partials/index.d.ts +1 -1
- package/dist/components/features/products/partials/product-metric-tile.d.ts +6 -0
- package/dist/components/features/products/partials/product-tone.d.ts +11 -1
- package/dist/components/features/products/products.types.d.ts +11 -3
- package/dist/components/features/resource/index.d.ts +1 -1
- package/dist/components/features/resource/resource.d.ts +1 -1
- package/dist/components/features/resource/resource.types.d.ts +34 -6
- package/dist/components/features/rich-text-editor/index.d.ts +2 -1
- package/dist/components/features/rich-text-editor/partials/image-nodes.d.ts +13 -0
- package/dist/components/features/rich-text-editor/partials/image-uploads.d.ts +66 -0
- package/dist/components/features/rich-text-editor/partials/inline-reference-node.d.ts +19 -0
- package/dist/components/features/rich-text-editor/rich-text-editor.recipes.d.ts +1 -1
- package/dist/components/features/rich-text-editor/rich-text-editor.strings.d.ts +14 -0
- package/dist/components/features/rich-text-editor/rich-text-editor.types.d.ts +45 -0
- package/dist/components/features/rich-text-editor/use-rich-text-images.d.ts +18 -0
- package/dist/components/features/sync/index.d.ts +26 -3
- package/dist/components/features/table/data-table.d.ts +1 -1
- package/dist/components/features/table/partials/cell-renderers.d.ts +1 -1
- package/dist/components/features/table/table.types.d.ts +32 -7
- package/dist/components/layout/page/index.d.ts +1 -1
- package/dist/components/layout/page/page.types.d.ts +51 -4
- package/dist/components/layout/page/partials/page-actions.d.ts +1 -0
- package/dist/components/layout/page/partials/page-header.d.ts +1 -1
- package/dist/components/layout/settings/settings.d.ts +16 -2
- package/dist/components/layout/workspace/workspace.types.d.ts +21 -4
- package/dist/components/primitives/date.d.ts +16 -3
- package/dist/components/primitives/dimensions.d.ts +6 -0
- package/dist/components/primitives/duration.d.ts +6 -0
- package/dist/components/primitives/file-size.d.ts +6 -0
- package/dist/components/primitives/index.d.ts +1 -1
- package/dist/components/primitives/initials.d.ts +11 -2
- package/dist/components/primitives/link.d.ts +7 -0
- package/dist/components/primitives/money.d.ts +29 -7
- package/dist/components/primitives/number.d.ts +17 -0
- package/dist/components/primitives/value-typography.d.ts +54 -0
- package/dist/components/primitives/value.d.ts +31 -6
- package/dist/components/typography/heading.d.ts +9 -1
- package/dist/components/typography/label.d.ts +3 -0
- package/dist/components/typography/rich-text/index.d.ts +1 -1
- package/dist/components/typography/rich-text/rich-text-tree.d.ts +19 -0
- package/dist/components/typography/rich-text/rich-text.d.ts +16 -0
- package/dist/components/typography/running-text.d.ts +12 -0
- package/dist/components/typography/text-link.d.ts +24 -1
- package/dist/components/typography/text.d.ts +12 -0
- package/dist/components/typography/text.styles.d.ts +35 -13
- package/dist/components/ui/button.d.ts +1 -1
- package/dist/components/ui/checkbox.d.ts +6 -0
- package/dist/components/ui/overlay.recipes.d.ts +6 -2
- package/dist/components/ui/select.d.ts +3 -1
- package/dist/components/ui/switch.d.ts +5 -0
- package/dist/{containers-DqB-bSYE.js → containers-DmWiJa2I.js} +36 -35
- package/dist/containers-DmWiJa2I.js.map +1 -0
- package/dist/{copyable-BTSByfmq.js → copyable-B3Gwgdqc.js} +6 -6
- package/dist/{copyable-BTSByfmq.js.map → copyable-B3Gwgdqc.js.map} +1 -1
- package/dist/data-display-DafIvCl5.js +960 -0
- package/dist/data-display-DafIvCl5.js.map +1 -0
- package/dist/date-BgK3bTdo.js +144 -0
- package/dist/date-BgK3bTdo.js.map +1 -0
- package/dist/date-picker-CF-DtUpF.js +1529 -0
- package/dist/date-picker-CF-DtUpF.js.map +1 -0
- package/dist/date-pickers-BmzxJl5l.js +174 -0
- package/dist/date-pickers-BmzxJl5l.js.map +1 -0
- package/dist/{display-CS6Hbk18.js → display-DsQTVzMz.js} +88 -87
- package/dist/display-DsQTVzMz.js.map +1 -0
- package/dist/{dropdown-menu-D-boNgGO.js → dropdown-menu-E2qmdC7o.js} +23 -16
- package/dist/dropdown-menu-E2qmdC7o.js.map +1 -0
- package/dist/features/activities.js +437 -521
- package/dist/features/activities.js.map +1 -1
- package/dist/features/ai-chat.js +174 -172
- package/dist/features/ai-chat.js.map +1 -1
- package/dist/features/async-preview.js +8 -8
- 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 +139 -138
- package/dist/features/data-view.js.map +1 -1
- package/dist/features/email-composer/engine.js +1 -1
- package/dist/features/email-composer.js +353 -352
- package/dist/features/email-composer.js.map +1 -1
- package/dist/features/event-calendar.js +262 -269
- package/dist/features/event-calendar.js.map +1 -1
- package/dist/features/filters.js +1 -1
- package/dist/features/global-search.js +307 -310
- package/dist/features/global-search.js.map +1 -1
- package/dist/features/kanban.js +95 -97
- package/dist/features/kanban.js.map +1 -1
- package/dist/features/map.js +56 -57
- package/dist/features/map.js.map +1 -1
- package/dist/features/media-library.js +914 -824
- package/dist/features/media-library.js.map +1 -1
- package/dist/features/mentions.js +1 -1
- package/dist/features/overlays.js +1 -1
- package/dist/features/products.js +1272 -1311
- package/dist/features/products.js.map +1 -1
- package/dist/features/questionnaire.js +204 -194
- package/dist/features/questionnaire.js.map +1 -1
- package/dist/features/resource-assignment.js +103 -95
- package/dist/features/resource-assignment.js.map +1 -1
- package/dist/features/resource.js +77 -69
- package/dist/features/resource.js.map +1 -1
- package/dist/features/rich-text-editor.js +30 -11
- package/dist/features/rich-text-editor.js.map +1 -1
- package/dist/features/schema-form.js +193 -189
- package/dist/features/schema-form.js.map +1 -1
- package/dist/features/suggestions.js +3 -3
- package/dist/features/sync.js +7 -7
- package/dist/features/sync.js.map +1 -1
- package/dist/features/table.js +1 -1
- package/dist/features/theme-tweaker.js +455 -455
- package/dist/features/theme-tweaker.js.map +1 -1
- package/dist/feedback-qNuMBtRH.js +233 -0
- package/dist/feedback-qNuMBtRH.js.map +1 -0
- package/dist/field-affordance-recipes-qQeIf4lG.js +48 -0
- package/dist/field-affordance-recipes-qQeIf4lG.js.map +1 -0
- package/dist/field-state-recipes-BVA2CWHo.js +12 -0
- package/dist/field-state-recipes-BVA2CWHo.js.map +1 -0
- package/dist/{filters-D6FF8L6s.js → filters-BkHH53uv.js} +414 -412
- package/dist/filters-BkHH53uv.js.map +1 -0
- package/dist/focus-recipes-B653VaLq.js +12 -0
- package/dist/focus-recipes-B653VaLq.js.map +1 -0
- package/dist/{form-field-CZwrkP7m.js → form-field-DUt4UxSV.js} +7 -7
- package/dist/{form-field-CZwrkP7m.js.map → form-field-DUt4UxSV.js.map} +1 -1
- package/dist/form-sizing-By94KzXE.js +130 -0
- package/dist/form-sizing-By94KzXE.js.map +1 -0
- package/dist/{forms-B5NCbkSC.js → forms-Bzha-Y3B.js} +25 -25
- package/dist/forms-Bzha-Y3B.js.map +1 -0
- package/dist/forms-numeric-C0bvjRPZ.js +906 -0
- package/dist/forms-numeric-C0bvjRPZ.js.map +1 -0
- package/dist/{header-kxruN3RM.js → header-BOefOKd1.js} +38 -41
- package/dist/header-BOefOKd1.js.map +1 -0
- package/dist/{hooks-BrlnCwQd.js → hooks-9k_TtmKh.js} +2 -2
- package/dist/{hooks-BrlnCwQd.js.map → hooks-9k_TtmKh.js.map} +1 -1
- package/dist/{http-CdEIHyQf.js → http-D_6rOnzU.js} +2 -2
- package/dist/{http-CdEIHyQf.js.map → http-D_6rOnzU.js.map} +1 -1
- package/dist/icon-badge-CAuKupo9.js +55 -0
- package/dist/icon-badge-CAuKupo9.js.map +1 -0
- package/dist/index.js +7 -7
- package/dist/input-DWhBBBww.js +262 -0
- package/dist/input-DWhBBBww.js.map +1 -0
- package/dist/{input-vxcaNCYC.js → input-Ddi_LSYv.js} +3 -3
- package/dist/{input-vxcaNCYC.js.map → input-Ddi_LSYv.js.map} +1 -1
- package/dist/interaction-recipes-CHr0dJUs.js +24 -0
- package/dist/interaction-recipes-CHr0dJUs.js.map +1 -0
- package/dist/item-DEmDiTlD.js +265 -0
- package/dist/item-DEmDiTlD.js.map +1 -0
- package/dist/layer-recipes-CCpklYME.js +13 -0
- package/dist/layer-recipes-CCpklYME.js.map +1 -0
- package/dist/layout/app-shell.js +1 -1
- package/dist/layout/auth.js +1 -1
- package/dist/layout/containers.js +1 -1
- package/dist/layout/header.js +1 -1
- package/dist/layout/hooks.js +1 -1
- package/dist/layout/navigation.js +1 -1
- package/dist/layout/page.js +1 -1
- package/dist/layout/settings.js +1 -1
- package/dist/layout/sidebar.js +2 -2
- package/dist/layout/workspace.js +1 -1
- package/dist/layout.js +10 -10
- package/dist/lib/affordance-geometry.generated.d.ts +7 -1
- package/dist/lib/field-affordance-recipes.d.ts +41 -1
- package/dist/lib/field-state-recipes.d.ts +9 -6
- package/dist/lib/focus-recipes.d.ts +24 -0
- package/dist/lib/format.d.ts +9 -0
- package/dist/lib/interaction-recipes.d.ts +35 -0
- package/dist/lib/layer-recipes.d.ts +19 -0
- package/dist/lib/money-format.d.ts +30 -0
- package/dist/lib/motion-recipes.d.ts +1 -0
- package/dist/lib/overlay-anatomy-recipes.d.ts +2 -1
- package/dist/lib/safe-image-src.d.ts +10 -0
- package/dist/lib/sanitize-html.d.ts +15 -3
- package/dist/lib/surface-recipes.d.ts +48 -6
- package/dist/lib/token-merge.generated.d.ts +17 -14
- package/dist/lib/tone-recipes.d.ts +79 -0
- package/dist/lib/track-recipes.d.ts +1 -1
- package/dist/lib/ui-provider/hooks.d.ts +2 -1
- package/dist/lib/ui-provider/index.d.ts +2 -2
- package/dist/lib/ui-provider/provider.d.ts +7 -2
- package/dist/lib/ui-provider/store.d.ts +6 -2
- package/dist/lib/ui-provider/types.d.ts +14 -2
- package/dist/lib/utils.js +1 -1
- package/dist/media-gallery-DcTtAaeC.js +203 -0
- package/dist/media-gallery-DcTtAaeC.js.map +1 -0
- package/dist/mentions-D-uyCh01.js +568 -0
- package/dist/mentions-D-uyCh01.js.map +1 -0
- package/dist/{message-SZUNB1eX.js → message-CdHgIWKf.js} +5 -5
- package/dist/{message-SZUNB1eX.js.map → message-CdHgIWKf.js.map} +1 -1
- package/dist/metadata-list-X5rYAKSB.js +394 -0
- package/dist/metadata-list-X5rYAKSB.js.map +1 -0
- package/dist/{motion-recipes-B6jKXEcN.js → motion-recipes-ChBg4HBq.js} +3 -2
- package/dist/{motion-recipes-B6jKXEcN.js.map → motion-recipes-ChBg4HBq.js.map} +1 -1
- package/dist/navigation-D3KwXmaq.js +145 -0
- package/dist/navigation-D3KwXmaq.js.map +1 -0
- package/dist/navigation-HJf5zxlH.js +268 -0
- package/dist/navigation-HJf5zxlH.js.map +1 -0
- package/dist/{navigation-row-recipes-DQEXQcqY.js → navigation-row-recipes-BVowojQw.js} +2 -2
- package/dist/{navigation-row-recipes-DQEXQcqY.js.map → navigation-row-recipes-BVowojQw.js.map} +1 -1
- package/dist/number-DMhe-Vsk.js +352 -0
- package/dist/number-DMhe-Vsk.js.map +1 -0
- package/dist/overflow-tab-bar-sQHXLlwQ.js +280 -0
- package/dist/overflow-tab-bar-sQHXLlwQ.js.map +1 -0
- package/dist/overlay.recipes-8GHqmlb4.js +6 -0
- package/dist/overlay.recipes-8GHqmlb4.js.map +1 -0
- package/dist/overlays-I0axtYA6.js +999 -0
- package/dist/overlays-I0axtYA6.js.map +1 -0
- package/dist/{page-hGmT4nWK.js → page-B5dTH9gE.js} +79 -68
- package/dist/page-B5dTH9gE.js.map +1 -0
- package/dist/page-header-commands-DjzFEq3E.js +126 -0
- package/dist/page-header-commands-DjzFEq3E.js.map +1 -0
- package/dist/{pagination-NLGqRirf.js → pagination-3bPA_a6K.js} +19 -19
- package/dist/{pagination-NLGqRirf.js.map → pagination-3bPA_a6K.js.map} +1 -1
- package/dist/{popover-CghIYdQf.js → popover-Di55PyAI.js} +8 -8
- package/dist/popover-Di55PyAI.js.map +1 -0
- package/dist/{popover-menu-B4PoWhRl.js → popover-menu-B71Tn2Qz.js} +6 -6
- package/dist/{popover-menu-B4PoWhRl.js.map → popover-menu-B71Tn2Qz.js.map} +1 -1
- package/dist/{popover.recipes-QlD4JenO.js → popover.recipes-Bdyhj2db.js} +2 -2
- package/dist/{popover.recipes-QlD4JenO.js.map → popover.recipes-Bdyhj2db.js.map} +1 -1
- package/dist/primitives-B-CkiEMU.js +379 -0
- package/dist/primitives-B-CkiEMU.js.map +1 -0
- package/dist/primitives.js +5 -5
- package/dist/{progress-BroqrAyV.js → progress-rnS8-uAW.js} +11 -11
- package/dist/progress-rnS8-uAW.js.map +1 -0
- package/dist/{receipt-BuJynLgf.js → receipt-D0oswZ0p.js} +6 -6
- package/dist/{receipt-BuJynLgf.js.map → receipt-D0oswZ0p.js.map} +1 -1
- package/dist/rich-text-DvGulsNJ.js +78 -0
- package/dist/rich-text-DvGulsNJ.js.map +1 -0
- package/dist/rich-text-editor-sMU_Scqm.js +1204 -0
- package/dist/rich-text-editor-sMU_Scqm.js.map +1 -0
- package/dist/rich-text-editor.recipes-CadiF_Uu.js +88 -0
- package/dist/rich-text-editor.recipes-CadiF_Uu.js.map +1 -0
- package/dist/rich-text-editor.strings-CB59ekH2.js +38 -0
- package/dist/rich-text-editor.strings-CB59ekH2.js.map +1 -0
- package/dist/safe-image-src-C6kQSMBZ.js +17 -0
- package/dist/safe-image-src-C6kQSMBZ.js.map +1 -0
- package/dist/sanitize-html-DsQmI48u.js +92 -0
- package/dist/sanitize-html-DsQmI48u.js.map +1 -0
- package/dist/scroll-area-Bt_vXY2b.js +48 -0
- package/dist/scroll-area-Bt_vXY2b.js.map +1 -0
- package/dist/{separator-BNIgG3au.js → separator-C8DlRGwF.js} +4 -4
- package/dist/separator-C8DlRGwF.js.map +1 -0
- package/dist/{separator-BhtFyo4x.js → separator-CYHnjsAb.js} +2 -2
- package/dist/{separator-BhtFyo4x.js.map → separator-CYHnjsAb.js.map} +1 -1
- package/dist/services/actions/action-adapters.d.ts +22 -0
- package/dist/services/actions/index.d.ts +1 -1
- package/dist/services/actions.js +23 -6
- package/dist/services/actions.js.map +1 -1
- package/dist/settings-CQW3b-Cu.js +170 -0
- package/dist/settings-CQW3b-Cu.js.map +1 -0
- package/dist/sheet-4SEvVYzA.js +210 -0
- package/dist/sheet-4SEvVYzA.js.map +1 -0
- package/dist/{sidebar-CyR4XKwR.js → sidebar-C7WWR29L.js} +181 -180
- package/dist/sidebar-C7WWR29L.js.map +1 -0
- package/dist/sidebar-d7Dg80ln.js +511 -0
- package/dist/sidebar-d7Dg80ln.js.map +1 -0
- package/dist/{skeleton-3F0uhYn3.js → skeleton-Cz890JZF.js} +10 -10
- package/dist/skeleton-Cz890JZF.js.map +1 -0
- package/dist/smart-card-lFKxn5Hu.js +595 -0
- package/dist/smart-card-lFKxn5Hu.js.map +1 -0
- package/dist/{spinner-Cpf7oRkF.js → spinner-fa3h1Aif.js} +10 -8
- package/dist/spinner-fa3h1Aif.js.map +1 -0
- package/dist/{structure-CRdqVawd.js → structure-DC2dygdA.js} +3 -3
- package/dist/{structure-CRdqVawd.js.map → structure-DC2dygdA.js.map} +1 -1
- package/dist/{structure.recipes-Bqhf9oIh.js → structure.recipes-EPz60cU8.js} +37 -19
- package/dist/structure.recipes-EPz60cU8.js.map +1 -0
- package/dist/style.css +1 -1
- package/dist/surface-recipes-BKRVW8Os.js +43 -0
- package/dist/surface-recipes-BKRVW8Os.js.map +1 -0
- package/dist/table-CIKyLUsy.js +163 -0
- package/dist/table-CIKyLUsy.js.map +1 -0
- package/dist/{table-CcRDZiLP.js → table-CrcLN9Io.js} +544 -530
- package/dist/table-CrcLN9Io.js.map +1 -0
- package/dist/tabs-DwBJfjxX.js +190 -0
- package/dist/tabs-DwBJfjxX.js.map +1 -0
- package/dist/{text-inputs-DsR56TR-.js → text-inputs-aaK9wcDT.js} +151 -155
- package/dist/text-inputs-aaK9wcDT.js.map +1 -0
- package/dist/{text.styles-Q4sGAIgA.js → text.styles-g4He6UIW.js} +17 -14
- package/dist/text.styles-g4He6UIW.js.map +1 -0
- package/dist/theme.css +16 -12
- package/dist/themes/green.css +24 -0
- package/dist/{timelines-D1pkt3se.js → timelines-C_SBwHNP.js} +154 -164
- package/dist/timelines-C_SBwHNP.js.map +1 -0
- package/dist/tone-recipes-CPoExcTE.js +70 -0
- package/dist/tone-recipes-CPoExcTE.js.map +1 -0
- package/dist/tooltip-CsfgrfS7.js +111 -0
- package/dist/tooltip-CsfgrfS7.js.map +1 -0
- package/dist/track-recipes-CDcKmndW.js +10 -0
- package/dist/track-recipes-CDcKmndW.js.map +1 -0
- package/dist/{tree-BtmYyMZV.js → tree-BiKhg8AY.js} +72 -70
- package/dist/tree-BiKhg8AY.js.map +1 -0
- package/dist/typography/rich-text.js +1 -1
- package/dist/typography-DTRkE9zL.js +117 -0
- package/dist/typography-DTRkE9zL.js.map +1 -0
- package/dist/typography.js +2 -2
- package/dist/{ui-provider-DRPn3qNl.js → ui-provider-1D_NSYzO.js} +30 -23
- package/dist/ui-provider-1D_NSYzO.js.map +1 -0
- package/dist/ui-provider.js +3 -3
- package/dist/{upload-CDbYw1WN.js → upload-BO8-CLN6.js} +294 -293
- package/dist/upload-BO8-CLN6.js.map +1 -0
- package/dist/{upload-queue-CNd_hH_a.js → upload-queue-EOC8g1gf.js} +133 -138
- package/dist/upload-queue-EOC8g1gf.js.map +1 -0
- package/dist/upload.recipes-BbxTqrCT.js +61 -0
- package/dist/upload.recipes-BbxTqrCT.js.map +1 -0
- package/dist/{usage-card-VyJLUwRr.js → usage-card-obRaBskq.js} +42 -43
- package/dist/{usage-card-VyJLUwRr.js.map → usage-card-obRaBskq.js.map} +1 -1
- package/dist/{utils-BvH9PSmq.js → utils-l5LpDw2z.js} +264 -62
- package/dist/utils-l5LpDw2z.js.map +1 -0
- package/dist/value-inputs-TAYMX111.js +947 -0
- package/dist/value-inputs-TAYMX111.js.map +1 -0
- package/dist/value-typography-b8wpz1eX.js +116 -0
- package/dist/value-typography-b8wpz1eX.js.map +1 -0
- package/dist/workspace-DH0v0KcB.js +407 -0
- package/dist/workspace-DH0v0KcB.js.map +1 -0
- package/docs/consumer-skill/SKILL.md +62 -50
- package/docs/consumer-skill/examples/app-layout.tsx +3 -5
- package/docs/consumer-skill/examples/composition.tsx +3 -3
- package/docs/consumer-skill/examples/detail.tsx +59 -13
- package/docs/consumer-skill/examples/edit.tsx +2 -2
- package/docs/consumer-skill/examples/layout-blocks.tsx +20 -0
- package/docs/consumer-skill/examples/manifest.json +28 -6
- package/docs/consumer-skill/examples/receipt.tsx +2 -2
- package/docs/consumer-skill/examples/scoped-directory.tsx +3 -3
- package/docs/consumer-skill/examples/website.tsx +1 -1
- package/docs/consumer-skill/references/agents-md.md +33 -0
- package/docs/consumer-skill/references/analytics.md +1 -1
- package/docs/consumer-skill/references/composition.md +139 -24
- package/docs/consumer-skill/references/design-contract.md +12 -3
- package/docs/consumer-skill/references/discovery.md +4 -0
- package/docs/consumer-skill/references/installation.md +33 -1
- package/docs/consumer-skill/references/integration.md +32 -1
- package/docs/consumer-skill/references/public-api.json +1051 -610
- package/docs/consumer-skill/references/review.md +44 -8
- package/docs/consumer-skill/references/theming.md +14 -4
- package/docs/consumer-skill/references/tokens.json +5 -2
- package/docs/consumer-skill/references/workflows.md +30 -9
- package/docs/consumer-skill/scripts/composition-policy.mjs +127 -6
- package/docs/consumer-skill/scripts/discovery.mjs +11 -3
- package/docs/consumer-skill/scripts/pin-button-defaults.mjs +95 -0
- package/docs/consumer-skill/scripts/surface-policy.mjs +139 -5
- package/package.json +13 -3
- package/dist/accordion-BRTcsp8J.js +0 -205
- package/dist/accordion-BRTcsp8J.js.map +0 -1
- package/dist/action-menu-Drxw_vJk.js +0 -265
- package/dist/action-menu-Drxw_vJk.js.map +0 -1
- package/dist/affordance-geometry.generated-CL84ZN9A.js.map +0 -1
- package/dist/ai-artifact-DLVdK0Py.js.map +0 -1
- package/dist/attachment-DbjUWsP0.js +0 -244
- package/dist/attachment-DbjUWsP0.js.map +0 -1
- package/dist/auth-CAQcasMV.js.map +0 -1
- package/dist/avatar-Bu2HhitA.js.map +0 -1
- package/dist/badge-CzId1Wlm.js +0 -92
- package/dist/badge-CzId1Wlm.js.map +0 -1
- package/dist/breadcrumbs-BuYz5SDU.js +0 -128
- package/dist/breadcrumbs-BuYz5SDU.js.map +0 -1
- package/dist/button-BZDasD04.js +0 -651
- package/dist/button-BZDasD04.js.map +0 -1
- package/dist/button-BZyfTvwm.js.map +0 -1
- package/dist/buttons-D_6KJvEE.js +0 -99
- package/dist/buttons-D_6KJvEE.js.map +0 -1
- package/dist/cards-qGSErLw_.js.map +0 -1
- package/dist/chart-Bsc5BICK.js.map +0 -1
- package/dist/checkbox-BQNDjUCh.js +0 -34
- package/dist/checkbox-BQNDjUCh.js.map +0 -1
- package/dist/choice-inputs-Mk3iWbhr.js +0 -725
- package/dist/choice-inputs-Mk3iWbhr.js.map +0 -1
- package/dist/code-block-DzHKRybS.js +0 -183
- package/dist/code-block-DzHKRybS.js.map +0 -1
- package/dist/combobox-BFnbJJp3.js.map +0 -1
- package/dist/combobox-hozNwUcc.js +0 -847
- package/dist/combobox-hozNwUcc.js.map +0 -1
- package/dist/command-BnmSchli.js.map +0 -1
- package/dist/comments-u5L0OGip.js.map +0 -1
- package/dist/containers-DqB-bSYE.js.map +0 -1
- package/dist/data-display-Bihs9Ven.js +0 -1342
- package/dist/data-display-Bihs9Ven.js.map +0 -1
- package/dist/date-DOKhJPu7.js +0 -140
- package/dist/date-DOKhJPu7.js.map +0 -1
- package/dist/date-picker-DzP5HQq7.js +0 -1541
- package/dist/date-picker-DzP5HQq7.js.map +0 -1
- package/dist/date-pickers-BpgGz7S-.js +0 -196
- package/dist/date-pickers-BpgGz7S-.js.map +0 -1
- package/dist/display-CS6Hbk18.js.map +0 -1
- package/dist/dropdown-menu-D-boNgGO.js.map +0 -1
- package/dist/feedback-CJkUAapr.js +0 -233
- package/dist/feedback-CJkUAapr.js.map +0 -1
- package/dist/field-affordance-recipes-uKY4MsZ_.js +0 -25
- package/dist/field-affordance-recipes-uKY4MsZ_.js.map +0 -1
- package/dist/field-state-recipes-DQQpiLWC.js +0 -11
- package/dist/field-state-recipes-DQQpiLWC.js.map +0 -1
- package/dist/filters-D6FF8L6s.js.map +0 -1
- package/dist/form-sizing-QP8aIRaW.js +0 -103
- package/dist/form-sizing-QP8aIRaW.js.map +0 -1
- package/dist/format-iamDSqs2.js +0 -110
- package/dist/format-iamDSqs2.js.map +0 -1
- package/dist/forms-B5NCbkSC.js.map +0 -1
- package/dist/forms-numeric-Crrm80Lm.js +0 -867
- package/dist/forms-numeric-Crrm80Lm.js.map +0 -1
- package/dist/header-kxruN3RM.js.map +0 -1
- package/dist/icon-badge-Btc6pQrp.js +0 -53
- package/dist/icon-badge-Btc6pQrp.js.map +0 -1
- package/dist/input-SX9V0AL3.js +0 -255
- package/dist/input-SX9V0AL3.js.map +0 -1
- package/dist/item-DE4YnuJx.js +0 -258
- package/dist/item-DE4YnuJx.js.map +0 -1
- package/dist/media-gallery-DLp3HAz0.js +0 -201
- package/dist/media-gallery-DLp3HAz0.js.map +0 -1
- package/dist/mentions-Cl0Kt_Pd.js +0 -565
- package/dist/mentions-Cl0Kt_Pd.js.map +0 -1
- package/dist/navigation-DnQSNMT0.js +0 -276
- package/dist/navigation-DnQSNMT0.js.map +0 -1
- package/dist/navigation-DyytsLRB.js +0 -265
- package/dist/navigation-DyytsLRB.js.map +0 -1
- package/dist/number-DasMFWEG.js +0 -269
- package/dist/number-DasMFWEG.js.map +0 -1
- package/dist/overlay.recipes-BxW5FIfK.js +0 -6
- package/dist/overlay.recipes-BxW5FIfK.js.map +0 -1
- package/dist/overlays-DUbs1KEi.js +0 -1011
- package/dist/overlays-DUbs1KEi.js.map +0 -1
- package/dist/page-hGmT4nWK.js.map +0 -1
- package/dist/page-header-D8nERkn5.js +0 -112
- package/dist/page-header-D8nERkn5.js.map +0 -1
- package/dist/popover-CghIYdQf.js.map +0 -1
- package/dist/primitives-C7ff0QaI.js +0 -337
- package/dist/primitives-C7ff0QaI.js.map +0 -1
- package/dist/progress-BroqrAyV.js.map +0 -1
- package/dist/rich-text-DlxDOtf4.js +0 -32
- package/dist/rich-text-DlxDOtf4.js.map +0 -1
- package/dist/rich-text-editor-BKyG7rWz.js +0 -574
- package/dist/rich-text-editor-BKyG7rWz.js.map +0 -1
- package/dist/rich-text-editor.recipes-B72Nfuze.js +0 -81
- package/dist/rich-text-editor.recipes-B72Nfuze.js.map +0 -1
- package/dist/rich-text-editor.strings-BpnIQgMl.js +0 -25
- package/dist/rich-text-editor.strings-BpnIQgMl.js.map +0 -1
- package/dist/sanitize-html-BG9FGe-j.js +0 -64
- package/dist/sanitize-html-BG9FGe-j.js.map +0 -1
- package/dist/scroll-area-D-pIhEKl.js +0 -47
- package/dist/scroll-area-D-pIhEKl.js.map +0 -1
- package/dist/separator-BNIgG3au.js.map +0 -1
- package/dist/settings-DOTOzeZ2.js +0 -161
- package/dist/settings-DOTOzeZ2.js.map +0 -1
- package/dist/sheet-BFhrNehm.js +0 -205
- package/dist/sheet-BFhrNehm.js.map +0 -1
- package/dist/sidebar-CyR4XKwR.js.map +0 -1
- package/dist/sidebar-SvGJ0Zwi.js +0 -506
- package/dist/sidebar-SvGJ0Zwi.js.map +0 -1
- package/dist/skeleton-3F0uhYn3.js.map +0 -1
- package/dist/smart-card-DjGVV2xr.js +0 -584
- package/dist/smart-card-DjGVV2xr.js.map +0 -1
- package/dist/spinner-Cpf7oRkF.js.map +0 -1
- package/dist/structure.recipes-Bqhf9oIh.js.map +0 -1
- package/dist/surface-recipes-Dd__PD-w.js +0 -28
- package/dist/surface-recipes-Dd__PD-w.js.map +0 -1
- package/dist/table-CLtJTxoR.js +0 -147
- package/dist/table-CLtJTxoR.js.map +0 -1
- package/dist/table-CcRDZiLP.js.map +0 -1
- package/dist/tabs-BNgu7g0u.js +0 -188
- package/dist/tabs-BNgu7g0u.js.map +0 -1
- package/dist/text-inputs-DsR56TR-.js.map +0 -1
- package/dist/text.styles-Q4sGAIgA.js.map +0 -1
- package/dist/timelines-D1pkt3se.js.map +0 -1
- package/dist/track-recipes-LLPNVwFg.js +0 -10
- package/dist/track-recipes-LLPNVwFg.js.map +0 -1
- package/dist/tree-BtmYyMZV.js.map +0 -1
- package/dist/typography-BxQgiZyw.js +0 -96
- package/dist/typography-BxQgiZyw.js.map +0 -1
- package/dist/ui-provider-DRPn3qNl.js.map +0 -1
- package/dist/upload-CDbYw1WN.js.map +0 -1
- package/dist/upload-queue-CNd_hH_a.js.map +0 -1
- package/dist/use-file-drop-target-BX7GnhoQ.js +0 -39
- package/dist/use-file-drop-target-BX7GnhoQ.js.map +0 -1
- package/dist/utils-BvH9PSmq.js.map +0 -1
- package/dist/value-inputs-D0KCrfVC.js +0 -840
- package/dist/value-inputs-D0KCrfVC.js.map +0 -1
- package/dist/workspace-CcR8r-Nt.js +0 -395
- package/dist/workspace-CcR8r-Nt.js.map +0 -1
- /package/dist/components/{blocks/data-display/metadata → base/metadata-list}/metadata-list.strings.d.ts +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"products.js","names":["getPlainText","_Fragment","resolveComponentScale","useDensityConfig","cn","DisplayLabel","Button","Grid","Stack","Progress","useOverlayVisibility","ConfirmDialog","Value","SecondaryValue","Percent","Badge","fieldAffordanceRecipes","Input","Textarea","Select","Switch","Checkbox","ContentBlock","FormField","ItemMedia","ItemDescription","ItemActions","ItemGroup","ItemContent","Item","ItemTitle","TableRow","TableCell","TableBody","TableHead","TableHeader","Table","InlineStat","EmptyState","MetadataList","DataTableActions","DataTable","segmentedControlRecipes","controlGroupHeightClasses","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_SURFACE","clampProductPercent","value","ProductToneDot","tone","ProductMetricTile","metric","Text","ProductRowActions","actions","item","PRODUCT_ROW_CONTENT","PRODUCT_ROW_TITLE","ProductStructureMetricRow","ProductReadinessRow","select","onSelect","ArrowRight","actionFallback","ProductOperationRow","ProductSummaryRow","values","actionLabel","ProductContractOverview","stringsProp","strings","useStrings","hasContent","metrics","terms","rules","headerAction","onOpenContract","onEditContract","onCreateRule","Plus","Pencil","FileText","onSelectRule","rule","onEdit","onEditRule","onDelete","onDeleteRule","ruleActions","Eye","Trash2","rowActions","renderRuleActions","empty","ProductDetailsCard","onEditDetails","Box","title","description","metadata","media","ProductOptionActionMenu","onSelectOption","option","onEditOption","onDeleteOption","renderOptionActions","menuLabel","ProductOperationsCard","onCreateOperation","PackageCheck","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","ShieldCheck","policies","onSelectPolicy","policy","onEditPolicy","onDeletePolicy","policyActions","renderPolicyActions","renderPolicy","ProductQuotePreviewCard","onCreateLine","onOpenQuote","ReceiptText","lines","onSelectLine","line","onEditLine","onDeleteLine","lineActions","renderLineActions","subtotal","tax","discount","ProductReadinessCard","completion","score","onCreateReadinessItem","ClipboardCheck","scoreLabel","summary","onSelectReadinessItem","onEditReadinessItem","onDeleteReadinessItem","readinessActions","renderReadinessItemActions","ProductStructureCard","onCreateMetric","Layers3","onSelectMetric","onEditMetric","onDeleteMetric","metricActions","renderMetricActions","ProductVariantNameCell","variant","channelsLabel","ProductVariantValueCell","emphasis","ProductVariantsTable","renderVariantActions","actionsList","onSelectVariant","onEditVariant","onDuplicateVariant","Copy","onDeleteVariant","columns","baseColumns","row","onCreateVariant","ListChecks","variants","ProductOverview","hasRail","readiness","structure","operations","quote","slots","mainClassName","details","contract","railClassName","ProductVariantActionMenu","onDuplicate","isPresent","getDefaultMetadata","labels","ProductVariantDetails","resolvedMetadata","hasActionMenu","renderActions","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","Save","hasDefaultFooter","footerSlot","statusOptions","optionFields","fieldValue","hasChoices","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","label","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","hasRowActions","tableColumnCount","updateSelection","nextRows","clearSelection","toggleRow","toggleAll","bulkContext","onGenerateVariants","RefreshCw","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/20', 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';\n\nexport const PRODUCT_TONE_BADGE: Record<ProductTone, BadgeTone> = {\n\tneutral: 'secondary',\n\tprimary: 'primary',\n\tsuccess: 'success',\n\twarning: 'warning',\n\tdestructive: 'destructive',\n\tinfo: 'info',\n};\n\nexport const PRODUCT_TONE_SURFACE: Record<ProductTone, string> = {\n\tneutral: 'border-border bg-card text-muted-foreground',\n\tprimary: 'border-primary-accent/20 bg-primary/5 text-primary-accent',\n\tsuccess: 'border-success/20 bg-success/5 text-success',\n\twarning: 'border-warning/30 bg-warning/8 text-warning-accent',\n\tdestructive: 'border-destructive/25 bg-destructive/8 text-destructive',\n\tinfo: 'border-info/20 bg-info/5 text-info',\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 size-2 rounded-full', {\n\t\t\t\t'bg-muted-foreground': tone === 'neutral',\n\t\t\t\t'bg-primary': 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 { Text } from '../../../typography';\nimport { cn } from '../../../../lib/utils';\n\nimport type { ProductMetricSummary, ProductStructureMetric } from '../products.types';\nimport { PRODUCT_TONE_SURFACE } from './product-tone';\n\nexport function ProductMetricTile({ metric }: { metric: ProductStructureMetric | ProductMetricSummary }) {\n\tconst tone = metric.tone ?? 'neutral';\n\n\treturn (\n\t\t<Stack gap=\"dense\" className={cn('border-border product-metric-tile--component rounded-radius border p-surface-xs', PRODUCT_TONE_SURFACE[tone])}>\n\t\t\t<Stack direction=\"horizontal\" align=\"start\" justify=\"between\" gap=\"md\">\n\t\t\t\t<Stack gap=\"2xs\" className=\"min-w-0\">\n\t\t\t\t\t<Text size=\"xs\" type={tone === 'neutral' ? 'secondary' : 'main'} className=\"truncate\">\n\t\t\t\t\t\t{metric.label}\n\t\t\t\t\t</Text>\n\t\t\t\t\t<Value weight=\"semibold\" className=\"tabular-nums\">\n\t\t\t\t\t\t{metric.value}\n\t\t\t\t\t</Value>\n\t\t\t\t</Stack>\n\t\t\t\t{'icon' in metric && !!metric.icon && (\n\t\t\t\t\t<div className=\"shrink-0 opacity-80\">{metric.icon}</div>\n\t\t\t\t)}\n\t\t\t</Stack>\n\t\t\t{!!metric.description && (\n\t\t\t\t<Text size=\"xs\" type=\"secondary\">\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 { ArrowRight } from 'lucide-react';\nimport 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 { 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} from '../products.types';\nimport {\n\tPRODUCT_TONE_BADGE,\n\tPRODUCT_TONE_SURFACE,\n\tProductToneDot,\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';\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\tconst tone = metric.tone ?? 'neutral';\n\n\treturn (\n\t\t<Item className=\"product-structure-metric-row--component product-structure-card--item\">\n\t\t\t<ItemMedia variant=\"icon\" className={cn('border-border rounded-full border', PRODUCT_TONE_SURFACE[tone])}>\n\t\t\t\t{metric.icon ?? <ProductToneDot tone={tone} />}\n\t\t\t</ItemMedia>\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 weight=\"semibold\" className=\"tabular-nums\">\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\tconst tone = 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 variant=\"icon\" className={cn('border-border rounded-full border', PRODUCT_TONE_SURFACE[tone])}>\n\t\t\t\t<ProductToneDot tone={tone} />\n\t\t\t</ItemMedia>\n\t\t\t<ItemContent className={PRODUCT_ROW_CONTENT}>\n\t\t\t\t<ItemTitle className={PRODUCT_ROW_TITLE}>{item.label}</ItemTitle>\n\t\t\t\t{!!item.description && <ItemDescription clamp={2}>{item.description}</ItemDescription>}\n\t\t\t</ItemContent>\n\t\t\t{!!(item.value || select || actions) && (\n\t\t\t\t<ItemActions className=\"ml-auto shrink-0 flex-wrap justify-end gap-space-md\">\n\t\t\t\t\t{!!item.value && (\n\t\t\t\t\t\t<Badge tone={PRODUCT_TONE_BADGE[tone]}>{item.value}</Badge>\n\t\t\t\t\t)}\n\t\t\t\t\t{!!select && (\n\t\t\t\t\t\t<Button type=\"button\" tone=\"secondary\" buttonStyle=\"ghost\" onClick={select} icon={ArrowRight} iconPosition=\"right\">\n\t\t\t\t\t\t\t{item.actionLabel ?? actionFallback}\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t)}\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 tone = item.tone ?? 'neutral';\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<ItemMedia variant=\"icon\" className={cn('border-border rounded-full border', PRODUCT_TONE_SURFACE[tone])}>\n\t\t\t\t<ProductToneDot tone={tone} />\n\t\t\t</ItemMedia>\n\t\t\t<ItemContent className={PRODUCT_ROW_CONTENT}>\n\t\t\t\t<ItemTitle className={PRODUCT_ROW_TITLE}>{item.label}</ItemTitle>\n\t\t\t\t{!!item.description && <ItemDescription clamp={2}>{item.description}</ItemDescription>}\n\t\t\t</ItemContent>\n\t\t\t{!!(item.value || select || actions) && (\n\t\t\t\t<ItemActions className=\"ml-auto shrink-0 flex-wrap justify-end gap-space-md\">\n\t\t\t\t\t{!!item.value && <Text tag=\"span\" weight=\"semibold\">{item.value}</Text>}\n\t\t\t\t\t{!!select && (\n\t\t\t\t\t\t<Button type=\"button\" tone=\"secondary\" buttonStyle=\"ghost\" onClick={select} icon={ArrowRight} iconPosition=\"right\">\n\t\t\t\t\t\t\t{item.actionLabel ?? actionFallback}\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t)}\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 tone = item.tone ?? 'neutral';\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<ItemMedia variant=\"icon\" className={cn('border-border rounded-full border', PRODUCT_TONE_SURFACE[tone])}>\n\t\t\t\t<ProductToneDot tone={tone} />\n\t\t\t</ItemMedia>\n\t\t\t<ItemContent className={PRODUCT_ROW_CONTENT}>\n\t\t\t\t<ItemTitle className={PRODUCT_ROW_TITLE}>{item.label}</ItemTitle>\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{!!(item.value || item.badge || onSelect || actions) && (\n\t\t\t\t<ItemActions className=\"ml-auto shrink-0 flex-wrap justify-end gap-space-md\">\n\t\t\t\t\t{!!item.value && <Text tag=\"span\" weight=\"semibold\">{item.value}</Text>}\n\t\t\t\t\t{!!item.badge && item.badge}\n\t\t\t\t\t{!!onSelect && (\n\t\t\t\t\t\t<Button type=\"button\" tone=\"secondary\" buttonStyle=\"ghost\" onClick={onSelect} icon={ArrowRight} iconPosition=\"right\">\n\t\t\t\t\t\t\t{actionLabel}\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t)}\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\tArrowRight,\n\tEye,\n\tFileText,\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 '../../../blocks/data-display';\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\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} icon={Pencil}>\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} icon={ArrowRight} iconPosition=\"right\">\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\ticon={<FileText className=\"size-icon\" />}\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\tcontentClassName=\"mt-1\"\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 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=\"xl\">\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 weight=\"semibold\">{strings.termsTitle}</Text>\n\t\t\t\t\t\t\t<MetadataList 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\t<Stack gap=\"md\">\n\t\t\t\t\t\t\t<Text 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\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 {\n\tBox,\n\tPencil } from 'lucide-react';\n\nimport { Button } from '../../../base/buttons';\nimport { ContentBlock } from '../../../base/display';\nimport { MetadataList } from '../../../blocks/data-display';\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\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} icon={Pencil}>\n\t\t\t{strings.editLabel}\n\t\t</Button>\n\t) : undefined;\n\n\treturn (\n\t\t<ContentBlock\n\t\t\ticon={<Box className=\"size-icon\" />}\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\tcontentClassName=\"mt-1\"\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 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\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\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 { PackageCheck, 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\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\ticon={<PackageCheck className=\"size-icon\" />}\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\tcontentClassName=\"mt-1\"\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 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 { ChevronDown, GripVertical, Plus, PlusCircle, Trash2, X } from 'lucide-react';\nimport { Fragment, useCallback, useMemo, useState, type ReactNode } from 'react';\n\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';\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 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\">\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/70')}>\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 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/70')}>\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/70 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 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 border-input bg-background text-muted-foreground hover:bg-muted/60\"\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 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<span\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={cn(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'product-options-matrix--value inline-flex max-w-full items-center gap-space-xs rounded-radius bg-muted px-space-sm py-space-xs text-pxs font-medium leading-none text-muted-foreground',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvalue.disabled && 'opacity-60',\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>\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 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\tclassName={cn(fieldAffordanceRecipes.target, fieldAffordanceRecipes.focus, 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</span>\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/70 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 box-border block w-full cursor-pointer whitespace-normal rounded-inner border-0 bg-transparent p-0 text-start font-sans text-foreground outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\"\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=\"product-options-matrix--item-actions col-start-2 flex min-w-fit items-center gap-space-md justify-start @2xl/product-options-matrix:justify-end lg:col-start-auto\">\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/70 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\tcontentClassName=\"mt-1\"\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\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 : SlidersHorizontal}\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\ticon={<SlidersHorizontal className=\"size-icon\" />}\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\tcontentClassName=\"mt-1\"\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 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, ShieldCheck, 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\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\ticon={<ShieldCheck className=\"size-icon\" />}\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\tcontentClassName=\"mt-1\"\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 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\tArrowRight,\n\tEye,\n\tPencil,\n\tPlus,\n\tReceiptText,\n\tTrash2 } from 'lucide-react';\n\nimport { Button } from '../../../base/buttons';\nimport { ContentBlock } 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\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 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} icon={ArrowRight} iconPosition=\"right\">\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\ticon={<ReceiptText className=\"size-icon\" />}\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\tcontentClassName=\"mt-1\"\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 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\t<Stack gap=\"lg\">\n\t\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\t<Item key={line.id} size=\"sm\" className=\"rounded-inner border border-border bg-muted/20 px-row-x py-row-y\">\n\t\t\t\t\t\t\t\t\t\t<ItemContent>\n\t\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\t{!!line.description && <ItemDescription>{line.description}</ItemDescription>}\n\t\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\t</ItemContent>\n\t\t\t\t\t\t\t\t\t\t<ItemActions>\n\t\t\t\t\t\t\t\t\t\t\t<Value weight=\"semibold\" className=\"tabular-nums\">{line.amount}</Value>\n\t\t\t\t\t\t\t\t\t\t\t{rowActions}\n\t\t\t\t\t\t\t\t\t\t</ItemActions>\n\t\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\t</ItemGroup>\n\t\t\t\t\t\t<div className=\"rounded-radius bg-muted/30 p-surface\">\n\t\t\t\t\t\t<Stack gap=\"sm\">\n\t\t\t\t\t\t{subtotal !== undefined && <InlineStat label={strings.subtotalLabel} value={subtotal} mono />}\n\t\t\t\t\t\t{tax !== undefined && <InlineStat label={strings.taxLabel} value={tax} mono />}\n\t\t\t\t\t\t{discount !== undefined && <InlineStat label={strings.discountLabel} value={discount} mono valueClassName=\"text-success\" />}\n\t\t\t\t\t\t<InlineStat label={<Text tag=\"span\" weight=\"semibold\" lineHeight=\"tight\">{strings.totalLabel}</Text>} value={total ?? PRODUCT_EMPTY_VALUE} mono valueClassName=\"font-semibold\" />\n\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</Stack>\n\t\t\t)}\n\t\t</ContentBlock>\n\t);\n}\n\nProductQuotePreviewCard.displayName = 'ProductQuotePreviewCard';\n","import {\n\tClipboardCheck,\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\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\ticon={<ClipboardCheck className=\"size-icon\" />}\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=\"lg\"\n\t\t\tclassName={cn('product-readiness-card--component w-full', className)}\n\t\t>\n\t\t\t{completion !== undefined && (\n\t\t\t\t<div className=\"rounded-radius border border-border bg-muted/20 p-surface\">\n\t\t\t\t\t<Stack direction=\"horizontal\" align=\"center\" justify=\"between\" gap=\"lg\" className=\"mb-space-md\">\n\t\t\t\t\t\t<Text size=\"xs\" type=\"secondary\">{scoreLabel ?? strings.scoreLabel}</Text>\n\t\t\t\t\t\t<Percent value={completion} scaled size=\"xs\" weight=\"semibold\" />\n\t\t\t\t\t</Stack>\n\t\t\t\t\t<Progress\n\t\t\t\t\t\tvalue={completion}\n\t\t\t\t\t\taria-label={typeof scoreLabel === 'string' ? scoreLabel : strings.progressLabel}\n\t\t\t\t\t\taria-valuetext={`${completion}%`}\n\t\t\t\t\t\tclassName=\"h-1.5\"\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t\t{!!summary && <Text type=\"secondary\" className=\"leading-relaxed\">{summary}</Text>}\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 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, Layers3, 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\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\ticon={<Layers3 className=\"size-icon\" />}\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\tcontentClassName=\"mt-1\"\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 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, ListChecks, 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<div className=\"product-variants-table--variant-cell min-w-0\">\n\t\t\t<Stack gap=\"dense\">\n\t\t\t<Stack direction=\"horizontal\" gap=\"sm\">\n\t\t\t\t<Text weight=\"semibold\" className=\"truncate\">{variant.name}</Text>\n\t\t\t\t{!!variant.status && (\n\t\t\t\t\t<Badge tone={variant.statusTone ?? 'secondary'}>{variant.status}</Badge>\n\t\t\t\t)}\n\t\t\t</Stack>\n\t\t\t{!!variant.description && (\n\t\t\t\t<Text size=\"xs\" type=\"secondary\">\n\t\t\t\t\t{variant.description}\n\t\t\t\t</Text>\n\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\" className=\"mt-space-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\" className=\"pl-space-2xs\">\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</div>\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\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\ticon={<ListChecks className=\"size-icon\" />}\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\tcontentClassName=\"mt-1\"\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 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<Stack gap=\"xl\" 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-xl', hasRail && '@5xl/product-overview:grid-cols-[minmax(0,1fr)_22rem]')}>\n\t\t\t\t<Stack render={<section />} gap=\"xl\" 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=\"xl\" 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';\n\nimport { useStrings } from '../../../../lib/strings';\nimport { cn } from '../../../../lib/utils';\n\nimport {\n\tdefaultProductVariantActionMenuStrings,\n} from '../products.strings';\nimport type {\n\tProductVariantActionMenuProps,\n\tProductVariantSummary,\n} from '../products.types';\nimport { ProductRowActions } from '../partials/product-actions';\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={[\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...(onDuplicate ? [{\n\t\t\t\t\tid: 'duplicate',\n\t\t\t\t\tlabel: strings.duplicateLabel,\n\t\t\t\t\ticon: <Copy className=\"size-icon-md\" />,\n\t\t\t\t\tonClick: () => onDuplicate(),\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\nProductVariantActionMenu.displayName = 'ProductVariantActionMenu';\n","import { ArrowLeft, ListChecks } 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 '../../../blocks/data-display/metadata';\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 { defaultProductVariantDetailsStrings } 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 } 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\tconst hasActionMenu = !!(\n\t\tvariant &&\n\t\t(onSelectVariant || onEditVariant || onDuplicateVariant || onDeleteVariant || renderActions)\n\t);\n\tconst headerAction = (\n\t\t<div className=\"product-variant-details--header-actions flex items-center gap-space-md\">\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{!!hasActionMenu && 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\ticon={<ListChecks className=\"size-icon\" />}\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={actions}\n\t\t\theaderAction={onBack || hasActionMenu ? headerAction : undefined}\n\t\t\theaderEnd={headerEnd}\n\t\t\tfooterSlot={footerSlot}\n\t\t\tcontentClassName=\"mt-1\"\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=\"xl\" 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) : (\n\t\t\t\t\t\t\t<MetadataList\n\t\t\t\t\t\t\t\ttitle={strings.factsTitle}\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)}\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 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 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 { Pencil, Save, Trash2, X } from 'lucide-react';\nimport { 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\ticon={Trash2}\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\ticon={X}\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\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\ticon={Save}\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\ticon={<Pencil className=\"size-4\" />}\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 ?? (hasDefaultFooter ? defaultFooter : undefined)}\n\t\t\tfooterDivider\n\t\t\tcontentClassName=\"mt-1\"\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 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 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 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</Stack>\n\t\t</ContentBlock>\n\t);\n}\n\nProductVariantEditor.displayName = 'ProductVariantEditor';\n","import { Copy, Eye, ListChecks, Pencil, Plus, RefreshCw, Trash2 } from 'lucide-react';\nimport { Fragment, useCallback, useMemo, useState, type ReactNode } from 'react';\n\nimport { Badge } from '../../../base/badge';\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 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=\"sm\" 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} icon={RefreshCw}>\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 bulkToolbar = hasBulkControls ? (\n\t\t<Stack direction=\"horizontal\" gap=\"md\" justify=\"between\" className=\"product-variants-bulk-table--bulk-toolbar rounded-radius bg-muted/45 px-space-lg py-space-md\">\n\t\t\t<Stack direction=\"horizontal\" gap=\"md\">\n\t\t\t\t<Text size=\"xs\" type=\"secondary\">\n\t\t\t\t\t{strings.selectedLabel(selectedRows.length, variants.length)}\n\t\t\t\t</Text>\n\t\t\t\t{!!selectedRows.length && (\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\tsize=\"sm\"\n\t\t\t\t\t\tonClick={clearSelection}\n\t\t\t\t\t>\n\t\t\t\t\t\t{strings.clearSelectionLabel}\n\t\t\t\t\t</Button>\n\t\t\t\t)}\n\t\t\t</Stack>\n\t\t\t<Stack direction=\"horizontal\" gap=\"md\" justify=\"end\">\n\t\t\t\t{!!onBulkEdit && (\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=\"solid\"\n\t\t\t\t\t\tdisabled={!selectedRows.length}\n\t\t\t\t\t\tonClick={() => onBulkEdit(selectedRows)}\n\t\t\t\t\t\t// No disabled-opacity override: this sits beside the delete and\n\t\t\t\t\t\t// mark-active actions, which use the package-wide\n\t\t\t\t\t\t// `disabled:opacity-50`. Overriding it to 70 made one of three\n\t\t\t\t\t\t// equally-disabled toolbar buttons read as more available.\n\t\t\t\t\t\tclassName=\"bg-background text-foreground hover:bg-background/80\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{strings.bulkEditLabel}\n\t\t\t\t\t</Button>\n\t\t\t\t)}\n\t\t\t\t{!!onBulkDelete && (\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\tdisabled={!selectedRows.length}\n\t\t\t\t\t\tonClick={() => onBulkDelete(selectedRows)}\n\t\t\t\t\t\ticon={Trash2}\n\t\t\t\t\t\tclassName=\"text-muted-foreground hover:text-destructive disabled:text-muted-foreground/55\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{strings.bulkDeleteLabel} ({selectedRows.length})\n\t\t\t\t\t</Button>\n\t\t\t\t)}\n\t\t\t\t{!!onBulkApply && (\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\tdisabled={!selectedRows.length}\n\t\t\t\t\t\tonClick={() => onBulkApply(selectedRows)}\n\t\t\t\t\t\tclassName=\"text-muted-foreground disabled:text-muted-foreground/55\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{strings.bulkApplyLabel}\n\t\t\t\t\t</Button>\n\t\t\t\t)}\n\t\t\t\t{renderBulkActions?.(bulkContext)}\n\t\t\t</Stack>\n\t\t</Stack>\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 type=\"button\" onClick={onGenerateVariants} icon={RefreshCw}>\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\"\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/40\"\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\" style={{ width: '3.5rem' }} />}\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 style={{ width: '4.5rem' }} />}\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/70 bg-muted/45\">\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\" style={{ width: '3.5rem' }}>\n\t\t\t\t\t\t\t\t\t\t<Checkbox\n\t\t\t\t\t\t\t\t\t\t\tchecked={allRowsSelected}\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/70 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 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/70 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\" style={{ width: '3.5rem' }}>\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 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{renderCellContent('updated', variant.updatedAt, DEFAULT_CELL_DISPLAY, () => (\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Text size=\"xs\" type=\"secondary\">{renderFieldValue(variant.updatedAt)}</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\ticon={<ListChecks className=\"size-icon\" />}\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\tcontentClassName=\"mt-1\"\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 { ListFilter, Plus, RefreshCw, Search } from 'lucide-react';\nimport { useCallback, useMemo, useState } from 'react';\n\nimport { Button } from '../../../base/buttons';\nimport { ContentBlock } from '../../../base/display';\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\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=\"sm\" 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} icon={RefreshCw}>\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<ContentBlock\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\tcontentClassName=\"px-0 pb-0\"\n\t\t\tclassName={cn('product-variants-manager--component w-full', className)}\n\t\t>\n\t\t\t<Stack gap=\"none\" className=\"product-variants-manager--body\">\n\t\t\t\t<section className=\"product-variants-manager--options min-w-0 pb-space-lg\">\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<div className=\"product-variants-manager--controls border-t border-border/70 py-space-md\">\n\t\t\t\t\t<Stack direction=\"horizontal\" gap=\"md\" justify=\"between\">\n\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<Text type=\"secondary\" className=\"whitespace-nowrap\">\n\t\t\t\t\t\t\t\t{strings.groupByLabel}\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t{groupByOptions.length > 0 && (\n\t\t\t\t\t\t\t\t<Select\n\t\t\t\t\t\t\t\t\toptions={groupByOptions}\n\t\t\t\t\t\t\t\t\tvalue={resolvedGroupByOptionId}\n\t\t\t\t\t\t\t\t\tonValueChange={updateGroupByOptionId}\n\t\t\t\t\t\t\t\t\taria-label={strings.groupByLabel}\n\t\t\t\t\t\t\t\t\tclassName=\"min-w-32 bg-background\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t<Stack\n\t\t\t\t\t\t\tdirection=\"horizontal\"\n\t\t\t\t\t\t\tgap=\"sm\"\n\t\t\t\t\t\t\tjustify=\"end\"\n\t\t\t\t\t\t\twrap={false}\n\t\t\t\t\t\t\tclassName=\"product-variants-manager--controls-end\"\n\t\t\t\t\t\t>\n\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<Button\n\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t\t\t\ticonOnly\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={onSearchVariants}\n\t\t\t\t\t\t\t\t\taria-label={strings.searchLabel}\n\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>\n\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<Text tag=\"span\" size=\"pxs\" className=\"sr-only\">\n\t\t\t\t\t\t\t\t\t\t{strings.searchLabel}\n\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t</Button>\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\tsize=\"sm\"\n\t\t\t\t\t\t\t\t\ticonOnly\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={onFilterVariants}\n\t\t\t\t\t\t\t\t\taria-label={strings.filterLabel}\n\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>\n\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<Text tag=\"span\" size=\"pxs\" className=\"sr-only\">\n\t\t\t\t\t\t\t\t\t\t{strings.filterLabel}\n\t\t\t\t\t\t\t\t\t</Text>\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\t{controlsEnd}\n\t\t\t\t\t\t</Stack>\n\t\t\t\t\t</Stack>\n\t\t\t\t</div>\n\n\t\t\t\t<section className=\"product-variants-manager--variants min-w-0 pt-space-md\">\n\t\t\t\t\t<ProductVariantsBulkTable\n\t\t\t\t\t\tvariants={variants}\n\t\t\t\t\t\toptionGroups={optionGroups}\n\t\t\t\t\t\tgroupByOptionId={resolvedGroupByOptionId}\n\t\t\t\t\t\tvisibleColumns={visibleColumns}\n\t\t\t\t\t\toptionCombinationDisplay={optionCombinationDisplay}\n\t\t\t\t\t\tcellDisplay={cellDisplay}\n\t\t\t\t\t\tselectionMode={selectionMode}\n\t\t\t\t\t\trenderOptionCombination={renderOptionCombination}\n\t\t\t\t\t\trenderCell={renderCell}\n\t\t\t\t\t\tsurface=\"embedded\"\n\t\t\t\t\t\tselectedVariantIds={selectedVariantIds}\n\t\t\t\t\t\tdefaultSelectedVariantIds={defaultSelectedVariantIds}\n\t\t\t\t\t\tonSelectedVariantIdsChange={onSelectedVariantIdsChange}\n\t\t\t\t\t\tonVariantFieldChange={onVariantFieldChange}\n\t\t\t\t\t\tonVariantFieldBlur={onVariantFieldBlur}\n\t\t\t\t\t\tonCreateVariant={onCreateVariant}\n\t\t\t\t\t\tonGenerateVariants={onGenerateVariants}\n\t\t\t\t\t\tonSelectVariant={onSelectVariant}\n\t\t\t\t\t\tonEditVariant={onEditVariant}\n\t\t\t\t\t\tonDuplicateVariant={onDuplicateVariant}\n\t\t\t\t\t\tonDeleteVariant={onDeleteVariant}\n\t\t\t\t\t\tonBulkEdit={onBulkEdit}\n\t\t\t\t\t\tonBulkApply={onBulkApply}\n\t\t\t\t\t\tonBulkDelete={onBulkDelete}\n\t\t\t\t\t\trenderVariantActions={renderVariantActions}\n\t\t\t\t\t\trenderBulkActions={renderBulkActions}\n\t\t\t\t\t\tstrings={{\n\t\t\t\t\t\t\ttitle: strings.variantsTitle,\n\t\t\t\t\t\t\tgenerateLabel: strings.generateLabel,\n\t\t\t\t\t\t\t...variantsStrings,\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t</section>\n\t\t\t</Stack>\n\t\t</ContentBlock>\n\t);\n}\n\nProductVariantsManager.displayName = 'ProductVariantsManager';\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"products.js","names":["getPlainText","_Fragment","_Fragment","useDensityConfig","resolveComponentScale","cn","Button","DisplayLabel","focusRecipes","Grid","Stack","Card","Progress","useOverlayVisibility","ConfirmDialog","Value","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","Text","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","SecondaryValue","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';\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 size-2 shrink-0 rounded-full', {\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\">{metric.label}</DisplayLabel>\n\t\t\t</Stack>\n\t\t\t<Value 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 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 weight=\"semibold\">{strings.termsTitle}</Text>\n\t\t\t\t\t\t\t<MetadataList 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 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\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 { ChevronDown, GripVertical, Plus, PlusCircle, Trash2, X } from 'lucide-react';\nimport { Fragment, useCallback, useMemo, useState, type ReactNode } from 'react';\n\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';\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 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\">\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 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 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<span\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={cn(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'product-options-matrix--value inline-flex max-w-full items-center gap-space-xs rounded-radius bg-muted px-space-sm py-space-xs text-pxs font-medium leading-none text-muted-foreground',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvalue.disabled && 'opacity-50',\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>\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 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\tclassName={cn(fieldAffordanceRecipes.target, fieldAffordanceRecipes.focus, 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</span>\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 box-border block w-full cursor-pointer whitespace-normal rounded-inner border-0 bg-transparent p-0 text-start font-sans text-foreground 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=\"product-options-matrix--item-actions col-start-2 flex min-w-fit items-center gap-space-md justify-start @2xl/product-options-matrix:justify-end lg:col-start-auto\">\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 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 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 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\tclassName=\"h-1.5\"\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 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\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 { 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=\"product-variant-details--header-actions flex items-center gap-space-md\">\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 weight=\"semibold\">{strings.factsTitle}</Text>\n\t\t\t\t\t\t\t<MetadataList\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 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 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 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 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 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 { 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=\"sm\" 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\"\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\" style={{ width: '3.5rem' }} />}\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 style={{ width: '4.5rem' }} />}\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\" style={{ width: '3.5rem' }}>\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 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\" style={{ width: '3.5rem' }}>\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 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 { 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 = surface === 'flat' ? false : undefined,\n\tfooterDivider = surface === 'flat' ? false : undefined,\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=\"sm\" 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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"}
|