themelia-react-ui 2.0.0 → 2.0.2
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 +527 -0
- package/README.md +47 -14
- package/THIRD_PARTY_NOTICES.md +13 -0
- package/dist/accordion-Cjb6sx0G.js +208 -0
- package/dist/accordion-Cjb6sx0G.js.map +1 -0
- package/dist/action-menu-CllU52Mm.js +280 -0
- package/dist/action-menu-CllU52Mm.js.map +1 -0
- package/dist/affordance-geometry.generated-tF36bREk.js +140 -0
- package/dist/affordance-geometry.generated-tF36bREk.js.map +1 -0
- package/dist/ai-artifact-DvTwDVyL.js +1148 -0
- package/dist/ai-artifact-DvTwDVyL.js.map +1 -0
- package/dist/{app-shell-BE_j8-AT.js → app-shell-C4FhvCqF.js} +5 -5
- package/dist/{app-shell-BE_j8-AT.js.map → app-shell-C4FhvCqF.js.map} +1 -1
- package/dist/attachment-BxDfL2mw.js +246 -0
- package/dist/attachment-BxDfL2mw.js.map +1 -0
- package/dist/{auth-M3vGMgDR.js → auth-ax2BqjrI.js} +241 -235
- package/dist/auth-ax2BqjrI.js.map +1 -0
- package/dist/{avatar-djdaaQ_s.js → avatar-DAPlDvhJ.js} +67 -66
- package/dist/avatar-DAPlDvhJ.js.map +1 -0
- package/dist/badge-HpFqoqSY.js +93 -0
- package/dist/badge-HpFqoqSY.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 +50 -46
- package/dist/base/carousel.js.map +1 -1
- package/dist/base/cascader.js +69 -81
- 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 +2 -2
- package/dist/base/command.js +1 -1
- package/dist/base/copyable.js +1 -1
- package/dist/base/date-pickers.js +2 -2
- package/dist/base/display.js +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 +20 -20
- 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 +1 -1
- package/dist/base/repeaters.js +216 -220
- 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 +147 -137
- package/dist/base/signature-pad.js.map +1 -1
- package/dist/base/skeleton.js +1 -1
- package/dist/base/spinner.js +79 -2
- package/dist/base/spinner.js.map +1 -0
- 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 +46 -45
- 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-DnUJ21NQ.js +105 -0
- package/dist/batch-action-bar-DnUJ21NQ.js.map +1 -0
- package/dist/blocks/admin.js +171 -169
- package/dist/blocks/admin.js.map +1 -1
- package/dist/blocks/ai.js +308 -285
- package/dist/blocks/ai.js.map +1 -1
- package/dist/blocks/analytics/usage-card.js +1 -1
- package/dist/blocks/analytics.js +626 -589
- 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 +2051 -1329
- package/dist/blocks/commerce.js.map +1 -1
- package/dist/blocks/data-display.js +3 -2
- package/dist/blocks/onboarding.js +68 -58
- package/dist/blocks/onboarding.js.map +1 -1
- package/dist/blocks/planning.js +27 -26
- package/dist/blocks/planning.js.map +1 -1
- package/dist/blocks/timelines.js +1 -1
- package/dist/breadcrumbs-C-oqs1sQ.js +129 -0
- package/dist/breadcrumbs-C-oqs1sQ.js.map +1 -0
- package/dist/{button-R9CCoH7A.js → button-DVzspB_G.js} +15 -14
- package/dist/button-DVzspB_G.js.map +1 -0
- package/dist/{button-BS3KDg00.js → buttons-DPZekJFu.js} +208 -216
- package/dist/buttons-DPZekJFu.js.map +1 -0
- package/dist/cards-BaBZR-AU.js +68 -0
- package/dist/cards-BaBZR-AU.js.map +1 -0
- package/dist/{chart-DwYRKKc-.js → chart-ZOYyK2xG.js} +58 -55
- package/dist/chart-ZOYyK2xG.js.map +1 -0
- package/dist/checkbox-AWIhNhmo.js +36 -0
- package/dist/checkbox-AWIhNhmo.js.map +1 -0
- package/dist/choice-inputs-CNHvARCJ.js +770 -0
- package/dist/choice-inputs-CNHvARCJ.js.map +1 -0
- package/dist/code-block-DeneBJR_.js +185 -0
- package/dist/code-block-DeneBJR_.js.map +1 -0
- package/dist/{collapsible-oMUGM4tr.js → collapsible-C-_l4hpy.js} +4 -4
- package/dist/{collapsible-oMUGM4tr.js.map → collapsible-C-_l4hpy.js.map} +1 -1
- package/dist/{collection-content-Ys-OZOkY.js → collection-content-By56pLog.js} +3 -3
- package/dist/{collection-content-Ys-OZOkY.js.map → collection-content-By56pLog.js.map} +1 -1
- package/dist/combobox-C0EQW6dr.js +875 -0
- package/dist/combobox-C0EQW6dr.js.map +1 -0
- package/dist/combobox-xCQ2RMNE.js +309 -0
- package/dist/combobox-xCQ2RMNE.js.map +1 -0
- package/dist/{command-kPMPjIxJ.js → command-C25VMRII.js} +7 -7
- package/dist/{command-kPMPjIxJ.js.map → command-C25VMRII.js.map} +1 -1
- package/dist/{comments-You0Bzbr.js → comments-BYYlTA8E.js} +390 -379
- package/dist/comments-BYYlTA8E.js.map +1 -0
- package/dist/components/base/action-menu/action-menu.d.ts +21 -4
- 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/badge/badge.recipes.d.ts +5 -5
- 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/button-group.recipes.d.ts +1 -1
- package/dist/components/base/buttons/button.recipes.d.ts +2 -2
- package/dist/components/base/buttons/loader-button.d.ts +2 -1
- package/dist/components/base/cards/card.recipes.d.ts +2 -3
- package/dist/components/base/cards/partials/smart-card-skeleton.d.ts +3 -13
- package/dist/components/base/cards/smart-card.types.d.ts +11 -4
- package/dist/components/base/chart/chart.d.ts +2 -5
- package/dist/components/base/choice-inputs/checkbox.d.ts +2 -2
- package/dist/components/base/choice-inputs/choice-types.d.ts +18 -6
- package/dist/components/base/combobox/combobox.strings.d.ts +7 -0
- package/dist/components/base/combobox/index.d.ts +30 -4
- package/dist/components/base/display/alert-dialog.d.ts +6 -5
- package/dist/components/base/display/dialog.d.ts +4 -8
- package/dist/components/base/display/icon-badge/icon-badge.d.ts +1 -1
- package/dist/components/base/forms/form-sizing.d.ts +26 -15
- 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/index.d.ts +1 -1
- 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 +26 -3
- package/dist/components/base/navigation/pagination.d.ts +5 -2
- package/dist/components/base/popover/popover.recipes.d.ts +15 -1
- package/dist/components/base/sheet/sheet.d.ts +4 -8
- 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/table/index.d.ts +9 -2
- 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 +25 -3
- package/dist/components/base/value-inputs/index.d.ts +5 -5
- package/dist/components/base/value-inputs/tags-input.d.ts +36 -12
- package/dist/components/blocks/ai/ai-shimmer/ai-shimmer.d.ts +1 -1
- package/dist/components/blocks/ai/ai-shimmer/types.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 +2 -1
- 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 +45 -0
- package/dist/components/blocks/commerce/index.d.ts +13 -5
- 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/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-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 +12 -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/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/data-display/inline-stat/inline-stat.d.ts +16 -8
- package/dist/components/blocks/data-display/metadata/index.d.ts +30 -4
- package/dist/components/features/activities/partials/activity-marker.d.ts +6 -3
- 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/appointment-calendar/appointment-calendar.d.ts +5 -0
- package/dist/components/features/appointment-calendar/appointment-calendar.types.d.ts +220 -0
- package/dist/components/features/appointment-calendar/appointment-calendar.utils.d.ts +41 -0
- package/dist/components/features/appointment-calendar/index.d.ts +3 -0
- package/dist/components/features/appointment-calendar/partials/appointment-agenda.d.ts +32 -0
- package/dist/components/features/appointment-calendar/partials/appointment-month.d.ts +13 -0
- package/dist/components/features/combobox/combobox.strings.d.ts +15 -1
- package/dist/components/features/combobox/types.d.ts +4 -0
- package/dist/components/features/global-search/partials/global-search-group-heading.d.ts +15 -0
- 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 +6 -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/index.d.ts +1 -1
- package/dist/components/features/overlays/overlay-tone-icon.d.ts +3 -3
- package/dist/components/features/overlays/overlays.types.d.ts +20 -0
- 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/products.types.d.ts +9 -2
- 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 +7 -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 +54 -1
- 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/table-header.d.ts +1 -1
- package/dist/components/features/table/table.strings.d.ts +55 -1
- package/dist/components/features/table/table.types.d.ts +49 -11
- package/dist/components/features/theme-tweaker/theme-tweaker.types.d.ts +5 -0
- package/dist/components/layout/page/index.d.ts +1 -1
- package/dist/components/layout/page/page.types.d.ts +33 -36
- 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/number.d.ts +4 -2
- package/dist/components/primitives/value.d.ts +3 -1
- 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/text-link.d.ts +8 -3
- package/dist/components/ui/checkbox.d.ts +4 -3
- package/dist/components/ui/combobox.d.ts +6 -2
- package/dist/components/ui/item.d.ts +8 -8
- package/dist/components/ui/overlay.recipes.d.ts +0 -9
- package/dist/components/ui/switch.d.ts +2 -2
- package/dist/components/ui/tabs.d.ts +1 -1
- package/dist/{containers-D_L4mTVb.js → containers-Mu1LMGV1.js} +36 -35
- package/dist/containers-Mu1LMGV1.js.map +1 -0
- package/dist/{copyable-DDjTeW_j.js → copyable-ClBuk_UK.js} +6 -6
- package/dist/{copyable-DDjTeW_j.js.map → copyable-ClBuk_UK.js.map} +1 -1
- package/dist/data-display-DT_khPl_.js +971 -0
- package/dist/data-display-DT_khPl_.js.map +1 -0
- package/dist/{date-uf3z37Nm.js → date-DCrsDTZc.js} +5 -5
- package/dist/{date-uf3z37Nm.js.map → date-DCrsDTZc.js.map} +1 -1
- package/dist/date-picker-ay0Pha_a.js +1530 -0
- package/dist/date-picker-ay0Pha_a.js.map +1 -0
- package/dist/date-pickers-Ccw8DL2b.js +175 -0
- package/dist/date-pickers-Ccw8DL2b.js.map +1 -0
- package/dist/display-hAc1HjpI.js +344 -0
- package/dist/display-hAc1HjpI.js.map +1 -0
- package/dist/dropdown-menu-Cl4X7L5S.js +193 -0
- package/dist/dropdown-menu-Cl4X7L5S.js.map +1 -0
- package/dist/editable-text-recipe-Cn61kEcv.js +10 -0
- package/dist/editable-text-recipe-Cn61kEcv.js.map +1 -0
- package/dist/features/activities.js +478 -542
- package/dist/features/activities.js.map +1 -1
- package/dist/features/ai-chat.js +209 -199
- package/dist/features/ai-chat.js.map +1 -1
- package/dist/features/appointment-calendar.js +683 -0
- package/dist/features/appointment-calendar.js.map +1 -0
- package/dist/features/async-preview.js +109 -107
- 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 +30 -29
- package/dist/features/data-view.js.map +1 -1
- package/dist/features/email-composer/engine.js +1 -1
- package/dist/features/email-composer.js +285 -283
- package/dist/features/email-composer.js.map +1 -1
- package/dist/features/event-calendar.js +282 -273
- package/dist/features/event-calendar.js.map +1 -1
- package/dist/features/filters.js +1 -1
- package/dist/features/global-search.js +318 -318
- package/dist/features/global-search.js.map +1 -1
- package/dist/features/kanban.js +146 -147
- package/dist/features/kanban.js.map +1 -1
- package/dist/features/map.js +269 -268
- package/dist/features/map.js.map +1 -1
- package/dist/features/media-library.js +970 -863
- 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 +1137 -1124
- package/dist/features/products.js.map +1 -1
- package/dist/features/questionnaire.js +206 -194
- package/dist/features/questionnaire.js.map +1 -1
- package/dist/features/resource-assignment.js +24 -21
- 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 +35 -33
- package/dist/features/schema-form.js.map +1 -1
- package/dist/features/suggestions.js +3 -3
- package/dist/features/sync.js +11 -5
- package/dist/features/sync.js.map +1 -1
- package/dist/features/table.js +1 -1
- package/dist/features/theme-tweaker.js +501 -496
- package/dist/features/theme-tweaker.js.map +1 -1
- package/dist/feedback-BYIhtitP.js +239 -0
- package/dist/feedback-BYIhtitP.js.map +1 -0
- package/dist/field-affordance-recipes-DZhnIL_Y.js +41 -0
- package/dist/field-affordance-recipes-DZhnIL_Y.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-Da-gNPsE.js → filters-BGfvjP4d.js} +483 -472
- package/dist/filters-BGfvjP4d.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-VZRULhUK.js → form-field-CwH9y77i.js} +6 -5
- package/dist/form-field-CwH9y77i.js.map +1 -0
- package/dist/{form-sizing-uWP4lzVh.js → form-sizing-BdP_Mf5p.js} +45 -46
- package/dist/form-sizing-BdP_Mf5p.js.map +1 -0
- package/dist/{forms-DDeEnXSY.js → forms-B9G_xwzi.js} +22 -22
- package/dist/{forms-DDeEnXSY.js.map → forms-B9G_xwzi.js.map} +1 -1
- package/dist/forms-numeric-B_jraJaQ.js +906 -0
- package/dist/forms-numeric-B_jraJaQ.js.map +1 -0
- package/dist/{header-2ycNqGOR.js → header-CGXuhcRm.js} +164 -161
- package/dist/header-CGXuhcRm.js.map +1 -0
- package/dist/{hooks-DQ5SPwZw.js → hooks-Dkz0K2WT.js} +2 -2
- package/dist/{hooks-DQ5SPwZw.js.map → hooks-Dkz0K2WT.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-DYKIwvOV.js +55 -0
- package/dist/icon-badge-DYKIwvOV.js.map +1 -0
- package/dist/index.js +7 -7
- package/dist/input-CZw8iU99.js +21 -0
- package/dist/input-CZw8iU99.js.map +1 -0
- package/dist/input-DQdEd0YD.js +263 -0
- package/dist/input-DQdEd0YD.js.map +1 -0
- package/dist/interaction-recipes-XR9ZpVYL.js +25 -0
- package/dist/interaction-recipes-XR9ZpVYL.js.map +1 -0
- package/dist/item-K5_ghvze.js +275 -0
- package/dist/item-K5_ghvze.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 +72 -0
- package/dist/lib/editable-text-recipe.d.ts +4 -4
- package/dist/lib/field-affordance-recipes.d.ts +8 -3
- package/dist/lib/field-state-recipes.d.ts +9 -8
- package/dist/lib/focus-recipes.d.ts +24 -0
- package/dist/lib/interaction-recipes.d.ts +40 -0
- package/dist/lib/layer-recipes.d.ts +19 -0
- package/dist/lib/motion-recipes.d.ts +1 -0
- package/dist/lib/overlay-anatomy-recipes.d.ts +1 -0
- 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 +47 -7
- package/dist/lib/theme-mode-css.d.ts +7 -0
- package/dist/lib/token-merge.generated.d.ts +9 -6
- package/dist/lib/tone-recipes.d.ts +87 -0
- 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/types.d.ts +11 -2
- package/dist/lib/utils.js +1 -1
- package/dist/media-gallery-3zIVLMWH.js +203 -0
- package/dist/media-gallery-3zIVLMWH.js.map +1 -0
- package/dist/mentions-utuUvH1K.js +570 -0
- package/dist/mentions-utuUvH1K.js.map +1 -0
- package/dist/{message-YfFmbXNP.js → message-DZ_ruyUV.js} +7 -6
- package/dist/message-DZ_ruyUV.js.map +1 -0
- package/dist/metadata-list-8N16ZMW_.js +405 -0
- package/dist/metadata-list-8N16ZMW_.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-Bnotn4AQ.js +145 -0
- package/dist/navigation-Bnotn4AQ.js.map +1 -0
- package/dist/navigation-BzhHI3lo.js +269 -0
- package/dist/navigation-BzhHI3lo.js.map +1 -0
- package/dist/{navigation-row-recipes-DlU-4QYO.js → navigation-row-recipes-BFLCk_Aq.js} +2 -2
- package/dist/{navigation-row-recipes-DlU-4QYO.js.map → navigation-row-recipes-BFLCk_Aq.js.map} +1 -1
- package/dist/{number-CKRBYmZK.js → number-DbV1Dija.js} +36 -34
- package/dist/{number-CKRBYmZK.js.map → number-DbV1Dija.js.map} +1 -1
- package/dist/overflow-tab-bar-CWY7Nogn.js +282 -0
- package/dist/overflow-tab-bar-CWY7Nogn.js.map +1 -0
- package/dist/overlay.recipes-8GHqmlb4.js +6 -0
- package/dist/overlay.recipes-8GHqmlb4.js.map +1 -0
- package/dist/overlays-DNWmZrJ4.js +1001 -0
- package/dist/overlays-DNWmZrJ4.js.map +1 -0
- package/dist/page-Bgl1F560.js +224 -0
- package/dist/page-Bgl1F560.js.map +1 -0
- package/dist/page-header-commands-DOb6WsfD.js +126 -0
- package/dist/page-header-commands-DOb6WsfD.js.map +1 -0
- package/dist/pagination-BL25hu2s.js +158 -0
- package/dist/pagination-BL25hu2s.js.map +1 -0
- package/dist/{popover-Dcv_9jxr.js → popover-7_m66eYW.js} +11 -10
- package/dist/popover-7_m66eYW.js.map +1 -0
- package/dist/popover-menu-B9WWygpa.js +100 -0
- package/dist/popover-menu-B9WWygpa.js.map +1 -0
- package/dist/{popover.recipes-wmbvL8Ah.js → popover.recipes-D3j8R8Yp.js} +18 -11
- package/dist/popover.recipes-D3j8R8Yp.js.map +1 -0
- package/dist/{primitives-BHrwQXFC.js → primitives-BFK08r9M.js} +45 -44
- package/dist/primitives-BFK08r9M.js.map +1 -0
- package/dist/primitives.js +4 -4
- package/dist/{progress-Br9WTFya.js → progress-B1VnCT0K.js} +9 -9
- package/dist/{progress-Br9WTFya.js.map → progress-B1VnCT0K.js.map} +1 -1
- package/dist/{receipt-CV89q1fs.js → receipt-BVSOH3Xo.js} +9 -6
- package/dist/{receipt-CV89q1fs.js.map → receipt-BVSOH3Xo.js.map} +1 -1
- package/dist/rich-text-GOUyKQ-s.js +78 -0
- package/dist/rich-text-GOUyKQ-s.js.map +1 -0
- package/dist/rich-text-editor-cRLC-eBK.js +1196 -0
- package/dist/rich-text-editor-cRLC-eBK.js.map +1 -0
- package/dist/rich-text-editor-toolbar-DfXg0-VC.js +94 -0
- package/dist/rich-text-editor-toolbar-DfXg0-VC.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-DcI-M1UT.js +48 -0
- package/dist/scroll-area-DcI-M1UT.js.map +1 -0
- package/dist/{separator-Do5GWDYi.js → separator-BDV-Y648.js} +3 -3
- package/dist/{separator-Do5GWDYi.js.map → separator-BDV-Y648.js.map} +1 -1
- package/dist/{separator-BMEvwnSX.js → separator-Bom7NsGO.js} +2 -2
- package/dist/{separator-BMEvwnSX.js.map → separator-Bom7NsGO.js.map} +1 -1
- package/dist/services/actions/action-adapters.d.ts +18 -0
- package/dist/services/actions/index.d.ts +1 -1
- package/dist/services/actions.js +16 -4
- package/dist/services/actions.js.map +1 -1
- package/dist/settings-ybnjVwbd.js +171 -0
- package/dist/settings-ybnjVwbd.js.map +1 -0
- package/dist/sheet-CGpB3omz.js +211 -0
- package/dist/sheet-CGpB3omz.js.map +1 -0
- package/dist/{sidebar-Cb8WzOvE.js → sidebar-A0ElHINE.js} +17 -16
- package/dist/sidebar-A0ElHINE.js.map +1 -0
- package/dist/{sidebar-Crc9M9JV.js → sidebar-CPx_7YBa.js} +205 -203
- package/dist/sidebar-CPx_7YBa.js.map +1 -0
- package/dist/{skeleton-DVMXr15h.js → skeleton-Byjnt7qr.js} +9 -9
- package/dist/{skeleton-DVMXr15h.js.map → skeleton-Byjnt7qr.js.map} +1 -1
- package/dist/smart-card-DiC5aac3.js +604 -0
- package/dist/smart-card-DiC5aac3.js.map +1 -0
- package/dist/{structure-hzCW-XsV.js → structure-BmisBK-3.js} +2 -2
- package/dist/{structure-hzCW-XsV.js.map → structure-BmisBK-3.js.map} +1 -1
- 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-BweFy_P9.js +1530 -0
- package/dist/table-BweFy_P9.js.map +1 -0
- package/dist/table-DsfzoUia.js +175 -0
- package/dist/table-DsfzoUia.js.map +1 -0
- package/dist/tabs-CDocW5D1.js +191 -0
- package/dist/tabs-CDocW5D1.js.map +1 -0
- package/dist/text-inputs-f9Ia-aCi.js +353 -0
- package/dist/text-inputs-f9Ia-aCi.js.map +1 -0
- package/dist/theme-mode-css-BB-_RYab.js +14 -0
- package/dist/theme-mode-css-BB-_RYab.js.map +1 -0
- package/dist/theme-scope-BJ6eE2xt.js +50 -0
- package/dist/theme-scope-BJ6eE2xt.js.map +1 -0
- package/dist/theme.css +285 -228
- package/dist/themes/green.css +16 -12
- package/dist/timelines-CwM_9IhD.js +457 -0
- package/dist/timelines-CwM_9IhD.js.map +1 -0
- package/dist/tone-recipes-BPsRAvhu.js +73 -0
- package/dist/tone-recipes-BPsRAvhu.js.map +1 -0
- package/dist/tooltip-yiRJUFjp.js +111 -0
- package/dist/tooltip-yiRJUFjp.js.map +1 -0
- package/dist/{tree-BotPlyiD.js → tree-WnKQzwbq.js} +69 -67
- package/dist/tree-WnKQzwbq.js.map +1 -0
- package/dist/typography/rich-text.js +1 -1
- package/dist/typography-UTnveOEy.js +117 -0
- package/dist/typography-UTnveOEy.js.map +1 -0
- package/dist/typography.js +2 -2
- package/dist/{ui-provider-D2_TeLqw.js → ui-provider-C_U0Xma4.js} +13 -5
- package/dist/ui-provider-C_U0Xma4.js.map +1 -0
- package/dist/ui-provider.js +3 -3
- package/dist/{upload-B0WHW7ak.js → upload-CXyxmQBP.js} +210 -209
- package/dist/upload-CXyxmQBP.js.map +1 -0
- package/dist/{upload-queue-BHZ_wBfd.js → upload-queue-Boscubn9.js} +111 -111
- package/dist/upload-queue-Boscubn9.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-U0YBLTNT.js → usage-card-BhO5eqkX.js} +45 -29
- package/dist/usage-card-BhO5eqkX.js.map +1 -0
- package/dist/{utils-Cospvlj1.js → utils-BRhFDwuU.js} +114 -67
- package/dist/utils-BRhFDwuU.js.map +1 -0
- package/dist/value-inputs-DXPDjvBU.js +963 -0
- package/dist/value-inputs-DXPDjvBU.js.map +1 -0
- package/dist/{value-typography-Deb3yQZg.js → value-typography-BP8OG6h5.js} +2 -2
- package/dist/{value-typography-Deb3yQZg.js.map → value-typography-BP8OG6h5.js.map} +1 -1
- package/dist/workspace-Cdrg7k9f.js +408 -0
- package/dist/workspace-Cdrg7k9f.js.map +1 -0
- package/docs/consumer-skill/SKILL.md +21 -22
- package/docs/consumer-skill/examples/app-layout.tsx +1 -1
- package/docs/consumer-skill/examples/composition.tsx +3 -3
- package/docs/consumer-skill/examples/detail.tsx +59 -12
- package/docs/consumer-skill/examples/edit.tsx +1 -1
- package/docs/consumer-skill/examples/receipt.tsx +2 -2
- package/docs/consumer-skill/examples/scoped-directory.tsx +1 -1
- 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 +58 -13
- package/docs/consumer-skill/references/design-contract.md +12 -3
- package/docs/consumer-skill/references/installation.md +11 -1
- package/docs/consumer-skill/references/integration.md +4 -3
- package/docs/consumer-skill/references/public-api.json +956 -453
- package/docs/consumer-skill/references/review.md +32 -5
- package/docs/consumer-skill/references/theming.md +78 -9
- package/docs/consumer-skill/references/tokens.json +1 -1
- package/docs/consumer-skill/references/workflows.md +54 -10
- package/docs/consumer-skill/scripts/composition-policy.mjs +42 -11
- package/docs/consumer-skill/scripts/surface-policy.mjs +150 -5
- package/package.json +17 -5
- package/dist/accordion-CQXVcd7Q.js +0 -205
- package/dist/accordion-CQXVcd7Q.js.map +0 -1
- package/dist/action-menu-BTpyPWJ2.js +0 -264
- package/dist/action-menu-BTpyPWJ2.js.map +0 -1
- package/dist/affordance-geometry.generated-CCIXb2A1.js +0 -68
- package/dist/affordance-geometry.generated-CCIXb2A1.js.map +0 -1
- package/dist/ai-artifact-2PQ2fItc.js +0 -1112
- package/dist/ai-artifact-2PQ2fItc.js.map +0 -1
- package/dist/attachment-q69dlt5Y.js +0 -244
- package/dist/attachment-q69dlt5Y.js.map +0 -1
- package/dist/auth-M3vGMgDR.js.map +0 -1
- package/dist/avatar-djdaaQ_s.js.map +0 -1
- package/dist/badge-0tATj-tW.js +0 -92
- package/dist/badge-0tATj-tW.js.map +0 -1
- package/dist/breadcrumbs-BG_FfMK4.js +0 -128
- package/dist/breadcrumbs-BG_FfMK4.js.map +0 -1
- package/dist/button-BS3KDg00.js.map +0 -1
- package/dist/button-R9CCoH7A.js.map +0 -1
- package/dist/buttons-DS0ZIwJ_.js +0 -99
- package/dist/buttons-DS0ZIwJ_.js.map +0 -1
- package/dist/cards-QoJ4syG9.js +0 -66
- package/dist/cards-QoJ4syG9.js.map +0 -1
- package/dist/chart-DwYRKKc-.js.map +0 -1
- package/dist/checkbox-B7ygNTYp.js +0 -35
- package/dist/checkbox-B7ygNTYp.js.map +0 -1
- package/dist/choice-inputs-DrJ17tpL.js +0 -752
- package/dist/choice-inputs-DrJ17tpL.js.map +0 -1
- package/dist/code-block-CD0B7M93.js +0 -183
- package/dist/code-block-CD0B7M93.js.map +0 -1
- package/dist/combobox-6dvVny2q.js +0 -272
- package/dist/combobox-6dvVny2q.js.map +0 -1
- package/dist/combobox-CB7039j7.js +0 -865
- package/dist/combobox-CB7039j7.js.map +0 -1
- package/dist/comments-You0Bzbr.js.map +0 -1
- package/dist/components/layout/page/partials/page-header-commands.d.ts +0 -13
- package/dist/containers-D_L4mTVb.js.map +0 -1
- package/dist/data-display-3xWQUnMA.js +0 -1335
- package/dist/data-display-3xWQUnMA.js.map +0 -1
- package/dist/date-picker-DrDFj8Lo.js +0 -1527
- package/dist/date-picker-DrDFj8Lo.js.map +0 -1
- package/dist/date-pickers-CnFCb0n2.js +0 -174
- package/dist/date-pickers-CnFCb0n2.js.map +0 -1
- package/dist/display-DrdvPwF0.js +0 -343
- package/dist/display-DrdvPwF0.js.map +0 -1
- package/dist/dropdown-menu-CURh59jb.js +0 -193
- package/dist/dropdown-menu-CURh59jb.js.map +0 -1
- package/dist/editable-text-recipe-Bkm6wKHp.js +0 -10
- package/dist/editable-text-recipe-Bkm6wKHp.js.map +0 -1
- package/dist/feedback-C7nR0UtT.js +0 -232
- package/dist/feedback-C7nR0UtT.js.map +0 -1
- package/dist/field-affordance-recipes-CkOCdE2y.js +0 -46
- package/dist/field-affordance-recipes-CkOCdE2y.js.map +0 -1
- package/dist/field-state-recipes-C-MFBX_8.js +0 -11
- package/dist/field-state-recipes-C-MFBX_8.js.map +0 -1
- package/dist/filters-Da-gNPsE.js.map +0 -1
- package/dist/form-field-VZRULhUK.js.map +0 -1
- package/dist/form-sizing-uWP4lzVh.js.map +0 -1
- package/dist/forms-numeric-D3CO60IF.js +0 -905
- package/dist/forms-numeric-D3CO60IF.js.map +0 -1
- package/dist/header-2ycNqGOR.js.map +0 -1
- package/dist/icon-badge-DKlaKXoo.js +0 -53
- package/dist/icon-badge-DKlaKXoo.js.map +0 -1
- package/dist/input-BoLm9Hks.js +0 -20
- package/dist/input-BoLm9Hks.js.map +0 -1
- package/dist/input-DhQdBnV3.js +0 -255
- package/dist/input-DhQdBnV3.js.map +0 -1
- package/dist/item-xzh8Df65.js +0 -264
- package/dist/item-xzh8Df65.js.map +0 -1
- package/dist/media-gallery-DQUQ0m3O.js +0 -201
- package/dist/media-gallery-DQUQ0m3O.js.map +0 -1
- package/dist/mentions-DwnO1hh4.js +0 -564
- package/dist/mentions-DwnO1hh4.js.map +0 -1
- package/dist/message-YfFmbXNP.js.map +0 -1
- package/dist/navigation-Cbp5V8gG.js +0 -264
- package/dist/navigation-Cbp5V8gG.js.map +0 -1
- package/dist/navigation-Cs1npsPm.js +0 -300
- package/dist/navigation-Cs1npsPm.js.map +0 -1
- package/dist/overlay.recipes-CNO2S9V6.js +0 -34
- package/dist/overlay.recipes-CNO2S9V6.js.map +0 -1
- package/dist/overlays-DhZO7N-I.js +0 -994
- package/dist/overlays-DhZO7N-I.js.map +0 -1
- package/dist/page-C6R_8jFt.js +0 -325
- package/dist/page-C6R_8jFt.js.map +0 -1
- package/dist/page-header-hUTzcRZX.js +0 -112
- package/dist/page-header-hUTzcRZX.js.map +0 -1
- package/dist/pagination-Cm0jqa3I.js +0 -149
- package/dist/pagination-Cm0jqa3I.js.map +0 -1
- package/dist/popover-Dcv_9jxr.js.map +0 -1
- package/dist/popover-menu-DnRFKnHP.js +0 -99
- package/dist/popover-menu-DnRFKnHP.js.map +0 -1
- package/dist/popover.recipes-wmbvL8Ah.js.map +0 -1
- package/dist/primitives-BHrwQXFC.js.map +0 -1
- package/dist/rich-text-editor-CF8QYt5p.js +0 -574
- package/dist/rich-text-editor-CF8QYt5p.js.map +0 -1
- package/dist/rich-text-editor.recipes-CnrbmTS1.js +0 -81
- package/dist/rich-text-editor.recipes-CnrbmTS1.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/rich-text-j-FGAeZW.js +0 -32
- package/dist/rich-text-j-FGAeZW.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-DRdr16Pt.js +0 -47
- package/dist/scroll-area-DRdr16Pt.js.map +0 -1
- package/dist/settings-DHk0L2MF.js +0 -161
- package/dist/settings-DHk0L2MF.js.map +0 -1
- package/dist/sheet-DRFNY1_D.js +0 -207
- package/dist/sheet-DRFNY1_D.js.map +0 -1
- package/dist/sidebar-Cb8WzOvE.js.map +0 -1
- package/dist/sidebar-Crc9M9JV.js.map +0 -1
- package/dist/smart-card-Bek-TwUp.js +0 -599
- package/dist/smart-card-Bek-TwUp.js.map +0 -1
- package/dist/spinner-CmTAbEp0.js +0 -80
- package/dist/spinner-CmTAbEp0.js.map +0 -1
- package/dist/surface-recipes-DOdoBXGm.js +0 -28
- package/dist/surface-recipes-DOdoBXGm.js.map +0 -1
- package/dist/table-D6zKeYQX.js +0 -162
- package/dist/table-D6zKeYQX.js.map +0 -1
- package/dist/table-Dn4XSrSB.js +0 -1444
- package/dist/table-Dn4XSrSB.js.map +0 -1
- package/dist/tabs-Dk8E_knt.js +0 -189
- package/dist/tabs-Dk8E_knt.js.map +0 -1
- package/dist/text-inputs-BFpku0Qd.js +0 -331
- package/dist/text-inputs-BFpku0Qd.js.map +0 -1
- package/dist/theme-scope-kStaAer0.js +0 -39
- package/dist/theme-scope-kStaAer0.js.map +0 -1
- package/dist/timelines-CxuAFIc2.js +0 -439
- package/dist/timelines-CxuAFIc2.js.map +0 -1
- package/dist/tree-BotPlyiD.js.map +0 -1
- package/dist/typography-CAr3dQhX.js +0 -116
- package/dist/typography-CAr3dQhX.js.map +0 -1
- package/dist/ui-provider-D2_TeLqw.js.map +0 -1
- package/dist/upload-B0WHW7ak.js.map +0 -1
- package/dist/upload-queue-BHZ_wBfd.js.map +0 -1
- package/dist/usage-card-U0YBLTNT.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-Cospvlj1.js.map +0 -1
- package/dist/value-inputs-CjfzGMsN.js +0 -854
- package/dist/value-inputs-CjfzGMsN.js.map +0 -1
- package/dist/workspace-YoFjXi6i.js +0 -394
- package/dist/workspace-YoFjXi6i.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","Text","Button","Grid","Stack","Card","Progress","useOverlayVisibility","ConfirmDialog","Value","SecondaryValue","Percent","Badge","Separator","fieldAffordanceRecipes","Input","FormField","Textarea","Select","Switch","Checkbox","ContentBlock","segmentedControlRecipes","controlGroupHeightClasses","ItemMedia","ItemDescription","ItemActions","ItemGroup","ItemContent","Item","ItemTitle","TableRow","TableCell","TableBody","TableHead","TableHeader","Table","InlineStat","EmptyState","MetadataList","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","DisplayLabel","ProductRowActions","actions","item","PRODUCT_ROW_CONTENT","PRODUCT_ROW_TITLE","PRODUCT_ROW_ACTIONS","ProductRowHeading","title","label","badge","ProductRowSelect","onSelect","ProductStructureMetricRow","ProductReadinessRow","state","select","actionFallback","ProductOperationRow","ProductSummaryRow","values","actionLabel","ProductContractOverview","stringsProp","strings","useStrings","hasContent","metrics","terms","rules","headerAction","onOpenContract","onEditContract","onCreateRule","Plus","onSelectRule","rule","onEdit","onEditRule","onDelete","onDeleteRule","ruleActions","Eye","Pencil","Trash2","rowActions","renderRuleActions","empty","ProductDetailsCard","onEditDetails","description","metadata","media","ProductOptionActionMenu","onSelectOption","option","onEditOption","onDeleteOption","renderOptionActions","menuLabel","ProductOperationsCard","onCreateOperation","items","onSelectOperation","onEditOperation","onDeleteOperation","operationActions","renderOperationActions","renderItem","getPlainText$1","isScalarText","getOptionEditLabel","optionName","prefix","getOptionDraft","ProductOptionsMatrix","showHeaderProp","isCollapsedControlled","collapsedOptionIds","internalCollapsedOptionIds","setInternalCollapsedOptionIds","useState","defaultCollapsedOptionIds","resolvedCollapsedOptionIds","collapsedOptionIdSet","useMemo","supportsInlineEditing","editingOptionId","defaultEditingOptionId","onEditingOptionIdChange","onOptionNameChange","onValueLabelChange","onDoneEditingOption","onSaveEditingOption","onCancelEditingOption","isEditingControlled","internalEditingOptionId","setInternalEditingOptionId","draftByOptionId","setDraftByOptionId","resolvedEditingOptionId","hasGroups","optionGroups","showPanelHeader","surface","showCreateRow","onCreateOption","updateCollapsedOptionIds","useCallback","nextIds","onCollapsedOptionIdsChange","toggleCollapsed","id","updateEditingOptionId","nextId","startEditing","current","getResolvedDraft","updateDraft","updater","cancelEditing","draft","_removed","rest","commitEditing","originalValues","originalValueIds","draftValueIds","draftValue","onAddValue","onDeleteValue","removeValuesConfirm","pendingSave","setPendingSave","saveEditing","removed","confirmDelete","deleteOption","deleteOptionConfirm","pendingDeleteOption","setPendingDeleteOption","requestDeleteOption","panelHeader","content","isCollapsed","isEditing","canEdit","canDelete","canAddValue","optionDraft","renderedActions","optionIndex","menuActions","defaultActions","showInlineActions","resolvedActions","GripVertical","nextName","event","nextLabel","nextIndex","optionSummary","deleteValue","renderedValue","renderValue","Fragment","X","showCollapseControls","ChevronDown","showVariantToggle","onToggleUsedForVariants","checked","PlusCircle","interpolateString","ProductOptionsSummary","hasOptionActions","cardActions","onManageOptions","SlidersHorizontal","options","renderOption","ProductPoliciesCard","onCreatePolicy","policies","onSelectPolicy","policy","onEditPolicy","onDeletePolicy","policyActions","renderPolicyActions","renderPolicy","ProductQuotePreviewCard","hasBreakdown","subtotal","tax","discount","onCreateLine","onOpenQuote","lines","onSelectLine","line","onEditLine","onDeleteLine","lineActions","renderLineActions","ProductReadinessCard","completion","score","onCreateReadinessItem","summary","scoreLabel","onSelectReadinessItem","onEditReadinessItem","onDeleteReadinessItem","readinessActions","renderReadinessItemActions","ProductStructureCard","onCreateMetric","onSelectMetric","onEditMetric","onDeleteMetric","metricActions","renderMetricActions","ProductVariantNameCell","variant","channelsLabel","ProductVariantValueCell","emphasis","ProductVariantsTable","renderVariantActions","actionsList","onSelectVariant","onEditVariant","onDuplicateVariant","Copy","onDeleteVariant","columns","baseColumns","row","onCreateVariant","variants","ProductOverview","hasRail","readiness","structure","operations","quote","slots","mainClassName","details","contract","railClassName","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","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","hasRowActions","tableColumnCount","updateSelection","nextRows","clearSelection","toggleRow","toggleAll","bulkContext","onGenerateVariants","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\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 '../../../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}>\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 '../../../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}>\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\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\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';\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 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/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\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 : 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\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\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\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\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';\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 } 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\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\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, 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}>\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\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 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/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{/* 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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"}
|
|
1
|
+
{"version":3,"file":"products.js","names":["getPlainText","_Fragment","_Fragment","useDensityConfig","resolveComponentScale","cn","Button","Text","DisplayLabel","focusRecipes","Grid","Stack","dotRecipes","Card","Progress","useOverlayVisibility","ConfirmDialog","interactionRecipes","SecondaryValue","Percent","Badge","BatchActionBar","Separator","fieldAffordanceRecipes","Input","FormField","Textarea","Switch","Select","Checkbox","ContentBlock","segmentedControlRecipes","controlGroupHeightClasses","ItemMedia","ItemDescription","ItemActions","ItemGroup","ItemContent","Item","ItemTitle","MetadataList","TableRow","TableCell","TableBody","TableHead","TableHeader","Table","InlineStat","EmptyState","DataTableActions","DataTable","Fragment$1","defaultProductReadinessCardStrings","defaultProductStructureCardStrings","defaultProductOperationsCardStrings","defaultProductDetailsCardStrings","defaultProductContractOverviewStrings","defaultProductOptionsSummaryStrings","defaultProductOptionActionMenuStrings","defaultProductOptionsMatrixStrings","defaultProductQuotePreviewCardStrings","defaultProductPoliciesCardStrings","defaultProductVariantsTableStrings","defaultProductVariantsBulkTableStrings","count","total","index","defaultProductVariantsManagerStrings","defaultProductVariantActionMenuStrings","defaultProductVariantDetailsStrings","defaultProductVariantEditorStrings","defaultProductOverviewStrings","ProductEmptyState","action","className","PRODUCT_TONE_BADGE","PRODUCT_TONE_TEXT","PRODUCT_STATUS_TONES","isProductStatusTone","tone","clampProductPercent","value","ProductToneDot","ProductMetricTile","icon","metric","Value","ProductRowActions","actions","item","PRODUCT_ROW_CONTENT","PRODUCT_ROW_TITLE","PRODUCT_ROW_ACTIONS","ProductRowHeading","title","label","badge","ProductRowSelect","onSelect","ProductStructureMetricRow","ProductReadinessRow","state","select","actionFallback","ProductOperationRow","ProductSummaryRow","values","actionLabel","ProductContractOverview","stringsProp","strings","useStrings","hasContent","metrics","terms","rules","headerAction","onOpenContract","onEditContract","onCreateRule","Plus","onSelectRule","rule","onEdit","onEditRule","onDelete","onDeleteRule","ruleActions","Eye","Pencil","Trash2","rowActions","renderRuleActions","empty","ProductDetailsCard","onEditDetails","description","metadata","media","ProductOptionActionMenu","onSelectOption","option","onEditOption","onDeleteOption","renderOptionActions","menuLabel","ProductOperationsCard","onCreateOperation","items","onSelectOperation","onEditOperation","onDeleteOperation","operationActions","renderOperationActions","renderItem","getPlainText$1","isScalarText","getOptionEditLabel","optionName","prefix","getOptionDraft","ProductOptionsMatrix","showHeaderProp","isCollapsedControlled","collapsedOptionIds","internalCollapsedOptionIds","setInternalCollapsedOptionIds","useState","defaultCollapsedOptionIds","resolvedCollapsedOptionIds","collapsedOptionIdSet","useMemo","supportsInlineEditing","editingOptionId","defaultEditingOptionId","onEditingOptionIdChange","onOptionNameChange","onValueLabelChange","onDoneEditingOption","onSaveEditingOption","onCancelEditingOption","isEditingControlled","internalEditingOptionId","setInternalEditingOptionId","draftByOptionId","setDraftByOptionId","resolvedEditingOptionId","hasGroups","optionGroups","showPanelHeader","surface","showCreateRow","onCreateOption","updateCollapsedOptionIds","useCallback","nextIds","onCollapsedOptionIdsChange","toggleCollapsed","id","updateEditingOptionId","nextId","startEditing","current","getResolvedDraft","updateDraft","updater","cancelEditing","draft","_removed","rest","commitEditing","originalValues","originalValueIds","draftValueIds","draftValue","onAddValue","onDeleteValue","removeValuesConfirm","pendingSave","setPendingSave","saveEditing","removed","confirmDelete","deleteOption","deleteOptionConfirm","pendingDeleteOption","setPendingDeleteOption","requestDeleteOption","panelHeader","content","isCollapsed","isEditing","canEdit","canDelete","canAddValue","optionDraft","renderedActions","optionIndex","menuActions","defaultActions","showInlineActions","resolvedActions","GripVertical","nextName","event","nextLabel","nextIndex","optionSummary","deleteValue","renderedValue","renderValue","Fragment","X","showCollapseControls","ChevronDown","showVariantToggle","onToggleUsedForVariants","checked","PlusCircle","interpolateString","ProductOptionsSummary","hasOptionActions","cardActions","onManageOptions","SlidersHorizontal","options","renderOption","ProductPoliciesCard","onCreatePolicy","policies","onSelectPolicy","policy","onEditPolicy","onDeletePolicy","policyActions","renderPolicyActions","renderPolicy","ProductQuotePreviewCard","hasBreakdown","subtotal","tax","discount","onCreateLine","onOpenQuote","lines","onSelectLine","line","onEditLine","onDeleteLine","lineActions","renderLineActions","ProductReadinessCard","completion","score","onCreateReadinessItem","summary","scoreLabel","onSelectReadinessItem","onEditReadinessItem","onDeleteReadinessItem","readinessActions","renderReadinessItemActions","ProductStructureCard","onCreateMetric","onSelectMetric","onEditMetric","onDeleteMetric","metricActions","renderMetricActions","ProductVariantNameCell","variant","channelsLabel","ProductVariantValueCell","emphasis","ProductVariantsTable","renderVariantActions","actionsList","onSelectVariant","onEditVariant","onDuplicateVariant","Copy","onDeleteVariant","columns","baseColumns","row","onCreateVariant","variants","ProductOverview","hasRail","readiness","structure","operations","quote","slots","mainClassName","details","contract","railClassName","productVariantMenuActions","ProductVariantActionMenu","onDuplicate","onClick","isPresent","getDefaultMetadata","labels","ProductVariantDetails","resolvedMetadata","renderActions","hasCustomActions","onBack","ArrowLeft","selectedOptions","renderMetadata","optionItems","toSelectOptions","choices","choice","ProductVariantEditor","valueProp","formId","useId","isControlled","internalValue","setInternalValue","defaultValue","internalSubmitting","setInternalSubmitting","resolvedSubmitting","submitting","isDisabled","disabled","updateValue","next","onValueChange","updateField","field","nextValue","updateOption","handleSubmit","onSubmit","error","defaultFooter","onCancel","hasDefaultFooter","statusOptions","optionFields","fieldValue","hasChoices","footerSlot","DEFAULT_VISIBLE_COLUMNS","DEFAULT_OPTION_COMBINATION_DISPLAY","DEFAULT_CELL_DISPLAY","DEFAULT_SELECTION_MODE","getPlainText","getOptionValue","directValue","valueId","getVariantName","getVariantOptionSummary","getOptionCombinationLabel","getGroupLabel","selectedIdsToRows","ids","rowById","renderFieldValue","hasCellValue","isEditableField","column","resolveCellDisplay","display","getFieldChangeContext","renderVariantCellValue","plainValue","onBlur","Primitive","ProductVariantsBulkTable","isSelectionControlled","selectedVariantIds","internalSelectedIds","setInternalSelectedIds","defaultSelectedVariantIds","hasBulkActions","renderBulkActions","onBulkEdit","onBulkApply","onBulkDelete","isSelectable","selectionMode","onSelectedVariantIdsChange","selectedIds","selectedRows","selectedIdSet","visibleColumnSet","visibleColumns","groupByOption","groupByOptionId","rowIndexById","orderedVariants","valueOrder","aValueId","a","bValueId","b","aOrder","bOrder","resolvedAOrder","resolvedBOrder","groupCounts","counts","hasBulkControls","hasRows","allRowsSelected","someRowsSelected","selectAllRef","useRef","hasRowActions","tableColumnCount","updateSelection","nextRows","clearSelection","toggleRow","toggleAll","bulkContext","onGenerateVariants","customBulkActions","bulkToolbar","displayIndex","groupLabel","previousVariant","previousGroupLabel","shouldRenderGroup","isSelected","actionContext","summaryOptionGroups","groupedVariantName","variantName","optionLabel","optionLabelMatchesVariantName","createCellContext","onVariantFieldChange","onVariantFieldBlur","renderCellContent","context","rendered","renderCell","fallback","shouldRenderOptionCombination","optionCombinationDisplay","renderedOptionCombination","renderOptionCombination","defaultRowActions","valueIndex","cellDisplay","ProductVariantsManager","size","defaultScale","groupableOptions","fallbackGroupByOptionId","isGroupByControlled","internalGroupByOptionId","setInternalGroupByOptionId","defaultGroupByOptionId","resolvedGroupByOptionId","groupByOptions","updateGroupByOptionId","matchedOption","onGroupByOptionIdChange","optionsStrings","onSearchVariants","Search","onFilterVariants","ListFilter","controlsEnd","variantsStrings"],"sources":["../../src/components/features/products/products.strings.ts","../../src/components/features/products/partials/product-empty-state.tsx","../../src/components/features/products/partials/product-tone.tsx","../../src/components/features/products/partials/product-metric-tile.tsx","../../src/components/features/products/partials/product-actions.tsx","../../src/components/features/products/partials/product-rows.tsx","../../src/components/features/products/components/product-contract-overview.tsx","../../src/components/features/products/components/product-details-card.tsx","../../src/components/features/products/components/product-option-action-menu.tsx","../../src/components/features/products/components/product-operations-card.tsx","../../src/components/features/products/components/product-options-matrix.tsx","../../src/components/features/products/components/product-options-summary.tsx","../../src/components/features/products/components/product-policies-card.tsx","../../src/components/features/products/components/product-quote-preview-card.tsx","../../src/components/features/products/components/product-readiness-card.tsx","../../src/components/features/products/components/product-structure-card.tsx","../../src/components/features/products/components/product-variants-table.tsx","../../src/components/features/products/components/product-overview.tsx","../../src/components/features/products/components/product-variant-action-menu.tsx","../../src/components/features/products/components/product-variant-details.tsx","../../src/components/features/products/components/product-variant-editor.tsx","../../src/components/features/products/components/product-variants-bulk-table.tsx","../../src/components/features/products/components/product-variants-manager.tsx"],"sourcesContent":["export interface ProductReadinessCardStrings {\n\t/** Surface title. */\n\ttitle: string;\n\t/** Supporting copy shown under the label. */\n\tdescription: string;\n\tscoreLabel: string;\n\tprogressLabel: string;\n\tcreateLabel: string;\n\teditLabel: string;\n\tdeleteLabel: string;\n\tactionsLabel: string;\n\temptyTitle: string;\n\temptyDescription: string;\n\tactionLabel: string;\n}\n\nexport const defaultProductReadinessCardStrings: ProductReadinessCardStrings = {\n\ttitle: 'Readiness',\n\tdescription: 'Publishing checks and operational setup.',\n\tscoreLabel: 'Overall readiness',\n\tprogressLabel: 'Readiness progress',\n\tcreateLabel: 'Add check',\n\teditLabel: 'Edit check',\n\tdeleteLabel: 'Delete check',\n\tactionsLabel: 'Check actions',\n\temptyTitle: 'No readiness checks',\n\temptyDescription: 'Pass readiness items from your product workflow to show progress.',\n\tactionLabel: 'Open',\n};\n\nexport interface ProductStructureCardStrings {\n\t/** Surface title. */\n\ttitle: string;\n\t/** Supporting copy shown under the label. */\n\tdescription: string;\n\tcreateLabel: string;\n\tviewLabel: string;\n\teditLabel: string;\n\tdeleteLabel: string;\n\tactionsLabel: string;\n\temptyTitle: string;\n\temptyDescription: string;\n}\n\nexport const defaultProductStructureCardStrings: ProductStructureCardStrings = {\n\ttitle: 'Structure',\n\tdescription: 'Media, taxonomy, options, and content coverage.',\n\tcreateLabel: 'Add metric',\n\tviewLabel: 'Open',\n\teditLabel: 'Edit metric',\n\tdeleteLabel: 'Delete metric',\n\tactionsLabel: 'Metric actions',\n\temptyTitle: 'No structure metrics',\n\temptyDescription: 'Pass structure metrics to summarize the product setup.',\n};\n\nexport interface ProductOperationsCardStrings {\n\t/** Surface title. */\n\ttitle: string;\n\t/** Supporting copy shown under the label. */\n\tdescription: string;\n\tcreateLabel: string;\n\teditLabel: string;\n\tdeleteLabel: string;\n\tactionsLabel: string;\n\temptyTitle: string;\n\temptyDescription: string;\n\tactionLabel: string;\n}\n\nexport const defaultProductOperationsCardStrings: ProductOperationsCardStrings = {\n\ttitle: 'Operations',\n\tdescription: 'Availability, channels, service rules, and fulfilment signals.',\n\tcreateLabel: 'Add signal',\n\teditLabel: 'Edit signal',\n\tdeleteLabel: 'Delete signal',\n\tactionsLabel: 'Signal actions',\n\temptyTitle: 'No operational signals',\n\temptyDescription: 'Pass operational rows to show channel and availability health.',\n\tactionLabel: 'Open',\n};\n\nexport interface ProductDetailsCardStrings {\n\t/** Surface title. */\n\ttitle: string;\n\t/** Supporting copy shown under the label. */\n\tdescription: string;\n\teditLabel: string;\n\temptyTitle: string;\n\temptyDescription: string;\n}\n\nexport const defaultProductDetailsCardStrings: ProductDetailsCardStrings = {\n\ttitle: 'Product details',\n\tdescription: 'Core identity and catalogue fields.',\n\teditLabel: 'Edit details',\n\temptyTitle: 'No details',\n\temptyDescription: 'Pass metadata rows to render product details.',\n};\n\nexport interface ProductContractOverviewStrings {\n\t/** Surface title. */\n\ttitle: string;\n\t/** Supporting copy shown under the label. */\n\tdescription: string;\n\ttermsTitle: string;\n\trulesTitle: string;\n\tactionLabel: string;\n\teditLabel: string;\n\tcreateRuleLabel: string;\n\tviewRuleLabel: string;\n\teditRuleLabel: string;\n\tdeleteRuleLabel: string;\n\truleActionsLabel: string;\n\temptyTitle: string;\n\temptyDescription: string;\n}\n\nexport const defaultProductContractOverviewStrings: ProductContractOverviewStrings = {\n\ttitle: 'Contract',\n\tdescription: 'Commercial terms, pricing rules, and customer-facing conditions.',\n\ttermsTitle: 'Terms',\n\trulesTitle: 'Rules',\n\tactionLabel: 'Manage contract',\n\teditLabel: 'Edit contract',\n\tcreateRuleLabel: 'Add rule',\n\tviewRuleLabel: 'Open rule',\n\teditRuleLabel: 'Edit rule',\n\tdeleteRuleLabel: 'Delete rule',\n\truleActionsLabel: 'Rule actions',\n\temptyTitle: 'No contract summary',\n\temptyDescription: 'Pass metrics, terms, or rules to summarize the product contract.',\n};\n\nexport interface ProductOptionsSummaryStrings {\n\t/** Surface title. */\n\ttitle: string;\n\t/** Supporting copy shown under the label. */\n\tdescription: string;\n\tmanageLabel: string;\n\tcreateLabel: string;\n\tviewLabel: string;\n\teditLabel: string;\n\tdeleteLabel: string;\n\tactionsLabel: string;\n\temptyTitle: string;\n\temptyDescription: string;\n}\n\nexport const defaultProductOptionsSummaryStrings: ProductOptionsSummaryStrings = {\n\ttitle: 'Options',\n\tdescription: 'Variant-driving choices and add-ons customers can select.',\n\tmanageLabel: 'Manage options',\n\tcreateLabel: 'Add option',\n\tviewLabel: 'Open option',\n\teditLabel: 'Edit option',\n\tdeleteLabel: 'Delete option',\n\tactionsLabel: 'Option actions',\n\temptyTitle: 'No options',\n\temptyDescription: 'Pass option groups to summarize configurable product choices.',\n};\n\nexport interface ProductOptionActionMenuStrings {\n\tviewLabel: string;\n\teditLabel: string;\n\tdeleteLabel: string;\n\tactionsLabel: string;\n}\n\nexport const defaultProductOptionActionMenuStrings: ProductOptionActionMenuStrings = {\n\tviewLabel: 'Open option',\n\teditLabel: 'Edit option',\n\tdeleteLabel: 'Delete option',\n\tactionsLabel: 'Option actions',\n};\n\nexport interface ProductOptionsMatrixStrings {\n\t/** Surface title. */\n\ttitle: string;\n\t/** Supporting copy shown under the label. */\n\tdescription: string;\n\tcreateLabel: string;\n\teditLabel: string;\n\tdeleteLabel: string;\n\taddValueLabel: string;\n\taddAnotherValueLabel: string;\n\taddAnotherOptionLabel: string;\n\tdeleteValueLabel: string;\n\t/** Title of the confirmation shown before an option group is deleted. */\n\tconfirmDeleteOptionTitle: string;\n\t/** Title of the confirmation shown when saving would drop option values. */\n\tconfirmRemoveValuesTitle: string;\n\t/**\n\t * Consequence of saving an edit that drops values. Receives `{count}`, the\n\t * number of values the save removes.\n\t */\n\tconfirmRemoveValuesDescription: string;\n\t/** Confirm button for a save that drops values. */\n\tconfirmRemoveValuesLabel: string;\n\t/** Sentence explaining what deleting an option group takes with it. */\n\tconfirmDeleteOptionDescription: string;\n\tdoneLabel: string;\n\tsaveLabel: string;\n\tcancelLabel: string;\n\texpandOptionLabel: string;\n\tcollapseOptionLabel: string;\n\tactionsLabel: string;\n\toptionNameLabel: string;\n\toptionValuesLabel: string;\n\tvaluesLabel: string;\n\tuseForVariantsLabel: string;\n\tusedForVariantsLabel: string;\n\tnotUsedForVariantsLabel: string;\n\temptyTitle: string;\n\temptyDescription: string;\n\tnoValuesLabel: string;\n}\n\nexport const defaultProductOptionsMatrixStrings: ProductOptionsMatrixStrings = {\n\ttitle: 'Variant options',\n\tdescription: 'Define option groups and values before generating sellable variants.',\n\tcreateLabel: 'Add attribute',\n\teditLabel: 'Configure',\n\tdeleteLabel: 'Delete option',\n\taddValueLabel: 'Add value',\n\taddAnotherValueLabel: 'Add another value',\n\taddAnotherOptionLabel: 'Add another option',\n\tdeleteValueLabel: 'Delete value',\n\tconfirmDeleteOptionTitle: 'Delete this option?',\n\tconfirmRemoveValuesTitle: 'Save and remove these values?',\n\tconfirmRemoveValuesDescription: 'Saving removes {count} value(s) from this option, and any variant built from them goes with it. This cannot be undone.',\n\tconfirmRemoveValuesLabel: 'Save changes',\n\tconfirmDeleteOptionDescription: 'Its values are removed from the product, and any variant built from them goes with it. This cannot be undone.',\n\tdoneLabel: 'Done',\n\tsaveLabel: 'Save',\n\tcancelLabel: 'Cancel',\n\texpandOptionLabel: 'Expand option',\n\tcollapseOptionLabel: 'Collapse option',\n\tactionsLabel: 'Option actions',\n\toptionNameLabel: 'Option name',\n\toptionValuesLabel: 'Option values',\n\tvaluesLabel: 'Values',\n\tuseForVariantsLabel: 'Use for variants',\n\tusedForVariantsLabel: 'Used for variants',\n\tnotUsedForVariantsLabel: 'Not used for variants',\n\temptyTitle: 'No option groups',\n\temptyDescription: 'Add options such as size, color, or packaging to create variant combinations.',\n\tnoValuesLabel: 'No values',\n};\n\nexport interface ProductQuotePreviewCardStrings {\n\t/** Surface title. */\n\ttitle: string;\n\t/** Supporting copy shown under the label. */\n\tdescription: string;\n\tsubtotalLabel: string;\n\ttaxLabel: string;\n\tdiscountLabel: string;\n\ttotalLabel: string;\n\tactionLabel: string;\n\tcreateLineLabel: string;\n\tviewLineLabel: string;\n\teditLineLabel: string;\n\tdeleteLineLabel: string;\n\tlineActionsLabel: string;\n\temptyTitle: string;\n\temptyDescription: string;\n}\n\nexport const defaultProductQuotePreviewCardStrings: ProductQuotePreviewCardStrings = {\n\ttitle: 'Quote preview',\n\tdescription: 'How the product appears in a compact customer quote.',\n\tsubtotalLabel: 'Subtotal',\n\ttaxLabel: 'Tax',\n\tdiscountLabel: 'Discount',\n\ttotalLabel: 'Total',\n\tactionLabel: 'Open quote',\n\tcreateLineLabel: 'Add line',\n\tviewLineLabel: 'Open line',\n\teditLineLabel: 'Edit line',\n\tdeleteLineLabel: 'Delete line',\n\tlineActionsLabel: 'Line actions',\n\temptyTitle: 'No quote lines',\n\temptyDescription: 'Pass quote lines to preview pricing.',\n};\n\nexport interface ProductPoliciesCardStrings {\n\t/** Surface title. */\n\ttitle: string;\n\t/** Supporting copy shown under the label. */\n\tdescription: string;\n\tcreateLabel: string;\n\tviewLabel: string;\n\teditLabel: string;\n\tdeleteLabel: string;\n\tactionsLabel: string;\n\temptyTitle: string;\n\temptyDescription: string;\n}\n\nexport const defaultProductPoliciesCardStrings: ProductPoliciesCardStrings = {\n\ttitle: 'Policies',\n\tdescription: 'Cancellation, booking, service, and customer-facing rules.',\n\tcreateLabel: 'Add policy',\n\tviewLabel: 'View',\n\teditLabel: 'Edit policy',\n\tdeleteLabel: 'Delete policy',\n\tactionsLabel: 'Policy actions',\n\temptyTitle: 'No policies',\n\temptyDescription: 'Pass policies to summarize customer-facing rules.',\n};\n\nexport interface ProductVariantsTableStrings {\n\t/** Surface title. */\n\ttitle: string;\n\t/** Supporting copy shown under the label. */\n\tdescription: string;\n\tcreateLabel: string;\n\tviewLabel: string;\n\teditLabel: string;\n\tduplicateLabel: string;\n\tdeleteLabel: string;\n\temptyTitle: string;\n\temptyDescription: string;\n\theaders: {\n\t\tvariant: string;\n\t\tsku: string;\n\t\tprice: string;\n\t\tinventory: string;\n\t\tchannels: string;\n\t\tupdated: string;\n\t\tactions: string;\n\t};\n}\n\nexport const defaultProductVariantsTableStrings: ProductVariantsTableStrings = {\n\ttitle: 'Variants',\n\tdescription: 'Sellable combinations with price, availability, and SKU.',\n\tcreateLabel: 'Add variant',\n\tviewLabel: 'Open variant',\n\teditLabel: 'Edit',\n\tduplicateLabel: 'Duplicate',\n\tdeleteLabel: 'Delete',\n\temptyTitle: 'No variants',\n\temptyDescription: 'Create or pass variants to show sellable rows.',\n\theaders: {\n\t\tvariant: 'Variant',\n\t\tsku: 'SKU',\n\t\tprice: 'Price',\n\t\tinventory: 'Available',\n\t\tchannels: 'Channels',\n\t\tupdated: 'Updated',\n\t\tactions: 'Actions',\n\t},\n};\n\nexport interface ProductVariantBulkTableStrings {\n\t/** Surface title. */\n\ttitle: string;\n\t/** Supporting copy shown under the label. */\n\tdescription: string;\n\tcreateLabel: string;\n\tgenerateLabel: string;\n\tbulkEditLabel: string;\n\tviewLabel: string;\n\teditLabel: string;\n\tduplicateLabel: string;\n\tdeleteLabel: string;\n\tbulkApplyLabel: string;\n\tbulkDeleteLabel: string;\n\tselectedLabel: (count: number, total: number) => string;\n\tgroupCountLabel: (count: number) => string;\n\tclearSelectionLabel: string;\n\tselectAllLabel: string;\n\tselectRowLabel: (index: number) => string;\n\temptyTitle: string;\n\temptyDescription: string;\n\theaders: {\n\t\tvariant: string;\n\t\tprice: string;\n\t\tinventory: string;\n\t\tsku: string;\n\t\tstatus: string;\n\t\tupdated: string;\n\t\tactions: string;\n\t};\n}\n\nexport const defaultProductVariantsBulkTableStrings: ProductVariantBulkTableStrings = {\n\ttitle: 'Variants',\n\tdescription: 'Review generated combinations, select rows, and apply bulk operations.',\n\tcreateLabel: 'Add variant',\n\tgenerateLabel: 'Generate variants',\n\tbulkEditLabel: 'Bulk edit selected',\n\tviewLabel: 'Open variant',\n\teditLabel: 'Edit',\n\tduplicateLabel: 'Duplicate',\n\tdeleteLabel: 'Delete',\n\tbulkApplyLabel: 'Apply changes',\n\tbulkDeleteLabel: 'Delete selected',\n\tselectedLabel: (count, total) => `${count} of ${total} selected`,\n\tgroupCountLabel: (count) => `${count} ${count === 1 ? 'variant' : 'variants'}`,\n\tclearSelectionLabel: 'Clear',\n\tselectAllLabel: 'Select all variants',\n\tselectRowLabel: (index) => `Select row ${index + 1}`,\n\temptyTitle: 'No variants',\n\temptyDescription: 'Generate variants from option groups or pass sellable rows from the app.',\n\theaders: {\n\t\tvariant: 'Variant',\n\t\tprice: 'Price',\n\t\tinventory: 'Available',\n\t\tsku: 'SKU',\n\t\tstatus: 'Status',\n\t\tupdated: 'Updated',\n\t\tactions: 'Actions',\n\t},\n};\n\nexport interface ProductVariantsManagerStrings {\n\t/** Surface title. */\n\ttitle: string;\n\t/** Supporting copy shown under the label. */\n\tdescription: string;\n\toptionsTitle: string;\n\tvariantsTitle: string;\n\tgroupByLabel: string;\n\tsearchLabel: string;\n\tfilterLabel: string;\n\tgenerateLabel: string;\n\tcreateVariantLabel: string;\n\tactionsLabel: string;\n}\n\nexport const defaultProductVariantsManagerStrings: ProductVariantsManagerStrings = {\n\ttitle: 'Variants',\n\tdescription: 'Configure option groups first, then manage the generated sellable variants.',\n\toptionsTitle: 'Variant options',\n\tvariantsTitle: 'Variants',\n\tgroupByLabel: 'Group by',\n\tsearchLabel: 'Search variants',\n\tfilterLabel: 'Filter variants',\n\tgenerateLabel: 'Generate variants',\n\tcreateVariantLabel: 'Add variant',\n\tactionsLabel: 'Variant manager actions',\n};\n\nexport interface ProductVariantActionMenuStrings {\n\tviewLabel: string;\n\teditLabel: string;\n\tduplicateLabel: string;\n\tdeleteLabel: string;\n\tactionsLabel: string;\n}\n\nexport const defaultProductVariantActionMenuStrings: ProductVariantActionMenuStrings = {\n\tviewLabel: 'Open variant',\n\teditLabel: 'Edit',\n\tduplicateLabel: 'Duplicate',\n\tdeleteLabel: 'Delete',\n\tactionsLabel: 'Variant actions',\n};\n\nexport interface ProductVariantDetailsStrings {\n\t/** Surface title. */\n\ttitle: string;\n\t/** Supporting copy shown under the label. */\n\tdescription: string;\n\tbackLabel: string;\n\tfactsTitle: string;\n\tselectedOptionsTitle: string;\n\trelatedOptionsTitle: string;\n\tviewOptionLabel: string;\n\temptyTitle: string;\n\temptyDescription: string;\n\t/** Label/value facts rendered as a metadata list. */\n\tmetadata: {\n\t\tprice: string;\n\t\tinventory: string;\n\t\tsku: string;\n\t\tchannels: string;\n\t\tupdated: string;\n\t};\n}\n\nexport const defaultProductVariantDetailsStrings: ProductVariantDetailsStrings = {\n\ttitle: 'Variant',\n\tdescription: 'Sellable variant details, options, pricing, and fulfilment data.',\n\tbackLabel: 'Back',\n\tfactsTitle: 'Variant facts',\n\tselectedOptionsTitle: 'Selected options',\n\trelatedOptionsTitle: 'Option groups',\n\tviewOptionLabel: 'Open option',\n\temptyTitle: 'No variant selected',\n\temptyDescription: 'Pass a variant to render a standalone variant detail surface.',\n\tmetadata: {\n\t\tprice: 'Price',\n\t\tinventory: 'Available',\n\t\tsku: 'SKU',\n\t\tchannels: 'Channels',\n\t\tupdated: 'Updated',\n\t},\n};\n\nexport interface ProductVariantEditorStrings {\n\t/** Surface title. */\n\ttitle: string;\n\t/** Supporting copy shown under the label. */\n\tdescription: string;\n\tidentityTitle: string;\n\tcommercialTitle: string;\n\toptionsTitle: string;\n\tsaveLabel: string;\n\tsavingLabel: string;\n\tcancelLabel: string;\n\tdeleteLabel: string;\n\tstatusPlaceholder: string;\n\toptionPlaceholder: string;\n\tfields: {\n\t\tname: string;\n\t\tdescription: string;\n\t\tsku: string;\n\t\tprice: string;\n\t\tinventory: string;\n\t\tstatus: string;\n\t\tchannels: string;\n\t};\n\tplaceholders: {\n\t\tname: string;\n\t\tdescription: string;\n\t\tsku: string;\n\t\tprice: string;\n\t\tinventory: string;\n\t\tstatus: string;\n\t\tchannels: string;\n\t};\n}\n\nexport const defaultProductVariantEditorStrings: ProductVariantEditorStrings = {\n\ttitle: 'Edit variant',\n\tdescription: 'Controlled form for variant identity, pricing, inventory, and option values.',\n\tidentityTitle: 'Identity',\n\tcommercialTitle: 'Commercial setup',\n\toptionsTitle: 'Options',\n\tsaveLabel: 'Save variant',\n\tsavingLabel: 'Saving',\n\tcancelLabel: 'Cancel',\n\tdeleteLabel: 'Delete variant',\n\tstatusPlaceholder: 'Select status',\n\toptionPlaceholder: 'Select value',\n\tfields: {\n\t\tname: 'Name',\n\t\tdescription: 'Description',\n\t\tsku: 'SKU',\n\t\tprice: 'Price',\n\t\tinventory: 'Inventory',\n\t\tstatus: 'Status',\n\t\tchannels: 'Channels',\n\t},\n\tplaceholders: {\n\t\tname: '750 ml bottle',\n\t\tdescription: 'Standard retail pack',\n\t\tsku: 'BAL-750-CL',\n\t\tprice: 'US$ 24.00',\n\t\tinventory: '82',\n\t\tstatus: 'Active',\n\t\tchannels: 'Online store, POS',\n\t},\n};\n\nexport interface ProductOverviewStrings {\n\tmainLabel: string;\n\trailLabel: string;\n}\n\nexport const defaultProductOverviewStrings: ProductOverviewStrings = {\n\tmainLabel: 'Product overview',\n\trailLabel: 'Product supporting information',\n};\n","import type { ReactNode } from 'react';\n\nimport { EmptyState } from '../../../blocks/data-display';\nimport { cn } from '../../../../lib/utils';\n\nexport function ProductEmptyState({\n\ttitle,\n\tdescription,\n\taction,\n\tclassName,\n}: {\n\t/** Surface title. */\n\ttitle: ReactNode;\n\t/** Supporting copy under the title. */\n\tdescription: ReactNode;\n\t/** Control offered alongside the message. */\n\taction?: ReactNode;\n\tclassName?: string;\n}) {\n\treturn (\n\t\t<EmptyState\n\t\t\tpadding=\"md\"\n\t\t\tborder\n\t\t\ttitle={title}\n\t\t\tdescription={description}\n\t\t\tactions={action}\n\t\t\tclassName={cn('product-empty-state--component bg-muted/30', className)}\n\t\t/>\n\t);\n}\n","import type { BadgeTone } from '../../../base/badge';\nimport { cn } from '../../../../lib/utils';\n\nimport type { ProductTone } from '../products.types';\nimport { dotRecipes } from '../../../../lib/tone-recipes';\n\n/**\n * Badge tone for a product row value. Only status tones carry colour; neutral\n * and primary (reserved for the main command) render as neutral badges.\n */\nexport const PRODUCT_TONE_BADGE: Record<ProductTone, BadgeTone> = {\n\tneutral: 'secondary',\n\tprimary: 'secondary',\n\tsuccess: 'success',\n\twarning: 'warning',\n\tdestructive: 'destructive',\n\tinfo: 'info',\n};\n\n/**\n * Text colour for a figure whose tone states a status. Figures keep their width,\n * so a flagged metric lines up with its plain siblings instead of growing a chip.\n */\nexport const PRODUCT_TONE_TEXT: Record<ProductTone, string | undefined> = {\n\tneutral: undefined,\n\tprimary: undefined,\n\tsuccess: 'text-success',\n\twarning: 'text-warning-accent',\n\tdestructive: 'text-destructive',\n\tinfo: 'text-info',\n};\n\nconst PRODUCT_STATUS_TONES: ReadonlySet<ProductTone> = new Set<ProductTone>(['success', 'warning', 'destructive', 'info']);\n\n/** Whether a tone states a status. Neutral and primary are presentation, not state. */\nexport function isProductStatusTone(tone: ProductTone | undefined): tone is ProductTone {\n\treturn tone !== undefined && PRODUCT_STATUS_TONES.has(tone);\n}\n\nexport function clampProductPercent(value: number): number {\n\tif (!Number.isFinite(value)) return 0;\n\treturn Math.min(100, Math.max(0, Math.round(value)));\n}\n\nexport function ProductToneDot({ tone = 'neutral' }: { tone?: ProductTone }) {\n\treturn (\n\t\t<span\n\t\t\taria-hidden=\"true\"\n\t\t\tclassName={cn('product-tone-dot--component', dotRecipes.marker, {\n\t\t\t\t'bg-muted-foreground': tone === 'neutral' || tone === 'primary',\n\t\t\t\t'bg-success': tone === 'success',\n\t\t\t\t'bg-warning': tone === 'warning',\n\t\t\t\t'bg-destructive': tone === 'destructive',\n\t\t\t\t'bg-info': tone === 'info',\n\t\t\t})}\n\t\t/>\n\t);\n}\n","import { Value } from '../../../primitives';\nimport { Stack } from '../../../base/structure';\nimport { DisplayLabel, Text } from '../../../typography';\n\nimport type { ProductMetricSummary, ProductStructureMetric } from '../products.types';\nimport { ProductToneDot, isProductStatusTone } from './product-tone';\n\n/**\n * A headline fact: label above an emphasised value, in the same label-over-value\n * anatomy as the metadata lists beside it. No tile chrome — the parent grid's\n * gap separates metrics — and colour appears only as a status dot when the\n * metric's tone states a status.\n */\nexport function ProductMetricTile({ metric }: { metric: ProductStructureMetric | ProductMetricSummary }) {\n\tconst icon = 'icon' in metric ? metric.icon : undefined;\n\n\treturn (\n\t\t<Stack gap=\"dense\" className=\"product-metric-tile--component min-w-0\">\n\t\t\t<Stack direction=\"horizontal\" gap=\"sm\" wrap={false}>\n\t\t\t\t{isProductStatusTone(metric.tone) && <ProductToneDot tone={metric.tone} />}\n\t\t\t\t{!!icon && <span className=\"flex shrink-0 text-muted-foreground\">{icon}</span>}\n\t\t\t\t<DisplayLabel className=\"truncate text-inherit\">{metric.label}</DisplayLabel>\n\t\t\t</Stack>\n\t\t\t<Value type=\"inherit\" weight=\"semibold\" className=\"tabular-nums\">\n\t\t\t\t{metric.value}\n\t\t\t</Value>\n\t\t\t{!!metric.description && (\n\t\t\t\t<Text size=\"xs\" type=\"secondary\" lineHeight=\"snug\">\n\t\t\t\t\t{metric.description}\n\t\t\t\t</Text>\n\t\t\t)}\n\t\t</Stack>\n\t);\n}\n","import { DataTableActions, type TableAction } from '../../table';\nimport { cn } from '../../../../lib/utils';\n\nexport function ProductRowActions<TItem>({\n\titem,\n\tactions,\n\tmenuLabel,\n\tclassName,\n}: {\n\t/** The record this row represents. */\n\titem: TItem;\n\t/** Controls offered on the row. */\n\tactions: TableAction<TItem>[];\n\t/** Accessible name for the overflow trigger. */\n\tmenuLabel: string;\n\tclassName?: string;\n}) {\n\tif (actions.length === 0) return null;\n\n\treturn (\n\t\t<div className={cn('product-row-actions--component flex justify-end', className)}>\n\t\t\t<DataTableActions\n\t\t\t\trow={item}\n\t\t\t\tactions={actions}\n\t\t\t\tmenuLabel={menuLabel}\n\t\t\t\tdisplayMode=\"menu\"\n\t\t\t/>\n\t\t</div>\n\t);\n}\n","import type { ReactNode } from 'react';\n\nimport { Badge } from '../../../base/badge';\nimport { Button } from '../../../base/buttons';\nimport {\n\tItem,\n\tItemActions,\n\tItemContent,\n\tItemDescription,\n\tItemMedia,\n\tItemTitle,\n} from '../../../base/item';\nimport { Stack } from '../../../base/structure';\nimport { Value } from '../../../primitives';\nimport { Text } from '../../../typography';\nimport { cn } from '../../../../lib/utils';\n\nimport type {\n\tProductOperationsItem,\n\tProductOptionSummary,\n\tProductPolicySummary,\n\tProductReadinessItem,\n\tProductStructureMetric,\n\tProductTone,\n} from '../products.types';\nimport {\n\tPRODUCT_TONE_BADGE,\n\tPRODUCT_TONE_TEXT,\n\tProductToneDot,\n\tisProductStatusTone,\n} from './product-tone';\n\n// Match Item's readable identity basis so action-heavy rows wrap by parent width.\nconst PRODUCT_ROW_CONTENT = 'min-w-0 basis-48';\nconst PRODUCT_ROW_TITLE = 'line-clamp-none break-words overflow-visible';\nconst PRODUCT_ROW_ACTIONS = 'ml-auto shrink-0 flex-wrap justify-end gap-space-md';\n\n/**\n * Title line of a product row. A row's short value and chip sit beside the\n * label, so the trailing edge holds only commands and every row in a list keeps\n * the same trailing width. A status tone turns the value into a status badge;\n * any other value stays quiet secondary copy.\n */\nfunction ProductRowHeading({\n\tlabel,\n\tvalue,\n\ttone,\n\tbadge,\n}: {\n\tlabel: ReactNode;\n\tvalue?: ReactNode;\n\ttone?: ProductTone;\n\tbadge?: ReactNode;\n}) {\n\tconst title = <ItemTitle className={PRODUCT_ROW_TITLE}>{label}</ItemTitle>;\n\tif (!value && !badge) return title;\n\n\treturn (\n\t\t<Stack direction=\"horizontal\" gap=\"sm\" className=\"product-row--heading\">\n\t\t\t{title}\n\t\t\t{!!value && (isProductStatusTone(tone) ? (\n\t\t\t\t<Badge tone={PRODUCT_TONE_BADGE[tone]}>{value}</Badge>\n\t\t\t) : (\n\t\t\t\t<Text tag=\"span\" type=\"secondary\" lineHeight=\"tight\">{value}</Text>\n\t\t\t))}\n\t\t\t{badge}\n\t\t</Stack>\n\t);\n}\n\nfunction ProductRowSelect({ label, onSelect }: { label: ReactNode; onSelect: () => void }) {\n\treturn (\n\t\t<Button type=\"button\" tone=\"secondary\" buttonStyle=\"ghost\" onClick={onSelect}>\n\t\t\t{label}\n\t\t</Button>\n\t);\n}\n\nexport function ProductStructureMetricRow({\n\tmetric,\n\tactions,\n}: {\n\t/** The metric this row shows. */\n\tmetric: ProductStructureMetric;\n\t/** Controls offered on the row. */\n\tactions?: ReactNode;\n}) {\n\treturn (\n\t\t<Item className=\"product-structure-metric-row--component product-structure-card--item\">\n\t\t\t{!!metric.icon && (\n\t\t\t\t<ItemMedia variant=\"icon\" className=\"text-muted-foreground\">\n\t\t\t\t\t{metric.icon}\n\t\t\t\t</ItemMedia>\n\t\t\t)}\n\t\t\t<ItemContent className={PRODUCT_ROW_CONTENT}>\n\t\t\t\t<ItemTitle className={PRODUCT_ROW_TITLE}>{metric.label}</ItemTitle>\n\t\t\t\t{!!metric.description && <ItemDescription clamp={2}>{metric.description}</ItemDescription>}\n\t\t\t</ItemContent>\n\t\t\t<ItemActions className=\"ml-auto shrink-0 gap-space-md\">\n\t\t\t\t<Value type=\"inherit\" weight=\"semibold\" className={cn('tabular-nums', metric.tone && PRODUCT_TONE_TEXT[metric.tone])}>\n\t\t\t\t\t{metric.value}\n\t\t\t\t</Value>\n\t\t\t\t{actions}\n\t\t\t</ItemActions>\n\t\t</Item>\n\t);\n}\n\nexport function ProductReadinessRow({\n\titem,\n\tactionFallback,\n\tonSelect,\n\tactions,\n}: {\n\t/** The record this row represents. */\n\titem: ProductReadinessItem;\n\t/** Shown when a row has no actions. */\n\tactionFallback: ReactNode;\n\tonSelect?: () => void;\n\t/** Controls offered on the row. */\n\tactions?: ReactNode;\n}) {\n\t// The leading dot is the checklist state: done, flagged by tone, or pending.\n\tconst state = item.tone ?? (item.completed ? 'success' : 'neutral');\n\tconst select = item.onSelect ?? onSelect;\n\n\treturn (\n\t\t<Item className=\"product-readiness-row--component product-readiness-card--item\">\n\t\t\t<ItemMedia className=\"product-readiness-row--state h-icon-lg\">\n\t\t\t\t<ProductToneDot tone={state} />\n\t\t\t</ItemMedia>\n\t\t\t<ItemContent className={PRODUCT_ROW_CONTENT}>\n\t\t\t\t<ProductRowHeading label={item.label} value={item.value} tone={item.tone} />\n\t\t\t\t{!!item.description && <ItemDescription clamp={2}>{item.description}</ItemDescription>}\n\t\t\t</ItemContent>\n\t\t\t{!!(select || actions) && (\n\t\t\t\t<ItemActions className={PRODUCT_ROW_ACTIONS}>\n\t\t\t\t\t{!!select && <ProductRowSelect label={item.actionLabel ?? actionFallback} onSelect={select} />}\n\t\t\t\t\t{actions}\n\t\t\t\t</ItemActions>\n\t\t\t)}\n\t\t</Item>\n\t);\n}\n\nexport function ProductOperationRow({\n\titem,\n\tactionFallback,\n\tonSelect,\n\tactions,\n}: {\n\t/** The record this row represents. */\n\titem: ProductOperationsItem;\n\t/** Shown when a row has no actions. */\n\tactionFallback: ReactNode;\n\tonSelect?: () => void;\n\t/** Controls offered on the row. */\n\tactions?: ReactNode;\n}) {\n\tconst select = item.onSelect ?? onSelect;\n\n\treturn (\n\t\t<Item className=\"product-operation-row--component product-operations-card--item\">\n\t\t\t<ItemContent className={PRODUCT_ROW_CONTENT}>\n\t\t\t\t<ProductRowHeading label={item.label} value={item.value} tone={item.tone} />\n\t\t\t\t{!!item.description && <ItemDescription clamp={2}>{item.description}</ItemDescription>}\n\t\t\t</ItemContent>\n\t\t\t{!!(select || actions) && (\n\t\t\t\t<ItemActions className={PRODUCT_ROW_ACTIONS}>\n\t\t\t\t\t{!!select && <ProductRowSelect label={item.actionLabel ?? actionFallback} onSelect={select} />}\n\t\t\t\t\t{actions}\n\t\t\t\t</ItemActions>\n\t\t\t)}\n\t\t</Item>\n\t);\n}\n\nexport function ProductSummaryRow({\n\titem,\n\tactionLabel,\n\tonSelect,\n\tactions,\n}: {\n\t/** The record this row represents. */\n\titem: ProductOptionSummary | ProductPolicySummary;\n\t/** Copy for the row's inline action. */\n\tactionLabel?: ReactNode;\n\tonSelect?: () => void;\n\t/** Controls offered on the row. */\n\tactions?: ReactNode;\n}) {\n\tconst values = 'values' in item ? item.values : undefined;\n\n\treturn (\n\t\t<Item className=\"product-summary-row--component\">\n\t\t\t<ItemContent className={PRODUCT_ROW_CONTENT}>\n\t\t\t\t<ProductRowHeading label={item.label} value={item.value} tone={item.tone} badge={item.badge} />\n\t\t\t\t{!!item.description && <ItemDescription clamp={2}>{item.description}</ItemDescription>}\n\t\t\t\t{!!values?.length && (\n\t\t\t\t\t<div className=\"mt-space-md flex flex-wrap gap-space-xs\">\n\t\t\t\t\t\t{values.map((value, index) => (\n\t\t\t\t\t\t\t<Badge key={index} tone=\"secondary\">\n\t\t\t\t\t\t\t\t{value}\n\t\t\t\t\t\t\t</Badge>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t</ItemContent>\n\t\t\t{!!(onSelect || actions) && (\n\t\t\t\t<ItemActions className={PRODUCT_ROW_ACTIONS}>\n\t\t\t\t\t{!!onSelect && <ProductRowSelect label={actionLabel} onSelect={onSelect} />}\n\t\t\t\t\t{actions}\n\t\t\t\t</ItemActions>\n\t\t\t)}\n\t\t</Item>\n\t);\n}\n","import {\n\tEye,\n\tPencil,\n\tPlus,\n\tTrash2 } from 'lucide-react';\n\nimport { Button } from '../../../base/buttons';\nimport { ContentBlock } from '../../../base/display';\nimport { Grid, Stack } from '../../../base/structure';\nimport { MetadataList } from '../../../base/metadata-list';\nimport { ItemGroup } from '../../../base/item';\nimport { Text } from '../../../typography';\nimport { useStrings } from '../../../../lib/strings';\nimport { cn } from '../../../../lib/utils';\n\nimport { defaultProductContractOverviewStrings } from '../products.strings';\nimport type { ProductContractOverviewProps } from '../products.types';\nimport { ProductEmptyState } from '../partials/product-empty-state';\nimport { ProductMetricTile } from '../partials/product-metric-tile';\nimport { ProductRowActions } from '../partials/product-actions';\nimport { ProductSummaryRow } from '../partials/product-rows';\n\n/**\n * One main column region of the product editor.\n *\n * @deprecated An internal region of `ProductOverview`, which renders it from its `contract` prop (still typed `ProductContractOverviewProps`). Pass the same props there and add custom content through the overview's slots. Kept exported for compatibility.\n */\nexport function ProductContractOverview({\n\tmetrics = [],\n\tterms = [],\n\trules = [],\n\tonOpenContract,\n\tonEditContract,\n\tonCreateRule,\n\tonSelectRule,\n\tonEditRule,\n\tonDeleteRule,\n\trenderRuleActions,\n\tactions,\n\tfooterSlot,\n\tempty,\n\tclassName,\n\tstrings: stringsProp,\n}: ProductContractOverviewProps) {\n\tconst strings = useStrings(defaultProductContractOverviewStrings, stringsProp);\n\tconst hasContent = metrics.length > 0 || terms.length > 0 || rules.length > 0;\n\tconst headerAction = onOpenContract || onEditContract || onCreateRule ? (\n\t\t<div className=\"flex items-center gap-space-md\">\n\t\t\t{!!onCreateRule && (\n\t\t\t\t<Button type=\"button\" tone=\"secondary\" buttonStyle=\"ghost\" onClick={onCreateRule} icon={Plus}>\n\t\t\t\t\t{strings.createRuleLabel}\n\t\t\t\t</Button>\n\t\t\t)}\n\t\t\t{!!onEditContract && (\n\t\t\t\t<Button type=\"button\" tone=\"secondary\" buttonStyle=\"ghost\" onClick={onEditContract}>\n\t\t\t\t\t{strings.editLabel}\n\t\t\t\t</Button>\n\t\t\t)}\n\t\t\t{!!onOpenContract && (\n\t\t\t\t<Button type=\"button\" tone=\"secondary\" buttonStyle=\"ghost\" onClick={onOpenContract}>\n\t\t\t\t\t{strings.actionLabel}\n\t\t\t\t</Button>\n\t\t\t)}\n\t\t</div>\n\t) : undefined;\n\n\treturn (\n\t\t<ContentBlock\n\t\t\ttitle={strings.title}\n\t\t\tdescription={strings.description}\n\t\t\tactions={actions}\n\t\t\theaderAction={headerAction}\n\t\t\tfooterSlot={footerSlot}\n\t\t\tclassName={cn('product-contract-overview--component w-full', className)}\n\t\t>\n\t\t\t{!hasContent ? (\n\t\t\t\tempty ?? (\n\t\t\t\t\t<ProductEmptyState\n\t\t\t\t\t\ttitle={strings.emptyTitle}\n\t\t\t\t\t\tdescription={strings.emptyDescription}\n\t\t\t\t\t\taction={onCreateRule ? (\n\t\t\t\t\t\t\t<Button tone=\"primary\" type=\"button\" onClick={onCreateRule} icon={Plus}>\n\t\t\t\t\t\t\t\t{strings.createRuleLabel}\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t) : undefined}\n\t\t\t\t\t/>\n\t\t\t\t)\n\t\t\t) : (\n\t\t\t\t<Stack gap=\"2xl\">\n\t\t\t\t\t{metrics.length > 0 && (\n\t\t\t\t\t\t<Grid columns={{ base: 1, sm: 3 }} gap=\"md\">\n\t\t\t\t\t\t\t{metrics.map((metric) => (\n\t\t\t\t\t\t\t\t<ProductMetricTile key={metric.id} metric={metric} />\n\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t</Grid>\n\t\t\t\t\t)}\n\t\t\t\t\t{terms.length > 0 && (\n\t\t\t\t\t\t<Stack gap=\"md\">\n\t\t\t\t\t\t\t<Text type=\"inherit\" weight=\"semibold\">{strings.termsTitle}</Text>\n\t\t\t\t\t\t\t<MetadataList items={terms} columns={2} density=\"compact\" />\n\t\t\t\t\t\t</Stack>\n\t\t\t\t\t)}\n\t\t\t\t\t{rules.length > 0 && (\n\t\t\t\t\t\t<Stack gap=\"md\">\n\t\t\t\t\t\t\t<Text type=\"inherit\" weight=\"semibold\">{strings.rulesTitle}</Text>\n\t\t\t\t\t\t\t<ItemGroup>\n\t\t\t\t\t\t\t\t{rules.map((rule, index) => {\n\t\t\t\t\t\t\t\t\tconst onSelect = onSelectRule ? () => onSelectRule(rule) : undefined;\n\t\t\t\t\t\t\t\t\tconst onEdit = onEditRule ? () => onEditRule(rule) : undefined;\n\t\t\t\t\t\t\t\t\tconst onDelete = onDeleteRule ? () => onDeleteRule(rule) : undefined;\n\t\t\t\t\t\t\t\t\tconst ruleActions = [\n\t\t\t\t\t\t\t\t\t\t...(onSelect ? [{\n\t\t\t\t\t\t\t\t\t\t\tid: 'open',\n\t\t\t\t\t\t\t\t\t\t\tlabel: strings.viewRuleLabel,\n\t\t\t\t\t\t\t\t\t\t\ticon: <Eye className=\"size-icon-md\" />,\n\t\t\t\t\t\t\t\t\t\t\tonClick: () => onSelect(),\n\t\t\t\t\t\t\t\t\t\t\ttone: 'secondary' as const, buttonStyle: 'ghost' as const,\n\t\t\t\t\t\t\t\t\t\t}] : []),\n\t\t\t\t\t\t\t\t\t\t...(onEdit ? [{\n\t\t\t\t\t\t\t\t\t\t\tid: 'edit',\n\t\t\t\t\t\t\t\t\t\t\tlabel: strings.editRuleLabel,\n\t\t\t\t\t\t\t\t\t\t\ticon: <Pencil className=\"size-icon-md\" />,\n\t\t\t\t\t\t\t\t\t\t\tonClick: () => onEdit(),\n\t\t\t\t\t\t\t\t\t\t\ttone: 'secondary' as const, buttonStyle: 'ghost' as const,\n\t\t\t\t\t\t\t\t\t\t}] : []),\n\t\t\t\t\t\t\t\t\t\t...(onDelete ? [{\n\t\t\t\t\t\t\t\t\t\t\tid: 'delete',\n\t\t\t\t\t\t\t\t\t\t\tlabel: strings.deleteRuleLabel,\n\t\t\t\t\t\t\t\t\t\t\ticon: <Trash2 className=\"size-icon-md\" />,\n\t\t\t\t\t\t\t\t\t\t\tonClick: () => onDelete(),\n\t\t\t\t\t\t\t\t\t\t\ttone: 'destructive' as const,\n\t\t\t\t\t\t\t\t\t\t}] : []),\n\t\t\t\t\t\t\t\t\t];\n\t\t\t\t\t\t\t\t\tconst rowActions = renderRuleActions\n\t\t\t\t\t\t\t\t\t\t? renderRuleActions(rule, { index, onSelect, onEdit, onDelete })\n\t\t\t\t\t\t\t\t\t\t: <ProductRowActions item={rule} actions={ruleActions} menuLabel={strings.ruleActionsLabel} />;\n\n\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t<ProductSummaryRow\n\t\t\t\t\t\t\t\t\t\t\tkey={rule.id}\n\t\t\t\t\t\t\t\t\t\t\titem={rule}\n\t\t\t\t\t\t\t\t\t\t\tactions={rowActions}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t</ItemGroup>\n\t\t\t\t\t\t</Stack>\n\t\t\t\t\t)}\n\t\t\t\t</Stack>\n\t\t\t)}\n\t\t</ContentBlock>\n\t);\n}\n\nProductContractOverview.displayName = 'ProductContractOverview';\n","import { Button } from '../../../base/buttons';\nimport { ContentBlock } from '../../../base/display';\nimport { MetadataList } from '../../../base/metadata-list';\nimport { useStrings } from '../../../../lib/strings';\nimport { cn } from '../../../../lib/utils';\n\nimport { defaultProductDetailsCardStrings } from '../products.strings';\nimport type { ProductDetailsCardProps } from '../products.types';\nimport { ProductEmptyState } from '../partials/product-empty-state';\n\n/**\n * One main column region of the product editor.\n *\n * @deprecated An internal region of `ProductOverview`, which renders it from its `details` prop (still typed `ProductDetailsCardProps`). Pass the same props there and add custom content through the overview's slots. Kept exported for compatibility.\n */\nexport function ProductDetailsCard({\n\ttitle,\n\tdescription,\n\tmetadata = [],\n\tmedia,\n\tonEditDetails,\n\tactions,\n\theaderEnd,\n\tfooterSlot,\n\tempty,\n\tclassName,\n\tstrings: stringsProp,\n}: ProductDetailsCardProps) {\n\tconst strings = useStrings(defaultProductDetailsCardStrings, stringsProp);\n\tconst headerAction = onEditDetails ? (\n\t\t<Button type=\"button\" tone=\"secondary\" buttonStyle=\"ghost\" onClick={onEditDetails}>\n\t\t\t{strings.editLabel}\n\t\t</Button>\n\t) : undefined;\n\n\treturn (\n\t\t<ContentBlock\n\t\t\ttitle={title ?? strings.title}\n\t\t\tdescription={description === false ? undefined : description ?? strings.description}\n\t\t\tactions={actions}\n\t\t\theaderAction={headerAction}\n\t\t\theaderEnd={headerEnd}\n\t\t\tfooterSlot={footerSlot}\n\t\t\tclassName={cn('product-details-card--component w-full', className)}\n\t\t>\n\t\t\t{metadata.length === 0 ? (\n\t\t\t\tempty ?? <ProductEmptyState title={strings.emptyTitle} description={strings.emptyDescription} />\n\t\t\t) : (\n\t\t\t\t<div className=\"@container/product-details\">\n\t\t\t\t\t<div className={cn('grid min-w-0 grid-cols-1 gap-space-xl', media && '@xl/product-details:grid-cols-[12rem_minmax(0,1fr)]')}>\n\t\t\t\t\t\t{!!media && (\n\t\t\t\t\t\t\t<div className=\"product-details-card--media self-start overflow-hidden rounded-inner border border-border bg-muted/30\">\n\t\t\t\t\t\t\t\t{media}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t<MetadataList\n\t\t\t\t\t\t\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 { Badge } from '../../../base/badge';\nimport { Button } from '../../../base/buttons';\nimport { ConfirmDialog, useOverlayVisibility } from '../../overlays';\nimport { interpolateString } from '../../../../lib/strings';\nimport { ContentBlock } from '../../../base/display';\nimport { FormField } from '../../../base/forms';\nimport { Input } from '../../../base/text-inputs';\nimport { Switch } from '../../../base/choice-inputs';\nimport { Stack } from '../../../base/structure';\nimport { Text } from '../../../typography';\nimport { useStrings } from '../../../../lib/strings';\nimport { cn } from '../../../../lib/utils';\nimport { fieldAffordanceRecipes } from '../../../../lib/field-affordance-recipes';\n\nimport {\n\tdefaultProductOptionsMatrixStrings,\n} from '../products.strings';\nimport type {\n\tProductOptionEditDraft,\n\tProductOptionGroup,\n\tProductOptionsMatrixProps,\n} from '../products.types';\nimport { ProductEmptyState } from '../partials/product-empty-state';\nimport { ProductRowActions } from '../partials/product-actions';\nimport { focusRecipes } from '../../../../lib/focus-recipes';\nimport { interactionRecipes } from '../../../../lib/interaction-recipes';\n\nfunction getPlainText(value: ReactNode): string {\n\tif (typeof value === 'string' || typeof value === 'number') return String(value);\n\treturn '';\n}\n\nfunction isScalarText(value: ReactNode): value is string | number | bigint {\n\treturn typeof value === 'string' || typeof value === 'number' || typeof value === 'bigint';\n}\n\nfunction getOptionEditLabel(prefix: string, option: ProductOptionGroup): string {\n\tconst optionName = getPlainText(option.name);\n\treturn optionName ? `${prefix}: ${optionName}` : prefix;\n}\n\nfunction getOptionDraft(option: ProductOptionGroup): ProductOptionEditDraft {\n\treturn {\n\t\tname: getPlainText(option.name),\n\t\tvalues: (option.values ?? []).map((value) => ({\n\t\t\t...value,\n\t\t\tlabel: getPlainText(value.label),\n\t\t})),\n\t};\n}\n\nexport function ProductOptionsMatrix({\n\toptionGroups = [],\n\tsurface = 'card',\n\tcollapsedOptionIds,\n\tdefaultCollapsedOptionIds = [],\n\tonCollapsedOptionIdsChange,\n\teditingOptionId,\n\tdefaultEditingOptionId,\n\tonEditingOptionIdChange,\n\tonCreateOption,\n\tonEditOption,\n\tonDeleteOption,\n\tconfirmDelete,\n\tonAddValue,\n\tonDeleteValue,\n\tonOptionNameChange,\n\tonValueLabelChange,\n\tonDoneEditingOption,\n\tonSaveEditingOption,\n\tonCancelEditingOption,\n\tonToggleUsedForVariants,\n\trenderOptionActions,\n\trenderValue,\n\tshowHeader: showHeaderProp,\n\tshowCollapseControls = true,\n\tshowInlineActions = true,\n\tshowVariantToggle = true,\n\tactions,\n\theaderEnd,\n\tfooterSlot,\n\tempty,\n\tclassName,\n\tstrings: stringsProp,\n}: ProductOptionsMatrixProps) {\n\tconst strings = useStrings(defaultProductOptionsMatrixStrings, stringsProp);\n\tconst isCollapsedControlled = collapsedOptionIds !== undefined;\n\tconst [internalCollapsedOptionIds, setInternalCollapsedOptionIds] = useState(defaultCollapsedOptionIds);\n\tconst resolvedCollapsedOptionIds = isCollapsedControlled ? collapsedOptionIds : internalCollapsedOptionIds;\n\tconst collapsedOptionIdSet = useMemo(() => new Set(resolvedCollapsedOptionIds), [resolvedCollapsedOptionIds]);\n\tconst supportsInlineEditing =\n\t\teditingOptionId !== undefined ||\n\t\tdefaultEditingOptionId !== undefined ||\n\t\t!!onEditingOptionIdChange ||\n\t\t!!onOptionNameChange ||\n\t\t!!onValueLabelChange ||\n\t\t!!onDoneEditingOption ||\n\t\t!!onSaveEditingOption ||\n\t\t!!onCancelEditingOption;\n\tconst isEditingControlled = editingOptionId !== undefined;\n\tconst [internalEditingOptionId, setInternalEditingOptionId] = useState<string | null>(defaultEditingOptionId ?? null);\n\tconst [draftByOptionId, setDraftByOptionId] = useState<Record<string, ProductOptionEditDraft>>({});\n\tconst resolvedEditingOptionId = supportsInlineEditing\n\t\t? (isEditingControlled ? editingOptionId : internalEditingOptionId)\n\t\t: null;\n\tconst hasGroups = optionGroups.length > 0;\n\tconst showPanelHeader = surface === 'embedded' && showHeaderProp !== false;\n\tconst showCreateRow = hasGroups && !!onCreateOption;\n\n\tconst updateCollapsedOptionIds = useCallback(\n\t\t(nextIds: string[]) => {\n\t\t\tif (!isCollapsedControlled) {\n\t\t\t\tsetInternalCollapsedOptionIds(nextIds);\n\t\t\t}\n\t\t\tonCollapsedOptionIdsChange?.(\n\t\t\t\tnextIds,\n\t\t\t\toptionGroups.filter((option) => nextIds.includes(option.id)),\n\t\t\t);\n\t\t},\n\t\t[isCollapsedControlled, onCollapsedOptionIdsChange, optionGroups],\n\t);\n\n\tconst toggleCollapsed = useCallback(\n\t\t(option: ProductOptionGroup) => {\n\t\t\tconst nextIds = collapsedOptionIdSet.has(option.id)\n\t\t\t\t? resolvedCollapsedOptionIds.filter((id) => id !== option.id)\n\t\t\t\t: [...resolvedCollapsedOptionIds, option.id];\n\t\t\tupdateCollapsedOptionIds(nextIds);\n\t\t},\n\t\t[collapsedOptionIdSet, resolvedCollapsedOptionIds, updateCollapsedOptionIds],\n\t);\n\n\tconst updateEditingOptionId = useCallback(\n\t\t(nextId: string | null, option?: ProductOptionGroup) => {\n\t\t\tif (!supportsInlineEditing) return;\n\t\t\tif (!isEditingControlled) {\n\t\t\t\tsetInternalEditingOptionId(nextId);\n\t\t\t}\n\t\t\tonEditingOptionIdChange?.(nextId, option);\n\t\t},\n\t\t[isEditingControlled, onEditingOptionIdChange, supportsInlineEditing],\n\t);\n\n\tconst startEditing = useCallback(\n\t\t(option: ProductOptionGroup) => {\n\t\t\tsetDraftByOptionId((current) => ({\n\t\t\t\t...current,\n\t\t\t\t[option.id]: getOptionDraft(option),\n\t\t\t}));\n\t\t\tupdateEditingOptionId(option.id, option);\n\t\t\tonEditOption?.(option);\n\t\t},\n\t\t[onEditOption, updateEditingOptionId],\n\t);\n\n\tconst getResolvedDraft = useCallback(\n\t\t(option: ProductOptionGroup) => draftByOptionId[option.id] ?? getOptionDraft(option),\n\t\t[draftByOptionId],\n\t);\n\n\tconst updateDraft = useCallback(\n\t\t(option: ProductOptionGroup, updater: (draft: ProductOptionEditDraft) => ProductOptionEditDraft) => {\n\t\t\tsetDraftByOptionId((current) => ({\n\t\t\t\t...current,\n\t\t\t\t[option.id]: updater(current[option.id] ?? getOptionDraft(option)),\n\t\t\t}));\n\t\t},\n\t\t[],\n\t);\n\n\tconst cancelEditing = useCallback(\n\t\t(option: ProductOptionGroup) => {\n\t\t\tconst draft = getResolvedDraft(option);\n\t\t\tsetDraftByOptionId((current) => {\n\t\t\t\tconst { [option.id]: _removed, ...rest } = current;\n\t\t\t\treturn rest;\n\t\t\t});\n\t\t\tupdateEditingOptionId(null, option);\n\t\t\tonCancelEditingOption?.(option, draft);\n\t\t},\n\t\t[getResolvedDraft, onCancelEditingOption, updateEditingOptionId],\n\t);\n\n\t/*\n\t * The per-value trash button only edits a local draft — nothing is destroyed\n\t * until the edit is saved, and Cancel already abandons it. The destructive\n\t * moment is here, where the diff emits `onDeleteValue` once per dropped\n\t * value, so the confirmation belongs to the save and asks once for all of\n\t * them rather than once each.\n\t */\n\tconst commitEditing = useCallback(\n\t\t(option: ProductOptionGroup) => {\n\t\t\tconst draft = getResolvedDraft(option);\n\t\t\tconst originalValues = option.values ?? [];\n\t\t\tconst originalValueIds = new Set(originalValues.map((value) => value.id));\n\t\t\tconst draftValueIds = new Set(draft.values.map((value) => value.id));\n\n\t\t\tonSaveEditingOption?.(option, draft);\n\t\t\tonOptionNameChange?.(option, draft.name);\n\t\t\toriginalValues.forEach((value) => {\n\t\t\t\tconst draftValue = draft.values.find((item) => item.id === value.id);\n\t\t\t\tif (draftValue && getPlainText(value.label) !== getPlainText(draftValue.label)) {\n\t\t\t\t\tonValueLabelChange?.(option, value, getPlainText(draftValue.label));\n\t\t\t\t}\n\t\t\t});\n\t\t\tdraft.values.forEach((value) => {\n\t\t\t\tif (!originalValueIds.has(value.id)) {\n\t\t\t\t\tonAddValue?.(option);\n\t\t\t\t}\n\t\t\t});\n\t\t\toriginalValues.forEach((value) => {\n\t\t\t\tif (!draftValueIds.has(value.id)) {\n\t\t\t\t\tonDeleteValue?.(option, value);\n\t\t\t\t}\n\t\t\t});\n\t\t\tsetDraftByOptionId((current) => {\n\t\t\t\tconst { [option.id]: _removed, ...rest } = current;\n\t\t\t\treturn rest;\n\t\t\t});\n\t\t\tupdateEditingOptionId(null, option);\n\t\t\tonDoneEditingOption?.(option);\n\t\t},\n\t\t[getResolvedDraft, onAddValue, onDeleteValue, onDoneEditingOption, onOptionNameChange, onSaveEditingOption, onValueLabelChange, updateEditingOptionId],\n\t);\n\n\tconst removeValuesConfirm = useOverlayVisibility();\n\tconst [pendingSave, setPendingSave] = useState<{ option: ProductOptionGroup; removed: number } | null>(null);\n\n\tconst saveEditing = useCallback(\n\t\t(option: ProductOptionGroup) => {\n\t\t\tconst draft = getResolvedDraft(option);\n\t\t\tconst draftValueIds = new Set(draft.values.map((value) => value.id));\n\t\t\tconst removed = (option.values ?? []).filter((value) => !draftValueIds.has(value.id)).length;\n\n\t\t\tif (confirmDelete === false || removed === 0) {\n\t\t\t\tcommitEditing(option);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tsetPendingSave({ option, removed });\n\t\t\tremoveValuesConfirm.show();\n\t\t},\n\t\t[commitEditing, confirmDelete, getResolvedDraft, removeValuesConfirm],\n\t);\n\n\tconst deleteOption = useCallback(\n\t\t(option: ProductOptionGroup) => {\n\t\t\tif (resolvedEditingOptionId === option.id) {\n\t\t\t\tsetDraftByOptionId((current) => {\n\t\t\t\t\tconst { [option.id]: _removed, ...rest } = current;\n\t\t\t\t\treturn rest;\n\t\t\t\t});\n\t\t\t\tupdateEditingOptionId(null, option);\n\t\t\t}\n\t\t\tonDeleteOption?.(option);\n\t\t},\n\t\t[onDeleteOption, resolvedEditingOptionId, updateEditingOptionId],\n\t);\n\n\t/*\n\t * Deleting an option group silently takes its values — and every variant\n\t * built from them — with it. That is too much to lose to a single click on\n\t * an overflow-menu item, so it asks first. `confirmDelete={false}` opts out\n\t * for apps that already confirm upstream.\n\t */\n\tconst deleteOptionConfirm = useOverlayVisibility();\n\tconst [pendingDeleteOption, setPendingDeleteOption] = useState<ProductOptionGroup | null>(null);\n\n\tconst requestDeleteOption = useCallback(\n\t\t(option: ProductOptionGroup) => {\n\t\t\tif (confirmDelete === false) {\n\t\t\t\tdeleteOption(option);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tsetPendingDeleteOption(option);\n\t\t\tdeleteOptionConfirm.show();\n\t\t},\n\t\t[confirmDelete, deleteOption, deleteOptionConfirm],\n\t);\n\n\tconst headerAction = onCreateOption ? (\n\t\t<Button type=\"button\" tone=\"neutral\" onClick={onCreateOption} icon={Plus}>\n\t\t\t{strings.createLabel}\n\t\t</Button>\n\t) : undefined;\n\n\tconst panelHeader = showPanelHeader ? (\n\t\t<div className=\"product-options-matrix--panel-header p-surface\">\n\t\t<Stack direction=\"horizontal\" gap=\"md\" justify=\"between\">\n\t\t\t<Text type=\"inherit\" weight=\"semibold\">{strings.title}</Text>\n\t\t\t{headerAction}\n\t\t</Stack>\n\t\t</div>\n\t) : null;\n\n\tconst content = (\n\t\t<div className=\"product-options-matrix--body min-w-0\">\n\t\t\t<div className=\"product-options-matrix--panel overflow-hidden rounded-radius border border-border bg-background text-foreground\">\n\t\t\t\t{panelHeader}\n\n\t\t\t\t{!hasGroups ? (\n\t\t\t\t\t<div className={cn(showPanelHeader && 'border-t border-border/60')}>\n\t\t\t\t\t\t{empty ?? (\n\t\t\t\t\t\t\t<ProductEmptyState\n\t\t\t\t\t\t\t\ttitle={strings.emptyTitle}\n\t\t\t\t\t\t\t\tdescription={strings.emptyDescription}\n\t\t\t\t\t\t\t\taction={onCreateOption && !showPanelHeader ? (\n\t\t\t\t\t\t\t\t\t<Button tone=\"primary\" type=\"button\" onClick={onCreateOption} icon={Plus}>\n\t\t\t\t\t\t\t\t\t\t{strings.createLabel}\n\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t) : undefined}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\t\t\t\t) : (\n\t\t\t\t\t<div className={cn('product-options-matrix--list', showPanelHeader && 'border-t border-border/60')}>\n\t\t\t\t\t\t{optionGroups.map((option, optionIndex) => {\n\t\t\t\t\t\t\tconst values = option.values ?? [];\n\t\t\t\t\t\t\tconst isCollapsed = collapsedOptionIdSet.has(option.id);\n\t\t\t\t\t\t\tconst isEditing = resolvedEditingOptionId === option.id;\n\t\t\t\t\t\t\tconst canEdit = !!onEditOption || supportsInlineEditing;\n\t\t\t\t\t\t\tconst canDelete = !!onDeleteOption;\n\t\t\t\t\t\t\tconst canAddValue = !!onAddValue;\n\t\t\t\t\t\t\tconst optionDraft = getResolvedDraft(option);\n\t\t\t\t\t\t\tconst renderedActions = renderOptionActions?.(option, {\n\t\t\t\t\t\t\t\tindex: optionIndex,\n\t\t\t\t\t\t\t\tonEdit: canEdit ? () => startEditing(option) : undefined,\n\t\t\t\t\t\t\t\tonDelete: onDeleteOption ? () => requestDeleteOption(option) : undefined,\n\t\t\t\t\t\t\t\tonAddValue: onAddValue ? () => onAddValue(option) : undefined,\n\t\t\t\t\t\t\t\tonToggleCollapsed: () => toggleCollapsed(option),\n\t\t\t\t\t\t\t\tcollapsed: isCollapsed,\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\tconst menuActions = [\n\t\t\t\t\t\t\t\t...(canAddValue ? [{\n\t\t\t\t\t\t\t\t\tid: 'add-value',\n\t\t\t\t\t\t\t\t\tlabel: strings.addValueLabel,\n\t\t\t\t\t\t\t\t\ticon: <Plus className=\"size-icon-md\" />,\n\t\t\t\t\t\t\t\t\tonClick: () => onAddValue?.(option),\n\t\t\t\t\t\t\t\t\ttone: 'secondary' as const, buttonStyle: 'ghost' as const,\n\t\t\t\t\t\t\t\t}] : []),\n\t\t\t\t\t\t\t\t...(canDelete ? [{\n\t\t\t\t\t\t\t\t\tid: 'delete',\n\t\t\t\t\t\t\t\t\tlabel: strings.deleteLabel,\n\t\t\t\t\t\t\t\t\ticon: <Trash2 className=\"size-icon-md\" />,\n\t\t\t\t\t\t\t\t\tonClick: () => requestDeleteOption(option),\n\t\t\t\t\t\t\t\t\ttone: 'destructive' as const,\n\t\t\t\t\t\t\t\t}] : []),\n\t\t\t\t\t\t\t];\n\n\t\t\t\t\t\t\tconst defaultActions = showInlineActions ? (\n\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t{!!canEdit && (\n\t\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\ttone=\"secondary\"\n\t\t\t\t\t\t\t\t\t\t\tbuttonStyle=\"ghost\"\n\t\t\t\t\t\t\t\t\t\t\tonClick={() => startEditing(option)}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t{strings.editLabel}\n\t\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t<ProductRowActions\n\t\t\t\t\t\t\t\t\t\titem={option}\n\t\t\t\t\t\t\t\t\t\tactions={menuActions}\n\t\t\t\t\t\t\t\t\t\tmenuLabel={strings.actionsLabel}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t\t) : null;\n\t\t\t\t\t\t\tconst resolvedActions = renderedActions !== undefined ? renderedActions : defaultActions;\n\n\t\t\t\t\t\t\tif (isEditing) {\n\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\tkey={option.id}\n\t\t\t\t\t\t\t\t\t\tclassName=\"product-options-matrix--item product-options-matrix--item-editing border-b border-border/60 p-surface last:border-b-0\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<div className=\"grid min-w-0 grid-cols-[auto_minmax(0,1fr)] gap-x-space-md gap-y-space-lg\">\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"product-options-matrix--drag-handle self-start flex size-icon-lg items-center justify-center text-muted-foreground\" aria-hidden=\"true\">\n\t\t\t\t\t\t\t\t\t\t\t\t<GripVertical className=\"size-icon-sm\" />\n\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t\t<Stack gap=\"lg\" className=\"product-options-matrix--editor\">\n\t\t\t\t\t\t\t\t\t\t\t\t<FormField\n\t\t\t\t\t\t\t\t\t\t\t\t\tlabel={strings.optionNameLabel}\n\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"product-options-matrix--editor-field\"\n\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Input\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tvalue={optionDraft.name}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tonChange={(event) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tconst nextName = event.currentTarget.value;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tupdateDraft(option, (draft) => ({\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t...draft,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tname: nextName,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}));\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\taria-label={strings.optionNameLabel}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"bg-background\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\t</FormField>\n\n\t\t\t\t\t\t\t\t\t\t\t\t<Stack gap=\"sm\" className=\"product-options-matrix--editor-field\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Text type=\"inherit\" weight=\"medium\">{strings.optionValuesLabel}</Text>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Stack gap=\"xs\" className=\"product-options-matrix--editor-values\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{optionDraft.values.length === 0 && (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Text size=\"xs\" type=\"secondary\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{strings.noValuesLabel}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{optionDraft.values.map((value) => (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tkey={value.id}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"product-options-matrix--editor-value grid min-w-0 grid-cols-[auto_minmax(0,1fr)_auto] items-center gap-space-sm\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"flex size-icon-lg items-center justify-center text-muted-foreground\" aria-hidden=\"true\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<GripVertical className=\"size-icon-sm\" />\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Input\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvalue={getPlainText(value.label)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tonChange={(event) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tconst nextLabel = event.currentTarget.value;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tupdateDraft(option, (draft) => ({\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t...draft,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvalues: draft.values.map((item) => (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\titem.id === value.id\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? { ...item, label: nextLabel }\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: item\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t)),\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}));\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\taria-label={`${strings.optionValuesLabel}: ${getPlainText(value.label)}`}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"bg-background\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsize=\"sm\" iconOnly\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttone=\"secondary\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tbuttonStyle=\"ghost\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={() => updateDraft(option, (draft) => ({\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t...draft,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvalues: draft.values.filter((item) => item.id !== value.id),\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}))}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\taria-label={strings.deleteValueLabel}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"text-muted-foreground hover:text-destructive\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Trash2 className=\"size-icon-sm\" aria-hidden=\"true\" />\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Text tag=\"span\" size=\"pxs\" className=\"sr-only\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{strings.deleteValueLabel}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div className=\"product-options-matrix--editor-add-value grid min-w-0 grid-cols-[auto_minmax(0,1fr)_auto] items-center gap-space-sm\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"size-icon-lg\" aria-hidden=\"true\" />\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttone=\"secondary\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tbuttonStyle=\"outline\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={() => updateDraft(option, (draft) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tconst nextIndex = draft.values.length + 1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t...draft,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvalues: [\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t...draft.values,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{ id: `${option.id}-draft-value-${nextIndex}`, label: '' },\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfullWidth\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"justify-start text-muted-foreground\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{strings.addAnotherValueLabel}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"size-action-sm\" aria-hidden=\"true\" />\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t\t\t\t\t\t\t</Stack>\n\n\t\t\t\t\t\t\t\t\t\t\t<Stack direction=\"horizontal\" gap=\"md\" justify=\"between\" wrap={false} className=\"product-options-matrix--editor-actions\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{!!onDeleteOption && (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttone=\"destructive\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tbuttonStyle=\"outline\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={() => requestDeleteOption(option)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{strings.deleteLabel}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t<Stack direction=\"horizontal\" gap=\"sm\" justify=\"end\" wrap={false}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Button type=\"button\" tone=\"secondary\" buttonStyle=\"ghost\" onClick={() => cancelEditing(option)}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{strings.cancelLabel}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Button type=\"button\" tone=\"neutral\" onClick={() => saveEditing(option)}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{strings.saveLabel ?? strings.doneLabel}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tconst optionSummary = (\n\t\t\t\t\t\t\t\t<Stack render={<span />} gap=\"sm\">\n\t\t\t\t\t\t\t\t\t<Stack render={<span />} direction=\"horizontal\" gap=\"sm\">\n\t\t\t\t\t\t\t\t\t\t<Text type=\"inherit\" tag=\"span\" weight=\"semibold\" className=\"min-w-0 whitespace-normal break-words\">\n\t\t\t\t\t\t\t\t\t\t\t{option.name}\n\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t\t{option.badge}\n\t\t\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t\t\t\t{!!option.description && (\n\t\t\t\t\t\t\t\t\t\t<Text tag=\"span\" size=\"xs\" type=\"secondary\" className=\"max-w-prose\">\n\t\t\t\t\t\t\t\t\t\t\t{option.description}\n\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t{!isCollapsed && (\n\t\t\t\t\t\t\t\t\t\t<Stack render={<span />} gap=\"sm\" className=\"product-options-matrix--values\">\n\t\t\t\t\t\t\t\t\t\t\t{values.length === 0 ? (\n\t\t\t\t\t\t\t\t\t\t\t\t<Text tag=\"span\" size=\"xs\" type=\"secondary\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t{strings.noValuesLabel}\n\t\t\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"flex flex-wrap gap-space-xs\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t{values.map((value, valueIndex) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tconst deleteValue = onDeleteValue ? () => onDeleteValue(option, value) : undefined;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tconst renderedValue = renderValue?.(value, {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\toption,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\toptionIndex,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvalueIndex,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tonDelete: deleteValue,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tif (renderedValue) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\treturn <Fragment key={value.id}>{renderedValue}</Fragment>;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Badge\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tkey={value.id}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttone=\"neutral\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName={cn('product-options-matrix--value', value.disabled && 'opacity-50')}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{isScalarText(value.label) ? (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Text type=\"inherit\" tag=\"span\" size=\"inherit\" className=\"min-w-0 whitespace-normal break-words\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{value.label}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvalue.label\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{value.badge}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{!!deleteValue && showInlineActions && (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={deleteValue}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\taria-label={strings.deleteValueLabel}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t// The badge clips its label row, so the focus halo is drawn inside.\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName={cn(fieldAffordanceRecipes.target, fieldAffordanceRecipes.focus, focusRecipes.inset, fieldAffordanceRecipes.clear, 'hover:text-destructive')}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<X className={fieldAffordanceRecipes.icon} aria-hidden=\"true\" />\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Text tag=\"span\" size=\"pxs\" className=\"sr-only\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{strings.deleteValueLabel}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Badge>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\tkey={option.id}\n\t\t\t\t\t\t\t\t\tclassName=\"product-options-matrix--item border-b border-border/60 last:border-b-0\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<div className=\"grid min-w-0 grid-cols-[auto_minmax(0,1fr)] items-center gap-x-space-md gap-y-space-md p-surface @2xl/product-options-matrix:grid-cols-[auto_minmax(0,1fr)_auto]\">\n\t\t\t\t\t\t\t\t\t\t{showCollapseControls ? (\n\t\t\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\t\tsize=\"sm\" iconOnly\n\t\t\t\t\t\t\t\t\t\t\t\ttone=\"secondary\"\n\t\t\t\t\t\t\t\t\t\t\t\tbuttonStyle=\"ghost\"\n\t\t\t\t\t\t\t\t\t\t\t\tonClick={() => toggleCollapsed(option)}\n\t\t\t\t\t\t\t\t\t\t\t\taria-expanded={!isCollapsed}\n\t\t\t\t\t\t\t\t\t\t\t\taria-label={isCollapsed ? strings.expandOptionLabel : strings.collapseOptionLabel}\n\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"product-options-matrix--collapse-trigger mt-space-2xs shrink-0 text-muted-foreground\"\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t<ChevronDown className={cn('size-icon-sm transition-transform', isCollapsed && '-rotate-90')} aria-hidden=\"true\" />\n\t\t\t\t\t\t\t\t\t\t\t\t<Text tag=\"span\" size=\"pxs\" className=\"sr-only\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t{isCollapsed ? strings.expandOptionLabel : strings.collapseOptionLabel}\n\t\t\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"product-options-matrix--drag-handle flex size-icon-lg items-center justify-center text-muted-foreground\" aria-hidden=\"true\">\n\t\t\t\t\t\t\t\t\t\t\t\t<GripVertical className=\"size-icon-sm\" />\n\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t\t\t\t\t<div className=\"product-options-matrix--item-main min-w-0\">\n\t\t\t\t\t\t\t\t\t\t\t{canEdit && !showInlineActions ? (\n\t\t\t\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={() => startEditing(option)}\n\t\t\t\t\t\t\t\t\t\t\t\t\taria-label={getOptionEditLabel(strings.editLabel, option)}\n\t\t\t\t\t\t\t\t\t\t\t\t\tclassName={`product-options-matrix--edit-summary ${interactionRecipes.nativeButtonReset} block w-full cursor-pointer whitespace-normal rounded-inner text-start text-inherit outline-none ${focusRecipes.edge}`}\n\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t{optionSummary}\n\t\t\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t\t\t) : optionSummary}\n\t\t\t\t\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t\t\t\t\t{(showVariantToggle || !!resolvedActions) && (\n\t\t\t\t\t\t\t\t\t\t\t<div className=\"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 type=\"inherit\" className=\"tabular-nums\">{line.amount}</Value>\n\t\t\t\t\t\t\t\t\t\t{rowActions}\n\t\t\t\t\t\t\t\t\t</ItemActions>\n\t\t\t\t\t\t\t\t</Item>\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t})}\n\t\t\t\t\t</ItemGroup>\n\t\t\t\t\t{/* Amounts stay in the sans UI font with tabular figures; the one rule sits above the grand total. */}\n\t\t\t\t\t<Stack gap=\"lg\" className=\"product-quote-preview-card--totals\">\n\t\t\t\t\t\t{!!hasBreakdown && (\n\t\t\t\t\t\t\t<Stack gap=\"sm\">\n\t\t\t\t\t\t\t\t{subtotal !== undefined && <InlineStat label={strings.subtotalLabel} value={subtotal} valueClassName=\"tabular-nums\" />}\n\t\t\t\t\t\t\t\t{tax !== undefined && <InlineStat label={strings.taxLabel} value={tax} valueClassName=\"tabular-nums\" />}\n\t\t\t\t\t\t\t\t{discount !== undefined && <InlineStat label={strings.discountLabel} value={discount} valueClassName=\"tabular-nums text-success\" />}\n\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{!!hasBreakdown && <Separator />}\n\t\t\t\t\t\t<InlineStat label={<Text type=\"inherit\" tag=\"span\" weight=\"semibold\" lineHeight=\"tight\">{strings.totalLabel}</Text>} value={total ?? PRODUCT_EMPTY_VALUE} valueClassName=\"font-semibold tabular-nums\" />\n\t\t\t\t\t</Stack>\n\t\t\t\t</Stack>\n\t\t\t)}\n\t\t</ContentBlock>\n\t);\n}\n\nProductQuotePreviewCard.displayName = 'ProductQuotePreviewCard';\n","import {\n\tPencil,\n\tPlus,\n\tTrash2 } from 'lucide-react';\n\nimport { Button } from '../../../base/buttons';\nimport { ContentBlock } from '../../../base/display';\nimport { Progress } from '../../../base/feedback';\nimport { ItemGroup } from '../../../base/item';\nimport { Percent } from '../../../primitives';\nimport { Text } from '../../../typography';\nimport { useStrings } from '../../../../lib/strings';\nimport { cn } from '../../../../lib/utils';\n\nimport { defaultProductReadinessCardStrings } from '../products.strings';\nimport type { ProductReadinessCardProps } from '../products.types';\nimport { ProductEmptyState } from '../partials/product-empty-state';\nimport { ProductRowActions } from '../partials/product-actions';\nimport { ProductReadinessRow } from '../partials/product-rows';\nimport { clampProductPercent } from '../partials/product-tone';\nimport { Stack } from '../../../base/structure';\n\n/**\n * One support rail region of the product editor.\n *\n * @deprecated An internal region of `ProductOverview`, which renders it from its `readiness` prop (still typed `ProductReadinessCardProps`). Pass the same props there and add custom content through the overview's slots. Kept exported for compatibility.\n */\nexport function ProductReadinessCard({\n\titems = [],\n\tscore,\n\tscoreLabel,\n\tsummary,\n\tonCreateReadinessItem,\n\tonSelectReadinessItem,\n\tonEditReadinessItem,\n\tonDeleteReadinessItem,\n\trenderReadinessItemActions,\n\tactions,\n\tfooterSlot,\n\trenderItem,\n\tempty,\n\tclassName,\n\tstrings: stringsProp,\n}: ProductReadinessCardProps) {\n\tconst strings = useStrings(defaultProductReadinessCardStrings, stringsProp);\n\tconst completion = score === undefined ? undefined : clampProductPercent(score);\n\tconst headerAction = onCreateReadinessItem ? (\n\t\t<Button type=\"button\" tone=\"secondary\" buttonStyle=\"ghost\" onClick={onCreateReadinessItem} icon={Plus}>\n\t\t\t{strings.createLabel}\n\t\t</Button>\n\t) : undefined;\n\n\treturn (\n\t\t<ContentBlock\n\t\t\ttitle={strings.title}\n\t\t\tdescription={strings.description}\n\t\t\tactions={actions}\n\t\t\theaderAction={headerAction}\n\t\t\tfooterSlot={footerSlot}\n\t\t\tcontentGap=\"2xl\"\n\t\t\tclassName={cn('product-readiness-card--component w-full', className)}\n\t\t>\n\t\t\t{(completion !== undefined || !!summary) && (\n\t\t\t\t<Stack gap=\"lg\" className=\"product-readiness-card--summary\">\n\t\t\t\t\t{completion !== undefined && (\n\t\t\t\t\t\t<Stack gap=\"sm\" className=\"product-readiness-card--score\">\n\t\t\t\t\t\t\t<Stack direction=\"horizontal\" justify=\"between\" gap=\"lg\">\n\t\t\t\t\t\t\t\t<Text size=\"xs\" type=\"secondary\">{scoreLabel ?? strings.scoreLabel}</Text>\n\t\t\t\t\t\t\t\t<Percent type=\"inherit\" value={completion} scaled size=\"xs\" weight=\"semibold\" />\n\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t\t<Progress\n\t\t\t\t\t\t\t\tvalue={completion}\n\t\t\t\t\t\t\t\taria-label={typeof scoreLabel === 'string' ? scoreLabel : strings.progressLabel}\n\t\t\t\t\t\t\t\taria-valuetext={`${completion}%`}\n\t\t\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</Stack>\n\t\t\t\t\t)}\n\t\t\t\t\t{!!summary && <Text type=\"secondary\">{summary}</Text>}\n\t\t\t\t</Stack>\n\t\t\t)}\n\t\t\t{items.length === 0 ? (\n\t\t\t\tempty ?? (\n\t\t\t\t\t<ProductEmptyState\n\t\t\t\t\t\ttitle={strings.emptyTitle}\n\t\t\t\t\t\tdescription={strings.emptyDescription}\n\t\t\t\t\t\taction={onCreateReadinessItem ? (\n\t\t\t\t\t\t\t<Button tone=\"primary\" type=\"button\" onClick={onCreateReadinessItem} icon={Plus}>\n\t\t\t\t\t\t\t\t{strings.createLabel}\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t) : undefined}\n\t\t\t\t\t/>\n\t\t\t\t)\n\t\t\t) : (\n\t\t\t\t<ItemGroup>\n\t\t\t\t\t{items.map((item, index) => {\n\t\t\t\t\t\tconst onSelect = onSelectReadinessItem ? () => onSelectReadinessItem(item) : undefined;\n\t\t\t\t\t\tconst onEdit = onEditReadinessItem ? () => onEditReadinessItem(item) : undefined;\n\t\t\t\t\t\tconst onDelete = onDeleteReadinessItem ? () => onDeleteReadinessItem(item) : undefined;\n\t\t\t\t\t\tconst readinessActions = [\n\t\t\t\t\t\t\t...(onEdit ? [{\n\t\t\t\t\t\t\t\tid: 'edit',\n\t\t\t\t\t\t\t\tlabel: strings.editLabel,\n\t\t\t\t\t\t\t\ticon: <Pencil className=\"size-icon-md\" />,\n\t\t\t\t\t\t\t\tonClick: () => onEdit(),\n\t\t\t\t\t\t\t\ttone: 'secondary' as const, buttonStyle: 'ghost' as const,\n\t\t\t\t\t\t\t}] : []),\n\t\t\t\t\t\t\t...(onDelete ? [{\n\t\t\t\t\t\t\t\tid: 'delete',\n\t\t\t\t\t\t\t\tlabel: strings.deleteLabel,\n\t\t\t\t\t\t\t\ticon: <Trash2 className=\"size-icon-md\" />,\n\t\t\t\t\t\t\t\tonClick: () => onDelete(),\n\t\t\t\t\t\t\t\ttone: 'destructive' as const,\n\t\t\t\t\t\t\t}] : []),\n\t\t\t\t\t\t];\n\t\t\t\t\t\tconst rowActions = renderReadinessItemActions\n\t\t\t\t\t\t\t? renderReadinessItemActions(item, { index, onSelect, onEdit, onDelete })\n\t\t\t\t\t\t\t: <ProductRowActions item={item} actions={readinessActions} menuLabel={strings.actionsLabel} />;\n\n\t\t\t\t\t\treturn renderItem ? (\n\t\t\t\t\t\t\t<div key={item.id}>{renderItem(item, index)}</div>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<ProductReadinessRow\n\t\t\t\t\t\t\t\tkey={item.id}\n\t\t\t\t\t\t\t\titem={item}\n\t\t\t\t\t\t\t\tactionFallback={strings.actionLabel}\n\t\t\t\t\t\t\t\tonSelect={onSelect}\n\t\t\t\t\t\t\t\tactions={rowActions}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t);\n\t\t\t\t\t})}\n\t\t\t\t</ItemGroup>\n\t\t\t)}\n\t\t</ContentBlock>\n\t);\n}\n\nProductReadinessCard.displayName = 'ProductReadinessCard';\n","import { Eye, Pencil, Plus, Trash2 } from 'lucide-react';\n\nimport { Button } from '../../../base/buttons';\nimport { ContentBlock } from '../../../base/display';\nimport { ItemGroup } from '../../../base/item';\nimport { useStrings } from '../../../../lib/strings';\nimport { cn } from '../../../../lib/utils';\n\nimport { defaultProductStructureCardStrings } from '../products.strings';\nimport type { ProductStructureCardProps } from '../products.types';\nimport { ProductEmptyState } from '../partials/product-empty-state';\nimport { ProductRowActions } from '../partials/product-actions';\nimport { ProductStructureMetricRow } from '../partials/product-rows';\n\n/**\n * One support rail region of the product editor.\n *\n * @deprecated An internal region of `ProductOverview`, which renders it from its `structure` prop (still typed `ProductStructureCardProps`). Pass the same props there and add custom content through the overview's slots. Kept exported for compatibility.\n */\nexport function ProductStructureCard({\n\tmetrics = [],\n\tonCreateMetric,\n\tonSelectMetric,\n\tonEditMetric,\n\tonDeleteMetric,\n\trenderMetricActions,\n\tactions,\n\tfooterSlot,\n\tempty,\n\tclassName,\n\tstrings: stringsProp,\n}: ProductStructureCardProps) {\n\tconst strings = useStrings(defaultProductStructureCardStrings, stringsProp);\n\tconst headerAction = onCreateMetric ? (\n\t\t<Button type=\"button\" tone=\"secondary\" buttonStyle=\"ghost\" onClick={onCreateMetric} icon={Plus}>\n\t\t\t{strings.createLabel}\n\t\t</Button>\n\t) : undefined;\n\n\treturn (\n\t\t<ContentBlock\n\t\t\ttitle={strings.title}\n\t\t\tdescription={strings.description}\n\t\t\tactions={actions}\n\t\t\theaderAction={headerAction}\n\t\t\tfooterSlot={footerSlot}\n\t\t\tclassName={cn('product-structure-card--component w-full', className)}\n\t\t>\n\t\t\t{metrics.length === 0 ? (\n\t\t\t\tempty ?? (\n\t\t\t\t\t<ProductEmptyState\n\t\t\t\t\t\ttitle={strings.emptyTitle}\n\t\t\t\t\t\tdescription={strings.emptyDescription}\n\t\t\t\t\t\taction={onCreateMetric ? (\n\t\t\t\t\t\t\t<Button tone=\"primary\" type=\"button\" onClick={onCreateMetric} icon={Plus}>\n\t\t\t\t\t\t\t\t{strings.createLabel}\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t) : undefined}\n\t\t\t\t\t/>\n\t\t\t\t)\n\t\t\t) : (\n\t\t\t\t<ItemGroup>\n\t\t\t\t\t{metrics.map((metric, index) => {\n\t\t\t\t\t\tconst onSelect = onSelectMetric ? () => onSelectMetric(metric) : undefined;\n\t\t\t\t\t\tconst onEdit = onEditMetric ? () => onEditMetric(metric) : undefined;\n\t\t\t\t\t\tconst onDelete = onDeleteMetric ? () => onDeleteMetric(metric) : undefined;\n\t\t\t\t\t\tconst metricActions = [\n\t\t\t\t\t\t\t...(onSelect ? [{\n\t\t\t\t\t\t\t\tid: 'open',\n\t\t\t\t\t\t\t\tlabel: strings.viewLabel,\n\t\t\t\t\t\t\t\ticon: <Eye className=\"size-icon-md\" />,\n\t\t\t\t\t\t\t\tonClick: () => onSelect(),\n\t\t\t\t\t\t\t\ttone: 'secondary' as const, buttonStyle: 'ghost' as const,\n\t\t\t\t\t\t\t}] : []),\n\t\t\t\t\t\t\t...(onEdit ? [{\n\t\t\t\t\t\t\t\tid: 'edit',\n\t\t\t\t\t\t\t\tlabel: strings.editLabel,\n\t\t\t\t\t\t\t\ticon: <Pencil className=\"size-icon-md\" />,\n\t\t\t\t\t\t\t\tonClick: () => onEdit(),\n\t\t\t\t\t\t\t\ttone: 'secondary' as const, buttonStyle: 'ghost' as const,\n\t\t\t\t\t\t\t}] : []),\n\t\t\t\t\t\t\t...(onDelete ? [{\n\t\t\t\t\t\t\t\tid: 'delete',\n\t\t\t\t\t\t\t\tlabel: strings.deleteLabel,\n\t\t\t\t\t\t\t\ticon: <Trash2 className=\"size-icon-md\" />,\n\t\t\t\t\t\t\t\tonClick: () => onDelete(),\n\t\t\t\t\t\t\t\ttone: 'destructive' as const,\n\t\t\t\t\t\t\t}] : []),\n\t\t\t\t\t\t];\n\t\t\t\t\t\tconst rowActions = renderMetricActions\n\t\t\t\t\t\t\t? renderMetricActions(metric, { index, onSelect, onEdit, onDelete })\n\t\t\t\t\t\t\t: <ProductRowActions item={metric} actions={metricActions} menuLabel={strings.actionsLabel} />;\n\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<ProductStructureMetricRow\n\t\t\t\t\t\t\t\tkey={metric.id}\n\t\t\t\t\t\t\t\tmetric={metric}\n\t\t\t\t\t\t\t\tactions={rowActions}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t);\n\t\t\t\t\t})}\n\t\t\t\t</ItemGroup>\n\t\t\t)}\n\t\t</ContentBlock>\n\t);\n}\n\nProductStructureCard.displayName = 'ProductStructureCard';\n","import { Copy, Eye, Pencil, Plus, Trash2 } from 'lucide-react';\nimport { useMemo } from 'react';\nimport type { ReactNode } from 'react';\nimport type { ColumnDef } from '@tanstack/react-table';\n\nimport { Badge } from '../../../base/badge';\nimport { Button } from '../../../base/buttons';\nimport { ContentBlock } from '../../../base/display';\nimport { Stack } from '../../../base/structure';\nimport { DataTable, type TableAction } from '../../table';\nimport { SecondaryValue, Value } from '../../../primitives';\nimport { Text } from '../../../typography';\nimport { useStrings } from '../../../../lib/strings';\nimport { cn } from '../../../../lib/utils';\n\nimport { defaultProductVariantsTableStrings } from '../products.strings';\nimport type { ProductVariantsTableProps } from '../products.types';\nimport { ProductEmptyState } from '../partials/product-empty-state';\nimport { PRODUCT_EMPTY_VALUE } from '../partials/product-values';\nimport type { ProductVariantSummary } from '../products.types';\n\nfunction ProductVariantNameCell({\n\tvariant,\n\tchannelsLabel,\n}: {\n\tvariant: ProductVariantSummary;\n\tchannelsLabel: string;\n}) {\n\treturn (\n\t\t<Stack gap=\"xs\" className=\"product-variants-table--variant-cell min-w-0\">\n\t\t\t<Stack gap=\"dense\">\n\t\t\t\t<Stack direction=\"horizontal\" gap=\"sm\">\n\t\t\t\t\t<Text type=\"inherit\" weight=\"semibold\" className=\"truncate\">{variant.name}</Text>\n\t\t\t\t\t{!!variant.status && (\n\t\t\t\t\t\t<Badge tone={variant.statusTone ?? 'secondary'}>{variant.status}</Badge>\n\t\t\t\t\t)}\n\t\t\t\t</Stack>\n\t\t\t\t{!!variant.description && (\n\t\t\t\t\t<Text size=\"xs\" type=\"secondary\">\n\t\t\t\t\t\t{variant.description}\n\t\t\t\t\t</Text>\n\t\t\t\t)}\n\t\t\t</Stack>\n\t\t\t{!!(variant.options?.length || variant.channels) && (\n\t\t\t\t<Stack direction=\"horizontal\" gap=\"xs\">\n\t\t\t\t\t{variant.options?.map((option, optionIndex) => (\n\t\t\t\t\t\t<Badge key={optionIndex} tone=\"secondary\">\n\t\t\t\t\t\t\t{option}\n\t\t\t\t\t\t</Badge>\n\t\t\t\t\t))}\n\t\t\t\t\t{!!variant.channels && (\n\t\t\t\t\t\t<Text tag=\"span\" size=\"xs\" type=\"secondary\">\n\t\t\t\t\t\t\t{channelsLabel}: {variant.channels}\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t)}\n\t\t\t\t</Stack>\n\t\t\t)}\n\t\t</Stack>\n\t);\n}\n\nfunction ProductVariantValueCell({\n\tvalue,\n\temphasis = false,\n}: {\n\tvalue?: ReactNode;\n\temphasis?: boolean;\n}) {\n\tconst Primitive = value ? Value : SecondaryValue;\n\n\treturn (\n\t\t<Primitive\n\t\t\ttype={value ? 'inherit' : 'secondary'}\n\t\t\tweight={emphasis ? 'semibold' : undefined}\n\t\t\tclassName=\"min-w-0 tabular-nums\"\n\t\t>\n\t\t\t{value ?? PRODUCT_EMPTY_VALUE}\n\t\t</Primitive>\n\t);\n}\n\nexport function ProductVariantsTable({\n\tvariants = [],\n\tonCreateVariant,\n\tonSelectVariant,\n\tonEditVariant,\n\tonDuplicateVariant,\n\tonDeleteVariant,\n\trenderVariantActions,\n\tactions,\n\tfooterSlot,\n\tempty,\n\tclassName,\n\tstrings: stringsProp,\n}: ProductVariantsTableProps) {\n\tconst strings = useStrings(defaultProductVariantsTableStrings, stringsProp);\n\tconst rowActions = useMemo<TableAction<ProductVariantSummary>[] | undefined>(() => {\n\t\tif (renderVariantActions) return undefined;\n\n\t\tconst actionsList: TableAction<ProductVariantSummary>[] = [\n\t\t\t...(onSelectVariant ? [{\n\t\t\t\tid: 'open',\n\t\t\t\tlabel: strings.viewLabel,\n\t\t\t\ticon: <Eye className=\"size-icon-sm\" aria-hidden=\"true\" />,\n\t\t\t\tonClick: onSelectVariant,\n\t\t\t\tbuttonStyle: 'ghost' as const,\n\t\t\t}] : []),\n\t\t\t...(onEditVariant ? [{\n\t\t\t\tid: 'edit',\n\t\t\t\tlabel: strings.editLabel,\n\t\t\t\ticon: <Pencil className=\"size-icon-sm\" aria-hidden=\"true\" />,\n\t\t\t\tonClick: onEditVariant,\n\t\t\t\tbuttonStyle: 'ghost' as const,\n\t\t\t}] : []),\n\t\t\t...(onDuplicateVariant ? [{\n\t\t\t\tid: 'duplicate',\n\t\t\t\tlabel: strings.duplicateLabel,\n\t\t\t\ticon: <Copy className=\"size-icon-sm\" aria-hidden=\"true\" />,\n\t\t\t\tonClick: onDuplicateVariant,\n\t\t\t\tbuttonStyle: 'ghost' as const,\n\t\t\t}] : []),\n\t\t\t...(onDeleteVariant ? [{\n\t\t\t\tid: 'delete',\n\t\t\t\tlabel: strings.deleteLabel,\n\t\t\t\ticon: <Trash2 className=\"size-icon-sm\" aria-hidden=\"true\" />,\n\t\t\t\tonClick: onDeleteVariant,\n\t\t\t\ttone: 'destructive' as const,\n\t\t\t}] : []),\n\t\t];\n\n\t\treturn actionsList.length > 0 ? actionsList : undefined;\n\t}, [\n\t\tonDeleteVariant,\n\t\tonDuplicateVariant,\n\t\tonEditVariant,\n\t\tonSelectVariant,\n\t\trenderVariantActions,\n\t\tstrings.deleteLabel,\n\t\tstrings.duplicateLabel,\n\t\tstrings.editLabel,\n\t\tstrings.viewLabel,\n\t]);\n\tconst columns = useMemo<ColumnDef<ProductVariantSummary>[]>(() => {\n\t\tconst baseColumns: ColumnDef<ProductVariantSummary>[] = [\n\t\t\t{\n\t\t\t\taccessorKey: 'name',\n\t\t\t\theader: strings.headers.variant,\n\t\t\t\tcell: ({ row }) => (\n\t\t\t\t\t<ProductVariantNameCell\n\t\t\t\t\t\tvariant={row.original}\n\t\t\t\t\t\tchannelsLabel={strings.headers.channels}\n\t\t\t\t\t/>\n\t\t\t\t),\n\t\t\t},\n\t\t\t{\n\t\t\t\taccessorKey: 'price',\n\t\t\t\theader: strings.headers.price,\n\t\t\t\tcell: ({ row }) => <ProductVariantValueCell value={row.original.price} emphasis />,\n\t\t\t\tmeta: { align: 'start' },\n\t\t\t},\n\t\t\t{\n\t\t\t\taccessorKey: 'inventory',\n\t\t\t\theader: strings.headers.inventory,\n\t\t\t\tcell: ({ row }) => <ProductVariantValueCell value={row.original.inventory} />,\n\t\t\t},\n\t\t\t{\n\t\t\t\taccessorKey: 'sku',\n\t\t\t\theader: strings.headers.sku,\n\t\t\t\tcell: ({ row }) => <ProductVariantValueCell value={row.original.sku} />,\n\t\t\t},\n\t\t\t{\n\t\t\t\taccessorKey: 'updatedAt',\n\t\t\t\theader: strings.headers.updated,\n\t\t\t\tcell: ({ row }) => <ProductVariantValueCell value={row.original.updatedAt} />,\n\t\t\t},\n\t\t];\n\n\t\tif (renderVariantActions) {\n\t\t\tbaseColumns.push({\n\t\t\t\tid: 'actions',\n\t\t\t\theader: strings.headers.actions,\n\t\t\t\tcell: ({ row }) => renderVariantActions(row.original, {\n\t\t\t\t\tindex: row.index,\n\t\t\t\t\tonSelect: onSelectVariant ? () => onSelectVariant(row.original) : undefined,\n\t\t\t\t\tonEdit: onEditVariant ? () => onEditVariant(row.original) : undefined,\n\t\t\t\t\tonDuplicate: onDuplicateVariant ? () => onDuplicateVariant(row.original) : undefined,\n\t\t\t\t\tonDelete: onDeleteVariant ? () => onDeleteVariant(row.original) : undefined,\n\t\t\t\t}),\n\t\t\t\tmeta: { align: 'end' },\n\t\t\t});\n\t\t}\n\n\t\treturn baseColumns;\n\t}, [\n\t\tonDeleteVariant,\n\t\tonDuplicateVariant,\n\t\tonEditVariant,\n\t\tonSelectVariant,\n\t\trenderVariantActions,\n\t\tstrings.headers.actions,\n\t\tstrings.headers.channels,\n\t\tstrings.headers.inventory,\n\t\tstrings.headers.price,\n\t\tstrings.headers.sku,\n\t\tstrings.headers.updated,\n\t\tstrings.headers.variant,\n\t]);\n\tconst headerAction = onCreateVariant ? (\n\t\t<Button type=\"button\" tone=\"secondary\" buttonStyle=\"ghost\" onClick={onCreateVariant} icon={Plus}>\n\t\t\t{strings.createLabel}\n\t\t</Button>\n\t) : undefined;\n\n\treturn (\n\t\t<ContentBlock\n\t\t\ttitle={strings.title}\n\t\t\tdescription={strings.description}\n\t\t\tactions={actions}\n\t\t\theaderAction={headerAction}\n\t\t\tfooterSlot={footerSlot}\n\t\t\tclassName={cn('product-variants-table--component w-full', className)}\n\t\t>\n\t\t\t{variants.length === 0 ? (\n\t\t\t\tempty ?? (\n\t\t\t\t\t<ProductEmptyState\n\t\t\t\t\t\ttitle={strings.emptyTitle}\n\t\t\t\t\t\tdescription={strings.emptyDescription}\n\t\t\t\t\t\taction={onCreateVariant ? (\n\t\t\t\t\t\t\t<Button tone=\"primary\" type=\"button\" onClick={onCreateVariant} icon={Plus}>\n\t\t\t\t\t\t\t\t{strings.createLabel}\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t) : undefined}\n\t\t\t\t\t/>\n\t\t\t\t)\n\t\t\t) : (\n\t\t\t\t<DataTable<ProductVariantSummary>\n\t\t\t\t\tdata={variants}\n\t\t\t\t\tcolumns={columns}\n\t\t\t\t\tgetRowId={(variant) => variant.id}\n\t\t\t\t\tenableColumnVisibility\n\t\t\t\t\tsurface=\"glass\"\n\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\trowActions={rowActions}\n\t\t\t\t\trowActionsMenuLabel={strings.headers.actions}\n\t\t\t\t\trowActionsDisplayMode=\"menu\"\n\t\t\t\t\tstorageKey=\"product-variants\"\n\t\t\t\t\tclassName=\"product-variants-table--table\"\n\t\t\t\t\ttableContainerClassName=\"max-h-none\"\n\t\t\t\t\tstrings={{\n\t\t\t\t\t\temptyState: {\n\t\t\t\t\t\t\tmessage: strings.emptyTitle,\n\t\t\t\t\t\t},\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t)}\n\t\t</ContentBlock>\n\t);\n}\n\nProductVariantsTable.displayName = 'ProductVariantsTable';\n","import { useStrings } from '../../../../lib/strings';\nimport { Stack } from '../../../base/structure';\nimport { cn } from '../../../../lib/utils';\n\nimport { defaultProductOverviewStrings } from '../products.strings';\nimport type { ProductOverviewProps } from '../products.types';\nimport { ProductContractOverview } from './product-contract-overview';\nimport { ProductDetailsCard } from './product-details-card';\nimport { ProductOperationsCard } from './product-operations-card';\nimport { ProductOptionsSummary } from './product-options-summary';\nimport { ProductPoliciesCard } from './product-policies-card';\nimport { ProductQuotePreviewCard } from './product-quote-preview-card';\nimport { ProductReadinessCard } from './product-readiness-card';\nimport { ProductStructureCard } from './product-structure-card';\nimport { ProductVariantsTable } from './product-variants-table';\n\nexport function ProductOverview({\n\tdetails,\n\tcontract,\n\toptions,\n\tvariants,\n\treadiness,\n\tstructure,\n\toperations,\n\tquote,\n\tpolicies,\n\tslots,\n\tclassName,\n\tmainClassName,\n\trailClassName,\n\tstrings: stringsProp,\n}: ProductOverviewProps) {\n\tconst strings = useStrings(defaultProductOverviewStrings, stringsProp);\n\tconst hasRail = !!(readiness || structure || operations || quote || policies || slots?.railTop || slots?.railBottom);\n\n\treturn (\n\t\t// The cards are unframed sections, so the gap between them is the only thing that\n\t\t// separates them: page rhythm (3xl), clearly wider than the 2xl between sub-sections\n\t\t// inside a card and the row spacing inside a list.\n\t\t<Stack gap=\"3xl\" className={cn('product-overview--component @container/product-overview', className)}>\n\t\t\t{slots?.before}\n\t\t\t<div className={cn('grid min-w-0 grid-cols-1 gap-space-3xl', hasRail && '@5xl/product-overview:grid-cols-[minmax(0,1fr)_22rem]')}>\n\t\t\t\t<Stack render={<section />} gap=\"3xl\" aria-label={strings.mainLabel} className={cn('product-overview--main', mainClassName)}>\n\t\t\t\t\t{slots?.mainTop}\n\t\t\t\t\t{!!details && <ProductDetailsCard {...details} />}\n\t\t\t\t\t{!!contract && <ProductContractOverview {...contract} />}\n\t\t\t\t\t{!!options && <ProductOptionsSummary {...options} />}\n\t\t\t\t\t{!!variants && <ProductVariantsTable {...variants} />}\n\t\t\t\t\t{slots?.mainBottom}\n\t\t\t\t</Stack>\n\t\t\t\t{!!hasRail && (\n\t\t\t\t\t<Stack render={<aside />} gap=\"3xl\" aria-label={strings.railLabel} className={cn('product-overview--rail', railClassName)}>\n\t\t\t\t\t\t{slots?.railTop}\n\t\t\t\t\t\t{!!readiness && <ProductReadinessCard {...readiness} />}\n\t\t\t\t\t\t{!!structure && <ProductStructureCard {...structure} />}\n\t\t\t\t\t\t{!!operations && <ProductOperationsCard {...operations} />}\n\t\t\t\t\t\t{!!quote && <ProductQuotePreviewCard {...quote} />}\n\t\t\t\t\t\t{!!policies && <ProductPoliciesCard {...policies} />}\n\t\t\t\t\t\t{slots?.railBottom}\n\t\t\t\t\t</Stack>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t\t{slots?.after}\n\t\t</Stack>\n\t);\n}\n\nProductOverview.displayName = 'ProductOverview';\n","import { Copy, Eye, Pencil, Trash2 } from 'lucide-react';\nimport type { ReactNode } from 'react';\n\nimport { useStrings } from '../../../../lib/strings';\nimport { cn } from '../../../../lib/utils';\n\nimport {\n\tdefaultProductVariantActionMenuStrings,\n\ttype ProductVariantActionMenuStrings,\n} from '../products.strings';\nimport type {\n\tProductVariantActionMenuProps,\n\tProductVariantSummary,\n} from '../products.types';\nimport { ProductRowActions } from '../partials/product-actions';\n\ntype VariantCommandHandlers = Pick<\n\tProductVariantActionMenuProps,\n\t'onSelectVariant' | 'onEditVariant' | 'onDuplicateVariant' | 'onDeleteVariant'\n>;\n\ninterface VariantCommand {\n\tid: string;\n\tlabel: string;\n\ticon: ReactNode;\n\tonClick: () => void;\n\ttone: 'secondary' | 'destructive';\n\tbuttonStyle?: 'ghost';\n}\n\n/**\n * The default variant commands, in order, with the destructive one last. The\n * row menu and the details card's single overflow menu both build on these.\n */\nexport function productVariantMenuActions(\n\tvariant: ProductVariantSummary,\n\t{ onSelectVariant, onEditVariant, onDuplicateVariant, onDeleteVariant }: VariantCommandHandlers,\n\tstrings: ProductVariantActionMenuStrings,\n): VariantCommand[] {\n\treturn [\n\t\t...(onSelectVariant ? [{\n\t\t\tid: 'open',\n\t\t\tlabel: strings.viewLabel,\n\t\t\ticon: <Eye className=\"size-icon-md\" />,\n\t\t\tonClick: () => onSelectVariant(variant),\n\t\t\ttone: 'secondary' as const, buttonStyle: 'ghost' as const,\n\t\t}] : []),\n\t\t...(onEditVariant ? [{\n\t\t\tid: 'edit',\n\t\t\tlabel: strings.editLabel,\n\t\t\ticon: <Pencil className=\"size-icon-md\" />,\n\t\t\tonClick: () => onEditVariant(variant),\n\t\t\ttone: 'secondary' as const, buttonStyle: 'ghost' as const,\n\t\t}] : []),\n\t\t...(onDuplicateVariant ? [{\n\t\t\tid: 'duplicate',\n\t\t\tlabel: strings.duplicateLabel,\n\t\t\ticon: <Copy className=\"size-icon-md\" />,\n\t\t\tonClick: () => onDuplicateVariant(variant),\n\t\t\ttone: 'secondary' as const, buttonStyle: 'ghost' as const,\n\t\t}] : []),\n\t\t...(onDeleteVariant ? [{\n\t\t\tid: 'delete',\n\t\t\tlabel: strings.deleteLabel,\n\t\t\ticon: <Trash2 className=\"size-icon-md\" />,\n\t\t\tonClick: () => onDeleteVariant(variant),\n\t\t\ttone: 'destructive' as const,\n\t\t}] : []),\n\t];\n}\n\n/**\n * Row menu for one product variant.\n *\n * @deprecated An internal part of the variant tables and `ProductVariantDetails`, which render it for every variant. Replace it there with `renderVariantActions`, composing the base `ActionMenu` if needed. Kept exported for compatibility.\n */\nexport function ProductVariantActionMenu({\n\tvariant,\n\tindex = 0,\n\tonSelectVariant,\n\tonEditVariant,\n\tonDuplicateVariant,\n\tonDeleteVariant,\n\trenderVariantActions,\n\tmenuLabel,\n\tclassName,\n\tstrings: stringsProp,\n}: ProductVariantActionMenuProps) {\n\tconst strings = useStrings(defaultProductVariantActionMenuStrings, stringsProp);\n\tconst onSelect = onSelectVariant ? () => onSelectVariant(variant) : undefined;\n\tconst onEdit = onEditVariant ? () => onEditVariant(variant) : undefined;\n\tconst onDuplicate = onDuplicateVariant ? () => onDuplicateVariant(variant) : undefined;\n\tconst onDelete = onDeleteVariant ? () => onDeleteVariant(variant) : undefined;\n\tconst hasActions = !!(onSelect || onEdit || onDuplicate || onDelete || renderVariantActions);\n\n\tif (!hasActions) return null;\n\n\tif (renderVariantActions) {\n\t\treturn (\n\t\t\t<div className={cn('product-variant-action-menu--component flex justify-end', className)}>\n\t\t\t\t{renderVariantActions(variant, { index, onSelect, onEdit, onDuplicate, onDelete })}\n\t\t\t</div>\n\t\t);\n\t}\n\n\treturn (\n\t\t<ProductRowActions<ProductVariantSummary>\n\t\t\titem={variant}\n\t\t\tmenuLabel={menuLabel ?? strings.actionsLabel}\n\t\t\tclassName={cn('product-variant-action-menu--component', className)}\n\t\t\tactions={productVariantMenuActions(\n\t\t\t\tvariant,\n\t\t\t\t{ onSelectVariant, onEditVariant, onDuplicateVariant, onDeleteVariant },\n\t\t\t\tstrings,\n\t\t\t).map(({ onClick, ...action }) => ({ ...action, onClick: () => onClick() }))}\n\t\t/>\n\t);\n}\n\nProductVariantActionMenu.displayName = 'ProductVariantActionMenu';\n","import { 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 type=\"inherit\" 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 type=\"inherit\" weight=\"semibold\">{strings.selectedOptionsTitle}</Text>\n\t\t\t\t\t\t\t<div className=\"flex flex-wrap gap-space-sm\">\n\t\t\t\t\t\t\t\t{selectedOptions.map((option, index) => (\n\t\t\t\t\t\t\t\t\t<Badge key={index} tone=\"secondary\">\n\t\t\t\t\t\t\t\t\t\t{option}\n\t\t\t\t\t\t\t\t\t</Badge>\n\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</Stack>\n\t\t\t\t\t)}\n\n\t\t\t\t\t{!!optionItems.length && (\n\t\t\t\t\t\t<Stack gap=\"md\" className=\"product-variant-details--related-options\">\n\t\t\t\t\t\t\t<Text type=\"inherit\" weight=\"semibold\">{strings.relatedOptionsTitle}</Text>\n\t\t\t\t\t\t\t<ItemGroup>\n\t\t\t\t\t\t\t\t{optionItems.map((option: ProductOptionSummary, index) => (\n\t\t\t\t\t\t\t\t\trenderOption ? (\n\t\t\t\t\t\t\t\t\t\t<div key={option.id}>{renderOption(option, index)}</div>\n\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t<ProductSummaryRow\n\t\t\t\t\t\t\t\t\t\t\tkey={option.id}\n\t\t\t\t\t\t\t\t\t\t\titem={option}\n\t\t\t\t\t\t\t\t\t\t\tactionLabel={strings.viewOptionLabel}\n\t\t\t\t\t\t\t\t\t\t\tonSelect={onSelectOption ? () => onSelectOption(option) : undefined}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t</ItemGroup>\n\t\t\t\t\t\t</Stack>\n\t\t\t\t\t)}\n\t\t\t\t</Stack>\n\t\t\t)}\n\t\t</ContentBlock>\n\t);\n}\n\nProductVariantDetails.displayName = 'ProductVariantDetails';\n","import { type FormEvent, useId, useState } from 'react';\n\nimport { Button } from '../../../base/buttons';\nimport { ContentBlock } from '../../../base/display';\nimport { FormField } from '../../../base/forms';\nimport { Input, Textarea } from '../../../base/text-inputs';\nimport { Select } from '../../../base/choice-inputs';\nimport { Stack } from '../../../base/structure';\nimport { Text } from '../../../typography';\nimport { useStrings } from '../../../../lib/strings';\nimport { cn } from '../../../../lib/utils';\n\nimport { defaultProductVariantEditorStrings } from '../products.strings';\nimport type {\n\tProductChoice,\n\tProductVariantEditorProps,\n\tProductVariantEditorValues,\n\tProductVariantOptionField,\n} from '../products.types';\n\nconst toSelectOptions = (choices: ProductChoice[]) => (\n\tchoices.map((choice) => ({\n\t\tvalue: choice.value,\n\t\tlabel: choice.label,\n\t\tdisabled: choice.disabled,\n\t}))\n);\n\nexport function ProductVariantEditor({\n\tvalue: valueProp,\n\tdefaultValue,\n\toptionFields = [],\n\tstatusOptions = [],\n\tonValueChange,\n\tonSubmit,\n\tonError,\n\tonCancel,\n\tonDelete,\n\tactions,\n\theaderEnd,\n\tfooterSlot,\n\tdisabled = false,\n\tsubmitting = false,\n\tclassName,\n\tstrings: stringsProp,\n}: ProductVariantEditorProps) {\n\tconst strings = useStrings(defaultProductVariantEditorStrings, stringsProp);\n\tconst formId = useId();\n\tconst isControlled = valueProp !== undefined;\n\tconst [internalValue, setInternalValue] = useState<ProductVariantEditorValues>(defaultValue ?? {});\n\tconst [internalSubmitting, setInternalSubmitting] = useState(false);\n\tconst value = (isControlled ? valueProp : internalValue) ?? {};\n\tconst resolvedSubmitting = submitting || internalSubmitting;\n\tconst isDisabled = disabled || resolvedSubmitting;\n\n\tconst updateValue = (next: ProductVariantEditorValues) => {\n\t\tif (!isControlled) {\n\t\t\tsetInternalValue(next);\n\t\t}\n\n\t\tonValueChange?.(next);\n\t};\n\n\tconst updateField = (field: keyof Omit<ProductVariantEditorValues, 'options'>, nextValue: string) => {\n\t\tupdateValue({\n\t\t\t...value,\n\t\t\t[field]: nextValue,\n\t\t});\n\t};\n\n\tconst updateOption = (field: ProductVariantOptionField, nextValue: string | undefined) => {\n\t\tupdateValue({\n\t\t\t...value,\n\t\t\toptions: {\n\t\t\t\t...value.options,\n\t\t\t\t[field.id]: nextValue,\n\t\t\t},\n\t\t});\n\t};\n\n\tconst handleSubmit = async (event: FormEvent<HTMLFormElement>) => {\n\t\tevent.preventDefault();\n\t\tif (!onSubmit || resolvedSubmitting) return;\n\n\t\tsetInternalSubmitting(true);\n\t\ttry {\n\t\t\tawait onSubmit(value);\n\t\t} catch (error) {\n\t\t\tif (import.meta.env?.DEV) {\n\t\t\t\tconsole.warn('[ProductVariantEditor] Submit failed.', error);\n\t\t\t}\n\t\t\tonError?.(error);\n\t\t} finally {\n\t\t\tsetInternalSubmitting(false);\n\t\t}\n\t};\n\n\tconst defaultFooter = (\n\t\t<div className=\"product-variant-editor--footer flex flex-col-reverse gap-space-md @sm/product-variant-editor:flex-row @sm/product-variant-editor:items-center @sm/product-variant-editor:justify-between\">\n\t\t\t<div>\n\t\t\t\t{!!onDelete && (\n\t\t\t\t\t<Button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\ttone=\"destructive\"\n\t\t\t\t\t\tbuttonStyle=\"ghost\"\n\t\t\t\t\t\tonClick={() => onDelete(value)}\n\t\t\t\t\t\tdisabled={isDisabled}\n\t\t\t\t\t>\n\t\t\t\t\t\t{strings.deleteLabel}\n\t\t\t\t\t</Button>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t\t<div className=\"flex flex-col-reverse gap-space-md @sm/product-variant-editor:flex-row @sm/product-variant-editor:justify-end\">\n\t\t\t\t{!!onCancel && (\n\t\t\t\t\t<Button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\ttone=\"secondary\"\n\t\t\t\t\t\tbuttonStyle=\"ghost\"\n\t\t\t\t\t\tonClick={onCancel}\n\t\t\t\t\t\tdisabled={isDisabled}\n\t\t\t\t\t>\n\t\t\t\t\t\t{strings.cancelLabel}\n\t\t\t\t\t</Button>\n\t\t\t\t)}\n\t\t\t\t{!!onSubmit && (\n\t\t\t\t\t<Button tone=\"primary\"\n\t\t\t\t\t\ttype=\"submit\"\n\t\t\t\t\t\tform={formId}\n\t\t\t\t\t\tdisabled={isDisabled}\n\t\t\t\t\t>\n\t\t\t\t\t\t{resolvedSubmitting ? strings.savingLabel : strings.saveLabel}\n\t\t\t\t\t</Button>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t</div>\n\t);\n\tconst hasDefaultFooter = !!(onDelete || onCancel || onSubmit);\n\n\treturn (\n\t\t<ContentBlock\n\t\t\ttitle={strings.title}\n\t\t\tdescription={strings.description}\n\t\t\tactions={actions}\n\t\t\theaderEnd={headerEnd}\n\t\t\tfooterSlot={footerSlot}\n\t\t\t/*\n\t\t\t * The editor is a query container and its field pairs, footer, and\n\t\t\t * description span all switch on its width. It is mounted in a drawer or\n\t\t\t * a detail rail far more often than at page width; keyed to the viewport\n\t\t\t * it kept two-up fields in a 320px drawer on a desktop screen, at ~150px\n\t\t\t * a field. The 384px tier holds the two-column layout everywhere it\n\t\t\t * already renders — the narrowest is the 439px variant-details example —\n\t\t\t * and drops to one column below that.\n\t\t\t */\n\t\t\tclassName={cn('product-variant-editor--component @container/product-variant-editor w-full', className)}\n\t\t>\n\t\t\t<Stack render={<form id={formId} onSubmit={handleSubmit} />} gap=\"2xl\" className=\"product-variant-editor--form\">\n\t\t\t\t<section className=\"product-variant-editor--section grid gap-space-lg\">\n\t\t\t\t\t<Text type=\"inherit\" weight=\"semibold\">{strings.identityTitle}</Text>\n\t\t\t\t\t<div className=\"grid gap-space-lg @sm/product-variant-editor:grid-cols-2\">\n\t\t\t\t\t\t<FormField label={strings.fields.name} required>\n\t\t\t\t\t\t\t<Input\n\t\t\t\t\t\t\t\tvalue={value.name ?? ''}\n\t\t\t\t\t\t\t\tonChange={(event) => updateField('name', event.target.value)}\n\t\t\t\t\t\t\t\tplaceholder={strings.placeholders.name}\n\t\t\t\t\t\t\t\tdisabled={isDisabled}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</FormField>\n\t\t\t\t\t\t<FormField label={strings.fields.sku}>\n\t\t\t\t\t\t\t<Input\n\t\t\t\t\t\t\t\tvalue={value.sku ?? ''}\n\t\t\t\t\t\t\t\tonChange={(event) => updateField('sku', event.target.value)}\n\t\t\t\t\t\t\t\tplaceholder={strings.placeholders.sku}\n\t\t\t\t\t\t\t\tdisabled={isDisabled}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</FormField>\n\t\t\t\t\t\t<FormField label={strings.fields.description} className=\"@sm/product-variant-editor:col-span-2\">\n\t\t\t\t\t\t\t<Textarea\n\t\t\t\t\t\t\t\tvalue={value.description ?? ''}\n\t\t\t\t\t\t\t\tonChange={(event) => updateField('description', event.target.value)}\n\t\t\t\t\t\t\t\tplaceholder={strings.placeholders.description}\n\t\t\t\t\t\t\t\tdisabled={isDisabled}\n\t\t\t\t\t\t\t\tautoResize\n\t\t\t\t\t\t\t\tminRows={2}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</FormField>\n\t\t\t\t\t</div>\n\t\t\t\t</section>\n\n\t\t\t\t<section className=\"product-variant-editor--section grid gap-space-lg\">\n\t\t\t\t\t<Text type=\"inherit\" weight=\"semibold\">{strings.commercialTitle}</Text>\n\t\t\t\t\t<div className=\"grid gap-space-lg @sm/product-variant-editor:grid-cols-2\">\n\t\t\t\t\t\t<FormField label={strings.fields.price}>\n\t\t\t\t\t\t\t<Input\n\t\t\t\t\t\t\t\tvalue={value.price ?? ''}\n\t\t\t\t\t\t\t\tonChange={(event) => updateField('price', event.target.value)}\n\t\t\t\t\t\t\t\tplaceholder={strings.placeholders.price}\n\t\t\t\t\t\t\t\tdisabled={isDisabled}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</FormField>\n\t\t\t\t\t\t<FormField label={strings.fields.inventory}>\n\t\t\t\t\t\t\t<Input\n\t\t\t\t\t\t\t\tvalue={value.inventory ?? ''}\n\t\t\t\t\t\t\t\tonChange={(event) => updateField('inventory', event.target.value)}\n\t\t\t\t\t\t\t\tplaceholder={strings.placeholders.inventory}\n\t\t\t\t\t\t\t\tdisabled={isDisabled}\n\t\t\t\t\t\t\t\tinputMode=\"numeric\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</FormField>\n\t\t\t\t\t\t<FormField label={strings.fields.status}>\n\t\t\t\t\t\t\t{statusOptions.length > 0 ? (\n\t\t\t\t\t\t\t\t<Select\n\t\t\t\t\t\t\t\t\toptions={toSelectOptions(statusOptions)}\n\t\t\t\t\t\t\t\t\tvalue={value.status ?? null}\n\t\t\t\t\t\t\t\t\tonValueChange={(nextValue) => updateField('status', nextValue ?? '')}\n\t\t\t\t\t\t\t\t\tplaceholder={strings.statusPlaceholder}\n\t\t\t\t\t\t\t\t\tdisabled={isDisabled}\n\t\t\t\t\t\t\t\t\taria-label={strings.fields.status}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<Input\n\t\t\t\t\t\t\t\t\tvalue={value.status ?? ''}\n\t\t\t\t\t\t\t\t\tonChange={(event) => updateField('status', event.target.value)}\n\t\t\t\t\t\t\t\t\tplaceholder={strings.placeholders.status}\n\t\t\t\t\t\t\t\t\tdisabled={isDisabled}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</FormField>\n\t\t\t\t\t\t<FormField label={strings.fields.channels}>\n\t\t\t\t\t\t\t<Input\n\t\t\t\t\t\t\t\tvalue={value.channels ?? ''}\n\t\t\t\t\t\t\t\tonChange={(event) => updateField('channels', event.target.value)}\n\t\t\t\t\t\t\t\tplaceholder={strings.placeholders.channels}\n\t\t\t\t\t\t\t\tdisabled={isDisabled}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</FormField>\n\t\t\t\t\t</div>\n\t\t\t\t</section>\n\n\t\t\t\t{!!optionFields.length && (\n\t\t\t\t\t<section className=\"product-variant-editor--section grid gap-space-lg\">\n\t\t\t\t\t\t<Text type=\"inherit\" weight=\"semibold\">{strings.optionsTitle}</Text>\n\t\t\t\t\t\t<div className=\"grid gap-space-lg @sm/product-variant-editor:grid-cols-2\">\n\t\t\t\t\t\t\t{optionFields.map((field) => {\n\t\t\t\t\t\t\t\tconst fieldValue = field.value ?? value.options?.[field.id] ?? '';\n\t\t\t\t\t\t\t\tconst hasChoices = !!field.choices?.length;\n\n\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t<FormField\n\t\t\t\t\t\t\t\t\t\tkey={field.id}\n\t\t\t\t\t\t\t\t\t\tlabel={field.label}\n\t\t\t\t\t\t\t\t\t\thelperText={field.helperText}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{hasChoices ? (\n\t\t\t\t\t\t\t\t\t\t\t<Select\n\t\t\t\t\t\t\t\t\t\t\t\toptions={toSelectOptions(field.choices ?? [])}\n\t\t\t\t\t\t\t\t\t\t\t\tvalue={fieldValue || null}\n\t\t\t\t\t\t\t\t\t\t\t\tonValueChange={(nextValue) => updateOption(field, nextValue)}\n\t\t\t\t\t\t\t\t\t\t\t\tplaceholder={field.placeholder ?? strings.optionPlaceholder}\n\t\t\t\t\t\t\t\t\t\t\t\tdisabled={isDisabled}\n\t\t\t\t\t\t\t\t\t\t\t\taria-label={field.label}\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t\t<Input\n\t\t\t\t\t\t\t\t\t\t\t\tvalue={fieldValue}\n\t\t\t\t\t\t\t\t\t\t\t\tonChange={(event) => updateOption(field, event.target.value)}\n\t\t\t\t\t\t\t\t\t\t\t\tplaceholder={field.placeholder ?? strings.optionPlaceholder}\n\t\t\t\t\t\t\t\t\t\t\t\tdisabled={isDisabled}\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t</FormField>\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</section>\n\t\t\t\t)}\n\t\t\t\t{/* The default commands close the form, so the form's section gap owns their space; a consumer footerSlot replaces them in the footer. */}\n\t\t\t\t{(footerSlot === undefined || footerSlot === null) && hasDefaultFooter && defaultFooter}\n\t\t\t</Stack>\n\t\t</ContentBlock>\n\t);\n}\n\nProductVariantEditor.displayName = 'ProductVariantEditor';\n","import { 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 text-foreground\"\n\t\t\t>\n\t\t\t\t<Table\n\t\t\t\t\tcontainerClassName=\"[scrollbar-gutter:stable] [scrollbar-width:thin] [&::-webkit-scrollbar]:h-2.5 [&::-webkit-scrollbar-thumb]:rounded-full [&::-webkit-scrollbar-thumb]:bg-border [&::-webkit-scrollbar-track]:bg-muted/30\"\n\t\t\t\t\tclassName=\"w-full border-collapse\"\n\t\t\t\t>\n\t\t\t\t\t\t<colgroup>\n\t\t\t\t\t\t\t{isSelectable && <col className=\"w-14 min-w-14 max-w-14\" />}\n\t\t\t\t\t\t\t{visibleColumnSet.has('variant') && <col />}\n\t\t\t\t\t\t\t{visibleColumnSet.has('sku') && <col />}\n\t\t\t\t\t\t\t{visibleColumnSet.has('price') && <col />}\n\t\t\t\t\t\t\t{visibleColumnSet.has('inventory') && <col />}\n\t\t\t\t\t\t\t{visibleColumnSet.has('status') && <col />}\n\t\t\t\t\t\t\t{visibleColumnSet.has('updated') && <col />}\n\t\t\t\t\t\t\t{hasRowActions && <col className=\"w-18\" />}\n\t\t\t\t\t\t</colgroup>\n\t\t\t\t\t\t<TableHeader>\n\t\t\t\t\t\t\t<TableRow className=\"h-12 border-b border-border/60 bg-muted/50\">\n\t\t\t\t\t\t\t\t{isSelectable && (\n\t\t\t\t\t\t\t\t\t<TableHead className=\"w-14 min-w-14 max-w-14 px-0 py-space-md text-center align-middle\">\n\t\t\t\t\t\t\t\t\t\t<Checkbox\n\t\t\t\t\t\t\t\t\t\t\tref={selectAllRef}\n\t\t\t\t\t\t\t\t\t\t\tchecked={allRowsSelected}\n\t\t\t\t\t\t\t\t\t\t\tindeterminate={someRowsSelected}\n\t\t\t\t\t\t\t\t\t\t\tonCheckedChange={toggleAll}\n\t\t\t\t\t\t\t\t\t\t\taria-label={strings.selectAllLabel}\n\t\t\t\t\t\t\t\t\t\t\tclassName=\"mx-auto\"\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t</TableHead>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t{visibleColumnSet.has('variant') && (\n\t\t\t\t\t\t\t\t\t<TableHead className=\"px-space-lg py-space-md text-left align-middle\">\n\t\t\t\t\t\t\t\t\t\t<DisplayLabel className=\"whitespace-normal\">\n\t\t\t\t\t\t\t\t\t\t\t{strings.headers.variant}\n\t\t\t\t\t\t\t\t\t\t</DisplayLabel>\n\t\t\t\t\t\t\t\t\t</TableHead>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t{visibleColumnSet.has('sku') && (\n\t\t\t\t\t\t\t\t\t<TableHead className=\"px-space-lg py-space-md text-left align-middle\">\n\t\t\t\t\t\t\t\t\t\t<DisplayLabel className=\"whitespace-normal\">\n\t\t\t\t\t\t\t\t\t\t\t{strings.headers.sku}\n\t\t\t\t\t\t\t\t\t\t</DisplayLabel>\n\t\t\t\t\t\t\t\t\t</TableHead>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t{visibleColumnSet.has('price') && (\n\t\t\t\t\t\t\t\t\t<TableHead className=\"px-space-lg py-space-md text-left align-middle\">\n\t\t\t\t\t\t\t\t\t\t<DisplayLabel className=\"whitespace-normal\">\n\t\t\t\t\t\t\t\t\t\t\t{strings.headers.price}\n\t\t\t\t\t\t\t\t\t\t</DisplayLabel>\n\t\t\t\t\t\t\t\t\t</TableHead>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t{visibleColumnSet.has('inventory') && (\n\t\t\t\t\t\t\t\t\t<TableHead className=\"px-space-lg py-space-md text-left align-middle\">\n\t\t\t\t\t\t\t\t\t\t<DisplayLabel className=\"whitespace-normal\">\n\t\t\t\t\t\t\t\t\t\t\t{strings.headers.inventory}\n\t\t\t\t\t\t\t\t\t\t</DisplayLabel>\n\t\t\t\t\t\t\t\t\t</TableHead>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t{visibleColumnSet.has('status') && (\n\t\t\t\t\t\t\t\t\t<TableHead className=\"px-space-lg py-space-md text-left align-middle\">\n\t\t\t\t\t\t\t\t\t\t<DisplayLabel className=\"whitespace-normal\">\n\t\t\t\t\t\t\t\t\t\t\t{strings.headers.status}\n\t\t\t\t\t\t\t\t\t\t</DisplayLabel>\n\t\t\t\t\t\t\t\t\t</TableHead>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t{visibleColumnSet.has('updated') && (\n\t\t\t\t\t\t\t\t\t<TableHead className=\"px-space-lg py-space-md text-left align-middle\">\n\t\t\t\t\t\t\t\t\t\t<DisplayLabel className=\"whitespace-normal\">\n\t\t\t\t\t\t\t\t\t\t\t{strings.headers.updated}\n\t\t\t\t\t\t\t\t\t\t</DisplayLabel>\n\t\t\t\t\t\t\t\t\t</TableHead>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t{hasRowActions && (\n\t\t\t\t\t\t\t\t\t<TableHead className=\"px-space-lg py-space-md text-right align-middle\">\n\t\t\t\t\t\t\t\t\t\t<DisplayLabel className=\"whitespace-normal\">\n\t\t\t\t\t\t\t\t\t\t\t{strings.headers.actions}\n\t\t\t\t\t\t\t\t\t\t</DisplayLabel>\n\t\t\t\t\t\t\t\t\t</TableHead>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</TableRow>\n\t\t\t\t\t\t</TableHeader>\n\t\t\t\t\t\t<TableBody>\n\t\t\t\t\t\t\t{orderedVariants.map((variant, displayIndex) => {\n\t\t\t\t\t\t\t\tconst index = rowIndexById.get(variant.id) ?? displayIndex;\n\t\t\t\t\t\t\t\tconst groupLabel = groupByOption ? getGroupLabel(variant, groupByOption) : null;\n\t\t\t\t\t\t\t\tconst previousVariant = displayIndex > 0 ? orderedVariants[displayIndex - 1] : undefined;\n\t\t\t\t\t\t\t\tconst previousGroupLabel = groupByOption && previousVariant\n\t\t\t\t\t\t\t\t\t? getGroupLabel(previousVariant, groupByOption)\n\t\t\t\t\t\t\t\t\t: null;\n\t\t\t\t\t\t\t\tconst shouldRenderGroup = !!groupByOption && groupLabel !== previousGroupLabel;\n\t\t\t\t\t\t\t\tconst isSelected = selectedIdSet.has(variant.id);\n\t\t\t\t\t\t\t\tconst actionContext = {\n\t\t\t\t\t\t\t\t\tindex,\n\t\t\t\t\t\t\t\t\tonSelect: onSelectVariant ? () => onSelectVariant(variant) : undefined,\n\t\t\t\t\t\t\t\t\tonEdit: onEditVariant ? () => onEditVariant(variant) : undefined,\n\t\t\t\t\t\t\t\t\tonDuplicate: onDuplicateVariant ? () => onDuplicateVariant(variant) : undefined,\n\t\t\t\t\t\t\t\t\tonDelete: onDeleteVariant ? () => onDeleteVariant(variant) : undefined,\n\t\t\t\t\t\t\t\t\tisSelected,\n\t\t\t\t\t\t\t\t\tonToggleSelected: isSelectable ? (checked: boolean) => toggleRow(variant, checked) : undefined,\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\tconst summaryOptionGroups = groupByOption\n\t\t\t\t\t\t\t\t\t? optionGroups.filter((option) => option.id !== groupByOption.id)\n\t\t\t\t\t\t\t\t\t: optionGroups;\n\t\t\t\t\t\t\t\tconst optionSummary = getVariantOptionSummary(variant, summaryOptionGroups);\n\t\t\t\t\t\t\t\tconst groupedVariantName = groupByOption\n\t\t\t\t\t\t\t\t\t? getVariantName({ ...variant, name: undefined }, summaryOptionGroups)\n\t\t\t\t\t\t\t\t\t: getVariantName(variant, optionGroups);\n\t\t\t\t\t\t\t\tconst variantName = groupedVariantName === PRODUCT_EMPTY_VALUE && groupByOption\n\t\t\t\t\t\t\t\t\t? getVariantName(variant, optionGroups)\n\t\t\t\t\t\t\t\t\t: groupedVariantName;\n\t\t\t\t\t\t\t\tconst optionLabel = getOptionCombinationLabel(optionSummary);\n\t\t\t\t\t\t\t\tconst optionLabelMatchesVariantName = optionLabel === getPlainText(variantName);\n\t\t\t\t\t\t\t\tconst createCellContext = (\n\t\t\t\t\t\t\t\t\tcolumn: ProductVariantsBulkTableColumn,\n\t\t\t\t\t\t\t\t\tvalue: ReactNode | undefined,\n\t\t\t\t\t\t\t\t\tdisplay: ProductVariantCellDisplay = DEFAULT_CELL_DISPLAY,\n\t\t\t\t\t\t\t\t): ProductVariantCellRenderContext => {\n\t\t\t\t\t\t\t\t\tconst onValueChange = isEditableField(column) && onVariantFieldChange\n\t\t\t\t\t\t\t\t\t\t? (nextValue: string) => onVariantFieldChange(\n\t\t\t\t\t\t\t\t\t\t\tvariant,\n\t\t\t\t\t\t\t\t\t\t\tcolumn,\n\t\t\t\t\t\t\t\t\t\t\tnextValue,\n\t\t\t\t\t\t\t\t\t\t\tgetFieldChangeContext(index, column, value, nextValue),\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t: undefined;\n\t\t\t\t\t\t\t\t\tconst onBlur = isEditableField(column) && onVariantFieldBlur\n\t\t\t\t\t\t\t\t\t\t? (nextValue: string) => onVariantFieldBlur(\n\t\t\t\t\t\t\t\t\t\t\tvariant,\n\t\t\t\t\t\t\t\t\t\t\tcolumn,\n\t\t\t\t\t\t\t\t\t\t\tnextValue,\n\t\t\t\t\t\t\t\t\t\t\tgetFieldChangeContext(index, column, value, nextValue),\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t: undefined;\n\n\t\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\t\tindex,\n\t\t\t\t\t\t\t\t\t\tcolumn,\n\t\t\t\t\t\t\t\t\t\tvalue,\n\t\t\t\t\t\t\t\t\t\tvariantName,\n\t\t\t\t\t\t\t\t\t\toptionValues: optionSummary,\n\t\t\t\t\t\t\t\t\t\toptionLabel,\n\t\t\t\t\t\t\t\t\t\tcellDisplay: display,\n\t\t\t\t\t\t\t\t\t\tonValueChange,\n\t\t\t\t\t\t\t\t\t\tonBlur,\n\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\tconst renderCellContent = (\n\t\t\t\t\t\t\t\t\tcolumn: ProductVariantsBulkTableColumn,\n\t\t\t\t\t\t\t\t\tvalue: ReactNode | undefined,\n\t\t\t\t\t\t\t\t\tdisplay: ProductVariantCellDisplay,\n\t\t\t\t\t\t\t\t\tfallback: (context: ProductVariantCellRenderContext) => ReactNode,\n\t\t\t\t\t\t\t\t) => {\n\t\t\t\t\t\t\t\t\tconst context = createCellContext(column, value, display);\n\t\t\t\t\t\t\t\t\tconst rendered = renderCell?.(variant, context);\n\t\t\t\t\t\t\t\t\treturn rendered !== undefined ? rendered : fallback(context);\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\tconst shouldRenderOptionCombination =\n\t\t\t\t\t\t\t\t\toptionCombinationDisplay !== 'none' &&\n\t\t\t\t\t\t\t\t\toptionSummary.length > 0 &&\n\t\t\t\t\t\t\t\t\t(groupByOption ? !optionLabelMatchesVariantName : (optionCombinationDisplay === 'tags' || !optionLabelMatchesVariantName));\n\t\t\t\t\t\t\t\tconst renderedOptionCombination = optionCombinationDisplay !== 'none'\n\t\t\t\t\t\t\t\t\t? renderOptionCombination?.(variant, {\n\t\t\t\t\t\t\t\t\t\toptionGroups,\n\t\t\t\t\t\t\t\t\t\toptionValues: optionSummary,\n\t\t\t\t\t\t\t\t\t\toptionLabel,\n\t\t\t\t\t\t\t\t\t\tdisplay: optionCombinationDisplay,\n\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t: null;\n\t\t\t\t\t\t\t\tconst defaultRowActions = [\n\t\t\t\t\t\t\t\t\t...(onSelectVariant ? [{\n\t\t\t\t\t\t\t\t\t\tid: 'view',\n\t\t\t\t\t\t\t\t\t\tlabel: strings.viewLabel,\n\t\t\t\t\t\t\t\t\t\ticon: <Eye className=\"size-icon-md\" />,\n\t\t\t\t\t\t\t\t\t\tonClick: () => onSelectVariant(variant),\n\t\t\t\t\t\t\t\t\t\ttone: 'secondary' as const, buttonStyle: 'ghost' as const,\n\t\t\t\t\t\t\t\t\t}] : []),\n\t\t\t\t\t\t\t\t\t...(onEditVariant ? [{\n\t\t\t\t\t\t\t\t\t\tid: 'edit',\n\t\t\t\t\t\t\t\t\t\tlabel: strings.editLabel,\n\t\t\t\t\t\t\t\t\t\ticon: <Pencil className=\"size-icon-md\" />,\n\t\t\t\t\t\t\t\t\t\tonClick: () => onEditVariant(variant),\n\t\t\t\t\t\t\t\t\t\ttone: 'secondary' as const, buttonStyle: 'ghost' as const,\n\t\t\t\t\t\t\t\t\t}] : []),\n\t\t\t\t\t\t\t\t\t...(onDuplicateVariant ? [{\n\t\t\t\t\t\t\t\t\t\tid: 'duplicate',\n\t\t\t\t\t\t\t\t\t\tlabel: strings.duplicateLabel,\n\t\t\t\t\t\t\t\t\t\ticon: <Copy className=\"size-icon-md\" />,\n\t\t\t\t\t\t\t\t\t\tonClick: () => onDuplicateVariant(variant),\n\t\t\t\t\t\t\t\t\t\ttone: 'secondary' as const, buttonStyle: 'ghost' as const,\n\t\t\t\t\t\t\t\t\t}] : []),\n\t\t\t\t\t\t\t\t\t...(onDeleteVariant ? [{\n\t\t\t\t\t\t\t\t\t\tid: 'delete',\n\t\t\t\t\t\t\t\t\t\tlabel: strings.deleteLabel,\n\t\t\t\t\t\t\t\t\t\ticon: <Trash2 className=\"size-icon-md\" />,\n\t\t\t\t\t\t\t\t\t\tonClick: () => onDeleteVariant(variant),\n\t\t\t\t\t\t\t\t\t\ttone: 'destructive' as const,\n\t\t\t\t\t\t\t\t\t}] : []),\n\t\t\t\t\t\t\t\t];\n\n\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t<Fragment key={variant.id}>\n\t\t\t\t\t\t\t\t\t\t{shouldRenderGroup && (\n\t\t\t\t\t\t\t\t\t\t\t<TableRow className=\"product-variants-bulk-table--group-row border-b border-border/60 bg-muted/30\">\n\t\t\t\t\t\t\t\t\t\t\t\t<TableCell colSpan={tableColumnCount} className=\"px-space-lg py-space-md align-middle\">\n\t\t\t\t\t\t\t\t\t\t\t<Stack direction=\"horizontal\" gap=\"sm\" wrap={false}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Text type=\"inherit\" tag=\"span\" weight=\"semibold\" className=\"min-w-0 whitespace-normal break-words\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{groupLabel}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Text tag=\"span\" size=\"xs\" type=\"secondary\" className=\"whitespace-nowrap\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{strings.groupCountLabel(groupCounts.get(groupLabel ?? '') ?? 0)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t\t\t\t\t\t\t</TableCell>\n\t\t\t\t\t\t\t\t\t\t\t</TableRow>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t<TableRow className=\"h-20 border-b border-border/60 last:border-b-0\">\n\t\t\t\t\t\t\t\t\t\t{isSelectable && (\n\t\t\t\t\t\t\t\t\t\t\t<TableCell className=\"w-14 min-w-14 max-w-14 px-0 py-space-lg text-center align-middle\">\n\t\t\t\t\t\t\t\t\t\t\t\t<Checkbox\n\t\t\t\t\t\t\t\t\t\t\t\t\tchecked={isSelected}\n\t\t\t\t\t\t\t\t\t\t\t\t\tonCheckedChange={(checked) => toggleRow(variant, checked)}\n\t\t\t\t\t\t\t\t\t\t\t\t\taria-label={strings.selectRowLabel(index)}\n\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"mx-auto\"\n\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t</TableCell>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t{visibleColumnSet.has('variant') && (\n\t\t\t\t\t\t\t\t\t\t\t<TableCell className=\"px-space-lg py-space-lg align-middle\">\n\t\t\t\t\t\t\t\t\t\t\t\t{renderCellContent('variant', variantName, DEFAULT_CELL_DISPLAY, () => (\n\t\t\t\t\t\t\t\t\t\t\t\t<Stack gap=\"xs\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Text type=\"inherit\" weight=\"medium\" className=\"min-w-0 whitespace-normal break-words\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{variantName}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{renderedOptionCombination}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{!renderedOptionCombination && shouldRenderOptionCombination && optionCombinationDisplay === 'text' && (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Text size=\"xs\" type=\"secondary\" className=\"min-w-0 whitespace-normal break-words\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{optionSummary.map((value, valueIndex) => (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span key={`${variant.id}-option-text-${valueIndex}`}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{valueIndex > 0 ? ' / ' : null}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{value}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t{!renderedOptionCombination && shouldRenderOptionCombination && optionCombinationDisplay === 'tags' && (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Stack direction=\"horizontal\" gap=\"xs\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{optionSummary.map((value, valueIndex) => (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Badge\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tkey={`${variant.id}-option-${valueIndex}`}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttone=\"secondary\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"max-w-full\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{value}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Badge>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t\t\t\t</TableCell>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t{visibleColumnSet.has('sku') && (\n\t\t\t\t\t\t\t\t\t\t\t<TableCell className=\"px-space-lg py-space-md align-middle\">\n\t\t\t\t\t\t\t\t\t\t\t\t{renderCellContent('sku', variant.sku, resolveCellDisplay(cellDisplay, 'sku'), (context) => renderVariantCellValue(\n\t\t\t\t\t\t\t\t\t\t\t\t\tvariant.sku,\n\t\t\t\t\t\t\t\t\t\t\t\t\t`${strings.headers.sku}: ${getPlainText(variantName)}`,\n\t\t\t\t\t\t\t\t\t\t\t\t\tcontext.cellDisplay,\n\t\t\t\t\t\t\t\t\t\t\t\t\tcontext.onValueChange,\n\t\t\t\t\t\t\t\t\t\t\t\t\tcontext.onBlur,\n\t\t\t\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t\t\t\t</TableCell>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t{visibleColumnSet.has('price') && (\n\t\t\t\t\t\t\t\t\t\t\t<TableCell className=\"px-space-lg py-space-md align-middle\">\n\t\t\t\t\t\t\t\t\t\t\t\t{renderCellContent('price', variant.price, resolveCellDisplay(cellDisplay, 'price'), (context) => renderVariantCellValue(\n\t\t\t\t\t\t\t\t\t\t\t\t\tvariant.price,\n\t\t\t\t\t\t\t\t\t\t\t\t\t`${strings.headers.price}: ${getPlainText(variantName)}`,\n\t\t\t\t\t\t\t\t\t\t\t\t\tcontext.cellDisplay,\n\t\t\t\t\t\t\t\t\t\t\t\t\tcontext.onValueChange,\n\t\t\t\t\t\t\t\t\t\t\t\t\tcontext.onBlur,\n\t\t\t\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t\t\t\t</TableCell>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t{visibleColumnSet.has('inventory') && (\n\t\t\t\t\t\t\t\t\t\t\t<TableCell className=\"px-space-lg py-space-md align-middle\">\n\t\t\t\t\t\t\t\t\t\t\t\t{renderCellContent('inventory', variant.inventory, resolveCellDisplay(cellDisplay, 'inventory'), (context) => renderVariantCellValue(\n\t\t\t\t\t\t\t\t\t\t\t\t\tvariant.inventory,\n\t\t\t\t\t\t\t\t\t\t\t\t\t`${strings.headers.inventory}: ${getPlainText(variantName)}`,\n\t\t\t\t\t\t\t\t\t\t\t\t\tcontext.cellDisplay,\n\t\t\t\t\t\t\t\t\t\t\t\t\tcontext.onValueChange,\n\t\t\t\t\t\t\t\t\t\t\t\t\tcontext.onBlur,\n\t\t\t\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t\t\t\t</TableCell>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t{visibleColumnSet.has('status') && (\n\t\t\t\t\t\t\t\t\t\t\t<TableCell className=\"px-space-lg py-space-lg align-middle\">\n\t\t\t\t\t\t\t\t\t\t\t\t{renderCellContent('status', variant.status, DEFAULT_CELL_DISPLAY, () => (\n\t\t\t\t\t\t\t\t\t\t\t\t\tvariant.status ? (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Badge tone={variant.statusTone ?? 'secondary'}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{variant.status}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Badge>\n\t\t\t\t\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Text type=\"secondary\">{PRODUCT_EMPTY_VALUE}</Text>\n\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t\t\t\t</TableCell>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t{visibleColumnSet.has('updated') && (\n\t\t\t\t\t\t\t\t\t\t\t<TableCell className=\"px-space-lg py-space-lg align-middle\">\n\t\t\t\t\t\t\t\t\t\t\t\t{/* A date keeps the size and figures of its sibling value cells. */}\n\t\t\t\t\t\t\t\t\t\t\t\t{renderCellContent('updated', variant.updatedAt, DEFAULT_CELL_DISPLAY, () => renderVariantCellValue(\n\t\t\t\t\t\t\t\t\t\t\t\t\tvariant.updatedAt,\n\t\t\t\t\t\t\t\t\t\t\t\t\t`${strings.headers.updated}: ${getPlainText(variantName)}`,\n\t\t\t\t\t\t\t\t\t\t\t\t\t'text',\n\t\t\t\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t\t\t\t</TableCell>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t{hasRowActions && (\n\t\t\t\t\t\t\t\t\t\t\t<TableCell className=\"px-space-lg py-space-lg text-right align-middle\">\n\t\t\t\t\t\t\t\t\t\t\t\t{renderVariantActions ? (\n\t\t\t\t\t\t\t\t\t\t\t\t\trenderVariantActions(variant, actionContext)\n\t\t\t\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t\t\t\t<ProductRowActions\n\t\t\t\t\t\t\t\t\t\t\t\t\t\titem={variant}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tactions={defaultRowActions}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tmenuLabel={strings.headers.actions}\n\t\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t</TableCell>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t</TableRow>\n\t\t\t\t\t\t\t\t\t</Fragment>\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t</TableBody>\n\t\t\t\t</Table>\n\t\t\t</div>\n\t\t</Stack>\n\t);\n\n\tif (surface === 'embedded') {\n\t\treturn (\n\t\t\t<section\n\t\t\t\taria-label={strings.title}\n\t\t\t\tclassName={cn('product-variants-bulk-table--component min-w-0', className)}\n\t\t\t>\n\t\t\t\t{content}\n\t\t\t</section>\n\t\t);\n\t}\n\n\treturn (\n\t\t<ContentBlock\n\t\t\ttitle={strings.title}\n\t\t\tdescription={strings.description}\n\t\t\tactions={actions}\n\t\t\theaderAction={headerAction}\n\t\t\theaderEnd={headerEnd}\n\t\t\tfooterSlot={footerSlot}\n\t\t\tclassName={cn('product-variants-bulk-table--component w-full', className)}\n\t\t>\n\t\t\t{content}\n\t\t</ContentBlock>\n\t);\n}\n\nProductVariantsBulkTable.displayName = 'ProductVariantsBulkTable';\n","import { ListFilter, Plus, Search } from 'lucide-react';\nimport { useCallback, useMemo, useState } from 'react';\n\nimport { Button } from '../../../base/buttons';\nimport { Card } from '../../../base/cards';\nimport { Stack } from '../../../base/structure';\nimport { Select } from '../../../base/choice-inputs';\nimport { Text } from '../../../typography';\nimport { useStrings } from '../../../../lib/strings';\nimport { cn } from '../../../../lib/utils';\nimport { controlGroupHeightClasses, segmentedControlRecipes } from '../../../../lib/control-group-recipes';\nimport { useDensityConfig } from '../../../../lib/ui-provider';\nimport { resolveComponentScale } from '../../../../lib/ui-provider/scale';\n\nimport { defaultProductVariantsManagerStrings } from '../products.strings';\nimport type { ProductVariantsManagerProps } from '../products.types';\nimport { ProductOptionsMatrix } from './product-options-matrix';\nimport { ProductVariantsBulkTable } from './product-variants-bulk-table';\n\nexport function ProductVariantsManager({\n\toptionGroups = [],\n\tvariants = [],\n\tvisibleColumns,\n\toptionCombinationDisplay,\n\tcellDisplay,\n\tselectionMode,\n\trenderOptionCombination,\n\trenderCell,\n\tselectedVariantIds,\n\tdefaultSelectedVariantIds,\n\tonSelectedVariantIdsChange,\n\tonVariantFieldChange,\n\tonVariantFieldBlur,\n\tcollapsedOptionIds,\n\tdefaultCollapsedOptionIds,\n\tonCollapsedOptionIdsChange,\n\teditingOptionId,\n\tdefaultEditingOptionId,\n\tonEditingOptionIdChange,\n\tonCreateOption,\n\tonEditOption,\n\tonDeleteOption,\n\tonAddValue,\n\tonDeleteValue,\n\tonOptionNameChange,\n\tonValueLabelChange,\n\tonDoneEditingOption,\n\tonSaveEditingOption,\n\tonCancelEditingOption,\n\tonToggleUsedForVariants,\n\trenderOptionActions,\n\trenderValue,\n\tonCreateVariant,\n\tonGenerateVariants,\n\tonSelectVariant,\n\tonEditVariant,\n\tonDuplicateVariant,\n\tonDeleteVariant,\n\tonBulkEdit,\n\tonBulkApply,\n\tonBulkDelete,\n\trenderVariantActions,\n\trenderBulkActions,\n\tgroupByOptionId,\n\tdefaultGroupByOptionId,\n\tonGroupByOptionIdChange,\n\tonSearchVariants,\n\tonFilterVariants,\n\tcontrolsEnd,\n\tactions,\n\theaderEnd,\n\tfooterSlot,\n\tsurface = 'flat',\n\tpadding = surface === 'flat' ? 'none' : 'md',\n\theaderDivider,\n\tfooterDivider,\n\tclassName,\n\tstrings: stringsProp,\n\toptionsStrings,\n\tvariantsStrings,\n}: ProductVariantsManagerProps) {\n\tconst { defaultScale } = useDensityConfig();\n\tconst size = resolveComponentScale(undefined, defaultScale);\n\tconst strings = useStrings(defaultProductVariantsManagerStrings, stringsProp);\n\tconst groupableOptions = useMemo(\n\t\t() => optionGroups.filter((option) => option.usedForVariants !== false),\n\t\t[optionGroups],\n\t);\n\tconst fallbackGroupByOptionId = groupableOptions[0]?.id ?? null;\n\tconst isGroupByControlled = groupByOptionId !== undefined;\n\tconst [internalGroupByOptionId, setInternalGroupByOptionId] = useState<string | null>(\n\t\tdefaultGroupByOptionId ?? fallbackGroupByOptionId,\n\t);\n\tconst resolvedGroupByOptionId = groupByOptionId ?? internalGroupByOptionId ?? fallbackGroupByOptionId;\n\tconst groupByOptions = useMemo(\n\t\t() =>\n\t\t\tgroupableOptions.map((option) => ({\n\t\t\t\tvalue: option.id,\n\t\t\t\tlabel: String(typeof option.name === 'string' || typeof option.name === 'number' ? option.name : option.id),\n\t\t\t})),\n\t\t[groupableOptions],\n\t);\n\tconst updateGroupByOptionId = useCallback(\n\t\t(nextId: string | undefined) => {\n\t\t\tconst matchedOption = optionGroups.find((option) => option.id === nextId);\n\t\t\tif (!isGroupByControlled) {\n\t\t\t\tsetInternalGroupByOptionId(nextId ?? null);\n\t\t\t}\n\t\t\tonGroupByOptionIdChange?.(nextId, matchedOption);\n\t\t},\n\t\t[isGroupByControlled, onGroupByOptionIdChange, optionGroups],\n\t);\n\tconst headerAction =\n\t\tonGenerateVariants || onCreateVariant ? (\n\t\t\t<Stack direction=\"horizontal\" gap=\"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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"}
|