themelia-react-ui 2.0.5 → 3.0.0
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 +326 -0
- package/MIGRATION.md +858 -0
- package/README.md +35 -24
- package/dist/{accordion-B9MHG0cT.js → accordion-DNVqwEIC.js} +37 -37
- package/dist/accordion-DNVqwEIC.js.map +1 -0
- package/dist/action-menu-D5343RwT.js +286 -0
- package/dist/action-menu-D5343RwT.js.map +1 -0
- package/dist/ai-artifact-otrz9ZwS.js +1214 -0
- package/dist/ai-artifact-otrz9ZwS.js.map +1 -0
- package/dist/anchored-positioning-1U_eBFNx.js +9 -0
- package/dist/anchored-positioning-1U_eBFNx.js.map +1 -0
- package/dist/app-shell-CPN30Nb1.js +372 -0
- package/dist/app-shell-CPN30Nb1.js.map +1 -0
- package/dist/{attachment-Dg_69lPS.js → attachment-D2-fpfmv.js} +15 -15
- package/dist/{attachment-Dg_69lPS.js.map → attachment-D2-fpfmv.js.map} +1 -1
- package/dist/{auth-DTkkshS8.js → auth-g_oUTDDC.js} +236 -243
- package/dist/auth-g_oUTDDC.js.map +1 -0
- package/dist/{avatar-CeZaFmNH.js → avatar-Ca3Ihrq4.js} +4 -4
- package/dist/{avatar-CeZaFmNH.js.map → avatar-Ca3Ihrq4.js.map} +1 -1
- package/dist/{badge-xIiV_E7f.js → badge-oGiXblW7.js} +8 -9
- package/dist/badge-oGiXblW7.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 +1 -1
- package/dist/base/buttons.js +2 -2
- package/dist/base/cards.js +3 -3
- package/dist/base/carousel.js +11 -11
- package/dist/base/carousel.js.map +1 -1
- package/dist/base/cascader.js +1 -1
- package/dist/base/chart.js +1 -1
- package/dist/base/choice-inputs.js +2 -2
- package/dist/base/code-block.js +1 -1
- package/dist/base/combobox.js +1 -1
- package/dist/base/command.js +1 -1
- package/dist/base/copyable.js +1 -1
- package/dist/base/date-pickers.js +2 -2
- package/dist/base/display.js +7 -7
- package/dist/base/feedback.js +4 -4
- package/dist/base/forms-numeric.js +2 -2
- package/dist/base/forms.js +2 -2
- package/dist/base/inline-edit.js +13 -13
- package/dist/base/inline-edit.js.map +1 -1
- package/dist/base/item.js +1 -1
- package/dist/base/media-gallery.js +203 -2
- package/dist/base/media-gallery.js.map +1 -0
- package/dist/base/metadata-list.js +1 -1
- package/dist/base/navigation.js +7 -7
- package/dist/base/popover-menu.js +1 -1
- package/dist/base/popover.js +1 -1
- package/dist/base/qr-code.js +32 -22
- package/dist/base/qr-code.js.map +1 -1
- package/dist/base/repeaters.js +208 -198
- package/dist/base/repeaters.js.map +1 -1
- package/dist/base/sidebar.js +2 -2
- package/dist/base/signature-pad.js +14 -14
- package/dist/base/signature-pad.js.map +1 -1
- package/dist/base/skeleton.js +1 -1
- package/dist/base/spinner.js +8 -14
- package/dist/base/spinner.js.map +1 -1
- package/dist/base/structure.js +1 -1
- package/dist/base/table.js +1 -1
- package/dist/base/text-inputs.js +3 -3
- package/dist/base/toaster.js +2 -2
- package/dist/base/tree.js +2 -2
- package/dist/base/upload-queue.js +303 -2
- package/dist/base/upload-queue.js.map +1 -0
- package/dist/base/upload.js +3 -4
- package/dist/base/value-inputs.js +1 -1
- package/dist/{batch-action-bar-Cb8cuvyy.js → batch-action-bar-D6MZQNnC.js} +10 -10
- package/dist/{batch-action-bar-Cb8cuvyy.js.map → batch-action-bar-D6MZQNnC.js.map} +1 -1
- package/dist/blocks/admin.js +242 -228
- package/dist/blocks/admin.js.map +1 -1
- package/dist/blocks/ai.js +398 -354
- package/dist/blocks/ai.js.map +1 -1
- package/dist/blocks/analytics/charts.js +1022 -0
- package/dist/blocks/analytics/charts.js.map +1 -0
- package/dist/blocks/analytics/usage-card.js +1 -1
- package/dist/blocks/analytics.js +173 -1392
- 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 +1533 -1399
- package/dist/blocks/commerce.js.map +1 -1
- package/dist/blocks/data-display.js +2 -3
- package/dist/blocks/onboarding.js +91 -82
- package/dist/blocks/onboarding.js.map +1 -1
- package/dist/blocks/planning.js +25 -25
- package/dist/blocks/planning.js.map +1 -1
- package/dist/blocks/timelines.js +2 -2
- package/dist/breadcrumbs-CQ9JSlez.js +136 -0
- package/dist/breadcrumbs-CQ9JSlez.js.map +1 -0
- package/dist/{button-S2Cubiiz.js → button-rd6FiHfQ.js} +12 -8
- package/dist/button-rd6FiHfQ.js.map +1 -0
- package/dist/{buttons-BedGfygC.js → buttons-pZVgPTZn.js} +230 -246
- package/dist/buttons-pZVgPTZn.js.map +1 -0
- package/dist/{cards-rNX1M4Xn.js → cards-CgWyqvgZ.js} +25 -22
- package/dist/{cards-rNX1M4Xn.js.map → cards-CgWyqvgZ.js.map} +1 -1
- package/dist/cascader-Cf05pwaq.js +444 -0
- package/dist/cascader-Cf05pwaq.js.map +1 -0
- package/dist/{chart-Darg_0Kv.js → chart-CygRCyIZ.js} +5 -5
- package/dist/{chart-Darg_0Kv.js.map → chart-CygRCyIZ.js.map} +1 -1
- package/dist/{checkbox-fflqmODR.js → checkbox-Dy5_XBMZ.js} +4 -4
- package/dist/{checkbox-fflqmODR.js.map → checkbox-Dy5_XBMZ.js.map} +1 -1
- package/dist/{choice-inputs-zUgBZfE4.js → choice-inputs-oJEsrb5Y.js} +195 -184
- package/dist/choice-inputs-oJEsrb5Y.js.map +1 -0
- package/dist/{code-block-BzmM9Eig.js → code-block-BrLD7mCi.js} +44 -60
- package/dist/code-block-BrLD7mCi.js.map +1 -0
- package/dist/collapsible-CRCCg_bO.js +80 -0
- package/dist/collapsible-CRCCg_bO.js.map +1 -0
- package/dist/{collection-content-gDh1v6O4.js → collection-content-D7SoDlYd.js} +3 -3
- package/dist/{collection-content-gDh1v6O4.js.map → collection-content-D7SoDlYd.js.map} +1 -1
- package/dist/combobox-Dl6f6kHz.js +362 -0
- package/dist/combobox-Dl6f6kHz.js.map +1 -0
- package/dist/combobox-DrDXtSSt.js +929 -0
- package/dist/combobox-DrDXtSSt.js.map +1 -0
- package/dist/command-CjZ2VzKC.js +432 -0
- package/dist/command-CjZ2VzKC.js.map +1 -0
- package/dist/comments-C2MZyRmh.js +1214 -0
- package/dist/comments-C2MZyRmh.js.map +1 -0
- package/dist/components/base/accordion/accordion.d.ts +11 -3
- package/dist/components/base/action-menu/action-menu.d.ts +11 -3
- package/dist/components/base/buttons/button.d.ts +2 -2
- package/dist/components/base/buttons/index.d.ts +1 -1
- package/dist/components/base/buttons/loader-button.d.ts +6 -15
- package/dist/components/base/cards/index.d.ts +1 -1
- package/dist/components/base/cards/partials/card-body-context.d.ts +6 -0
- package/dist/components/base/cards/smart-card.d.ts +0 -2
- package/dist/components/base/cards/smart-card.types.d.ts +12 -10
- package/dist/components/base/cascader/cascader.d.ts +8 -2
- package/dist/components/base/cascader/cascader.types.d.ts +24 -2
- package/dist/components/base/cascader/index.d.ts +1 -1
- package/dist/components/base/choice-inputs/choice-types.d.ts +4 -0
- package/dist/components/base/choice-inputs/pill-radio-group.d.ts +7 -6
- package/dist/components/base/choice-inputs/switch.d.ts +1 -1
- package/dist/components/base/code-block/use-code-copy.d.ts +2 -6
- package/dist/components/base/combobox/combobox-field.d.ts +2 -2
- package/dist/components/base/command/command.d.ts +1 -1
- package/dist/components/base/date-pickers/date-picker-internals.d.ts +3 -1
- package/dist/components/base/date-pickers/datepicker.types.d.ts +11 -7
- package/dist/components/base/date-pickers/time-picker.d.ts +17 -3
- package/dist/components/base/display/dialog.d.ts +3 -9
- package/dist/components/base/display/index.d.ts +2 -3
- package/dist/components/base/display/separator.d.ts +1 -1
- package/dist/components/base/feedback/alert.d.ts +2 -1
- package/dist/components/base/feedback/empty.d.ts +10 -2
- package/dist/components/base/feedback/state-display.d.ts +5 -1
- package/dist/components/base/feedback/state-display.strings.d.ts +9 -0
- package/dist/components/base/forms/form-field.d.ts +7 -2
- package/dist/components/base/forms/workflow.d.ts +2 -2
- package/dist/components/base/forms-numeric/coordinates-input.d.ts +4 -1
- package/dist/components/base/forms-numeric/decimal-input.d.ts +2 -2
- package/dist/components/base/forms-numeric/dimensions-input.d.ts +13 -18
- package/dist/components/base/forms-numeric/index.d.ts +3 -3
- package/dist/components/base/forms-numeric/numeric-composite-field.d.ts +12 -0
- package/dist/components/base/forms-numeric/weight-input.d.ts +6 -1
- package/dist/components/base/item/item.types.d.ts +6 -2
- package/dist/components/base/metadata-list/index.d.ts +1 -3
- package/dist/components/base/metadata-list/metadata-list.d.ts +4 -1
- package/dist/components/base/navigation/index.d.ts +2 -2
- package/dist/components/base/navigation/language-switcher.d.ts +17 -8
- package/dist/components/base/navigation/navigation-tabs.d.ts +8 -1
- package/dist/components/base/navigation/page-header/index.d.ts +1 -1
- package/dist/components/base/navigation/page-header/page-header.d.ts +13 -17
- package/dist/components/base/navigation/pagination.d.ts +5 -5
- package/dist/components/base/popover/popover.recipes.d.ts +0 -1
- package/dist/components/base/qr-code/qr-code.d.ts +4 -0
- package/dist/components/base/repeaters/index.d.ts +1 -1
- package/dist/components/base/repeaters/key-value-editor.d.ts +6 -1
- package/dist/components/base/sheet/sheet.d.ts +6 -15
- package/dist/components/base/sidebar/index.d.ts +1 -6
- package/dist/components/base/sidebar/sidebar.d.ts +40 -10
- package/dist/components/base/skeleton/skeleton.d.ts +1 -1
- package/dist/components/base/structure/structure.types.d.ts +11 -2
- package/dist/components/base/text-inputs/index.d.ts +1 -1
- package/dist/components/base/tree/index.d.ts +1 -0
- package/dist/components/base/tree/tree.d.ts +2 -2
- package/dist/components/base/tree/tree.types.d.ts +7 -1
- package/dist/components/base/upload/avatar-upload.d.ts +2 -1
- package/dist/components/base/upload/file-upload.validation.d.ts +37 -1
- package/dist/components/base/upload/image-upload.d.ts +4 -1
- package/dist/components/base/upload/index.d.ts +3 -9
- package/dist/components/base/value-inputs/date-time-input.d.ts +4 -0
- package/dist/components/base/value-inputs/slider.d.ts +5 -2
- package/dist/components/blocks/admin/action-surfaces/index.d.ts +17 -4
- package/dist/components/blocks/admin/api-key-list/api-key-list.types.d.ts +9 -3
- package/dist/components/blocks/admin/index.d.ts +1 -1
- package/dist/components/blocks/ai/ai-artifact/ai-artifact.d.ts +1 -1
- package/dist/components/blocks/ai/ai-artifact/types.d.ts +9 -4
- package/dist/components/blocks/ai/ai-chain-of-thought/ai-chain-of-thought.d.ts +1 -1
- package/dist/components/blocks/ai/ai-chain-of-thought/types.d.ts +11 -1
- package/dist/components/blocks/ai/ai-citation/ai-citation.d.ts +1 -1
- package/dist/components/blocks/ai/ai-citation/types.d.ts +8 -0
- package/dist/components/blocks/ai/ai-confirmation/ai-confirmation.d.ts +1 -1
- package/dist/components/blocks/ai/ai-confirmation/types.d.ts +21 -5
- package/dist/components/blocks/ai/ai-feedback/types.d.ts +7 -2
- package/dist/components/blocks/ai/ai-inline-citation/types.d.ts +9 -3
- package/dist/components/blocks/ai/ai-package-info/ai-package-info.d.ts +1 -1
- package/dist/components/blocks/ai/ai-package-info/types.d.ts +6 -0
- package/dist/components/blocks/ai/ai-reasoning/types.d.ts +2 -0
- package/dist/components/blocks/ai/ai-sources/ai-sources.d.ts +1 -1
- package/dist/components/blocks/ai/ai-sources/types.d.ts +10 -2
- package/dist/components/blocks/ai/ai-task/ai-task.d.ts +1 -1
- package/dist/components/blocks/ai/ai-task/types.d.ts +10 -1
- package/dist/components/blocks/ai/ai-tool-call/ai-tool-call.d.ts +1 -1
- package/dist/components/blocks/ai/ai-tool-call/types.d.ts +8 -0
- package/dist/components/blocks/ai/ai.strings.d.ts +2 -0
- package/dist/components/blocks/analytics/activity-heatmap/types.d.ts +1 -1
- package/dist/components/blocks/analytics/analytics.strings.d.ts +2 -0
- package/dist/components/blocks/analytics/atoms/metric-trend-chip.d.ts +11 -1
- package/dist/components/blocks/analytics/chart-card/chart-card.d.ts +7 -5
- package/dist/components/blocks/analytics/charts/index.d.ts +27 -0
- package/dist/components/blocks/analytics/index.d.ts +17 -24
- package/dist/components/blocks/analytics/metric/metric.d.ts +7 -3
- package/dist/components/blocks/analytics/metric-comparison/metric-comparison.d.ts +2 -0
- package/dist/components/blocks/analytics/metric-grid/metric-grid.d.ts +4 -5
- package/dist/components/blocks/analytics/types.d.ts +13 -4
- package/dist/components/blocks/analytics/usage-card/usage-card.strings.d.ts +2 -0
- package/dist/components/blocks/commerce/address-card/address-card.d.ts +1 -1
- package/dist/components/blocks/commerce/address-card/types.d.ts +5 -16
- package/dist/components/blocks/commerce/booking-calendar-event-card/booking-calendar-event-card.d.ts +2 -2
- package/dist/components/blocks/commerce/booking-calendar-event-card/booking-calendar-event-card.types.d.ts +6 -4
- package/dist/components/blocks/commerce/cart-summary/cart-summary.d.ts +0 -2
- package/dist/components/blocks/commerce/cart-summary/index.d.ts +2 -2
- package/dist/components/blocks/commerce/cart-summary/types.d.ts +9 -11
- package/dist/components/blocks/commerce/coupon-input/coupon-input.d.ts +1 -1
- package/dist/components/blocks/commerce/coupon-input/types.d.ts +7 -3
- package/dist/components/blocks/commerce/discount-stack/discount-stack.d.ts +0 -2
- package/dist/components/blocks/commerce/discount-stack/index.d.ts +2 -2
- package/dist/components/blocks/commerce/discount-stack/types.d.ts +4 -6
- package/dist/components/blocks/commerce/fulfillment-group/fulfillment-group.d.ts +1 -1
- package/dist/components/blocks/commerce/fulfillment-group/types.d.ts +2 -0
- package/dist/components/blocks/commerce/giftcard-card/partials/giftcard-balance.d.ts +18 -0
- package/dist/components/blocks/commerce/giftcard-card/partials/giftcard-compact.d.ts +1 -1
- package/dist/components/blocks/commerce/giftcard-card/partials/giftcard-copy-button.d.ts +0 -1
- package/dist/components/blocks/commerce/giftcard-card/partials/giftcard-dark.d.ts +1 -1
- package/dist/components/blocks/commerce/giftcard-card/partials/giftcard-full.d.ts +1 -1
- package/dist/components/blocks/commerce/giftcard-card/partials/giftcard-illustrated.d.ts +1 -1
- package/dist/components/blocks/commerce/giftcard-card/partials/giftcard-minimal.d.ts +1 -1
- package/dist/components/blocks/commerce/giftcard-card/types.d.ts +16 -5
- package/dist/components/blocks/commerce/index.d.ts +8 -8
- package/dist/components/blocks/commerce/inventory-level/inventory-level.strings.d.ts +2 -0
- package/dist/components/blocks/commerce/inventory-level/types.d.ts +1 -1
- package/dist/components/blocks/commerce/inventory-section/types.d.ts +0 -5
- package/dist/components/blocks/commerce/invoice-line-items/types.d.ts +6 -3
- package/dist/components/blocks/commerce/loyalty-points/loyalty-points.d.ts +1 -1
- package/dist/components/blocks/commerce/loyalty-points/types.d.ts +11 -5
- package/dist/components/blocks/commerce/order-status/order-status.d.ts +1 -1
- package/dist/components/blocks/commerce/order-status/types.d.ts +12 -8
- package/dist/components/blocks/commerce/order-timeline/order-timeline.d.ts +1 -1
- package/dist/components/blocks/commerce/order-timeline/types.d.ts +3 -1
- package/dist/components/blocks/commerce/payment-method/index.d.ts +2 -2
- package/dist/components/blocks/commerce/payment-method/payment-method.d.ts +0 -8
- package/dist/components/blocks/commerce/payment-method/types.d.ts +0 -2
- package/dist/components/blocks/commerce/receipt/index.d.ts +1 -1
- package/dist/components/blocks/commerce/receipt/receipt-items.d.ts +1 -1
- package/dist/components/blocks/commerce/receipt/types.d.ts +10 -0
- package/dist/components/blocks/commerce/refund-status/index.d.ts +2 -2
- package/dist/components/blocks/commerce/refund-status/refund-status.d.ts +0 -2
- package/dist/components/blocks/commerce/refund-status/types.d.ts +0 -2
- package/dist/components/blocks/commerce/seo-listing/types.d.ts +7 -0
- package/dist/components/blocks/commerce/shared/code-entry.d.ts +39 -0
- package/dist/components/blocks/commerce/shared/order-status.d.ts +1 -1
- package/dist/components/blocks/commerce/subscription-summary/subscription-summary.d.ts +1 -1
- package/dist/components/blocks/commerce/subscription-summary/types.d.ts +10 -1
- package/dist/components/blocks/commerce/upcoming-booking/index.d.ts +2 -1
- package/dist/components/blocks/commerce/upcoming-booking/types.d.ts +8 -0
- package/dist/components/blocks/commerce/upcoming-booking/upcoming-booking.d.ts +2 -2
- package/dist/components/blocks/commerce/vendor-profile/types.d.ts +4 -5
- package/dist/components/blocks/commerce/voucher-entry/types.d.ts +6 -3
- package/dist/components/blocks/commerce/voucher-entry/voucher-entry.d.ts +1 -1
- package/dist/components/blocks/content-block-hooks.d.ts +22 -0
- package/dist/components/blocks/data-display/dense-info-card/dense-info.strings.d.ts +5 -1
- package/dist/components/blocks/data-display/dense-info-card/helpers.d.ts +3 -1
- package/dist/components/blocks/data-display/dense-info-card/index.d.ts +1 -1
- package/dist/components/blocks/data-display/dense-info-card/partials/dense-info-classification.d.ts +1 -1
- package/dist/components/blocks/data-display/dense-info-card/partials/dense-info-dashboard.d.ts +1 -1
- package/dist/components/blocks/data-display/dense-info-card/partials/dense-info-financial.d.ts +1 -1
- package/dist/components/blocks/data-display/dense-info-card/partials/dense-info-project.d.ts +1 -1
- package/dist/components/blocks/data-display/dense-info-card/partials/dense-info-score.d.ts +1 -1
- package/dist/components/blocks/data-display/dense-info-card/types.d.ts +12 -5
- package/dist/components/blocks/data-display/empty-state/empty-state.types.d.ts +10 -3
- package/dist/components/blocks/data-display/index.d.ts +0 -1
- package/dist/components/blocks/data-display/relationship-card-frame.d.ts +1 -1
- package/dist/components/blocks/onboarding/checklist/checklist.types.d.ts +5 -3
- package/dist/components/blocks/planning/task-card.types.d.ts +7 -3
- package/dist/components/blocks/timelines/changelog/types.d.ts +2 -2
- package/dist/components/blocks/timelines/index.d.ts +2 -2
- package/dist/components/blocks/timelines/milestones/types.d.ts +2 -2
- package/dist/components/blocks/timelines/shared/timeline.d.ts +6 -0
- package/dist/components/blocks/timelines/steps-card/index.d.ts +2 -1
- package/dist/components/blocks/timelines/steps-card/steps-card.d.ts +2 -2
- package/dist/components/blocks/timelines/steps-card/types.d.ts +13 -1
- package/dist/components/features/activities/activities.strings.d.ts +5 -3
- package/dist/components/features/activities/activities.types.d.ts +46 -22
- package/dist/components/features/activities/hooks/use-activity-feed.d.ts +6 -0
- package/dist/components/features/activities/hooks/use-activity-resources.d.ts +2 -1
- package/dist/components/features/activities/index.d.ts +1 -1
- package/dist/components/features/activities/partials/activity-headline.d.ts +5 -0
- package/dist/components/features/activities/partials/activity-row.d.ts +12 -13
- package/dist/components/features/activities/partials/row-layers.d.ts +7 -0
- package/dist/components/features/activities/relative-time.d.ts +18 -0
- package/dist/components/features/ai-chat/ai-chat.d.ts +6 -2
- package/dist/components/features/ai-chat/ai-chat.strings.d.ts +41 -2
- package/dist/components/features/ai-chat/ai-chat.types.d.ts +6 -0
- package/dist/components/features/ai-chat/hooks/use-ai-chat-scroll.d.ts +1 -1
- package/dist/components/features/ai-chat/partials/ai-chat-attachments-strip.d.ts +5 -1
- package/dist/components/features/ai-chat/partials/ai-chat-prompt-input.d.ts +2 -2
- package/dist/components/features/ai-chat/partials/ai-chat-queue.d.ts +3 -1
- package/dist/components/features/ai-chat/partials/ai-chat-suggestions-row.d.ts +6 -1
- package/dist/components/features/appointment-calendar/appointment-calendar.d.ts +1 -1
- package/dist/components/features/appointment-calendar/appointment-calendar.types.d.ts +20 -4
- package/dist/components/features/appointment-calendar/index.d.ts +1 -1
- package/dist/components/features/appointment-calendar/partials/appointment-agenda.d.ts +18 -10
- package/dist/components/features/async-preview/async-preview.d.ts +2 -2
- package/dist/components/features/async-preview/async-preview.types.d.ts +30 -1
- package/dist/components/features/async-preview/preview-trigger-cell.d.ts +7 -2
- package/dist/components/features/combobox/async-resource-combobox.d.ts +2 -2
- package/dist/components/features/combobox/combobox.d.ts +12 -3
- package/dist/components/features/combobox/components/error-message.d.ts +3 -1
- package/dist/components/features/combobox/hooks/use-combobox-core.d.ts +4 -3
- package/dist/components/features/combobox/hooks/use-combobox-state.d.ts +1 -0
- package/dist/components/features/combobox/hooks/use-load-more.d.ts +1 -0
- package/dist/components/features/combobox/index.d.ts +1 -1
- package/dist/components/features/combobox/types.d.ts +68 -37
- package/dist/components/features/comments/comments.strings.d.ts +6 -5
- package/dist/components/features/comments/comments.types.d.ts +40 -26
- package/dist/components/features/comments/hooks/use-attachment-upload.d.ts +5 -1
- package/dist/components/features/comments/hooks/use-comments.d.ts +8 -1
- package/dist/components/features/data-view/data-view.strings.d.ts +9 -2
- package/dist/components/features/data-view/data-view.types.d.ts +15 -2
- package/dist/components/features/email-composer/email-html.d.ts +5 -0
- package/dist/components/features/email-composer/http.d.ts +2 -0
- package/dist/components/features/email-composer/strings.d.ts +17 -2
- package/dist/components/features/email-composer/types.d.ts +19 -2
- package/dist/components/features/email-composer/use-composer.d.ts +2 -78
- package/dist/components/features/event-calendar/event-calendar-day-cell.d.ts +1 -1
- package/dist/components/features/event-calendar/event-calendar-event-badge.d.ts +1 -1
- package/dist/components/features/event-calendar/event-calendar-header.d.ts +1 -1
- package/dist/components/features/event-calendar/event-calendar-legend.d.ts +2 -2
- package/dist/components/features/event-calendar/event-calendar.d.ts +1 -1
- package/dist/components/features/event-calendar/event-calendar.types.d.ts +126 -21
- package/dist/components/features/filters/facets/date-facet.d.ts +4 -2
- package/dist/components/features/filters/facets/range-facet.d.ts +24 -7
- package/dist/components/features/filters/filter-context.d.ts +9 -0
- package/dist/components/features/filters/filters.strings.d.ts +36 -3
- package/dist/components/features/filters/filters.types.d.ts +75 -8
- package/dist/components/features/filters/hooks/use-filter-draft.d.ts +1 -0
- package/dist/components/features/filters/index.d.ts +2 -2
- package/dist/components/features/filters/operator-options.d.ts +25 -2
- package/dist/components/features/filters/partials/active-filter-item.d.ts +0 -13
- package/dist/components/features/filters/partials/async-options-status.d.ts +32 -0
- package/dist/components/features/filters/partials/date-filter-content.d.ts +3 -2
- package/dist/components/features/filters/partials/filter-draft-footer.d.ts +11 -0
- package/dist/components/features/filters/partials/filter-operator-select.d.ts +4 -2
- package/dist/components/features/filters/partials/filter-pill.d.ts +5 -1
- package/dist/components/features/filters/partials/filter-popover-content.d.ts +4 -2
- package/dist/components/features/filters/partials/filter-tabs.d.ts +2 -1
- package/dist/components/features/filters/partials/range-filter-content.d.ts +12 -0
- package/dist/components/features/filters/partials/regular-filter-content.d.ts +1 -1
- package/dist/components/features/filters/utils/filter-utils.d.ts +34 -5
- package/dist/components/features/global-search/global-search-dialog.d.ts +7 -1
- package/dist/components/features/global-search/global-search.d.ts +7 -1
- package/dist/components/features/global-search/global-search.strings.d.ts +19 -3
- package/dist/components/features/global-search/global-search.types.d.ts +30 -6
- package/dist/components/features/global-search/index.d.ts +1 -1
- package/dist/components/features/global-search/partials/global-search-idle-state.d.ts +6 -1
- package/dist/components/features/global-search/partials/global-search-input.d.ts +2 -0
- package/dist/components/features/kanban/index.d.ts +2 -2
- package/dist/components/features/kanban/kanban-context.d.ts +4 -0
- package/dist/components/features/kanban/kanban-keyboard.d.ts +7 -2
- package/dist/components/features/kanban/kanban.d.ts +10 -1
- package/dist/components/features/kanban/kanban.strings.d.ts +11 -2
- package/dist/components/features/kanban/kanban.types.d.ts +26 -0
- package/dist/components/features/map/map.d.ts +4 -0
- package/dist/components/features/map/place-autocomplete.d.ts +10 -1
- package/dist/components/features/media-library/hooks/use-media-library.d.ts +3 -1
- package/dist/components/features/media-library/media-library.d.ts +1 -1
- package/dist/components/features/media-library/media-library.strings.d.ts +39 -3
- package/dist/components/features/media-library/media-library.types.d.ts +82 -9
- package/dist/components/features/media-library/partials/media-library-partials.d.ts +3 -3
- package/dist/components/features/mentions/hooks/use-mentions-search.d.ts +7 -0
- package/dist/components/features/mentions/hooks/use-mentions.d.ts +16 -1
- package/dist/components/features/mentions/index.d.ts +1 -1
- package/dist/components/features/mentions/mentions.strings.d.ts +10 -2
- package/dist/components/features/mentions/partials/mention-chip.d.ts +1 -0
- package/dist/components/features/mentions/partials/mention-inline-suggestions.d.ts +12 -1
- package/dist/components/features/mentions/partials/mention-picker.d.ts +8 -1
- package/dist/components/features/mentions/partials/mention-search-error.d.ts +6 -0
- package/dist/components/features/mentions/utils/index.d.ts +0 -1
- package/dist/components/features/overlays/alert-dialog.d.ts +1 -1
- package/dist/components/features/overlays/dialog.d.ts +1 -1
- package/dist/components/features/overlays/drawer.d.ts +1 -1
- package/dist/components/features/overlays/hooks/use-overlay-visibility.d.ts +2 -2
- package/dist/components/features/overlays/index.d.ts +2 -2
- package/dist/components/features/overlays/overlays.strings.d.ts +2 -1
- package/dist/components/features/overlays/overlays.types.d.ts +27 -10
- package/dist/components/features/products/components/index.d.ts +0 -10
- package/dist/components/features/products/components/product-contract-overview.d.ts +1 -1
- package/dist/components/features/products/components/product-details-card.d.ts +1 -1
- package/dist/components/features/products/components/product-operations-card.d.ts +1 -1
- package/dist/components/features/products/components/product-option-action-menu.d.ts +1 -1
- package/dist/components/features/products/components/product-options-summary.d.ts +1 -1
- package/dist/components/features/products/components/product-policies-card.d.ts +1 -1
- package/dist/components/features/products/components/product-quote-preview-card.d.ts +1 -1
- package/dist/components/features/products/components/product-readiness-card.d.ts +1 -1
- package/dist/components/features/products/components/product-structure-card.d.ts +1 -1
- package/dist/components/features/products/components/product-variant-action-menu.d.ts +1 -1
- package/dist/components/features/products/components/product-variants-manager.d.ts +1 -1
- package/dist/components/features/products/components/product-variants-table.d.ts +1 -1
- package/dist/components/features/products/partials/product-surface.d.ts +15 -0
- package/dist/components/features/products/products.strings.d.ts +8 -0
- package/dist/components/features/products/products.types.d.ts +26 -8
- package/dist/components/features/questionnaire/questionnaire.types.d.ts +7 -2
- package/dist/components/features/resource/index.d.ts +2 -3
- package/dist/components/features/resource/resource.d.ts +2 -10
- package/dist/components/features/resource/resource.types.d.ts +7 -147
- package/dist/components/features/resource-assignment/partials/assignment-surface.d.ts +15 -0
- package/dist/components/features/resource-assignment/resource-assignment.strings.d.ts +6 -1
- package/dist/components/features/resource-assignment/resource-assignment.types.d.ts +6 -0
- package/dist/components/features/rich-text-editor/form-rich-text-editor.d.ts +1 -1
- package/dist/components/features/rich-text-editor/partials/caret-helpers.d.ts +5 -7
- package/dist/components/features/rich-text-editor/partials/editor-field-aria.d.ts +14 -0
- package/dist/components/features/rich-text-editor/partials/html-helpers.d.ts +2 -3
- package/dist/components/features/rich-text-editor/partials/image-uploads.d.ts +6 -2
- package/dist/components/features/rich-text-editor/partials/index.d.ts +2 -3
- package/dist/components/features/rich-text-editor/partials/rich-text-editor-tiptap.d.ts +0 -1
- package/dist/components/features/rich-text-editor/partials/rich-text-editor-toolbar.d.ts +5 -4
- package/dist/components/features/rich-text-editor/rich-text-editor.recipes.d.ts +1 -1
- package/dist/components/features/rich-text-editor/rich-text-editor.types.d.ts +30 -4
- package/dist/components/features/schema-form/hooks/use-schema-form.d.ts +10 -1
- package/dist/components/features/schema-form/partials/schema-form-field.d.ts +3 -1
- package/dist/components/features/schema-form/schema-form.d.ts +1 -1
- package/dist/components/features/schema-form/schema-form.types.d.ts +13 -5
- package/dist/components/features/schema-form/schema-form.utils.d.ts +1 -1
- package/dist/components/features/suggestions/suggestions.strings.d.ts +14 -0
- package/dist/components/features/suggestions/suggestions.types.d.ts +13 -5
- package/dist/components/features/table/data-table.d.ts +1 -1
- package/dist/components/features/table/filter-bar.d.ts +1 -1
- package/dist/components/features/table/index.d.ts +1 -0
- package/dist/components/features/table/pagination.d.ts +1 -1
- package/dist/components/features/table/partials/cell-value.d.ts +1 -1
- package/dist/components/features/table/table-body.d.ts +1 -1
- package/dist/components/features/table/table-header.d.ts +1 -1
- package/dist/components/features/table/table-helpers.d.ts +37 -12
- package/dist/components/features/table/table-region.recipes.d.ts +11 -0
- package/dist/components/features/table/table-toolbar.d.ts +1 -1
- package/dist/components/features/table/table.strings.d.ts +4 -0
- package/dist/components/features/table/table.types.d.ts +91 -49
- package/dist/components/features/theme-tweaker/theme-provider-settings.d.ts +4 -0
- package/dist/components/features/theme-tweaker/theme-tweaker.strings.d.ts +10 -7
- package/dist/components/features/theme-tweaker/theme-tweaker.utils.d.ts +17 -0
- package/dist/components/layout/app-shell/app-shell.types.d.ts +46 -49
- package/dist/components/layout/app-shell/index.d.ts +2 -2
- package/dist/components/layout/app-shell/shell-regions.d.ts +9 -0
- package/dist/components/layout/app-shell/shell-skip-link.d.ts +9 -0
- package/dist/components/layout/app-shell/sidebar-inset-layout.d.ts +1 -1
- package/dist/components/layout/app-shell/stacked-layout.d.ts +1 -1
- package/dist/components/layout/app-shell/topbar-sidebar-layout.d.ts +1 -1
- package/dist/components/layout/auth/auth-shell.d.ts +1 -1
- package/dist/components/layout/auth/auth.types.d.ts +0 -5
- package/dist/components/layout/containers/inline-gutter-context.d.ts +7 -0
- package/dist/components/layout/containers/main-landmark-context.d.ts +6 -0
- package/dist/components/layout/header/header.types.d.ts +19 -8
- package/dist/components/layout/header/partials/header-global-search-trigger.d.ts +1 -1
- package/dist/components/layout/header/partials/header-notifications.d.ts +1 -1
- package/dist/components/layout/header/partials/header-search.d.ts +1 -1
- package/dist/components/layout/hooks/use-command-shortcut.d.ts +10 -1
- package/dist/components/layout/layout.types.d.ts +6 -4
- package/dist/components/layout/navigation/breadcrumb-progress/breadcrumb-progress.d.ts +1 -1
- package/dist/components/layout/navigation/breadcrumb-progress/types.d.ts +9 -0
- package/dist/components/layout/navigation/section-nav/section-nav.d.ts +8 -1
- package/dist/components/layout/navigation/side-nav.d.ts +3 -2
- package/dist/components/layout/normalize-layout-path.d.ts +1 -0
- package/dist/components/layout/page/index.d.ts +2 -3
- package/dist/components/layout/page/page.strings.d.ts +12 -0
- package/dist/components/layout/page/page.types.d.ts +7 -110
- package/dist/components/layout/page/partials/page-header.d.ts +1 -1
- package/dist/components/layout/settings/index.d.ts +1 -1
- package/dist/components/layout/settings/settings.d.ts +4 -6
- package/dist/components/layout/sidebar/app-sidebar.d.ts +1 -1
- package/dist/components/layout/sidebar/components/sidebar-grouped-navigation.d.ts +1 -1
- package/dist/components/layout/sidebar/components/sidebar-navigation-footer.d.ts +1 -1
- package/dist/components/layout/sidebar/components/sidebar-navigation.d.ts +1 -1
- package/dist/components/layout/sidebar/index.d.ts +1 -1
- package/dist/components/layout/sidebar/sidebar-navigation-rail.d.ts +17 -7
- package/dist/components/layout/sidebar/sidebar.context.d.ts +1 -0
- package/dist/components/layout/sidebar/sidebar.types.d.ts +12 -12
- package/dist/components/layout/sidebar/sidebar.utils.d.ts +4 -0
- package/dist/components/layout/workspace/workspace.strings.d.ts +2 -2
- package/dist/components/layout/workspace/workspace.types.d.ts +13 -7
- package/dist/components/primitives/date.d.ts +22 -3
- package/dist/components/primitives/file-size.d.ts +8 -2
- package/dist/components/primitives/index.d.ts +1 -1
- package/dist/components/primitives/initials.d.ts +3 -1
- package/dist/components/primitives/link.d.ts +11 -3
- package/dist/components/primitives/money.d.ts +2 -2
- package/dist/components/primitives/number.d.ts +3 -2
- package/dist/components/typography/heading.d.ts +9 -3
- package/dist/components/typography/index.d.ts +1 -1
- package/dist/components/typography/rich-text/rich-text-tree.d.ts +7 -5
- package/dist/components/typography/text-link.d.ts +10 -3
- package/dist/components/ui/badge.d.ts +2 -4
- package/dist/components/ui/breadcrumb.d.ts +2 -3
- package/dist/components/ui/button.d.ts +8 -2
- package/dist/components/ui/collapsible.d.ts +1 -4
- package/dist/components/ui/command.d.ts +20 -18
- package/dist/components/ui/dialog.d.ts +3 -9
- package/dist/components/ui/empty.d.ts +2 -2
- package/dist/components/ui/input-group.d.ts +3 -3
- package/dist/components/ui/item.d.ts +3 -3
- package/dist/components/ui/popover.d.ts +3 -7
- package/dist/components/ui/sheet.d.ts +4 -12
- package/dist/components/ui/sidebar-state.d.ts +6 -1
- package/dist/components/ui/sidebar.d.ts +7 -4
- package/dist/components/ui/tabs.d.ts +2 -2
- package/dist/components/ui/toggle-group.d.ts +3 -3
- package/dist/components/ui/toggle.d.ts +2 -2
- package/dist/components/ui/tooltip.d.ts +1 -3
- package/dist/{containers-CIxwbZt5.js → containers-BdfLTP4w.js} +37 -32
- package/dist/containers-BdfLTP4w.js.map +1 -0
- package/dist/content-block-hooks-Z3iKjqd1.js +17 -0
- package/dist/content-block-hooks-Z3iKjqd1.js.map +1 -0
- package/dist/{copyable-DIznBqiT.js → copyable-Bmr14W0d.js} +6 -6
- package/dist/{copyable-DIznBqiT.js.map → copyable-Bmr14W0d.js.map} +1 -1
- package/dist/{data-display-BdgCAw8T.js → data-display-CWe9SOYh.js} +264 -250
- package/dist/data-display-CWe9SOYh.js.map +1 -0
- package/dist/date-3qsCE1ID.js +209 -0
- package/dist/date-3qsCE1ID.js.map +1 -0
- package/dist/date-picker-D1keJQIG.js +1617 -0
- package/dist/date-picker-D1keJQIG.js.map +1 -0
- package/dist/date-pickers-D8aJoeHc.js +185 -0
- package/dist/date-pickers-D8aJoeHc.js.map +1 -0
- package/dist/disclosure-panel-B0HFNZ9x.js.map +1 -1
- package/dist/{display-KsZLw9Ov.js → display-VlmP1I0i.js} +23 -46
- package/dist/display-VlmP1I0i.js.map +1 -0
- package/dist/{dropdown-menu-CLs8Lihj.js → dropdown-menu-B8hjvbkS.js} +9 -9
- package/dist/{dropdown-menu-CLs8Lihj.js.map → dropdown-menu-B8hjvbkS.js.map} +1 -1
- package/dist/dropzone-CHBNK3de.js +116 -0
- package/dist/dropzone-CHBNK3de.js.map +1 -0
- package/dist/features/activities.js +767 -700
- package/dist/features/activities.js.map +1 -1
- package/dist/features/ai-chat.js +280 -235
- package/dist/features/ai-chat.js.map +1 -1
- package/dist/features/appointment-calendar.js +430 -334
- package/dist/features/appointment-calendar.js.map +1 -1
- package/dist/features/async-preview.js +351 -265
- package/dist/features/async-preview.js.map +1 -1
- package/dist/features/combobox.js +2 -2
- package/dist/features/comments.js +1 -1
- package/dist/features/data-view.js +212 -151
- package/dist/features/data-view.js.map +1 -1
- package/dist/features/email-composer/engine.js +1 -1
- package/dist/features/email-composer.js +347 -313
- package/dist/features/email-composer.js.map +1 -1
- package/dist/features/event-calendar.js +501 -348
- package/dist/features/event-calendar.js.map +1 -1
- package/dist/features/filters.js +2 -2
- package/dist/features/global-search.js +250 -210
- package/dist/features/global-search.js.map +1 -1
- package/dist/features/kanban.js +280 -210
- package/dist/features/kanban.js.map +1 -1
- package/dist/features/map/style.css +15 -0
- package/dist/features/map.js +435 -404
- package/dist/features/map.js.map +1 -1
- package/dist/features/media-library.js +1745 -1195
- package/dist/features/media-library.js.map +1 -1
- package/dist/features/mentions.js +2 -2
- package/dist/features/overlays.js +2 -2
- package/dist/features/products.js +1862 -1759
- package/dist/features/products.js.map +1 -1
- package/dist/features/questionnaire.js +188 -168
- package/dist/features/questionnaire.js.map +1 -1
- package/dist/features/resource-assignment.js +223 -191
- package/dist/features/resource-assignment.js.map +1 -1
- package/dist/features/resource.js +55 -217
- package/dist/features/resource.js.map +1 -1
- package/dist/features/rich-text-editor.js +28 -19
- package/dist/features/rich-text-editor.js.map +1 -1
- package/dist/features/schema-form.js +380 -287
- package/dist/features/schema-form.js.map +1 -1
- package/dist/features/suggestions.js +90 -74
- package/dist/features/suggestions.js.map +1 -1
- package/dist/features/table.js +2 -2
- package/dist/features/theme-tweaker.js +718 -627
- package/dist/features/theme-tweaker.js.map +1 -1
- package/dist/feedback-DmqmXKLn.js +254 -0
- package/dist/feedback-DmqmXKLn.js.map +1 -0
- package/dist/{field-affordance-recipes-DWcNcOjh.js → field-affordance-recipes-DfbMadot.js} +13 -9
- package/dist/field-affordance-recipes-DfbMadot.js.map +1 -0
- package/dist/field-control-attributes-B6i335wr.js +18 -0
- package/dist/field-control-attributes-B6i335wr.js.map +1 -0
- package/dist/field-state-recipes-EtCxpEy3.js +18 -0
- package/dist/field-state-recipes-EtCxpEy3.js.map +1 -0
- package/dist/filters-BviMRMLS.js +2692 -0
- package/dist/filters-BviMRMLS.js.map +1 -0
- package/dist/{focus-recipes-B653VaLq.js → focus-recipes-DSkiUvUp.js} +3 -3
- package/dist/focus-recipes-DSkiUvUp.js.map +1 -0
- package/dist/form-field-BdfCwSoQ.js +74 -0
- package/dist/form-field-BdfCwSoQ.js.map +1 -0
- package/dist/{form-sizing-Bs2qFUeE.js → form-sizing-DE_dZw32.js} +3 -3
- package/dist/{form-sizing-Bs2qFUeE.js.map → form-sizing-DE_dZw32.js.map} +1 -1
- package/dist/{forms-C0RGnJTe.js → forms-B8DzJnBN.js} +35 -35
- package/dist/forms-B8DzJnBN.js.map +1 -0
- package/dist/forms-numeric-DOBswjKj.js +992 -0
- package/dist/forms-numeric-DOBswjKj.js.map +1 -0
- package/dist/{header-DMMxG__r.js → header-Cq3G0ZRP.js} +163 -158
- package/dist/header-Cq3G0ZRP.js.map +1 -0
- package/dist/hooks/use-files.d.ts +2 -0
- package/dist/{hooks-DB6CJ4MR.js → hooks-DHfeSMAO.js} +34 -14
- package/dist/hooks-DHfeSMAO.js.map +1 -0
- package/dist/{http-D_6rOnzU.js → http-Cu-GPpss.js} +61 -35
- package/dist/http-Cu-GPpss.js.map +1 -0
- package/dist/{icon-badge-DZF-YjQp.js → icon-badge-B0Kq7wom.js} +3 -3
- package/dist/{icon-badge-DZF-YjQp.js.map → icon-badge-B0Kq7wom.js.map} +1 -1
- package/dist/index.js +6 -6
- package/dist/inline-gutter-context-CSqmrMFZ.js +11 -0
- package/dist/inline-gutter-context-CSqmrMFZ.js.map +1 -0
- package/dist/{input-DMBwAZmr.js → input-2YrgTUrz.js} +3 -3
- package/dist/{input-DMBwAZmr.js.map → input-2YrgTUrz.js.map} +1 -1
- package/dist/{input-CvyDQlY7.js → input-DfJyrjoR.js} +7 -7
- package/dist/{input-CvyDQlY7.js.map → input-DfJyrjoR.js.map} +1 -1
- package/dist/{interaction-recipes-XR9ZpVYL.js → interaction-recipes-DmuS1ase.js} +2 -2
- package/dist/{interaction-recipes-XR9ZpVYL.js.map → interaction-recipes-DmuS1ase.js.map} +1 -1
- package/dist/item-GJ9mvCcg.js +279 -0
- package/dist/item-GJ9mvCcg.js.map +1 -0
- package/dist/layout/app-shell.js +1 -1
- package/dist/layout/auth.js +1 -1
- package/dist/layout/containers.js +1 -1
- package/dist/layout/header.js +1 -1
- package/dist/layout/hooks.js +1 -1
- package/dist/layout/navigation.js +1 -1
- package/dist/layout/page.js +2 -2
- package/dist/layout/settings.js +2 -2
- package/dist/layout/sidebar.js +3 -3
- package/dist/layout/workspace.js +1 -1
- package/dist/layout.js +12 -12
- package/dist/layout.types-DbtnyAtd.js +33 -0
- package/dist/layout.types-DbtnyAtd.js.map +1 -0
- package/dist/lib/anchored-positioning.d.ts +11 -0
- package/dist/lib/field-affordance-recipes.d.ts +10 -0
- package/dist/lib/field-control-attributes.d.ts +11 -0
- package/dist/lib/field-state-recipes.d.ts +8 -0
- package/dist/lib/focus-recipes.d.ts +7 -0
- package/dist/lib/format.d.ts +26 -0
- package/dist/lib/money-format.d.ts +6 -0
- package/dist/lib/motion-recipes.d.ts +6 -0
- package/dist/lib/surface-recipes.d.ts +33 -3
- package/dist/lib/theme-scope.d.ts +17 -1
- package/dist/lib/token-merge.generated.d.ts +19 -25
- package/dist/lib/ui-provider/index.d.ts +1 -1
- package/dist/lib/ui-provider/types.d.ts +5 -0
- package/dist/lib/use-controllable-state.d.ts +16 -0
- package/dist/lib/use-copy-feedback.d.ts +15 -0
- package/dist/lib/utils.js +1 -1
- package/dist/lib/variant-props.d.ts +9 -0
- package/dist/main-landmark-context-BAsyqp2I.js +11 -0
- package/dist/main-landmark-context-BAsyqp2I.js.map +1 -0
- package/dist/mentions-zz0ewNIq.js +670 -0
- package/dist/mentions-zz0ewNIq.js.map +1 -0
- package/dist/message-BiiVrRrm.js +138 -0
- package/dist/message-BiiVrRrm.js.map +1 -0
- package/dist/{metadata-list-C3MkU-Om.js → metadata-list-G85roWjS.js} +13 -12
- package/dist/metadata-list-G85roWjS.js.map +1 -0
- package/dist/{motion-recipes-DitYv6P2.js → motion-recipes-CUc_aHuG.js} +7 -4
- package/dist/motion-recipes-CUc_aHuG.js.map +1 -0
- package/dist/navigation-C0Be5C3i.js +304 -0
- package/dist/navigation-C0Be5C3i.js.map +1 -0
- package/dist/navigation-CmqaQR_G.js +257 -0
- package/dist/navigation-CmqaQR_G.js.map +1 -0
- package/dist/normalize-layout-path-BmEgg6fu.js +14 -0
- package/dist/normalize-layout-path-BmEgg6fu.js.map +1 -0
- package/dist/number-NFWKIoiK.js +340 -0
- package/dist/number-NFWKIoiK.js.map +1 -0
- package/dist/{overflow-tab-bar-IVFVQFV6.js → overflow-tab-bar-DV7HE_3t.js} +8 -8
- package/dist/{overflow-tab-bar-IVFVQFV6.js.map → overflow-tab-bar-DV7HE_3t.js.map} +1 -1
- package/dist/{overlays-BSgCtM2v.js → overlays-D-gAIfPF.js} +369 -364
- package/dist/overlays-D-gAIfPF.js.map +1 -0
- package/dist/page-D4pQhgSq.js +216 -0
- package/dist/page-D4pQhgSq.js.map +1 -0
- package/dist/{page-header-commands-7P3sfE9u.js → page-header-commands-elelNOfd.js} +29 -29
- package/dist/{page-header-commands-7P3sfE9u.js.map → page-header-commands-elelNOfd.js.map} +1 -1
- package/dist/{pagination-CgCjElfu.js → pagination-BuSWw1US.js} +22 -23
- package/dist/pagination-BuSWw1US.js.map +1 -0
- package/dist/popover-BpMxbqEK.js +205 -0
- package/dist/popover-BpMxbqEK.js.map +1 -0
- package/dist/{popover-menu-DlnQ2zlR.js → popover-menu-CO-_iiuz.js} +7 -7
- package/dist/{popover-menu-DlnQ2zlR.js.map → popover-menu-CO-_iiuz.js.map} +1 -1
- package/dist/{popover.recipes-DdiEp0rd.js → popover.recipes-BqkdvlZn.js} +3 -4
- package/dist/{popover.recipes-DdiEp0rd.js.map → popover.recipes-BqkdvlZn.js.map} +1 -1
- package/dist/{portal-recipes-BpsV_iRw.js → portal-recipes-BPeS4rGB.js} +2 -2
- package/dist/{portal-recipes-BpsV_iRw.js.map → portal-recipes-BPeS4rGB.js.map} +1 -1
- package/dist/primitives-BlC1lXBr.js +447 -0
- package/dist/primitives-BlC1lXBr.js.map +1 -0
- package/dist/primitives.js +4 -4
- package/dist/{progress-BJhQP9WX.js → progress-RARK8AjB.js} +5 -5
- package/dist/{progress-BJhQP9WX.js.map → progress-RARK8AjB.js.map} +1 -1
- package/dist/receipt-CUf2Vegp.js +114 -0
- package/dist/receipt-CUf2Vegp.js.map +1 -0
- package/dist/rich-text-Cypm9__d.js +44 -0
- package/dist/rich-text-Cypm9__d.js.map +1 -0
- package/dist/rich-text-editor-Z6cQepsA.js +919 -0
- package/dist/rich-text-editor-Z6cQepsA.js.map +1 -0
- package/dist/rich-text-editor-toolbar-DYbRJARB.js +100 -0
- package/dist/rich-text-editor-toolbar-DYbRJARB.js.map +1 -0
- package/dist/rich-text-tree-DdKHIJx4.js +154 -0
- package/dist/rich-text-tree-DdKHIJx4.js.map +1 -0
- package/dist/{scroll-area-B0dB2cBi.js → scroll-area-B9HKbji0.js} +3 -3
- package/dist/{scroll-area-B0dB2cBi.js.map → scroll-area-B9HKbji0.js.map} +1 -1
- package/dist/{separator-Ct_WSWTJ.js → separator-DaDe26sf.js} +3 -3
- package/dist/separator-DaDe26sf.js.map +1 -0
- package/dist/{separator-Bb17I4pu.js → separator-KGsNXt2J.js} +2 -2
- package/dist/{separator-Bb17I4pu.js.map → separator-KGsNXt2J.js.map} +1 -1
- package/dist/services/actions/action-adapters.d.ts +5 -2
- package/dist/services/actions/index.d.ts +1 -1
- package/dist/services/actions.js +2 -2
- package/dist/services/actions.js.map +1 -1
- package/dist/settings-D5j_RJvT.js +160 -0
- package/dist/settings-D5j_RJvT.js.map +1 -0
- package/dist/sheet-B6j_BE9O.js +241 -0
- package/dist/sheet-B6j_BE9O.js.map +1 -0
- package/dist/{sidebar-f9gRWXIR.js → sidebar-C-iQ_TJP.js} +379 -350
- package/dist/sidebar-C-iQ_TJP.js.map +1 -0
- package/dist/sidebar-D5VO2W8S.js +715 -0
- package/dist/sidebar-D5VO2W8S.js.map +1 -0
- package/dist/{skeleton-BapcJd9C.js → skeleton-Cab_KgVo.js} +13 -13
- package/dist/skeleton-Cab_KgVo.js.map +1 -0
- package/dist/{smart-card-CW0hjetE.js → smart-card-C59z6KFO.js} +217 -210
- package/dist/smart-card-C59z6KFO.js.map +1 -0
- package/dist/{structure-DuxKl954.js → structure-DElaQwwN.js} +2 -2
- package/dist/{structure-DuxKl954.js.map → structure-DElaQwwN.js.map} +1 -1
- package/dist/style.css +1 -1
- package/dist/{surface-recipes-BKRVW8Os.js → surface-recipes-DV6rrOFq.js} +11 -3
- package/dist/surface-recipes-DV6rrOFq.js.map +1 -0
- package/dist/table-CSRUgpdK.js +180 -0
- package/dist/table-CSRUgpdK.js.map +1 -0
- package/dist/table-DdXDBsR_.js +1657 -0
- package/dist/table-DdXDBsR_.js.map +1 -0
- package/dist/tabs-WnHfV2pM.js +192 -0
- package/dist/tabs-WnHfV2pM.js.map +1 -0
- package/dist/{text-inputs-B1culiSK.js → text-inputs-ljyBYaCd.js} +112 -112
- package/dist/text-inputs-ljyBYaCd.js.map +1 -0
- package/dist/theme.css +21 -5
- package/dist/timelines-mOmS9Eh3.js +479 -0
- package/dist/timelines-mOmS9Eh3.js.map +1 -0
- package/dist/tooltip-yjX-Uv-p.js +112 -0
- package/dist/tooltip-yjX-Uv-p.js.map +1 -0
- package/dist/{tree-CzUJHnFs.js → tree-YpkxUG2Z.js} +80 -72
- package/dist/tree-YpkxUG2Z.js.map +1 -0
- package/dist/typography/rich-text.js +1 -1
- package/dist/{typography-BQnine1k.js → typography-C0dELqYV.js} +46 -40
- package/dist/typography-C0dELqYV.js.map +1 -0
- package/dist/typography.js +1 -1
- package/dist/{ui-provider-C-74NVLc.js → ui-provider-Bu1S-o96.js} +4 -3
- package/dist/ui-provider-Bu1S-o96.js.map +1 -0
- package/dist/ui-provider.js +2 -2
- package/dist/upload-DMuMYJFT.js +875 -0
- package/dist/upload-DMuMYJFT.js.map +1 -0
- package/dist/{usage-card-BeSLY0i0.js → usage-card-DDPki5P1.js} +57 -54
- package/dist/usage-card-DDPki5P1.js.map +1 -0
- package/dist/use-controllable-state-BlP8SyBI.js +13 -0
- package/dist/use-controllable-state-BlP8SyBI.js.map +1 -0
- package/dist/use-copy-feedback-CzcaqlLf.js +28 -0
- package/dist/use-copy-feedback-CzcaqlLf.js.map +1 -0
- package/dist/use-metric-format-options-Dk4rC1NO.js +251 -0
- package/dist/use-metric-format-options-Dk4rC1NO.js.map +1 -0
- package/dist/{utils-B6kKb8jB.js → utils-BVbAG2J6.js} +128 -112
- package/dist/utils-BVbAG2J6.js.map +1 -0
- package/dist/value-inputs-h5MwjGCo.js +982 -0
- package/dist/value-inputs-h5MwjGCo.js.map +1 -0
- package/dist/value-typography-D15uwfj-.js +154 -0
- package/dist/value-typography-D15uwfj-.js.map +1 -0
- package/dist/workspace-DIryPqBt.js +400 -0
- package/dist/workspace-DIryPqBt.js.map +1 -0
- package/docs/consumer-skill/SKILL.md +7 -0
- package/docs/consumer-skill/agents/themelia-ui-designer.md +11 -2
- package/docs/consumer-skill/examples/analytics.tsx +1 -1
- package/docs/consumer-skill/examples/app-layout.tsx +3 -3
- package/docs/consumer-skill/examples/commerce-lines.tsx +7 -5
- package/docs/consumer-skill/examples/detail.tsx +3 -2
- package/docs/consumer-skill/examples/edit.tsx +3 -3
- package/docs/consumer-skill/examples/email-composer.tsx +1 -1
- package/docs/consumer-skill/examples/index-table.tsx +2 -2
- package/docs/consumer-skill/examples/scoped-directory.tsx +7 -6
- package/docs/consumer-skill/references/agents-md.md +27 -23
- package/docs/consumer-skill/references/analytics.md +33 -4
- package/docs/consumer-skill/references/building-views.md +213 -0
- package/docs/consumer-skill/references/catalogue.md +617 -0
- package/docs/consumer-skill/references/component-contracts.json +25852 -32067
- package/docs/consumer-skill/references/composition.md +42 -21
- package/docs/consumer-skill/references/design-contract.md +1 -0
- package/docs/consumer-skill/references/discovery.md +8 -5
- package/docs/consumer-skill/references/installation.md +59 -10
- package/docs/consumer-skill/references/integration.md +28 -5
- package/docs/consumer-skill/references/product-composition.md +2 -2
- package/docs/consumer-skill/references/public-api.json +726 -641
- package/docs/consumer-skill/references/review.md +57 -15
- package/docs/consumer-skill/references/rhf-workflows.md +72 -0
- package/docs/consumer-skill/references/screen-archetypes.md +2 -2
- package/docs/consumer-skill/references/theming.md +8 -3
- package/docs/consumer-skill/references/tokens.json +4 -4
- package/docs/consumer-skill/references/workflows.md +7 -7
- package/docs/consumer-skill/scripts/composition-policy.mjs +178 -44
- package/docs/consumer-skill/scripts/composition.mjs +4 -1
- package/docs/consumer-skill/scripts/discovery.mjs +3 -1
- package/docs/consumer-skill/scripts/setup-skills.mjs +74 -10
- package/docs/consumer-skills/themelia-components/SKILL.md +8 -4
- package/docs/consumer-skills/themelia-composition/SKILL.md +7 -3
- package/docs/consumer-skills/themelia-design/SKILL.md +7 -1
- package/docs/consumer-skills/themelia-tokenization/SKILL.md +1 -1
- package/package.json +12 -13
- package/templates/README.md +3 -2
- package/templates/admin-shell-template.tsx +50 -11
- package/templates/analytics-operations-template.tsx +20 -24
- package/templates/customers-template.tsx +30 -25
- package/templates/index.ts +2 -8
- package/templates/orders-template.tsx +28 -24
- package/templates/products-template.tsx +14 -4
- package/templates/user-permissions-template.tsx +11 -14
- package/dist/accordion-B9MHG0cT.js.map +0 -1
- package/dist/action-menu-Dr8K-ghE.js +0 -284
- package/dist/action-menu-Dr8K-ghE.js.map +0 -1
- package/dist/ai-artifact-C58tQcBy.js +0 -1185
- package/dist/ai-artifact-C58tQcBy.js.map +0 -1
- package/dist/anchored-positioning-DPnKTvNs.js +0 -6
- package/dist/anchored-positioning-DPnKTvNs.js.map +0 -1
- package/dist/app-shell-B_IuNWOo.js +0 -321
- package/dist/app-shell-B_IuNWOo.js.map +0 -1
- package/dist/auth-DTkkshS8.js.map +0 -1
- package/dist/badge-xIiV_E7f.js.map +0 -1
- package/dist/base/sheet.js +0 -3
- package/dist/breadcrumbs-J-K2kl4c.js +0 -129
- package/dist/breadcrumbs-J-K2kl4c.js.map +0 -1
- package/dist/button-S2Cubiiz.js.map +0 -1
- package/dist/buttons-BedGfygC.js.map +0 -1
- package/dist/cascader-B1MiqkBq.js +0 -439
- package/dist/cascader-B1MiqkBq.js.map +0 -1
- package/dist/choice-inputs-zUgBZfE4.js.map +0 -1
- package/dist/code-block-BzmM9Eig.js.map +0 -1
- package/dist/collapsible-BkAI_XD4.js +0 -81
- package/dist/collapsible-BkAI_XD4.js.map +0 -1
- package/dist/combobox-BEx0vJgF.js +0 -362
- package/dist/combobox-BEx0vJgF.js.map +0 -1
- package/dist/combobox-BwzoXFSG.js +0 -884
- package/dist/combobox-BwzoXFSG.js.map +0 -1
- package/dist/command-CrlPIL6m.js +0 -425
- package/dist/command-CrlPIL6m.js.map +0 -1
- package/dist/comments-Dmpp0YIc.js +0 -1169
- package/dist/comments-Dmpp0YIc.js.map +0 -1
- package/dist/components/base/buttons/tooltip-button.d.ts +0 -7
- package/dist/components/base/display/content-block.d.ts +0 -75
- package/dist/components/base/display/content-block.strings.d.ts +0 -5
- package/dist/components/base/sheet/index.d.ts +0 -29
- package/dist/components/blocks/ai/use-copy-feedback.d.ts +0 -6
- package/dist/components/blocks/data-display/metadata/index.d.ts +0 -30
- package/dist/components/features/mentions/utils/split-html-by-mentions.d.ts +0 -16
- package/dist/components/features/resource/resource.strings.d.ts +0 -12
- package/dist/components/features/rich-text-editor/partials/rich-text-editor-fallback.d.ts +0 -8
- package/dist/components/features/sync/index.d.ts +0 -26
- package/dist/components/features/sync/sync-range-dialog-form.d.ts +0 -5
- package/dist/components/features/sync/sync.strings.d.ts +0 -18
- package/dist/components/features/sync/sync.types.d.ts +0 -44
- package/dist/components/layout/page/partials/page-actions.d.ts +0 -3
- package/dist/components/ui/slot.d.ts +0 -6
- package/dist/containers-CIxwbZt5.js.map +0 -1
- package/dist/data-display-BdgCAw8T.js.map +0 -1
- package/dist/date-Cq8ioE4o.js +0 -144
- package/dist/date-Cq8ioE4o.js.map +0 -1
- package/dist/date-picker-RlIzKom_.js +0 -1551
- package/dist/date-picker-RlIzKom_.js.map +0 -1
- package/dist/date-pickers-DY-CpXS1.js +0 -179
- package/dist/date-pickers-DY-CpXS1.js.map +0 -1
- package/dist/display-KsZLw9Ov.js.map +0 -1
- package/dist/features/sync.js +0 -142
- package/dist/features/sync.js.map +0 -1
- package/dist/feedback-Dm4izqFn.js +0 -240
- package/dist/feedback-Dm4izqFn.js.map +0 -1
- package/dist/field-affordance-recipes-DWcNcOjh.js.map +0 -1
- package/dist/field-state-recipes-BVA2CWHo.js +0 -12
- package/dist/field-state-recipes-BVA2CWHo.js.map +0 -1
- package/dist/filters-DzgSJpMK.js +0 -2257
- package/dist/filters-DzgSJpMK.js.map +0 -1
- package/dist/focus-recipes-B653VaLq.js.map +0 -1
- package/dist/form-field-BriWAXyg.js +0 -63
- package/dist/form-field-BriWAXyg.js.map +0 -1
- package/dist/forms-C0RGnJTe.js.map +0 -1
- package/dist/forms-numeric-DIhghX1Q.js +0 -910
- package/dist/forms-numeric-DIhghX1Q.js.map +0 -1
- package/dist/header-DMMxG__r.js.map +0 -1
- package/dist/hooks-DB6CJ4MR.js.map +0 -1
- package/dist/http-D_6rOnzU.js.map +0 -1
- package/dist/item-DjCcM18E.js +0 -277
- package/dist/item-DjCcM18E.js.map +0 -1
- package/dist/layout.types-Cn7aUzJp.js +0 -20
- package/dist/layout.types-Cn7aUzJp.js.map +0 -1
- package/dist/media-gallery-C-vChPmE.js +0 -203
- package/dist/media-gallery-C-vChPmE.js.map +0 -1
- package/dist/mentions-0_4nWuI-.js +0 -570
- package/dist/mentions-0_4nWuI-.js.map +0 -1
- package/dist/message-g8p7eVtN.js +0 -128
- package/dist/message-g8p7eVtN.js.map +0 -1
- package/dist/metadata-list-C3MkU-Om.js.map +0 -1
- package/dist/motion-recipes-DitYv6P2.js.map +0 -1
- package/dist/navigation-C90-oQFq.js +0 -255
- package/dist/navigation-C90-oQFq.js.map +0 -1
- package/dist/navigation-DaRjthVk.js +0 -288
- package/dist/navigation-DaRjthVk.js.map +0 -1
- package/dist/number-CRU3kGuk.js +0 -354
- package/dist/number-CRU3kGuk.js.map +0 -1
- package/dist/overlays-BSgCtM2v.js.map +0 -1
- package/dist/page-DUUKDAjo.js +0 -331
- package/dist/page-DUUKDAjo.js.map +0 -1
- package/dist/pagination-CgCjElfu.js.map +0 -1
- package/dist/popover-B85RenIl.js +0 -201
- package/dist/popover-B85RenIl.js.map +0 -1
- package/dist/primitives-ByWgGUgt.js +0 -380
- package/dist/primitives-ByWgGUgt.js.map +0 -1
- package/dist/receipt-tOc7B3hw.js +0 -116
- package/dist/receipt-tOc7B3hw.js.map +0 -1
- package/dist/rich-text-Dth5E882.js +0 -78
- package/dist/rich-text-Dth5E882.js.map +0 -1
- package/dist/rich-text-editor-C1fOjBTd.js +0 -1195
- package/dist/rich-text-editor-C1fOjBTd.js.map +0 -1
- package/dist/rich-text-editor-toolbar-laT3tpBT.js +0 -98
- package/dist/rich-text-editor-toolbar-laT3tpBT.js.map +0 -1
- package/dist/sanitize-html-DsQmI48u.js +0 -92
- package/dist/sanitize-html-DsQmI48u.js.map +0 -1
- package/dist/separator-Ct_WSWTJ.js.map +0 -1
- package/dist/settings-Bar5wiSo.js +0 -167
- package/dist/settings-Bar5wiSo.js.map +0 -1
- package/dist/sheet-BGPERY55.js +0 -250
- package/dist/sheet-BGPERY55.js.map +0 -1
- package/dist/sidebar-D-JYMMbY.js +0 -686
- package/dist/sidebar-D-JYMMbY.js.map +0 -1
- package/dist/sidebar-f9gRWXIR.js.map +0 -1
- package/dist/skeleton-BapcJd9C.js.map +0 -1
- package/dist/slot-CLF9kLrS.js +0 -16
- package/dist/slot-CLF9kLrS.js.map +0 -1
- package/dist/smart-card-CW0hjetE.js.map +0 -1
- package/dist/surface-recipes-BKRVW8Os.js.map +0 -1
- package/dist/table-B4TE7iOV.js +0 -175
- package/dist/table-B4TE7iOV.js.map +0 -1
- package/dist/table-CFOWY9pQ.js +0 -1536
- package/dist/table-CFOWY9pQ.js.map +0 -1
- package/dist/tabs-e7ko9S2o.js +0 -191
- package/dist/tabs-e7ko9S2o.js.map +0 -1
- package/dist/text-inputs-B1culiSK.js.map +0 -1
- package/dist/timelines-D3Sl9ueq.js +0 -458
- package/dist/timelines-D3Sl9ueq.js.map +0 -1
- package/dist/tooltip-8wz5S_Zr.js +0 -113
- package/dist/tooltip-8wz5S_Zr.js.map +0 -1
- package/dist/tree-CzUJHnFs.js.map +0 -1
- package/dist/typography-BQnine1k.js.map +0 -1
- package/dist/ui-provider-C-74NVLc.js.map +0 -1
- package/dist/upload-BOW6U2tI.js +0 -855
- package/dist/upload-BOW6U2tI.js.map +0 -1
- package/dist/upload-queue-qUXn1ykN.js +0 -409
- package/dist/upload-queue-qUXn1ykN.js.map +0 -1
- package/dist/usage-card-BeSLY0i0.js.map +0 -1
- package/dist/utils-B6kKb8jB.js.map +0 -1
- package/dist/value-inputs-skdVB2zh.js +0 -980
- package/dist/value-inputs-skdVB2zh.js.map +0 -1
- package/dist/value-typography-uAmWUAL1.js +0 -116
- package/dist/value-typography-uAmWUAL1.js.map +0 -1
- package/dist/workspace-DHeHv0qw.js +0 -411
- package/dist/workspace-DHeHv0qw.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"products.js","names":["getPlainText","_Fragment","_Fragment","resolveComponentScale","useDensityConfig","cn","Button","Text","DisplayLabel","focusRecipes","Grid","Stack","dotRecipes","AlertDescription","Card","AlertTitle","Progress","compositionRhythm","compositionClasses","useOverlayVisibility","ConfirmDialog","interactionRecipes","Value","SecondaryValue","Percent","Badge","BatchActionBar","Separator","fieldAffordanceRecipes","Input","FormField","Textarea","Switch","Select","Checkbox","ContentBlock","segmentedControlRecipes","controlGroupHeightClasses","ItemMedia","ItemDescription","ItemActions","ItemGroup","ItemContent","Item","ItemTitle","MetadataList","TableRow","TableCell","TableBody","TableHead","TableHeader","Table","InlineStat","EmptyState","DataTableActions","DataTable","Fragment$1","defaultProductReadinessCardStrings","defaultProductStructureCardStrings","defaultProductOperationsCardStrings","defaultProductDetailsCardStrings","defaultProductContractOverviewStrings","defaultProductOptionsSummaryStrings","defaultProductOptionActionMenuStrings","defaultProductOptionsMatrixStrings","defaultProductQuotePreviewCardStrings","defaultProductPoliciesCardStrings","defaultProductVariantsTableStrings","defaultProductVariantsBulkTableStrings","count","total","index","defaultProductVariantsManagerStrings","defaultProductVariantActionMenuStrings","defaultProductVariantDetailsStrings","defaultProductVariantEditorStrings","defaultProductOverviewStrings","ProductEmptyState","action","className","PRODUCT_TONE_BADGE","PRODUCT_TONE_TEXT","PRODUCT_STATUS_TONES","isProductStatusTone","tone","clampProductPercent","value","ProductToneDot","ProductMetricTile","icon","metric","ProductRowActions","actions","item","PRODUCT_ROW_CONTENT","PRODUCT_ROW_TITLE","PRODUCT_ROW_ACTIONS","ProductRowHeading","title","label","badge","ProductRowSelect","onSelect","ProductStructureMetricRow","ProductReadinessRow","state","select","actionFallback","ProductOperationRow","ProductSummaryRow","values","actionLabel","ProductContractOverview","stringsProp","strings","useStrings","hasContent","metrics","terms","rules","headerAction","onOpenContract","onEditContract","onCreateRule","Plus","onSelectRule","rule","onEdit","onEditRule","onDelete","onDeleteRule","ruleActions","Eye","Pencil","Trash2","rowActions","renderRuleActions","empty","ProductDetailsCard","onEditDetails","description","metadata","media","ProductOptionActionMenu","onSelectOption","option","onEditOption","onDeleteOption","renderOptionActions","menuLabel","ProductOperationsCard","onCreateOperation","items","onSelectOperation","onEditOperation","onDeleteOperation","operationActions","renderOperationActions","renderItem","getPlainText$1","isScalarText","getOptionEditLabel","optionName","prefix","getOptionDraft","ProductOptionsMatrix","showHeaderProp","isCollapsedControlled","collapsedOptionIds","internalCollapsedOptionIds","setInternalCollapsedOptionIds","useState","defaultCollapsedOptionIds","resolvedCollapsedOptionIds","collapsedOptionIdSet","useMemo","supportsInlineEditing","editingOptionId","defaultEditingOptionId","onEditingOptionIdChange","onOptionNameChange","onValueLabelChange","onDoneEditingOption","onSaveEditingOption","onCancelEditingOption","isEditingControlled","internalEditingOptionId","setInternalEditingOptionId","draftByOptionId","setDraftByOptionId","savingRef","useRef","mountedRef","savingOptionId","setSavingOptionId","saveFailure","setSaveFailure","errorRef","focusValueIdRef","focusAddedValue","useCallback","node","isSaving","resolvedEditingOptionId","hasGroups","optionGroups","showPanelHeader","surface","showCreateRow","onCreateOption","updateCollapsedOptionIds","nextIds","onCollapsedOptionIdsChange","toggleCollapsed","id","updateEditingOptionId","nextId","startEditing","current","getResolvedDraft","updateDraft","updater","cancelEditing","draft","_removed","rest","commitEditing","originalValues","originalValueIds","draftValueIds","result","draftValue","onAddValue","onDeleteValue","error","onError","removeValuesConfirm","pendingSave","setPendingSave","saveEditing","removed","confirmDelete","deleteOption","deleteOptionConfirm","pendingDeleteOption","setPendingDeleteOption","requestDeleteOption","panelHeader","content","isCollapsed","isEditing","canEdit","canDelete","canAddValue","optionDraft","optionFailure","isSavingOption","renderedActions","optionIndex","menuActions","defaultActions","showInlineActions","resolvedActions","Alert","nextName","event","nextLabel","nextIndex","optionSummary","deleteValue","renderedValue","renderValue","Fragment","X","showCollapseControls","ChevronDown","onToggleUsedForVariants","showVariantToggle","checked","PlusCircle","interpolateString","ProductOptionsSummary","hasOptionActions","cardActions","onManageOptions","SlidersHorizontal","options","renderOption","ProductPoliciesCard","onCreatePolicy","policies","onSelectPolicy","policy","onEditPolicy","onDeletePolicy","policyActions","renderPolicyActions","renderPolicy","ProductQuotePreviewCard","hasBreakdown","subtotal","tax","discount","onCreateLine","onOpenQuote","lines","onSelectLine","line","onEditLine","onDeleteLine","lineActions","renderLineActions","ProductReadinessCard","completion","score","onCreateReadinessItem","summary","scoreLabel","onSelectReadinessItem","onEditReadinessItem","onDeleteReadinessItem","readinessActions","renderReadinessItemActions","ProductStructureCard","onCreateMetric","onSelectMetric","onEditMetric","onDeleteMetric","metricActions","renderMetricActions","ProductVariantNameCell","variant","channelsLabel","ProductVariantValueCell","emphasis","ProductVariantsTable","renderVariantActions","actionsList","onSelectVariant","onEditVariant","onDuplicateVariant","Copy","onDeleteVariant","columns","baseColumns","row","onCreateVariant","variants","ProductOverview","hasRail","readiness","structure","operations","quote","slots","mainClassName","details","contract","railClassName","productVariantMenuActions","ProductVariantActionMenu","onDuplicate","onClick","isPresent","getDefaultMetadata","labels","ProductVariantDetails","resolvedMetadata","renderActions","hasCustomActions","onBack","ArrowLeft","selectedOptions","renderMetadata","optionItems","toSelectOptions","choices","choice","ProductVariantEditor","valueProp","formIdProp","generatedFormId","useId","formId","isControlled","internalValue","setInternalValue","defaultValue","internalSubmitting","setInternalSubmitting","resolvedSubmitting","submitting","isDisabled","disabled","isFieldVisible","visibleFields","field","showIdentity","showCommercial","updateValue","next","onValueChange","updateField","nextValue","updateOption","handleSubmit","onSubmit","defaultFooter","onCancel","hasDefaultFooter","showHeader","errors","statusOptions","optionFields","fieldValue","hasChoices","children","footerSlot","DEFAULT_VISIBLE_COLUMNS","DEFAULT_OPTION_COMBINATION_DISPLAY","DEFAULT_CELL_DISPLAY","DEFAULT_SELECTION_MODE","getPlainText","getOptionValue","directValue","valueId","getVariantName","getVariantOptionSummary","getOptionCombinationLabel","getGroupLabel","selectedIdsToRows","ids","rowById","renderFieldValue","hasCellValue","isEditableField","column","resolveCellDisplay","display","getFieldChangeContext","renderVariantCellValue","plainValue","onBlur","Primitive","textClassName","ProductVariantsBulkTable","isSelectionControlled","selectedVariantIds","internalSelectedIds","setInternalSelectedIds","defaultSelectedVariantIds","hasBulkActions","renderBulkActions","onBulkEdit","onBulkApply","onBulkDelete","isSelectable","selectionMode","onSelectedVariantIdsChange","selectedIds","selectedRows","selectedIdSet","visibleColumnSet","visibleColumns","groupByOption","groupByOptionId","rowIndexById","orderedVariants","valueOrder","aValueId","a","bValueId","b","aOrder","bOrder","resolvedAOrder","resolvedBOrder","groupCounts","counts","hasBulkControls","hasRows","allRowsSelected","someRowsSelected","selectAllRef","hasRowActions","tableColumnCount","updateSelection","nextRows","clearSelection","toggleRow","toggleAll","bulkContext","onGenerateVariants","customBulkActions","bulkToolbar","displayIndex","groupLabel","previousVariant","previousGroupLabel","shouldRenderGroup","isSelected","actionContext","summaryOptionGroups","groupedVariantName","variantName","optionLabel","optionLabelMatchesVariantName","createCellContext","onVariantFieldChange","onVariantFieldBlur","renderCellContent","context","rendered","renderCell","fallback","shouldRenderOptionCombination","optionCombinationDisplay","renderedOptionCombination","renderOptionCombination","defaultRowActions","valueIndex","cellDisplay","ProductVariantsManager","size","defaultScale","groupableOptions","fallbackGroupByOptionId","isGroupByControlled","internalGroupByOptionId","setInternalGroupByOptionId","defaultGroupByOptionId","resolvedGroupByOptionId","showGroupBy","hasJoinedTools","onSearchVariants","onFilterVariants","hasTools","groupByOptions","updateGroupByOptionId","matchedOption","onGroupByOptionIdChange","optionsStrings","controlsEnd","Search","ListFilter","variantsStrings"],"sources":["../../src/components/features/products/products.strings.ts","../../src/components/features/products/partials/product-empty-state.tsx","../../src/components/features/products/partials/product-tone.tsx","../../src/components/features/products/partials/product-metric-tile.tsx","../../src/components/features/products/partials/product-actions.tsx","../../src/components/features/products/partials/product-rows.tsx","../../src/components/features/products/components/product-contract-overview.tsx","../../src/components/features/products/components/product-details-card.tsx","../../src/components/features/products/components/product-option-action-menu.tsx","../../src/components/features/products/components/product-operations-card.tsx","../../src/components/features/products/components/product-options-matrix.tsx","../../src/components/features/products/components/product-options-summary.tsx","../../src/components/features/products/components/product-policies-card.tsx","../../src/components/features/products/components/product-quote-preview-card.tsx","../../src/components/features/products/components/product-readiness-card.tsx","../../src/components/features/products/components/product-structure-card.tsx","../../src/components/features/products/components/product-variants-table.tsx","../../src/components/features/products/components/product-overview.tsx","../../src/components/features/products/components/product-variant-action-menu.tsx","../../src/components/features/products/components/product-variant-details.tsx","../../src/components/features/products/components/product-variant-editor.tsx","../../src/components/features/products/components/product-variants-bulk-table.tsx","../../src/components/features/products/components/product-variants-manager.tsx"],"sourcesContent":["export interface ProductReadinessCardStrings {\n\t/** Surface title. */\n\ttitle: string;\n\t/** Supporting copy shown under the label. */\n\tdescription: string;\n\tscoreLabel: string;\n\tprogressLabel: string;\n\tcreateLabel: string;\n\teditLabel: string;\n\tdeleteLabel: string;\n\tactionsLabel: string;\n\temptyTitle: string;\n\temptyDescription: string;\n\tactionLabel: string;\n}\n\nexport const defaultProductReadinessCardStrings: ProductReadinessCardStrings = {\n\ttitle: 'Readiness',\n\tdescription: 'Publishing checks and operational setup.',\n\tscoreLabel: 'Overall readiness',\n\tprogressLabel: 'Readiness progress',\n\tcreateLabel: 'Add check',\n\teditLabel: 'Edit check',\n\tdeleteLabel: 'Delete check',\n\tactionsLabel: 'Check actions',\n\temptyTitle: 'No readiness checks',\n\temptyDescription: 'Pass readiness items from your product workflow to show progress.',\n\tactionLabel: 'Open',\n};\n\nexport interface ProductStructureCardStrings {\n\t/** Surface title. */\n\ttitle: string;\n\t/** Supporting copy shown under the label. */\n\tdescription: string;\n\tcreateLabel: string;\n\tviewLabel: string;\n\teditLabel: string;\n\tdeleteLabel: string;\n\tactionsLabel: string;\n\temptyTitle: string;\n\temptyDescription: string;\n}\n\nexport const defaultProductStructureCardStrings: ProductStructureCardStrings = {\n\ttitle: 'Structure',\n\tdescription: 'Media, taxonomy, options, and content coverage.',\n\tcreateLabel: 'Add metric',\n\tviewLabel: 'Open',\n\teditLabel: 'Edit metric',\n\tdeleteLabel: 'Delete metric',\n\tactionsLabel: 'Metric actions',\n\temptyTitle: 'No structure metrics',\n\temptyDescription: 'Pass structure metrics to summarize the product setup.',\n};\n\nexport interface ProductOperationsCardStrings {\n\t/** Surface title. */\n\ttitle: string;\n\t/** Supporting copy shown under the label. */\n\tdescription: string;\n\tcreateLabel: string;\n\teditLabel: string;\n\tdeleteLabel: string;\n\tactionsLabel: string;\n\temptyTitle: string;\n\temptyDescription: string;\n\tactionLabel: string;\n}\n\nexport const defaultProductOperationsCardStrings: ProductOperationsCardStrings = {\n\ttitle: 'Operations',\n\tdescription: 'Availability, channels, service rules, and fulfilment signals.',\n\tcreateLabel: 'Add signal',\n\teditLabel: 'Edit signal',\n\tdeleteLabel: 'Delete signal',\n\tactionsLabel: 'Signal actions',\n\temptyTitle: 'No operational signals',\n\temptyDescription: 'Pass operational rows to show channel and availability health.',\n\tactionLabel: 'Open',\n};\n\nexport interface ProductDetailsCardStrings {\n\t/** Surface title. */\n\ttitle: string;\n\t/** Supporting copy shown under the label. */\n\tdescription: string;\n\teditLabel: string;\n\temptyTitle: string;\n\temptyDescription: string;\n}\n\nexport const defaultProductDetailsCardStrings: ProductDetailsCardStrings = {\n\ttitle: 'Product details',\n\tdescription: 'Core identity and catalogue fields.',\n\teditLabel: 'Edit details',\n\temptyTitle: 'No details',\n\temptyDescription: 'Pass metadata rows to render product details.',\n};\n\nexport interface ProductContractOverviewStrings {\n\t/** Surface title. */\n\ttitle: string;\n\t/** Supporting copy shown under the label. */\n\tdescription: string;\n\ttermsTitle: string;\n\trulesTitle: string;\n\tactionLabel: string;\n\teditLabel: string;\n\tcreateRuleLabel: string;\n\tviewRuleLabel: string;\n\teditRuleLabel: string;\n\tdeleteRuleLabel: string;\n\truleActionsLabel: string;\n\temptyTitle: string;\n\temptyDescription: string;\n}\n\nexport const defaultProductContractOverviewStrings: ProductContractOverviewStrings = {\n\ttitle: 'Contract',\n\tdescription: 'Commercial terms, pricing rules, and customer-facing conditions.',\n\ttermsTitle: 'Terms',\n\trulesTitle: 'Rules',\n\tactionLabel: 'Manage contract',\n\teditLabel: 'Edit contract',\n\tcreateRuleLabel: 'Add rule',\n\tviewRuleLabel: 'Open rule',\n\teditRuleLabel: 'Edit rule',\n\tdeleteRuleLabel: 'Delete rule',\n\truleActionsLabel: 'Rule actions',\n\temptyTitle: 'No contract summary',\n\temptyDescription: 'Pass metrics, terms, or rules to summarize the product contract.',\n};\n\nexport interface ProductOptionsSummaryStrings {\n\t/** Surface title. */\n\ttitle: string;\n\t/** Supporting copy shown under the label. */\n\tdescription: string;\n\tmanageLabel: string;\n\tcreateLabel: string;\n\tviewLabel: string;\n\teditLabel: string;\n\tdeleteLabel: string;\n\tactionsLabel: string;\n\temptyTitle: string;\n\temptyDescription: string;\n}\n\nexport const defaultProductOptionsSummaryStrings: ProductOptionsSummaryStrings = {\n\ttitle: 'Options',\n\tdescription: 'Variant-driving choices and add-ons customers can select.',\n\tmanageLabel: 'Manage options',\n\tcreateLabel: 'Add option',\n\tviewLabel: 'Open option',\n\teditLabel: 'Edit option',\n\tdeleteLabel: 'Delete option',\n\tactionsLabel: 'Option actions',\n\temptyTitle: 'No options',\n\temptyDescription: 'Pass option groups to summarize configurable product choices.',\n};\n\nexport interface ProductOptionActionMenuStrings {\n\tviewLabel: string;\n\teditLabel: string;\n\tdeleteLabel: string;\n\tactionsLabel: string;\n}\n\nexport const defaultProductOptionActionMenuStrings: ProductOptionActionMenuStrings = {\n\tviewLabel: 'Open option',\n\teditLabel: 'Edit option',\n\tdeleteLabel: 'Delete option',\n\tactionsLabel: 'Option actions',\n};\n\nexport interface ProductOptionsMatrixStrings {\n\t/** Surface title. */\n\ttitle: string;\n\t/** Supporting copy shown under the label. */\n\tdescription: string;\n\tcreateLabel: string;\n\teditLabel: string;\n\tdeleteLabel: string;\n\taddValueLabel: string;\n\taddAnotherValueLabel: string;\n\taddAnotherOptionLabel: string;\n\tdeleteValueLabel: string;\n\t/** Title of the confirmation shown before an option group is deleted. */\n\tconfirmDeleteOptionTitle: string;\n\t/** Title of the confirmation shown when saving would drop option values. */\n\tconfirmRemoveValuesTitle: string;\n\t/**\n\t * Consequence of saving an edit that drops values. Receives `{{count}}`, the\n\t * number of values the save removes.\n\t */\n\tconfirmRemoveValuesDescription: string;\n\t/** Confirm button for a save that drops values. */\n\tconfirmRemoveValuesLabel: string;\n\t/** Sentence explaining what deleting an option group takes with it. */\n\tconfirmDeleteOptionDescription: string;\n\tdoneLabel: string;\n\tsaveLabel: string;\n\t/** Pending option-save copy. Optional for compatibility with complete legacy string objects. */\n\tsavingLabel?: string;\n\t/** Heading for a rejected option save. */\n\tsaveErrorTitle?: string;\n\t/** Fallback when a rejection has no displayable Error message. */\n\tsaveErrorMessage?: string;\n\t/** Save command after a rejected option save. */\n\tretrySaveLabel?: string;\n\tcancelLabel: string;\n\texpandOptionLabel: string;\n\tcollapseOptionLabel: string;\n\tactionsLabel: string;\n\toptionNameLabel: string;\n\toptionValuesLabel: string;\n\tvaluesLabel: string;\n\tuseForVariantsLabel: string;\n\tusedForVariantsLabel: string;\n\tnotUsedForVariantsLabel: string;\n\temptyTitle: string;\n\temptyDescription: string;\n\tnoValuesLabel: string;\n}\n\nexport const defaultProductOptionsMatrixStrings: ProductOptionsMatrixStrings = {\n\ttitle: 'Variant options',\n\tdescription: 'Define option groups and values before generating sellable variants.',\n\tcreateLabel: 'Add attribute',\n\teditLabel: 'Configure',\n\tdeleteLabel: 'Delete option',\n\taddValueLabel: 'Add value',\n\taddAnotherValueLabel: 'Add another value',\n\taddAnotherOptionLabel: 'Add another option',\n\tdeleteValueLabel: 'Delete value',\n\tconfirmDeleteOptionTitle: 'Delete this option?',\n\tconfirmRemoveValuesTitle: 'Save and remove these values?',\n\tconfirmRemoveValuesDescription: 'Saving removes {{count}} value(s) from this option, and any variant built from them goes with it. This cannot be undone.',\n\tconfirmRemoveValuesLabel: 'Save changes',\n\tconfirmDeleteOptionDescription: 'Its values are removed from the product, and any variant built from them goes with it. This cannot be undone.',\n\tdoneLabel: 'Done',\n\tsaveLabel: 'Save',\n\tsavingLabel: 'Saving…',\n\tsaveErrorTitle: 'Changes were not saved',\n\tsaveErrorMessage: 'Your draft has been kept. Try again.',\n\tretrySaveLabel: 'Retry save',\n\tcancelLabel: 'Cancel',\n\texpandOptionLabel: 'Expand option',\n\tcollapseOptionLabel: 'Collapse option',\n\tactionsLabel: 'Option actions',\n\toptionNameLabel: 'Option name',\n\toptionValuesLabel: 'Option values',\n\tvaluesLabel: 'Values',\n\tuseForVariantsLabel: 'Use for variants',\n\tusedForVariantsLabel: 'Used for variants',\n\tnotUsedForVariantsLabel: 'Not used for variants',\n\temptyTitle: 'No option groups',\n\temptyDescription: 'Add options such as size, color, or packaging to create variant combinations.',\n\tnoValuesLabel: 'No values',\n};\n\nexport interface ProductQuotePreviewCardStrings {\n\t/** Surface title. */\n\ttitle: string;\n\t/** Supporting copy shown under the label. */\n\tdescription: string;\n\tsubtotalLabel: string;\n\ttaxLabel: string;\n\tdiscountLabel: string;\n\ttotalLabel: string;\n\tactionLabel: string;\n\tcreateLineLabel: string;\n\tviewLineLabel: string;\n\teditLineLabel: string;\n\tdeleteLineLabel: string;\n\tlineActionsLabel: string;\n\temptyTitle: string;\n\temptyDescription: string;\n}\n\nexport const defaultProductQuotePreviewCardStrings: ProductQuotePreviewCardStrings = {\n\ttitle: 'Quote preview',\n\tdescription: 'How the product appears in a compact customer quote.',\n\tsubtotalLabel: 'Subtotal',\n\ttaxLabel: 'Tax',\n\tdiscountLabel: 'Discount',\n\ttotalLabel: 'Total',\n\tactionLabel: 'Open quote',\n\tcreateLineLabel: 'Add line',\n\tviewLineLabel: 'Open line',\n\teditLineLabel: 'Edit line',\n\tdeleteLineLabel: 'Delete line',\n\tlineActionsLabel: 'Line actions',\n\temptyTitle: 'No quote lines',\n\temptyDescription: 'Pass quote lines to preview pricing.',\n};\n\nexport interface ProductPoliciesCardStrings {\n\t/** Surface title. */\n\ttitle: string;\n\t/** Supporting copy shown under the label. */\n\tdescription: string;\n\tcreateLabel: string;\n\tviewLabel: string;\n\teditLabel: string;\n\tdeleteLabel: string;\n\tactionsLabel: string;\n\temptyTitle: string;\n\temptyDescription: string;\n}\n\nexport const defaultProductPoliciesCardStrings: ProductPoliciesCardStrings = {\n\ttitle: 'Policies',\n\tdescription: 'Cancellation, booking, service, and customer-facing rules.',\n\tcreateLabel: 'Add policy',\n\tviewLabel: 'View',\n\teditLabel: 'Edit policy',\n\tdeleteLabel: 'Delete policy',\n\tactionsLabel: 'Policy actions',\n\temptyTitle: 'No policies',\n\temptyDescription: 'Pass policies to summarize customer-facing rules.',\n};\n\nexport interface ProductVariantsTableStrings {\n\t/** Surface title. */\n\ttitle: string;\n\t/** Supporting copy shown under the label. */\n\tdescription: string;\n\tcreateLabel: string;\n\tviewLabel: string;\n\teditLabel: string;\n\tduplicateLabel: string;\n\tdeleteLabel: string;\n\temptyTitle: string;\n\temptyDescription: string;\n\theaders: {\n\t\tvariant: string;\n\t\tsku: string;\n\t\tprice: string;\n\t\tinventory: string;\n\t\tchannels: string;\n\t\tupdated: string;\n\t\tactions: string;\n\t};\n}\n\nexport const defaultProductVariantsTableStrings: ProductVariantsTableStrings = {\n\ttitle: 'Variants',\n\tdescription: 'Sellable combinations with price, availability, and SKU.',\n\tcreateLabel: 'Add variant',\n\tviewLabel: 'Open variant',\n\teditLabel: 'Edit',\n\tduplicateLabel: 'Duplicate',\n\tdeleteLabel: 'Delete',\n\temptyTitle: 'No variants',\n\temptyDescription: 'Create or pass variants to show sellable rows.',\n\theaders: {\n\t\tvariant: 'Variant',\n\t\tsku: 'SKU',\n\t\tprice: 'Price',\n\t\tinventory: 'Available',\n\t\tchannels: 'Channels',\n\t\tupdated: 'Updated',\n\t\tactions: 'Actions',\n\t},\n};\n\nexport interface ProductVariantBulkTableStrings {\n\t/** Surface title. */\n\ttitle: string;\n\t/** Supporting copy shown under the label. */\n\tdescription: string;\n\tcreateLabel: string;\n\tgenerateLabel: string;\n\tbulkEditLabel: string;\n\tviewLabel: string;\n\teditLabel: string;\n\tduplicateLabel: string;\n\tdeleteLabel: string;\n\tbulkApplyLabel: string;\n\tbulkDeleteLabel: string;\n\tselectedLabel: (count: number, total: number) => string;\n\tgroupCountLabel: (count: number) => string;\n\tclearSelectionLabel: string;\n\tselectAllLabel: string;\n\tselectRowLabel: (index: number) => string;\n\temptyTitle: string;\n\temptyDescription: string;\n\theaders: {\n\t\tvariant: string;\n\t\tprice: string;\n\t\tinventory: string;\n\t\tsku: string;\n\t\tstatus: string;\n\t\tupdated: string;\n\t\tactions: string;\n\t};\n}\n\nexport const defaultProductVariantsBulkTableStrings: ProductVariantBulkTableStrings = {\n\ttitle: 'Variants',\n\tdescription: 'Review generated combinations, select rows, and apply bulk operations.',\n\tcreateLabel: 'Add variant',\n\tgenerateLabel: 'Generate variants',\n\tbulkEditLabel: 'Bulk edit selected',\n\tviewLabel: 'Open variant',\n\teditLabel: 'Edit',\n\tduplicateLabel: 'Duplicate',\n\tdeleteLabel: 'Delete',\n\tbulkApplyLabel: 'Apply changes',\n\tbulkDeleteLabel: 'Delete selected',\n\tselectedLabel: (count, total) => `${count} of ${total} selected`,\n\tgroupCountLabel: (count) => `${count} ${count === 1 ? 'variant' : 'variants'}`,\n\tclearSelectionLabel: 'Clear',\n\tselectAllLabel: 'Select all variants',\n\tselectRowLabel: (index) => `Select row ${index + 1}`,\n\temptyTitle: 'No variants',\n\temptyDescription: 'Generate variants from option groups or pass sellable rows from the app.',\n\theaders: {\n\t\tvariant: 'Variant',\n\t\tprice: 'Price',\n\t\tinventory: 'Available',\n\t\tsku: 'SKU',\n\t\tstatus: 'Status',\n\t\tupdated: 'Updated',\n\t\tactions: 'Actions',\n\t},\n};\n\nexport interface ProductVariantsManagerStrings {\n\t/** Surface title. */\n\ttitle: string;\n\t/** Supporting copy shown under the label. */\n\tdescription: string;\n\toptionsTitle: string;\n\tvariantsTitle: string;\n\tgroupByLabel: string;\n\tsearchLabel: string;\n\tfilterLabel: string;\n\tgenerateLabel: string;\n\tcreateVariantLabel: string;\n\tactionsLabel: string;\n}\n\nexport const defaultProductVariantsManagerStrings: ProductVariantsManagerStrings = {\n\ttitle: 'Variants',\n\tdescription: 'Configure option groups first, then manage the generated sellable variants.',\n\toptionsTitle: 'Variant options',\n\tvariantsTitle: 'Variants',\n\tgroupByLabel: 'Group by',\n\tsearchLabel: 'Search variants',\n\tfilterLabel: 'Filter variants',\n\tgenerateLabel: 'Generate variants',\n\tcreateVariantLabel: 'Add variant',\n\tactionsLabel: 'Variant manager actions',\n};\n\nexport interface ProductVariantActionMenuStrings {\n\tviewLabel: string;\n\teditLabel: string;\n\tduplicateLabel: string;\n\tdeleteLabel: string;\n\tactionsLabel: string;\n}\n\nexport const defaultProductVariantActionMenuStrings: ProductVariantActionMenuStrings = {\n\tviewLabel: 'Open variant',\n\teditLabel: 'Edit',\n\tduplicateLabel: 'Duplicate',\n\tdeleteLabel: 'Delete',\n\tactionsLabel: 'Variant actions',\n};\n\nexport interface ProductVariantDetailsStrings {\n\t/** Surface title. */\n\ttitle: string;\n\t/** Supporting copy shown under the label. */\n\tdescription: string;\n\tbackLabel: string;\n\tfactsTitle: string;\n\tselectedOptionsTitle: string;\n\trelatedOptionsTitle: string;\n\tviewOptionLabel: string;\n\temptyTitle: string;\n\temptyDescription: string;\n\t/** Label/value facts rendered as a metadata list. */\n\tmetadata: {\n\t\tprice: string;\n\t\tinventory: string;\n\t\tsku: string;\n\t\tchannels: string;\n\t\tupdated: string;\n\t};\n}\n\nexport const defaultProductVariantDetailsStrings: ProductVariantDetailsStrings = {\n\ttitle: 'Variant',\n\tdescription: 'Sellable variant details, options, pricing, and fulfilment data.',\n\tbackLabel: 'Back',\n\tfactsTitle: 'Variant facts',\n\tselectedOptionsTitle: 'Selected options',\n\trelatedOptionsTitle: 'Option groups',\n\tviewOptionLabel: 'Open option',\n\temptyTitle: 'No variant selected',\n\temptyDescription: 'Pass a variant to render a standalone variant detail surface.',\n\tmetadata: {\n\t\tprice: 'Price',\n\t\tinventory: 'Available',\n\t\tsku: 'SKU',\n\t\tchannels: 'Channels',\n\t\tupdated: 'Updated',\n\t},\n};\n\nexport interface ProductVariantEditorStrings {\n\t/** Surface title. */\n\ttitle: string;\n\t/** Supporting copy shown under the label. */\n\tdescription: string;\n\tidentityTitle: string;\n\tcommercialTitle: string;\n\toptionsTitle: string;\n\tsaveLabel: string;\n\tsavingLabel: string;\n\tcancelLabel: string;\n\tdeleteLabel: string;\n\tstatusPlaceholder: string;\n\toptionPlaceholder: string;\n\tfields: {\n\t\tname: string;\n\t\tdescription: string;\n\t\tsku: string;\n\t\tprice: string;\n\t\tinventory: string;\n\t\tstatus: string;\n\t\tchannels: string;\n\t};\n\tplaceholders: {\n\t\tname: string;\n\t\tdescription: string;\n\t\tsku: string;\n\t\tprice: string;\n\t\tinventory: string;\n\t\tstatus: string;\n\t\tchannels: string;\n\t};\n}\n\nexport const defaultProductVariantEditorStrings: ProductVariantEditorStrings = {\n\ttitle: 'Edit variant',\n\tdescription: 'Controlled form for variant identity, pricing, inventory, and option values.',\n\tidentityTitle: 'Identity',\n\tcommercialTitle: 'Commercial setup',\n\toptionsTitle: 'Options',\n\tsaveLabel: 'Save variant',\n\tsavingLabel: 'Saving',\n\tcancelLabel: 'Cancel',\n\tdeleteLabel: 'Delete variant',\n\tstatusPlaceholder: 'Select status',\n\toptionPlaceholder: 'Select value',\n\tfields: {\n\t\tname: 'Name',\n\t\tdescription: 'Description',\n\t\tsku: 'SKU',\n\t\tprice: 'Price',\n\t\tinventory: 'Inventory',\n\t\tstatus: 'Status',\n\t\tchannels: 'Channels',\n\t},\n\tplaceholders: {\n\t\tname: '750 ml bottle',\n\t\tdescription: 'Standard retail pack',\n\t\tsku: 'BAL-750-CL',\n\t\tprice: 'US$ 24.00',\n\t\tinventory: '82',\n\t\tstatus: 'Active',\n\t\tchannels: 'Online store, POS',\n\t},\n};\n\nexport interface ProductOverviewStrings {\n\tmainLabel: string;\n\trailLabel: string;\n}\n\nexport const defaultProductOverviewStrings: ProductOverviewStrings = {\n\tmainLabel: 'Product overview',\n\trailLabel: 'Product supporting information',\n};\n","import type { ReactNode } from 'react';\n\nimport { EmptyState } from '../../../blocks/data-display';\nimport { cn } from '../../../../lib/utils';\n\nexport function ProductEmptyState({\n\ttitle,\n\tdescription,\n\taction,\n\tclassName,\n}: {\n\t/** Surface title. */\n\ttitle: ReactNode;\n\t/** Supporting copy under the title. */\n\tdescription: ReactNode;\n\t/** Control offered alongside the message. */\n\taction?: ReactNode;\n\tclassName?: string;\n}) {\n\treturn (\n\t\t<EmptyState\n\t\t\tpadding=\"md\"\n\t\t\tborder\n\t\t\ttitle={title}\n\t\t\tdescription={description}\n\t\t\tactions={action}\n\t\t\tclassName={cn('product-empty-state--component bg-muted/30', className)}\n\t\t/>\n\t);\n}\n","import type { BadgeTone } from '../../../base/badge';\nimport { cn } from '../../../../lib/utils';\n\nimport type { ProductTone } from '../products.types';\nimport { dotRecipes } from '../../../../lib/tone-recipes';\n\n/**\n * Badge tone for a product row value. Only status tones carry colour; neutral\n * and primary (reserved for the main command) render as neutral badges.\n */\nexport const PRODUCT_TONE_BADGE: Record<ProductTone, BadgeTone> = {\n\tneutral: 'secondary',\n\tprimary: 'secondary',\n\tsuccess: 'success',\n\twarning: 'warning',\n\tdestructive: 'destructive',\n\tinfo: 'info',\n};\n\n/**\n * Text colour for a figure whose tone states a status. Figures keep their width,\n * so a flagged metric lines up with its plain siblings instead of growing a chip.\n */\nexport const PRODUCT_TONE_TEXT: Record<ProductTone, string | undefined> = {\n\tneutral: undefined,\n\tprimary: undefined,\n\tsuccess: 'text-success',\n\twarning: 'text-warning-accent',\n\tdestructive: 'text-destructive',\n\tinfo: 'text-info',\n};\n\nconst PRODUCT_STATUS_TONES: ReadonlySet<ProductTone> = new Set<ProductTone>(['success', 'warning', 'destructive', 'info']);\n\n/** Whether a tone states a status. Neutral and primary are presentation, not state. */\nexport function isProductStatusTone(tone: ProductTone | undefined): tone is ProductTone {\n\treturn tone !== undefined && PRODUCT_STATUS_TONES.has(tone);\n}\n\nexport function clampProductPercent(value: number): number {\n\tif (!Number.isFinite(value)) return 0;\n\treturn Math.min(100, Math.max(0, Math.round(value)));\n}\n\nexport function ProductToneDot({ tone = 'neutral' }: { tone?: ProductTone }) {\n\treturn (\n\t\t<span\n\t\t\taria-hidden=\"true\"\n\t\t\tclassName={cn('product-tone-dot--component', dotRecipes.marker, {\n\t\t\t\t'bg-muted-foreground': tone === 'neutral' || tone === 'primary',\n\t\t\t\t'bg-success': tone === 'success',\n\t\t\t\t'bg-warning': tone === 'warning',\n\t\t\t\t'bg-destructive': tone === 'destructive',\n\t\t\t\t'bg-info': tone === 'info',\n\t\t\t})}\n\t\t/>\n\t);\n}\n","import { Value } from '../../../primitives';\nimport { Stack } from '../../../base/structure';\nimport { DisplayLabel, Text } from '../../../typography';\n\nimport type { ProductMetricSummary, ProductStructureMetric } from '../products.types';\nimport { ProductToneDot, isProductStatusTone } from './product-tone';\n\n/**\n * A headline fact: label above an emphasised value, in the same label-over-value\n * anatomy as the metadata lists beside it. No tile chrome — the parent grid's\n * gap separates metrics — and colour appears only as a status dot when the\n * metric's tone states a status.\n */\nexport function ProductMetricTile({ metric }: { metric: ProductStructureMetric | ProductMetricSummary }) {\n\tconst icon = 'icon' in metric ? metric.icon : undefined;\n\n\treturn (\n\t\t<Stack gap=\"dense\" className=\"product-metric-tile--component min-w-0\">\n\t\t\t<Stack direction=\"horizontal\" gap=\"sm\" wrap={false}>\n\t\t\t\t{isProductStatusTone(metric.tone) && <ProductToneDot tone={metric.tone} />}\n\t\t\t\t{!!icon && <span className=\"flex shrink-0 text-muted-foreground\">{icon}</span>}\n\t\t\t\t<DisplayLabel className=\"truncate text-inherit\">{metric.label}</DisplayLabel>\n\t\t\t</Stack>\n\t\t\t<Value type=\"inherit\" weight=\"semibold\" className=\"tabular-nums\">\n\t\t\t\t{metric.value}\n\t\t\t</Value>\n\t\t\t{!!metric.description && (\n\t\t\t\t<Text size=\"xs\" type=\"secondary\" lineHeight=\"snug\">\n\t\t\t\t\t{metric.description}\n\t\t\t\t</Text>\n\t\t\t)}\n\t\t</Stack>\n\t);\n}\n","import { DataTableActions, type TableAction } from '../../table';\nimport { cn } from '../../../../lib/utils';\n\nexport function ProductRowActions<TItem>({\n\titem,\n\tactions,\n\tmenuLabel,\n\tclassName,\n}: {\n\t/** The record this row represents. */\n\titem: TItem;\n\t/** Controls offered on the row. */\n\tactions: TableAction<TItem>[];\n\t/** Accessible name for the overflow trigger. */\n\tmenuLabel: string;\n\tclassName?: string;\n}) {\n\tif (actions.length === 0) return null;\n\n\treturn (\n\t\t<div className={cn('product-row-actions--component flex justify-end', className)}>\n\t\t\t<DataTableActions\n\t\t\t\trow={item}\n\t\t\t\tactions={actions}\n\t\t\t\tmenuLabel={menuLabel}\n\t\t\t\tdisplayMode=\"menu\"\n\t\t\t/>\n\t\t</div>\n\t);\n}\n","import type { ReactNode } from 'react';\n\nimport { Badge } from '../../../base/badge';\nimport { Button } from '../../../base/buttons';\nimport {\n\tItem,\n\tItemActions,\n\tItemContent,\n\tItemDescription,\n\tItemMedia,\n\tItemTitle,\n} from '../../../base/item';\nimport { Stack } from '../../../base/structure';\nimport { Value } from '../../../primitives';\nimport { Text } from '../../../typography';\nimport { cn } from '../../../../lib/utils';\n\nimport type {\n\tProductOperationsItem,\n\tProductOptionSummary,\n\tProductPolicySummary,\n\tProductReadinessItem,\n\tProductStructureMetric,\n\tProductTone,\n} from '../products.types';\nimport {\n\tPRODUCT_TONE_BADGE,\n\tPRODUCT_TONE_TEXT,\n\tProductToneDot,\n\tisProductStatusTone,\n} from './product-tone';\n\n// Match Item's readable identity basis so action-heavy rows wrap by parent width.\nconst PRODUCT_ROW_CONTENT = 'min-w-0 basis-48';\nconst PRODUCT_ROW_TITLE = 'line-clamp-none break-words overflow-visible';\nconst PRODUCT_ROW_ACTIONS = 'ml-auto shrink-0 flex-wrap justify-end gap-space-md';\n\n/**\n * Title line of a product row. A row's short value and chip sit beside the\n * label, so the trailing edge holds only commands and every row in a list keeps\n * the same trailing width. A status tone turns the value into a status badge;\n * any other value stays quiet secondary copy.\n */\nfunction ProductRowHeading({\n\tlabel,\n\tvalue,\n\ttone,\n\tbadge,\n}: {\n\tlabel: ReactNode;\n\tvalue?: ReactNode;\n\ttone?: ProductTone;\n\tbadge?: ReactNode;\n}) {\n\tconst title = <ItemTitle className={PRODUCT_ROW_TITLE}>{label}</ItemTitle>;\n\tif (!value && !badge) return title;\n\n\treturn (\n\t\t<Stack direction=\"horizontal\" gap=\"sm\" className=\"product-row--heading\">\n\t\t\t{title}\n\t\t\t{!!value && (isProductStatusTone(tone) ? (\n\t\t\t\t<Badge tone={PRODUCT_TONE_BADGE[tone]}>{value}</Badge>\n\t\t\t) : (\n\t\t\t\t<Text tag=\"span\" type=\"secondary\" lineHeight=\"tight\">{value}</Text>\n\t\t\t))}\n\t\t\t{badge}\n\t\t</Stack>\n\t);\n}\n\nfunction ProductRowSelect({ label, onSelect }: { label: ReactNode; onSelect: () => void }) {\n\treturn (\n\t\t<Button type=\"button\" tone=\"secondary\" buttonStyle=\"ghost\" onClick={onSelect}>\n\t\t\t{label}\n\t\t</Button>\n\t);\n}\n\nexport function ProductStructureMetricRow({\n\tmetric,\n\tactions,\n}: {\n\t/** The metric this row shows. */\n\tmetric: ProductStructureMetric;\n\t/** Controls offered on the row. */\n\tactions?: ReactNode;\n}) {\n\treturn (\n\t\t<Item className=\"product-structure-metric-row--component product-structure-card--item\">\n\t\t\t{!!metric.icon && (\n\t\t\t\t<ItemMedia variant=\"icon\" className=\"text-muted-foreground\">\n\t\t\t\t\t{metric.icon}\n\t\t\t\t</ItemMedia>\n\t\t\t)}\n\t\t\t<ItemContent className={PRODUCT_ROW_CONTENT}>\n\t\t\t\t<ItemTitle className={PRODUCT_ROW_TITLE}>{metric.label}</ItemTitle>\n\t\t\t\t{!!metric.description && <ItemDescription clamp={2}>{metric.description}</ItemDescription>}\n\t\t\t</ItemContent>\n\t\t\t<ItemActions className=\"ml-auto shrink-0 gap-space-md\">\n\t\t\t\t<Value type=\"inherit\" weight=\"semibold\" className={cn('tabular-nums', metric.tone && PRODUCT_TONE_TEXT[metric.tone])}>\n\t\t\t\t\t{metric.value}\n\t\t\t\t</Value>\n\t\t\t\t{actions}\n\t\t\t</ItemActions>\n\t\t</Item>\n\t);\n}\n\nexport function ProductReadinessRow({\n\titem,\n\tactionFallback,\n\tonSelect,\n\tactions,\n}: {\n\t/** The record this row represents. */\n\titem: ProductReadinessItem;\n\t/** Shown when a row has no actions. */\n\tactionFallback: ReactNode;\n\tonSelect?: () => void;\n\t/** Controls offered on the row. */\n\tactions?: ReactNode;\n}) {\n\t// The leading dot is the checklist state: done, flagged by tone, or pending.\n\tconst state = item.tone ?? (item.completed ? 'success' : 'neutral');\n\tconst select = item.onSelect ?? onSelect;\n\n\treturn (\n\t\t<Item className=\"product-readiness-row--component product-readiness-card--item\">\n\t\t\t<ItemMedia className=\"product-readiness-row--state h-icon-lg\">\n\t\t\t\t<ProductToneDot tone={state} />\n\t\t\t</ItemMedia>\n\t\t\t<ItemContent className={PRODUCT_ROW_CONTENT}>\n\t\t\t\t<ProductRowHeading label={item.label} value={item.value} tone={item.tone} />\n\t\t\t\t{!!item.description && <ItemDescription clamp={2}>{item.description}</ItemDescription>}\n\t\t\t</ItemContent>\n\t\t\t{!!(select || actions) && (\n\t\t\t\t<ItemActions className={PRODUCT_ROW_ACTIONS}>\n\t\t\t\t\t{!!select && <ProductRowSelect label={item.actionLabel ?? actionFallback} onSelect={select} />}\n\t\t\t\t\t{actions}\n\t\t\t\t</ItemActions>\n\t\t\t)}\n\t\t</Item>\n\t);\n}\n\nexport function ProductOperationRow({\n\titem,\n\tactionFallback,\n\tonSelect,\n\tactions,\n}: {\n\t/** The record this row represents. */\n\titem: ProductOperationsItem;\n\t/** Shown when a row has no actions. */\n\tactionFallback: ReactNode;\n\tonSelect?: () => void;\n\t/** Controls offered on the row. */\n\tactions?: ReactNode;\n}) {\n\tconst select = item.onSelect ?? onSelect;\n\n\treturn (\n\t\t<Item className=\"product-operation-row--component product-operations-card--item\">\n\t\t\t<ItemContent className={PRODUCT_ROW_CONTENT}>\n\t\t\t\t<ProductRowHeading label={item.label} value={item.value} tone={item.tone} />\n\t\t\t\t{!!item.description && <ItemDescription clamp={2}>{item.description}</ItemDescription>}\n\t\t\t</ItemContent>\n\t\t\t{!!(select || actions) && (\n\t\t\t\t<ItemActions className={PRODUCT_ROW_ACTIONS}>\n\t\t\t\t\t{!!select && <ProductRowSelect label={item.actionLabel ?? actionFallback} onSelect={select} />}\n\t\t\t\t\t{actions}\n\t\t\t\t</ItemActions>\n\t\t\t)}\n\t\t</Item>\n\t);\n}\n\nexport function ProductSummaryRow({\n\titem,\n\tactionLabel,\n\tonSelect,\n\tactions,\n}: {\n\t/** The record this row represents. */\n\titem: ProductOptionSummary | ProductPolicySummary;\n\t/** Copy for the row's inline action. */\n\tactionLabel?: ReactNode;\n\tonSelect?: () => void;\n\t/** Controls offered on the row. */\n\tactions?: ReactNode;\n}) {\n\tconst values = 'values' in item ? item.values : undefined;\n\n\treturn (\n\t\t<Item className=\"product-summary-row--component\">\n\t\t\t<ItemContent className={PRODUCT_ROW_CONTENT}>\n\t\t\t\t<ProductRowHeading label={item.label} value={item.value} tone={item.tone} badge={item.badge} />\n\t\t\t\t{!!item.description && <ItemDescription clamp={2}>{item.description}</ItemDescription>}\n\t\t\t\t{!!values?.length && (\n\t\t\t\t\t<div className=\"mt-space-md flex flex-wrap gap-space-xs\">\n\t\t\t\t\t\t{values.map((value, index) => (\n\t\t\t\t\t\t\t<Badge key={index} tone=\"secondary\">\n\t\t\t\t\t\t\t\t{value}\n\t\t\t\t\t\t\t</Badge>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t</ItemContent>\n\t\t\t{!!(onSelect || actions) && (\n\t\t\t\t<ItemActions className={PRODUCT_ROW_ACTIONS}>\n\t\t\t\t\t{!!onSelect && <ProductRowSelect label={actionLabel} onSelect={onSelect} />}\n\t\t\t\t\t{actions}\n\t\t\t\t</ItemActions>\n\t\t\t)}\n\t\t</Item>\n\t);\n}\n","import {\n\tEye,\n\tPencil,\n\tPlus,\n\tTrash2 } from 'lucide-react';\n\nimport { Button } from '../../../base/buttons';\nimport { ContentBlock } from '../../../base/display';\nimport { Grid, Stack } from '../../../base/structure';\nimport { MetadataList } from '../../../base/metadata-list';\nimport { ItemGroup } from '../../../base/item';\nimport { Text } from '../../../typography';\nimport { useStrings } from '../../../../lib/strings';\nimport { cn } from '../../../../lib/utils';\n\nimport { defaultProductContractOverviewStrings } from '../products.strings';\nimport type { ProductContractOverviewProps } from '../products.types';\nimport { ProductEmptyState } from '../partials/product-empty-state';\nimport { ProductMetricTile } from '../partials/product-metric-tile';\nimport { ProductRowActions } from '../partials/product-actions';\nimport { ProductSummaryRow } from '../partials/product-rows';\n\n/**\n * One main column region of the product editor.\n *\n * @deprecated An internal region of `ProductOverview`, which renders it from its `contract` prop (still typed `ProductContractOverviewProps`). Pass the same props there and add custom content through the overview's slots. Kept exported for compatibility.\n */\nexport function ProductContractOverview({\n\tmetrics = [],\n\tterms = [],\n\trules = [],\n\tonOpenContract,\n\tonEditContract,\n\tonCreateRule,\n\tonSelectRule,\n\tonEditRule,\n\tonDeleteRule,\n\trenderRuleActions,\n\tactions,\n\tfooterSlot,\n\tempty,\n\tclassName,\n\tstrings: stringsProp,\n}: ProductContractOverviewProps) {\n\tconst strings = useStrings(defaultProductContractOverviewStrings, stringsProp);\n\tconst hasContent = metrics.length > 0 || terms.length > 0 || rules.length > 0;\n\tconst headerAction = onOpenContract || onEditContract || onCreateRule ? (\n\t\t<div className=\"flex items-center gap-space-md\">\n\t\t\t{!!onCreateRule && (\n\t\t\t\t<Button type=\"button\" tone=\"secondary\" buttonStyle=\"ghost\" onClick={onCreateRule} icon={Plus}>\n\t\t\t\t\t{strings.createRuleLabel}\n\t\t\t\t</Button>\n\t\t\t)}\n\t\t\t{!!onEditContract && (\n\t\t\t\t<Button type=\"button\" tone=\"secondary\" buttonStyle=\"ghost\" onClick={onEditContract}>\n\t\t\t\t\t{strings.editLabel}\n\t\t\t\t</Button>\n\t\t\t)}\n\t\t\t{!!onOpenContract && (\n\t\t\t\t<Button type=\"button\" tone=\"secondary\" buttonStyle=\"ghost\" onClick={onOpenContract}>\n\t\t\t\t\t{strings.actionLabel}\n\t\t\t\t</Button>\n\t\t\t)}\n\t\t</div>\n\t) : undefined;\n\n\treturn (\n\t\t<ContentBlock\n\t\t\ttitle={strings.title}\n\t\t\tdescription={strings.description}\n\t\t\tactions={actions}\n\t\t\theaderAction={headerAction}\n\t\t\tfooterSlot={footerSlot}\n\t\t\tclassName={cn('product-contract-overview--component w-full', className)}\n\t\t>\n\t\t\t{!hasContent ? (\n\t\t\t\tempty ?? (\n\t\t\t\t\t<ProductEmptyState\n\t\t\t\t\t\ttitle={strings.emptyTitle}\n\t\t\t\t\t\tdescription={strings.emptyDescription}\n\t\t\t\t\t\taction={onCreateRule ? (\n\t\t\t\t\t\t\t<Button tone=\"primary\" type=\"button\" onClick={onCreateRule} icon={Plus}>\n\t\t\t\t\t\t\t\t{strings.createRuleLabel}\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t) : undefined}\n\t\t\t\t\t/>\n\t\t\t\t)\n\t\t\t) : (\n\t\t\t\t<Stack gap=\"2xl\">\n\t\t\t\t\t{metrics.length > 0 && (\n\t\t\t\t\t\t<Grid columns={{ base: 1, sm: 3 }} gap=\"md\">\n\t\t\t\t\t\t\t{metrics.map((metric) => (\n\t\t\t\t\t\t\t\t<ProductMetricTile key={metric.id} metric={metric} />\n\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t</Grid>\n\t\t\t\t\t)}\n\t\t\t\t\t{terms.length > 0 && (\n\t\t\t\t\t\t<Stack gap=\"md\">\n\t\t\t\t\t\t\t<Text type=\"inherit\" weight=\"semibold\">{strings.termsTitle}</Text>\n\t\t\t\t\t\t\t<MetadataList adaptTo=\"container\" items={terms} columns={2} density=\"compact\" />\n\t\t\t\t\t\t</Stack>\n\t\t\t\t\t)}\n\t\t\t\t\t{rules.length > 0 && (\n\t\t\t\t\t\t<Stack gap=\"md\">\n\t\t\t\t\t\t\t<Text type=\"inherit\" weight=\"semibold\">{strings.rulesTitle}</Text>\n\t\t\t\t\t\t\t<ItemGroup>\n\t\t\t\t\t\t\t\t{rules.map((rule, index) => {\n\t\t\t\t\t\t\t\t\tconst onSelect = onSelectRule ? () => onSelectRule(rule) : undefined;\n\t\t\t\t\t\t\t\t\tconst onEdit = onEditRule ? () => onEditRule(rule) : undefined;\n\t\t\t\t\t\t\t\t\tconst onDelete = onDeleteRule ? () => onDeleteRule(rule) : undefined;\n\t\t\t\t\t\t\t\t\tconst ruleActions = [\n\t\t\t\t\t\t\t\t\t\t...(onSelect ? [{\n\t\t\t\t\t\t\t\t\t\t\tid: 'open',\n\t\t\t\t\t\t\t\t\t\t\tlabel: strings.viewRuleLabel,\n\t\t\t\t\t\t\t\t\t\t\ticon: <Eye className=\"size-icon-md\" />,\n\t\t\t\t\t\t\t\t\t\t\tonClick: () => onSelect(),\n\t\t\t\t\t\t\t\t\t\t\ttone: 'secondary' as const, buttonStyle: 'ghost' as const,\n\t\t\t\t\t\t\t\t\t\t}] : []),\n\t\t\t\t\t\t\t\t\t\t...(onEdit ? [{\n\t\t\t\t\t\t\t\t\t\t\tid: 'edit',\n\t\t\t\t\t\t\t\t\t\t\tlabel: strings.editRuleLabel,\n\t\t\t\t\t\t\t\t\t\t\ticon: <Pencil className=\"size-icon-md\" />,\n\t\t\t\t\t\t\t\t\t\t\tonClick: () => onEdit(),\n\t\t\t\t\t\t\t\t\t\t\ttone: 'secondary' as const, buttonStyle: 'ghost' as const,\n\t\t\t\t\t\t\t\t\t\t}] : []),\n\t\t\t\t\t\t\t\t\t\t...(onDelete ? [{\n\t\t\t\t\t\t\t\t\t\t\tid: 'delete',\n\t\t\t\t\t\t\t\t\t\t\tlabel: strings.deleteRuleLabel,\n\t\t\t\t\t\t\t\t\t\t\ticon: <Trash2 className=\"size-icon-md\" />,\n\t\t\t\t\t\t\t\t\t\t\tonClick: () => onDelete(),\n\t\t\t\t\t\t\t\t\t\t\ttone: 'destructive' as const,\n\t\t\t\t\t\t\t\t\t\t}] : []),\n\t\t\t\t\t\t\t\t\t];\n\t\t\t\t\t\t\t\t\tconst rowActions = renderRuleActions\n\t\t\t\t\t\t\t\t\t\t? renderRuleActions(rule, { index, onSelect, onEdit, onDelete })\n\t\t\t\t\t\t\t\t\t\t: <ProductRowActions item={rule} actions={ruleActions} menuLabel={strings.ruleActionsLabel} />;\n\n\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t<ProductSummaryRow\n\t\t\t\t\t\t\t\t\t\t\tkey={rule.id}\n\t\t\t\t\t\t\t\t\t\t\titem={rule}\n\t\t\t\t\t\t\t\t\t\t\tactions={rowActions}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t</ItemGroup>\n\t\t\t\t\t\t</Stack>\n\t\t\t\t\t)}\n\t\t\t\t</Stack>\n\t\t\t)}\n\t\t</ContentBlock>\n\t);\n}\n\nProductContractOverview.displayName = 'ProductContractOverview';\n","import { Button } from '../../../base/buttons';\nimport { ContentBlock } from '../../../base/display';\nimport { MetadataList } from '../../../base/metadata-list';\nimport { useStrings } from '../../../../lib/strings';\nimport { cn } from '../../../../lib/utils';\n\nimport { defaultProductDetailsCardStrings } from '../products.strings';\nimport type { ProductDetailsCardProps } from '../products.types';\nimport { ProductEmptyState } from '../partials/product-empty-state';\n\n/**\n * One main column region of the product editor.\n *\n * @deprecated An internal region of `ProductOverview`, which renders it from its `details` prop (still typed `ProductDetailsCardProps`). Pass the same props there and add custom content through the overview's slots. Kept exported for compatibility.\n */\nexport function ProductDetailsCard({\n\ttitle,\n\tdescription,\n\tmetadata = [],\n\tmedia,\n\tonEditDetails,\n\tactions,\n\theaderEnd,\n\tfooterSlot,\n\tempty,\n\tclassName,\n\tstrings: stringsProp,\n}: ProductDetailsCardProps) {\n\tconst strings = useStrings(defaultProductDetailsCardStrings, stringsProp);\n\tconst headerAction = onEditDetails ? (\n\t\t<Button type=\"button\" tone=\"secondary\" buttonStyle=\"ghost\" onClick={onEditDetails}>\n\t\t\t{strings.editLabel}\n\t\t</Button>\n\t) : undefined;\n\n\treturn (\n\t\t<ContentBlock\n\t\t\ttitle={title ?? strings.title}\n\t\t\tdescription={description === false ? undefined : description ?? strings.description}\n\t\t\tactions={actions}\n\t\t\theaderAction={headerAction}\n\t\t\theaderEnd={headerEnd}\n\t\t\tfooterSlot={footerSlot}\n\t\t\tclassName={cn('product-details-card--component w-full', className)}\n\t\t>\n\t\t\t{metadata.length === 0 && !media ? (\n\t\t\t\tempty ?? <ProductEmptyState title={strings.emptyTitle} description={strings.emptyDescription} />\n\t\t\t) : (\n\t\t\t\t<div className=\"@container/product-details\">\n\t\t\t\t\t<div className={cn('grid min-w-0 grid-cols-1 gap-space-xl', media && metadata.length > 0 && '@xl/product-details:grid-cols-[12rem_minmax(0,1fr)]')}>\n\t\t\t\t\t\t{!!media && (\n\t\t\t\t\t\t\t<div className=\"product-details-card--media self-start overflow-hidden rounded-radius border border-border bg-muted/30\">\n\t\t\t\t\t\t\t\t{media}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{metadata.length > 0 && <MetadataList\n\t\t\t\t\t\t\tadaptTo=\"container\"\n\t\t\t\t\t\t\titems={metadata}\n\t\t\t\t\t\t\tcolumns={media ? 1 : 2}\n\t\t\t\t\t\t\tdensity=\"compact\"\n\t\t\t\t\t\t\tclassName=\"min-w-0 [&_.metadata-list--value]:break-words\"\n\t\t\t\t\t\t/>}\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</ContentBlock>\n\t);\n}\n\nProductDetailsCard.displayName = 'ProductDetailsCard';\n","import { Eye, Pencil, Trash2 } from 'lucide-react';\n\nimport { useStrings } from '../../../../lib/strings';\nimport { cn } from '../../../../lib/utils';\n\nimport {\n\tdefaultProductOptionActionMenuStrings,\n} from '../products.strings';\nimport type {\n\tProductOptionActionMenuProps,\n\tProductOptionSummary,\n} from '../products.types';\nimport { ProductRowActions } from '../partials/product-actions';\n\n/**\n * Row menu for one product option.\n *\n * @deprecated An internal part of `ProductOptionsSummary` (and so of `ProductOverview`), which renders it for every option. Replace it there with `renderOptionActions`, composing the base `ActionMenu` if needed. Kept exported for compatibility.\n */\nexport function ProductOptionActionMenu({\n\toption,\n\tindex = 0,\n\tonSelectOption,\n\tonEditOption,\n\tonDeleteOption,\n\trenderOptionActions,\n\tmenuLabel,\n\tclassName,\n\tstrings: stringsProp,\n}: ProductOptionActionMenuProps) {\n\tconst strings = useStrings(defaultProductOptionActionMenuStrings, stringsProp);\n\tconst onSelect = onSelectOption ? () => onSelectOption(option) : undefined;\n\tconst onEdit = onEditOption ? () => onEditOption(option) : undefined;\n\tconst onDelete = onDeleteOption ? () => onDeleteOption(option) : undefined;\n\tconst hasActions = !!(onSelect || onEdit || onDelete || renderOptionActions);\n\n\tif (!hasActions) return null;\n\n\tif (renderOptionActions) {\n\t\treturn (\n\t\t\t<div className={cn('product-option-action-menu--component flex justify-end', className)}>\n\t\t\t\t{renderOptionActions(option, { index, onSelect, onEdit, onDelete })}\n\t\t\t</div>\n\t\t);\n\t}\n\n\treturn (\n\t\t<ProductRowActions<ProductOptionSummary>\n\t\t\titem={option}\n\t\t\tmenuLabel={menuLabel ?? strings.actionsLabel}\n\t\t\tclassName={cn('product-option-action-menu--component', className)}\n\t\t\tactions={[\n\t\t\t\t...(onSelect ? [{\n\t\t\t\t\tid: 'open',\n\t\t\t\t\tlabel: strings.viewLabel,\n\t\t\t\t\ticon: <Eye className=\"size-icon-md\" />,\n\t\t\t\t\tonClick: () => onSelect(),\n\t\t\t\t\ttone: 'secondary' as const, buttonStyle: 'ghost' as const,\n\t\t\t\t}] : []),\n\t\t\t\t...(onEdit ? [{\n\t\t\t\t\tid: 'edit',\n\t\t\t\t\tlabel: strings.editLabel,\n\t\t\t\t\ticon: <Pencil className=\"size-icon-md\" />,\n\t\t\t\t\tonClick: () => onEdit(),\n\t\t\t\t\ttone: 'secondary' as const, buttonStyle: 'ghost' as const,\n\t\t\t\t}] : []),\n\t\t\t\t...(onDelete ? [{\n\t\t\t\t\tid: 'delete',\n\t\t\t\t\tlabel: strings.deleteLabel,\n\t\t\t\t\ticon: <Trash2 className=\"size-icon-md\" />,\n\t\t\t\t\tonClick: () => onDelete(),\n\t\t\t\t\ttone: 'destructive' as const,\n\t\t\t\t}] : []),\n\t\t\t]}\n\t\t/>\n\t);\n}\n\nProductOptionActionMenu.displayName = 'ProductOptionActionMenu';\n","import { Pencil, Plus, Trash2 } from 'lucide-react';\n\nimport { Button } from '../../../base/buttons';\nimport { ContentBlock } from '../../../base/display';\nimport { ItemGroup } from '../../../base/item';\nimport { useStrings } from '../../../../lib/strings';\nimport { cn } from '../../../../lib/utils';\n\nimport { defaultProductOperationsCardStrings } from '../products.strings';\nimport type { ProductOperationsCardProps } from '../products.types';\nimport { ProductEmptyState } from '../partials/product-empty-state';\nimport { ProductRowActions } from '../partials/product-actions';\nimport { ProductOperationRow } from '../partials/product-rows';\n\n/**\n * One support rail region of the product editor.\n *\n * @deprecated An internal region of `ProductOverview`, which renders it from its `operations` prop (still typed `ProductOperationsCardProps`). Pass the same props there and add custom content through the overview's slots. Kept exported for compatibility.\n */\nexport function ProductOperationsCard({\n\titems = [],\n\tonCreateOperation,\n\tonSelectOperation,\n\tonEditOperation,\n\tonDeleteOperation,\n\trenderOperationActions,\n\tactions,\n\tfooterSlot,\n\trenderItem,\n\tempty,\n\tclassName,\n\tstrings: stringsProp,\n}: ProductOperationsCardProps) {\n\tconst strings = useStrings(defaultProductOperationsCardStrings, stringsProp);\n\tconst headerAction = onCreateOperation ? (\n\t\t<Button type=\"button\" tone=\"secondary\" buttonStyle=\"ghost\" onClick={onCreateOperation} icon={Plus}>\n\t\t\t{strings.createLabel}\n\t\t</Button>\n\t) : undefined;\n\n\treturn (\n\t\t<ContentBlock\n\t\t\ttitle={strings.title}\n\t\t\tdescription={strings.description}\n\t\t\tactions={actions}\n\t\t\theaderAction={headerAction}\n\t\t\tfooterSlot={footerSlot}\n\t\t\tclassName={cn('product-operations-card--component w-full', className)}\n\t\t>\n\t\t\t{items.length === 0 ? (\n\t\t\t\tempty ?? (\n\t\t\t\t\t<ProductEmptyState\n\t\t\t\t\t\ttitle={strings.emptyTitle}\n\t\t\t\t\t\tdescription={strings.emptyDescription}\n\t\t\t\t\t\taction={onCreateOperation ? (\n\t\t\t\t\t\t\t<Button tone=\"primary\" type=\"button\" onClick={onCreateOperation} icon={Plus}>\n\t\t\t\t\t\t\t\t{strings.createLabel}\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t) : undefined}\n\t\t\t\t\t/>\n\t\t\t\t)\n\t\t\t) : (\n\t\t\t\t<ItemGroup>\n\t\t\t\t\t{items.map((item, index) => {\n\t\t\t\t\t\tconst onSelect = onSelectOperation ? () => onSelectOperation(item) : undefined;\n\t\t\t\t\t\tconst onEdit = onEditOperation ? () => onEditOperation(item) : undefined;\n\t\t\t\t\t\tconst onDelete = onDeleteOperation ? () => onDeleteOperation(item) : undefined;\n\t\t\t\t\t\tconst operationActions = [\n\t\t\t\t\t\t\t...(onEdit ? [{\n\t\t\t\t\t\t\t\tid: 'edit',\n\t\t\t\t\t\t\t\tlabel: strings.editLabel,\n\t\t\t\t\t\t\t\ticon: <Pencil className=\"size-icon-md\" />,\n\t\t\t\t\t\t\t\tonClick: () => onEdit(),\n\t\t\t\t\t\t\t\ttone: 'secondary' as const, buttonStyle: 'ghost' as const,\n\t\t\t\t\t\t\t}] : []),\n\t\t\t\t\t\t\t...(onDelete ? [{\n\t\t\t\t\t\t\t\tid: 'delete',\n\t\t\t\t\t\t\t\tlabel: strings.deleteLabel,\n\t\t\t\t\t\t\t\ticon: <Trash2 className=\"size-icon-md\" />,\n\t\t\t\t\t\t\t\tonClick: () => onDelete(),\n\t\t\t\t\t\t\t\ttone: 'destructive' as const,\n\t\t\t\t\t\t\t}] : []),\n\t\t\t\t\t\t];\n\t\t\t\t\t\tconst rowActions = renderOperationActions\n\t\t\t\t\t\t\t? renderOperationActions(item, { index, onSelect, onEdit, onDelete })\n\t\t\t\t\t\t\t: <ProductRowActions item={item} actions={operationActions} menuLabel={strings.actionsLabel} />;\n\n\t\t\t\t\t\treturn renderItem ? (\n\t\t\t\t\t\t\t<div key={item.id}>{renderItem(item, index)}</div>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<ProductOperationRow\n\t\t\t\t\t\t\t\tkey={item.id}\n\t\t\t\t\t\t\t\titem={item}\n\t\t\t\t\t\t\t\tactionFallback={strings.actionLabel}\n\t\t\t\t\t\t\t\tonSelect={onSelect}\n\t\t\t\t\t\t\t\tactions={rowActions}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t);\n\t\t\t\t\t})}\n\t\t\t\t</ItemGroup>\n\t\t\t)}\n\t\t</ContentBlock>\n\t);\n}\n\nProductOperationsCard.displayName = 'ProductOperationsCard';\n","import {compositionClasses} from '../../../base/structure/composition.recipes';\nimport { ChevronDown, Plus, PlusCircle, Trash2, X } from 'lucide-react';\nimport { Fragment, useCallback, useEffect, useMemo, useRef, useState, type ReactNode } from 'react';\n\nimport { Badge } from '../../../base/badge';\nimport { Button } from '../../../base/buttons';\nimport { Alert, AlertDescription, AlertTitle } from '../../../base/feedback';\nimport { ConfirmDialog, useOverlayVisibility } from '../../overlays';\nimport { interpolateString } from '../../../../lib/strings';\nimport { ContentBlock } from '../../../base/display';\nimport { FormField } from '../../../base/forms';\nimport { Input } from '../../../base/text-inputs';\nimport { Switch } from '../../../base/choice-inputs';\nimport { Stack } from '../../../base/structure';\nimport { Text } from '../../../typography';\nimport { useStrings } from '../../../../lib/strings';\nimport { cn } from '../../../../lib/utils';\nimport { fieldAffordanceRecipes } from '../../../../lib/field-affordance-recipes';\n\nimport {\n\tdefaultProductOptionsMatrixStrings,\n} from '../products.strings';\nimport type {\n\tProductOptionEditDraft,\n\tProductOptionGroup,\n\tProductOptionsMatrixProps,\n} from '../products.types';\nimport { ProductEmptyState } from '../partials/product-empty-state';\nimport { ProductRowActions } from '../partials/product-actions';\nimport { focusRecipes } from '../../../../lib/focus-recipes';\nimport { interactionRecipes } from '../../../../lib/interaction-recipes';\n\nfunction getPlainText(value: ReactNode): string {\n\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\tonError,\n\tonCancelEditingOption,\n\tonToggleUsedForVariants,\n\trenderOptionActions,\n\trenderValue,\n\tshowHeader: showHeaderProp,\n\tshowCollapseControls = true,\n\tshowInlineActions = true,\n\tshowVariantToggle = true,\n\tactions,\n\theaderEnd,\n\tfooterSlot,\n\tempty,\n\tclassName,\n\tstrings: stringsProp,\n}: ProductOptionsMatrixProps) {\n\tconst strings = useStrings(defaultProductOptionsMatrixStrings, stringsProp);\n\tconst isCollapsedControlled = collapsedOptionIds !== undefined;\n\tconst [internalCollapsedOptionIds, setInternalCollapsedOptionIds] = useState(defaultCollapsedOptionIds);\n\tconst resolvedCollapsedOptionIds = isCollapsedControlled ? collapsedOptionIds : internalCollapsedOptionIds;\n\tconst collapsedOptionIdSet = useMemo(() => new Set(resolvedCollapsedOptionIds), [resolvedCollapsedOptionIds]);\n\tconst supportsInlineEditing =\n\t\teditingOptionId !== undefined ||\n\t\tdefaultEditingOptionId !== undefined ||\n\t\t!!onEditingOptionIdChange ||\n\t\t!!onOptionNameChange ||\n\t\t!!onValueLabelChange ||\n\t\t!!onDoneEditingOption ||\n\t\t!!onSaveEditingOption ||\n\t\t!!onCancelEditingOption;\n\tconst isEditingControlled = editingOptionId !== undefined;\n\tconst [internalEditingOptionId, setInternalEditingOptionId] = useState<string | null>(defaultEditingOptionId ?? null);\n\tconst [draftByOptionId, setDraftByOptionId] = useState<Record<string, ProductOptionEditDraft>>({});\n\tconst savingRef = useRef(false);\n\tconst mountedRef = useRef(true);\n\tconst [savingOptionId, setSavingOptionId] = useState<string | null>(null);\n\tconst [saveFailure, setSaveFailure] = useState<{ optionId: string; message: string } | null>(null);\n\tconst errorRef = useRef<HTMLDivElement>(null);\n\t// A value added from the editor takes focus, so it can be typed at once.\n\tconst focusValueIdRef = useRef<string | null>(null);\n\tconst focusAddedValue = useCallback((node: HTMLInputElement | null) => {\n\t\tif (!node) return;\n\t\tnode.focus();\n\t\tfocusValueIdRef.current = null;\n\t}, []);\n\tconst isSaving = savingOptionId !== null;\n\tuseEffect(() => {\n\t\tmountedRef.current = true;\n\t\treturn () => { mountedRef.current = false; };\n\t}, []);\n\tconst resolvedEditingOptionId = supportsInlineEditing\n\t\t? (isEditingControlled ? editingOptionId : internalEditingOptionId)\n\t\t: null;\n\tconst hasGroups = optionGroups.length > 0;\n\tconst showPanelHeader = surface === 'embedded' && showHeaderProp !== false;\n\tconst showCreateRow = hasGroups && !!onCreateOption;\n\n\tconst updateCollapsedOptionIds = useCallback(\n\t\t(nextIds: string[]) => {\n\t\t\tif (!isCollapsedControlled) {\n\t\t\t\tsetInternalCollapsedOptionIds(nextIds);\n\t\t\t}\n\t\t\tonCollapsedOptionIdsChange?.(\n\t\t\t\tnextIds,\n\t\t\t\toptionGroups.filter((option) => nextIds.includes(option.id)),\n\t\t\t);\n\t\t},\n\t\t[isCollapsedControlled, onCollapsedOptionIdsChange, optionGroups],\n\t);\n\n\tconst toggleCollapsed = useCallback(\n\t\t(option: ProductOptionGroup) => {\n\t\t\tif (savingRef.current) return;\n\t\t\tconst nextIds = collapsedOptionIdSet.has(option.id)\n\t\t\t\t? resolvedCollapsedOptionIds.filter((id) => id !== option.id)\n\t\t\t\t: [...resolvedCollapsedOptionIds, option.id];\n\t\t\tupdateCollapsedOptionIds(nextIds);\n\t\t},\n\t\t[collapsedOptionIdSet, resolvedCollapsedOptionIds, updateCollapsedOptionIds],\n\t);\n\n\tconst updateEditingOptionId = useCallback(\n\t\t(nextId: string | null, option?: ProductOptionGroup) => {\n\t\t\tif (!supportsInlineEditing) return;\n\t\t\tif (!isEditingControlled) {\n\t\t\t\tsetInternalEditingOptionId(nextId);\n\t\t\t}\n\t\t\tonEditingOptionIdChange?.(nextId, option);\n\t\t},\n\t\t[isEditingControlled, onEditingOptionIdChange, supportsInlineEditing],\n\t);\n\n\tconst startEditing = useCallback(\n\t\t(option: ProductOptionGroup) => {\n\t\t\tif (savingRef.current) return;\n\t\t\tsetSaveFailure(null);\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\tif (savingRef.current) return;\n\t\t\tsetDraftByOptionId((current) => ({\n\t\t\t\t...current,\n\t\t\t\t[option.id]: updater(current[option.id] ?? getOptionDraft(option)),\n\t\t\t}));\n\t\t},\n\t\t[],\n\t);\n\n\tconst cancelEditing = useCallback(\n\t\t(option: ProductOptionGroup) => {\n\t\t\tif (savingRef.current) return;\n\t\t\tconst draft = getResolvedDraft(option);\n\t\t\tsetSaveFailure(null);\n\t\t\tsetDraftByOptionId((current) => {\n\t\t\t\tconst { [option.id]: _removed, ...rest } = current;\n\t\t\t\treturn rest;\n\t\t\t});\n\t\t\tupdateEditingOptionId(null, option);\n\t\t\tonCancelEditingOption?.(option, draft);\n\t\t},\n\t\t[getResolvedDraft, onCancelEditingOption, updateEditingOptionId],\n\t);\n\n\t/*\n\t * The per-value trash button only edits a local draft — nothing is destroyed\n\t * until the edit is saved, and Cancel already abandons it. The destructive\n\t * moment is here, where the diff emits `onDeleteValue` once per dropped\n\t * value, so the confirmation belongs to the save and asks once for all of\n\t * them rather than once each.\n\t */\n\tconst commitEditing = useCallback(\n\t\tasync (option: ProductOptionGroup) => {\n\t\t\tif (savingRef.current) return false;\n\t\t\tsavingRef.current = true;\n\t\t\tsetSavingOptionId(option.id);\n\t\t\tsetSaveFailure(null);\n\t\t\tconst draft = getResolvedDraft(option);\n\t\t\tconst originalValues = option.values ?? [];\n\t\t\tconst originalValueIds = new Set(originalValues.map((value) => value.id));\n\t\t\tconst draftValueIds = new Set(draft.values.map((value) => value.id));\n\n\t\t\ttry {\n\t\t\t\t// Void callbacks keep their existing synchronous notification timing.\n\t\t\t\t// Only a returned Promise defers acceptance and the draft's disposal.\n\t\t\t\tconst result = onSaveEditingOption?.(option, draft);\n\t\t\t\tif (result) await result;\n\t\t\t\tif (!mountedRef.current) return false;\n\t\t\t\tonOptionNameChange?.(option, draft.name);\n\t\t\t\toriginalValues.forEach((value) => {\n\t\t\t\t\tconst draftValue = draft.values.find((item) => item.id === value.id);\n\t\t\t\t\tif (draftValue && getPlainText(value.label) !== getPlainText(draftValue.label)) {\n\t\t\t\t\t\tonValueLabelChange?.(option, value, getPlainText(draftValue.label));\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tdraft.values.forEach((value) => {\n\t\t\t\t\tif (!originalValueIds.has(value.id)) {\n\t\t\t\t\t\tonAddValue?.(option);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\toriginalValues.forEach((value) => {\n\t\t\t\t\tif (!draftValueIds.has(value.id)) {\n\t\t\t\t\t\tonDeleteValue?.(option, value);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tsetDraftByOptionId((current) => {\n\t\t\t\t\tconst { [option.id]: _removed, ...rest } = current;\n\t\t\t\t\treturn rest;\n\t\t\t\t});\n\t\t\t\tupdateEditingOptionId(null, option);\n\t\t\t\tonDoneEditingOption?.(option);\n\t\t\t\treturn true;\n\t\t\t} catch (error) {\n\t\t\t\tif (mountedRef.current) {\n\t\t\t\t\tsetSaveFailure({ optionId: option.id, message: error instanceof Error && error.message ? error.message : strings.saveErrorMessage ?? defaultProductOptionsMatrixStrings.saveErrorMessage! });\n\t\t\t\t\tonError?.(error);\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t} finally {\n\t\t\t\tsavingRef.current = false;\n\t\t\t\tif (mountedRef.current) setSavingOptionId(null);\n\t\t\t}\n\t\t},\n\t\t[getResolvedDraft, onAddValue, onDeleteValue, onDoneEditingOption, onOptionNameChange, onSaveEditingOption, onError, onValueLabelChange, strings.saveErrorMessage, updateEditingOptionId],\n\t);\n\n\tconst removeValuesConfirm = useOverlayVisibility();\n\tconst [pendingSave, setPendingSave] = useState<{ option: ProductOptionGroup; removed: number } | null>(null);\n\tuseEffect(() => {\n\t\tif (saveFailure && !removeValuesConfirm.isOpen) {\n\t\t\terrorRef.current?.focus();\n\t\t\terrorRef.current?.scrollIntoView?.({ block: 'nearest' });\n\t\t}\n\t}, [saveFailure, removeValuesConfirm.isOpen]);\n\n\tconst saveEditing = useCallback(\n\t\t(option: ProductOptionGroup) => {\n\t\t\tif (savingRef.current) return;\n\t\t\tconst draft = getResolvedDraft(option);\n\t\t\tconst draftValueIds = new Set(draft.values.map((value) => value.id));\n\t\t\tconst removed = (option.values ?? []).filter((value) => !draftValueIds.has(value.id)).length;\n\n\t\t\tif (confirmDelete === false || removed === 0) {\n\t\t\t\tvoid commitEditing(option);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tsetPendingSave({ option, removed });\n\t\t\tremoveValuesConfirm.show();\n\t\t},\n\t\t[commitEditing, confirmDelete, getResolvedDraft, removeValuesConfirm],\n\t);\n\n\tconst deleteOption = useCallback(\n\t\t(option: ProductOptionGroup) => {\n\t\t\tif (savingRef.current) return;\n\t\t\tif (resolvedEditingOptionId === option.id) {\n\t\t\t\tsetDraftByOptionId((current) => {\n\t\t\t\t\tconst { [option.id]: _removed, ...rest } = current;\n\t\t\t\t\treturn rest;\n\t\t\t\t});\n\t\t\t\tupdateEditingOptionId(null, option);\n\t\t\t}\n\t\t\tonDeleteOption?.(option);\n\t\t},\n\t\t[onDeleteOption, resolvedEditingOptionId, updateEditingOptionId],\n\t);\n\n\t/*\n\t * Deleting an option group silently takes its values — and every variant\n\t * built from them — with it. That is too much to lose to a single click on\n\t * an overflow-menu item, so it asks first. `confirmDelete={false}` opts out\n\t * for apps that already confirm upstream.\n\t */\n\tconst deleteOptionConfirm = useOverlayVisibility();\n\tconst [pendingDeleteOption, setPendingDeleteOption] = useState<ProductOptionGroup | null>(null);\n\n\tconst requestDeleteOption = useCallback(\n\t\t(option: ProductOptionGroup) => {\n\t\t\tif (savingRef.current) return;\n\t\t\tif (confirmDelete === false) {\n\t\t\t\tdeleteOption(option);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tsetPendingDeleteOption(option);\n\t\t\tdeleteOptionConfirm.show();\n\t\t},\n\t\t[confirmDelete, deleteOption, deleteOptionConfirm],\n\t);\n\n\tconst headerAction = onCreateOption ? (\n\t\t<Button type=\"button\" tone=\"neutral\" onClick={() => { if (!savingRef.current) onCreateOption(); }} disabled={isSaving} icon={Plus}>\n\t\t\t{strings.createLabel}\n\t\t</Button>\n\t) : undefined;\n\n\tconst panelHeader = showPanelHeader ? (\n\t\t<div className=\"product-options-matrix--panel-header p-surface\">\n\t\t<Stack direction=\"horizontal\" gap=\"md\" justify=\"between\">\n\t\t\t<Text type=\"inherit\" weight=\"semibold\">{strings.title}</Text>\n\t\t\t{headerAction}\n\t\t</Stack>\n\t\t</div>\n\t) : null;\n\n\tconst content = (\n\t\t<div className=\"product-options-matrix--body min-w-0\">\n\t\t\t<div className=\"product-options-matrix--panel overflow-hidden rounded-surface border border-border bg-background text-foreground\">\n\t\t\t\t{panelHeader}\n\n\t\t\t\t{!hasGroups ? (\n\t\t\t\t\t<div className={cn(showPanelHeader && 'border-t border-border/60')}>\n\t\t\t\t\t\t{empty ?? (\n\t\t\t\t\t\t\t<ProductEmptyState\n\t\t\t\t\t\t\t\ttitle={strings.emptyTitle}\n\t\t\t\t\t\t\t\tdescription={strings.emptyDescription}\n\t\t\t\t\t\t\t\taction={onCreateOption && !showPanelHeader ? (\n\t\t\t\t\t\t\t\t\t<Button tone=\"primary\" type=\"button\" onClick={onCreateOption} icon={Plus}>\n\t\t\t\t\t\t\t\t\t\t{strings.createLabel}\n\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t) : undefined}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\t\t\t\t) : (\n\t\t\t\t\t<div className={cn('product-options-matrix--list', showPanelHeader && 'border-t border-border/60')}>\n\t\t\t\t\t\t{optionGroups.map((option, optionIndex) => {\n\t\t\t\t\t\t\tconst values = option.values ?? [];\n\t\t\t\t\t\t\tconst isCollapsed = collapsedOptionIdSet.has(option.id);\n\t\t\t\t\t\t\tconst 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 optionFailure = saveFailure?.optionId === option.id ? saveFailure : null;\n\t\t\t\t\t\t\tconst isSavingOption = savingOptionId === option.id;\n\t\t\t\t\t\t\tconst renderedActions = renderOptionActions?.(option, {\n\t\t\t\t\t\t\t\tindex: optionIndex,\n\t\t\t\t\t\t\t\tonEdit: canEdit && !isSaving ? () => startEditing(option) : undefined,\n\t\t\t\t\t\t\t\tonDelete: onDeleteOption && !isSaving ? () => requestDeleteOption(option) : undefined,\n\t\t\t\t\t\t\t\tonAddValue: onAddValue && !isSaving ? () => { if (!savingRef.current) onAddValue(option); } : undefined,\n\t\t\t\t\t\t\t\tonToggleCollapsed: () => toggleCollapsed(option),\n\t\t\t\t\t\t\t\tcollapsed: isCollapsed,\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\tconst menuActions = [\n\t\t\t\t\t\t\t\t...(canAddValue ? [{\n\t\t\t\t\t\t\t\t\tid: 'add-value',\n\t\t\t\t\t\t\t\t\tlabel: strings.addValueLabel,\n\t\t\t\t\t\t\t\t\tdisabled: isSaving,\n\t\t\t\t\t\t\t\t\ticon: <Plus className=\"size-icon-md\" />,\n\t\t\t\t\t\t\t\t\tonClick: () => { if (!savingRef.current) onAddValue?.(option); },\n\t\t\t\t\t\t\t\t\ttone: 'secondary' as const, buttonStyle: 'ghost' as const,\n\t\t\t\t\t\t\t\t}] : []),\n\t\t\t\t\t\t\t\t...(canDelete ? [{\n\t\t\t\t\t\t\t\t\tid: 'delete',\n\t\t\t\t\t\t\t\t\tlabel: strings.deleteLabel,\n\t\t\t\t\t\t\t\t\tdisabled: isSaving,\n\t\t\t\t\t\t\t\t\ticon: <Trash2 className=\"size-icon-md\" />,\n\t\t\t\t\t\t\t\t\tonClick: () => requestDeleteOption(option),\n\t\t\t\t\t\t\t\t\ttone: 'destructive' as const,\n\t\t\t\t\t\t\t\t}] : []),\n\t\t\t\t\t\t\t];\n\n\t\t\t\t\t\t\tconst defaultActions = showInlineActions && (canEdit || menuActions.length > 0) ? (\n\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t{!!canEdit && (\n\t\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\ttone=\"secondary\"\n\t\t\t\t\t\t\t\t\t\t\tbuttonStyle=\"ghost\"\n\t\t\t\t\t\t\t\t\t\t\tonClick={() => startEditing(option)}\n\t\t\t\t\t\t\t\t\t\t\tdisabled={isSaving}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t{strings.editLabel}\n\t\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t<ProductRowActions\n\t\t\t\t\t\t\t\t\t\titem={option}\n\t\t\t\t\t\t\t\t\t\tactions={menuActions}\n\t\t\t\t\t\t\t\t\t\tmenuLabel={strings.actionsLabel}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t\t) : null;\n\t\t\t\t\t\t\tconst resolvedActions = renderedActions !== undefined ? renderedActions : defaultActions;\n\n\t\t\t\t\t\t\tif (isEditing) {\n\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\tkey={option.id}\n\t\t\t\t\t\t\t\t\t\tclassName=\"product-options-matrix--item product-options-matrix--item-editing border-b border-border/60 p-surface last:border-b-0\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t<Stack gap=\"lg\" className=\"product-options-matrix--editor\" aria-busy={isSavingOption}>\n\t\t\t\t\t\t\t\t\t\t\t\t{optionFailure && <Alert ref={errorRef} tabIndex={-1} tone=\"destructive\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<AlertTitle>{strings.saveErrorTitle ?? defaultProductOptionsMatrixStrings.saveErrorTitle}</AlertTitle>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<AlertDescription>{optionFailure.message}</AlertDescription>\n\t\t\t\t\t\t\t\t\t\t\t\t</Alert>}\n\t\t\t\t\t\t\t\t\t\t\t\t<FormField\n\t\t\t\t\t\t\t\t\t\t\t\t\tlabel={strings.optionNameLabel}\n\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"product-options-matrix--editor-field\"\n\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Input\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tvalue={optionDraft.name}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisabled={isSaving}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tonChange={(event) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tconst nextName = event.currentTarget.value;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tupdateDraft(option, (draft) => ({\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t...draft,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tname: nextName,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}));\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\taria-label={strings.optionNameLabel}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"bg-background\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\t</FormField>\n\n\t\t\t\t\t\t\t\t\t\t\t\t<Stack gap=\"sm\" className=\"product-options-matrix--editor-field\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Text type=\"inherit\" weight=\"medium\">{strings.optionValuesLabel}</Text>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Stack gap=\"xs\" className=\"product-options-matrix--editor-values\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{optionDraft.values.length === 0 && (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Text size=\"xs\" type=\"secondary\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{strings.noValuesLabel}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{optionDraft.values.map((value) => (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tkey={value.id}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"product-options-matrix--editor-value grid min-w-0 grid-cols-[minmax(0,1fr)_auto] items-center gap-space-sm\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Input\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tref={value.id === focusValueIdRef.current ? focusAddedValue : undefined}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvalue={getPlainText(value.label)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisabled={isSaving}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\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\tdisabled={isSaving}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"text-muted-foreground hover:text-destructive\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Trash2 className=\"size-icon-sm\" aria-hidden=\"true\" />\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Text tag=\"span\" size=\"pxs\" className=\"sr-only\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{strings.deleteValueLabel}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div className=\"product-options-matrix--editor-add-value min-w-0\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttone=\"secondary\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tbuttonStyle=\"outline\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisabled={isSaving}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={() => 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\tconst id = `${option.id}-draft-value-${nextIndex}`;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfocusValueIdRef.current = id;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\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: [...draft.values, { id, label: '' }],\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfullWidth\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"justify-start text-muted-foreground\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{strings.addAnotherValueLabel}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t\t\t\t\t\t\t</Stack>\n\n\t\t\t\t\t\t\t\t\t\t\t<Stack direction=\"horizontal\" gap=\"md\" justify=\"between\" wrap={false} className=\"product-options-matrix--editor-actions\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{!!onDeleteOption && (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttone=\"destructive\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tbuttonStyle=\"outline\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={() => requestDeleteOption(option)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisabled={isSaving}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{strings.deleteLabel}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t<Stack direction=\"horizontal\" gap=\"sm\" justify=\"end\" wrap={false}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Button type=\"button\" tone=\"secondary\" buttonStyle=\"ghost\" onClick={() => cancelEditing(option)} disabled={isSaving}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{strings.cancelLabel}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Button type=\"button\" tone=\"neutral\" onClick={() => saveEditing(option)} disabled={isSaving} loading={isSavingOption} strings={{ loading: strings.savingLabel }}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{optionFailure ? strings.retrySaveLabel ?? strings.saveLabel : strings.saveLabel ?? strings.doneLabel}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tconst optionSummary = (\n\t\t\t\t\t\t\t\t<Stack render={<span />} gap=\"sm\">\n\t\t\t\t\t\t\t\t\t<Stack render={<span />} direction=\"horizontal\" gap=\"sm\">\n\t\t\t\t\t\t\t\t\t\t<Text type=\"inherit\" tag=\"span\" weight=\"semibold\" className=\"min-w-0 whitespace-normal break-words\">\n\t\t\t\t\t\t\t\t\t\t\t{option.name}\n\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t\t{option.badge}\n\t\t\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t\t\t\t{!!option.description && (\n\t\t\t\t\t\t\t\t\t\t<Text tag=\"span\" size=\"xs\" type=\"secondary\" className=\"max-w-prose\">\n\t\t\t\t\t\t\t\t\t\t\t{option.description}\n\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t{!isCollapsed && (\n\t\t\t\t\t\t\t\t\t\t<Stack render={<span />} gap=\"sm\" className=\"product-options-matrix--values\">\n\t\t\t\t\t\t\t\t\t\t\t{values.length === 0 ? (\n\t\t\t\t\t\t\t\t\t\t\t\t<Text tag=\"span\" size=\"xs\" type=\"secondary\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t{strings.noValuesLabel}\n\t\t\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"flex flex-wrap gap-space-xs\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t{values.map((value, valueIndex) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tconst deleteValue = onDeleteValue ? () => { if (!savingRef.current) onDeleteValue(option, value); } : undefined;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tconst renderedValue = renderValue?.(value, {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\toption,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\toptionIndex,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvalueIndex,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tonDelete: deleteValue,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tif (renderedValue) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\treturn <Fragment key={value.id}>{renderedValue}</Fragment>;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Badge\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tkey={value.id}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttone=\"neutral\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName={cn('product-options-matrix--value', value.disabled && 'opacity-50')}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{isScalarText(value.label) ? (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Text type=\"inherit\" tag=\"span\" size=\"inherit\" className=\"min-w-0 whitespace-normal break-words\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{value.label}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvalue.label\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{value.badge}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{!!deleteValue && showInlineActions && (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={deleteValue}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisabled={isSaving}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\taria-label={strings.deleteValueLabel}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t// The badge clips its label row, so the focus halo is drawn inside.\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName={cn(fieldAffordanceRecipes.target, fieldAffordanceRecipes.focus, focusRecipes.inset, fieldAffordanceRecipes.clear, 'hover:text-destructive')}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<X className={fieldAffordanceRecipes.icon} aria-hidden=\"true\" />\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Text tag=\"span\" size=\"pxs\" className=\"sr-only\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{strings.deleteValueLabel}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Badge>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\tkey={option.id}\n\t\t\t\t\t\t\t\t\tclassName=\"product-options-matrix--item border-b border-border/60 last:border-b-0\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<div className={cn('grid min-w-0 items-center gap-x-space-md gap-y-space-md p-surface', showCollapseControls ? 'grid-cols-[auto_minmax(0,1fr)] @2xl/product-options-matrix:grid-cols-[auto_minmax(0,1fr)_auto]' : 'grid-cols-1 @2xl/product-options-matrix:grid-cols-[minmax(0,1fr)_auto]')}>\n\t\t\t\t\t\t\t\t\t\t{showCollapseControls && (\n\t\t\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\t\tsize=\"sm\" iconOnly\n\t\t\t\t\t\t\t\t\t\t\t\ttone=\"secondary\"\n\t\t\t\t\t\t\t\t\t\t\t\tbuttonStyle=\"ghost\"\n\t\t\t\t\t\t\t\t\t\t\t\tonClick={() => toggleCollapsed(option)}\n\t\t\t\t\t\t\t\t\t\t\t\tdisabled={isSaving}\n\t\t\t\t\t\t\t\t\t\t\t\taria-expanded={!isCollapsed}\n\t\t\t\t\t\t\t\t\t\t\t\taria-label={isCollapsed ? strings.expandOptionLabel : strings.collapseOptionLabel}\n\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"product-options-matrix--collapse-trigger mt-space-2xs shrink-0 text-muted-foreground\"\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t<ChevronDown className={cn('size-icon-sm transition-transform', isCollapsed && '-rotate-90')} aria-hidden=\"true\" />\n\t\t\t\t\t\t\t\t\t\t\t\t<Text tag=\"span\" size=\"pxs\" className=\"sr-only\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t{isCollapsed ? strings.expandOptionLabel : strings.collapseOptionLabel}\n\t\t\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t\t\t\t\t<div className=\"product-options-matrix--item-main min-w-0\">\n\t\t\t\t\t\t\t\t\t\t\t{canEdit && !showInlineActions ? (\n\t\t\t\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={() => startEditing(option)}\n\t\t\t\t\t\t\t\t\t\t\t\t\tdisabled={isSaving}\n\t\t\t\t\t\t\t\t\t\t\t\t\taria-label={getOptionEditLabel(strings.editLabel, option)}\n\t\t\t\t\t\t\t\t\t\t\t\t\tclassName={`product-options-matrix--edit-summary ${interactionRecipes.nativeButtonReset} block w-full cursor-pointer whitespace-normal rounded-radius text-start text-inherit outline-none ${focusRecipes.edge}`}\n\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t{optionSummary}\n\t\t\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t\t\t) : optionSummary}\n\t\t\t\t\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t\t\t\t\t{((!!onToggleUsedForVariants && showVariantToggle) || !!resolvedActions) && (\n\t\t\t\t\t\t\t\t\t\t\t<div className={cn('product-options-matrix--item-actions flex min-w-0 flex-wrap items-center justify-start @2xl/product-options-matrix:col-start-auto @2xl/product-options-matrix:justify-end', showCollapseControls ? 'col-start-2' : 'col-start-1', compositionClasses.commands)}>\n\t\t\t\t\t\t\t\t\t\t\t\t{!!onToggleUsedForVariants && showVariantToggle && (\n\t\t\t\t\t\t\t\t\t\t\t\t\t<div className=\"inline-flex items-center gap-space-sm\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttag=\"span\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tid={`product-option-${option.id}-variant-toggle-label`}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsize=\"pxs\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"secondary\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tweight=\"medium\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{strings.useForVariantsLabel}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Switch\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tchecked={!!option.usedForVariants}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisabled={isSaving}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tonValueChange={(checked) => { if (!savingRef.current) onToggleUsedForVariants(option, checked); }}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\taria-labelledby={`product-option-${option.id}-variant-toggle-label`}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t\t{resolvedActions}\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t})}\n\t\t\t\t\t\t{!!showCreateRow && (\n\t\t\t\t\t\t\t<div className=\"product-options-matrix--create-row border-t border-border/60 p-surface-xs\">\n\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\ttone=\"secondary\"\n\t\t\t\t\t\t\t\t\tbuttonStyle=\"ghost\"\n\t\t\t\t\t\t\t\t\tonClick={() => { if (!savingRef.current) onCreateOption?.(); }}\n\t\t\t\t\t\t\t\t\tdisabled={isSaving}\n\t\t\t\t\t\t\t\t\ticon={PlusCircle}\n\t\t\t\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t\t\t\tfullWidth\n\t\t\t\t\t\t\t\t\tclassName=\"justify-start text-foreground\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{strings.addAnotherOptionLabel}\n\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t\t{!!(confirmDelete !== false && pendingSave) && (\n\t\t\t\t<ConfirmDialog\n\t\t\t\t\t{...removeValuesConfirm.overlayProps}\n\t\t\t\t\tdestructive\n\t\t\t\t\ttitle={strings.confirmRemoveValuesTitle}\n\t\t\t\t\tdescription={interpolateString(strings.confirmRemoveValuesDescription, {\n\t\t\t\t\t\tcount: pendingSave.removed,\n\t\t\t\t\t})}\n\t\t\t\t\tstrings={{ confirm: saveFailure?.optionId === pendingSave.option.id ? strings.retrySaveLabel : strings.confirmRemoveValuesLabel, loading: strings.savingLabel }}\n\t\t\t\t\talertMessage={saveFailure?.optionId === pendingSave.option.id ? saveFailure.message : undefined}\n\t\t\t\t\tcloseOnAsyncComplete={false}\n\t\t\t\t\tonAsyncConfirm={async () => {\n\t\t\t\t\t\tif (await commitEditing(pendingSave.option)) removeValuesConfirm.hide();\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t)}\n\t\t\t{!!(confirmDelete !== false && onDeleteOption) && (\n\t\t\t\t<ConfirmDialog\n\t\t\t\t\t{...deleteOptionConfirm.overlayProps}\n\t\t\t\t\tdestructive\n\t\t\t\t\ttitle={strings.confirmDeleteOptionTitle}\n\t\t\t\t\tdescription={strings.confirmDeleteOptionDescription}\n\t\t\t\t\tstrings={{ confirm: strings.deleteLabel }}\n\t\t\t\t\tonConfirm={() => {\n\t\t\t\t\t\tif (pendingDeleteOption) deleteOption(pendingDeleteOption);\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t)}\n\t\t</div>\n\t);\n\n\tif (surface === 'embedded') {\n\t\treturn (\n\t\t\t<section\n\t\t\t\taria-label={strings.title}\n\t\t\t\tclassName={cn('product-options-matrix--component @container/product-options-matrix min-w-0', className)}\n\t\t\t>\n\t\t\t\t{content}\n\t\t\t</section>\n\t\t);\n\t}\n\n\treturn (\n\t\t<ContentBlock\n\t\t\ttitle={strings.title}\n\t\t\tdescription={strings.description}\n\t\t\tactions={actions}\n\t\t\theaderAction={headerAction}\n\t\t\theaderEnd={headerEnd}\n\t\t\tfooterSlot={footerSlot}\n\t\t\tclassName={cn('product-options-matrix--component @container/product-options-matrix w-full', className)}\n\t\t>\n\t\t\t{content}\n\t\t</ContentBlock>\n\t);\n}\n\nProductOptionsMatrix.displayName = 'ProductOptionsMatrix';\n","import { Plus, SlidersHorizontal } from 'lucide-react';\n\nimport { Button } from '../../../base/buttons';\nimport { ContentBlock } from '../../../base/display';\nimport { ItemGroup } from '../../../base/item';\nimport { useStrings } from '../../../../lib/strings';\nimport { cn } from '../../../../lib/utils';\n\nimport { defaultProductOptionsSummaryStrings } from '../products.strings';\nimport type { ProductOptionsSummaryProps } from '../products.types';\nimport { ProductEmptyState } from '../partials/product-empty-state';\nimport { ProductSummaryRow } from '../partials/product-rows';\nimport { ProductOptionActionMenu } from './product-option-action-menu';\n\n/**\n * One main column region of the product editor.\n *\n * @deprecated An internal region of `ProductOverview`, which renders it from its `options` prop (still typed `ProductOptionsSummaryProps`). Pass the same props there and add custom content through the overview's slots. Kept exported for compatibility.\n */\nexport function ProductOptionsSummary({\n\toptions = [],\n\tonManageOptions,\n\tonCreateOption,\n\tonSelectOption,\n\tonEditOption,\n\tonDeleteOption,\n\trenderOptionActions,\n\tactions,\n\tfooterSlot,\n\trenderOption,\n\tempty,\n\tclassName,\n\tstrings: stringsProp,\n}: ProductOptionsSummaryProps) {\n\tconst strings = useStrings(defaultProductOptionsSummaryStrings, stringsProp);\n\tconst hasOptionActions = !!(\n\t\tonSelectOption ||\n\t\tonEditOption ||\n\t\tonDeleteOption ||\n\t\trenderOptionActions\n\t);\n\tconst cardActions = [\n\t\t...(actions ?? []),\n\t\t...(onCreateOption && onManageOptions ? [{\n\t\t\tid: 'manage-options',\n\t\t\tlabel: strings.manageLabel,\n\t\t\ticon: <SlidersHorizontal className=\"size-icon-md\" />,\n\t\t\tonClick: onManageOptions,\n\t\t}] : []),\n\t];\n\tconst headerAction = onCreateOption || onManageOptions ? (\n\t\t<Button\n\t\t\ttype=\"button\"\n\t\t\ttone=\"secondary\"\n\t\t\tbuttonStyle=\"ghost\"\n\t\t\tonClick={onCreateOption ?? onManageOptions}\n\t\t\ticon={onCreateOption ? Plus : undefined}\n\t\t>\n\t\t\t{onCreateOption ? strings.createLabel : strings.manageLabel}\n\t\t</Button>\n\t) : undefined;\n\n\treturn (\n\t\t<ContentBlock\n\t\t\ttitle={strings.title}\n\t\t\tdescription={strings.description}\n\t\t\tactions={cardActions.length > 0 ? cardActions : undefined}\n\t\t\theaderAction={headerAction}\n\t\t\tfooterSlot={footerSlot}\n\t\t\tclassName={cn('product-options-summary--component w-full', className)}\n\t\t>\n\t\t\t{options.length === 0 ? (\n\t\t\t\tempty ?? (\n\t\t\t\t\t<ProductEmptyState\n\t\t\t\t\t\ttitle={strings.emptyTitle}\n\t\t\t\t\t\tdescription={strings.emptyDescription}\n\t\t\t\t\t\taction={onCreateOption ? (\n\t\t\t\t\t\t\t<Button tone=\"primary\" type=\"button\" onClick={onCreateOption} icon={Plus}>\n\t\t\t\t\t\t\t\t{strings.createLabel}\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t) : undefined}\n\t\t\t\t\t/>\n\t\t\t\t)\n\t\t\t) : (\n\t\t\t\t<ItemGroup>\n\t\t\t\t\t{options.map((option, index) => (\n\t\t\t\t\t\t(() => {\n\t\t\t\t\t\t\tconst rowActions = hasOptionActions ? (\n\t\t\t\t\t\t\t\t<ProductOptionActionMenu\n\t\t\t\t\t\t\t\t\toption={option}\n\t\t\t\t\t\t\t\t\tindex={index}\n\t\t\t\t\t\t\t\t\tonSelectOption={onSelectOption}\n\t\t\t\t\t\t\t\t\tonEditOption={onEditOption}\n\t\t\t\t\t\t\t\t\tonDeleteOption={onDeleteOption}\n\t\t\t\t\t\t\t\t\trenderOptionActions={renderOptionActions}\n\t\t\t\t\t\t\t\t\tmenuLabel={strings.actionsLabel}\n\t\t\t\t\t\t\t\t\tstrings={{\n\t\t\t\t\t\t\t\t\t\tviewLabel: strings.viewLabel,\n\t\t\t\t\t\t\t\t\t\teditLabel: strings.editLabel,\n\t\t\t\t\t\t\t\t\t\tdeleteLabel: strings.deleteLabel,\n\t\t\t\t\t\t\t\t\t\tactionsLabel: strings.actionsLabel,\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t) : undefined;\n\n\t\t\t\t\t\t\treturn renderOption ? (\n\t\t\t\t\t\t\t\t<div key={option.id}>{renderOption(option, index)}</div>\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<ProductSummaryRow\n\t\t\t\t\t\t\t\t\tkey={option.id}\n\t\t\t\t\t\t\t\t\titem={option}\n\t\t\t\t\t\t\t\t\tactions={rowActions}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t})()\n\t\t\t\t\t))}\n\t\t\t\t</ItemGroup>\n\t\t\t)}\n\t\t</ContentBlock>\n\t);\n}\n\nProductOptionsSummary.displayName = 'ProductOptionsSummary';\n","import { Pencil, Plus, Trash2 } from 'lucide-react';\n\nimport { Button } from '../../../base/buttons';\nimport { ContentBlock } from '../../../base/display';\nimport { ItemGroup } from '../../../base/item';\nimport { useStrings } from '../../../../lib/strings';\nimport { cn } from '../../../../lib/utils';\n\nimport { defaultProductPoliciesCardStrings } from '../products.strings';\nimport type { ProductPoliciesCardProps } from '../products.types';\nimport { ProductEmptyState } from '../partials/product-empty-state';\nimport { ProductRowActions } from '../partials/product-actions';\nimport { ProductSummaryRow } from '../partials/product-rows';\n\n/**\n * One support rail region of the product editor.\n *\n * @deprecated An internal region of `ProductOverview`, which renders it from its `policies` prop (still typed `ProductPoliciesCardProps`). Pass the same props there and add custom content through the overview's slots. Kept exported for compatibility.\n */\nexport function ProductPoliciesCard({\n\tpolicies = [],\n\tonCreatePolicy,\n\tonSelectPolicy,\n\tonEditPolicy,\n\tonDeletePolicy,\n\trenderPolicyActions,\n\tactions,\n\tfooterSlot,\n\trenderPolicy,\n\tempty,\n\tclassName,\n\tstrings: stringsProp,\n}: ProductPoliciesCardProps) {\n\tconst strings = useStrings(defaultProductPoliciesCardStrings, stringsProp);\n\tconst headerAction = onCreatePolicy ? (\n\t\t<Button type=\"button\" tone=\"secondary\" buttonStyle=\"ghost\" onClick={onCreatePolicy} icon={Plus}>\n\t\t\t{strings.createLabel}\n\t\t</Button>\n\t) : undefined;\n\n\treturn (\n\t\t<ContentBlock\n\t\t\ttitle={strings.title}\n\t\t\tdescription={strings.description}\n\t\t\tactions={actions}\n\t\t\theaderAction={headerAction}\n\t\t\tfooterSlot={footerSlot}\n\t\t\tclassName={cn('product-policies-card--component w-full', className)}\n\t\t>\n\t\t\t{policies.length === 0 ? (\n\t\t\t\tempty ?? (\n\t\t\t\t\t<ProductEmptyState\n\t\t\t\t\t\ttitle={strings.emptyTitle}\n\t\t\t\t\t\tdescription={strings.emptyDescription}\n\t\t\t\t\t\taction={onCreatePolicy ? (\n\t\t\t\t\t\t\t<Button tone=\"primary\" type=\"button\" onClick={onCreatePolicy} icon={Plus}>\n\t\t\t\t\t\t\t\t{strings.createLabel}\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t) : undefined}\n\t\t\t\t\t/>\n\t\t\t\t)\n\t\t\t) : (\n\t\t\t\t<ItemGroup>\n\t\t\t\t\t{policies.map((policy, index) => (\n\t\t\t\t\t\t(() => {\n\t\t\t\t\t\t\tconst onSelect = onSelectPolicy ? () => onSelectPolicy(policy) : undefined;\n\t\t\t\t\t\t\tconst onEdit = onEditPolicy ? () => onEditPolicy(policy) : undefined;\n\t\t\t\t\t\t\tconst onDelete = onDeletePolicy ? () => onDeletePolicy(policy) : undefined;\n\t\t\t\t\t\t\tconst policyActions = [\n\t\t\t\t\t\t\t\t...(onEdit ? [{\n\t\t\t\t\t\t\t\t\tid: 'edit',\n\t\t\t\t\t\t\t\t\tlabel: strings.editLabel,\n\t\t\t\t\t\t\t\t\ticon: <Pencil className=\"size-icon-md\" />,\n\t\t\t\t\t\t\t\t\tonClick: () => onEdit(),\n\t\t\t\t\t\t\t\t\ttone: 'secondary' as const, buttonStyle: 'ghost' as const,\n\t\t\t\t\t\t\t\t}] : []),\n\t\t\t\t\t\t\t\t...(onDelete ? [{\n\t\t\t\t\t\t\t\t\tid: 'delete',\n\t\t\t\t\t\t\t\t\tlabel: strings.deleteLabel,\n\t\t\t\t\t\t\t\t\ticon: <Trash2 className=\"size-icon-md\" />,\n\t\t\t\t\t\t\t\t\tonClick: () => onDelete(),\n\t\t\t\t\t\t\t\t\ttone: 'destructive' as const,\n\t\t\t\t\t\t\t\t}] : []),\n\t\t\t\t\t\t\t];\n\t\t\t\t\t\t\tconst rowActions = renderPolicyActions\n\t\t\t\t\t\t\t\t? renderPolicyActions(policy, { index, onSelect, onEdit, onDelete })\n\t\t\t\t\t\t\t\t: <ProductRowActions item={policy} actions={policyActions} menuLabel={strings.actionsLabel} />;\n\n\t\t\t\t\t\t\treturn renderPolicy ? (\n\t\t\t\t\t\t\t\t<div key={policy.id}>{renderPolicy(policy, index)}</div>\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<ProductSummaryRow\n\t\t\t\t\t\t\t\t\tkey={policy.id}\n\t\t\t\t\t\t\t\t\titem={policy}\n\t\t\t\t\t\t\t\t\tactionLabel={strings.viewLabel}\n\t\t\t\t\t\t\t\t\tonSelect={onSelect}\n\t\t\t\t\t\t\t\t\tactions={rowActions}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t})()\n\t\t\t\t\t))}\n\t\t\t\t</ItemGroup>\n\t\t\t)}\n\t\t</ContentBlock>\n\t);\n}\n\nProductPoliciesCard.displayName = 'ProductPoliciesCard';\n","import {\n\tEye,\n\tPencil,\n\tPlus,\n\tTrash2 } from 'lucide-react';\n\nimport { Button } from '../../../base/buttons';\nimport { ContentBlock, Separator } from '../../../base/display';\nimport {\n\tItem,\n\tItemActions,\n\tItemContent,\n\tItemDescription,\n\tItemGroup,\n\tItemTitle,\n} from '../../../base/item';\nimport { Stack } from '../../../base/structure';\nimport { InlineStat } from '../../../blocks/data-display';\nimport { Value } from '../../../primitives';\nimport { Text } from '../../../typography';\nimport { useStrings } from '../../../../lib/strings';\nimport { cn } from '../../../../lib/utils';\n\nimport { defaultProductQuotePreviewCardStrings } from '../products.strings';\nimport type { ProductQuotePreviewCardProps } from '../products.types';\nimport { ProductEmptyState } from '../partials/product-empty-state';\nimport { ProductRowActions } from '../partials/product-actions';\nimport { PRODUCT_EMPTY_VALUE } from '../partials/product-values';\n\n/**\n * One support rail region of the product editor.\n *\n * @deprecated An internal region of `ProductOverview`, which renders it from its `quote` prop (still typed `ProductQuotePreviewCardProps`). Pass the same props there and add custom content through the overview's slots. Kept exported for compatibility.\n */\nexport function ProductQuotePreviewCard({\n\tlines = [],\n\tsubtotal,\n\ttax,\n\tdiscount,\n\ttotal,\n\tonOpenQuote,\n\tonCreateLine,\n\tonSelectLine,\n\tonEditLine,\n\tonDeleteLine,\n\trenderLineActions,\n\tactions,\n\tfooterSlot,\n\tempty,\n\tclassName,\n\tstrings: stringsProp,\n}: ProductQuotePreviewCardProps) {\n\tconst strings = useStrings(defaultProductQuotePreviewCardStrings, stringsProp);\n\tconst hasBreakdown = subtotal !== undefined || tax !== undefined || discount !== undefined;\n\tconst headerAction = onCreateLine || onOpenQuote ? (\n\t\t<div className=\"flex items-center gap-space-md\">\n\t\t\t{!!onCreateLine && (\n\t\t\t\t<Button type=\"button\" tone=\"secondary\" buttonStyle=\"ghost\" onClick={onCreateLine} icon={Plus}>\n\t\t\t\t\t{strings.createLineLabel}\n\t\t\t\t</Button>\n\t\t\t)}\n\t\t\t{!!onOpenQuote && (\n\t\t\t\t<Button type=\"button\" tone=\"secondary\" buttonStyle=\"ghost\" onClick={onOpenQuote}>\n\t\t\t\t\t{strings.actionLabel}\n\t\t\t\t</Button>\n\t\t\t)}\n\t\t</div>\n\t) : undefined;\n\n\treturn (\n\t\t<ContentBlock\n\t\t\ttitle={strings.title}\n\t\t\tdescription={strings.description}\n\t\t\tactions={actions}\n\t\t\theaderAction={headerAction}\n\t\t\tfooterSlot={footerSlot}\n\t\t\tclassName={cn('product-quote-preview-card--component w-full', className)}\n\t\t>\n\t\t\t{lines.length === 0 ? (\n\t\t\t\tempty ?? (\n\t\t\t\t\t<ProductEmptyState\n\t\t\t\t\t\ttitle={strings.emptyTitle}\n\t\t\t\t\t\tdescription={strings.emptyDescription}\n\t\t\t\t\t\taction={onCreateLine ? (\n\t\t\t\t\t\t\t<Button tone=\"primary\" type=\"button\" onClick={onCreateLine} icon={Plus}>\n\t\t\t\t\t\t\t\t{strings.createLineLabel}\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t) : undefined}\n\t\t\t\t\t/>\n\t\t\t\t)\n\t\t\t) : (\n\t\t\t\t<Stack gap=\"2xl\" className=\"product-quote-preview-card--body\">\n\t\t\t\t\t<ItemGroup>\n\t\t\t\t\t\t{lines.map((line, index) => {\n\t\t\t\t\t\t\tconst onSelect = onSelectLine ? () => onSelectLine(line) : undefined;\n\t\t\t\t\t\t\tconst onEdit = onEditLine ? () => onEditLine(line) : undefined;\n\t\t\t\t\t\t\tconst onDelete = onDeleteLine ? () => onDeleteLine(line) : undefined;\n\t\t\t\t\t\t\tconst lineActions = [\n\t\t\t\t\t\t\t\t...(onSelect ? [{\n\t\t\t\t\t\t\t\t\tid: 'open',\n\t\t\t\t\t\t\t\t\tlabel: strings.viewLineLabel,\n\t\t\t\t\t\t\t\t\ticon: <Eye className=\"size-icon-md\" />,\n\t\t\t\t\t\t\t\t\tonClick: () => onSelect(),\n\t\t\t\t\t\t\t\t\ttone: 'secondary' as const, buttonStyle: 'ghost' as const,\n\t\t\t\t\t\t\t\t}] : []),\n\t\t\t\t\t\t\t\t...(onEdit ? [{\n\t\t\t\t\t\t\t\t\tid: 'edit',\n\t\t\t\t\t\t\t\t\tlabel: strings.editLineLabel,\n\t\t\t\t\t\t\t\t\ticon: <Pencil className=\"size-icon-md\" />,\n\t\t\t\t\t\t\t\t\tonClick: () => onEdit(),\n\t\t\t\t\t\t\t\t\ttone: 'secondary' as const, buttonStyle: 'ghost' as const,\n\t\t\t\t\t\t\t\t}] : []),\n\t\t\t\t\t\t\t\t...(onDelete ? [{\n\t\t\t\t\t\t\t\t\tid: 'delete',\n\t\t\t\t\t\t\t\t\tlabel: strings.deleteLineLabel,\n\t\t\t\t\t\t\t\t\ticon: <Trash2 className=\"size-icon-md\" />,\n\t\t\t\t\t\t\t\t\tonClick: () => onDelete(),\n\t\t\t\t\t\t\t\t\ttone: 'destructive' as const,\n\t\t\t\t\t\t\t\t}] : []),\n\t\t\t\t\t\t\t];\n\t\t\t\t\t\t\tconst rowActions = renderLineActions\n\t\t\t\t\t\t\t\t? renderLineActions(line, { index, onSelect, onEdit, onDelete })\n\t\t\t\t\t\t\t\t: <ProductRowActions item={line} actions={lineActions} menuLabel={strings.lineActionsLabel} />;\n\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t<Item key={line.id} className=\"product-quote-preview-card--line\">\n\t\t\t\t\t\t\t\t\t<ItemContent>\n\t\t\t\t\t\t\t\t\t\t<ItemTitle>{line.label}</ItemTitle>\n\t\t\t\t\t\t\t\t\t\t{!!line.description && <ItemDescription>{line.description}</ItemDescription>}\n\t\t\t\t\t\t\t\t\t\t{!!line.quantity && <ItemDescription>{line.quantity}</ItemDescription>}\n\t\t\t\t\t\t\t\t\t</ItemContent>\n\t\t\t\t\t\t\t\t\t<ItemActions>\n\t\t\t\t\t\t\t\t\t\t<Value type=\"inherit\" className=\"tabular-nums\">{line.amount}</Value>\n\t\t\t\t\t\t\t\t\t\t{rowActions}\n\t\t\t\t\t\t\t\t\t</ItemActions>\n\t\t\t\t\t\t\t\t</Item>\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t})}\n\t\t\t\t\t</ItemGroup>\n\t\t\t\t\t{/* Amounts stay in the sans UI font with tabular figures; the one rule sits above the grand total. */}\n\t\t\t\t\t<Stack gap=\"lg\" className=\"product-quote-preview-card--totals\">\n\t\t\t\t\t\t{!!hasBreakdown && (\n\t\t\t\t\t\t\t<Stack gap=\"sm\">\n\t\t\t\t\t\t\t\t{subtotal !== undefined && <InlineStat label={strings.subtotalLabel} value={subtotal} valueClassName=\"tabular-nums\" />}\n\t\t\t\t\t\t\t\t{tax !== undefined && <InlineStat label={strings.taxLabel} value={tax} valueClassName=\"tabular-nums\" />}\n\t\t\t\t\t\t\t\t{discount !== undefined && <InlineStat label={strings.discountLabel} value={discount} valueClassName=\"tabular-nums text-success\" />}\n\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{!!hasBreakdown && <Separator />}\n\t\t\t\t\t\t<InlineStat label={<Text type=\"inherit\" tag=\"span\" weight=\"semibold\" lineHeight=\"tight\">{strings.totalLabel}</Text>} value={total ?? PRODUCT_EMPTY_VALUE} valueClassName=\"font-semibold tabular-nums\" />\n\t\t\t\t\t</Stack>\n\t\t\t\t</Stack>\n\t\t\t)}\n\t\t</ContentBlock>\n\t);\n}\n\nProductQuotePreviewCard.displayName = 'ProductQuotePreviewCard';\n","import {\n\tPencil,\n\tPlus,\n\tTrash2 } from 'lucide-react';\n\nimport { Button } from '../../../base/buttons';\nimport { ContentBlock } from '../../../base/display';\nimport { Progress } from '../../../base/feedback';\nimport { ItemGroup } from '../../../base/item';\nimport { Percent } from '../../../primitives';\nimport { Text } from '../../../typography';\nimport { useStrings } from '../../../../lib/strings';\nimport { cn } from '../../../../lib/utils';\n\nimport { defaultProductReadinessCardStrings } from '../products.strings';\nimport type { ProductReadinessCardProps } from '../products.types';\nimport { ProductEmptyState } from '../partials/product-empty-state';\nimport { ProductRowActions } from '../partials/product-actions';\nimport { ProductReadinessRow } from '../partials/product-rows';\nimport { clampProductPercent } from '../partials/product-tone';\nimport { Stack } from '../../../base/structure';\n\n/**\n * One support rail region of the product editor.\n *\n * @deprecated An internal region of `ProductOverview`, which renders it from its `readiness` prop (still typed `ProductReadinessCardProps`). Pass the same props there and add custom content through the overview's slots. Kept exported for compatibility.\n */\nexport function ProductReadinessCard({\n\titems = [],\n\tscore,\n\tscoreLabel,\n\tsummary,\n\tonCreateReadinessItem,\n\tonSelectReadinessItem,\n\tonEditReadinessItem,\n\tonDeleteReadinessItem,\n\trenderReadinessItemActions,\n\tactions,\n\tfooterSlot,\n\trenderItem,\n\tempty,\n\tclassName,\n\tstrings: stringsProp,\n}: ProductReadinessCardProps) {\n\tconst strings = useStrings(defaultProductReadinessCardStrings, stringsProp);\n\tconst completion = score === undefined ? undefined : clampProductPercent(score);\n\tconst headerAction = onCreateReadinessItem ? (\n\t\t<Button type=\"button\" tone=\"secondary\" buttonStyle=\"ghost\" onClick={onCreateReadinessItem} icon={Plus}>\n\t\t\t{strings.createLabel}\n\t\t</Button>\n\t) : undefined;\n\n\treturn (\n\t\t<ContentBlock\n\t\t\ttitle={strings.title}\n\t\t\tdescription={strings.description}\n\t\t\tactions={actions}\n\t\t\theaderAction={headerAction}\n\t\t\tfooterSlot={footerSlot}\n\t\t\tcontentGap=\"2xl\"\n\t\t\tclassName={cn('product-readiness-card--component w-full', className)}\n\t\t>\n\t\t\t{(completion !== undefined || !!summary) && (\n\t\t\t\t<Stack gap=\"lg\" className=\"product-readiness-card--summary\">\n\t\t\t\t\t{completion !== undefined && (\n\t\t\t\t\t\t<Stack gap=\"sm\" className=\"product-readiness-card--score\">\n\t\t\t\t\t\t\t<Stack direction=\"horizontal\" justify=\"between\" gap=\"lg\">\n\t\t\t\t\t\t\t\t<Text size=\"xs\" type=\"secondary\">{scoreLabel ?? strings.scoreLabel}</Text>\n\t\t\t\t\t\t\t\t<Percent type=\"inherit\" value={completion} scaled size=\"xs\" weight=\"semibold\" />\n\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t\t<Progress\n\t\t\t\t\t\t\t\tvalue={completion}\n\t\t\t\t\t\t\t\taria-label={typeof scoreLabel === 'string' ? scoreLabel : strings.progressLabel}\n\t\t\t\t\t\t\t\taria-valuetext={`${completion}%`}\n\t\t\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</Stack>\n\t\t\t\t\t)}\n\t\t\t\t\t{!!summary && <Text type=\"secondary\">{summary}</Text>}\n\t\t\t\t</Stack>\n\t\t\t)}\n\t\t\t{items.length === 0 ? (\n\t\t\t\tempty ?? (\n\t\t\t\t\t<ProductEmptyState\n\t\t\t\t\t\ttitle={strings.emptyTitle}\n\t\t\t\t\t\tdescription={strings.emptyDescription}\n\t\t\t\t\t\taction={onCreateReadinessItem ? (\n\t\t\t\t\t\t\t<Button tone=\"primary\" type=\"button\" onClick={onCreateReadinessItem} icon={Plus}>\n\t\t\t\t\t\t\t\t{strings.createLabel}\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t) : undefined}\n\t\t\t\t\t/>\n\t\t\t\t)\n\t\t\t) : (\n\t\t\t\t<ItemGroup>\n\t\t\t\t\t{items.map((item, index) => {\n\t\t\t\t\t\tconst onSelect = onSelectReadinessItem ? () => onSelectReadinessItem(item) : undefined;\n\t\t\t\t\t\tconst onEdit = onEditReadinessItem ? () => onEditReadinessItem(item) : undefined;\n\t\t\t\t\t\tconst onDelete = onDeleteReadinessItem ? () => onDeleteReadinessItem(item) : undefined;\n\t\t\t\t\t\tconst readinessActions = [\n\t\t\t\t\t\t\t...(onEdit ? [{\n\t\t\t\t\t\t\t\tid: 'edit',\n\t\t\t\t\t\t\t\tlabel: strings.editLabel,\n\t\t\t\t\t\t\t\ticon: <Pencil className=\"size-icon-md\" />,\n\t\t\t\t\t\t\t\tonClick: () => onEdit(),\n\t\t\t\t\t\t\t\ttone: 'secondary' as const, buttonStyle: 'ghost' as const,\n\t\t\t\t\t\t\t}] : []),\n\t\t\t\t\t\t\t...(onDelete ? [{\n\t\t\t\t\t\t\t\tid: 'delete',\n\t\t\t\t\t\t\t\tlabel: strings.deleteLabel,\n\t\t\t\t\t\t\t\ticon: <Trash2 className=\"size-icon-md\" />,\n\t\t\t\t\t\t\t\tonClick: () => onDelete(),\n\t\t\t\t\t\t\t\ttone: 'destructive' as const,\n\t\t\t\t\t\t\t}] : []),\n\t\t\t\t\t\t];\n\t\t\t\t\t\tconst rowActions = renderReadinessItemActions\n\t\t\t\t\t\t\t? renderReadinessItemActions(item, { index, onSelect, onEdit, onDelete })\n\t\t\t\t\t\t\t: <ProductRowActions item={item} actions={readinessActions} menuLabel={strings.actionsLabel} />;\n\n\t\t\t\t\t\treturn renderItem ? (\n\t\t\t\t\t\t\t<div key={item.id}>{renderItem(item, index)}</div>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<ProductReadinessRow\n\t\t\t\t\t\t\t\tkey={item.id}\n\t\t\t\t\t\t\t\titem={item}\n\t\t\t\t\t\t\t\tactionFallback={strings.actionLabel}\n\t\t\t\t\t\t\t\tonSelect={onSelect}\n\t\t\t\t\t\t\t\tactions={rowActions}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t);\n\t\t\t\t\t})}\n\t\t\t\t</ItemGroup>\n\t\t\t)}\n\t\t</ContentBlock>\n\t);\n}\n\nProductReadinessCard.displayName = 'ProductReadinessCard';\n","import { Eye, Pencil, Plus, Trash2 } from 'lucide-react';\n\nimport { Button } from '../../../base/buttons';\nimport { ContentBlock } from '../../../base/display';\nimport { ItemGroup } from '../../../base/item';\nimport { useStrings } from '../../../../lib/strings';\nimport { cn } from '../../../../lib/utils';\n\nimport { defaultProductStructureCardStrings } from '../products.strings';\nimport type { ProductStructureCardProps } from '../products.types';\nimport { ProductEmptyState } from '../partials/product-empty-state';\nimport { ProductRowActions } from '../partials/product-actions';\nimport { ProductStructureMetricRow } from '../partials/product-rows';\n\n/**\n * One support rail region of the product editor.\n *\n * @deprecated An internal region of `ProductOverview`, which renders it from its `structure` prop (still typed `ProductStructureCardProps`). Pass the same props there and add custom content through the overview's slots. Kept exported for compatibility.\n */\nexport function ProductStructureCard({\n\tmetrics = [],\n\tonCreateMetric,\n\tonSelectMetric,\n\tonEditMetric,\n\tonDeleteMetric,\n\trenderMetricActions,\n\tactions,\n\tfooterSlot,\n\tempty,\n\tclassName,\n\tstrings: stringsProp,\n}: ProductStructureCardProps) {\n\tconst strings = useStrings(defaultProductStructureCardStrings, stringsProp);\n\tconst headerAction = onCreateMetric ? (\n\t\t<Button type=\"button\" tone=\"secondary\" buttonStyle=\"ghost\" onClick={onCreateMetric} icon={Plus}>\n\t\t\t{strings.createLabel}\n\t\t</Button>\n\t) : undefined;\n\n\treturn (\n\t\t<ContentBlock\n\t\t\ttitle={strings.title}\n\t\t\tdescription={strings.description}\n\t\t\tactions={actions}\n\t\t\theaderAction={headerAction}\n\t\t\tfooterSlot={footerSlot}\n\t\t\tclassName={cn('product-structure-card--component w-full', className)}\n\t\t>\n\t\t\t{metrics.length === 0 ? (\n\t\t\t\tempty ?? (\n\t\t\t\t\t<ProductEmptyState\n\t\t\t\t\t\ttitle={strings.emptyTitle}\n\t\t\t\t\t\tdescription={strings.emptyDescription}\n\t\t\t\t\t\taction={onCreateMetric ? (\n\t\t\t\t\t\t\t<Button tone=\"primary\" type=\"button\" onClick={onCreateMetric} icon={Plus}>\n\t\t\t\t\t\t\t\t{strings.createLabel}\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t) : undefined}\n\t\t\t\t\t/>\n\t\t\t\t)\n\t\t\t) : (\n\t\t\t\t<ItemGroup>\n\t\t\t\t\t{metrics.map((metric, index) => {\n\t\t\t\t\t\tconst onSelect = onSelectMetric ? () => onSelectMetric(metric) : undefined;\n\t\t\t\t\t\tconst onEdit = onEditMetric ? () => onEditMetric(metric) : undefined;\n\t\t\t\t\t\tconst onDelete = onDeleteMetric ? () => onDeleteMetric(metric) : undefined;\n\t\t\t\t\t\tconst metricActions = [\n\t\t\t\t\t\t\t...(onSelect ? [{\n\t\t\t\t\t\t\t\tid: 'open',\n\t\t\t\t\t\t\t\tlabel: strings.viewLabel,\n\t\t\t\t\t\t\t\ticon: <Eye className=\"size-icon-md\" />,\n\t\t\t\t\t\t\t\tonClick: () => onSelect(),\n\t\t\t\t\t\t\t\ttone: 'secondary' as const, buttonStyle: 'ghost' as const,\n\t\t\t\t\t\t\t}] : []),\n\t\t\t\t\t\t\t...(onEdit ? [{\n\t\t\t\t\t\t\t\tid: 'edit',\n\t\t\t\t\t\t\t\tlabel: strings.editLabel,\n\t\t\t\t\t\t\t\ticon: <Pencil className=\"size-icon-md\" />,\n\t\t\t\t\t\t\t\tonClick: () => onEdit(),\n\t\t\t\t\t\t\t\ttone: 'secondary' as const, buttonStyle: 'ghost' as const,\n\t\t\t\t\t\t\t}] : []),\n\t\t\t\t\t\t\t...(onDelete ? [{\n\t\t\t\t\t\t\t\tid: 'delete',\n\t\t\t\t\t\t\t\tlabel: strings.deleteLabel,\n\t\t\t\t\t\t\t\ticon: <Trash2 className=\"size-icon-md\" />,\n\t\t\t\t\t\t\t\tonClick: () => onDelete(),\n\t\t\t\t\t\t\t\ttone: 'destructive' as const,\n\t\t\t\t\t\t\t}] : []),\n\t\t\t\t\t\t];\n\t\t\t\t\t\tconst rowActions = renderMetricActions\n\t\t\t\t\t\t\t? renderMetricActions(metric, { index, onSelect, onEdit, onDelete })\n\t\t\t\t\t\t\t: <ProductRowActions item={metric} actions={metricActions} menuLabel={strings.actionsLabel} />;\n\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<ProductStructureMetricRow\n\t\t\t\t\t\t\t\tkey={metric.id}\n\t\t\t\t\t\t\t\tmetric={metric}\n\t\t\t\t\t\t\t\tactions={rowActions}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t);\n\t\t\t\t\t})}\n\t\t\t\t</ItemGroup>\n\t\t\t)}\n\t\t</ContentBlock>\n\t);\n}\n\nProductStructureCard.displayName = 'ProductStructureCard';\n","import { Copy, Eye, Pencil, Plus, Trash2 } from 'lucide-react';\nimport { useMemo } from 'react';\nimport type { ReactNode } from 'react';\nimport type { ColumnDef } from '@tanstack/react-table';\n\nimport { Badge } from '../../../base/badge';\nimport { Button } from '../../../base/buttons';\nimport { ContentBlock } from '../../../base/display';\nimport { Stack } from '../../../base/structure';\nimport { DataTable, type TableAction } from '../../table';\nimport { SecondaryValue, Value } from '../../../primitives';\nimport { Text } from '../../../typography';\nimport { useStrings } from '../../../../lib/strings';\nimport { cn } from '../../../../lib/utils';\n\nimport { defaultProductVariantsTableStrings } from '../products.strings';\nimport type { ProductVariantsTableProps } from '../products.types';\nimport { ProductEmptyState } from '../partials/product-empty-state';\nimport { PRODUCT_EMPTY_VALUE } from '../partials/product-values';\nimport type { ProductVariantSummary } from '../products.types';\n\nfunction ProductVariantNameCell({\n\tvariant,\n\tchannelsLabel,\n}: {\n\tvariant: ProductVariantSummary;\n\tchannelsLabel: string;\n}) {\n\treturn (\n\t\t<Stack gap=\"xs\" className=\"product-variants-table--variant-cell min-w-0\">\n\t\t\t<Stack gap=\"dense\">\n\t\t\t\t<Stack direction=\"horizontal\" gap=\"sm\">\n\t\t\t\t\t<Text type=\"inherit\" weight=\"semibold\" className=\"truncate\">{variant.name}</Text>\n\t\t\t\t\t{!!variant.status && (\n\t\t\t\t\t\t<Badge tone={variant.statusTone ?? 'secondary'}>{variant.status}</Badge>\n\t\t\t\t\t)}\n\t\t\t\t</Stack>\n\t\t\t\t{!!variant.description && (\n\t\t\t\t\t<Text size=\"xs\" type=\"secondary\">\n\t\t\t\t\t\t{variant.description}\n\t\t\t\t\t</Text>\n\t\t\t\t)}\n\t\t\t</Stack>\n\t\t\t{!!(variant.options?.length || variant.channels) && (\n\t\t\t\t<Stack direction=\"horizontal\" gap=\"xs\">\n\t\t\t\t\t{variant.options?.map((option, optionIndex) => (\n\t\t\t\t\t\t<Badge key={optionIndex} tone=\"secondary\">\n\t\t\t\t\t\t\t{option}\n\t\t\t\t\t\t</Badge>\n\t\t\t\t\t))}\n\t\t\t\t\t{!!variant.channels && (\n\t\t\t\t\t\t<Text tag=\"span\" size=\"xs\" type=\"secondary\">\n\t\t\t\t\t\t\t{channelsLabel}: {variant.channels}\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t)}\n\t\t\t\t</Stack>\n\t\t\t)}\n\t\t</Stack>\n\t);\n}\n\nfunction ProductVariantValueCell({\n\tvalue,\n\temphasis = false,\n}: {\n\tvalue?: ReactNode;\n\temphasis?: boolean;\n}) {\n\tconst Primitive = value ? Value : SecondaryValue;\n\n\treturn (\n\t\t<Primitive\n\t\t\ttype={value ? 'inherit' : 'secondary'}\n\t\t\tweight={emphasis ? 'semibold' : undefined}\n\t\t\tclassName=\"min-w-0 tabular-nums\"\n\t\t>\n\t\t\t{value ?? PRODUCT_EMPTY_VALUE}\n\t\t</Primitive>\n\t);\n}\n\nexport function ProductVariantsTable({\n\tvariants = [],\n\tonCreateVariant,\n\tonSelectVariant,\n\tonEditVariant,\n\tonDuplicateVariant,\n\tonDeleteVariant,\n\trenderVariantActions,\n\tactions,\n\tfooterSlot,\n\tempty,\n\tclassName,\n\tstrings: stringsProp,\n}: ProductVariantsTableProps) {\n\tconst strings = useStrings(defaultProductVariantsTableStrings, stringsProp);\n\tconst rowActions = useMemo<TableAction<ProductVariantSummary>[] | undefined>(() => {\n\t\tif (renderVariantActions) return undefined;\n\n\t\tconst actionsList: TableAction<ProductVariantSummary>[] = [\n\t\t\t...(onSelectVariant ? [{\n\t\t\t\tid: 'open',\n\t\t\t\tlabel: strings.viewLabel,\n\t\t\t\ticon: <Eye className=\"size-icon-sm\" aria-hidden=\"true\" />,\n\t\t\t\tonClick: onSelectVariant,\n\t\t\t\tbuttonStyle: 'ghost' as const,\n\t\t\t}] : []),\n\t\t\t...(onEditVariant ? [{\n\t\t\t\tid: 'edit',\n\t\t\t\tlabel: strings.editLabel,\n\t\t\t\ticon: <Pencil className=\"size-icon-sm\" aria-hidden=\"true\" />,\n\t\t\t\tonClick: onEditVariant,\n\t\t\t\tbuttonStyle: 'ghost' as const,\n\t\t\t}] : []),\n\t\t\t...(onDuplicateVariant ? [{\n\t\t\t\tid: 'duplicate',\n\t\t\t\tlabel: strings.duplicateLabel,\n\t\t\t\ticon: <Copy className=\"size-icon-sm\" aria-hidden=\"true\" />,\n\t\t\t\tonClick: onDuplicateVariant,\n\t\t\t\tbuttonStyle: 'ghost' as const,\n\t\t\t}] : []),\n\t\t\t...(onDeleteVariant ? [{\n\t\t\t\tid: 'delete',\n\t\t\t\tlabel: strings.deleteLabel,\n\t\t\t\ticon: <Trash2 className=\"size-icon-sm\" aria-hidden=\"true\" />,\n\t\t\t\tonClick: onDeleteVariant,\n\t\t\t\ttone: 'destructive' as const,\n\t\t\t}] : []),\n\t\t];\n\n\t\treturn actionsList.length > 0 ? actionsList : undefined;\n\t}, [\n\t\tonDeleteVariant,\n\t\tonDuplicateVariant,\n\t\tonEditVariant,\n\t\tonSelectVariant,\n\t\trenderVariantActions,\n\t\tstrings.deleteLabel,\n\t\tstrings.duplicateLabel,\n\t\tstrings.editLabel,\n\t\tstrings.viewLabel,\n\t]);\n\tconst columns = useMemo<ColumnDef<ProductVariantSummary>[]>(() => {\n\t\tconst baseColumns: ColumnDef<ProductVariantSummary>[] = [\n\t\t\t{\n\t\t\t\taccessorKey: 'name',\n\t\t\t\theader: strings.headers.variant,\n\t\t\t\tcell: ({ row }) => (\n\t\t\t\t\t<ProductVariantNameCell\n\t\t\t\t\t\tvariant={row.original}\n\t\t\t\t\t\tchannelsLabel={strings.headers.channels}\n\t\t\t\t\t/>\n\t\t\t\t),\n\t\t\t},\n\t\t\t{\n\t\t\t\taccessorKey: 'price',\n\t\t\t\theader: strings.headers.price,\n\t\t\t\tcell: ({ row }) => <ProductVariantValueCell value={row.original.price} emphasis />,\n\t\t\t\tmeta: { align: 'start' },\n\t\t\t},\n\t\t\t{\n\t\t\t\taccessorKey: 'inventory',\n\t\t\t\theader: strings.headers.inventory,\n\t\t\t\tcell: ({ row }) => <ProductVariantValueCell value={row.original.inventory} />,\n\t\t\t},\n\t\t\t{\n\t\t\t\taccessorKey: 'sku',\n\t\t\t\theader: strings.headers.sku,\n\t\t\t\tcell: ({ row }) => <ProductVariantValueCell value={row.original.sku} />,\n\t\t\t},\n\t\t\t{\n\t\t\t\taccessorKey: 'updatedAt',\n\t\t\t\theader: strings.headers.updated,\n\t\t\t\tcell: ({ row }) => <ProductVariantValueCell value={row.original.updatedAt} />,\n\t\t\t},\n\t\t];\n\n\t\tif (renderVariantActions) {\n\t\t\tbaseColumns.push({\n\t\t\t\tid: 'actions',\n\t\t\t\theader: strings.headers.actions,\n\t\t\t\tcell: ({ row }) => renderVariantActions(row.original, {\n\t\t\t\t\tindex: row.index,\n\t\t\t\t\tonSelect: onSelectVariant ? () => onSelectVariant(row.original) : undefined,\n\t\t\t\t\tonEdit: onEditVariant ? () => onEditVariant(row.original) : undefined,\n\t\t\t\t\tonDuplicate: onDuplicateVariant ? () => onDuplicateVariant(row.original) : undefined,\n\t\t\t\t\tonDelete: onDeleteVariant ? () => onDeleteVariant(row.original) : undefined,\n\t\t\t\t}),\n\t\t\t\tmeta: { align: 'end' },\n\t\t\t});\n\t\t}\n\n\t\treturn baseColumns;\n\t}, [\n\t\tonDeleteVariant,\n\t\tonDuplicateVariant,\n\t\tonEditVariant,\n\t\tonSelectVariant,\n\t\trenderVariantActions,\n\t\tstrings.headers.actions,\n\t\tstrings.headers.channels,\n\t\tstrings.headers.inventory,\n\t\tstrings.headers.price,\n\t\tstrings.headers.sku,\n\t\tstrings.headers.updated,\n\t\tstrings.headers.variant,\n\t]);\n\tconst headerAction = onCreateVariant ? (\n\t\t<Button type=\"button\" tone=\"secondary\" buttonStyle=\"ghost\" onClick={onCreateVariant} icon={Plus}>\n\t\t\t{strings.createLabel}\n\t\t</Button>\n\t) : undefined;\n\n\treturn (\n\t\t<ContentBlock\n\t\t\ttitle={strings.title}\n\t\t\tdescription={strings.description}\n\t\t\tactions={actions}\n\t\t\theaderAction={headerAction}\n\t\t\tfooterSlot={footerSlot}\n\t\t\tclassName={cn('product-variants-table--component w-full', className)}\n\t\t>\n\t\t\t{variants.length === 0 ? (\n\t\t\t\tempty ?? (\n\t\t\t\t\t<ProductEmptyState\n\t\t\t\t\t\ttitle={strings.emptyTitle}\n\t\t\t\t\t\tdescription={strings.emptyDescription}\n\t\t\t\t\t\taction={onCreateVariant ? (\n\t\t\t\t\t\t\t<Button tone=\"primary\" type=\"button\" onClick={onCreateVariant} icon={Plus}>\n\t\t\t\t\t\t\t\t{strings.createLabel}\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t) : undefined}\n\t\t\t\t\t/>\n\t\t\t\t)\n\t\t\t) : (\n\t\t\t\t<DataTable<ProductVariantSummary>\n\t\t\t\t\tdata={variants}\n\t\t\t\t\tcolumns={columns}\n\t\t\t\t\tgetRowId={(variant) => variant.id}\n\t\t\t\t\tenableColumnVisibility\n\t\t\t\t\tsurface=\"glass\"\n\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\trowActions={rowActions}\n\t\t\t\t\trowActionsMenuLabel={strings.headers.actions}\n\t\t\t\t\trowActionsDisplayMode=\"menu\"\n\t\t\t\t\tstorageKey=\"product-variants\"\n\t\t\t\t\tclassName=\"product-variants-table--table\"\n\t\t\t\t\ttableContainerClassName=\"max-h-none\"\n\t\t\t\t\tstrings={{\n\t\t\t\t\t\temptyState: {\n\t\t\t\t\t\t\tmessage: strings.emptyTitle,\n\t\t\t\t\t\t},\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t)}\n\t\t</ContentBlock>\n\t);\n}\n\nProductVariantsTable.displayName = 'ProductVariantsTable';\n","import { useStrings } from '../../../../lib/strings';\nimport { Stack } from '../../../base/structure';\nimport { cn } from '../../../../lib/utils';\n\nimport { defaultProductOverviewStrings } from '../products.strings';\nimport type { ProductOverviewProps } from '../products.types';\nimport { ProductContractOverview } from './product-contract-overview';\nimport { ProductDetailsCard } from './product-details-card';\nimport { ProductOperationsCard } from './product-operations-card';\nimport { ProductOptionsSummary } from './product-options-summary';\nimport { ProductPoliciesCard } from './product-policies-card';\nimport { ProductQuotePreviewCard } from './product-quote-preview-card';\nimport { ProductReadinessCard } from './product-readiness-card';\nimport { ProductStructureCard } from './product-structure-card';\nimport { ProductVariantsTable } from './product-variants-table';\n\nexport function ProductOverview({\n\tdetails,\n\tcontract,\n\toptions,\n\tvariants,\n\treadiness,\n\tstructure,\n\toperations,\n\tquote,\n\tpolicies,\n\tslots,\n\tclassName,\n\tmainClassName,\n\trailClassName,\n\tstrings: stringsProp,\n}: ProductOverviewProps) {\n\tconst strings = useStrings(defaultProductOverviewStrings, stringsProp);\n\tconst hasRail = !!(readiness || structure || operations || quote || policies || slots?.railTop || slots?.railBottom);\n\n\treturn (\n\t\t// The cards are unframed sections, so the gap between them is the only thing that\n\t\t// separates them: page rhythm (3xl), clearly wider than the 2xl between sub-sections\n\t\t// inside a card and the row spacing inside a list.\n\t\t<Stack gap=\"3xl\" className={cn('product-overview--component @container/product-overview', className)}>\n\t\t\t{slots?.before}\n\t\t\t<div className={cn('grid min-w-0 grid-cols-1 gap-space-3xl', hasRail && '@5xl/product-overview:grid-cols-[minmax(0,1fr)_22rem]')}>\n\t\t\t\t<Stack render={<section />} gap=\"3xl\" aria-label={strings.mainLabel} className={cn('product-overview--main', mainClassName)}>\n\t\t\t\t\t{slots?.mainTop}\n\t\t\t\t\t{!!details && <ProductDetailsCard {...details} />}\n\t\t\t\t\t{!!contract && <ProductContractOverview {...contract} />}\n\t\t\t\t\t{!!options && <ProductOptionsSummary {...options} />}\n\t\t\t\t\t{!!variants && <ProductVariantsTable {...variants} />}\n\t\t\t\t\t{slots?.mainBottom}\n\t\t\t\t</Stack>\n\t\t\t\t{!!hasRail && (\n\t\t\t\t\t<Stack render={<aside />} gap=\"3xl\" aria-label={strings.railLabel} className={cn('product-overview--rail', railClassName)}>\n\t\t\t\t\t\t{slots?.railTop}\n\t\t\t\t\t\t{!!readiness && <ProductReadinessCard {...readiness} />}\n\t\t\t\t\t\t{!!structure && <ProductStructureCard {...structure} />}\n\t\t\t\t\t\t{!!operations && <ProductOperationsCard {...operations} />}\n\t\t\t\t\t\t{!!quote && <ProductQuotePreviewCard {...quote} />}\n\t\t\t\t\t\t{!!policies && <ProductPoliciesCard {...policies} />}\n\t\t\t\t\t\t{slots?.railBottom}\n\t\t\t\t\t</Stack>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t\t{slots?.after}\n\t\t</Stack>\n\t);\n}\n\nProductOverview.displayName = 'ProductOverview';\n","import { Copy, Eye, Pencil, Trash2 } from 'lucide-react';\nimport type { ReactNode } from 'react';\n\nimport { useStrings } from '../../../../lib/strings';\nimport { cn } from '../../../../lib/utils';\n\nimport {\n\tdefaultProductVariantActionMenuStrings,\n\ttype ProductVariantActionMenuStrings,\n} from '../products.strings';\nimport type {\n\tProductVariantActionMenuProps,\n\tProductVariantSummary,\n} from '../products.types';\nimport { ProductRowActions } from '../partials/product-actions';\n\ntype VariantCommandHandlers = Pick<\n\tProductVariantActionMenuProps,\n\t'onSelectVariant' | 'onEditVariant' | 'onDuplicateVariant' | 'onDeleteVariant'\n>;\n\ninterface VariantCommand {\n\tid: string;\n\tlabel: string;\n\ticon: ReactNode;\n\tonClick: () => void;\n\ttone: 'secondary' | 'destructive';\n\tbuttonStyle?: 'ghost';\n}\n\n/**\n * The default variant commands, in order, with the destructive one last. The\n * row menu and the details card's single overflow menu both build on these.\n */\nexport function productVariantMenuActions(\n\tvariant: ProductVariantSummary,\n\t{ onSelectVariant, onEditVariant, onDuplicateVariant, onDeleteVariant }: VariantCommandHandlers,\n\tstrings: ProductVariantActionMenuStrings,\n): VariantCommand[] {\n\treturn [\n\t\t...(onSelectVariant ? [{\n\t\t\tid: 'open',\n\t\t\tlabel: strings.viewLabel,\n\t\t\ticon: <Eye className=\"size-icon-md\" />,\n\t\t\tonClick: () => onSelectVariant(variant),\n\t\t\ttone: 'secondary' as const, buttonStyle: 'ghost' as const,\n\t\t}] : []),\n\t\t...(onEditVariant ? [{\n\t\t\tid: 'edit',\n\t\t\tlabel: strings.editLabel,\n\t\t\ticon: <Pencil className=\"size-icon-md\" />,\n\t\t\tonClick: () => onEditVariant(variant),\n\t\t\ttone: 'secondary' as const, buttonStyle: 'ghost' as const,\n\t\t}] : []),\n\t\t...(onDuplicateVariant ? [{\n\t\t\tid: 'duplicate',\n\t\t\tlabel: strings.duplicateLabel,\n\t\t\ticon: <Copy className=\"size-icon-md\" />,\n\t\t\tonClick: () => onDuplicateVariant(variant),\n\t\t\ttone: 'secondary' as const, buttonStyle: 'ghost' as const,\n\t\t}] : []),\n\t\t...(onDeleteVariant ? [{\n\t\t\tid: 'delete',\n\t\t\tlabel: strings.deleteLabel,\n\t\t\ticon: <Trash2 className=\"size-icon-md\" />,\n\t\t\tonClick: () => onDeleteVariant(variant),\n\t\t\ttone: 'destructive' as const,\n\t\t}] : []),\n\t];\n}\n\n/**\n * Row menu for one product variant.\n *\n * @deprecated An internal part of the variant tables and `ProductVariantDetails`, which render it for every variant. Replace it there with `renderVariantActions`, composing the base `ActionMenu` if needed. Kept exported for compatibility.\n */\nexport function ProductVariantActionMenu({\n\tvariant,\n\tindex = 0,\n\tonSelectVariant,\n\tonEditVariant,\n\tonDuplicateVariant,\n\tonDeleteVariant,\n\trenderVariantActions,\n\tmenuLabel,\n\tclassName,\n\tstrings: stringsProp,\n}: ProductVariantActionMenuProps) {\n\tconst strings = useStrings(defaultProductVariantActionMenuStrings, stringsProp);\n\tconst onSelect = onSelectVariant ? () => onSelectVariant(variant) : undefined;\n\tconst onEdit = onEditVariant ? () => onEditVariant(variant) : undefined;\n\tconst onDuplicate = onDuplicateVariant ? () => onDuplicateVariant(variant) : undefined;\n\tconst onDelete = onDeleteVariant ? () => onDeleteVariant(variant) : undefined;\n\tconst hasActions = !!(onSelect || onEdit || onDuplicate || onDelete || renderVariantActions);\n\n\tif (!hasActions) return null;\n\n\tif (renderVariantActions) {\n\t\treturn (\n\t\t\t<div className={cn('product-variant-action-menu--component flex justify-end', className)}>\n\t\t\t\t{renderVariantActions(variant, { index, onSelect, onEdit, onDuplicate, onDelete })}\n\t\t\t</div>\n\t\t);\n\t}\n\n\treturn (\n\t\t<ProductRowActions<ProductVariantSummary>\n\t\t\titem={variant}\n\t\t\tmenuLabel={menuLabel ?? strings.actionsLabel}\n\t\t\tclassName={cn('product-variant-action-menu--component', className)}\n\t\t\tactions={productVariantMenuActions(\n\t\t\t\tvariant,\n\t\t\t\t{ onSelectVariant, onEditVariant, onDuplicateVariant, onDeleteVariant },\n\t\t\t\tstrings,\n\t\t\t).map(({ onClick, ...action }) => ({ ...action, onClick: () => onClick() }))}\n\t\t/>\n\t);\n}\n\nProductVariantActionMenu.displayName = 'ProductVariantActionMenu';\n","import {compositionClasses} from '../../../base/structure/composition.recipes';\nimport { ArrowLeft } from 'lucide-react';\nimport type { ReactNode } from 'react';\n\nimport { Badge } from '../../../base/badge';\nimport { Button } from '../../../base/buttons';\nimport { ContentBlock } from '../../../base/display';\nimport { MetadataList, type MetadataListItem } from '../../../base/metadata-list';\nimport { ItemGroup } from '../../../base/item';\nimport { Stack } from '../../../base/structure';\nimport { Text } from '../../../typography';\nimport { useStrings } from '../../../../lib/strings';\nimport { cn } from '../../../../lib/utils';\n\nimport {\n\tdefaultProductVariantActionMenuStrings,\n\tdefaultProductVariantDetailsStrings,\n} from '../products.strings';\nimport type {\n\tProductOptionSummary,\n\tProductVariantDetailsProps,\n\tProductVariantSummary,\n} from '../products.types';\nimport { ProductEmptyState } from '../partials/product-empty-state';\nimport { ProductSummaryRow } from '../partials/product-rows';\nimport { ProductVariantActionMenu, productVariantMenuActions } from './product-variant-action-menu';\n\nconst isPresent = (value: ReactNode): boolean => (\n\tvalue !== undefined &&\n\tvalue !== null &&\n\tvalue !== false &&\n\tvalue !== ''\n);\n\ntype ProductVariantMetadataLabels = {\n\tprice: string;\n\tinventory: string;\n\tsku: string;\n\tchannels: string;\n\tupdated: string;\n};\n\nfunction getDefaultMetadata(\n\tvariant: ProductVariantSummary,\n\tlabels: ProductVariantMetadataLabels,\n): MetadataListItem[] {\n\treturn [\n\t\t{ label: labels.price, value: variant.price },\n\t\t{ label: labels.inventory, value: variant.inventory },\n\t\t{ label: labels.sku, value: variant.sku },\n\t\t{ label: labels.channels, value: variant.channels },\n\t\t{ label: labels.updated, value: variant.updatedAt },\n\t].filter((item) => isPresent(item.value));\n}\n\nexport function ProductVariantDetails({\n\tvariant,\n\tmetadata,\n\toptionItems = [],\n\tmedia,\n\tonBack,\n\tonSelectVariant,\n\tonEditVariant,\n\tonDuplicateVariant,\n\tonDeleteVariant,\n\tonSelectOption,\n\tactions,\n\theaderEnd,\n\tfooterSlot,\n\tempty,\n\trenderActions,\n\trenderMetadata,\n\trenderOption,\n\tclassName,\n\tstrings: stringsProp,\n}: ProductVariantDetailsProps) {\n\tconst strings = useStrings(defaultProductVariantDetailsStrings, stringsProp);\n\tconst resolvedMetadata = variant ? (metadata ?? getDefaultMetadata(variant, strings.metadata)) : [];\n\t// One header, one overflow menu: the default variant commands join the\n\t// card's own `actions` in the trailing ⋯, which sorts Delete last. A custom\n\t// `renderActions` stays the consumer's own header content.\n\tconst variantActions = variant && !renderActions\n\t\t? productVariantMenuActions(\n\t\t\tvariant,\n\t\t\t{ onSelectVariant, onEditVariant, onDuplicateVariant, onDeleteVariant },\n\t\t\tdefaultProductVariantActionMenuStrings,\n\t\t)\n\t\t: [];\n\tconst menuActions = [...variantActions, ...(actions ?? [])];\n\tconst hasCustomActions = !!(variant && renderActions);\n\tconst headerAction = (\n\t\t<div className={cn('product-variant-details--header-actions flex items-center', compositionClasses.commands)}>\n\t\t\t{!!onBack && (\n\t\t\t\t<Button type=\"button\" tone=\"secondary\" buttonStyle=\"ghost\" onClick={onBack} icon={ArrowLeft}>\n\t\t\t\t\t{strings.backLabel}\n\t\t\t\t</Button>\n\t\t\t)}\n\t\t\t{!!hasCustomActions && variant && (\n\t\t\t\t<ProductVariantActionMenu\n\t\t\t\t\tvariant={variant}\n\t\t\t\t\tonSelectVariant={onSelectVariant}\n\t\t\t\t\tonEditVariant={onEditVariant}\n\t\t\t\t\tonDuplicateVariant={onDuplicateVariant}\n\t\t\t\t\tonDeleteVariant={onDeleteVariant}\n\t\t\t\t\trenderVariantActions={renderActions}\n\t\t\t\t/>\n\t\t\t)}\n\t\t</div>\n\t);\n\tconst selectedOptions = variant?.options ?? [];\n\n\treturn (\n\t\t<ContentBlock\n\t\t\ttitle={variant?.name ?? strings.title}\n\t\t\ttitleSuffix={variant?.status ? (\n\t\t\t\t<Badge tone={variant.statusTone ?? 'secondary'}>{variant.status}</Badge>\n\t\t\t) : undefined}\n\t\t\tdescription={variant?.description ?? strings.description}\n\t\t\tactions={menuActions.length ? menuActions : undefined}\n\t\t\theaderAction={onBack || hasCustomActions ? headerAction : undefined}\n\t\t\theaderEnd={headerEnd}\n\t\t\tfooterSlot={footerSlot}\n\t\t\tclassName={cn('product-variant-details--component w-full', className)}\n\t\t>\n\t\t\t{!variant ? (\n\t\t\t\tempty ?? (\n\t\t\t\t\t<ProductEmptyState\n\t\t\t\t\t\ttitle={strings.emptyTitle}\n\t\t\t\t\t\tdescription={strings.emptyDescription}\n\t\t\t\t\t/>\n\t\t\t\t)\n\t\t\t) : (\n\t\t\t\t<Stack gap=\"2xl\" className=\"product-variant-details--body\">\n\t\t\t\t\t{!!media && (\n\t\t\t\t\t\t<div className=\"product-variant-details--media overflow-hidden rounded-radius border border-border bg-muted/30\">\n\t\t\t\t\t\t\t{media}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)}\n\n\t\t\t\t\t{renderMetadata ? (\n\t\t\t\t\t\trenderMetadata(variant)\n\t\t\t\t\t) : resolvedMetadata.some(Boolean) && (\n\t\t\t\t\t\t// Same sub-section heading recipe as the option sections below.\n\t\t\t\t\t\t<Stack gap=\"md\" className=\"product-variant-details--facts\">\n\t\t\t\t\t\t\t<Text type=\"inherit\" weight=\"semibold\">{strings.factsTitle}</Text>\n\t\t\t\t\t\t\t<MetadataList\n\t\t\t\t\t\t\t\tadaptTo=\"container\"\n\t\t\t\t\t\t\t\titems={resolvedMetadata}\n\t\t\t\t\t\t\t\tcolumns={3}\n\t\t\t\t\t\t\t\tdensity=\"compact\"\n\t\t\t\t\t\t\t\tclassName=\"product-variant-details--metadata\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</Stack>\n\t\t\t\t\t)}\n\n\t\t\t\t\t{!!selectedOptions.length && (\n\t\t\t\t\t\t<Stack gap=\"md\" className=\"product-variant-details--selected-options\">\n\t\t\t\t\t\t\t<Text type=\"inherit\" weight=\"semibold\">{strings.selectedOptionsTitle}</Text>\n\t\t\t\t\t\t\t<div className=\"flex flex-wrap gap-space-sm\">\n\t\t\t\t\t\t\t\t{selectedOptions.map((option, index) => (\n\t\t\t\t\t\t\t\t\t<Badge key={index} tone=\"secondary\">\n\t\t\t\t\t\t\t\t\t\t{option}\n\t\t\t\t\t\t\t\t\t</Badge>\n\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</Stack>\n\t\t\t\t\t)}\n\n\t\t\t\t\t{!!optionItems.length && (\n\t\t\t\t\t\t<Stack gap=\"md\" className=\"product-variant-details--related-options\">\n\t\t\t\t\t\t\t<Text type=\"inherit\" weight=\"semibold\">{strings.relatedOptionsTitle}</Text>\n\t\t\t\t\t\t\t<ItemGroup>\n\t\t\t\t\t\t\t\t{optionItems.map((option: ProductOptionSummary, index) => (\n\t\t\t\t\t\t\t\t\trenderOption ? (\n\t\t\t\t\t\t\t\t\t\t<div key={option.id}>{renderOption(option, index)}</div>\n\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t<ProductSummaryRow\n\t\t\t\t\t\t\t\t\t\t\tkey={option.id}\n\t\t\t\t\t\t\t\t\t\t\titem={option}\n\t\t\t\t\t\t\t\t\t\t\tactionLabel={strings.viewOptionLabel}\n\t\t\t\t\t\t\t\t\t\t\tonSelect={onSelectOption ? () => onSelectOption(option) : undefined}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t</ItemGroup>\n\t\t\t\t\t\t</Stack>\n\t\t\t\t\t)}\n\t\t\t\t</Stack>\n\t\t\t)}\n\t\t</ContentBlock>\n\t);\n}\n\nProductVariantDetails.displayName = 'ProductVariantDetails';\n","import { type FormEvent, useId, useState } from 'react';\n\nimport { Button } from '../../../base/buttons';\nimport { ContentBlock } from '../../../base/display';\nimport { FormField } from '../../../base/forms';\nimport { Input, Textarea } from '../../../base/text-inputs';\nimport { Select } from '../../../base/choice-inputs';\nimport { Stack } from '../../../base/structure';\nimport { Text } from '../../../typography';\nimport { useStrings } from '../../../../lib/strings';\nimport { cn } from '../../../../lib/utils';\n\nimport { defaultProductVariantEditorStrings } from '../products.strings';\nimport type {\n\tProductChoice,\n\tProductVariantEditorField,\n\tProductVariantEditorProps,\n\tProductVariantEditorValues,\n\tProductVariantOptionField,\n} from '../products.types';\n\nconst toSelectOptions = (choices: ProductChoice[]) => (\n\tchoices.map((choice) => ({\n\t\tvalue: choice.value,\n\t\tlabel: choice.label,\n\t\tdisabled: choice.disabled,\n\t}))\n);\n\nexport function ProductVariantEditor({\n\tvalue: valueProp,\n\tdefaultValue,\n\toptionFields = [],\n\tstatusOptions = [],\n\tonValueChange,\n\tonSubmit,\n\tonError,\n\tonCancel,\n\tonDelete,\n\tactions,\n\theaderEnd,\n\tfooterSlot,\n\tvisibleFields,\n\terrors,\n\tformId: formIdProp,\n\tshowHeader = true,\n\tchildren,\n\tdisabled = false,\n\tsubmitting = false,\n\tclassName,\n\tstrings: stringsProp,\n}: ProductVariantEditorProps) {\n\tconst strings = useStrings(defaultProductVariantEditorStrings, stringsProp);\n\tconst generatedFormId = useId();\n\tconst formId = formIdProp ?? generatedFormId;\n\tconst isControlled = valueProp !== undefined;\n\tconst [internalValue, setInternalValue] = useState<ProductVariantEditorValues>(defaultValue ?? {});\n\tconst [internalSubmitting, setInternalSubmitting] = useState(false);\n\tconst value = (isControlled ? valueProp : internalValue) ?? {};\n\tconst resolvedSubmitting = submitting || internalSubmitting;\n\tconst isDisabled = disabled || resolvedSubmitting;\n\tconst isFieldVisible = (field: ProductVariantEditorField) => visibleFields?.[field] !== false;\n\tconst showIdentity = isFieldVisible('name') || isFieldVisible('sku') || isFieldVisible('description');\n\tconst showCommercial = isFieldVisible('price') || isFieldVisible('inventory') || isFieldVisible('status') || isFieldVisible('channels');\n\n\tconst updateValue = (next: ProductVariantEditorValues) => {\n\t\tif (!isControlled) {\n\t\t\tsetInternalValue(next);\n\t\t}\n\n\t\tonValueChange?.(next);\n\t};\n\n\tconst updateField = (field: keyof Omit<ProductVariantEditorValues, 'options'>, nextValue: string) => {\n\t\tupdateValue({\n\t\t\t...value,\n\t\t\t[field]: nextValue,\n\t\t});\n\t};\n\n\tconst updateOption = (field: ProductVariantOptionField, nextValue: string | undefined) => {\n\t\tupdateValue({\n\t\t\t...value,\n\t\t\toptions: {\n\t\t\t\t...value.options,\n\t\t\t\t[field.id]: nextValue,\n\t\t\t},\n\t\t});\n\t};\n\n\tconst handleSubmit = async (event: FormEvent<HTMLFormElement>) => {\n\t\tevent.preventDefault();\n\t\tif (!onSubmit || resolvedSubmitting) return;\n\n\t\tsetInternalSubmitting(true);\n\t\ttry {\n\t\t\tawait onSubmit(value);\n\t\t} catch (error) {\n\t\t\tif (import.meta.env?.DEV) {\n\t\t\t\tconsole.warn('[ProductVariantEditor] Submit failed.', error);\n\t\t\t}\n\t\t\tonError?.(error);\n\t\t} finally {\n\t\t\tsetInternalSubmitting(false);\n\t\t}\n\t};\n\n\tconst defaultFooter = (\n\t\t<div className=\"product-variant-editor--footer flex flex-col-reverse gap-space-md @sm/product-variant-editor:flex-row @sm/product-variant-editor:items-center @sm/product-variant-editor:justify-between\">\n\t\t\t<div>\n\t\t\t\t{!!onDelete && (\n\t\t\t\t\t<Button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\ttone=\"destructive\"\n\t\t\t\t\t\tbuttonStyle=\"ghost\"\n\t\t\t\t\t\tonClick={() => onDelete(value)}\n\t\t\t\t\t\tdisabled={isDisabled}\n\t\t\t\t\t>\n\t\t\t\t\t\t{strings.deleteLabel}\n\t\t\t\t\t</Button>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t\t<div className=\"flex flex-col-reverse gap-space-md @sm/product-variant-editor:flex-row @sm/product-variant-editor:justify-end\">\n\t\t\t\t{!!onCancel && (\n\t\t\t\t\t<Button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\ttone=\"secondary\"\n\t\t\t\t\t\tbuttonStyle=\"ghost\"\n\t\t\t\t\t\tonClick={onCancel}\n\t\t\t\t\t\tdisabled={isDisabled}\n\t\t\t\t\t>\n\t\t\t\t\t\t{strings.cancelLabel}\n\t\t\t\t\t</Button>\n\t\t\t\t)}\n\t\t\t\t{!!onSubmit && (\n\t\t\t\t\t<Button tone=\"primary\"\n\t\t\t\t\t\ttype=\"submit\"\n\t\t\t\t\t\tform={formId}\n\t\t\t\t\t\tdisabled={isDisabled}\n\t\t\t\t\t>\n\t\t\t\t\t\t{resolvedSubmitting ? strings.savingLabel : strings.saveLabel}\n\t\t\t\t\t</Button>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t</div>\n\t);\n\tconst hasDefaultFooter = !!(onDelete || onCancel || onSubmit);\n\n\treturn (\n\t\t<ContentBlock\n\t\t\ttitle={showHeader ? strings.title : undefined}\n\t\t\tdescription={showHeader ? strings.description : undefined}\n\t\t\tactions={actions}\n\t\t\theaderEnd={headerEnd}\n\t\t\tfooterSlot={footerSlot}\n\t\t\t/*\n\t\t\t * The editor is a query container and its field pairs, footer, and\n\t\t\t * description span all switch on its width. It is mounted in a drawer or\n\t\t\t * a detail rail far more often than at page width; keyed to the viewport\n\t\t\t * it kept two-up fields in a 320px drawer on a desktop screen, at ~150px\n\t\t\t * a field. The 384px tier holds the two-column layout everywhere it\n\t\t\t * already renders — the narrowest is the 439px variant-details example —\n\t\t\t * and drops to one column below that.\n\t\t\t */\n\t\t\tclassName={cn('product-variant-editor--component @container/product-variant-editor w-full', className)}\n\t\t>\n\t\t\t<Stack render={<form id={formId} onSubmit={handleSubmit} />} gap=\"2xl\" className=\"product-variant-editor--form\">\n\t\t\t\t{showIdentity && <section className=\"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{isFieldVisible('name') && <FormField label={strings.fields.name} error={errors?.name} required>\n\t\t\t\t\t\t\t<Input\n\t\t\t\t\t\t\t\tvalue={value.name ?? ''}\n\t\t\t\t\t\t\t\tonChange={(event) => updateField('name', event.target.value)}\n\t\t\t\t\t\t\t\tinvalid={!!errors?.name}\n\t\t\t\t\t\t\t\tplaceholder={strings.placeholders.name}\n\t\t\t\t\t\t\t\tdisabled={isDisabled}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</FormField>}\n\t\t\t\t\t\t{isFieldVisible('sku') && <FormField label={strings.fields.sku} error={errors?.sku}>\n\t\t\t\t\t\t\t<Input\n\t\t\t\t\t\t\t\tvalue={value.sku ?? ''}\n\t\t\t\t\t\t\t\tonChange={(event) => updateField('sku', event.target.value)}\n\t\t\t\t\t\t\t\tinvalid={!!errors?.sku}\n\t\t\t\t\t\t\t\tplaceholder={strings.placeholders.sku}\n\t\t\t\t\t\t\t\tdisabled={isDisabled}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</FormField>}\n\t\t\t\t\t\t{isFieldVisible('description') && <FormField label={strings.fields.description} error={errors?.description} className=\"@sm/product-variant-editor:col-span-2\">\n\t\t\t\t\t\t\t<Textarea\n\t\t\t\t\t\t\t\tvalue={value.description ?? ''}\n\t\t\t\t\t\t\t\tonChange={(event) => updateField('description', event.target.value)}\n\t\t\t\t\t\t\t\tinvalid={!!errors?.description}\n\t\t\t\t\t\t\t\tplaceholder={strings.placeholders.description}\n\t\t\t\t\t\t\t\tdisabled={isDisabled}\n\t\t\t\t\t\t\t\tautoResize\n\t\t\t\t\t\t\t\tminRows={2}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</FormField>}\n\t\t\t\t\t</div>\n\t\t\t\t</section>}\n\n\t\t\t\t{showCommercial && <section className=\"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{isFieldVisible('price') && <FormField label={strings.fields.price} error={errors?.price}>\n\t\t\t\t\t\t\t<Input\n\t\t\t\t\t\t\t\tvalue={value.price ?? ''}\n\t\t\t\t\t\t\t\tonChange={(event) => updateField('price', event.target.value)}\n\t\t\t\t\t\t\t\tinvalid={!!errors?.price}\n\t\t\t\t\t\t\t\tplaceholder={strings.placeholders.price}\n\t\t\t\t\t\t\t\tdisabled={isDisabled}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</FormField>}\n\t\t\t\t\t\t{isFieldVisible('inventory') && <FormField label={strings.fields.inventory} error={errors?.inventory}>\n\t\t\t\t\t\t\t<Input\n\t\t\t\t\t\t\t\tvalue={value.inventory ?? ''}\n\t\t\t\t\t\t\t\tonChange={(event) => updateField('inventory', event.target.value)}\n\t\t\t\t\t\t\t\tinvalid={!!errors?.inventory}\n\t\t\t\t\t\t\t\tplaceholder={strings.placeholders.inventory}\n\t\t\t\t\t\t\t\tdisabled={isDisabled}\n\t\t\t\t\t\t\t\tinputMode=\"numeric\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</FormField>}\n\t\t\t\t\t\t{isFieldVisible('status') && <FormField label={strings.fields.status} error={errors?.status}>\n\t\t\t\t\t\t\t{statusOptions.length > 0 ? (\n\t\t\t\t\t\t\t\t<Select\n\t\t\t\t\t\t\t\t\toptions={toSelectOptions(statusOptions)}\n\t\t\t\t\t\t\t\t\tvalue={value.status ?? null}\n\t\t\t\t\t\t\t\t\tonValueChange={(nextValue) => updateField('status', nextValue ?? '')}\n\t\t\t\t\t\t\t\t\tinvalid={!!errors?.status}\n\t\t\t\t\t\t\t\t\tplaceholder={strings.statusPlaceholder}\n\t\t\t\t\t\t\t\t\tdisabled={isDisabled}\n\t\t\t\t\t\t\t\t\taria-label={strings.fields.status}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<Input\n\t\t\t\t\t\t\t\t\tvalue={value.status ?? ''}\n\t\t\t\t\t\t\t\t\tonChange={(event) => updateField('status', event.target.value)}\n\t\t\t\t\t\t\t\t\tinvalid={!!errors?.status}\n\t\t\t\t\t\t\t\t\tplaceholder={strings.placeholders.status}\n\t\t\t\t\t\t\t\t\tdisabled={isDisabled}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</FormField>}\n\t\t\t\t\t\t{isFieldVisible('channels') && <FormField label={strings.fields.channels} error={errors?.channels}>\n\t\t\t\t\t\t\t<Input\n\t\t\t\t\t\t\t\tvalue={value.channels ?? ''}\n\t\t\t\t\t\t\t\tonChange={(event) => updateField('channels', event.target.value)}\n\t\t\t\t\t\t\t\tinvalid={!!errors?.channels}\n\t\t\t\t\t\t\t\tplaceholder={strings.placeholders.channels}\n\t\t\t\t\t\t\t\tdisabled={isDisabled}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</FormField>}\n\t\t\t\t\t</div>\n\t\t\t\t</section>}\n\n\t\t\t\t{!!optionFields.length && (\n\t\t\t\t\t<section className=\"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{/* App-owned fields join the form's section rhythm, before its commands. */}\n\t\t\t\t{children}\n\t\t\t\t{/* The default commands close the form, so the form's section gap owns their space; a consumer footerSlot replaces them in the footer. */}\n\t\t\t\t{(footerSlot === undefined || footerSlot === null) && hasDefaultFooter && defaultFooter}\n\t\t\t</Stack>\n\t\t</ContentBlock>\n\t);\n}\n\nProductVariantEditor.displayName = 'ProductVariantEditor';\n","import {compositionRhythm} from '../../../base/structure/composition.recipes';\nimport { Copy, Eye, Pencil, Plus, Trash2 } from 'lucide-react';\nimport { Fragment, useCallback, useMemo, useRef, useState, type ReactNode } from 'react';\n\nimport { Badge } from '../../../base/badge';\nimport { BatchActionBar } from '../../../base/batch-action-bar';\nimport { Button } from '../../../base/buttons';\nimport { ContentBlock } from '../../../base/display';\nimport { Checkbox } from '../../../base/choice-inputs';\nimport { Input } from '../../../base/text-inputs';\nimport {\n\tTable,\n\tTableBody,\n\tTableCell,\n\tTableHead,\n\tTableHeader,\n\tTableRow,\n} from '../../../base/table';\nimport { Stack } from '../../../base/structure';\nimport { SecondaryValue, Value } from '../../../primitives';\nimport { DisplayLabel, Text } from '../../../typography';\nimport { useStrings } from '../../../../lib/strings';\nimport { cn } from '../../../../lib/utils';\n\nimport {\n\tdefaultProductVariantsBulkTableStrings,\n} from '../products.strings';\nimport type {\n\tProductOptionGroup,\n\tProductVariantBulkActionContext,\n\tProductVariantCellDisplay,\n\tProductVariantCellDisplayConfig,\n\tProductVariantCellRenderContext,\n\tProductVariantEditableField,\n\tProductVariantFieldChangeContext,\n\tProductVariantOptionCombinationDisplay,\n\tProductVariantRow,\n\tProductVariantSelectionMode,\n\tProductVariantsBulkTableColumn,\n\tProductVariantsBulkTableProps,\n} from '../products.types';\nimport { ProductEmptyState } from '../partials/product-empty-state';\nimport { ProductRowActions } from '../partials/product-actions';\nimport { PRODUCT_EMPTY_VALUE } from '../partials/product-values';\n\nconst DEFAULT_VISIBLE_COLUMNS: ProductVariantsBulkTableColumn[] = ['variant', 'sku', 'price', 'inventory', 'status'];\nconst DEFAULT_OPTION_COMBINATION_DISPLAY: ProductVariantOptionCombinationDisplay = 'text';\nconst DEFAULT_CELL_DISPLAY: ProductVariantCellDisplay = 'text';\nconst DEFAULT_SELECTION_MODE: ProductVariantSelectionMode = 'multiple';\n\nfunction getPlainText(value: unknown): string {\n\tif (typeof value === 'string' || typeof value === 'number') return String(value);\n\treturn '';\n}\n\nfunction getOptionValue(variant: ProductVariantRow, option: ProductOptionGroup) {\n\tconst directValue = variant.optionValues?.[option.id];\n\tif (directValue !== undefined && directValue !== null && directValue !== false && directValue !== '') {\n\t\treturn directValue;\n\t}\n\n\tconst valueId = variant.optionValueIds?.[option.id];\n\tconst matchedValue = option.values?.find((value) => value.id === valueId);\n\treturn matchedValue?.label ?? undefined;\n}\n\nfunction getVariantName(variant: ProductVariantRow, optionGroups: ProductOptionGroup[]) {\n\tif (variant.name !== undefined && variant.name !== null && variant.name !== '') {\n\t\treturn variant.name;\n\t}\n\n\tconst derivedName = optionGroups\n\t\t.filter((option) => option.usedForVariants !== false)\n\t\t.map((option) => getOptionValue(variant, option))\n\t\t.filter((value): value is NonNullable<typeof value> => value !== undefined && value !== null && value !== '')\n\t\t.map((value) => getPlainText(value))\n\t\t.filter(Boolean)\n\t\t.join(' / ');\n\n\treturn derivedName || PRODUCT_EMPTY_VALUE;\n}\n\nfunction getVariantOptionSummary(variant: ProductVariantRow, optionGroups: ProductOptionGroup[]) {\n\treturn optionGroups\n\t\t.filter((option) => option.usedForVariants !== false)\n\t\t.map((option) => getOptionValue(variant, option))\n\t\t.filter((value): value is NonNullable<typeof value> => value !== undefined && value !== null && value !== '');\n}\n\nfunction getOptionCombinationLabel(values: ReactNode[]) {\n\treturn values.map(getPlainText).filter(Boolean).join(' / ');\n}\n\nfunction getGroupLabel(variant: ProductVariantRow, option: ProductOptionGroup) {\n\tconst value = getOptionValue(variant, option);\n\tconst label = getPlainText(value);\n\treturn label || PRODUCT_EMPTY_VALUE;\n}\n\nfunction selectedIdsToRows(ids: string[], rowById: Map<string, ProductVariantRow>): ProductVariantRow[] {\n\treturn ids.map((id) => rowById.get(id)).filter((row): row is ProductVariantRow => !!row);\n}\n\nfunction renderFieldValue(value: ReactNode | undefined) {\n\tif (value === undefined || value === null || value === '') return PRODUCT_EMPTY_VALUE;\n\treturn value;\n}\n\nfunction hasCellValue(value: ReactNode | undefined) {\n\treturn value !== undefined && value !== null && value !== '';\n}\n\nfunction isEditableField(column: ProductVariantsBulkTableColumn): column is ProductVariantEditableField {\n\treturn column === 'sku' || column === 'price' || column === 'inventory';\n}\n\nfunction resolveCellDisplay(display: ProductVariantCellDisplayConfig, field: ProductVariantEditableField): ProductVariantCellDisplay {\n\tif (display === 'text' || display === 'field') return display;\n\treturn display[field] ?? DEFAULT_CELL_DISPLAY;\n}\n\nfunction getFieldChangeContext(\n\tindex: number,\n\tfield: ProductVariantEditableField,\n\tpreviousValue: ReactNode | undefined,\n\tvalue: string,\n): ProductVariantFieldChangeContext {\n\treturn {\n\t\tindex,\n\t\tfield,\n\t\tpreviousValue,\n\t\tvalue,\n\t};\n}\n\nfunction renderVariantCellValue(\n\tvalue: ReactNode | undefined,\n\tlabel: string,\n\tdisplay: ProductVariantCellDisplay,\n\tonValueChange?: (value: string) => void,\n\tonBlur?: (value: string) => void,\n\ttextClassName = 'whitespace-normal break-words',\n) {\n\tconst plainValue = getPlainText(value);\n\n\tif (display === 'field') {\n\t\tconst canEdit = !!onValueChange;\n\n\t\treturn (\n\t\t\t<Input\n\t\t\t\treadOnly={!canEdit}\n\t\t\t\tvalue={plainValue}\n\t\t\t\tonChange={canEdit ? (event) => onValueChange(event.currentTarget.value) : undefined}\n\t\t\t\tonBlur={onBlur ? (event) => onBlur(event.currentTarget.value) : undefined}\n\t\t\t\taria-label={label}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t// Content sizing lets the column grow to the whole value (a long\n\t\t\t\t\t// SKU), while the field still fills a wider column.\n\t\t\t\t\t'h-control-lg w-full min-w-24 field-sizing-content bg-background px-control shadow-xs',\n\t\t\t\t\t!canEdit && 'text-muted-foreground',\n\t\t\t\t)}\n\t\t\t/>\n\t\t);\n\t}\n\n\tconst Primitive = hasCellValue(value) ? Value : SecondaryValue;\n\n\treturn (\n\t\t<Primitive className={cn('min-w-0 tabular-nums', textClassName)}>\n\t\t\t{renderFieldValue(value)}\n\t\t</Primitive>\n\t);\n}\n\nexport function ProductVariantsBulkTable({\n\tvariants = [],\n\toptionGroups = [],\n\tgroupByOptionId,\n\tvisibleColumns = DEFAULT_VISIBLE_COLUMNS,\n\toptionCombinationDisplay = DEFAULT_OPTION_COMBINATION_DISPLAY,\n\tcellDisplay = DEFAULT_CELL_DISPLAY,\n\tselectionMode,\n\trenderOptionCombination,\n\trenderCell,\n\tselectedVariantIds,\n\tdefaultSelectedVariantIds = [],\n\tonSelectedVariantIdsChange,\n\tonVariantFieldChange,\n\tonVariantFieldBlur,\n\tonCreateVariant,\n\tonGenerateVariants,\n\tonSelectVariant,\n\tonEditVariant,\n\tonDuplicateVariant,\n\tonDeleteVariant,\n\tonBulkEdit,\n\tonBulkApply,\n\tonBulkDelete,\n\trenderVariantActions,\n\trenderBulkActions,\n\tactions,\n\theaderEnd,\n\tfooterSlot,\n\tempty,\n\tsurface = 'card',\n\tclassName,\n\tstrings: stringsProp,\n}: ProductVariantsBulkTableProps) {\n\tconst strings = useStrings(defaultProductVariantsBulkTableStrings, stringsProp);\n\tconst isSelectionControlled = selectedVariantIds !== undefined;\n\tconst [internalSelectedIds, setInternalSelectedIds] = useState(defaultSelectedVariantIds);\n\tconst hasBulkActions = !!(renderBulkActions || onBulkEdit || onBulkApply || onBulkDelete);\n\tconst resolvedSelectionMode = selectionMode\n\t\t?? (hasBulkActions || isSelectionControlled || !!onSelectedVariantIdsChange ? DEFAULT_SELECTION_MODE : 'none');\n\tconst isSelectable = resolvedSelectionMode === 'multiple';\n\tconst selectedIds = useMemo(\n\t\t() => (isSelectable ? (isSelectionControlled ? selectedVariantIds : internalSelectedIds) : []),\n\t\t[internalSelectedIds, isSelectable, isSelectionControlled, selectedVariantIds],\n\t);\n\tconst rowById = useMemo(\n\t\t() => new Map(variants.map((variant) => [variant.id, variant])),\n\t\t[variants],\n\t);\n\tconst selectedRows = useMemo(\n\t\t() => selectedIdsToRows(selectedIds, rowById),\n\t\t[rowById, selectedIds],\n\t);\n\tconst selectedIdSet = useMemo(() => new Set(selectedIds), [selectedIds]);\n\tconst visibleColumnSet = useMemo(() => new Set(visibleColumns), [visibleColumns]);\n\tconst groupByOption = useMemo(\n\t\t() => optionGroups.find((option) => option.id === groupByOptionId),\n\t\t[optionGroups, groupByOptionId],\n\t);\n\tconst rowIndexById = useMemo(\n\t\t() => new Map(variants.map((variant, index) => [variant.id, index])),\n\t\t[variants],\n\t);\n\tconst orderedVariants = useMemo(() => {\n\t\tif (!groupByOption) return variants;\n\t\tconst valueOrder = new Map((groupByOption.values ?? []).map((value, index) => [value.id, index]));\n\n\t\treturn [...variants].sort((a, b) => {\n\t\t\tconst aValueId = a.optionValueIds?.[groupByOption.id];\n\t\t\tconst bValueId = b.optionValueIds?.[groupByOption.id];\n\t\t\tconst aOrder = aValueId !== undefined ? valueOrder.get(aValueId) : undefined;\n\t\t\tconst bOrder = bValueId !== undefined ? valueOrder.get(bValueId) : undefined;\n\t\t\tconst resolvedAOrder = aOrder ?? Number.MAX_SAFE_INTEGER;\n\t\t\tconst resolvedBOrder = bOrder ?? Number.MAX_SAFE_INTEGER;\n\t\t\tif (resolvedAOrder !== resolvedBOrder) return resolvedAOrder - resolvedBOrder;\n\t\t\treturn (rowIndexById.get(a.id) ?? 0) - (rowIndexById.get(b.id) ?? 0);\n\t\t});\n\t}, [groupByOption, rowIndexById, variants]);\n\tconst groupCounts = useMemo(() => {\n\t\tif (!groupByOption) return new Map<string, number>();\n\t\tconst counts = new Map<string, number>();\n\t\tvariants.forEach((variant) => {\n\t\t\tconst label = getGroupLabel(variant, groupByOption);\n\t\t\tcounts.set(label, (counts.get(label) ?? 0) + 1);\n\t\t});\n\t\treturn counts;\n\t}, [groupByOption, variants]);\n\tconst hasBulkControls = isSelectable && hasBulkActions;\n\tconst hasRows = variants.length > 0;\n\tconst allRowsSelected = isSelectable && hasRows && variants.every((variant) => selectedIdSet.has(variant.id));\n\tconst someRowsSelected = selectedRows.length > 0 && !allRowsSelected;\n\t// Where focus lands when the bulk bar goes away with focus inside it.\n\tconst selectAllRef = useRef<HTMLElement>(null);\n\tconst hasRowActions = !!(\n\t\tonSelectVariant ||\n\t\tonEditVariant ||\n\t\tonDuplicateVariant ||\n\t\tonDeleteVariant ||\n\t\trenderVariantActions\n\t);\n\tconst visibleColumnCount = visibleColumns.filter((column) => visibleColumnSet.has(column)).length;\n\tconst tableColumnCount = visibleColumnCount + (isSelectable ? 1 : 0) + (hasRowActions ? 1 : 0);\n\n\tconst updateSelection = useCallback(\n\t\t(nextIds: string[]) => {\n\t\t\tconst nextRows = selectedIdsToRows(nextIds, rowById);\n\t\t\tif (!isSelectionControlled) {\n\t\t\t\tsetInternalSelectedIds(nextIds);\n\t\t\t}\n\t\t\tonSelectedVariantIdsChange?.(nextIds, nextRows);\n\t\t},\n\t\t[isSelectionControlled, onSelectedVariantIdsChange, rowById],\n\t);\n\n\tconst clearSelection = useCallback(() => updateSelection([]), [updateSelection]);\n\tconst toggleRow = useCallback(\n\t\t(variant: ProductVariantRow, checked: boolean | 'indeterminate') => {\n\t\t\tif (!isSelectable) return;\n\t\t\tconst shouldSelect = checked === true;\n\t\t\tconst nextIds = shouldSelect\n\t\t\t\t? Array.from(new Set([...selectedIds, variant.id]))\n\t\t\t\t: selectedIds.filter((id) => id !== variant.id);\n\t\t\tupdateSelection(nextIds);\n\t\t},\n\t\t[isSelectable, selectedIds, updateSelection],\n\t);\n\tconst toggleAll = useCallback(\n\t\t(checked: boolean | 'indeterminate') => {\n\t\t\tif (!isSelectable) return;\n\t\t\tupdateSelection(checked === true ? variants.map((variant) => variant.id) : []);\n\t\t},\n\t\t[isSelectable, updateSelection, variants],\n\t);\n\n\tconst bulkContext: ProductVariantBulkActionContext = {\n\t\tselectedRows,\n\t\tselectedIds,\n\t\tallRows: variants,\n\t\tselectedCount: selectedRows.length,\n\t\ttotalCount: variants.length,\n\t\tallRowsSelected,\n\t\tclearSelection,\n\t\tsetSelectedIds: updateSelection,\n\t};\n\n\tconst headerAction = (onCreateVariant || onGenerateVariants) ? (\n\t\t<Stack direction=\"horizontal\" gap={compositionRhythm.commands} justify=\"end\" className=\"product-variants-bulk-table--header-actions\">\n\t\t\t{!!onGenerateVariants && (\n\t\t\t\t<Button type=\"button\" tone=\"secondary\" buttonStyle=\"outline\" onClick={onGenerateVariants}>\n\t\t\t\t\t{strings.generateLabel}\n\t\t\t\t</Button>\n\t\t\t)}\n\t\t\t{!!onCreateVariant && (\n\t\t\t\t<Button type=\"button\" tone=\"secondary\" buttonStyle=\"ghost\" onClick={onCreateVariant} icon={Plus}>\n\t\t\t\t\t{strings.createLabel}\n\t\t\t\t</Button>\n\t\t\t)}\n\t\t</Stack>\n\t) : undefined;\n\n\tconst customBulkActions = selectedRows.length > 0 ? renderBulkActions?.(bulkContext) : undefined;\n\t/*\n\t * The shared base BatchActionBar, inline: a docked bar would cover the rows\n\t * being selected. It renders nothing until a variant is selected, and\n\t * `renderBulkActions` replaces the default commands.\n\t */\n\tconst bulkToolbar = hasBulkControls ? (\n\t\t<BatchActionBar\n\t\t\tplacement=\"inline\"\n\t\t\tclassName=\"product-variants-bulk-table--bulk-toolbar\"\n\t\t\tselectedCount={selectedRows.length}\n\t\t\ttotalCount={variants.length}\n\t\t\tonClear={clearSelection}\n\t\t\treturnFocusRef={selectAllRef}\n\t\t\tstrings={{\n\t\t\t\tsummary: (count, total) => strings.selectedLabel(count, total ?? variants.length),\n\t\t\t\tclear: strings.clearSelectionLabel,\n\t\t\t}}\n\t\t>\n\t\t\t{customBulkActions ?? (\n\t\t\t\t<>\n\t\t\t\t\t{!!onBulkEdit && (\n\t\t\t\t\t\t<Button type=\"button\" onClick={() => onBulkEdit(selectedRows)}>\n\t\t\t\t\t\t\t{strings.bulkEditLabel}\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t)}\n\t\t\t\t\t{!!onBulkApply && (\n\t\t\t\t\t\t<Button type=\"button\" tone=\"neutral\" buttonStyle=\"ghost\" onClick={() => onBulkApply(selectedRows)}>\n\t\t\t\t\t\t\t{strings.bulkApplyLabel}\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t)}\n\t\t\t\t\t{/* Destructive commands stay last, after every other bulk command. */}\n\t\t\t\t\t{!!onBulkDelete && (\n\t\t\t\t\t\t<Button type=\"button\" tone=\"destructive\" buttonStyle=\"ghost\" onClick={() => onBulkDelete(selectedRows)}>\n\t\t\t\t\t\t\t{strings.bulkDeleteLabel}\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t)}\n\t\t\t\t</>\n\t\t\t)}\n\t\t</BatchActionBar>\n\t) : null;\n\n\tconst content = variants.length === 0 ? (\n\t\tempty ?? (\n\t\t\t<ProductEmptyState\n\t\t\t\ttitle={strings.emptyTitle}\n\t\t\t\tdescription={strings.emptyDescription}\n\t\t\t\taction={onGenerateVariants ? (\n\t\t\t\t\t<Button tone=\"primary\" type=\"button\" onClick={onGenerateVariants}>\n\t\t\t\t\t\t{strings.generateLabel}\n\t\t\t\t\t</Button>\n\t\t\t\t) : undefined}\n\t\t\t/>\n\t\t)\n\t) : (\n\t\t<Stack gap=\"md\" className=\"product-variants-bulk-table--body\">\n\t\t\t{bulkToolbar}\n\t\t\t<div\n\t\t\t\tclassName=\"product-variants-bulk-table--table overflow-hidden rounded-surface border border-border bg-background text-foreground\"\n\t\t\t>\n\t\t\t\t{/* The shared Table container scrolls as every DataTable does; a reserved\n\t\t\t\t\tscrollbar gutter stopped the header and rows short of the frame edge. */}\n\t\t\t\t<Table className=\"w-full border-collapse\">\n\t\t\t\t\t\t<colgroup>\n\t\t\t\t\t\t\t{isSelectable && <col className=\"w-14 min-w-14 max-w-14\" />}\n\t\t\t\t\t\t\t{visibleColumnSet.has('variant') && <col />}\n\t\t\t\t\t\t\t{visibleColumnSet.has('sku') && <col />}\n\t\t\t\t\t\t\t{visibleColumnSet.has('price') && <col />}\n\t\t\t\t\t\t\t{visibleColumnSet.has('inventory') && <col />}\n\t\t\t\t\t\t\t{visibleColumnSet.has('status') && <col />}\n\t\t\t\t\t\t\t{visibleColumnSet.has('updated') && <col />}\n\t\t\t\t\t\t\t{hasRowActions && <col className=\"w-18\" />}\n\t\t\t\t\t\t</colgroup>\n\t\t\t\t\t\t<TableHeader>\n\t\t\t\t\t\t\t<TableRow className=\"h-12 border-b border-border/60 bg-muted/50\">\n\t\t\t\t\t\t\t\t{isSelectable && (\n\t\t\t\t\t\t\t\t\t<TableHead className=\"w-14 min-w-14 max-w-14 px-0 py-space-md text-center align-middle\">\n\t\t\t\t\t\t\t\t\t\t<Checkbox\n\t\t\t\t\t\t\t\t\t\t\tref={selectAllRef}\n\t\t\t\t\t\t\t\t\t\t\tchecked={allRowsSelected}\n\t\t\t\t\t\t\t\t\t\t\tindeterminate={someRowsSelected}\n\t\t\t\t\t\t\t\t\t\t\tonCheckedChange={toggleAll}\n\t\t\t\t\t\t\t\t\t\t\taria-label={strings.selectAllLabel}\n\t\t\t\t\t\t\t\t\t\t\tclassName=\"mx-auto\"\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t</TableHead>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t{visibleColumnSet.has('variant') && (\n\t\t\t\t\t\t\t\t\t<TableHead className=\"px-space-lg py-space-md text-left align-middle\">\n\t\t\t\t\t\t\t\t\t\t<DisplayLabel className=\"whitespace-normal\">\n\t\t\t\t\t\t\t\t\t\t\t{strings.headers.variant}\n\t\t\t\t\t\t\t\t\t\t</DisplayLabel>\n\t\t\t\t\t\t\t\t\t</TableHead>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t{visibleColumnSet.has('sku') && (\n\t\t\t\t\t\t\t\t\t<TableHead className=\"px-space-lg py-space-md text-left align-middle\">\n\t\t\t\t\t\t\t\t\t\t<DisplayLabel className=\"whitespace-normal\">\n\t\t\t\t\t\t\t\t\t\t\t{strings.headers.sku}\n\t\t\t\t\t\t\t\t\t\t</DisplayLabel>\n\t\t\t\t\t\t\t\t\t</TableHead>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t{visibleColumnSet.has('price') && (\n\t\t\t\t\t\t\t\t\t<TableHead className=\"px-space-lg py-space-md text-left align-middle\">\n\t\t\t\t\t\t\t\t\t\t<DisplayLabel className=\"whitespace-normal\">\n\t\t\t\t\t\t\t\t\t\t\t{strings.headers.price}\n\t\t\t\t\t\t\t\t\t\t</DisplayLabel>\n\t\t\t\t\t\t\t\t\t</TableHead>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t{visibleColumnSet.has('inventory') && (\n\t\t\t\t\t\t\t\t\t<TableHead className=\"px-space-lg py-space-md text-left align-middle\">\n\t\t\t\t\t\t\t\t\t\t<DisplayLabel className=\"whitespace-normal\">\n\t\t\t\t\t\t\t\t\t\t\t{strings.headers.inventory}\n\t\t\t\t\t\t\t\t\t\t</DisplayLabel>\n\t\t\t\t\t\t\t\t\t</TableHead>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t{visibleColumnSet.has('status') && (\n\t\t\t\t\t\t\t\t\t<TableHead className=\"px-space-lg py-space-md text-left align-middle\">\n\t\t\t\t\t\t\t\t\t\t<DisplayLabel className=\"whitespace-normal\">\n\t\t\t\t\t\t\t\t\t\t\t{strings.headers.status}\n\t\t\t\t\t\t\t\t\t\t</DisplayLabel>\n\t\t\t\t\t\t\t\t\t</TableHead>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t{visibleColumnSet.has('updated') && (\n\t\t\t\t\t\t\t\t\t<TableHead className=\"px-space-lg py-space-md text-left align-middle\">\n\t\t\t\t\t\t\t\t\t\t<DisplayLabel className=\"whitespace-normal\">\n\t\t\t\t\t\t\t\t\t\t\t{strings.headers.updated}\n\t\t\t\t\t\t\t\t\t\t</DisplayLabel>\n\t\t\t\t\t\t\t\t\t</TableHead>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t{hasRowActions && (\n\t\t\t\t\t\t\t\t\t<TableHead className=\"px-space-lg py-space-md text-right align-middle\">\n\t\t\t\t\t\t\t\t\t\t<DisplayLabel className=\"whitespace-normal\">\n\t\t\t\t\t\t\t\t\t\t\t{strings.headers.actions}\n\t\t\t\t\t\t\t\t\t\t</DisplayLabel>\n\t\t\t\t\t\t\t\t\t</TableHead>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</TableRow>\n\t\t\t\t\t\t</TableHeader>\n\t\t\t\t\t\t<TableBody>\n\t\t\t\t\t\t\t{orderedVariants.map((variant, displayIndex) => {\n\t\t\t\t\t\t\t\tconst index = rowIndexById.get(variant.id) ?? displayIndex;\n\t\t\t\t\t\t\t\tconst groupLabel = groupByOption ? getGroupLabel(variant, groupByOption) : null;\n\t\t\t\t\t\t\t\tconst previousVariant = displayIndex > 0 ? orderedVariants[displayIndex - 1] : undefined;\n\t\t\t\t\t\t\t\tconst previousGroupLabel = groupByOption && previousVariant\n\t\t\t\t\t\t\t\t\t? getGroupLabel(previousVariant, groupByOption)\n\t\t\t\t\t\t\t\t\t: null;\n\t\t\t\t\t\t\t\tconst shouldRenderGroup = !!groupByOption && groupLabel !== previousGroupLabel;\n\t\t\t\t\t\t\t\tconst isSelected = selectedIdSet.has(variant.id);\n\t\t\t\t\t\t\t\tconst actionContext = {\n\t\t\t\t\t\t\t\t\tindex,\n\t\t\t\t\t\t\t\t\tonSelect: onSelectVariant ? () => onSelectVariant(variant) : undefined,\n\t\t\t\t\t\t\t\t\tonEdit: onEditVariant ? () => onEditVariant(variant) : undefined,\n\t\t\t\t\t\t\t\t\tonDuplicate: onDuplicateVariant ? () => onDuplicateVariant(variant) : undefined,\n\t\t\t\t\t\t\t\t\tonDelete: onDeleteVariant ? () => onDeleteVariant(variant) : undefined,\n\t\t\t\t\t\t\t\t\tisSelected,\n\t\t\t\t\t\t\t\t\tonToggleSelected: isSelectable ? (checked: boolean) => toggleRow(variant, checked) : undefined,\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\tconst summaryOptionGroups = groupByOption\n\t\t\t\t\t\t\t\t\t? optionGroups.filter((option) => option.id !== groupByOption.id)\n\t\t\t\t\t\t\t\t\t: optionGroups;\n\t\t\t\t\t\t\t\tconst optionSummary = getVariantOptionSummary(variant, summaryOptionGroups);\n\t\t\t\t\t\t\t\tconst groupedVariantName = groupByOption\n\t\t\t\t\t\t\t\t\t? getVariantName({ ...variant, name: undefined }, summaryOptionGroups)\n\t\t\t\t\t\t\t\t\t: getVariantName(variant, optionGroups);\n\t\t\t\t\t\t\t\tconst variantName = groupedVariantName === PRODUCT_EMPTY_VALUE && groupByOption\n\t\t\t\t\t\t\t\t\t? getVariantName(variant, optionGroups)\n\t\t\t\t\t\t\t\t\t: groupedVariantName;\n\t\t\t\t\t\t\t\tconst optionLabel = getOptionCombinationLabel(optionSummary);\n\t\t\t\t\t\t\t\tconst optionLabelMatchesVariantName = optionLabel === getPlainText(variantName);\n\t\t\t\t\t\t\t\tconst createCellContext = (\n\t\t\t\t\t\t\t\t\tcolumn: ProductVariantsBulkTableColumn,\n\t\t\t\t\t\t\t\t\tvalue: ReactNode | undefined,\n\t\t\t\t\t\t\t\t\tdisplay: ProductVariantCellDisplay = DEFAULT_CELL_DISPLAY,\n\t\t\t\t\t\t\t\t): ProductVariantCellRenderContext => {\n\t\t\t\t\t\t\t\t\tconst onValueChange = isEditableField(column) && onVariantFieldChange\n\t\t\t\t\t\t\t\t\t\t? (nextValue: string) => onVariantFieldChange(\n\t\t\t\t\t\t\t\t\t\t\tvariant,\n\t\t\t\t\t\t\t\t\t\t\tcolumn,\n\t\t\t\t\t\t\t\t\t\t\tnextValue,\n\t\t\t\t\t\t\t\t\t\t\tgetFieldChangeContext(index, column, value, nextValue),\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t: undefined;\n\t\t\t\t\t\t\t\t\tconst onBlur = isEditableField(column) && onVariantFieldBlur\n\t\t\t\t\t\t\t\t\t\t? (nextValue: string) => onVariantFieldBlur(\n\t\t\t\t\t\t\t\t\t\t\tvariant,\n\t\t\t\t\t\t\t\t\t\t\tcolumn,\n\t\t\t\t\t\t\t\t\t\t\tnextValue,\n\t\t\t\t\t\t\t\t\t\t\tgetFieldChangeContext(index, column, value, nextValue),\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t: undefined;\n\n\t\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\t\tindex,\n\t\t\t\t\t\t\t\t\t\tcolumn,\n\t\t\t\t\t\t\t\t\t\tvalue,\n\t\t\t\t\t\t\t\t\t\tvariantName,\n\t\t\t\t\t\t\t\t\t\toptionValues: optionSummary,\n\t\t\t\t\t\t\t\t\t\toptionLabel,\n\t\t\t\t\t\t\t\t\t\tcellDisplay: display,\n\t\t\t\t\t\t\t\t\t\tonValueChange,\n\t\t\t\t\t\t\t\t\t\tonBlur,\n\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\tconst renderCellContent = (\n\t\t\t\t\t\t\t\t\tcolumn: ProductVariantsBulkTableColumn,\n\t\t\t\t\t\t\t\t\tvalue: ReactNode | undefined,\n\t\t\t\t\t\t\t\t\tdisplay: ProductVariantCellDisplay,\n\t\t\t\t\t\t\t\t\tfallback: (context: ProductVariantCellRenderContext) => ReactNode,\n\t\t\t\t\t\t\t\t) => {\n\t\t\t\t\t\t\t\t\tconst context = createCellContext(column, value, display);\n\t\t\t\t\t\t\t\t\tconst rendered = renderCell?.(variant, context);\n\t\t\t\t\t\t\t\t\treturn rendered !== undefined ? rendered : fallback(context);\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\tconst shouldRenderOptionCombination =\n\t\t\t\t\t\t\t\t\toptionCombinationDisplay !== 'none' &&\n\t\t\t\t\t\t\t\t\toptionSummary.length > 0 &&\n\t\t\t\t\t\t\t\t\t// The combination is supporting detail: shown only when it adds to the\n\t\t\t\t\t\t\t\t\t// variant title, never repeating a title that already lists the values.\n\t\t\t\t\t\t\t\t\t!optionLabelMatchesVariantName;\n\t\t\t\t\t\t\t\tconst renderedOptionCombination = optionCombinationDisplay !== 'none'\n\t\t\t\t\t\t\t\t\t? renderOptionCombination?.(variant, {\n\t\t\t\t\t\t\t\t\t\toptionGroups,\n\t\t\t\t\t\t\t\t\t\toptionValues: optionSummary,\n\t\t\t\t\t\t\t\t\t\toptionLabel,\n\t\t\t\t\t\t\t\t\t\tdisplay: optionCombinationDisplay,\n\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t: null;\n\t\t\t\t\t\t\t\tconst defaultRowActions = [\n\t\t\t\t\t\t\t\t\t...(onSelectVariant ? [{\n\t\t\t\t\t\t\t\t\t\tid: 'view',\n\t\t\t\t\t\t\t\t\t\tlabel: strings.viewLabel,\n\t\t\t\t\t\t\t\t\t\ticon: <Eye className=\"size-icon-md\" />,\n\t\t\t\t\t\t\t\t\t\tonClick: () => onSelectVariant(variant),\n\t\t\t\t\t\t\t\t\t\ttone: 'secondary' as const, buttonStyle: 'ghost' as const,\n\t\t\t\t\t\t\t\t\t}] : []),\n\t\t\t\t\t\t\t\t\t...(onEditVariant ? [{\n\t\t\t\t\t\t\t\t\t\tid: 'edit',\n\t\t\t\t\t\t\t\t\t\tlabel: strings.editLabel,\n\t\t\t\t\t\t\t\t\t\ticon: <Pencil className=\"size-icon-md\" />,\n\t\t\t\t\t\t\t\t\t\tonClick: () => onEditVariant(variant),\n\t\t\t\t\t\t\t\t\t\ttone: 'secondary' as const, buttonStyle: 'ghost' as const,\n\t\t\t\t\t\t\t\t\t}] : []),\n\t\t\t\t\t\t\t\t\t...(onDuplicateVariant ? [{\n\t\t\t\t\t\t\t\t\t\tid: 'duplicate',\n\t\t\t\t\t\t\t\t\t\tlabel: strings.duplicateLabel,\n\t\t\t\t\t\t\t\t\t\ticon: <Copy className=\"size-icon-md\" />,\n\t\t\t\t\t\t\t\t\t\tonClick: () => onDuplicateVariant(variant),\n\t\t\t\t\t\t\t\t\t\ttone: 'secondary' as const, buttonStyle: 'ghost' as const,\n\t\t\t\t\t\t\t\t\t}] : []),\n\t\t\t\t\t\t\t\t\t...(onDeleteVariant ? [{\n\t\t\t\t\t\t\t\t\t\tid: 'delete',\n\t\t\t\t\t\t\t\t\t\tlabel: strings.deleteLabel,\n\t\t\t\t\t\t\t\t\t\ticon: <Trash2 className=\"size-icon-md\" />,\n\t\t\t\t\t\t\t\t\t\tonClick: () => onDeleteVariant(variant),\n\t\t\t\t\t\t\t\t\t\ttone: 'destructive' as const,\n\t\t\t\t\t\t\t\t\t}] : []),\n\t\t\t\t\t\t\t\t];\n\n\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t<Fragment key={variant.id}>\n\t\t\t\t\t\t\t\t\t\t{shouldRenderGroup && (\n\t\t\t\t\t\t\t\t\t\t\t<TableRow className=\"product-variants-bulk-table--group-row border-b border-border/60 bg-muted/30\">\n\t\t\t\t\t\t\t\t\t\t\t\t<TableCell colSpan={tableColumnCount} className=\"px-space-lg py-space-md align-middle\">\n\t\t\t\t\t\t\t\t\t\t\t<Stack direction=\"horizontal\" gap=\"sm\" wrap={false}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Text type=\"inherit\" tag=\"span\" weight=\"semibold\" className=\"min-w-0 whitespace-normal break-words\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{groupLabel}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Text tag=\"span\" size=\"xs\" type=\"secondary\" className=\"whitespace-nowrap\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{strings.groupCountLabel(groupCounts.get(groupLabel ?? '') ?? 0)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t\t\t\t\t\t\t</TableCell>\n\t\t\t\t\t\t\t\t\t\t\t</TableRow>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t<TableRow className=\"h-20 border-b border-border/60 last:border-b-0\">\n\t\t\t\t\t\t\t\t\t\t{isSelectable && (\n\t\t\t\t\t\t\t\t\t\t\t<TableCell className=\"w-14 min-w-14 max-w-14 px-0 py-space-lg text-center align-middle\">\n\t\t\t\t\t\t\t\t\t\t\t\t<Checkbox\n\t\t\t\t\t\t\t\t\t\t\t\t\tchecked={isSelected}\n\t\t\t\t\t\t\t\t\t\t\t\t\tonCheckedChange={(checked) => toggleRow(variant, checked)}\n\t\t\t\t\t\t\t\t\t\t\t\t\taria-label={strings.selectRowLabel(index)}\n\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"mx-auto\"\n\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t</TableCell>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t{visibleColumnSet.has('variant') && (\n\t\t\t\t\t\t\t\t\t\t\t<TableCell className=\"px-space-lg py-space-lg align-middle\">\n\t\t\t\t\t\t\t\t\t\t\t\t{renderCellContent('variant', variantName, DEFAULT_CELL_DISPLAY, () => (\n\t\t\t\t\t\t\t\t\t\t\t\t<Stack gap=\"xs\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Text type=\"inherit\" weight=\"medium\" className=\"min-w-0 whitespace-normal break-words\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{variantName}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{renderedOptionCombination}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{!renderedOptionCombination && shouldRenderOptionCombination && optionCombinationDisplay === 'text' && (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Text size=\"xs\" type=\"secondary\" className=\"min-w-0 whitespace-normal break-words\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{optionSummary.map((value, valueIndex) => (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span key={`${variant.id}-option-text-${valueIndex}`}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{valueIndex > 0 ? ' / ' : null}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{value}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t{!renderedOptionCombination && shouldRenderOptionCombination && optionCombinationDisplay === 'tags' && (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Stack direction=\"horizontal\" gap=\"xs\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{optionSummary.map((value, valueIndex) => (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Badge\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tkey={`${variant.id}-option-${valueIndex}`}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttone=\"secondary\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"max-w-full\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{value}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Badge>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t\t\t\t</TableCell>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t{visibleColumnSet.has('sku') && (\n\t\t\t\t\t\t\t\t\t\t\t<TableCell className=\"px-space-lg py-space-md align-middle\">\n\t\t\t\t\t\t\t\t\t\t\t\t{renderCellContent('sku', variant.sku, resolveCellDisplay(cellDisplay, 'sku'), (context) => renderVariantCellValue(\n\t\t\t\t\t\t\t\t\t\t\t\t\tvariant.sku,\n\t\t\t\t\t\t\t\t\t\t\t\t\t`${strings.headers.sku}: ${getPlainText(variantName)}`,\n\t\t\t\t\t\t\t\t\t\t\t\t\tcontext.cellDisplay,\n\t\t\t\t\t\t\t\t\t\t\t\t\tcontext.onValueChange,\n\t\t\t\t\t\t\t\t\t\t\t\t\tcontext.onBlur,\n\t\t\t\t\t\t\t\t\t\t\t\t\t'whitespace-nowrap',\n\t\t\t\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t\t\t\t</TableCell>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t{visibleColumnSet.has('price') && (\n\t\t\t\t\t\t\t\t\t\t\t<TableCell className=\"px-space-lg py-space-md align-middle\">\n\t\t\t\t\t\t\t\t\t\t\t\t{renderCellContent('price', variant.price, resolveCellDisplay(cellDisplay, 'price'), (context) => renderVariantCellValue(\n\t\t\t\t\t\t\t\t\t\t\t\t\tvariant.price,\n\t\t\t\t\t\t\t\t\t\t\t\t\t`${strings.headers.price}: ${getPlainText(variantName)}`,\n\t\t\t\t\t\t\t\t\t\t\t\t\tcontext.cellDisplay,\n\t\t\t\t\t\t\t\t\t\t\t\t\tcontext.onValueChange,\n\t\t\t\t\t\t\t\t\t\t\t\t\tcontext.onBlur,\n\t\t\t\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t\t\t\t</TableCell>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t{visibleColumnSet.has('inventory') && (\n\t\t\t\t\t\t\t\t\t\t\t<TableCell className=\"px-space-lg py-space-md align-middle\">\n\t\t\t\t\t\t\t\t\t\t\t\t{renderCellContent('inventory', variant.inventory, resolveCellDisplay(cellDisplay, 'inventory'), (context) => renderVariantCellValue(\n\t\t\t\t\t\t\t\t\t\t\t\t\tvariant.inventory,\n\t\t\t\t\t\t\t\t\t\t\t\t\t`${strings.headers.inventory}: ${getPlainText(variantName)}`,\n\t\t\t\t\t\t\t\t\t\t\t\t\tcontext.cellDisplay,\n\t\t\t\t\t\t\t\t\t\t\t\t\tcontext.onValueChange,\n\t\t\t\t\t\t\t\t\t\t\t\t\tcontext.onBlur,\n\t\t\t\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t\t\t\t</TableCell>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t{visibleColumnSet.has('status') && (\n\t\t\t\t\t\t\t\t\t\t\t<TableCell className=\"px-space-lg py-space-lg align-middle\">\n\t\t\t\t\t\t\t\t\t\t\t\t{renderCellContent('status', variant.status, DEFAULT_CELL_DISPLAY, () => (\n\t\t\t\t\t\t\t\t\t\t\t\t\tvariant.status ? (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Badge tone={variant.statusTone ?? 'secondary'}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{variant.status}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Badge>\n\t\t\t\t\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Text type=\"secondary\">{PRODUCT_EMPTY_VALUE}</Text>\n\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t\t\t\t</TableCell>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t{visibleColumnSet.has('updated') && (\n\t\t\t\t\t\t\t\t\t\t\t<TableCell className=\"px-space-lg py-space-lg align-middle\">\n\t\t\t\t\t\t\t\t\t\t\t\t{/* A date keeps the size and figures of its sibling value cells. */}\n\t\t\t\t\t\t\t\t\t\t\t\t{renderCellContent('updated', variant.updatedAt, DEFAULT_CELL_DISPLAY, () => renderVariantCellValue(\n\t\t\t\t\t\t\t\t\t\t\t\t\tvariant.updatedAt,\n\t\t\t\t\t\t\t\t\t\t\t\t\t`${strings.headers.updated}: ${getPlainText(variantName)}`,\n\t\t\t\t\t\t\t\t\t\t\t\t\t'text',\n\t\t\t\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t\t\t\t</TableCell>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t{hasRowActions && (\n\t\t\t\t\t\t\t\t\t\t\t<TableCell className=\"px-space-lg py-space-lg text-right align-middle\">\n\t\t\t\t\t\t\t\t\t\t\t\t{renderVariantActions ? (\n\t\t\t\t\t\t\t\t\t\t\t\t\trenderVariantActions(variant, actionContext)\n\t\t\t\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t\t\t\t<ProductRowActions\n\t\t\t\t\t\t\t\t\t\t\t\t\t\titem={variant}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tactions={defaultRowActions}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tmenuLabel={strings.headers.actions}\n\t\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t</TableCell>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t</TableRow>\n\t\t\t\t\t\t\t\t\t</Fragment>\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t</TableBody>\n\t\t\t\t</Table>\n\t\t\t</div>\n\t\t</Stack>\n\t);\n\n\tif (surface === 'embedded') {\n\t\treturn (\n\t\t\t<section\n\t\t\t\taria-label={strings.title}\n\t\t\t\tclassName={cn('product-variants-bulk-table--component min-w-0', className)}\n\t\t\t>\n\t\t\t\t{content}\n\t\t\t</section>\n\t\t);\n\t}\n\n\treturn (\n\t\t<ContentBlock\n\t\t\ttitle={strings.title}\n\t\t\tdescription={strings.description}\n\t\t\tactions={actions}\n\t\t\theaderAction={headerAction}\n\t\t\theaderEnd={headerEnd}\n\t\t\tfooterSlot={footerSlot}\n\t\t\tclassName={cn('product-variants-bulk-table--component w-full', className)}\n\t\t>\n\t\t\t{content}\n\t\t</ContentBlock>\n\t);\n}\n\nProductVariantsBulkTable.displayName = 'ProductVariantsBulkTable';\n","import {compositionRhythm} from '../../../base/structure/composition.recipes';\nimport { ListFilter, Plus, Search } from 'lucide-react';\nimport { useCallback, useMemo, useState } from 'react';\n\nimport { Button } from '../../../base/buttons';\nimport { Card } from '../../../base/cards';\nimport { Stack } from '../../../base/structure';\nimport { Select } from '../../../base/choice-inputs';\nimport { Text } from '../../../typography';\nimport { useStrings } from '../../../../lib/strings';\nimport { cn } from '../../../../lib/utils';\nimport { controlGroupHeightClasses, segmentedControlRecipes } from '../../../../lib/control-group-recipes';\nimport { useDensityConfig } from '../../../../lib/ui-provider';\nimport { resolveComponentScale } from '../../../../lib/ui-provider/scale';\n\nimport { defaultProductVariantsManagerStrings } from '../products.strings';\nimport type { ProductVariantsManagerProps } from '../products.types';\nimport { ProductOptionsMatrix } from './product-options-matrix';\nimport { ProductVariantsBulkTable } from './product-variants-bulk-table';\n\nexport function ProductVariantsManager({\n\toptionGroups = [],\n\tvariants = [],\n\tvisibleColumns,\n\toptionCombinationDisplay,\n\tcellDisplay,\n\tselectionMode,\n\trenderOptionCombination,\n\trenderCell,\n\tselectedVariantIds,\n\tdefaultSelectedVariantIds,\n\tonSelectedVariantIdsChange,\n\tonVariantFieldChange,\n\tonVariantFieldBlur,\n\tcollapsedOptionIds,\n\tdefaultCollapsedOptionIds,\n\tonCollapsedOptionIdsChange,\n\teditingOptionId,\n\tdefaultEditingOptionId,\n\tonEditingOptionIdChange,\n\tonCreateOption,\n\tonEditOption,\n\tonDeleteOption,\n\tonAddValue,\n\tonDeleteValue,\n\tonOptionNameChange,\n\tonValueLabelChange,\n\tonDoneEditingOption,\n\tonSaveEditingOption,\n\tonError,\n\tonCancelEditingOption,\n\tonToggleUsedForVariants,\n\trenderOptionActions,\n\trenderValue,\n\tonCreateVariant,\n\tonGenerateVariants,\n\tonSelectVariant,\n\tonEditVariant,\n\tonDuplicateVariant,\n\tonDeleteVariant,\n\tonBulkEdit,\n\tonBulkApply,\n\tonBulkDelete,\n\trenderVariantActions,\n\trenderBulkActions,\n\tgroupByOptionId,\n\tdefaultGroupByOptionId,\n\tonGroupByOptionIdChange,\n\tshowGroupBy = true,\n\tonSearchVariants,\n\tonFilterVariants,\n\tcontrolsEnd,\n\tactions,\n\theaderEnd,\n\tfooterSlot,\n\tsurface = 'flat',\n\tpadding = surface === 'flat' ? 'none' : 'md',\n\theaderDivider,\n\tfooterDivider,\n\tclassName,\n\tstrings: stringsProp,\n\toptionsStrings,\n\tvariantsStrings,\n}: ProductVariantsManagerProps) {\n\tconst { defaultScale } = useDensityConfig();\n\tconst size = resolveComponentScale(undefined, defaultScale);\n\tconst strings = useStrings(defaultProductVariantsManagerStrings, stringsProp);\n\tconst groupableOptions = useMemo(\n\t\t() => optionGroups.filter((option) => option.usedForVariants !== false),\n\t\t[optionGroups],\n\t);\n\tconst fallbackGroupByOptionId = groupableOptions[0]?.id ?? null;\n\tconst isGroupByControlled = groupByOptionId !== undefined;\n\tconst [internalGroupByOptionId, setInternalGroupByOptionId] = useState<string | null | undefined>(defaultGroupByOptionId);\n\t// Without the control nobody could undo an implicit or earlier choice, so a\n\t// hidden control keeps the list flat unless the app names an option.\n\tconst resolvedGroupByOptionId = isGroupByControlled\n\t\t? groupByOptionId\n\t\t: !showGroupBy ? defaultGroupByOptionId ?? null\n\t\t: internalGroupByOptionId === undefined ? fallbackGroupByOptionId : internalGroupByOptionId;\n\tconst hasJoinedTools = !!onSearchVariants && !!onFilterVariants;\n\tconst hasTools = !!onSearchVariants || !!onFilterVariants;\n\tconst groupByOptions = useMemo(\n\t\t() =>\n\t\t\t!showGroupBy ? [] : groupableOptions.map((option) => ({\n\t\t\t\tvalue: option.id,\n\t\t\t\tlabel: String(typeof option.name === 'string' || typeof option.name === 'number' ? option.name : option.id),\n\t\t\t})),\n\t\t[groupableOptions, showGroupBy],\n\t);\n\tconst updateGroupByOptionId = useCallback(\n\t\t(nextId: string | undefined) => {\n\t\t\tconst matchedOption = optionGroups.find((option) => option.id === nextId);\n\t\t\tif (!isGroupByControlled) {\n\t\t\t\tsetInternalGroupByOptionId(nextId ?? null);\n\t\t\t}\n\t\t\tonGroupByOptionIdChange?.(nextId, matchedOption);\n\t\t},\n\t\t[isGroupByControlled, onGroupByOptionIdChange, optionGroups],\n\t);\n\tconst headerAction =\n\t\tonGenerateVariants || onCreateVariant ? (\n\t\t\t<Stack direction=\"horizontal\" gap={compositionRhythm.commands} justify=\"end\" className=\"product-variants-manager--header-actions\">\n\t\t\t\t{!!onGenerateVariants && (\n\t\t\t\t\t<Button type=\"button\" tone=\"secondary\" buttonStyle=\"outline\" onClick={onGenerateVariants}>\n\t\t\t\t\t\t{strings.generateLabel}\n\t\t\t\t\t</Button>\n\t\t\t\t)}\n\t\t\t\t{!!onCreateVariant && (\n\t\t\t\t\t<Button type=\"button\" tone=\"secondary\" buttonStyle=\"outline\" onClick={onCreateVariant} icon={Plus}>\n\t\t\t\t\t\t{strings.createVariantLabel}\n\t\t\t\t\t</Button>\n\t\t\t\t)}\n\t\t\t</Stack>\n\t\t) : undefined;\n\n\treturn (\n\t\t<Card\n\t\t\tsurface={surface}\n\t\t\tpadding={padding}\n\t\t\theaderDivider={headerDivider}\n\t\t\tfooterDivider={footerDivider}\n\t\t\ttitle={strings.title}\n\t\t\tdescription={strings.description}\n\t\t\tactions={actions}\n\t\t\tactionsLabel={strings.actionsLabel}\n\t\t\theaderAction={headerAction}\n\t\t\theaderEnd={headerEnd}\n\t\t\tfooterSlot={footerSlot}\n\t\t\tclassName={cn('product-variants-manager--component w-full', className)}\n\t\t>\n\t\t\t<Stack gap=\"2xl\" className=\"product-variants-manager--body\">\n\t\t\t\t<section className=\"product-variants-manager--options min-w-0\">\n\t\t\t\t\t<ProductOptionsMatrix\n\t\t\t\t\t\toptionGroups={optionGroups}\n\t\t\t\t\t\tcollapsedOptionIds={collapsedOptionIds}\n\t\t\t\t\t\tdefaultCollapsedOptionIds={defaultCollapsedOptionIds}\n\t\t\t\t\t\tonCollapsedOptionIdsChange={onCollapsedOptionIdsChange}\n\t\t\t\t\t\teditingOptionId={editingOptionId}\n\t\t\t\t\t\tdefaultEditingOptionId={defaultEditingOptionId}\n\t\t\t\t\t\tonEditingOptionIdChange={onEditingOptionIdChange}\n\t\t\t\t\t\tsurface=\"embedded\"\n\t\t\t\t\t\tonCreateOption={onCreateOption}\n\t\t\t\t\t\tonEditOption={onEditOption}\n\t\t\t\t\t\tonDeleteOption={onDeleteOption}\n\t\t\t\t\t\tonAddValue={onAddValue}\n\t\t\t\t\t\tonDeleteValue={onDeleteValue}\n\t\t\t\t\t\tonOptionNameChange={onOptionNameChange}\n\t\t\t\t\t\tonValueLabelChange={onValueLabelChange}\n\t\t\t\t\t\tonDoneEditingOption={onDoneEditingOption}\n\t\t\t\t\t\tonSaveEditingOption={onSaveEditingOption}\n\t\t\t\t\t\tonError={onError}\n\t\t\t\t\t\tonCancelEditingOption={onCancelEditingOption}\n\t\t\t\t\t\tonToggleUsedForVariants={onToggleUsedForVariants}\n\t\t\t\t\t\trenderOptionActions={renderOptionActions}\n\t\t\t\t\t\trenderValue={renderValue}\n\t\t\t\t\t\tshowHeader={false}\n\t\t\t\t\t\tshowCollapseControls={false}\n\t\t\t\t\t\tshowInlineActions={false}\n\t\t\t\t\t\tshowVariantToggle={false}\n\t\t\t\t\t\tstrings={{\n\t\t\t\t\t\t\ttitle: strings.optionsTitle,\n\t\t\t\t\t\t\t...optionsStrings,\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t</section>\n\n\t\t\t\t<Stack gap=\"md\" className=\"product-variants-manager--variants-region\">\n\t\t\t\t\t{(groupByOptions.length > 0 || hasTools || controlsEnd) && <div className=\"product-variants-manager--controls\">\n\t\t\t\t\t\t<Stack direction=\"horizontal\" gap=\"md\" justify=\"between\">\n\t\t\t\t\t\t\t{groupByOptions.length > 0 && <Stack direction=\"horizontal\" gap=\"sm\" wrap={false} className=\"product-variants-manager--group-by\">\n\t\t\t\t\t\t\t\t<Text type=\"secondary\" className=\"whitespace-nowrap\">\n\t\t\t\t\t\t\t\t\t{strings.groupByLabel}\n\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t{groupByOptions.length > 0 && (\n\t\t\t\t\t\t\t\t\t<Select\n\t\t\t\t\t\t\t\t\t\toptions={groupByOptions}\n\t\t\t\t\t\t\t\t\t\tvalue={resolvedGroupByOptionId ?? undefined}\n\t\t\t\t\t\t\t\t\t\tonValueChange={updateGroupByOptionId}\n\t\t\t\t\t\t\t\t\t\taria-label={strings.groupByLabel}\n\t\t\t\t\t\t\t\t\t\tclassName=\"min-w-32 bg-background\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</Stack>}\n\t\t\t\t\t\t\t{(hasTools || controlsEnd) && <Stack\n\t\t\t\t\t\t\t\tdirection=\"horizontal\"\n\t\t\t\t\t\t\t\tgap=\"sm\"\n\t\t\t\t\t\t\t\tjustify=\"end\"\n\t\t\t\t\t\t\t\twrap={false}\n\t\t\t\t\t\t\t\tclassName=\"product-variants-manager--controls-end ms-auto\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{hasTools && <div className={cn('flex', hasJoinedTools && ['product-variants-manager--tool-buttons bg-background shadow-xs', segmentedControlRecipes.joinedFrame, controlGroupHeightClasses[size]])}>\n\t\t\t\t\t\t\t\t\t{onSearchVariants && <Button\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\tsize={size}\n\t\t\t\t\t\t\t\t\t\ticonOnly\n\t\t\t\t\t\t\t\t\t\ttone=\"secondary\"\n\t\t\t\t\t\t\t\t\t\tbuttonStyle={hasJoinedTools ? 'ghost' : 'outline'}\n\t\t\t\t\t\t\t\t\t\tonClick={onSearchVariants}\n\t\t\t\t\t\t\t\t\t\taria-label={strings.searchLabel}\n\t\t\t\t\t\t\t\t\t\tclassName={cn(hasJoinedTools && [segmentedControlRecipes.joinedItem, segmentedControlRecipes.firstItem, 'border-r border-border'], 'text-muted-foreground hover:text-foreground')}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<Search className=\"size-icon-sm\" aria-hidden=\"true\" />\n\t\t\t\t\t\t\t\t\t\t<Text tag=\"span\" size=\"pxs\" className=\"sr-only\">\n\t\t\t\t\t\t\t\t\t\t\t{strings.searchLabel}\n\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t</Button>}\n\t\t\t\t\t\t\t\t\t{onFilterVariants && <Button\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\tsize={size}\n\t\t\t\t\t\t\t\t\t\ticonOnly\n\t\t\t\t\t\t\t\t\t\ttone=\"secondary\"\n\t\t\t\t\t\t\t\t\t\tbuttonStyle={hasJoinedTools ? 'ghost' : 'outline'}\n\t\t\t\t\t\t\t\t\t\tonClick={onFilterVariants}\n\t\t\t\t\t\t\t\t\t\taria-label={strings.filterLabel}\n\t\t\t\t\t\t\t\t\t\tclassName={cn(hasJoinedTools && [segmentedControlRecipes.joinedItem, segmentedControlRecipes.lastItem], 'text-muted-foreground hover:text-foreground')}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<ListFilter className=\"size-icon-sm\" aria-hidden=\"true\" />\n\t\t\t\t\t\t\t\t\t\t<Text tag=\"span\" size=\"pxs\" className=\"sr-only\">\n\t\t\t\t\t\t\t\t\t\t\t{strings.filterLabel}\n\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t</Button>}\n\t\t\t\t\t\t\t\t</div>}\n\t\t\t\t\t\t\t\t{controlsEnd}\n\t\t\t\t\t\t\t</Stack>}\n\t\t\t\t\t\t</Stack>\n\t\t\t\t\t</div>}\n\n\t\t\t\t\t<section className=\"product-variants-manager--variants min-w-0\">\n\t\t\t\t\t\t<ProductVariantsBulkTable\n\t\t\t\t\t\t\tvariants={variants}\n\t\t\t\t\t\t\toptionGroups={optionGroups}\n\t\t\t\t\t\t\tgroupByOptionId={resolvedGroupByOptionId}\n\t\t\t\t\t\t\tvisibleColumns={visibleColumns}\n\t\t\t\t\t\t\toptionCombinationDisplay={optionCombinationDisplay}\n\t\t\t\t\t\t\tcellDisplay={cellDisplay}\n\t\t\t\t\t\t\tselectionMode={selectionMode}\n\t\t\t\t\t\t\trenderOptionCombination={renderOptionCombination}\n\t\t\t\t\t\t\trenderCell={renderCell}\n\t\t\t\t\t\t\tsurface=\"embedded\"\n\t\t\t\t\t\t\tselectedVariantIds={selectedVariantIds}\n\t\t\t\t\t\t\tdefaultSelectedVariantIds={defaultSelectedVariantIds}\n\t\t\t\t\t\t\tonSelectedVariantIdsChange={onSelectedVariantIdsChange}\n\t\t\t\t\t\t\tonVariantFieldChange={onVariantFieldChange}\n\t\t\t\t\t\t\tonVariantFieldBlur={onVariantFieldBlur}\n\t\t\t\t\t\t\tonCreateVariant={onCreateVariant}\n\t\t\t\t\t\t\tonGenerateVariants={onGenerateVariants}\n\t\t\t\t\t\t\tonSelectVariant={onSelectVariant}\n\t\t\t\t\t\t\tonEditVariant={onEditVariant}\n\t\t\t\t\t\t\tonDuplicateVariant={onDuplicateVariant}\n\t\t\t\t\t\t\tonDeleteVariant={onDeleteVariant}\n\t\t\t\t\t\t\tonBulkEdit={onBulkEdit}\n\t\t\t\t\t\t\tonBulkApply={onBulkApply}\n\t\t\t\t\t\t\tonBulkDelete={onBulkDelete}\n\t\t\t\t\t\t\trenderVariantActions={renderVariantActions}\n\t\t\t\t\t\t\trenderBulkActions={renderBulkActions}\n\t\t\t\t\t\t\tstrings={{\n\t\t\t\t\t\t\t\ttitle: strings.variantsTitle,\n\t\t\t\t\t\t\t\tgenerateLabel: strings.generateLabel,\n\t\t\t\t\t\t\t\t...variantsStrings,\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</section>\n\t\t\t\t</Stack>\n\t\t\t</Stack>\n\t\t</Card>\n\t);\n}\n\nProductVariantsManager.displayName = 'ProductVariantsManager';\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"products.js","names":["getPlainText","_Fragment","isPresent","_Fragment","resolveComponentScale","useDensityConfig","cn","Text","focusRecipes","Button","Grid","Stack","dotRecipes","neutralFillRecipes","regionRecipes","AlertTitle","Alert","AlertDescription","Card","Progress","compositionRhythm","compositionClasses","useOverlayVisibility","ConfirmDialog","interactionRecipes","Value","SecondaryValue","Percent","Badge","BatchActionBar","Separator","fieldAffordanceRecipes","Input","FormField","Textarea","Switch","Select","Checkbox","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","productBlockProps","className","ProductEmptyState","action","ProductRowActions","actions","item","getPlainText$1","isScalarText","value","getOptionEditLabel","optionName","option","prefix","isBlank","getBlankDraftFields","draft","getOptionDraft","OPTION_COMMAND_SELECTOR","ROW_CONTROL_SELECTOR","ProductOptionsMatrix","showHeaderProp","stringsProp","strings","useStrings","isCollapsedControlled","collapsedOptionIds","internalCollapsedOptionIds","setInternalCollapsedOptionIds","useState","defaultCollapsedOptionIds","resolvedCollapsedOptionIds","collapsedOptionIdSet","useMemo","supportsInlineEditing","editingOptionId","defaultEditingOptionId","onEditingOptionIdChange","onOptionNameChange","onValueLabelChange","onDoneEditingOption","onSaveEditingOption","onCancelEditingOption","isEditingControlled","internalEditingOptionId","setInternalEditingOptionId","draftByOptionId","setDraftByOptionId","savingRef","useRef","mountedRef","savingOptionId","setSavingOptionId","saveFailure","setSaveFailure","errorRef","invalidDraft","setInvalidDraft","editorId","useId","nextDraftValueId","focusValueIdRef","focusAddedValue","useCallback","node","isSaving","resolvedEditingOptionId","hasGroups","optionGroups","showPanelHeader","surface","showCreateRow","onCreateOption","updateCollapsedOptionIds","nextIds","onCollapsedOptionIdsChange","toggleCollapsed","id","updateEditingOptionId","nextId","startEditing","current","onEditOption","getResolvedDraft","updateDraft","updater","cancelEditing","_removed","rest","commitEditing","originalValues","originalValueIds","draftValueIds","result","draftValue","onAddValue","onDeleteValue","error","onError","bodyRef","itemRefs","previousEditingOptionIdRef","focusOptionIdRef","deletedOptionRef","takeDroppedFocusTarget","body","optionId","deleted","items","neighbour","restoreDroppedFocus","active","focusDropped","target","focusAfterConfirmation","noteDeletedOption","group","useEffect","previous","registerItem","removeValuesConfirm","pendingSave","setPendingSave","invalidFocusRequest","setInvalidFocusRequest","saveEditing","blank","removed","confirmDelete","deleteOption","onDeleteOption","deleteOptionConfirm","pendingDeleteOption","setPendingDeleteOption","requestDeleteOption","headerAction","Plus","panelHeader","content","values","isCollapsed","canInlineEdit","isEditing","canEdit","canDelete","canAddValue","optionDraft","optionFailure","optionInvalid","clearInvalid","field","isSavingOption","renderedActions","renderOptionActions","optionIndex","menuActions","Trash2","defaultActions","showInlineActions","resolvedActions","nextName","event","valueInvalid","valueErrorId","valueIndex","nextLabel","reservedIds","optionSummary","deleteValue","renderedValue","renderValue","Fragment","X","showCollapseControls","ChevronDown","onToggleUsedForVariants","showVariantToggle","checked","PlusCircle","empty","interpolateString","PRODUCT_TONE_BADGE","PRODUCT_TONE_TEXT","PRODUCT_STATUS_TONES","isProductStatusTone","tone","clampProductPercent","ProductToneDot","ProductMetricTile","icon","metric","DisplayLabel","PRODUCT_ROW_CONTENT","PRODUCT_ROW_TITLE","PRODUCT_ROW_ACTIONS","isPresent$1","ProductRowHeading","title","label","hasValue","badge","ProductRowSelect","onSelect","ProductStructureMetricRow","ProductReadinessRow","state","select","actionFallback","ProductOperationRow","ProductSummaryRow","actionLabel","ProductContractOverview","hasContent","metrics","terms","rules","onOpenContract","onEditContract","onCreateRule","onSelectRule","rule","onEdit","onEditRule","onDelete","onDeleteRule","ruleActions","Eye","Pencil","rowActions","renderRuleActions","ProductDetailsCard","onEditDetails","description","metadata","media","ProductOperationsCard","onCreateOperation","onSelectOperation","onEditOperation","onDeleteOperation","operationActions","renderOperationActions","renderItem","ProductOptionActionMenu","onSelectOption","menuLabel","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","storageKey","ProductOverview","hasRail","readiness","structure","operations","quote","slots","mainClassName","details","contract","railClassName","productVariantMenuActions","ProductVariantActionMenu","onDuplicate","onClick","isPresent","getDefaultMetadata","labels","ProductVariantDetails","variantActionStrings","resolvedMetadata","renderActions","hasCustomActions","onBack","ArrowLeft","selectedOptions","renderMetadata","optionItems","toSelectOptions","choices","choice","ProductVariantEditor","valueProp","formIdProp","generatedFormId","formId","isControlled","internalValue","setInternalValue","defaultValue","internalSubmitting","setInternalSubmitting","resolvedSubmitting","submitting","isDisabled","disabled","isFieldVisible","visibleFields","showIdentity","showCommercial","updateValue","next","onValueChange","updateField","nextValue","updateOption","handleSubmit","onSubmit","defaultFooter","onCancel","hasDefaultFooter","showHeader","errors","statusOptions","optionFields","fieldValue","hasChoices","children","footerSlot","DEFAULT_VISIBLE_COLUMNS","DEFAULT_OPTION_COMBINATION_DISPLAY","DEFAULT_CELL_DISPLAY","DEFAULT_SELECTION_MODE","getPlainText","getOptionValue","directValue","valueId","getVariantName","getVariantOptionSummary","getOptionCombinationLabel","getGroupLabel","getGroupKey","declared","selectedIdsToRows","ids","rowById","renderFieldValue","hasCellValue","isEditableField","column","resolveCellDisplay","display","getFieldChangeContext","VariantFieldInput","setDraft","onBlur","keepsDraft","renderVariantCellValue","plainValue","Primitive","textClassName","ProductVariantsBulkTable","isSelectionControlled","selectedVariantIds","internalSelectedIds","setInternalSelectedIds","defaultSelectedVariantIds","hasBulkActions","renderBulkActions","onBulkEdit","onBulkApply","onBulkDelete","isSelectable","selectionMode","onSelectedVariantIdsChange","selectedIds","selectedRows","selectedIdSet","visibleColumnSet","visibleColumns","groupByOption","groupByOptionId","rowIndexById","groupKeyById","orderedVariants","groupOrder","key","aOrder","a","bOrder","b","groupCounts","counts","hasBulkControls","hasRows","allRowsSelected","someRowsSelected","selectAllRef","hasRowActions","tableColumnCount","updateSelection","nextRows","clearSelection","toggleRow","toggleAll","bulkContext","onGenerateVariants","customBulkActions","bulkToolbar","displayIndex","groupLabel","previousVariant","groupKey","shouldRenderGroup","isSelected","actionContext","summaryOptionGroups","groupedVariantName","variantName","optionLabel","optionLabelMatchesVariantName","createCellContext","onVariantFieldChange","onVariantFieldBlur","renderCellContent","context","rendered","renderCell","fallback","shouldRenderOptionCombination","optionCombinationDisplay","renderedOptionCombination","renderOptionCombination","defaultRowActions","cellDisplay","ProductVariantsManager","size","defaultScale","groupableOptions","fallbackGroupByOptionId","isGroupByControlled","internalGroupByOptionId","setInternalGroupByOptionId","defaultGroupByOptionId","resolvedGroupByOptionId","showGroupBy","hasJoinedTools","onSearchVariants","onFilterVariants","hasTools","groupByOptions","updateGroupByOptionId","matchedOption","onGroupByOptionIdChange","optionsStrings","controlsEnd","Search","ListFilter","variantsStrings"],"sources":["../../src/components/features/products/products.strings.ts","../../src/components/features/products/partials/product-surface.ts","../../src/components/features/products/partials/product-empty-state.tsx","../../src/components/features/products/partials/product-actions.tsx","../../src/components/features/products/components/product-options-matrix.tsx","../../src/components/features/products/partials/product-tone.tsx","../../src/components/features/products/partials/product-metric-tile.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-operations-card.tsx","../../src/components/features/products/components/product-option-action-menu.tsx","../../src/components/features/products/components/product-options-summary.tsx","../../src/components/features/products/components/product-policies-card.tsx","../../src/components/features/products/components/product-quote-preview-card.tsx","../../src/components/features/products/components/product-readiness-card.tsx","../../src/components/features/products/components/product-structure-card.tsx","../../src/components/features/products/components/product-variants-table.tsx","../../src/components/features/products/components/product-overview.tsx","../../src/components/features/products/components/product-variant-action-menu.tsx","../../src/components/features/products/components/product-variant-details.tsx","../../src/components/features/products/components/product-variant-editor.tsx","../../src/components/features/products/components/product-variants-bulk-table.tsx","../../src/components/features/products/components/product-variants-manager.tsx"],"sourcesContent":["export interface ProductReadinessCardStrings {\n\t/** Surface title. */\n\ttitle: string;\n\t/** Supporting copy shown under the label. */\n\tdescription: string;\n\tscoreLabel: string;\n\tprogressLabel: string;\n\tcreateLabel: string;\n\teditLabel: string;\n\tdeleteLabel: string;\n\tactionsLabel: string;\n\temptyTitle: string;\n\temptyDescription: string;\n\tactionLabel: string;\n}\n\nexport const defaultProductReadinessCardStrings: ProductReadinessCardStrings = {\n\ttitle: 'Readiness',\n\tdescription: 'Publishing checks and operational setup.',\n\tscoreLabel: 'Overall readiness',\n\tprogressLabel: 'Readiness progress',\n\tcreateLabel: 'Add check',\n\teditLabel: 'Edit check',\n\tdeleteLabel: 'Delete check',\n\tactionsLabel: 'Check actions',\n\temptyTitle: 'No readiness checks',\n\temptyDescription: 'Pass readiness items from your product workflow to show progress.',\n\tactionLabel: 'Open',\n};\n\nexport interface ProductStructureCardStrings {\n\t/** Surface title. */\n\ttitle: string;\n\t/** Supporting copy shown under the label. */\n\tdescription: string;\n\tcreateLabel: string;\n\tviewLabel: string;\n\teditLabel: string;\n\tdeleteLabel: string;\n\tactionsLabel: string;\n\temptyTitle: string;\n\temptyDescription: string;\n}\n\nexport const defaultProductStructureCardStrings: ProductStructureCardStrings = {\n\ttitle: 'Structure',\n\tdescription: 'Media, taxonomy, options, and content coverage.',\n\tcreateLabel: 'Add metric',\n\tviewLabel: 'Open',\n\teditLabel: 'Edit metric',\n\tdeleteLabel: 'Delete metric',\n\tactionsLabel: 'Metric actions',\n\temptyTitle: 'No structure metrics',\n\temptyDescription: 'Pass structure metrics to summarize the product setup.',\n};\n\nexport interface ProductOperationsCardStrings {\n\t/** Surface title. */\n\ttitle: string;\n\t/** Supporting copy shown under the label. */\n\tdescription: string;\n\tcreateLabel: string;\n\teditLabel: string;\n\tdeleteLabel: string;\n\tactionsLabel: string;\n\temptyTitle: string;\n\temptyDescription: string;\n\tactionLabel: string;\n}\n\nexport const defaultProductOperationsCardStrings: ProductOperationsCardStrings = {\n\ttitle: 'Operations',\n\tdescription: 'Availability, channels, service rules, and fulfilment signals.',\n\tcreateLabel: 'Add signal',\n\teditLabel: 'Edit signal',\n\tdeleteLabel: 'Delete signal',\n\tactionsLabel: 'Signal actions',\n\temptyTitle: 'No operational signals',\n\temptyDescription: 'Pass operational rows to show channel and availability health.',\n\tactionLabel: 'Open',\n};\n\nexport interface ProductDetailsCardStrings {\n\t/** Surface title. */\n\ttitle: string;\n\t/** Supporting copy shown under the label. */\n\tdescription: string;\n\teditLabel: string;\n\temptyTitle: string;\n\temptyDescription: string;\n}\n\nexport const defaultProductDetailsCardStrings: ProductDetailsCardStrings = {\n\ttitle: 'Product details',\n\tdescription: 'Core identity and catalogue fields.',\n\teditLabel: 'Edit details',\n\temptyTitle: 'No details',\n\temptyDescription: 'Pass metadata rows to render product details.',\n};\n\nexport interface ProductContractOverviewStrings {\n\t/** Surface title. */\n\ttitle: string;\n\t/** Supporting copy shown under the label. */\n\tdescription: string;\n\ttermsTitle: string;\n\trulesTitle: string;\n\tactionLabel: string;\n\teditLabel: string;\n\tcreateRuleLabel: string;\n\tviewRuleLabel: string;\n\teditRuleLabel: string;\n\tdeleteRuleLabel: string;\n\truleActionsLabel: string;\n\temptyTitle: string;\n\temptyDescription: string;\n}\n\nexport const defaultProductContractOverviewStrings: ProductContractOverviewStrings = {\n\ttitle: 'Contract',\n\tdescription: 'Commercial terms, pricing rules, and customer-facing conditions.',\n\ttermsTitle: 'Terms',\n\trulesTitle: 'Rules',\n\tactionLabel: 'Manage contract',\n\teditLabel: 'Edit contract',\n\tcreateRuleLabel: 'Add rule',\n\tviewRuleLabel: 'Open rule',\n\teditRuleLabel: 'Edit rule',\n\tdeleteRuleLabel: 'Delete rule',\n\truleActionsLabel: 'Rule actions',\n\temptyTitle: 'No contract summary',\n\temptyDescription: 'Pass metrics, terms, or rules to summarize the product contract.',\n};\n\nexport interface ProductOptionsSummaryStrings {\n\t/** Surface title. */\n\ttitle: string;\n\t/** Supporting copy shown under the label. */\n\tdescription: string;\n\tmanageLabel: string;\n\tcreateLabel: string;\n\tviewLabel: string;\n\teditLabel: string;\n\tdeleteLabel: string;\n\tactionsLabel: string;\n\temptyTitle: string;\n\temptyDescription: string;\n}\n\nexport const defaultProductOptionsSummaryStrings: ProductOptionsSummaryStrings = {\n\ttitle: 'Options',\n\tdescription: 'Variant-driving choices and add-ons customers can select.',\n\tmanageLabel: 'Manage options',\n\tcreateLabel: 'Add option',\n\tviewLabel: 'Open option',\n\teditLabel: 'Edit option',\n\tdeleteLabel: 'Delete option',\n\tactionsLabel: 'Option actions',\n\temptyTitle: 'No options',\n\temptyDescription: 'Pass option groups to summarize configurable product choices.',\n};\n\nexport interface ProductOptionActionMenuStrings {\n\tviewLabel: string;\n\teditLabel: string;\n\tdeleteLabel: string;\n\tactionsLabel: string;\n}\n\nexport const defaultProductOptionActionMenuStrings: ProductOptionActionMenuStrings = {\n\tviewLabel: 'Open option',\n\teditLabel: 'Edit option',\n\tdeleteLabel: 'Delete option',\n\tactionsLabel: 'Option actions',\n};\n\nexport interface ProductOptionsMatrixStrings {\n\t/** Surface title. */\n\ttitle: string;\n\t/** Supporting copy shown under the label. */\n\tdescription: string;\n\tcreateLabel: string;\n\teditLabel: string;\n\tdeleteLabel: string;\n\taddValueLabel: string;\n\taddAnotherValueLabel: string;\n\taddAnotherOptionLabel: string;\n\tdeleteValueLabel: string;\n\t/** Title of the confirmation shown before an option group is deleted. */\n\tconfirmDeleteOptionTitle: string;\n\t/** Title of the confirmation shown when saving would drop option values. */\n\tconfirmRemoveValuesTitle: string;\n\t/**\n\t * Consequence of saving an edit that drops values. Receives `{{count}}`, the\n\t * number of values the save removes.\n\t */\n\tconfirmRemoveValuesDescription: string;\n\t/** Confirm button for a save that drops values. */\n\tconfirmRemoveValuesLabel: string;\n\t/** Sentence explaining what deleting an option group takes with it. */\n\tconfirmDeleteOptionDescription: string;\n\tdoneLabel: string;\n\tsaveLabel: string;\n\t/** Pending option-save copy. Optional for compatibility with complete legacy string objects. */\n\tsavingLabel?: string;\n\t/** Heading for a rejected option save. */\n\tsaveErrorTitle?: string;\n\t/** Fallback when a rejection has no displayable Error message. */\n\tsaveErrorMessage?: string;\n\t/** Save command after a rejected option save. */\n\tretrySaveLabel?: string;\n\tcancelLabel: string;\n\texpandOptionLabel: string;\n\tcollapseOptionLabel: string;\n\tactionsLabel: string;\n\toptionNameLabel: string;\n\t/** Shown under the option name when a save is attempted with a blank name. */\n\toptionNameRequiredMessage?: string;\n\toptionValuesLabel: string;\n\t/** Shown under a value when a save is attempted with a blank label. */\n\toptionValueRequiredMessage?: string;\n\tvaluesLabel: string;\n\tuseForVariantsLabel: string;\n\tusedForVariantsLabel: string;\n\tnotUsedForVariantsLabel: string;\n\temptyTitle: string;\n\temptyDescription: string;\n\tnoValuesLabel: string;\n}\n\nexport const defaultProductOptionsMatrixStrings: ProductOptionsMatrixStrings = {\n\ttitle: 'Variant options',\n\tdescription: 'Define option groups and values before generating sellable variants.',\n\tcreateLabel: 'Add attribute',\n\teditLabel: 'Configure',\n\tdeleteLabel: 'Delete option',\n\taddValueLabel: 'Add value',\n\taddAnotherValueLabel: 'Add another value',\n\taddAnotherOptionLabel: 'Add another option',\n\tdeleteValueLabel: 'Delete value',\n\tconfirmDeleteOptionTitle: 'Delete this option?',\n\tconfirmRemoveValuesTitle: 'Save and remove these values?',\n\tconfirmRemoveValuesDescription: 'Saving removes {{count}} value(s) from this option, and any variant built from them goes with it. This cannot be undone.',\n\tconfirmRemoveValuesLabel: 'Save changes',\n\tconfirmDeleteOptionDescription: 'Its values are removed from the product, and any variant built from them goes with it. This cannot be undone.',\n\tdoneLabel: 'Done',\n\tsaveLabel: 'Save',\n\tsavingLabel: 'Saving…',\n\tsaveErrorTitle: 'Changes were not saved',\n\tsaveErrorMessage: 'Your draft has been kept. Try again.',\n\tretrySaveLabel: 'Retry save',\n\tcancelLabel: 'Cancel',\n\texpandOptionLabel: 'Expand option',\n\tcollapseOptionLabel: 'Collapse option',\n\tactionsLabel: 'Option actions',\n\toptionNameLabel: 'Option name',\n\toptionNameRequiredMessage: 'Enter an option name.',\n\toptionValuesLabel: 'Option values',\n\toptionValueRequiredMessage: 'Enter a value or remove it.',\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\t/** Group by choice that leaves the variant list flat. */\n\tnoGroupingLabel?: 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\tnoGroupingLabel: 'None',\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/** Labels of the variant commands in the header's overflow menu. Omitted keys keep the action-menu defaults. */\n\tvariantActions?: Partial<ProductVariantActionMenuStrings>;\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\tvariantActions: defaultProductVariantActionMenuStrings,\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 { cn } from '../../../../lib/utils';\n\n/**\n * Product surfaces used to render through the deprecated ContentBlock adapter\n * and now compose Card directly. They keep the DOM hooks that adapter painted,\n * so consumer selectors written against them still match.\n */\nexport function productBlockProps(className?: string) {\n\treturn {\n\t\tsurface: 'flat',\n\t\tpadding: 'none',\n\t\t'data-component': 'content-block',\n\t\t'data-slot': 'content-block',\n\t\tclassName: cn('content-block--component', className),\n\t\theaderClassName: 'content-block--header',\n\t\tcontentClassName: 'content-block--content',\n\t\tfooterClassName: 'content-block--footer',\n\t} as const;\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\tsurface=\"wash\"\n\t\t\ttitle={title}\n\t\t\tdescription={description}\n\t\t\tactions={action}\n\t\t\tclassName={cn('product-empty-state--component', className)}\n\t\t/>\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 {compositionClasses} from '../../../base/structure/composition.recipes';\nimport { ChevronDown, Plus, PlusCircle, Trash2, X } from 'lucide-react';\nimport { Fragment, useCallback, useEffect, useId, useMemo, useRef, useState, type ReactNode } from 'react';\n\nimport { Badge } from '../../../base/badge';\nimport { Button } from '../../../base/buttons';\nimport { Alert, AlertDescription, AlertTitle } from '../../../base/feedback';\nimport { ConfirmDialog, useOverlayVisibility } from '../../overlays';\nimport { interpolateString } from '../../../../lib/strings';\nimport { Card } from '../../../base/cards';\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 { productBlockProps } from '../partials/product-surface';\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';\nimport { regionRecipes } from '../../../../lib/surface-recipes';\n\nfunction getPlainText(value: ReactNode): string {\n\treturn isScalarText(value) ? String(value) : '';\n}\n\nfunction isScalarText(value: ReactNode): value is string | number | bigint {\n\treturn typeof value === 'string' || typeof value === 'number' || typeof value === 'bigint';\n}\n\nfunction getOptionEditLabel(prefix: string, option: ProductOptionGroup): string {\n\tconst optionName = getPlainText(option.name);\n\treturn optionName ? `${prefix}: ${optionName}` : prefix;\n}\n\nconst isBlank = (value: ReactNode) => isScalarText(value) && String(value).trim() === '';\n\n/** The blank fields of a draft: its name and the ids of its blank value labels. Rich labels are not editable here. */\nfunction getBlankDraftFields(draft: ProductOptionEditDraft) {\n\treturn {\n\t\tname: draft.name.trim() === '',\n\t\tvalueIds: draft.values.filter((value) => isBlank(value.label)).map((value) => value.id),\n\t};\n}\n\ninterface InvalidDraft {\n\toptionId: string;\n\tname: boolean;\n\tvalueIds: readonly string[];\n}\n\nfunction getOptionDraft(option: ProductOptionGroup): ProductOptionEditDraft {\n\treturn {\n\t\tname: getPlainText(option.name),\n\t\tvalues: (option.values ?? []).map((value) => ({\n\t\t\t...value,\n\t\t})),\n\t};\n}\n\nconst OPTION_COMMAND_SELECTOR = '.product-options-matrix--edit-trigger:not(:disabled), .product-options-matrix--edit-summary:not(:disabled)';\nconst ROW_CONTROL_SELECTOR = 'button:not(:disabled), a[href]';\n\nexport function ProductOptionsMatrix({\n\toptionGroups = [],\n\tsurface = 'card',\n\tcollapsedOptionIds,\n\tdefaultCollapsedOptionIds = [],\n\tonCollapsedOptionIdsChange,\n\teditingOptionId,\n\tdefaultEditingOptionId,\n\tonEditingOptionIdChange,\n\tonCreateOption,\n\tonEditOption,\n\tonDeleteOption,\n\tconfirmDelete,\n\tonAddValue,\n\tonDeleteValue,\n\tonOptionNameChange,\n\tonValueLabelChange,\n\tonDoneEditingOption,\n\tonSaveEditingOption,\n\tonError,\n\tonCancelEditingOption,\n\tonToggleUsedForVariants,\n\trenderOptionActions,\n\trenderValue,\n\tshowHeader: showHeaderProp,\n\tshowCollapseControls = true,\n\tshowInlineActions = true,\n\tshowVariantToggle = true,\n\tactions,\n\theaderEnd,\n\tfooterSlot,\n\tempty,\n\tclassName,\n\tstrings: stringsProp,\n}: ProductOptionsMatrixProps) {\n\tconst strings = useStrings(defaultProductOptionsMatrixStrings, stringsProp);\n\tconst isCollapsedControlled = collapsedOptionIds !== undefined;\n\tconst [internalCollapsedOptionIds, setInternalCollapsedOptionIds] = useState(defaultCollapsedOptionIds);\n\tconst resolvedCollapsedOptionIds = isCollapsedControlled ? collapsedOptionIds : internalCollapsedOptionIds;\n\tconst collapsedOptionIdSet = useMemo(() => new Set(resolvedCollapsedOptionIds), [resolvedCollapsedOptionIds]);\n\tconst supportsInlineEditing =\n\t\teditingOptionId !== undefined ||\n\t\tdefaultEditingOptionId !== undefined ||\n\t\t!!onEditingOptionIdChange ||\n\t\t!!onOptionNameChange ||\n\t\t!!onValueLabelChange ||\n\t\t!!onDoneEditingOption ||\n\t\t!!onSaveEditingOption ||\n\t\t!!onCancelEditingOption;\n\tconst isEditingControlled = editingOptionId !== undefined;\n\tconst [internalEditingOptionId, setInternalEditingOptionId] = useState<string | null>(defaultEditingOptionId ?? null);\n\tconst [draftByOptionId, setDraftByOptionId] = useState<Record<string, ProductOptionEditDraft>>({});\n\tconst savingRef = useRef(false);\n\tconst mountedRef = useRef(true);\n\tconst [savingOptionId, setSavingOptionId] = useState<string | null>(null);\n\tconst [saveFailure, setSaveFailure] = useState<{ optionId: string; message: string } | null>(null);\n\tconst errorRef = useRef<HTMLDivElement>(null);\n\t// Blank fields found by the last save attempt. Each mark clears as its field is edited.\n\tconst [invalidDraft, setInvalidDraft] = useState<InvalidDraft | null>(null);\n\tconst editorId = useId();\n\tconst nextDraftValueId = useRef(0);\n\t// A value added from the editor takes focus, so it can be typed at once.\n\tconst focusValueIdRef = useRef<string | null>(null);\n\tconst focusAddedValue = useCallback((node: HTMLInputElement | null) => {\n\t\tif (!node) return;\n\t\tnode.focus();\n\t\tfocusValueIdRef.current = null;\n\t}, []);\n\tconst isSaving = savingOptionId !== null;\n\tuseEffect(() => {\n\t\tmountedRef.current = true;\n\t\treturn () => { mountedRef.current = false; };\n\t}, []);\n\tconst resolvedEditingOptionId = supportsInlineEditing\n\t\t? (isEditingControlled ? editingOptionId : internalEditingOptionId)\n\t\t: null;\n\tconst hasGroups = optionGroups.length > 0;\n\tconst showPanelHeader = surface === 'embedded' && showHeaderProp !== false;\n\tconst showCreateRow = hasGroups && !!onCreateOption;\n\n\tconst updateCollapsedOptionIds = useCallback(\n\t\t(nextIds: string[]) => {\n\t\t\tif (!isCollapsedControlled) {\n\t\t\t\tsetInternalCollapsedOptionIds(nextIds);\n\t\t\t}\n\t\t\tonCollapsedOptionIdsChange?.(\n\t\t\t\tnextIds,\n\t\t\t\toptionGroups.filter((option) => nextIds.includes(option.id)),\n\t\t\t);\n\t\t},\n\t\t[isCollapsedControlled, onCollapsedOptionIdsChange, optionGroups],\n\t);\n\n\tconst toggleCollapsed = useCallback(\n\t\t(option: ProductOptionGroup) => {\n\t\t\tif (savingRef.current) return;\n\t\t\tconst nextIds = collapsedOptionIdSet.has(option.id)\n\t\t\t\t? resolvedCollapsedOptionIds.filter((id) => id !== option.id)\n\t\t\t\t: [...resolvedCollapsedOptionIds, option.id];\n\t\t\tupdateCollapsedOptionIds(nextIds);\n\t\t},\n\t\t[collapsedOptionIdSet, resolvedCollapsedOptionIds, updateCollapsedOptionIds],\n\t);\n\n\tconst updateEditingOptionId = useCallback(\n\t\t(nextId: string | null, option?: ProductOptionGroup) => {\n\t\t\tif (!supportsInlineEditing) return;\n\t\t\tif (!isEditingControlled) {\n\t\t\t\tsetInternalEditingOptionId(nextId);\n\t\t\t}\n\t\t\tonEditingOptionIdChange?.(nextId, option);\n\t\t},\n\t\t[isEditingControlled, onEditingOptionIdChange, supportsInlineEditing],\n\t);\n\n\tconst startEditing = useCallback(\n\t\t(option: ProductOptionGroup) => {\n\t\t\tif (savingRef.current) return;\n\t\t\tif (supportsInlineEditing && isScalarText(option.name)) {\n\t\t\t\tsetSaveFailure(null);\n\t\t\t\tsetDraftByOptionId((current) => ({\n\t\t\t\t\t...current,\n\t\t\t\t\t[option.id]: getOptionDraft(option),\n\t\t\t\t}));\n\t\t\t\tupdateEditingOptionId(option.id, option);\n\t\t\t}\n\t\t\tonEditOption?.(option);\n\t\t},\n\t\t[onEditOption, supportsInlineEditing, updateEditingOptionId],\n\t);\n\n\tconst getResolvedDraft = useCallback(\n\t\t(option: ProductOptionGroup) => draftByOptionId[option.id] ?? getOptionDraft(option),\n\t\t[draftByOptionId],\n\t);\n\n\tconst updateDraft = useCallback(\n\t\t(option: ProductOptionGroup, updater: (draft: ProductOptionEditDraft) => ProductOptionEditDraft) => {\n\t\t\tif (savingRef.current) return;\n\t\t\tsetDraftByOptionId((current) => ({\n\t\t\t\t...current,\n\t\t\t\t[option.id]: updater(current[option.id] ?? getOptionDraft(option)),\n\t\t\t}));\n\t\t},\n\t\t[],\n\t);\n\n\tconst cancelEditing = useCallback(\n\t\t(option: ProductOptionGroup) => {\n\t\t\tif (savingRef.current) return;\n\t\t\tconst draft = getResolvedDraft(option);\n\t\t\tsetSaveFailure(null);\n\t\t\tsetInvalidDraft(null);\n\t\t\tsetDraftByOptionId((current) => {\n\t\t\t\tconst { [option.id]: _removed, ...rest } = current;\n\t\t\t\treturn rest;\n\t\t\t});\n\t\t\tupdateEditingOptionId(null, option);\n\t\t\tonCancelEditingOption?.(option, draft);\n\t\t},\n\t\t[getResolvedDraft, onCancelEditingOption, updateEditingOptionId],\n\t);\n\n\t/*\n\t * The per-value trash button only edits a local draft — nothing is destroyed\n\t * until the edit is saved, and Cancel already abandons it. The destructive\n\t * moment is here, where the diff emits `onDeleteValue` once per dropped\n\t * value, so the confirmation belongs to the save and asks once for all of\n\t * them rather than once each.\n\t */\n\tconst commitEditing = useCallback(\n\t\tasync (option: ProductOptionGroup) => {\n\t\t\tif (savingRef.current) return false;\n\t\t\tsavingRef.current = true;\n\t\t\tsetSavingOptionId(option.id);\n\t\t\tsetSaveFailure(null);\n\t\t\tconst draft = getResolvedDraft(option);\n\t\t\tconst originalValues = option.values ?? [];\n\t\t\tconst originalValueIds = new Set(originalValues.map((value) => value.id));\n\t\t\tconst draftValueIds = new Set(draft.values.map((value) => value.id));\n\n\t\t\ttry {\n\t\t\t\t// Void callbacks keep their existing synchronous notification timing.\n\t\t\t\t// Only a returned Promise defers acceptance and the draft's disposal.\n\t\t\t\tconst result = onSaveEditingOption?.(option, draft);\n\t\t\t\tif (result) await result;\n\t\t\t\tif (!mountedRef.current) return false;\n\t\t\t\tif (draft.name !== getPlainText(option.name)) onOptionNameChange?.(option, draft.name);\n\t\t\t\toriginalValues.forEach((value) => {\n\t\t\t\t\tconst draftValue = draft.values.find((item) => item.id === value.id);\n\t\t\t\t\tif (draftValue && getPlainText(value.label) !== getPlainText(draftValue.label)) {\n\t\t\t\t\t\tonValueLabelChange?.(option, value, getPlainText(draftValue.label));\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tdraft.values.forEach((value) => {\n\t\t\t\t\tif (!originalValueIds.has(value.id)) {\n\t\t\t\t\t\tonAddValue?.(option, value);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\toriginalValues.forEach((value) => {\n\t\t\t\t\tif (!draftValueIds.has(value.id)) {\n\t\t\t\t\t\tonDeleteValue?.(option, value);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tsetDraftByOptionId((current) => {\n\t\t\t\t\tconst { [option.id]: _removed, ...rest } = current;\n\t\t\t\t\treturn rest;\n\t\t\t\t});\n\t\t\t\tupdateEditingOptionId(null, option);\n\t\t\t\tonDoneEditingOption?.(option);\n\t\t\t\treturn true;\n\t\t\t} catch (error) {\n\t\t\t\tif (mountedRef.current) {\n\t\t\t\t\tsetSaveFailure({ optionId: option.id, message: error instanceof Error && error.message ? error.message : strings.saveErrorMessage ?? defaultProductOptionsMatrixStrings.saveErrorMessage! });\n\t\t\t\t\tonError?.(error);\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t} finally {\n\t\t\t\tsavingRef.current = false;\n\t\t\t\tif (mountedRef.current) setSavingOptionId(null);\n\t\t\t}\n\t\t},\n\t\t[getResolvedDraft, onAddValue, onDeleteValue, onDoneEditingOption, onOptionNameChange, onSaveEditingOption, onError, onValueLabelChange, strings.saveErrorMessage, updateEditingOptionId],\n\t);\n\n\t/*\n\t * Closing the editor unmounts the control that held focus (Save or Cancel),\n\t * and a confirmed delete removes the row that opened the confirmation. Focus\n\t * then returns to the command that opens the option's editor, or to the row\n\t * that took a deleted option's place. A focus the user or the app placed\n\t * elsewhere stays; a confirmation that still holds focus is waited for.\n\t */\n\tconst bodyRef = useRef<HTMLDivElement>(null);\n\tconst itemRefs = useRef(new Map<string, HTMLElement>());\n\tconst previousEditingOptionIdRef = useRef(resolvedEditingOptionId);\n\tconst focusOptionIdRef = useRef<string | null>(null);\n\tconst deletedOptionRef = useRef<{ id: string; index: number } | null>(null);\n\t// The control that should hold focus once an editor or a deleted row is\n\t// gone: the option's command, or the row that took a deleted option's place.\n\tconst takeDroppedFocusTarget = useCallback((): HTMLElement | null => {\n\t\tconst body = bodyRef.current;\n\t\tif (!body?.isConnected) return null;\n\t\tconst optionId = focusOptionIdRef.current;\n\t\tfocusOptionIdRef.current = null;\n\n\t\t// A deleted option has no row left; its neighbour takes the focus instead.\n\t\tconst item = optionId ? itemRefs.current.get(optionId) : undefined;\n\t\tif (item) return item.querySelector<HTMLElement>(OPTION_COMMAND_SELECTOR) ?? item.querySelector<HTMLElement>(ROW_CONTROL_SELECTOR);\n\t\tconst deleted = deletedOptionRef.current;\n\t\t// Until the app removes the option, its row still holds the commands.\n\t\tif (!deleted || itemRefs.current.has(deleted.id)) return null;\n\t\tdeletedOptionRef.current = null;\n\t\tconst items = body.querySelectorAll<HTMLElement>('.product-options-matrix--item');\n\t\tconst neighbour = items[Math.min(deleted.index, items.length - 1)];\n\t\t// With no option left, the first control is the create command.\n\t\treturn neighbour?.querySelector<HTMLElement>(OPTION_COMMAND_SELECTOR)\n\t\t\t?? neighbour?.querySelector<HTMLElement>(ROW_CONTROL_SELECTOR)\n\t\t\t?? body.querySelector<HTMLElement>(ROW_CONTROL_SELECTOR);\n\t}, []);\n\tconst restoreDroppedFocus = useCallback(() => {\n\t\tconst body = bodyRef.current;\n\t\tif (!body?.isConnected || savingRef.current) return;\n\t\tconst active = body.ownerDocument.activeElement;\n\t\t// An open confirmation names its own target through `finalFocus` when it closes.\n\t\tif (active?.closest('[role=alertdialog]')) return;\n\t\tconst focusDropped = !active || active === body.ownerDocument.body;\n\t\tconst target = takeDroppedFocusTarget();\n\t\tif (focusDropped) target?.focus();\n\t}, [takeDroppedFocusTarget]);\n\t// Where a closing confirmation sends focus. Its opener (Save, or a row\n\t// menu item) is usually gone by then, so the overlay is told the target;\n\t// `true` keeps the overlay's default of returning to the opener.\n\tconst focusAfterConfirmation = useCallback(\n\t\t() => (savingRef.current ? true : takeDroppedFocusTarget() ?? true),\n\t\t[takeDroppedFocusTarget],\n\t);\n\tconst noteDeletedOption = useCallback((option: ProductOptionGroup) => {\n\t\tconst index = optionGroups.findIndex((group) => group.id === option.id);\n\t\tdeletedOptionRef.current = index === -1 ? null : { id: option.id, index };\n\t}, [optionGroups]);\n\t// A delete without a confirmation has no dialog to wait for: the row leaves\n\t// when the app updates its options. A closing row menu restores focus in a\n\t// microtask of its own, so this follows it.\n\tuseEffect(() => {\n\t\tif (deletedOptionRef.current) queueMicrotask(restoreDroppedFocus);\n\t}, [optionGroups, restoreDroppedFocus]);\n\tuseEffect(() => {\n\t\tconst previous = previousEditingOptionIdRef.current;\n\t\tpreviousEditingOptionIdRef.current = resolvedEditingOptionId;\n\t\tif (previous && previous !== resolvedEditingOptionId) focusOptionIdRef.current = previous;\n\t\t// The row's commands stay disabled until the save settles.\n\t\tif (!isSaving) restoreDroppedFocus();\n\t}, [resolvedEditingOptionId, isSaving, restoreDroppedFocus]);\n\tconst registerItem = (optionId: string) => (node: HTMLElement | null) => {\n\t\tif (node) itemRefs.current.set(optionId, node);\n\t\telse itemRefs.current.delete(optionId);\n\t};\n\n\tconst removeValuesConfirm = useOverlayVisibility();\n\tconst [pendingSave, setPendingSave] = useState<{ option: ProductOptionGroup; removed: number } | null>(null);\n\tuseEffect(() => {\n\t\tif (saveFailure && !removeValuesConfirm.isOpen) {\n\t\t\terrorRef.current?.focus();\n\t\t\terrorRef.current?.scrollIntoView?.({ block: 'nearest' });\n\t\t}\n\t}, [saveFailure, removeValuesConfirm.isOpen]);\n\n\t// A rejected draft moves focus to its first blank field; each attempt asks again.\n\tconst [invalidFocusRequest, setInvalidFocusRequest] = useState<{ optionId: string } | null>(null);\n\tuseEffect(() => {\n\t\tif (!invalidFocusRequest) return;\n\t\titemRefs.current.get(invalidFocusRequest.optionId)?.querySelector<HTMLElement>('input[aria-invalid=\"true\"]')?.focus();\n\t}, [invalidFocusRequest]);\n\n\tconst saveEditing = useCallback(\n\t\t(option: ProductOptionGroup) => {\n\t\t\tif (savingRef.current) return;\n\t\t\tconst draft = getResolvedDraft(option);\n\t\t\t// A blank name or value label is never saved, so nothing is confirmed or reported.\n\t\t\tconst blank = getBlankDraftFields(draft);\n\t\t\tif (blank.name || blank.valueIds.length > 0) {\n\t\t\t\tsetSaveFailure(null);\n\t\t\t\tsetInvalidDraft({ optionId: option.id, ...blank });\n\t\t\t\tsetInvalidFocusRequest({ optionId: option.id });\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tsetInvalidDraft(null);\n\t\t\tconst draftValueIds = new Set(draft.values.map((value) => value.id));\n\t\t\tconst removed = (option.values ?? []).filter((value) => !draftValueIds.has(value.id)).length;\n\n\t\t\tif (confirmDelete === false || removed === 0) {\n\t\t\t\tvoid commitEditing(option);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tsetPendingSave({ option, removed });\n\t\t\tremoveValuesConfirm.show();\n\t\t},\n\t\t[commitEditing, confirmDelete, getResolvedDraft, removeValuesConfirm],\n\t);\n\n\tconst deleteOption = useCallback(\n\t\t(option: ProductOptionGroup) => {\n\t\t\tif (savingRef.current) return;\n\t\t\tif (resolvedEditingOptionId === option.id) {\n\t\t\t\tsetDraftByOptionId((current) => {\n\t\t\t\t\tconst { [option.id]: _removed, ...rest } = current;\n\t\t\t\t\treturn rest;\n\t\t\t\t});\n\t\t\t\tupdateEditingOptionId(null, option);\n\t\t\t}\n\t\t\tonDeleteOption?.(option);\n\t\t},\n\t\t[onDeleteOption, resolvedEditingOptionId, updateEditingOptionId],\n\t);\n\n\t/*\n\t * Deleting an option group silently takes its values — and every variant\n\t * built from them — with it. That is too much to lose to a single click on\n\t * an overflow-menu item, so it asks first. `confirmDelete={false}` opts out\n\t * for apps that already confirm upstream.\n\t */\n\tconst deleteOptionConfirm = useOverlayVisibility();\n\tconst [pendingDeleteOption, setPendingDeleteOption] = useState<ProductOptionGroup | null>(null);\n\n\tconst requestDeleteOption = useCallback(\n\t\t(option: ProductOptionGroup) => {\n\t\t\tif (savingRef.current) return;\n\t\t\tif (confirmDelete === false) {\n\t\t\t\tnoteDeletedOption(option);\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, noteDeletedOption],\n\t);\n\n\tconst headerAction = onCreateOption ? (\n\t\t<Button type=\"button\" tone=\"neutral\" onClick={() => { if (!savingRef.current) onCreateOption(); }} disabled={isSaving} icon={Plus}>\n\t\t\t{strings.createLabel}\n\t\t</Button>\n\t) : undefined;\n\n\tconst panelHeader = showPanelHeader ? (\n\t\t<div className=\"product-options-matrix--panel-header p-surface\">\n\t\t<Stack direction=\"horizontal\" gap=\"md\" justify=\"between\">\n\t\t\t<Text type=\"inherit\" weight=\"semibold\">{strings.title}</Text>\n\t\t\t{headerAction}\n\t\t</Stack>\n\t\t</div>\n\t) : null;\n\n\tconst content = (\n\t\t<div ref={bodyRef} className=\"product-options-matrix--body min-w-0\">\n\t\t\t<div className=\"product-options-matrix--panel overflow-hidden rounded-surface border border-border bg-background text-foreground\">\n\t\t\t\t{panelHeader}\n\n\t\t\t\t{!hasGroups ? (\n\t\t\t\t\t<div className={cn(showPanelHeader && regionRecipes.footer)}>\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 && regionRecipes.footer)}>\n\t\t\t\t\t\t{optionGroups.map((option, optionIndex) => {\n\t\t\t\t\t\t\tconst values = option.values ?? [];\n\t\t\t\t\t\t\tconst isCollapsed = collapsedOptionIdSet.has(option.id);\n\t\t\t\t\t\t\tconst canInlineEdit = supportsInlineEditing && isScalarText(option.name);\n\t\t\t\t\t\t\tconst isEditing = canInlineEdit && resolvedEditingOptionId === option.id;\n\t\t\t\t\t\t\tconst canEdit = !!onEditOption || canInlineEdit;\n\t\t\t\t\t\t\tconst canDelete = !!onDeleteOption;\n\t\t\t\t\t\t\tconst canAddValue = !!onAddValue;\n\t\t\t\t\t\t\tconst optionDraft = getResolvedDraft(option);\n\t\t\t\t\t\t\tconst optionFailure = saveFailure?.optionId === option.id ? saveFailure : null;\n\t\t\t\t\t\t\tconst optionInvalid = invalidDraft?.optionId === option.id ? invalidDraft : null;\n\t\t\t\t\t\t\tconst clearInvalid = (field: 'name' | { valueId: string }) => setInvalidDraft((current) => {\n\t\t\t\t\t\t\t\tif (!current || current.optionId !== option.id) return current;\n\t\t\t\t\t\t\t\treturn field === 'name'\n\t\t\t\t\t\t\t\t\t? { ...current, name: false }\n\t\t\t\t\t\t\t\t\t: { ...current, valueIds: current.valueIds.filter((id) => id !== field.valueId) };\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tconst isSavingOption = savingOptionId === option.id;\n\t\t\t\t\t\t\tconst renderedActions = renderOptionActions?.(option, {\n\t\t\t\t\t\t\t\tindex: optionIndex,\n\t\t\t\t\t\t\t\tonEdit: canEdit && !isSaving ? () => startEditing(option) : undefined,\n\t\t\t\t\t\t\t\tonDelete: onDeleteOption && !isSaving ? () => requestDeleteOption(option) : undefined,\n\t\t\t\t\t\t\t\tonAddValue: onAddValue && !isSaving ? () => { if (!savingRef.current) onAddValue(option); } : undefined,\n\t\t\t\t\t\t\t\tonToggleCollapsed: () => toggleCollapsed(option),\n\t\t\t\t\t\t\t\tcollapsed: isCollapsed,\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\tconst menuActions = [\n\t\t\t\t\t\t\t\t...(canAddValue ? [{\n\t\t\t\t\t\t\t\t\tid: 'add-value',\n\t\t\t\t\t\t\t\t\tlabel: strings.addValueLabel,\n\t\t\t\t\t\t\t\t\tdisabled: isSaving,\n\t\t\t\t\t\t\t\t\ticon: <Plus className=\"size-icon-md\" />,\n\t\t\t\t\t\t\t\t\tonClick: () => { if (!savingRef.current) onAddValue?.(option); },\n\t\t\t\t\t\t\t\t\ttone: 'secondary' as const, buttonStyle: 'ghost' as const,\n\t\t\t\t\t\t\t\t}] : []),\n\t\t\t\t\t\t\t\t...(canDelete ? [{\n\t\t\t\t\t\t\t\t\tid: 'delete',\n\t\t\t\t\t\t\t\t\tlabel: strings.deleteLabel,\n\t\t\t\t\t\t\t\t\tdisabled: isSaving,\n\t\t\t\t\t\t\t\t\ticon: <Trash2 className=\"size-icon-md\" />,\n\t\t\t\t\t\t\t\t\tonClick: () => requestDeleteOption(option),\n\t\t\t\t\t\t\t\t\ttone: 'destructive' as const,\n\t\t\t\t\t\t\t\t}] : []),\n\t\t\t\t\t\t\t];\n\n\t\t\t\t\t\t\tconst defaultActions = showInlineActions && (canEdit || menuActions.length > 0) ? (\n\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t{!!canEdit && (\n\t\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\ttone=\"secondary\"\n\t\t\t\t\t\t\t\t\t\t\tbuttonStyle=\"ghost\"\n\t\t\t\t\t\t\t\t\t\t\tonClick={() => startEditing(option)}\n\t\t\t\t\t\t\t\t\t\t\tdisabled={isSaving}\n\t\t\t\t\t\t\t\t\t\t\tclassName=\"product-options-matrix--edit-trigger\"\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\tref={registerItem(option.id)}\n\t\t\t\t\t\t\t\t\t\tclassName=\"product-options-matrix--item product-options-matrix--item-editing border-b border-border/60 p-surface last:border-b-0\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t<Stack gap=\"lg\" className=\"product-options-matrix--editor\" aria-busy={isSavingOption}>\n\t\t\t\t\t\t\t\t\t\t\t\t{optionFailure && <Alert ref={errorRef} tabIndex={-1} tone=\"destructive\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<AlertTitle>{strings.saveErrorTitle ?? defaultProductOptionsMatrixStrings.saveErrorTitle}</AlertTitle>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<AlertDescription>{optionFailure.message}</AlertDescription>\n\t\t\t\t\t\t\t\t\t\t\t\t</Alert>}\n\t\t\t\t\t\t\t\t\t\t\t\t<FormField\n\t\t\t\t\t\t\t\t\t\t\t\t\tlabel={strings.optionNameLabel}\n\t\t\t\t\t\t\t\t\t\t\t\t\terror={optionInvalid?.name ? strings.optionNameRequiredMessage ?? defaultProductOptionsMatrixStrings.optionNameRequiredMessage : undefined}\n\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"product-options-matrix--editor-field\"\n\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Input\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tvalue={optionDraft.name}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisabled={isSaving}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tinvalid={!!optionInvalid?.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\tclearInvalid('name');\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, valueIndex) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tconst valueInvalid = !!optionInvalid?.valueIds.includes(value.id);\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tconst valueErrorId = `${editorId}-value-${valueIndex}-error`;\n\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// The field owner draws the message under the row; the input names it.\n\t\t\t\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\t\t\t\tkey={value.id}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\terror={valueInvalid ? strings.optionValueRequiredMessage ?? defaultProductOptionsMatrixStrings.optionValueRequiredMessage : undefined}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsupportingTextId={valueErrorId}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"product-options-matrix--editor-value-field\"\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<div\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"product-options-matrix--editor-value grid min-w-0 grid-cols-[minmax(0,1fr)_auto] items-center gap-space-sm\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{isScalarText(value.label) ? (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Input\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tref={value.id === focusValueIdRef.current ? focusAddedValue : undefined}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvalue={getPlainText(value.label)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisabled={isSaving}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tinvalid={valueInvalid}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\taria-describedby={valueInvalid ? valueErrorId : undefined}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tonChange={(event) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tconst nextLabel = event.currentTarget.value;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclearInvalid({ valueId: value.id });\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tupdateDraft(option, (draft) => ({\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t...draft,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvalues: draft.values.map((item) => (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\titem.id === value.id\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? { ...item, label: nextLabel }\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: item\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t)),\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}));\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\taria-label={`${strings.optionValuesLabel}: ${getPlainText(value.label)}`}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"bg-background\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div className=\"min-w-0\">{value.label}</div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsize=\"sm\" iconOnly\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttone=\"secondary\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tbuttonStyle=\"ghost\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclearInvalid({ valueId: value.id });\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.filter((item) => item.id !== value.id),\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.deleteValueLabel}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisabled={isSaving}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"text-muted-foreground hover:text-destructive\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Trash2 className=\"size-icon-sm\" aria-hidden=\"true\" />\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Text tag=\"span\" size=\"pxs\" className=\"sr-only\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{strings.deleteValueLabel}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</FormField>\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\t<div className=\"product-options-matrix--editor-add-value min-w-0\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttone=\"secondary\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tbuttonStyle=\"outline\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisabled={isSaving}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tif (savingRef.current) return;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tconst reservedIds = new Set([...(option.values ?? []), ...optionDraft.values].map((value) => value.id));\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tlet id: string;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdo {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tid = `${option.id}-draft-value-${++nextDraftValueId.current}`;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t} while (reservedIds.has(id));\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfocusValueIdRef.current = id;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tupdateDraft(option, (draft) => ({\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t...draft,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvalues: [...draft.values, { id, label: '' }],\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}));\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfullWidth\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"justify-start text-muted-foreground\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{strings.addAnotherValueLabel}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t\t\t\t\t\t\t</Stack>\n\n\t\t\t\t\t\t\t\t\t\t\t<Stack direction=\"horizontal\" gap=\"md\" justify=\"between\" wrap={false} className=\"product-options-matrix--editor-actions\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{!!onDeleteOption && (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttone=\"destructive\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tbuttonStyle=\"outline\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={() => requestDeleteOption(option)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisabled={isSaving}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{strings.deleteLabel}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t<Stack direction=\"horizontal\" gap=\"sm\" justify=\"end\" wrap={false}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Button type=\"button\" tone=\"secondary\" buttonStyle=\"ghost\" onClick={() => cancelEditing(option)} disabled={isSaving}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{strings.cancelLabel}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Button type=\"button\" tone=\"neutral\" onClick={() => saveEditing(option)} disabled={isSaving} loading={isSavingOption} strings={{ loading: strings.savingLabel }}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{optionFailure ? strings.retrySaveLabel ?? strings.saveLabel : strings.saveLabel ?? strings.doneLabel}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tconst optionSummary = (\n\t\t\t\t\t\t\t\t<Stack render={<span />} gap=\"sm\">\n\t\t\t\t\t\t\t\t\t<Stack render={<span />} direction=\"horizontal\" gap=\"sm\">\n\t\t\t\t\t\t\t\t\t\t<Text type=\"inherit\" tag=\"span\" weight=\"semibold\" className=\"min-w-0 whitespace-normal break-words\">\n\t\t\t\t\t\t\t\t\t\t\t{option.name}\n\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t\t{option.badge}\n\t\t\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t\t\t\t{!!option.description && (\n\t\t\t\t\t\t\t\t\t\t<Text tag=\"span\" size=\"xs\" type=\"secondary\" className=\"max-w-prose\">\n\t\t\t\t\t\t\t\t\t\t\t{option.description}\n\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t{!isCollapsed && (\n\t\t\t\t\t\t\t\t\t\t<Stack render={<span />} gap=\"sm\" className=\"product-options-matrix--values\">\n\t\t\t\t\t\t\t\t\t\t\t{values.length === 0 ? (\n\t\t\t\t\t\t\t\t\t\t\t\t<Text tag=\"span\" size=\"xs\" type=\"secondary\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t{strings.noValuesLabel}\n\t\t\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"flex flex-wrap gap-space-xs\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t{values.map((value, valueIndex) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tconst deleteValue = onDeleteValue ? () => { if (!savingRef.current) onDeleteValue(option, value); } : undefined;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tconst renderedValue = renderValue?.(value, {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\toption,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\toptionIndex,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvalueIndex,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tonDelete: deleteValue,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tif (renderedValue) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\treturn <Fragment key={value.id}>{renderedValue}</Fragment>;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Badge\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tkey={value.id}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttone=\"neutral\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName={cn('product-options-matrix--value', value.disabled && 'opacity-50')}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{isScalarText(value.label) ? (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Text type=\"inherit\" tag=\"span\" size=\"inherit\" className=\"min-w-0 whitespace-normal break-words\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{value.label}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvalue.label\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{value.badge}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{!!deleteValue && showInlineActions && (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={deleteValue}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisabled={isSaving}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\taria-label={strings.deleteValueLabel}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t// The badge clips its label row, so the focus halo is drawn inside.\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName={cn(fieldAffordanceRecipes.target, fieldAffordanceRecipes.focus, focusRecipes.inset, fieldAffordanceRecipes.clear, 'hover:text-destructive')}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<X className={fieldAffordanceRecipes.icon} aria-hidden=\"true\" />\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Text tag=\"span\" size=\"pxs\" className=\"sr-only\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{strings.deleteValueLabel}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Badge>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\tkey={option.id}\n\t\t\t\t\t\t\t\t\tref={registerItem(option.id)}\n\t\t\t\t\t\t\t\t\tclassName=\"product-options-matrix--item border-b border-border/60 last:border-b-0\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<div className={cn('grid min-w-0 items-center gap-x-space-md gap-y-space-md p-surface', showCollapseControls ? 'grid-cols-[auto_minmax(0,1fr)] @2xl/product-options-matrix:grid-cols-[auto_minmax(0,1fr)_auto]' : 'grid-cols-1 @2xl/product-options-matrix:grid-cols-[minmax(0,1fr)_auto]')}>\n\t\t\t\t\t\t\t\t\t\t{showCollapseControls && (\n\t\t\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\t\tsize=\"sm\" iconOnly\n\t\t\t\t\t\t\t\t\t\t\t\ttone=\"secondary\"\n\t\t\t\t\t\t\t\t\t\t\t\tbuttonStyle=\"ghost\"\n\t\t\t\t\t\t\t\t\t\t\t\tonClick={() => toggleCollapsed(option)}\n\t\t\t\t\t\t\t\t\t\t\t\tdisabled={isSaving}\n\t\t\t\t\t\t\t\t\t\t\t\taria-expanded={!isCollapsed}\n\t\t\t\t\t\t\t\t\t\t\t\taria-label={isCollapsed ? strings.expandOptionLabel : strings.collapseOptionLabel}\n\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"product-options-matrix--collapse-trigger mt-space-2xs shrink-0 text-muted-foreground\"\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t<ChevronDown className={cn('size-icon-sm transition-transform', isCollapsed && '-rotate-90')} aria-hidden=\"true\" />\n\t\t\t\t\t\t\t\t\t\t\t\t<Text tag=\"span\" size=\"pxs\" className=\"sr-only\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t{isCollapsed ? strings.expandOptionLabel : strings.collapseOptionLabel}\n\t\t\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t\t\t\t\t<div className=\"product-options-matrix--item-main min-w-0\">\n\t\t\t\t\t\t\t\t\t\t\t{canEdit && !showInlineActions ? (\n\t\t\t\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={() => startEditing(option)}\n\t\t\t\t\t\t\t\t\t\t\t\t\tdisabled={isSaving}\n\t\t\t\t\t\t\t\t\t\t\t\t\taria-label={getOptionEditLabel(strings.editLabel, option)}\n\t\t\t\t\t\t\t\t\t\t\t\t\tclassName={`product-options-matrix--edit-summary ${interactionRecipes.nativeButtonReset} block w-full cursor-pointer whitespace-normal rounded-radius text-start text-inherit outline-none ${focusRecipes.edge}`}\n\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t{optionSummary}\n\t\t\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t\t\t) : optionSummary}\n\t\t\t\t\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t\t\t\t\t{((!!onToggleUsedForVariants && showVariantToggle) || !!resolvedActions) && (\n\t\t\t\t\t\t\t\t\t\t\t<div className={cn('product-options-matrix--item-actions flex min-w-0 flex-wrap items-center justify-start @2xl/product-options-matrix:col-start-auto @2xl/product-options-matrix:justify-end', showCollapseControls ? 'col-start-2' : 'col-start-1', compositionClasses.commands)}>\n\t\t\t\t\t\t\t\t\t\t\t\t{!!onToggleUsedForVariants && showVariantToggle && (\n\t\t\t\t\t\t\t\t\t\t\t\t\t<div className=\"inline-flex items-center gap-space-sm\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttag=\"span\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tid={`product-option-${option.id}-variant-toggle-label`}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsize=\"pxs\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"secondary\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tweight=\"medium\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{strings.useForVariantsLabel}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Switch\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tchecked={!!option.usedForVariants}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisabled={isSaving}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tonValueChange={(checked) => { if (!savingRef.current) onToggleUsedForVariants(option, checked); }}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\taria-labelledby={`product-option-${option.id}-variant-toggle-label`}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t\t{resolvedActions}\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t})}\n\t\t\t\t\t\t{!!showCreateRow && (\n\t\t\t\t\t\t\t<div className={cn('product-options-matrix--create-row p-surface-xs', regionRecipes.footer)}>\n\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\ttone=\"secondary\"\n\t\t\t\t\t\t\t\t\tbuttonStyle=\"ghost\"\n\t\t\t\t\t\t\t\t\tonClick={() => { if (!savingRef.current) onCreateOption?.(); }}\n\t\t\t\t\t\t\t\t\tdisabled={isSaving}\n\t\t\t\t\t\t\t\t\ticon={PlusCircle}\n\t\t\t\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t\t\t\tfullWidth\n\t\t\t\t\t\t\t\t\tclassName=\"justify-start text-foreground\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{strings.addAnotherOptionLabel}\n\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t\t{!!(confirmDelete !== false && pendingSave) && (\n\t\t\t\t<ConfirmDialog\n\t\t\t\t\t{...removeValuesConfirm.overlayProps}\n\t\t\t\t\tdestructive\n\t\t\t\t\ttitle={strings.confirmRemoveValuesTitle}\n\t\t\t\t\tfinalFocus={focusAfterConfirmation}\n\t\t\t\t\tdescription={interpolateString(strings.confirmRemoveValuesDescription, { count: pendingSave.removed })}\n\t\t\t\t\tstrings={{ confirm: saveFailure?.optionId === pendingSave.option.id ? strings.retrySaveLabel : strings.confirmRemoveValuesLabel, cancel: strings.cancelLabel, loading: strings.savingLabel }}\n\t\t\t\t\talertMessage={saveFailure?.optionId === pendingSave.option.id ? saveFailure.message : undefined}\n\t\t\t\t\tcloseOnAsyncComplete={false}\n\t\t\t\t\tonAsyncConfirm={async () => {\n\t\t\t\t\t\tif (await commitEditing(pendingSave.option)) removeValuesConfirm.hide();\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t)}\n\t\t\t{!!(confirmDelete !== false && onDeleteOption) && (\n\t\t\t\t<ConfirmDialog\n\t\t\t\t\t{...deleteOptionConfirm.overlayProps}\n\t\t\t\t\tdestructive\n\t\t\t\t\ttitle={strings.confirmDeleteOptionTitle}\n\t\t\t\t\tfinalFocus={focusAfterConfirmation}\n\t\t\t\t\tdescription={strings.confirmDeleteOptionDescription}\n\t\t\t\t\tstrings={{ confirm: strings.deleteLabel, cancel: strings.cancelLabel }}\n\t\t\t\t\tonConfirm={() => {\n\t\t\t\t\t\tif (!pendingDeleteOption) return;\n\t\t\t\t\t\tnoteDeletedOption(pendingDeleteOption);\n\t\t\t\t\t\tdeleteOption(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<Card\n\t\t\t{...productBlockProps(cn('product-options-matrix--component @container/product-options-matrix w-full', className))}\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>\n\t\t\t{content}\n\t\t</Card>\n\t);\n}\n\nProductOptionsMatrix.displayName = 'ProductOptionsMatrix';\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 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/** A value is present unless it is missing or blank; a numeric zero is a value. */\nconst isPresent = (value: ReactNode): boolean => (\n\tvalue !== undefined && value !== null && value !== false && value !== ''\n);\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\tconst hasValue = isPresent(value);\n\tif (!hasValue && !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{hasValue && (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 { Card } from '../../../base/cards';\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 { productBlockProps } from '../partials/product-surface';\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 * Internal region of `ProductOverview`; not exported from the family.\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<Card\n\t\t\t{...productBlockProps(cn('product-contract-overview--component w-full', className))}\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>\n\t\t\t{!hasContent ? (\n\t\t\t\tempty ?? (\n\t\t\t\t\t<ProductEmptyState\n\t\t\t\t\t\ttitle={strings.emptyTitle}\n\t\t\t\t\t\tdescription={strings.emptyDescription}\n\t\t\t\t\t\taction={onCreateRule ? (\n\t\t\t\t\t\t\t<Button tone=\"primary\" type=\"button\" onClick={onCreateRule} icon={Plus}>\n\t\t\t\t\t\t\t\t{strings.createRuleLabel}\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t) : undefined}\n\t\t\t\t\t/>\n\t\t\t\t)\n\t\t\t) : (\n\t\t\t\t<Stack gap=\"2xl\">\n\t\t\t\t\t{metrics.length > 0 && (\n\t\t\t\t\t\t<Grid columns={{ base: 1, sm: 3 }} gap=\"md\">\n\t\t\t\t\t\t\t{metrics.map((metric) => (\n\t\t\t\t\t\t\t\t<ProductMetricTile key={metric.id} metric={metric} />\n\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t</Grid>\n\t\t\t\t\t)}\n\t\t\t\t\t{terms.length > 0 && (\n\t\t\t\t\t\t<Stack gap=\"md\">\n\t\t\t\t\t\t\t<Text type=\"inherit\" weight=\"semibold\">{strings.termsTitle}</Text>\n\t\t\t\t\t\t\t<MetadataList adaptTo=\"container\" items={terms} columns={2} density=\"compact\" />\n\t\t\t\t\t\t</Stack>\n\t\t\t\t\t)}\n\t\t\t\t\t{rules.length > 0 && (\n\t\t\t\t\t\t<Stack gap=\"md\">\n\t\t\t\t\t\t\t<Text type=\"inherit\" weight=\"semibold\">{strings.rulesTitle}</Text>\n\t\t\t\t\t\t\t<ItemGroup>\n\t\t\t\t\t\t\t\t{rules.map((rule, index) => {\n\t\t\t\t\t\t\t\t\tconst onSelect = onSelectRule ? () => onSelectRule(rule) : undefined;\n\t\t\t\t\t\t\t\t\tconst onEdit = onEditRule ? () => onEditRule(rule) : undefined;\n\t\t\t\t\t\t\t\t\tconst onDelete = onDeleteRule ? () => onDeleteRule(rule) : undefined;\n\t\t\t\t\t\t\t\t\tconst ruleActions = [\n\t\t\t\t\t\t\t\t\t\t...(onSelect ? [{\n\t\t\t\t\t\t\t\t\t\t\tid: 'open',\n\t\t\t\t\t\t\t\t\t\t\tlabel: strings.viewRuleLabel,\n\t\t\t\t\t\t\t\t\t\t\ticon: <Eye className=\"size-icon-md\" />,\n\t\t\t\t\t\t\t\t\t\t\tonClick: () => onSelect(),\n\t\t\t\t\t\t\t\t\t\t\ttone: 'secondary' as const, buttonStyle: 'ghost' as const,\n\t\t\t\t\t\t\t\t\t\t}] : []),\n\t\t\t\t\t\t\t\t\t\t...(onEdit ? [{\n\t\t\t\t\t\t\t\t\t\t\tid: 'edit',\n\t\t\t\t\t\t\t\t\t\t\tlabel: strings.editRuleLabel,\n\t\t\t\t\t\t\t\t\t\t\ticon: <Pencil className=\"size-icon-md\" />,\n\t\t\t\t\t\t\t\t\t\t\tonClick: () => onEdit(),\n\t\t\t\t\t\t\t\t\t\t\ttone: 'secondary' as const, buttonStyle: 'ghost' as const,\n\t\t\t\t\t\t\t\t\t\t}] : []),\n\t\t\t\t\t\t\t\t\t\t...(onDelete ? [{\n\t\t\t\t\t\t\t\t\t\t\tid: 'delete',\n\t\t\t\t\t\t\t\t\t\t\tlabel: strings.deleteRuleLabel,\n\t\t\t\t\t\t\t\t\t\t\ticon: <Trash2 className=\"size-icon-md\" />,\n\t\t\t\t\t\t\t\t\t\t\tonClick: () => onDelete(),\n\t\t\t\t\t\t\t\t\t\t\ttone: 'destructive' as const,\n\t\t\t\t\t\t\t\t\t\t}] : []),\n\t\t\t\t\t\t\t\t\t];\n\t\t\t\t\t\t\t\t\tconst rowActions = renderRuleActions\n\t\t\t\t\t\t\t\t\t\t? renderRuleActions(rule, { index, onSelect, onEdit, onDelete })\n\t\t\t\t\t\t\t\t\t\t: <ProductRowActions item={rule} actions={ruleActions} menuLabel={strings.ruleActionsLabel} />;\n\n\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t<ProductSummaryRow\n\t\t\t\t\t\t\t\t\t\t\tkey={rule.id}\n\t\t\t\t\t\t\t\t\t\t\titem={rule}\n\t\t\t\t\t\t\t\t\t\t\tactions={rowActions}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t</ItemGroup>\n\t\t\t\t\t\t</Stack>\n\t\t\t\t\t)}\n\t\t\t\t</Stack>\n\t\t\t)}\n\t\t</Card>\n\t);\n}\n\nProductContractOverview.displayName = 'ProductContractOverview';\n","import { Button } from '../../../base/buttons';\nimport { Card } from '../../../base/cards';\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 { productBlockProps } from '../partials/product-surface';\nimport { ProductEmptyState } from '../partials/product-empty-state';\n\n/**\n * One main column region of the product editor.\n *\n * Internal region of `ProductOverview`; not exported from the family.\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<Card\n\t\t\t{...productBlockProps(cn('product-details-card--component w-full', className))}\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>\n\t\t\t{metadata.length === 0 && !media ? (\n\t\t\t\tempty ?? <ProductEmptyState title={strings.emptyTitle} description={strings.emptyDescription} />\n\t\t\t) : (\n\t\t\t\t<div className=\"@container/product-details\">\n\t\t\t\t\t<div className={cn('grid min-w-0 grid-cols-1 gap-space-xl', media && metadata.length > 0 && '@xl/product-details:grid-cols-[12rem_minmax(0,1fr)]')}>\n\t\t\t\t\t\t{!!media && (\n\t\t\t\t\t\t\t<div className=\"product-details-card--media self-start overflow-hidden rounded-radius border border-border bg-muted/30\">\n\t\t\t\t\t\t\t\t{media}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{metadata.length > 0 && <MetadataList\n\t\t\t\t\t\t\tadaptTo=\"container\"\n\t\t\t\t\t\t\titems={metadata}\n\t\t\t\t\t\t\tcolumns={media ? 1 : 2}\n\t\t\t\t\t\t\tdensity=\"compact\"\n\t\t\t\t\t\t\tclassName=\"min-w-0 [&_.metadata-list--value]:break-words\"\n\t\t\t\t\t\t/>}\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</Card>\n\t);\n}\n\nProductDetailsCard.displayName = 'ProductDetailsCard';\n","import { Pencil, Plus, Trash2 } from 'lucide-react';\n\nimport { Button } from '../../../base/buttons';\nimport { Card } from '../../../base/cards';\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 { productBlockProps } from '../partials/product-surface';\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 * Internal region of `ProductOverview`; not exported from the family.\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<Card\n\t\t\t{...productBlockProps(cn('product-operations-card--component w-full', className))}\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>\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</Card>\n\t);\n}\n\nProductOperationsCard.displayName = 'ProductOperationsCard';\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 * Internal part of the option and variant surfaces; not exported from the family.\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 { Plus, SlidersHorizontal } from 'lucide-react';\n\nimport { Button } from '../../../base/buttons';\nimport { Card } from '../../../base/cards';\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 { productBlockProps } from '../partials/product-surface';\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 * Internal region of `ProductOverview`; not exported from the family.\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<Card\n\t\t\t{...productBlockProps(cn('product-options-summary--component w-full', className))}\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>\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</Card>\n\t);\n}\n\nProductOptionsSummary.displayName = 'ProductOptionsSummary';\n","import { Pencil, Plus, Trash2 } from 'lucide-react';\n\nimport { Button } from '../../../base/buttons';\nimport { Card } from '../../../base/cards';\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 { productBlockProps } from '../partials/product-surface';\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 * Internal region of `ProductOverview`; not exported from the family.\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<Card\n\t\t\t{...productBlockProps(cn('product-policies-card--component w-full', className))}\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>\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</Card>\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 { Card } from '../../../base/cards';\nimport { 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 { productBlockProps } from '../partials/product-surface';\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 * Internal region of `ProductOverview`; not exported from the family.\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<Card\n\t\t\t{...productBlockProps(cn('product-quote-preview-card--component w-full', className))}\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>\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</Card>\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 { Card } from '../../../base/cards';\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 { productBlockProps } from '../partials/product-surface';\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 * Internal region of `ProductOverview`; not exported from the family.\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<Card\n\t\t\t{...productBlockProps(cn('product-readiness-card--component w-full', className))}\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>\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</Card>\n\t);\n}\n\nProductReadinessCard.displayName = 'ProductReadinessCard';\n","import { Eye, Pencil, Plus, Trash2 } from 'lucide-react';\n\nimport { Button } from '../../../base/buttons';\nimport { Card } from '../../../base/cards';\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 { productBlockProps } from '../partials/product-surface';\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 * Internal region of `ProductOverview`; not exported from the family.\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<Card\n\t\t\t{...productBlockProps(cn('product-structure-card--component w-full', className))}\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>\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</Card>\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 { Card } from '../../../base/cards';\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 { productBlockProps } from '../partials/product-surface';\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\t// A numeric zero is a figure, not a missing value.\n\tconst hasValue = value !== undefined && value !== null && value !== false && value !== '';\n\tconst Primitive = hasValue ? Value : SecondaryValue;\n\n\treturn (\n\t\t<Primitive\n\t\t\ttype={hasValue ? '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{hasValue ? 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\tstorageKey = 'product-variants',\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<Card\n\t\t\t{...productBlockProps(cn('product-variants-table--component w-full', className))}\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>\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\trowActionsDisplayMode=\"menu\"\n\t\t\t\t\tstorageKey={storageKey === false ? undefined : storageKey}\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\tactions: { menuLabel: strings.headers.actions },\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</Card>\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 * Internal part of the option and variant surfaces; not exported from the family.\n */\nexport function ProductVariantActionMenu({\n\tvariant,\n\tindex = 0,\n\tonSelectVariant,\n\tonEditVariant,\n\tonDuplicateVariant,\n\tonDeleteVariant,\n\trenderVariantActions,\n\tmenuLabel,\n\tclassName,\n\tstrings: stringsProp,\n}: ProductVariantActionMenuProps) {\n\tconst strings = useStrings(defaultProductVariantActionMenuStrings, stringsProp);\n\tconst onSelect = onSelectVariant ? () => onSelectVariant(variant) : undefined;\n\tconst onEdit = onEditVariant ? () => onEditVariant(variant) : undefined;\n\tconst onDuplicate = onDuplicateVariant ? () => onDuplicateVariant(variant) : undefined;\n\tconst onDelete = onDeleteVariant ? () => onDeleteVariant(variant) : undefined;\n\tconst hasActions = !!(onSelect || onEdit || onDuplicate || onDelete || renderVariantActions);\n\n\tif (!hasActions) return null;\n\n\tif (renderVariantActions) {\n\t\treturn (\n\t\t\t<div className={cn('product-variant-action-menu--component flex justify-end', className)}>\n\t\t\t\t{renderVariantActions(variant, { index, onSelect, onEdit, onDuplicate, onDelete })}\n\t\t\t</div>\n\t\t);\n\t}\n\n\treturn (\n\t\t<ProductRowActions<ProductVariantSummary>\n\t\t\titem={variant}\n\t\t\tmenuLabel={menuLabel ?? strings.actionsLabel}\n\t\t\tclassName={cn('product-variant-action-menu--component', className)}\n\t\t\tactions={productVariantMenuActions(\n\t\t\t\tvariant,\n\t\t\t\t{ onSelectVariant, onEditVariant, onDuplicateVariant, onDeleteVariant },\n\t\t\t\tstrings,\n\t\t\t).map(({ onClick, ...action }) => ({ ...action, onClick: () => onClick() }))}\n\t\t/>\n\t);\n}\n\nProductVariantActionMenu.displayName = 'ProductVariantActionMenu';\n","import {compositionClasses} from '../../../base/structure/composition.recipes';\nimport { ArrowLeft } from 'lucide-react';\nimport { useMemo, type ReactNode } from 'react';\n\nimport { Badge } from '../../../base/badge';\nimport { Button } from '../../../base/buttons';\nimport { Card } from '../../../base/cards';\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 { productBlockProps } from '../partials/product-surface';\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 variantActionStrings = useMemo(\n\t\t() => ({ ...defaultProductVariantActionMenuStrings, ...strings.variantActions }),\n\t\t[strings.variantActions],\n\t);\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\tvariantActionStrings,\n\t\t)\n\t\t: [];\n\tconst menuActions = [...variantActions, ...(actions ?? [])];\n\tconst hasCustomActions = !!(variant && renderActions);\n\tconst headerAction = (\n\t\t<div className={cn('product-variant-details--header-actions flex items-center', compositionClasses.commands)}>\n\t\t\t{!!onBack && (\n\t\t\t\t<Button type=\"button\" tone=\"secondary\" buttonStyle=\"ghost\" onClick={onBack} icon={ArrowLeft}>\n\t\t\t\t\t{strings.backLabel}\n\t\t\t\t</Button>\n\t\t\t)}\n\t\t\t{!!hasCustomActions && variant && (\n\t\t\t\t<ProductVariantActionMenu\n\t\t\t\t\tvariant={variant}\n\t\t\t\t\tonSelectVariant={onSelectVariant}\n\t\t\t\t\tonEditVariant={onEditVariant}\n\t\t\t\t\tonDuplicateVariant={onDuplicateVariant}\n\t\t\t\t\tonDeleteVariant={onDeleteVariant}\n\t\t\t\t\trenderVariantActions={renderActions}\n\t\t\t\t\tstrings={variantActionStrings}\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<Card\n\t\t\t{...productBlockProps(cn('product-variant-details--component w-full', className))}\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>\n\t\t\t{!variant ? (\n\t\t\t\tempty ?? (\n\t\t\t\t\t<ProductEmptyState\n\t\t\t\t\t\ttitle={strings.emptyTitle}\n\t\t\t\t\t\tdescription={strings.emptyDescription}\n\t\t\t\t\t/>\n\t\t\t\t)\n\t\t\t) : (\n\t\t\t\t<Stack gap=\"2xl\" className=\"product-variant-details--body\">\n\t\t\t\t\t{!!media && (\n\t\t\t\t\t\t<div className=\"product-variant-details--media overflow-hidden rounded-radius border border-border bg-muted/30\">\n\t\t\t\t\t\t\t{media}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)}\n\n\t\t\t\t\t{renderMetadata ? (\n\t\t\t\t\t\trenderMetadata(variant)\n\t\t\t\t\t) : resolvedMetadata.some(Boolean) && (\n\t\t\t\t\t\t// Same sub-section heading recipe as the option sections below.\n\t\t\t\t\t\t<Stack gap=\"md\" className=\"product-variant-details--facts\">\n\t\t\t\t\t\t\t<Text type=\"inherit\" weight=\"semibold\">{strings.factsTitle}</Text>\n\t\t\t\t\t\t\t<MetadataList\n\t\t\t\t\t\t\t\tadaptTo=\"container\"\n\t\t\t\t\t\t\t\titems={resolvedMetadata}\n\t\t\t\t\t\t\t\tcolumns={3}\n\t\t\t\t\t\t\t\tdensity=\"compact\"\n\t\t\t\t\t\t\t\tclassName=\"product-variant-details--metadata\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</Stack>\n\t\t\t\t\t)}\n\n\t\t\t\t\t{!!selectedOptions.length && (\n\t\t\t\t\t\t<Stack gap=\"md\" className=\"product-variant-details--selected-options\">\n\t\t\t\t\t\t\t<Text type=\"inherit\" weight=\"semibold\">{strings.selectedOptionsTitle}</Text>\n\t\t\t\t\t\t\t<div className=\"flex flex-wrap gap-space-sm\">\n\t\t\t\t\t\t\t\t{selectedOptions.map((option, index) => (\n\t\t\t\t\t\t\t\t\t<Badge key={index} tone=\"secondary\">\n\t\t\t\t\t\t\t\t\t\t{option}\n\t\t\t\t\t\t\t\t\t</Badge>\n\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</Stack>\n\t\t\t\t\t)}\n\n\t\t\t\t\t{!!optionItems.length && (\n\t\t\t\t\t\t<Stack gap=\"md\" className=\"product-variant-details--related-options\">\n\t\t\t\t\t\t\t<Text type=\"inherit\" weight=\"semibold\">{strings.relatedOptionsTitle}</Text>\n\t\t\t\t\t\t\t<ItemGroup>\n\t\t\t\t\t\t\t\t{optionItems.map((option: ProductOptionSummary, index) => (\n\t\t\t\t\t\t\t\t\trenderOption ? (\n\t\t\t\t\t\t\t\t\t\t<div key={option.id}>{renderOption(option, index)}</div>\n\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t<ProductSummaryRow\n\t\t\t\t\t\t\t\t\t\t\tkey={option.id}\n\t\t\t\t\t\t\t\t\t\t\titem={option}\n\t\t\t\t\t\t\t\t\t\t\tactionLabel={strings.viewOptionLabel}\n\t\t\t\t\t\t\t\t\t\t\tonSelect={onSelectOption ? () => onSelectOption(option) : undefined}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t</ItemGroup>\n\t\t\t\t\t\t</Stack>\n\t\t\t\t\t)}\n\t\t\t\t</Stack>\n\t\t\t)}\n\t\t</Card>\n\t);\n}\n\nProductVariantDetails.displayName = 'ProductVariantDetails';\n","import { type FormEvent, useId, useState } from 'react';\n\nimport { Button } from '../../../base/buttons';\nimport { Card } from '../../../base/cards';\nimport { FormField } from '../../../base/forms';\nimport { Input, Textarea } from '../../../base/text-inputs';\nimport { Select } from '../../../base/choice-inputs';\nimport { Stack } from '../../../base/structure';\nimport { compositionClasses } from '../../../base/structure/composition.recipes';\nimport { Text } from '../../../typography';\nimport { useStrings } from '../../../../lib/strings';\nimport { cn } from '../../../../lib/utils';\n\nimport { defaultProductVariantEditorStrings } from '../products.strings';\nimport type {\n\tProductChoice,\n\tProductVariantEditorField,\n\tProductVariantEditorProps,\n\tProductVariantEditorValues,\n\tProductVariantOptionField,\n} from '../products.types';\nimport { productBlockProps } from '../partials/product-surface';\n\nconst toSelectOptions = (choices: ProductChoice[]) => (\n\tchoices.map((choice) => ({\n\t\tvalue: choice.value,\n\t\tlabel: choice.label,\n\t\tdisabled: choice.disabled,\n\t}))\n);\n\nexport function ProductVariantEditor({\n\tvalue: valueProp,\n\tdefaultValue,\n\toptionFields = [],\n\tstatusOptions = [],\n\tonValueChange,\n\tonSubmit,\n\tonError,\n\tonCancel,\n\tonDelete,\n\tactions,\n\theaderEnd,\n\tfooterSlot,\n\tvisibleFields,\n\terrors,\n\tformId: formIdProp,\n\tshowHeader = true,\n\tchildren,\n\tdisabled = false,\n\tsubmitting = false,\n\tclassName,\n\tstrings: stringsProp,\n}: ProductVariantEditorProps) {\n\tconst strings = useStrings(defaultProductVariantEditorStrings, stringsProp);\n\tconst generatedFormId = useId();\n\tconst formId = formIdProp ?? generatedFormId;\n\tconst isControlled = valueProp !== undefined;\n\tconst [internalValue, setInternalValue] = useState<ProductVariantEditorValues>(defaultValue ?? {});\n\tconst [internalSubmitting, setInternalSubmitting] = useState(false);\n\tconst value = (isControlled ? valueProp : internalValue) ?? {};\n\tconst resolvedSubmitting = submitting || internalSubmitting;\n\tconst isDisabled = disabled || resolvedSubmitting;\n\tconst isFieldVisible = (field: ProductVariantEditorField) => visibleFields?.[field] !== false;\n\tconst showIdentity = isFieldVisible('name') || isFieldVisible('sku') || isFieldVisible('description');\n\tconst showCommercial = isFieldVisible('price') || isFieldVisible('inventory') || isFieldVisible('status') || isFieldVisible('channels');\n\n\tconst updateValue = (next: ProductVariantEditorValues) => {\n\t\tif (!isControlled) {\n\t\t\tsetInternalValue(next);\n\t\t}\n\n\t\tonValueChange?.(next);\n\t};\n\n\tconst updateField = (field: keyof Omit<ProductVariantEditorValues, 'options'>, nextValue: string) => {\n\t\tupdateValue({\n\t\t\t...value,\n\t\t\t[field]: nextValue,\n\t\t});\n\t};\n\n\tconst updateOption = (field: ProductVariantOptionField, nextValue: string | undefined) => {\n\t\tupdateValue({\n\t\t\t...value,\n\t\t\toptions: {\n\t\t\t\t...value.options,\n\t\t\t\t[field.id]: nextValue,\n\t\t\t},\n\t\t});\n\t};\n\n\tconst handleSubmit = async (event: FormEvent<HTMLFormElement>) => {\n\t\tevent.preventDefault();\n\t\tif (!onSubmit || resolvedSubmitting) return;\n\n\t\tsetInternalSubmitting(true);\n\t\ttry {\n\t\t\tawait onSubmit(value);\n\t\t} catch (error) {\n\t\t\tif (import.meta.env?.DEV) {\n\t\t\t\tconsole.warn('[ProductVariantEditor] Submit failed.', error);\n\t\t\t}\n\t\t\tonError?.(error);\n\t\t} finally {\n\t\t\tsetInternalSubmitting(false);\n\t\t}\n\t};\n\n\tconst defaultFooter = (\n\t\t<div className=\"product-variant-editor--footer flex flex-col-reverse gap-space-md @sm/product-variant-editor:flex-row @sm/product-variant-editor:items-center @sm/product-variant-editor:justify-between\">\n\t\t\t<div>\n\t\t\t\t{!!onDelete && (\n\t\t\t\t\t<Button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\ttone=\"destructive\"\n\t\t\t\t\t\tbuttonStyle=\"ghost\"\n\t\t\t\t\t\tonClick={() => onDelete(value)}\n\t\t\t\t\t\tdisabled={isDisabled}\n\t\t\t\t\t>\n\t\t\t\t\t\t{strings.deleteLabel}\n\t\t\t\t\t</Button>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t\t<div className=\"flex flex-col-reverse gap-space-md @sm/product-variant-editor:flex-row @sm/product-variant-editor:justify-end\">\n\t\t\t\t{!!onCancel && (\n\t\t\t\t\t<Button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\ttone=\"secondary\"\n\t\t\t\t\t\tbuttonStyle=\"ghost\"\n\t\t\t\t\t\tonClick={onCancel}\n\t\t\t\t\t\tdisabled={isDisabled}\n\t\t\t\t\t>\n\t\t\t\t\t\t{strings.cancelLabel}\n\t\t\t\t\t</Button>\n\t\t\t\t)}\n\t\t\t\t{!!onSubmit && (\n\t\t\t\t\t<Button tone=\"primary\"\n\t\t\t\t\t\ttype=\"submit\"\n\t\t\t\t\t\tform={formId}\n\t\t\t\t\t\tdisabled={isDisabled}\n\t\t\t\t\t>\n\t\t\t\t\t\t{resolvedSubmitting ? strings.savingLabel : strings.saveLabel}\n\t\t\t\t\t</Button>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t</div>\n\t);\n\tconst hasDefaultFooter = !!(onDelete || onCancel || onSubmit);\n\n\treturn (\n\t\t<Card\n\t\t\t{...productBlockProps(cn('product-variant-editor--component @container/product-variant-editor w-full', className))}\n\t\t\ttitle={showHeader ? strings.title : undefined}\n\t\t\tdescription={showHeader ? strings.description : undefined}\n\t\t\tactions={actions}\n\t\t\theaderEnd={headerEnd}\n\t\t\tfooterSlot={footerSlot}\n\t\t\t/*\n\t\t\t * The editor is a query container and its field pairs, footer, and\n\t\t\t * description span all switch on its width. It is mounted in a drawer or\n\t\t\t * a detail rail far more often than at page width; keyed to the viewport\n\t\t\t * it kept two-up fields in a 320px drawer on a desktop screen, at ~150px\n\t\t\t * a field. The 384px tier holds the two-column layout everywhere it\n\t\t\t * already renders — the narrowest is the 439px variant-details example —\n\t\t\t * and drops to one column below that.\n\t\t\t */\n\t\t>\n\t\t\t<Stack render={<form id={formId} onSubmit={handleSubmit} />} gap=\"2xl\" className=\"product-variant-editor--form\">\n\t\t\t\t{showIdentity && <section className={cn('product-variant-editor--section grid', compositionClasses.related)}>\n\t\t\t\t\t<Text type=\"inherit\" weight=\"semibold\">{strings.identityTitle}</Text>\n\t\t\t\t\t<div className={cn('grid @sm/product-variant-editor:grid-cols-2', compositionClasses.related)}>\n\t\t\t\t\t\t{isFieldVisible('name') && <FormField label={strings.fields.name} error={errors?.name} required>\n\t\t\t\t\t\t\t<Input\n\t\t\t\t\t\t\t\tvalue={value.name ?? ''}\n\t\t\t\t\t\t\t\tonChange={(event) => updateField('name', event.target.value)}\n\t\t\t\t\t\t\t\tinvalid={!!errors?.name}\n\t\t\t\t\t\t\t\tplaceholder={strings.placeholders.name}\n\t\t\t\t\t\t\t\tdisabled={isDisabled}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</FormField>}\n\t\t\t\t\t\t{isFieldVisible('sku') && <FormField label={strings.fields.sku} error={errors?.sku}>\n\t\t\t\t\t\t\t<Input\n\t\t\t\t\t\t\t\tvalue={value.sku ?? ''}\n\t\t\t\t\t\t\t\tonChange={(event) => updateField('sku', event.target.value)}\n\t\t\t\t\t\t\t\tinvalid={!!errors?.sku}\n\t\t\t\t\t\t\t\tplaceholder={strings.placeholders.sku}\n\t\t\t\t\t\t\t\tdisabled={isDisabled}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</FormField>}\n\t\t\t\t\t\t{isFieldVisible('description') && <FormField label={strings.fields.description} error={errors?.description} className=\"@sm/product-variant-editor:col-span-2\">\n\t\t\t\t\t\t\t<Textarea\n\t\t\t\t\t\t\t\tvalue={value.description ?? ''}\n\t\t\t\t\t\t\t\tonChange={(event) => updateField('description', event.target.value)}\n\t\t\t\t\t\t\t\tinvalid={!!errors?.description}\n\t\t\t\t\t\t\t\tplaceholder={strings.placeholders.description}\n\t\t\t\t\t\t\t\tdisabled={isDisabled}\n\t\t\t\t\t\t\t\tautoResize\n\t\t\t\t\t\t\t\tminRows={2}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</FormField>}\n\t\t\t\t\t</div>\n\t\t\t\t</section>}\n\n\t\t\t\t{showCommercial && <section className={cn('product-variant-editor--section grid', compositionClasses.related)}>\n\t\t\t\t\t<Text type=\"inherit\" weight=\"semibold\">{strings.commercialTitle}</Text>\n\t\t\t\t\t<div className={cn('grid @sm/product-variant-editor:grid-cols-2', compositionClasses.related)}>\n\t\t\t\t\t\t{isFieldVisible('price') && <FormField label={strings.fields.price} error={errors?.price}>\n\t\t\t\t\t\t\t<Input\n\t\t\t\t\t\t\t\tvalue={value.price ?? ''}\n\t\t\t\t\t\t\t\tonChange={(event) => updateField('price', event.target.value)}\n\t\t\t\t\t\t\t\tinvalid={!!errors?.price}\n\t\t\t\t\t\t\t\tplaceholder={strings.placeholders.price}\n\t\t\t\t\t\t\t\tdisabled={isDisabled}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</FormField>}\n\t\t\t\t\t\t{isFieldVisible('inventory') && <FormField label={strings.fields.inventory} error={errors?.inventory}>\n\t\t\t\t\t\t\t<Input\n\t\t\t\t\t\t\t\tvalue={value.inventory ?? ''}\n\t\t\t\t\t\t\t\tonChange={(event) => updateField('inventory', event.target.value)}\n\t\t\t\t\t\t\t\tinvalid={!!errors?.inventory}\n\t\t\t\t\t\t\t\tplaceholder={strings.placeholders.inventory}\n\t\t\t\t\t\t\t\tdisabled={isDisabled}\n\t\t\t\t\t\t\t\tinputMode=\"numeric\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</FormField>}\n\t\t\t\t\t\t{isFieldVisible('status') && <FormField label={strings.fields.status} error={errors?.status}>\n\t\t\t\t\t\t\t{statusOptions.length > 0 ? (\n\t\t\t\t\t\t\t\t<Select\n\t\t\t\t\t\t\t\t\toptions={toSelectOptions(statusOptions)}\n\t\t\t\t\t\t\t\t\tvalue={value.status ?? null}\n\t\t\t\t\t\t\t\t\tonValueChange={(nextValue) => updateField('status', nextValue ?? '')}\n\t\t\t\t\t\t\t\t\tinvalid={!!errors?.status}\n\t\t\t\t\t\t\t\t\tplaceholder={strings.statusPlaceholder}\n\t\t\t\t\t\t\t\t\tdisabled={isDisabled}\n\t\t\t\t\t\t\t\t\taria-label={strings.fields.status}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<Input\n\t\t\t\t\t\t\t\t\tvalue={value.status ?? ''}\n\t\t\t\t\t\t\t\t\tonChange={(event) => updateField('status', event.target.value)}\n\t\t\t\t\t\t\t\t\tinvalid={!!errors?.status}\n\t\t\t\t\t\t\t\t\tplaceholder={strings.placeholders.status}\n\t\t\t\t\t\t\t\t\tdisabled={isDisabled}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</FormField>}\n\t\t\t\t\t\t{isFieldVisible('channels') && <FormField label={strings.fields.channels} error={errors?.channels}>\n\t\t\t\t\t\t\t<Input\n\t\t\t\t\t\t\t\tvalue={value.channels ?? ''}\n\t\t\t\t\t\t\t\tonChange={(event) => updateField('channels', event.target.value)}\n\t\t\t\t\t\t\t\tinvalid={!!errors?.channels}\n\t\t\t\t\t\t\t\tplaceholder={strings.placeholders.channels}\n\t\t\t\t\t\t\t\tdisabled={isDisabled}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</FormField>}\n\t\t\t\t\t</div>\n\t\t\t\t</section>}\n\n\t\t\t\t{!!optionFields.length && (\n\t\t\t\t\t<section className={cn('product-variant-editor--section grid', compositionClasses.related)}>\n\t\t\t\t\t\t<Text type=\"inherit\" weight=\"semibold\">{strings.optionsTitle}</Text>\n\t\t\t\t\t\t<div className={cn('grid @sm/product-variant-editor:grid-cols-2', compositionClasses.related)}>\n\t\t\t\t\t\t\t{optionFields.map((field) => {\n\t\t\t\t\t\t\t\tconst fieldValue = value.options?.[field.id] ?? '';\n\t\t\t\t\t\t\t\tconst hasChoices = !!field.choices?.length;\n\n\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t<FormField\n\t\t\t\t\t\t\t\t\t\tkey={field.id}\n\t\t\t\t\t\t\t\t\t\tlabel={field.label}\n\t\t\t\t\t\t\t\t\t\thelperText={field.helperText}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{hasChoices ? (\n\t\t\t\t\t\t\t\t\t\t\t<Select\n\t\t\t\t\t\t\t\t\t\t\t\toptions={toSelectOptions(field.choices ?? [])}\n\t\t\t\t\t\t\t\t\t\t\t\tvalue={fieldValue || null}\n\t\t\t\t\t\t\t\t\t\t\t\tonValueChange={(nextValue) => updateOption(field, nextValue)}\n\t\t\t\t\t\t\t\t\t\t\t\tplaceholder={field.placeholder ?? strings.optionPlaceholder}\n\t\t\t\t\t\t\t\t\t\t\t\tdisabled={isDisabled}\n\t\t\t\t\t\t\t\t\t\t\t\taria-label={field.label}\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t\t<Input\n\t\t\t\t\t\t\t\t\t\t\t\tvalue={fieldValue}\n\t\t\t\t\t\t\t\t\t\t\t\tonChange={(event) => updateOption(field, event.target.value)}\n\t\t\t\t\t\t\t\t\t\t\t\tplaceholder={field.placeholder ?? strings.optionPlaceholder}\n\t\t\t\t\t\t\t\t\t\t\t\tdisabled={isDisabled}\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t</FormField>\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</section>\n\t\t\t\t)}\n\t\t\t\t{/* App-owned fields join the form's section rhythm, before its commands. */}\n\t\t\t\t{children}\n\t\t\t\t{/* The default commands close the form, so the form's section gap owns their space; a consumer footerSlot replaces them in the footer. */}\n\t\t\t\t{(footerSlot === undefined || footerSlot === null) && hasDefaultFooter && defaultFooter}\n\t\t\t</Stack>\n\t\t</Card>\n\t);\n}\n\nProductVariantEditor.displayName = 'ProductVariantEditor';\n","import {compositionRhythm} from '../../../base/structure/composition.recipes';\nimport { Copy, Eye, Pencil, Plus, Trash2 } from 'lucide-react';\nimport { Fragment, useCallback, useMemo, useRef, useState, type ReactNode } from 'react';\n\nimport { Badge } from '../../../base/badge';\nimport { BatchActionBar } from '../../../base/batch-action-bar';\nimport { Button } from '../../../base/buttons';\nimport { Card } from '../../../base/cards';\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 { interactionRecipes } from '../../../../lib/interaction-recipes';\nimport { useStrings } from '../../../../lib/strings';\nimport { neutralFillRecipes } from '../../../../lib/surface-recipes';\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 { productBlockProps } from '../partials/product-surface';\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\n/**\n * One identity per group for ordering, headers and counts. Rows may name their\n * value by id (`optionValueIds`) or by label (`optionValues`); a label that\n * matches a declared value joins that value's group.\n */\nfunction getGroupKey(variant: ProductVariantRow, option: ProductOptionGroup) {\n\tconst label = getPlainText(variant.optionValues?.[option.id]);\n\tif (label) {\n\t\tconst declared = option.values?.find((value) => getPlainText(value.label) === label);\n\t\treturn declared ? `id:${declared.id}` : `label:${label}`;\n\t}\n\tconst valueId = variant.optionValueIds?.[option.id];\n\treturn valueId !== undefined && option.values?.some((value) => value.id === valueId) ? `id:${valueId}` : 'none';\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\n/**\n * An editable cell. With `onValueChange` the app owns every keystroke, as\n * before. With only `onBlur` the cell keeps the text being typed and hands it\n * over when focus leaves; the row's own value shows again afterwards.\n */\nfunction VariantFieldInput({\n\tvalue,\n\tlabel,\n\tonValueChange,\n\tonBlur,\n}: {\n\tvalue: string;\n\tlabel: string;\n\tonValueChange?: (value: string) => void;\n\tonBlur?: (value: string) => void;\n}) {\n\tconst [draft, setDraft] = useState<string | null>(null);\n\tconst canEdit = !!(onValueChange || onBlur);\n\tconst keepsDraft = !onValueChange && !!onBlur;\n\n\treturn (\n\t\t<Input\n\t\t\treadOnly={!canEdit}\n\t\t\tvalue={keepsDraft ? draft ?? value : value}\n\t\t\tonChange={canEdit ? (event) => {\n\t\t\t\tconst next = event.currentTarget.value;\n\t\t\t\tif (keepsDraft) setDraft(next);\n\t\t\t\tonValueChange?.(next);\n\t\t\t} : undefined}\n\t\t\tonBlur={onBlur ? (event) => {\n\t\t\t\tonBlur(event.currentTarget.value);\n\t\t\t\tsetDraft(null);\n\t\t\t} : undefined}\n\t\t\taria-label={label}\n\t\t\tclassName={cn(\n\t\t\t\t// Content sizing lets the column grow to the whole value (a long\n\t\t\t\t// SKU), while the field still fills a wider column.\n\t\t\t\t'h-control-lg w-full min-w-24 field-sizing-content bg-background px-control shadow-xs',\n\t\t\t\t!canEdit && 'text-muted-foreground',\n\t\t\t)}\n\t\t/>\n\t);\n}\n\nfunction renderVariantCellValue(\n\tvalue: ReactNode | undefined,\n\tlabel: string,\n\tdisplay: ProductVariantCellDisplay,\n\tonValueChange?: (value: string) => void,\n\tonBlur?: (value: string) => void,\n\ttextClassName = 'whitespace-normal break-words',\n) {\n\tconst plainValue = getPlainText(value);\n\n\tif (display === 'field') {\n\t\treturn <VariantFieldInput value={plainValue} label={label} onValueChange={onValueChange} onBlur={onBlur} />;\n\t}\n\n\tconst Primitive = hasCellValue(value) ? Value : SecondaryValue;\n\n\treturn (\n\t\t<Primitive className={cn('min-w-0 tabular-nums', textClassName)}>\n\t\t\t{renderFieldValue(value)}\n\t\t</Primitive>\n\t);\n}\n\nexport function ProductVariantsBulkTable({\n\tvariants = [],\n\toptionGroups = [],\n\tgroupByOptionId,\n\tvisibleColumns = DEFAULT_VISIBLE_COLUMNS,\n\toptionCombinationDisplay = DEFAULT_OPTION_COMBINATION_DISPLAY,\n\tcellDisplay = DEFAULT_CELL_DISPLAY,\n\tselectionMode,\n\trenderOptionCombination,\n\trenderCell,\n\tselectedVariantIds,\n\tdefaultSelectedVariantIds = [],\n\tonSelectedVariantIdsChange,\n\tonVariantFieldChange,\n\tonVariantFieldBlur,\n\tonCreateVariant,\n\tonGenerateVariants,\n\tonSelectVariant,\n\tonEditVariant,\n\tonDuplicateVariant,\n\tonDeleteVariant,\n\tonBulkEdit,\n\tonBulkApply,\n\tonBulkDelete,\n\trenderVariantActions,\n\trenderBulkActions,\n\tactions,\n\theaderEnd,\n\tfooterSlot,\n\tempty,\n\tsurface = 'card',\n\tclassName,\n\tstrings: stringsProp,\n}: ProductVariantsBulkTableProps) {\n\tconst strings = useStrings(defaultProductVariantsBulkTableStrings, stringsProp);\n\tconst isSelectionControlled = selectedVariantIds !== undefined;\n\tconst [internalSelectedIds, setInternalSelectedIds] = useState(defaultSelectedVariantIds);\n\tconst hasBulkActions = !!(renderBulkActions || onBulkEdit || onBulkApply || onBulkDelete);\n\tconst resolvedSelectionMode = selectionMode\n\t\t?? (hasBulkActions || isSelectionControlled || !!onSelectedVariantIdsChange ? DEFAULT_SELECTION_MODE : 'none');\n\tconst isSelectable = resolvedSelectionMode === 'multiple';\n\tconst rowById = useMemo(\n\t\t() => new Map(variants.map((variant) => [variant.id, variant])),\n\t\t[variants],\n\t);\n\t// An uncontrolled selection follows the rows: a removed variant leaves it, so\n\t// its id is not reported with later changes and does not return selected.\n\tif (!isSelectionControlled && internalSelectedIds.some((id) => !rowById.has(id))) {\n\t\tsetInternalSelectedIds(internalSelectedIds.filter((id) => rowById.has(id)));\n\t}\n\tconst selectedIds = useMemo(\n\t\t() => (isSelectable ? (isSelectionControlled ? selectedVariantIds : internalSelectedIds) : []),\n\t\t[internalSelectedIds, isSelectable, isSelectionControlled, selectedVariantIds],\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 groupKeyById = useMemo(\n\t\t() => new Map(groupByOption ? variants.map((variant) => [variant.id, getGroupKey(variant, groupByOption)]) : []),\n\t\t[groupByOption, variants],\n\t);\n\tconst orderedVariants = useMemo(() => {\n\t\tif (!groupByOption) return variants;\n\t\t// Declared values keep their order; other groups follow in first-seen order.\n\t\tconst groupOrder = new Map((groupByOption.values ?? []).map((value, index) => [`id:${value.id}`, index]));\n\t\tvariants.forEach((variant) => {\n\t\t\tconst key = groupKeyById.get(variant.id) ?? 'none';\n\t\t\tif (!groupOrder.has(key)) groupOrder.set(key, groupOrder.size);\n\t\t});\n\n\t\treturn [...variants].sort((a, b) => {\n\t\t\tconst aOrder = groupOrder.get(groupKeyById.get(a.id) ?? 'none') ?? 0;\n\t\t\tconst bOrder = groupOrder.get(groupKeyById.get(b.id) ?? 'none') ?? 0;\n\t\t\tif (aOrder !== bOrder) return aOrder - bOrder;\n\t\t\treturn (rowIndexById.get(a.id) ?? 0) - (rowIndexById.get(b.id) ?? 0);\n\t\t});\n\t}, [groupByOption, groupKeyById, rowIndexById, variants]);\n\tconst groupCounts = useMemo(() => {\n\t\tconst counts = new Map<string, number>();\n\t\tgroupKeyById.forEach((key) => counts.set(key, (counts.get(key) ?? 0) + 1));\n\t\treturn counts;\n\t}, [groupKeyById]);\n\tconst hasBulkControls = isSelectable && hasBulkActions;\n\tconst hasRows = variants.length > 0;\n\tconst allRowsSelected = isSelectable && hasRows && variants.every((variant) => selectedIdSet.has(variant.id));\n\tconst someRowsSelected = selectedRows.length > 0 && !allRowsSelected;\n\t// Where focus lands when the bulk bar goes away with focus inside it.\n\tconst selectAllRef = useRef<HTMLElement>(null);\n\tconst hasRowActions = !!(\n\t\tonSelectVariant ||\n\t\tonEditVariant ||\n\t\tonDuplicateVariant ||\n\t\tonDeleteVariant ||\n\t\trenderVariantActions\n\t);\n\tconst visibleColumnCount = visibleColumns.filter((column) => visibleColumnSet.has(column)).length;\n\tconst tableColumnCount = visibleColumnCount + (isSelectable ? 1 : 0) + (hasRowActions ? 1 : 0);\n\n\tconst updateSelection = useCallback(\n\t\t(nextIds: string[]) => {\n\t\t\tconst nextRows = selectedIdsToRows(nextIds, rowById);\n\t\t\tif (!isSelectionControlled) {\n\t\t\t\tsetInternalSelectedIds(nextIds);\n\t\t\t}\n\t\t\tonSelectedVariantIdsChange?.(nextIds, nextRows);\n\t\t},\n\t\t[isSelectionControlled, onSelectedVariantIdsChange, rowById],\n\t);\n\n\tconst clearSelection = useCallback(() => updateSelection([]), [updateSelection]);\n\tconst toggleRow = useCallback(\n\t\t(variant: ProductVariantRow, checked: boolean | 'indeterminate') => {\n\t\t\tif (!isSelectable) return;\n\t\t\tconst shouldSelect = checked === true;\n\t\t\tconst nextIds = shouldSelect\n\t\t\t\t? Array.from(new Set([...selectedIds, variant.id]))\n\t\t\t\t: selectedIds.filter((id) => id !== variant.id);\n\t\t\tupdateSelection(nextIds);\n\t\t},\n\t\t[isSelectable, selectedIds, updateSelection],\n\t);\n\tconst toggleAll = useCallback(\n\t\t(checked: boolean | 'indeterminate') => {\n\t\t\tif (!isSelectable) return;\n\t\t\tupdateSelection(checked === true ? variants.map((variant) => variant.id) : []);\n\t\t},\n\t\t[isSelectable, updateSelection, variants],\n\t);\n\n\tconst bulkContext: ProductVariantBulkActionContext = {\n\t\tselectedRows,\n\t\tselectedIds,\n\t\tallRows: variants,\n\t\tselectedCount: selectedRows.length,\n\t\ttotalCount: variants.length,\n\t\tallRowsSelected,\n\t\tclearSelection,\n\t\tsetSelectedIds: updateSelection,\n\t};\n\n\tconst headerAction = (onCreateVariant || onGenerateVariants) ? (\n\t\t<Stack direction=\"horizontal\" gap={compositionRhythm.commands} justify=\"end\" className=\"product-variants-bulk-table--header-actions\">\n\t\t\t{!!onGenerateVariants && (\n\t\t\t\t<Button type=\"button\" tone=\"secondary\" buttonStyle=\"outline\" onClick={onGenerateVariants}>\n\t\t\t\t\t{strings.generateLabel}\n\t\t\t\t</Button>\n\t\t\t)}\n\t\t\t{!!onCreateVariant && (\n\t\t\t\t<Button type=\"button\" tone=\"secondary\" buttonStyle=\"ghost\" onClick={onCreateVariant} icon={Plus}>\n\t\t\t\t\t{strings.createLabel}\n\t\t\t\t</Button>\n\t\t\t)}\n\t\t</Stack>\n\t) : undefined;\n\n\tconst customBulkActions = selectedRows.length > 0 ? renderBulkActions?.(bulkContext) : undefined;\n\t/*\n\t * The shared base BatchActionBar, inline: a docked bar would cover the rows\n\t * being selected. It renders nothing until a variant is selected, and\n\t * `renderBulkActions` replaces the default commands.\n\t */\n\tconst bulkToolbar = hasBulkControls ? (\n\t\t<BatchActionBar\n\t\t\tplacement=\"inline\"\n\t\t\tclassName=\"product-variants-bulk-table--bulk-toolbar\"\n\t\t\tselectedCount={selectedRows.length}\n\t\t\ttotalCount={variants.length}\n\t\t\tonClear={clearSelection}\n\t\t\treturnFocusRef={selectAllRef}\n\t\t\tstrings={{\n\t\t\t\tsummary: (count, total) => strings.selectedLabel(count, total ?? variants.length),\n\t\t\t\tclear: strings.clearSelectionLabel,\n\t\t\t}}\n\t\t>\n\t\t\t{customBulkActions ?? (\n\t\t\t\t<>\n\t\t\t\t\t{!!onBulkEdit && (\n\t\t\t\t\t\t<Button type=\"button\" onClick={() => onBulkEdit(selectedRows)}>\n\t\t\t\t\t\t\t{strings.bulkEditLabel}\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t)}\n\t\t\t\t\t{!!onBulkApply && (\n\t\t\t\t\t\t<Button type=\"button\" tone=\"neutral\" buttonStyle=\"ghost\" onClick={() => onBulkApply(selectedRows)}>\n\t\t\t\t\t\t\t{strings.bulkApplyLabel}\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t)}\n\t\t\t\t\t{/* Destructive commands stay last, after every other bulk command. */}\n\t\t\t\t\t{!!onBulkDelete && (\n\t\t\t\t\t\t<Button type=\"button\" tone=\"destructive\" buttonStyle=\"ghost\" onClick={() => onBulkDelete(selectedRows)}>\n\t\t\t\t\t\t\t{strings.bulkDeleteLabel}\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t)}\n\t\t\t\t</>\n\t\t\t)}\n\t\t</BatchActionBar>\n\t) : null;\n\n\tconst content = variants.length === 0 ? (\n\t\tempty ?? (\n\t\t\t<ProductEmptyState\n\t\t\t\ttitle={strings.emptyTitle}\n\t\t\t\tdescription={strings.emptyDescription}\n\t\t\t\taction={onGenerateVariants ? (\n\t\t\t\t\t<Button tone=\"primary\" type=\"button\" onClick={onGenerateVariants}>\n\t\t\t\t\t\t{strings.generateLabel}\n\t\t\t\t\t</Button>\n\t\t\t\t) : undefined}\n\t\t\t/>\n\t\t)\n\t) : (\n\t\t<Stack gap=\"md\" className=\"product-variants-bulk-table--body\">\n\t\t\t{bulkToolbar}\n\t\t\t<div\n\t\t\t\tclassName=\"product-variants-bulk-table--table overflow-hidden rounded-surface border border-border bg-background text-foreground\"\n\t\t\t>\n\t\t\t\t{/* The shared Table container scrolls as every DataTable does; a reserved\n\t\t\t\t\tscrollbar gutter stopped the header and rows short of the frame edge. */}\n\t\t\t\t{/* Cell insets, row rhythm and the header band are the shared Table's. */}\n\t\t\t\t<Table density=\"comfortable\">\n\t\t\t\t\t\t<colgroup>\n\t\t\t\t\t\t\t{isSelectable && <col className=\"w-10\" />}\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={cn('border-b border-border/60', interactionRecipes.tableHead, interactionRecipes.tableRowHover)}>\n\t\t\t\t\t\t\t\t{isSelectable && (\n\t\t\t\t\t\t\t\t\t<TableHead>\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/>\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>\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>\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>\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>\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>\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>\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=\"text-end\">\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 groupKey = groupKeyById.get(variant.id);\n\t\t\t\t\t\t\t\tconst shouldRenderGroup = !!groupByOption && (!previousVariant || groupKey !== groupKeyById.get(previousVariant.id));\n\t\t\t\t\t\t\t\tconst isSelected = selectedIdSet.has(variant.id);\n\t\t\t\t\t\t\t\tconst actionContext = {\n\t\t\t\t\t\t\t\t\tindex,\n\t\t\t\t\t\t\t\t\tonSelect: onSelectVariant ? () => onSelectVariant(variant) : undefined,\n\t\t\t\t\t\t\t\t\tonEdit: onEditVariant ? () => onEditVariant(variant) : undefined,\n\t\t\t\t\t\t\t\t\tonDuplicate: onDuplicateVariant ? () => onDuplicateVariant(variant) : undefined,\n\t\t\t\t\t\t\t\t\tonDelete: onDeleteVariant ? () => onDeleteVariant(variant) : undefined,\n\t\t\t\t\t\t\t\t\tisSelected,\n\t\t\t\t\t\t\t\t\tonToggleSelected: isSelectable ? (checked: boolean) => toggleRow(variant, checked) : undefined,\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\tconst summaryOptionGroups = groupByOption\n\t\t\t\t\t\t\t\t\t? optionGroups.filter((option) => option.id !== groupByOption.id)\n\t\t\t\t\t\t\t\t\t: optionGroups;\n\t\t\t\t\t\t\t\tconst optionSummary = getVariantOptionSummary(variant, summaryOptionGroups);\n\t\t\t\t\t\t\t\tconst groupedVariantName = groupByOption\n\t\t\t\t\t\t\t\t\t? getVariantName({ ...variant, name: undefined }, summaryOptionGroups)\n\t\t\t\t\t\t\t\t\t: getVariantName(variant, optionGroups);\n\t\t\t\t\t\t\t\tconst variantName = groupedVariantName === PRODUCT_EMPTY_VALUE && groupByOption\n\t\t\t\t\t\t\t\t\t? getVariantName(variant, optionGroups)\n\t\t\t\t\t\t\t\t\t: groupedVariantName;\n\t\t\t\t\t\t\t\tconst optionLabel = getOptionCombinationLabel(optionSummary);\n\t\t\t\t\t\t\t\tconst optionLabelMatchesVariantName = optionLabel === getPlainText(variantName);\n\t\t\t\t\t\t\t\tconst createCellContext = (\n\t\t\t\t\t\t\t\t\tcolumn: ProductVariantsBulkTableColumn,\n\t\t\t\t\t\t\t\t\tvalue: ReactNode | undefined,\n\t\t\t\t\t\t\t\t\tdisplay: ProductVariantCellDisplay = DEFAULT_CELL_DISPLAY,\n\t\t\t\t\t\t\t\t): ProductVariantCellRenderContext => {\n\t\t\t\t\t\t\t\t\tconst onValueChange = isEditableField(column) && onVariantFieldChange\n\t\t\t\t\t\t\t\t\t\t? (nextValue: string) => onVariantFieldChange(\n\t\t\t\t\t\t\t\t\t\t\tvariant,\n\t\t\t\t\t\t\t\t\t\t\tcolumn,\n\t\t\t\t\t\t\t\t\t\t\tnextValue,\n\t\t\t\t\t\t\t\t\t\t\tgetFieldChangeContext(index, column, value, nextValue),\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t: undefined;\n\t\t\t\t\t\t\t\t\tconst onBlur = isEditableField(column) && onVariantFieldBlur\n\t\t\t\t\t\t\t\t\t\t? (nextValue: string) => onVariantFieldBlur(\n\t\t\t\t\t\t\t\t\t\t\tvariant,\n\t\t\t\t\t\t\t\t\t\t\tcolumn,\n\t\t\t\t\t\t\t\t\t\t\tnextValue,\n\t\t\t\t\t\t\t\t\t\t\tgetFieldChangeContext(index, column, value, nextValue),\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t: undefined;\n\n\t\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\t\tindex,\n\t\t\t\t\t\t\t\t\t\tcolumn,\n\t\t\t\t\t\t\t\t\t\tvalue,\n\t\t\t\t\t\t\t\t\t\tvariantName,\n\t\t\t\t\t\t\t\t\t\toptionValues: optionSummary,\n\t\t\t\t\t\t\t\t\t\toptionLabel,\n\t\t\t\t\t\t\t\t\t\tcellDisplay: display,\n\t\t\t\t\t\t\t\t\t\tonValueChange,\n\t\t\t\t\t\t\t\t\t\tonBlur,\n\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\tconst renderCellContent = (\n\t\t\t\t\t\t\t\t\tcolumn: ProductVariantsBulkTableColumn,\n\t\t\t\t\t\t\t\t\tvalue: ReactNode | undefined,\n\t\t\t\t\t\t\t\t\tdisplay: ProductVariantCellDisplay,\n\t\t\t\t\t\t\t\t\tfallback: (context: ProductVariantCellRenderContext) => ReactNode,\n\t\t\t\t\t\t\t\t) => {\n\t\t\t\t\t\t\t\t\tconst context = createCellContext(column, value, display);\n\t\t\t\t\t\t\t\t\tconst rendered = renderCell?.(variant, context);\n\t\t\t\t\t\t\t\t\treturn rendered !== undefined ? rendered : fallback(context);\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\tconst shouldRenderOptionCombination =\n\t\t\t\t\t\t\t\t\toptionCombinationDisplay !== 'none' &&\n\t\t\t\t\t\t\t\t\toptionSummary.length > 0 &&\n\t\t\t\t\t\t\t\t\t// The combination is supporting detail: shown only when it adds to the\n\t\t\t\t\t\t\t\t\t// variant title, never repeating a title that already lists the values.\n\t\t\t\t\t\t\t\t\t!optionLabelMatchesVariantName;\n\t\t\t\t\t\t\t\tconst renderedOptionCombination = optionCombinationDisplay !== 'none'\n\t\t\t\t\t\t\t\t\t? renderOptionCombination?.(variant, {\n\t\t\t\t\t\t\t\t\t\toptionGroups,\n\t\t\t\t\t\t\t\t\t\toptionValues: optionSummary,\n\t\t\t\t\t\t\t\t\t\toptionLabel,\n\t\t\t\t\t\t\t\t\t\tdisplay: optionCombinationDisplay,\n\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t: null;\n\t\t\t\t\t\t\t\tconst defaultRowActions = [\n\t\t\t\t\t\t\t\t\t...(onSelectVariant ? [{\n\t\t\t\t\t\t\t\t\t\tid: 'view',\n\t\t\t\t\t\t\t\t\t\tlabel: strings.viewLabel,\n\t\t\t\t\t\t\t\t\t\ticon: <Eye className=\"size-icon-md\" />,\n\t\t\t\t\t\t\t\t\t\tonClick: () => onSelectVariant(variant),\n\t\t\t\t\t\t\t\t\t\ttone: 'secondary' as const, buttonStyle: 'ghost' as const,\n\t\t\t\t\t\t\t\t\t}] : []),\n\t\t\t\t\t\t\t\t\t...(onEditVariant ? [{\n\t\t\t\t\t\t\t\t\t\tid: 'edit',\n\t\t\t\t\t\t\t\t\t\tlabel: strings.editLabel,\n\t\t\t\t\t\t\t\t\t\ticon: <Pencil className=\"size-icon-md\" />,\n\t\t\t\t\t\t\t\t\t\tonClick: () => onEditVariant(variant),\n\t\t\t\t\t\t\t\t\t\ttone: 'secondary' as const, buttonStyle: 'ghost' as const,\n\t\t\t\t\t\t\t\t\t}] : []),\n\t\t\t\t\t\t\t\t\t...(onDuplicateVariant ? [{\n\t\t\t\t\t\t\t\t\t\tid: 'duplicate',\n\t\t\t\t\t\t\t\t\t\tlabel: strings.duplicateLabel,\n\t\t\t\t\t\t\t\t\t\ticon: <Copy className=\"size-icon-md\" />,\n\t\t\t\t\t\t\t\t\t\tonClick: () => onDuplicateVariant(variant),\n\t\t\t\t\t\t\t\t\t\ttone: 'secondary' as const, buttonStyle: 'ghost' as const,\n\t\t\t\t\t\t\t\t\t}] : []),\n\t\t\t\t\t\t\t\t\t...(onDeleteVariant ? [{\n\t\t\t\t\t\t\t\t\t\tid: 'delete',\n\t\t\t\t\t\t\t\t\t\tlabel: strings.deleteLabel,\n\t\t\t\t\t\t\t\t\t\ticon: <Trash2 className=\"size-icon-md\" />,\n\t\t\t\t\t\t\t\t\t\tonClick: () => onDeleteVariant(variant),\n\t\t\t\t\t\t\t\t\t\ttone: 'destructive' as const,\n\t\t\t\t\t\t\t\t\t}] : []),\n\t\t\t\t\t\t\t\t];\n\n\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t<Fragment key={variant.id}>\n\t\t\t\t\t\t\t\t\t\t{shouldRenderGroup && (\n\t\t\t\t\t\t\t\t\t\t\t<TableRow className={cn('product-variants-bulk-table--group-row border-b border-border/60', neutralFillRecipes.wash)}>\n\t\t\t\t\t\t\t\t\t\t\t\t<TableCell colSpan={tableColumnCount}>\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(groupKey ?? '') ?? 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=\"border-b border-border/60\">\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>\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/>\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>\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>\n\t\t\t\t\t\t\t\t\t\t\t\t{renderCellContent('sku', variant.sku, resolveCellDisplay(cellDisplay, 'sku'), (context) => renderVariantCellValue(\n\t\t\t\t\t\t\t\t\t\t\t\t\tvariant.sku,\n\t\t\t\t\t\t\t\t\t\t\t\t\t`${strings.headers.sku}: ${getPlainText(variantName)}`,\n\t\t\t\t\t\t\t\t\t\t\t\t\tcontext.cellDisplay,\n\t\t\t\t\t\t\t\t\t\t\t\t\tcontext.onValueChange,\n\t\t\t\t\t\t\t\t\t\t\t\t\tcontext.onBlur,\n\t\t\t\t\t\t\t\t\t\t\t\t\t'whitespace-nowrap',\n\t\t\t\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t\t\t\t</TableCell>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t{visibleColumnSet.has('price') && (\n\t\t\t\t\t\t\t\t\t\t\t<TableCell>\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>\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>\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>\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=\"text-end\">\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<Card\n\t\t\t{...productBlockProps(cn('product-variants-bulk-table--component w-full', className))}\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>\n\t\t\t{content}\n\t\t</Card>\n\t);\n}\n\nProductVariantsBulkTable.displayName = 'ProductVariantsBulkTable';\n","import {compositionRhythm} from '../../../base/structure/composition.recipes';\nimport { ListFilter, Plus, Search } from 'lucide-react';\nimport { useCallback, useMemo, useState } from 'react';\n\nimport { Button } from '../../../base/buttons';\nimport { Card } from '../../../base/cards';\nimport { Stack } from '../../../base/structure';\nimport { Select } from '../../../base/choice-inputs';\nimport { Text } from '../../../typography';\nimport { useStrings } from '../../../../lib/strings';\nimport { cn } from '../../../../lib/utils';\nimport { controlGroupHeightClasses, segmentedControlRecipes } from '../../../../lib/control-group-recipes';\nimport { useDensityConfig } from '../../../../lib/ui-provider';\nimport { resolveComponentScale } from '../../../../lib/ui-provider/scale';\n\nimport { defaultProductVariantsManagerStrings } from '../products.strings';\nimport type { ProductVariantsManagerProps } from '../products.types';\nimport { ProductOptionsMatrix } from './product-options-matrix';\nimport { ProductVariantsBulkTable } from './product-variants-bulk-table';\n\nexport function ProductVariantsManager({\n\toptionGroups = [],\n\tvariants = [],\n\tvisibleColumns,\n\toptionCombinationDisplay,\n\tcellDisplay,\n\tselectionMode,\n\trenderOptionCombination,\n\trenderCell,\n\tselectedVariantIds,\n\tdefaultSelectedVariantIds,\n\tonSelectedVariantIdsChange,\n\tonVariantFieldChange,\n\tonVariantFieldBlur,\n\tcollapsedOptionIds,\n\tdefaultCollapsedOptionIds,\n\tonCollapsedOptionIdsChange,\n\teditingOptionId,\n\tdefaultEditingOptionId,\n\tonEditingOptionIdChange,\n\tonCreateOption,\n\tonEditOption,\n\tonDeleteOption,\n\tconfirmDelete,\n\tonAddValue,\n\tonDeleteValue,\n\tonOptionNameChange,\n\tonValueLabelChange,\n\tonDoneEditingOption,\n\tonSaveEditingOption,\n\tonError,\n\tonCancelEditingOption,\n\tonToggleUsedForVariants,\n\trenderOptionActions,\n\trenderValue,\n\tonCreateVariant,\n\tonGenerateVariants,\n\tonSelectVariant,\n\tonEditVariant,\n\tonDuplicateVariant,\n\tonDeleteVariant,\n\tonBulkEdit,\n\tonBulkApply,\n\tonBulkDelete,\n\trenderVariantActions,\n\trenderBulkActions,\n\tgroupByOptionId,\n\tdefaultGroupByOptionId,\n\tonGroupByOptionIdChange,\n\tshowGroupBy = true,\n\tonSearchVariants,\n\tonFilterVariants,\n\tcontrolsEnd,\n\tactions,\n\theaderEnd,\n\tfooterSlot,\n\tsurface = 'flat',\n\tpadding = surface === 'flat' ? 'none' : 'md',\n\theaderDivider,\n\tfooterDivider,\n\tclassName,\n\tstrings: stringsProp,\n\toptionsStrings,\n\tvariantsStrings,\n}: ProductVariantsManagerProps) {\n\tconst { defaultScale } = useDensityConfig();\n\tconst size = resolveComponentScale(undefined, defaultScale);\n\tconst strings = useStrings(defaultProductVariantsManagerStrings, stringsProp);\n\tconst groupableOptions = useMemo(\n\t\t() => optionGroups.filter((option) => option.usedForVariants !== false),\n\t\t[optionGroups],\n\t);\n\tconst fallbackGroupByOptionId = groupableOptions[0]?.id ?? null;\n\tconst isGroupByControlled = groupByOptionId !== undefined;\n\tconst [internalGroupByOptionId, setInternalGroupByOptionId] = useState<string | null | undefined>(defaultGroupByOptionId);\n\t// Without the control nobody could undo an implicit or earlier choice, so a\n\t// hidden control keeps the list flat unless the app names an option.\n\tconst resolvedGroupByOptionId = isGroupByControlled\n\t\t? groupByOptionId\n\t\t: !showGroupBy ? defaultGroupByOptionId ?? null\n\t\t: internalGroupByOptionId === undefined ? fallbackGroupByOptionId : internalGroupByOptionId;\n\tconst hasJoinedTools = !!onSearchVariants && !!onFilterVariants;\n\tconst hasTools = !!onSearchVariants || !!onFilterVariants;\n\tconst groupByOptions = useMemo(\n\t\t() =>\n\t\t\t!showGroupBy ? [] : groupableOptions.map((option) => ({\n\t\t\t\tvalue: option.id,\n\t\t\t\tlabel: String(typeof option.name === 'string' || typeof option.name === 'number' ? option.name : option.id),\n\t\t\t})),\n\t\t[groupableOptions, showGroupBy],\n\t);\n\tconst updateGroupByOptionId = useCallback(\n\t\t(nextId: string | undefined) => {\n\t\t\tconst matchedOption = optionGroups.find((option) => option.id === nextId);\n\t\t\tif (!isGroupByControlled) {\n\t\t\t\tsetInternalGroupByOptionId(nextId ?? null);\n\t\t\t}\n\t\t\tonGroupByOptionIdChange?.(nextId, matchedOption);\n\t\t},\n\t\t[isGroupByControlled, onGroupByOptionIdChange, optionGroups],\n\t);\n\tconst headerAction =\n\t\tonGenerateVariants || onCreateVariant ? (\n\t\t\t<Stack direction=\"horizontal\" gap={compositionRhythm.commands} justify=\"end\" className=\"product-variants-manager--header-actions\">\n\t\t\t\t{!!onGenerateVariants && (\n\t\t\t\t\t<Button type=\"button\" tone=\"secondary\" buttonStyle=\"outline\" onClick={onGenerateVariants}>\n\t\t\t\t\t\t{strings.generateLabel}\n\t\t\t\t\t</Button>\n\t\t\t\t)}\n\t\t\t\t{!!onCreateVariant && (\n\t\t\t\t\t<Button type=\"button\" tone=\"secondary\" buttonStyle=\"outline\" onClick={onCreateVariant} icon={Plus}>\n\t\t\t\t\t\t{strings.createVariantLabel}\n\t\t\t\t\t</Button>\n\t\t\t\t)}\n\t\t\t</Stack>\n\t\t) : undefined;\n\n\treturn (\n\t\t<Card\n\t\t\tsurface={surface}\n\t\t\tpadding={padding}\n\t\t\theaderDivider={headerDivider}\n\t\t\tfooterDivider={footerDivider}\n\t\t\ttitle={strings.title}\n\t\t\tdescription={strings.description}\n\t\t\tactions={actions}\n\t\t\tstrings={{ actionsLabel: 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\tconfirmDelete={confirmDelete}\n\t\t\t\t\t\tonAddValue={onAddValue}\n\t\t\t\t\t\tonDeleteValue={onDeleteValue}\n\t\t\t\t\t\tonOptionNameChange={onOptionNameChange}\n\t\t\t\t\t\tonValueLabelChange={onValueLabelChange}\n\t\t\t\t\t\tonDoneEditingOption={onDoneEditingOption}\n\t\t\t\t\t\tonSaveEditingOption={onSaveEditingOption}\n\t\t\t\t\t\tonError={onError}\n\t\t\t\t\t\tonCancelEditingOption={onCancelEditingOption}\n\t\t\t\t\t\tonToggleUsedForVariants={onToggleUsedForVariants}\n\t\t\t\t\t\trenderOptionActions={renderOptionActions}\n\t\t\t\t\t\trenderValue={renderValue}\n\t\t\t\t\t\tshowHeader={false}\n\t\t\t\t\t\tshowCollapseControls={false}\n\t\t\t\t\t\tshowInlineActions={false}\n\t\t\t\t\t\tshowVariantToggle={false}\n\t\t\t\t\t\tstrings={{\n\t\t\t\t\t\t\ttitle: strings.optionsTitle,\n\t\t\t\t\t\t\t...optionsStrings,\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t</section>\n\n\t\t\t\t<Stack gap=\"md\" className=\"product-variants-manager--variants-region\">\n\t\t\t\t\t{(groupByOptions.length > 0 || hasTools || controlsEnd) && <div className=\"product-variants-manager--controls\">\n\t\t\t\t\t\t<Stack direction=\"horizontal\" gap=\"md\" justify=\"between\">\n\t\t\t\t\t\t\t{groupByOptions.length > 0 && <Stack direction=\"horizontal\" gap=\"sm\" wrap={false} className=\"product-variants-manager--group-by\">\n\t\t\t\t\t\t\t\t<Text type=\"secondary\" className=\"whitespace-nowrap\">\n\t\t\t\t\t\t\t\t\t{strings.groupByLabel}\n\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t{groupByOptions.length > 0 && (\n\t\t\t\t\t\t\t\t\t<Select\n\t\t\t\t\t\t\t\t\t\toptions={groupByOptions}\n\t\t\t\t\t\t\t\t\t\tvalue={resolvedGroupByOptionId ?? undefined}\n\t\t\t\t\t\t\t\t\t\tonValueChange={updateGroupByOptionId}\n\t\t\t\t\t\t\t\t\t\t// The flat list is a choice in the menu and the trigger's resting label.\n\t\t\t\t\t\t\t\t\t\tallowClear\n\t\t\t\t\t\t\t\t\t\tplaceholder={strings.noGroupingLabel ?? defaultProductVariantsManagerStrings.noGroupingLabel}\n\t\t\t\t\t\t\t\t\t\taria-label={strings.groupByLabel}\n\t\t\t\t\t\t\t\t\t\tclassName=\"min-w-32 bg-background\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</Stack>}\n\t\t\t\t\t\t\t{(hasTools || controlsEnd) && <Stack\n\t\t\t\t\t\t\t\tdirection=\"horizontal\"\n\t\t\t\t\t\t\t\tgap=\"sm\"\n\t\t\t\t\t\t\t\tjustify=\"end\"\n\t\t\t\t\t\t\t\twrap={false}\n\t\t\t\t\t\t\t\tclassName=\"product-variants-manager--controls-end ms-auto\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{hasTools && <div className={cn('flex', hasJoinedTools && ['product-variants-manager--tool-buttons bg-background shadow-xs', segmentedControlRecipes.joinedFrame, controlGroupHeightClasses[size]])}>\n\t\t\t\t\t\t\t\t\t{onSearchVariants && <Button\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\tsize={size}\n\t\t\t\t\t\t\t\t\t\ticonOnly\n\t\t\t\t\t\t\t\t\t\ttone=\"secondary\"\n\t\t\t\t\t\t\t\t\t\tbuttonStyle={hasJoinedTools ? 'ghost' : 'outline'}\n\t\t\t\t\t\t\t\t\t\tonClick={onSearchVariants}\n\t\t\t\t\t\t\t\t\t\taria-label={strings.searchLabel}\n\t\t\t\t\t\t\t\t\t\tclassName={cn(hasJoinedTools && [segmentedControlRecipes.joinedItem, segmentedControlRecipes.firstItem, 'border-r border-border'], 'text-muted-foreground hover:text-foreground')}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<Search className=\"size-icon-sm\" aria-hidden=\"true\" />\n\t\t\t\t\t\t\t\t\t\t<Text tag=\"span\" size=\"pxs\" className=\"sr-only\">\n\t\t\t\t\t\t\t\t\t\t\t{strings.searchLabel}\n\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t</Button>}\n\t\t\t\t\t\t\t\t\t{onFilterVariants && <Button\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\tsize={size}\n\t\t\t\t\t\t\t\t\t\ticonOnly\n\t\t\t\t\t\t\t\t\t\ttone=\"secondary\"\n\t\t\t\t\t\t\t\t\t\tbuttonStyle={hasJoinedTools ? 'ghost' : 'outline'}\n\t\t\t\t\t\t\t\t\t\tonClick={onFilterVariants}\n\t\t\t\t\t\t\t\t\t\taria-label={strings.filterLabel}\n\t\t\t\t\t\t\t\t\t\tclassName={cn(hasJoinedTools && [segmentedControlRecipes.joinedItem, segmentedControlRecipes.lastItem], 'text-muted-foreground hover:text-foreground')}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<ListFilter className=\"size-icon-sm\" aria-hidden=\"true\" />\n\t\t\t\t\t\t\t\t\t\t<Text tag=\"span\" size=\"pxs\" className=\"sr-only\">\n\t\t\t\t\t\t\t\t\t\t\t{strings.filterLabel}\n\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t</Button>}\n\t\t\t\t\t\t\t\t</div>}\n\t\t\t\t\t\t\t\t{controlsEnd}\n\t\t\t\t\t\t\t</Stack>}\n\t\t\t\t\t\t</Stack>\n\t\t\t\t\t</div>}\n\n\t\t\t\t\t<section className=\"product-variants-manager--variants min-w-0\">\n\t\t\t\t\t\t<ProductVariantsBulkTable\n\t\t\t\t\t\t\tvariants={variants}\n\t\t\t\t\t\t\toptionGroups={optionGroups}\n\t\t\t\t\t\t\tgroupByOptionId={resolvedGroupByOptionId}\n\t\t\t\t\t\t\tvisibleColumns={visibleColumns}\n\t\t\t\t\t\t\toptionCombinationDisplay={optionCombinationDisplay}\n\t\t\t\t\t\t\tcellDisplay={cellDisplay}\n\t\t\t\t\t\t\tselectionMode={selectionMode}\n\t\t\t\t\t\t\trenderOptionCombination={renderOptionCombination}\n\t\t\t\t\t\t\trenderCell={renderCell}\n\t\t\t\t\t\t\tsurface=\"embedded\"\n\t\t\t\t\t\t\tselectedVariantIds={selectedVariantIds}\n\t\t\t\t\t\t\tdefaultSelectedVariantIds={defaultSelectedVariantIds}\n\t\t\t\t\t\t\tonSelectedVariantIdsChange={onSelectedVariantIdsChange}\n\t\t\t\t\t\t\tonVariantFieldChange={onVariantFieldChange}\n\t\t\t\t\t\t\tonVariantFieldBlur={onVariantFieldBlur}\n\t\t\t\t\t\t\tonCreateVariant={onCreateVariant}\n\t\t\t\t\t\t\tonGenerateVariants={onGenerateVariants}\n\t\t\t\t\t\t\tonSelectVariant={onSelectVariant}\n\t\t\t\t\t\t\tonEditVariant={onEditVariant}\n\t\t\t\t\t\t\tonDuplicateVariant={onDuplicateVariant}\n\t\t\t\t\t\t\tonDeleteVariant={onDeleteVariant}\n\t\t\t\t\t\t\tonBulkEdit={onBulkEdit}\n\t\t\t\t\t\t\tonBulkApply={onBulkApply}\n\t\t\t\t\t\t\tonBulkDelete={onBulkDelete}\n\t\t\t\t\t\t\trenderVariantActions={renderVariantActions}\n\t\t\t\t\t\t\trenderBulkActions={renderBulkActions}\n\t\t\t\t\t\t\tstrings={{\n\t\t\t\t\t\t\t\ttitle: strings.variantsTitle,\n\t\t\t\t\t\t\t\tgenerateLabel: strings.generateLabel,\n\t\t\t\t\t\t\t\t...variantsStrings,\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</section>\n\t\t\t\t</Stack>\n\t\t\t</Stack>\n\t\t</Card>\n\t);\n}\n\nProductVariantsManager.displayName = 'ProductVariantsManager';\n"],"mappings":"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"}
|