themelia-react-ui 1.0.2 → 2.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +632 -1
- package/README.md +31 -13
- package/dist/accordion-B6a3vVgA.js +207 -0
- package/dist/accordion-B6a3vVgA.js.map +1 -0
- package/dist/action-menu-TzCoSlwL.js +280 -0
- package/dist/action-menu-TzCoSlwL.js.map +1 -0
- package/dist/{affordance-geometry.generated-CL84ZN9A.js → affordance-geometry.generated-B5iu-Mkr.js} +9 -3
- package/dist/affordance-geometry.generated-B5iu-Mkr.js.map +1 -0
- package/dist/{ai-artifact-DLVdK0Py.js → ai-artifact-BMJdv-6q.js} +389 -391
- package/dist/ai-artifact-BMJdv-6q.js.map +1 -0
- package/dist/{app-shell-C_fKpljx.js → app-shell-ZK5RWdo6.js} +4 -4
- package/dist/{app-shell-C_fKpljx.js.map → app-shell-ZK5RWdo6.js.map} +1 -1
- package/dist/attachment-BtfhGm8i.js +245 -0
- package/dist/attachment-BtfhGm8i.js.map +1 -0
- package/dist/{auth-CAQcasMV.js → auth-CYxKfo69.js} +239 -237
- package/dist/auth-CYxKfo69.js.map +1 -0
- package/dist/{avatar-Bu2HhitA.js → avatar-BBnEJIx8.js} +71 -68
- package/dist/avatar-BBnEJIx8.js.map +1 -0
- package/dist/badge-MrKVNzW9.js +93 -0
- package/dist/badge-MrKVNzW9.js.map +1 -0
- package/dist/base/accordion.js +1 -1
- package/dist/base/action-menu.js +1 -1
- package/dist/base/attachment.js +1 -1
- package/dist/base/avatar.js +1 -1
- package/dist/base/badge.js +1 -1
- package/dist/base/batch-action-bar.js +3 -0
- package/dist/base/buttons.js +2 -3
- package/dist/base/cards.js +2 -2
- package/dist/base/carousel.js +19 -19
- package/dist/base/carousel.js.map +1 -1
- package/dist/base/cascader.js +234 -224
- package/dist/base/cascader.js.map +1 -1
- package/dist/base/chart.js +1 -1
- package/dist/base/choice-inputs.js +3 -3
- package/dist/base/code-block.js +1 -1
- package/dist/base/combobox.js +1 -1
- package/dist/base/command.js +1 -1
- package/dist/base/copyable.js +1 -1
- package/dist/base/date-pickers.js +2 -2
- package/dist/base/display.js +7 -7
- package/dist/base/feedback.js +3 -3
- package/dist/base/forms-numeric.js +1 -1
- package/dist/base/forms.js +2 -2
- package/dist/base/inline-edit.js +81 -76
- package/dist/base/inline-edit.js.map +1 -1
- package/dist/base/item.js +1 -1
- package/dist/base/media-gallery.js +1 -1
- package/dist/base/metadata-list.js +3 -0
- package/dist/base/navigation.js +7 -7
- package/dist/base/popover-menu.js +1 -1
- package/dist/base/popover.js +1 -1
- package/dist/base/qr-code.js +7 -4
- package/dist/base/qr-code.js.map +1 -1
- package/dist/base/repeaters.js +175 -174
- package/dist/base/repeaters.js.map +1 -1
- package/dist/base/sheet.js +1 -1
- package/dist/base/sidebar.js +1 -1
- package/dist/base/signature-pad.js +148 -138
- package/dist/base/signature-pad.js.map +1 -1
- package/dist/base/skeleton.js +1 -1
- package/dist/base/spinner.js +1 -1
- package/dist/base/structure.js +1 -1
- package/dist/base/table.js +1 -1
- package/dist/base/text-inputs.js +2 -2
- package/dist/base/toaster.js +4 -4
- package/dist/base/toaster.js.map +1 -1
- package/dist/base/tree.js +1 -1
- package/dist/base/upload-queue.js +1 -1
- package/dist/base/upload.js +3 -3
- package/dist/base/value-inputs.js +2 -2
- package/dist/batch-action-bar-BZGDG-Si.js +104 -0
- package/dist/batch-action-bar-BZGDG-Si.js.map +1 -0
- package/dist/blocks/admin.js +264 -253
- package/dist/blocks/admin.js.map +1 -1
- package/dist/blocks/ai.js +293 -323
- package/dist/blocks/ai.js.map +1 -1
- package/dist/blocks/analytics/usage-card.js +1 -1
- package/dist/blocks/analytics.js +596 -587
- package/dist/blocks/analytics.js.map +1 -1
- package/dist/blocks/collaboration.js +1 -1
- package/dist/blocks/commerce/receipt.js +1 -1
- package/dist/blocks/commerce.js +2246 -1693
- package/dist/blocks/commerce.js.map +1 -1
- package/dist/blocks/data-display.js +3 -2
- package/dist/blocks/onboarding.js +50 -49
- package/dist/blocks/onboarding.js.map +1 -1
- package/dist/blocks/planning.js +82 -91
- package/dist/blocks/planning.js.map +1 -1
- package/dist/blocks/timelines.js +1 -1
- package/dist/breadcrumbs-D5t7I023.js +129 -0
- package/dist/breadcrumbs-D5t7I023.js.map +1 -0
- package/dist/{button-BZyfTvwm.js → button-QYwiyhD2.js} +15 -14
- package/dist/button-QYwiyhD2.js.map +1 -0
- package/dist/buttons-SbIcm1HJ.js +661 -0
- package/dist/buttons-SbIcm1HJ.js.map +1 -0
- package/dist/{cards-qGSErLw_.js → cards-CiiHpKYd.js} +8 -8
- package/dist/cards-CiiHpKYd.js.map +1 -0
- package/dist/{chart-Bsc5BICK.js → chart-QfrARkXl.js} +17 -15
- package/dist/chart-QfrARkXl.js.map +1 -0
- package/dist/checkbox-DhB6K0bK.js +36 -0
- package/dist/checkbox-DhB6K0bK.js.map +1 -0
- package/dist/choice-inputs-t6w3ATNz.js +766 -0
- package/dist/choice-inputs-t6w3ATNz.js.map +1 -0
- package/dist/code-block-Dgbu-CU3.js +185 -0
- package/dist/code-block-Dgbu-CU3.js.map +1 -0
- package/dist/{collapsible-ClvC7Bj3.js → collapsible-D8AEGU1-.js} +4 -4
- package/dist/{collapsible-ClvC7Bj3.js.map → collapsible-D8AEGU1-.js.map} +1 -1
- package/dist/{collection-content-D6S8cv_n.js → collection-content-uK16Grv0.js} +3 -3
- package/dist/{collection-content-D6S8cv_n.js.map → collection-content-uK16Grv0.js.map} +1 -1
- package/dist/{combobox-BFnbJJp3.js → combobox-2Ic8N9bL.js} +103 -98
- package/dist/combobox-2Ic8N9bL.js.map +1 -0
- package/dist/combobox-DLl0bfiq.js +867 -0
- package/dist/combobox-DLl0bfiq.js.map +1 -0
- package/dist/{command-BnmSchli.js → command-kNR20o7x.js} +34 -30
- package/dist/command-kNR20o7x.js.map +1 -0
- package/dist/{comments-u5L0OGip.js → comments-BpDuCUUu.js} +304 -301
- package/dist/comments-BpDuCUUu.js.map +1 -0
- package/dist/components/base/accordion/accordion-variants.d.ts +3 -3
- package/dist/components/base/action-menu/action-menu.d.ts +27 -5
- package/dist/components/base/action-menu/action-menu.recipes.d.ts +21 -0
- package/dist/components/base/action-menu/index.d.ts +1 -0
- package/dist/components/base/avatar/stacked-avatars.d.ts +5 -4
- package/dist/components/base/badge/badge.d.ts +1 -1
- package/dist/components/base/badge/badge.recipes.d.ts +6 -6
- package/dist/components/base/batch-action-bar/batch-action-bar.d.ts +50 -0
- package/dist/components/base/batch-action-bar/batch-action-bar.strings.d.ts +20 -0
- package/dist/components/base/batch-action-bar/index.d.ts +8 -0
- package/dist/components/base/buttons/base-button.d.ts +7 -0
- package/dist/components/base/buttons/button-group.recipes.d.ts +2 -2
- package/dist/components/base/buttons/button.recipes.d.ts +2 -2
- package/dist/components/base/buttons/button.variants.d.ts +1 -0
- package/dist/components/base/buttons/loader-button.d.ts +3 -1
- package/dist/components/base/buttons/text-button.d.ts +2 -2
- package/dist/components/base/carousel/carousel.d.ts +3 -1
- package/dist/components/base/chart/chart.d.ts +7 -7
- package/dist/components/base/choice-inputs/checkbox.d.ts +6 -7
- package/dist/components/base/choice-inputs/choice-types.d.ts +24 -3
- package/dist/components/base/choice-inputs/pill-radio-group.d.ts +9 -0
- package/dist/components/base/choice-inputs/select-popup.d.ts +9 -1
- package/dist/components/base/choice-inputs/switch-card.d.ts +1 -1
- package/dist/components/base/date-pickers/date-picker-field.d.ts +23 -0
- package/dist/components/base/date-pickers/datepicker.types.d.ts +13 -3
- package/dist/components/base/display/alert-dialog.d.ts +10 -3
- package/dist/components/base/display/content-block.d.ts +4 -2
- package/dist/components/base/display/date-block.d.ts +1 -1
- package/dist/components/base/display/dialog.d.ts +8 -5
- package/dist/components/base/display/icon-badge/icon-badge.d.ts +1 -1
- package/dist/components/base/display/surface-title.d.ts +6 -1
- package/dist/components/base/feedback/alert.d.ts +1 -1
- package/dist/components/base/feedback/state-display.d.ts +5 -4
- package/dist/components/base/forms/form-sizing.d.ts +43 -8
- package/dist/components/base/forms/workflow.d.ts +2 -0
- package/dist/components/base/forms-numeric/coordinates-input.d.ts +3 -0
- package/dist/components/base/forms-numeric/rounding-mode-select.d.ts +4 -1
- package/dist/components/base/metadata-list/index.d.ts +12 -0
- package/dist/components/{blocks/data-display/metadata → base/metadata-list}/metadata-list.d.ts +28 -25
- package/dist/components/{blocks/data-display/metadata → base/metadata-list}/metadata-value.d.ts +2 -2
- package/dist/components/base/navigation/dropdown-menu.d.ts +2 -2
- package/dist/components/base/navigation/index.d.ts +1 -1
- package/dist/components/base/navigation/language-switcher.d.ts +4 -1
- package/dist/components/base/navigation/overflow-tab-bar.d.ts +7 -0
- package/dist/components/base/navigation/page-header/index.d.ts +1 -0
- package/dist/components/base/navigation/page-header/page-header-commands.d.ts +73 -0
- package/dist/components/base/navigation/page-header/page-header.d.ts +30 -4
- package/dist/components/base/qr-code/qr-code.d.ts +2 -0
- package/dist/components/base/sheet/index.d.ts +29 -1
- package/dist/components/base/sheet/sheet.d.ts +10 -5
- package/dist/components/base/signature-pad/signature-pad.types.d.ts +5 -1
- package/dist/components/base/signature-pad/signature-pad.utils.d.ts +11 -3
- package/dist/components/base/spinner/spinner.d.ts +3 -2
- package/dist/components/base/structure/structure.types.d.ts +1 -1
- package/dist/components/base/text-inputs/field-clear-button.d.ts +6 -0
- package/dist/components/base/text-inputs/input-group.d.ts +2 -2
- package/dist/components/base/upload/upload.recipes.d.ts +33 -0
- package/dist/components/base/value-inputs/date-time-input.d.ts +4 -2
- package/dist/components/base/value-inputs/index.d.ts +5 -5
- package/dist/components/base/value-inputs/tags-input.d.ts +38 -12
- package/dist/components/blocks/admin/api-key-list/api-key-list.types.d.ts +1 -1
- package/dist/components/blocks/analytics/format-metric-value.d.ts +11 -1
- package/dist/components/blocks/analytics/index.d.ts +1 -1
- package/dist/components/blocks/analytics/use-metric-format-options.d.ts +3 -0
- package/dist/components/blocks/commerce/address-card/address-card.d.ts +1 -1
- package/dist/components/blocks/commerce/address-card/types.d.ts +4 -1
- package/dist/components/blocks/commerce/booking-calendar-event-card/booking-calendar-event-card.d.ts +4 -0
- package/dist/components/blocks/commerce/booking-calendar-event-card/booking-calendar-event-card.types.d.ts +2 -2
- package/dist/components/blocks/commerce/cart-summary/cart-summary.d.ts +3 -1
- package/dist/components/blocks/commerce/cart-summary/index.d.ts +2 -2
- package/dist/components/blocks/commerce/cart-summary/types.d.ts +6 -1
- package/dist/components/blocks/commerce/discount-stack/discount-stack.d.ts +3 -1
- package/dist/components/blocks/commerce/discount-stack/index.d.ts +2 -2
- package/dist/components/blocks/commerce/discount-stack/types.d.ts +16 -4
- package/dist/components/blocks/commerce/fulfillment-group/fulfillment-group.d.ts +5 -0
- package/dist/components/blocks/commerce/fulfillment-group/index.d.ts +2 -0
- package/dist/components/blocks/commerce/fulfillment-group/types.d.ts +43 -0
- package/dist/components/blocks/commerce/index.d.ts +13 -5
- package/dist/components/blocks/commerce/inventory-section/types.d.ts +4 -1
- package/dist/components/blocks/commerce/invoice-header/invoice-header.d.ts +1 -1
- package/dist/components/blocks/commerce/invoice-header/types.d.ts +4 -2
- package/dist/components/blocks/commerce/invoice-mini/invoice-mini.d.ts +1 -1
- package/dist/components/blocks/commerce/invoice-mini/types.d.ts +2 -1
- package/dist/components/blocks/commerce/loyalty-points/types.d.ts +1 -1
- package/dist/components/blocks/commerce/order-customer/index.d.ts +2 -0
- package/dist/components/blocks/commerce/order-customer/order-customer.d.ts +5 -0
- package/dist/components/blocks/commerce/order-customer/types.d.ts +48 -0
- package/dist/components/blocks/commerce/order-header/index.d.ts +2 -0
- package/dist/components/blocks/commerce/order-header/order-header.d.ts +5 -0
- package/dist/components/blocks/commerce/order-header/types.d.ts +37 -0
- package/dist/components/blocks/commerce/order-line-item/index.d.ts +2 -0
- package/dist/components/blocks/commerce/order-line-item/order-line-item.d.ts +5 -0
- package/dist/components/blocks/commerce/order-line-item/types.d.ts +46 -0
- package/dist/components/blocks/commerce/order-status/types.d.ts +4 -0
- package/dist/components/blocks/commerce/order-summary/index.d.ts +2 -0
- package/dist/components/blocks/commerce/order-summary/order-summary.d.ts +5 -0
- package/dist/components/blocks/commerce/order-summary/types.d.ts +42 -0
- package/dist/components/blocks/commerce/order-transactions/index.d.ts +2 -0
- package/dist/components/blocks/commerce/order-transactions/order-transactions.d.ts +5 -0
- package/dist/components/blocks/commerce/order-transactions/types.d.ts +46 -0
- package/dist/components/blocks/commerce/payment-method/index.d.ts +2 -2
- package/dist/components/blocks/commerce/payment-method/payment-method.d.ts +9 -1
- package/dist/components/blocks/commerce/payment-method/types.d.ts +14 -1
- package/dist/components/blocks/commerce/refund-status/index.d.ts +2 -2
- package/dist/components/blocks/commerce/refund-status/refund-status.d.ts +3 -1
- package/dist/components/blocks/commerce/refund-status/types.d.ts +6 -3
- package/dist/components/blocks/commerce/seo-listing/seo-listing-card.d.ts +1 -1
- package/dist/components/blocks/commerce/seo-listing/types.d.ts +3 -1
- package/dist/components/blocks/commerce/shared/address-lines.d.ts +21 -0
- package/dist/components/blocks/commerce/shared/line-thumbnail.d.ts +9 -0
- package/dist/components/blocks/commerce/shared/order-status.d.ts +51 -0
- package/dist/components/blocks/commerce/shipment-tracking/shipment-tracking.d.ts +1 -1
- package/dist/components/blocks/commerce/shipment-tracking/types.d.ts +27 -6
- package/dist/components/blocks/commerce/summary-panel/amount-row.d.ts +2 -0
- package/dist/components/blocks/commerce/summary-panel/index.d.ts +3 -0
- package/dist/components/blocks/commerce/summary-panel/summary-panel.d.ts +2 -0
- package/dist/components/blocks/commerce/summary-panel/types.d.ts +26 -0
- package/dist/components/blocks/commerce/tax-breakdown/tax-breakdown.d.ts +1 -1
- package/dist/components/blocks/commerce/tax-breakdown/types.d.ts +2 -1
- package/dist/components/blocks/commerce/vendor-profile/types.d.ts +4 -1
- package/dist/components/blocks/data-display/dense-info-card/dense-info.strings.d.ts +4 -1
- package/dist/components/blocks/data-display/inline-stat/inline-stat.d.ts +4 -1
- package/dist/components/blocks/data-display/metadata/index.d.ts +30 -4
- package/dist/components/features/activities/partials/activity-row.d.ts +6 -2
- package/dist/components/features/activities/partials/tone-tokens.d.ts +0 -6
- package/dist/components/features/global-search/partials/global-search-group-heading.d.ts +15 -0
- package/dist/components/features/global-search/partials/global-search-idle-state.d.ts +1 -1
- package/dist/components/features/global-search/partials/tone-palettes.d.ts +0 -5
- package/dist/components/features/kanban/kanban.d.ts +1 -1
- package/dist/components/features/kanban/kanban.strings.d.ts +1 -1
- package/dist/components/features/kanban/kanban.types.d.ts +2 -2
- package/dist/components/features/media-library/hooks/use-media-library.d.ts +1 -1
- package/dist/components/features/media-library/index.d.ts +1 -1
- package/dist/components/features/media-library/media-library.d.ts +1 -1
- package/dist/components/features/media-library/media-library.strings.d.ts +4 -0
- package/dist/components/features/media-library/media-library.types.d.ts +74 -1
- package/dist/components/features/media-library/partials/media-library-partials.d.ts +3 -3
- package/dist/components/features/mentions/partials/mention-kind-toggles.d.ts +16 -0
- package/dist/components/features/overlays/alert-dialog.d.ts +1 -1
- package/dist/components/features/overlays/dialog.d.ts +1 -1
- package/dist/components/features/overlays/drawer.d.ts +1 -1
- package/dist/components/features/overlays/hooks/use-overlay-actions.d.ts +2 -2
- package/dist/components/features/overlays/hooks/use-overlay-visibility.d.ts +11 -4
- package/dist/components/features/overlays/index.d.ts +1 -1
- package/dist/components/features/overlays/overlay-tone-icon.d.ts +37 -0
- package/dist/components/features/overlays/overlays.types.d.ts +62 -19
- package/dist/components/features/products/components/product-contract-overview.d.ts +5 -0
- package/dist/components/features/products/components/product-details-card.d.ts +5 -0
- package/dist/components/features/products/components/product-operations-card.d.ts +5 -0
- package/dist/components/features/products/components/product-option-action-menu.d.ts +5 -0
- package/dist/components/features/products/components/product-options-summary.d.ts +5 -0
- package/dist/components/features/products/components/product-policies-card.d.ts +5 -0
- package/dist/components/features/products/components/product-quote-preview-card.d.ts +5 -0
- package/dist/components/features/products/components/product-readiness-card.d.ts +5 -0
- package/dist/components/features/products/components/product-structure-card.d.ts +5 -0
- package/dist/components/features/products/components/product-variant-action-menu.d.ts +23 -1
- package/dist/components/features/products/components/product-variants-manager.d.ts +1 -1
- package/dist/components/features/products/partials/index.d.ts +1 -1
- package/dist/components/features/products/partials/product-metric-tile.d.ts +6 -0
- package/dist/components/features/products/partials/product-tone.d.ts +11 -1
- package/dist/components/features/products/products.types.d.ts +11 -3
- package/dist/components/features/resource/index.d.ts +1 -1
- package/dist/components/features/resource/resource.d.ts +1 -1
- package/dist/components/features/resource/resource.types.d.ts +34 -6
- package/dist/components/features/rich-text-editor/index.d.ts +2 -1
- package/dist/components/features/rich-text-editor/partials/image-nodes.d.ts +13 -0
- package/dist/components/features/rich-text-editor/partials/image-uploads.d.ts +66 -0
- package/dist/components/features/rich-text-editor/partials/inline-reference-node.d.ts +19 -0
- package/dist/components/features/rich-text-editor/rich-text-editor.recipes.d.ts +1 -1
- package/dist/components/features/rich-text-editor/rich-text-editor.strings.d.ts +14 -0
- package/dist/components/features/rich-text-editor/rich-text-editor.types.d.ts +45 -0
- package/dist/components/features/rich-text-editor/use-rich-text-images.d.ts +18 -0
- package/dist/components/features/sync/index.d.ts +26 -3
- package/dist/components/features/table/data-table.d.ts +1 -1
- package/dist/components/features/table/partials/cell-renderers.d.ts +1 -1
- package/dist/components/features/table/table.types.d.ts +32 -7
- package/dist/components/layout/page/index.d.ts +1 -1
- package/dist/components/layout/page/page.types.d.ts +51 -4
- package/dist/components/layout/page/partials/page-actions.d.ts +1 -0
- package/dist/components/layout/page/partials/page-header.d.ts +1 -1
- package/dist/components/layout/settings/settings.d.ts +16 -2
- package/dist/components/layout/workspace/workspace.types.d.ts +21 -4
- package/dist/components/primitives/date.d.ts +16 -3
- package/dist/components/primitives/dimensions.d.ts +6 -0
- package/dist/components/primitives/duration.d.ts +6 -0
- package/dist/components/primitives/file-size.d.ts +6 -0
- package/dist/components/primitives/index.d.ts +1 -1
- package/dist/components/primitives/initials.d.ts +11 -2
- package/dist/components/primitives/link.d.ts +7 -0
- package/dist/components/primitives/money.d.ts +29 -7
- package/dist/components/primitives/number.d.ts +17 -0
- package/dist/components/primitives/value-typography.d.ts +54 -0
- package/dist/components/primitives/value.d.ts +31 -6
- package/dist/components/typography/heading.d.ts +9 -1
- package/dist/components/typography/label.d.ts +3 -0
- package/dist/components/typography/rich-text/index.d.ts +1 -1
- package/dist/components/typography/rich-text/rich-text-tree.d.ts +19 -0
- package/dist/components/typography/rich-text/rich-text.d.ts +16 -0
- package/dist/components/typography/running-text.d.ts +12 -0
- package/dist/components/typography/text-link.d.ts +24 -1
- package/dist/components/typography/text.d.ts +12 -0
- package/dist/components/typography/text.styles.d.ts +35 -13
- package/dist/components/ui/button.d.ts +1 -1
- package/dist/components/ui/checkbox.d.ts +6 -0
- package/dist/components/ui/overlay.recipes.d.ts +6 -2
- package/dist/components/ui/select.d.ts +3 -1
- package/dist/components/ui/switch.d.ts +5 -0
- package/dist/{containers-DqB-bSYE.js → containers-DmWiJa2I.js} +36 -35
- package/dist/containers-DmWiJa2I.js.map +1 -0
- package/dist/{copyable-BTSByfmq.js → copyable-B3Gwgdqc.js} +6 -6
- package/dist/{copyable-BTSByfmq.js.map → copyable-B3Gwgdqc.js.map} +1 -1
- package/dist/data-display-DafIvCl5.js +960 -0
- package/dist/data-display-DafIvCl5.js.map +1 -0
- package/dist/date-BgK3bTdo.js +144 -0
- package/dist/date-BgK3bTdo.js.map +1 -0
- package/dist/date-picker-CF-DtUpF.js +1529 -0
- package/dist/date-picker-CF-DtUpF.js.map +1 -0
- package/dist/date-pickers-BmzxJl5l.js +174 -0
- package/dist/date-pickers-BmzxJl5l.js.map +1 -0
- package/dist/{display-CS6Hbk18.js → display-DsQTVzMz.js} +88 -87
- package/dist/display-DsQTVzMz.js.map +1 -0
- package/dist/{dropdown-menu-D-boNgGO.js → dropdown-menu-E2qmdC7o.js} +23 -16
- package/dist/dropdown-menu-E2qmdC7o.js.map +1 -0
- package/dist/features/activities.js +437 -521
- package/dist/features/activities.js.map +1 -1
- package/dist/features/ai-chat.js +174 -172
- package/dist/features/ai-chat.js.map +1 -1
- package/dist/features/async-preview.js +8 -8
- package/dist/features/async-preview.js.map +1 -1
- package/dist/features/combobox.js +1 -1
- package/dist/features/comments.js +1 -1
- package/dist/features/data-view.js +139 -138
- package/dist/features/data-view.js.map +1 -1
- package/dist/features/email-composer/engine.js +1 -1
- package/dist/features/email-composer.js +353 -352
- package/dist/features/email-composer.js.map +1 -1
- package/dist/features/event-calendar.js +262 -269
- package/dist/features/event-calendar.js.map +1 -1
- package/dist/features/filters.js +1 -1
- package/dist/features/global-search.js +307 -310
- package/dist/features/global-search.js.map +1 -1
- package/dist/features/kanban.js +95 -97
- package/dist/features/kanban.js.map +1 -1
- package/dist/features/map.js +56 -57
- package/dist/features/map.js.map +1 -1
- package/dist/features/media-library.js +914 -824
- package/dist/features/media-library.js.map +1 -1
- package/dist/features/mentions.js +1 -1
- package/dist/features/overlays.js +1 -1
- package/dist/features/products.js +1272 -1311
- package/dist/features/products.js.map +1 -1
- package/dist/features/questionnaire.js +204 -194
- package/dist/features/questionnaire.js.map +1 -1
- package/dist/features/resource-assignment.js +103 -95
- package/dist/features/resource-assignment.js.map +1 -1
- package/dist/features/resource.js +77 -69
- package/dist/features/resource.js.map +1 -1
- package/dist/features/rich-text-editor.js +30 -11
- package/dist/features/rich-text-editor.js.map +1 -1
- package/dist/features/schema-form.js +193 -189
- package/dist/features/schema-form.js.map +1 -1
- package/dist/features/suggestions.js +3 -3
- package/dist/features/sync.js +7 -7
- package/dist/features/sync.js.map +1 -1
- package/dist/features/table.js +1 -1
- package/dist/features/theme-tweaker.js +455 -455
- package/dist/features/theme-tweaker.js.map +1 -1
- package/dist/feedback-qNuMBtRH.js +233 -0
- package/dist/feedback-qNuMBtRH.js.map +1 -0
- package/dist/field-affordance-recipes-qQeIf4lG.js +48 -0
- package/dist/field-affordance-recipes-qQeIf4lG.js.map +1 -0
- package/dist/field-state-recipes-BVA2CWHo.js +12 -0
- package/dist/field-state-recipes-BVA2CWHo.js.map +1 -0
- package/dist/{filters-D6FF8L6s.js → filters-BkHH53uv.js} +414 -412
- package/dist/filters-BkHH53uv.js.map +1 -0
- package/dist/focus-recipes-B653VaLq.js +12 -0
- package/dist/focus-recipes-B653VaLq.js.map +1 -0
- package/dist/{form-field-CZwrkP7m.js → form-field-DUt4UxSV.js} +7 -7
- package/dist/{form-field-CZwrkP7m.js.map → form-field-DUt4UxSV.js.map} +1 -1
- package/dist/form-sizing-By94KzXE.js +130 -0
- package/dist/form-sizing-By94KzXE.js.map +1 -0
- package/dist/{forms-B5NCbkSC.js → forms-Bzha-Y3B.js} +25 -25
- package/dist/forms-Bzha-Y3B.js.map +1 -0
- package/dist/forms-numeric-C0bvjRPZ.js +906 -0
- package/dist/forms-numeric-C0bvjRPZ.js.map +1 -0
- package/dist/{header-kxruN3RM.js → header-BOefOKd1.js} +38 -41
- package/dist/header-BOefOKd1.js.map +1 -0
- package/dist/{hooks-BrlnCwQd.js → hooks-9k_TtmKh.js} +2 -2
- package/dist/{hooks-BrlnCwQd.js.map → hooks-9k_TtmKh.js.map} +1 -1
- package/dist/{http-CdEIHyQf.js → http-D_6rOnzU.js} +2 -2
- package/dist/{http-CdEIHyQf.js.map → http-D_6rOnzU.js.map} +1 -1
- package/dist/icon-badge-CAuKupo9.js +55 -0
- package/dist/icon-badge-CAuKupo9.js.map +1 -0
- package/dist/index.js +7 -7
- package/dist/input-DWhBBBww.js +262 -0
- package/dist/input-DWhBBBww.js.map +1 -0
- package/dist/{input-vxcaNCYC.js → input-Ddi_LSYv.js} +3 -3
- package/dist/{input-vxcaNCYC.js.map → input-Ddi_LSYv.js.map} +1 -1
- package/dist/interaction-recipes-CHr0dJUs.js +24 -0
- package/dist/interaction-recipes-CHr0dJUs.js.map +1 -0
- package/dist/item-DEmDiTlD.js +265 -0
- package/dist/item-DEmDiTlD.js.map +1 -0
- package/dist/layer-recipes-CCpklYME.js +13 -0
- package/dist/layer-recipes-CCpklYME.js.map +1 -0
- package/dist/layout/app-shell.js +1 -1
- package/dist/layout/auth.js +1 -1
- package/dist/layout/containers.js +1 -1
- package/dist/layout/header.js +1 -1
- package/dist/layout/hooks.js +1 -1
- package/dist/layout/navigation.js +1 -1
- package/dist/layout/page.js +1 -1
- package/dist/layout/settings.js +1 -1
- package/dist/layout/sidebar.js +2 -2
- package/dist/layout/workspace.js +1 -1
- package/dist/layout.js +10 -10
- package/dist/lib/affordance-geometry.generated.d.ts +7 -1
- package/dist/lib/field-affordance-recipes.d.ts +41 -1
- package/dist/lib/field-state-recipes.d.ts +9 -6
- package/dist/lib/focus-recipes.d.ts +24 -0
- package/dist/lib/format.d.ts +9 -0
- package/dist/lib/interaction-recipes.d.ts +35 -0
- package/dist/lib/layer-recipes.d.ts +19 -0
- package/dist/lib/money-format.d.ts +30 -0
- package/dist/lib/motion-recipes.d.ts +1 -0
- package/dist/lib/overlay-anatomy-recipes.d.ts +2 -1
- package/dist/lib/safe-image-src.d.ts +10 -0
- package/dist/lib/sanitize-html.d.ts +15 -3
- package/dist/lib/surface-recipes.d.ts +48 -6
- package/dist/lib/token-merge.generated.d.ts +17 -14
- package/dist/lib/tone-recipes.d.ts +79 -0
- package/dist/lib/track-recipes.d.ts +1 -1
- package/dist/lib/ui-provider/hooks.d.ts +2 -1
- package/dist/lib/ui-provider/index.d.ts +2 -2
- package/dist/lib/ui-provider/provider.d.ts +7 -2
- package/dist/lib/ui-provider/store.d.ts +6 -2
- package/dist/lib/ui-provider/types.d.ts +14 -2
- package/dist/lib/utils.js +1 -1
- package/dist/media-gallery-DcTtAaeC.js +203 -0
- package/dist/media-gallery-DcTtAaeC.js.map +1 -0
- package/dist/mentions-D-uyCh01.js +568 -0
- package/dist/mentions-D-uyCh01.js.map +1 -0
- package/dist/{message-SZUNB1eX.js → message-CdHgIWKf.js} +5 -5
- package/dist/{message-SZUNB1eX.js.map → message-CdHgIWKf.js.map} +1 -1
- package/dist/metadata-list-X5rYAKSB.js +394 -0
- package/dist/metadata-list-X5rYAKSB.js.map +1 -0
- package/dist/{motion-recipes-B6jKXEcN.js → motion-recipes-ChBg4HBq.js} +3 -2
- package/dist/{motion-recipes-B6jKXEcN.js.map → motion-recipes-ChBg4HBq.js.map} +1 -1
- package/dist/navigation-D3KwXmaq.js +145 -0
- package/dist/navigation-D3KwXmaq.js.map +1 -0
- package/dist/navigation-HJf5zxlH.js +268 -0
- package/dist/navigation-HJf5zxlH.js.map +1 -0
- package/dist/{navigation-row-recipes-DQEXQcqY.js → navigation-row-recipes-BVowojQw.js} +2 -2
- package/dist/{navigation-row-recipes-DQEXQcqY.js.map → navigation-row-recipes-BVowojQw.js.map} +1 -1
- package/dist/number-DMhe-Vsk.js +352 -0
- package/dist/number-DMhe-Vsk.js.map +1 -0
- package/dist/overflow-tab-bar-sQHXLlwQ.js +280 -0
- package/dist/overflow-tab-bar-sQHXLlwQ.js.map +1 -0
- package/dist/overlay.recipes-8GHqmlb4.js +6 -0
- package/dist/overlay.recipes-8GHqmlb4.js.map +1 -0
- package/dist/overlays-I0axtYA6.js +999 -0
- package/dist/overlays-I0axtYA6.js.map +1 -0
- package/dist/{page-hGmT4nWK.js → page-B5dTH9gE.js} +79 -68
- package/dist/page-B5dTH9gE.js.map +1 -0
- package/dist/page-header-commands-DjzFEq3E.js +126 -0
- package/dist/page-header-commands-DjzFEq3E.js.map +1 -0
- package/dist/{pagination-NLGqRirf.js → pagination-3bPA_a6K.js} +19 -19
- package/dist/{pagination-NLGqRirf.js.map → pagination-3bPA_a6K.js.map} +1 -1
- package/dist/{popover-CghIYdQf.js → popover-Di55PyAI.js} +8 -8
- package/dist/popover-Di55PyAI.js.map +1 -0
- package/dist/{popover-menu-B4PoWhRl.js → popover-menu-B71Tn2Qz.js} +6 -6
- package/dist/{popover-menu-B4PoWhRl.js.map → popover-menu-B71Tn2Qz.js.map} +1 -1
- package/dist/{popover.recipes-QlD4JenO.js → popover.recipes-Bdyhj2db.js} +2 -2
- package/dist/{popover.recipes-QlD4JenO.js.map → popover.recipes-Bdyhj2db.js.map} +1 -1
- package/dist/primitives-B-CkiEMU.js +379 -0
- package/dist/primitives-B-CkiEMU.js.map +1 -0
- package/dist/primitives.js +5 -5
- package/dist/{progress-BroqrAyV.js → progress-rnS8-uAW.js} +11 -11
- package/dist/progress-rnS8-uAW.js.map +1 -0
- package/dist/{receipt-BuJynLgf.js → receipt-D0oswZ0p.js} +6 -6
- package/dist/{receipt-BuJynLgf.js.map → receipt-D0oswZ0p.js.map} +1 -1
- package/dist/rich-text-DvGulsNJ.js +78 -0
- package/dist/rich-text-DvGulsNJ.js.map +1 -0
- package/dist/rich-text-editor-sMU_Scqm.js +1204 -0
- package/dist/rich-text-editor-sMU_Scqm.js.map +1 -0
- package/dist/rich-text-editor.recipes-CadiF_Uu.js +88 -0
- package/dist/rich-text-editor.recipes-CadiF_Uu.js.map +1 -0
- package/dist/rich-text-editor.strings-CB59ekH2.js +38 -0
- package/dist/rich-text-editor.strings-CB59ekH2.js.map +1 -0
- package/dist/safe-image-src-C6kQSMBZ.js +17 -0
- package/dist/safe-image-src-C6kQSMBZ.js.map +1 -0
- package/dist/sanitize-html-DsQmI48u.js +92 -0
- package/dist/sanitize-html-DsQmI48u.js.map +1 -0
- package/dist/scroll-area-Bt_vXY2b.js +48 -0
- package/dist/scroll-area-Bt_vXY2b.js.map +1 -0
- package/dist/{separator-BNIgG3au.js → separator-C8DlRGwF.js} +4 -4
- package/dist/separator-C8DlRGwF.js.map +1 -0
- package/dist/{separator-BhtFyo4x.js → separator-CYHnjsAb.js} +2 -2
- package/dist/{separator-BhtFyo4x.js.map → separator-CYHnjsAb.js.map} +1 -1
- package/dist/services/actions/action-adapters.d.ts +22 -0
- package/dist/services/actions/index.d.ts +1 -1
- package/dist/services/actions.js +23 -6
- package/dist/services/actions.js.map +1 -1
- package/dist/settings-CQW3b-Cu.js +170 -0
- package/dist/settings-CQW3b-Cu.js.map +1 -0
- package/dist/sheet-4SEvVYzA.js +210 -0
- package/dist/sheet-4SEvVYzA.js.map +1 -0
- package/dist/{sidebar-CyR4XKwR.js → sidebar-C7WWR29L.js} +181 -180
- package/dist/sidebar-C7WWR29L.js.map +1 -0
- package/dist/sidebar-d7Dg80ln.js +511 -0
- package/dist/sidebar-d7Dg80ln.js.map +1 -0
- package/dist/{skeleton-3F0uhYn3.js → skeleton-Cz890JZF.js} +10 -10
- package/dist/skeleton-Cz890JZF.js.map +1 -0
- package/dist/smart-card-lFKxn5Hu.js +595 -0
- package/dist/smart-card-lFKxn5Hu.js.map +1 -0
- package/dist/{spinner-Cpf7oRkF.js → spinner-fa3h1Aif.js} +10 -8
- package/dist/spinner-fa3h1Aif.js.map +1 -0
- package/dist/{structure-CRdqVawd.js → structure-DC2dygdA.js} +3 -3
- package/dist/{structure-CRdqVawd.js.map → structure-DC2dygdA.js.map} +1 -1
- package/dist/{structure.recipes-Bqhf9oIh.js → structure.recipes-EPz60cU8.js} +37 -19
- package/dist/structure.recipes-EPz60cU8.js.map +1 -0
- package/dist/style.css +1 -1
- package/dist/surface-recipes-BKRVW8Os.js +43 -0
- package/dist/surface-recipes-BKRVW8Os.js.map +1 -0
- package/dist/table-CIKyLUsy.js +163 -0
- package/dist/table-CIKyLUsy.js.map +1 -0
- package/dist/{table-CcRDZiLP.js → table-CrcLN9Io.js} +544 -530
- package/dist/table-CrcLN9Io.js.map +1 -0
- package/dist/tabs-DwBJfjxX.js +190 -0
- package/dist/tabs-DwBJfjxX.js.map +1 -0
- package/dist/{text-inputs-DsR56TR-.js → text-inputs-aaK9wcDT.js} +151 -155
- package/dist/text-inputs-aaK9wcDT.js.map +1 -0
- package/dist/{text.styles-Q4sGAIgA.js → text.styles-g4He6UIW.js} +17 -14
- package/dist/text.styles-g4He6UIW.js.map +1 -0
- package/dist/theme.css +16 -12
- package/dist/themes/green.css +24 -0
- package/dist/{timelines-D1pkt3se.js → timelines-C_SBwHNP.js} +154 -164
- package/dist/timelines-C_SBwHNP.js.map +1 -0
- package/dist/tone-recipes-CPoExcTE.js +70 -0
- package/dist/tone-recipes-CPoExcTE.js.map +1 -0
- package/dist/tooltip-CsfgrfS7.js +111 -0
- package/dist/tooltip-CsfgrfS7.js.map +1 -0
- package/dist/track-recipes-CDcKmndW.js +10 -0
- package/dist/track-recipes-CDcKmndW.js.map +1 -0
- package/dist/{tree-BtmYyMZV.js → tree-BiKhg8AY.js} +72 -70
- package/dist/tree-BiKhg8AY.js.map +1 -0
- package/dist/typography/rich-text.js +1 -1
- package/dist/typography-DTRkE9zL.js +117 -0
- package/dist/typography-DTRkE9zL.js.map +1 -0
- package/dist/typography.js +2 -2
- package/dist/{ui-provider-DRPn3qNl.js → ui-provider-1D_NSYzO.js} +30 -23
- package/dist/ui-provider-1D_NSYzO.js.map +1 -0
- package/dist/ui-provider.js +3 -3
- package/dist/{upload-CDbYw1WN.js → upload-BO8-CLN6.js} +294 -293
- package/dist/upload-BO8-CLN6.js.map +1 -0
- package/dist/{upload-queue-CNd_hH_a.js → upload-queue-EOC8g1gf.js} +133 -138
- package/dist/upload-queue-EOC8g1gf.js.map +1 -0
- package/dist/upload.recipes-BbxTqrCT.js +61 -0
- package/dist/upload.recipes-BbxTqrCT.js.map +1 -0
- package/dist/{usage-card-VyJLUwRr.js → usage-card-obRaBskq.js} +42 -43
- package/dist/{usage-card-VyJLUwRr.js.map → usage-card-obRaBskq.js.map} +1 -1
- package/dist/{utils-BvH9PSmq.js → utils-l5LpDw2z.js} +264 -62
- package/dist/utils-l5LpDw2z.js.map +1 -0
- package/dist/value-inputs-TAYMX111.js +947 -0
- package/dist/value-inputs-TAYMX111.js.map +1 -0
- package/dist/value-typography-b8wpz1eX.js +116 -0
- package/dist/value-typography-b8wpz1eX.js.map +1 -0
- package/dist/workspace-DH0v0KcB.js +407 -0
- package/dist/workspace-DH0v0KcB.js.map +1 -0
- package/docs/consumer-skill/SKILL.md +62 -50
- package/docs/consumer-skill/examples/app-layout.tsx +3 -5
- package/docs/consumer-skill/examples/composition.tsx +3 -3
- package/docs/consumer-skill/examples/detail.tsx +59 -13
- package/docs/consumer-skill/examples/edit.tsx +2 -2
- package/docs/consumer-skill/examples/layout-blocks.tsx +20 -0
- package/docs/consumer-skill/examples/manifest.json +28 -6
- package/docs/consumer-skill/examples/receipt.tsx +2 -2
- package/docs/consumer-skill/examples/scoped-directory.tsx +3 -3
- package/docs/consumer-skill/examples/website.tsx +1 -1
- package/docs/consumer-skill/references/agents-md.md +33 -0
- package/docs/consumer-skill/references/analytics.md +1 -1
- package/docs/consumer-skill/references/composition.md +139 -24
- package/docs/consumer-skill/references/design-contract.md +12 -3
- package/docs/consumer-skill/references/discovery.md +4 -0
- package/docs/consumer-skill/references/installation.md +33 -1
- package/docs/consumer-skill/references/integration.md +32 -1
- package/docs/consumer-skill/references/public-api.json +1051 -610
- package/docs/consumer-skill/references/review.md +44 -8
- package/docs/consumer-skill/references/theming.md +14 -4
- package/docs/consumer-skill/references/tokens.json +5 -2
- package/docs/consumer-skill/references/workflows.md +30 -9
- package/docs/consumer-skill/scripts/composition-policy.mjs +127 -6
- package/docs/consumer-skill/scripts/discovery.mjs +11 -3
- package/docs/consumer-skill/scripts/pin-button-defaults.mjs +95 -0
- package/docs/consumer-skill/scripts/surface-policy.mjs +139 -5
- package/package.json +13 -3
- package/dist/accordion-BRTcsp8J.js +0 -205
- package/dist/accordion-BRTcsp8J.js.map +0 -1
- package/dist/action-menu-Drxw_vJk.js +0 -265
- package/dist/action-menu-Drxw_vJk.js.map +0 -1
- package/dist/affordance-geometry.generated-CL84ZN9A.js.map +0 -1
- package/dist/ai-artifact-DLVdK0Py.js.map +0 -1
- package/dist/attachment-DbjUWsP0.js +0 -244
- package/dist/attachment-DbjUWsP0.js.map +0 -1
- package/dist/auth-CAQcasMV.js.map +0 -1
- package/dist/avatar-Bu2HhitA.js.map +0 -1
- package/dist/badge-CzId1Wlm.js +0 -92
- package/dist/badge-CzId1Wlm.js.map +0 -1
- package/dist/breadcrumbs-BuYz5SDU.js +0 -128
- package/dist/breadcrumbs-BuYz5SDU.js.map +0 -1
- package/dist/button-BZDasD04.js +0 -651
- package/dist/button-BZDasD04.js.map +0 -1
- package/dist/button-BZyfTvwm.js.map +0 -1
- package/dist/buttons-D_6KJvEE.js +0 -99
- package/dist/buttons-D_6KJvEE.js.map +0 -1
- package/dist/cards-qGSErLw_.js.map +0 -1
- package/dist/chart-Bsc5BICK.js.map +0 -1
- package/dist/checkbox-BQNDjUCh.js +0 -34
- package/dist/checkbox-BQNDjUCh.js.map +0 -1
- package/dist/choice-inputs-Mk3iWbhr.js +0 -725
- package/dist/choice-inputs-Mk3iWbhr.js.map +0 -1
- package/dist/code-block-DzHKRybS.js +0 -183
- package/dist/code-block-DzHKRybS.js.map +0 -1
- package/dist/combobox-BFnbJJp3.js.map +0 -1
- package/dist/combobox-hozNwUcc.js +0 -847
- package/dist/combobox-hozNwUcc.js.map +0 -1
- package/dist/command-BnmSchli.js.map +0 -1
- package/dist/comments-u5L0OGip.js.map +0 -1
- package/dist/containers-DqB-bSYE.js.map +0 -1
- package/dist/data-display-Bihs9Ven.js +0 -1342
- package/dist/data-display-Bihs9Ven.js.map +0 -1
- package/dist/date-DOKhJPu7.js +0 -140
- package/dist/date-DOKhJPu7.js.map +0 -1
- package/dist/date-picker-DzP5HQq7.js +0 -1541
- package/dist/date-picker-DzP5HQq7.js.map +0 -1
- package/dist/date-pickers-BpgGz7S-.js +0 -196
- package/dist/date-pickers-BpgGz7S-.js.map +0 -1
- package/dist/display-CS6Hbk18.js.map +0 -1
- package/dist/dropdown-menu-D-boNgGO.js.map +0 -1
- package/dist/feedback-CJkUAapr.js +0 -233
- package/dist/feedback-CJkUAapr.js.map +0 -1
- package/dist/field-affordance-recipes-uKY4MsZ_.js +0 -25
- package/dist/field-affordance-recipes-uKY4MsZ_.js.map +0 -1
- package/dist/field-state-recipes-DQQpiLWC.js +0 -11
- package/dist/field-state-recipes-DQQpiLWC.js.map +0 -1
- package/dist/filters-D6FF8L6s.js.map +0 -1
- package/dist/form-sizing-QP8aIRaW.js +0 -103
- package/dist/form-sizing-QP8aIRaW.js.map +0 -1
- package/dist/format-iamDSqs2.js +0 -110
- package/dist/format-iamDSqs2.js.map +0 -1
- package/dist/forms-B5NCbkSC.js.map +0 -1
- package/dist/forms-numeric-Crrm80Lm.js +0 -867
- package/dist/forms-numeric-Crrm80Lm.js.map +0 -1
- package/dist/header-kxruN3RM.js.map +0 -1
- package/dist/icon-badge-Btc6pQrp.js +0 -53
- package/dist/icon-badge-Btc6pQrp.js.map +0 -1
- package/dist/input-SX9V0AL3.js +0 -255
- package/dist/input-SX9V0AL3.js.map +0 -1
- package/dist/item-DE4YnuJx.js +0 -258
- package/dist/item-DE4YnuJx.js.map +0 -1
- package/dist/media-gallery-DLp3HAz0.js +0 -201
- package/dist/media-gallery-DLp3HAz0.js.map +0 -1
- package/dist/mentions-Cl0Kt_Pd.js +0 -565
- package/dist/mentions-Cl0Kt_Pd.js.map +0 -1
- package/dist/navigation-DnQSNMT0.js +0 -276
- package/dist/navigation-DnQSNMT0.js.map +0 -1
- package/dist/navigation-DyytsLRB.js +0 -265
- package/dist/navigation-DyytsLRB.js.map +0 -1
- package/dist/number-DasMFWEG.js +0 -269
- package/dist/number-DasMFWEG.js.map +0 -1
- package/dist/overlay.recipes-BxW5FIfK.js +0 -6
- package/dist/overlay.recipes-BxW5FIfK.js.map +0 -1
- package/dist/overlays-DUbs1KEi.js +0 -1011
- package/dist/overlays-DUbs1KEi.js.map +0 -1
- package/dist/page-hGmT4nWK.js.map +0 -1
- package/dist/page-header-D8nERkn5.js +0 -112
- package/dist/page-header-D8nERkn5.js.map +0 -1
- package/dist/popover-CghIYdQf.js.map +0 -1
- package/dist/primitives-C7ff0QaI.js +0 -337
- package/dist/primitives-C7ff0QaI.js.map +0 -1
- package/dist/progress-BroqrAyV.js.map +0 -1
- package/dist/rich-text-DlxDOtf4.js +0 -32
- package/dist/rich-text-DlxDOtf4.js.map +0 -1
- package/dist/rich-text-editor-BKyG7rWz.js +0 -574
- package/dist/rich-text-editor-BKyG7rWz.js.map +0 -1
- package/dist/rich-text-editor.recipes-B72Nfuze.js +0 -81
- package/dist/rich-text-editor.recipes-B72Nfuze.js.map +0 -1
- package/dist/rich-text-editor.strings-BpnIQgMl.js +0 -25
- package/dist/rich-text-editor.strings-BpnIQgMl.js.map +0 -1
- package/dist/sanitize-html-BG9FGe-j.js +0 -64
- package/dist/sanitize-html-BG9FGe-j.js.map +0 -1
- package/dist/scroll-area-D-pIhEKl.js +0 -47
- package/dist/scroll-area-D-pIhEKl.js.map +0 -1
- package/dist/separator-BNIgG3au.js.map +0 -1
- package/dist/settings-DOTOzeZ2.js +0 -161
- package/dist/settings-DOTOzeZ2.js.map +0 -1
- package/dist/sheet-BFhrNehm.js +0 -205
- package/dist/sheet-BFhrNehm.js.map +0 -1
- package/dist/sidebar-CyR4XKwR.js.map +0 -1
- package/dist/sidebar-SvGJ0Zwi.js +0 -506
- package/dist/sidebar-SvGJ0Zwi.js.map +0 -1
- package/dist/skeleton-3F0uhYn3.js.map +0 -1
- package/dist/smart-card-DjGVV2xr.js +0 -584
- package/dist/smart-card-DjGVV2xr.js.map +0 -1
- package/dist/spinner-Cpf7oRkF.js.map +0 -1
- package/dist/structure.recipes-Bqhf9oIh.js.map +0 -1
- package/dist/surface-recipes-Dd__PD-w.js +0 -28
- package/dist/surface-recipes-Dd__PD-w.js.map +0 -1
- package/dist/table-CLtJTxoR.js +0 -147
- package/dist/table-CLtJTxoR.js.map +0 -1
- package/dist/table-CcRDZiLP.js.map +0 -1
- package/dist/tabs-BNgu7g0u.js +0 -188
- package/dist/tabs-BNgu7g0u.js.map +0 -1
- package/dist/text-inputs-DsR56TR-.js.map +0 -1
- package/dist/text.styles-Q4sGAIgA.js.map +0 -1
- package/dist/timelines-D1pkt3se.js.map +0 -1
- package/dist/track-recipes-LLPNVwFg.js +0 -10
- package/dist/track-recipes-LLPNVwFg.js.map +0 -1
- package/dist/tree-BtmYyMZV.js.map +0 -1
- package/dist/typography-BxQgiZyw.js +0 -96
- package/dist/typography-BxQgiZyw.js.map +0 -1
- package/dist/ui-provider-DRPn3qNl.js.map +0 -1
- package/dist/upload-CDbYw1WN.js.map +0 -1
- package/dist/upload-queue-CNd_hH_a.js.map +0 -1
- package/dist/use-file-drop-target-BX7GnhoQ.js +0 -39
- package/dist/use-file-drop-target-BX7GnhoQ.js.map +0 -1
- package/dist/utils-BvH9PSmq.js.map +0 -1
- package/dist/value-inputs-D0KCrfVC.js +0 -840
- package/dist/value-inputs-D0KCrfVC.js.map +0 -1
- package/dist/workspace-CcR8r-Nt.js +0 -395
- package/dist/workspace-CcR8r-Nt.js.map +0 -1
- /package/dist/components/{blocks/data-display/metadata → base/metadata-list}/metadata-list.strings.d.ts +0 -0
|
@@ -1,265 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
import { useStrings as e } from "./lib/strings.js";
|
|
3
|
-
import { t } from "./utils-BvH9PSmq.js";
|
|
4
|
-
import { a as n, r } from "./typography-BxQgiZyw.js";
|
|
5
|
-
import { t as i } from "./button-BZDasD04.js";
|
|
6
|
-
import { t as a } from "./popover.recipes-QlD4JenO.js";
|
|
7
|
-
import { t as o } from "./collection-content-D6S8cv_n.js";
|
|
8
|
-
import { a as s, d as c, g as l, i as u, n as d, o as f, r as p, s as m, t as h } from "./dropdown-menu-D-boNgGO.js";
|
|
9
|
-
import g, { isValidElement as _ } from "react";
|
|
10
|
-
import { Fragment as v, jsx as y, jsxs as b } from "react/jsx-runtime";
|
|
11
|
-
import { MoreVertical as x } from "lucide-react";
|
|
12
|
-
//#region src/components/base/action-menu/action-menu.strings.ts
|
|
13
|
-
var S = { openMenuLabel: "Open menu" };
|
|
14
|
-
//#endregion
|
|
15
|
-
//#region src/components/base/action-menu/action-menu.tsx
|
|
16
|
-
function C(e) {
|
|
17
|
-
return e.tone === "destructive";
|
|
18
|
-
}
|
|
19
|
-
function w(e, t = !1) {
|
|
20
|
-
let n = e.filter((e) => e.visible !== !1);
|
|
21
|
-
if (t) return n;
|
|
22
|
-
let r = n.filter((e) => !C(e)), i = n.filter(C);
|
|
23
|
-
return [...r, ...i];
|
|
24
|
-
}
|
|
25
|
-
function T(e, t) {
|
|
26
|
-
return e.id ?? (typeof e.label == "string" ? e.label : `action-${t}`);
|
|
27
|
-
}
|
|
28
|
-
function E(e) {
|
|
29
|
-
return e ? _(e) ? e : typeof e == "function" ? /* @__PURE__ */ y(e, {
|
|
30
|
-
className: "size-icon-sm",
|
|
31
|
-
"aria-hidden": "true"
|
|
32
|
-
}) : typeof e == "object" && e && "$$typeof" in e ? /* @__PURE__ */ y(e, {
|
|
33
|
-
className: "size-icon-sm",
|
|
34
|
-
"aria-hidden": !0
|
|
35
|
-
}) : e : null;
|
|
36
|
-
}
|
|
37
|
-
function D(e, r) {
|
|
38
|
-
return typeof e == "string" || typeof e == "number" || typeof e == "bigint" ? /* @__PURE__ */ y(n, {
|
|
39
|
-
tag: "span",
|
|
40
|
-
lineHeight: "tight",
|
|
41
|
-
className: t("text-inherit", r),
|
|
42
|
-
children: e
|
|
43
|
-
}) : r ? /* @__PURE__ */ y("span", {
|
|
44
|
-
className: r,
|
|
45
|
-
children: e
|
|
46
|
-
}) : e;
|
|
47
|
-
}
|
|
48
|
-
function O(e) {
|
|
49
|
-
return e === "destructive" ? "destructive" : "default";
|
|
50
|
-
}
|
|
51
|
-
function k(e) {
|
|
52
|
-
let t = e.tone ?? "primary", n = e.buttonStyle ?? "solid";
|
|
53
|
-
return n === "link" ? {
|
|
54
|
-
tone: t,
|
|
55
|
-
buttonStyle: "ghost",
|
|
56
|
-
className: "underline underline-offset-4"
|
|
57
|
-
} : {
|
|
58
|
-
tone: t,
|
|
59
|
-
buttonStyle: n
|
|
60
|
-
};
|
|
61
|
-
}
|
|
62
|
-
function A({ action: e, index: n, density: r, closeOnSelect: i, renderLink: c }) {
|
|
63
|
-
let l = T(e, n), u = e.closeOnSelect ?? i;
|
|
64
|
-
if (e.render) return /* @__PURE__ */ y("div", {
|
|
65
|
-
className: "action-menu--item",
|
|
66
|
-
children: e.render
|
|
67
|
-
}, l);
|
|
68
|
-
let f = E(e.icon), p = /* @__PURE__ */ y(o, {
|
|
69
|
-
label: e.label,
|
|
70
|
-
leading: f,
|
|
71
|
-
wrap: !0,
|
|
72
|
-
className: t("action-menu--item-content w-full", e.contentClassName),
|
|
73
|
-
leadingClassName: "action-menu--item-icon text-inherit",
|
|
74
|
-
labelClassName: "action-menu--item-label"
|
|
75
|
-
}), h = t("action-menu--item", r === "table" && a.tableRow, e.className);
|
|
76
|
-
if (e.type === "checkbox") return /* @__PURE__ */ y(d, {
|
|
77
|
-
checked: !!e.checked,
|
|
78
|
-
disabled: e.disabled,
|
|
79
|
-
closeOnClick: u,
|
|
80
|
-
onCheckedChange: e.onCheckedChange,
|
|
81
|
-
className: h,
|
|
82
|
-
children: p
|
|
83
|
-
}, l);
|
|
84
|
-
if (e.href && !e.disabled) {
|
|
85
|
-
let t = e.href;
|
|
86
|
-
return /* @__PURE__ */ y(m, {
|
|
87
|
-
href: t,
|
|
88
|
-
variant: O(e.tone),
|
|
89
|
-
closeOnClick: u,
|
|
90
|
-
onClick: e.onClick,
|
|
91
|
-
render: c ? c({
|
|
92
|
-
href: t,
|
|
93
|
-
children: p,
|
|
94
|
-
target: e.target,
|
|
95
|
-
rel: e.rel,
|
|
96
|
-
external: e.external,
|
|
97
|
-
disabled: e.disabled
|
|
98
|
-
}) : (n) => /* @__PURE__ */ y("a", {
|
|
99
|
-
...n,
|
|
100
|
-
href: t,
|
|
101
|
-
target: e.target,
|
|
102
|
-
rel: e.rel
|
|
103
|
-
}),
|
|
104
|
-
className: h,
|
|
105
|
-
children: p
|
|
106
|
-
}, l);
|
|
107
|
-
}
|
|
108
|
-
return /* @__PURE__ */ y(s, {
|
|
109
|
-
disabled: e.disabled,
|
|
110
|
-
variant: O(e.tone),
|
|
111
|
-
closeOnClick: u,
|
|
112
|
-
onClick: e.onClick,
|
|
113
|
-
className: h,
|
|
114
|
-
children: p
|
|
115
|
-
}, l);
|
|
116
|
-
}
|
|
117
|
-
function j(e) {
|
|
118
|
-
let t = [], n = null;
|
|
119
|
-
return e.actions.forEach((i, a) => {
|
|
120
|
-
let o = i.group ?? null, s = o !== n;
|
|
121
|
-
t.length > 0 && s && t.push(/* @__PURE__ */ y(c, {}, `sep-${n ?? "root"}-${o ?? "root"}-${a}`)), s && (n = o, typeof o == "string" && t.push(/* @__PURE__ */ y(f, {
|
|
122
|
-
className: "normal-case",
|
|
123
|
-
children: /* @__PURE__ */ y(r, {
|
|
124
|
-
tag: "span",
|
|
125
|
-
children: o
|
|
126
|
-
})
|
|
127
|
-
}, `group-${o}-${a}`))), t.push(A({
|
|
128
|
-
...e,
|
|
129
|
-
action: i,
|
|
130
|
-
index: a
|
|
131
|
-
}));
|
|
132
|
-
}), t;
|
|
133
|
-
}
|
|
134
|
-
function M(e, t) {
|
|
135
|
-
typeof e == "function" ? e(t) : e && (e.current = t);
|
|
136
|
-
}
|
|
137
|
-
var N = g.forwardRef(function({ actions: r, label: a, icon: o = x, srText: s, buttonProps: c, align: d = "end", side: f = "bottom", contentClassName: m = "", width: _ = "w-auto", closeOnSelect: C = !0, density: T = "default", labelVisibility: D = "visible", preserveOrder: O = !1, renderLink: k, renderTrigger: A, strings: N }, P) {
|
|
138
|
-
let [F, I] = g.useState(!1), L = e(S, N), R = s ?? L.openMenuLabel, z = g.useMemo(() => w(r, O), [r, O]);
|
|
139
|
-
if (z.length === 0) return null;
|
|
140
|
-
let B = !!a && D === "visible", V = {
|
|
141
|
-
tone: "secondary",
|
|
142
|
-
buttonStyle: "ghost",
|
|
143
|
-
size: B ? "sm" : "md",
|
|
144
|
-
iconOnly: !B,
|
|
145
|
-
className: B ? void 0 : a && D === "responsive" ? "size-action p-0 sm:w-auto sm:gap-space-sm sm:px-control-sm" : "size-action p-0"
|
|
146
|
-
}, { tone: H = "secondary", buttonStyle: U = "ghost", size: W = "md", iconOnly: G = !B, className: K, ...q } = {
|
|
147
|
-
...V,
|
|
148
|
-
...c,
|
|
149
|
-
className: t(V.className, c?.className)
|
|
150
|
-
}, J = D === "hidden" ? "sr-only" : D === "responsive" ? "sr-only sm:not-sr-only" : void 0, Y = E(o), X = a ? /* @__PURE__ */ b(v, { children: [Y, /* @__PURE__ */ y(n, {
|
|
151
|
-
tag: "span",
|
|
152
|
-
size: "inherit",
|
|
153
|
-
weight: "medium",
|
|
154
|
-
lineHeight: "tight",
|
|
155
|
-
className: t("whitespace-nowrap text-inherit", J),
|
|
156
|
-
children: a
|
|
157
|
-
})] }) : /* @__PURE__ */ b(v, { children: [Y, /* @__PURE__ */ y(n, {
|
|
158
|
-
tag: "span",
|
|
159
|
-
size: "inherit",
|
|
160
|
-
className: "sr-only",
|
|
161
|
-
children: R
|
|
162
|
-
})] });
|
|
163
|
-
return /* @__PURE__ */ b(h, {
|
|
164
|
-
open: F,
|
|
165
|
-
onOpenChange: I,
|
|
166
|
-
children: [/* @__PURE__ */ y(l, { render: A ?? ((e) => {
|
|
167
|
-
let { ref: n } = e, r = (e) => {
|
|
168
|
-
M(n, e), M(P, e);
|
|
169
|
-
};
|
|
170
|
-
return /* @__PURE__ */ y(i, {
|
|
171
|
-
...q,
|
|
172
|
-
...e,
|
|
173
|
-
ref: r,
|
|
174
|
-
type: "button",
|
|
175
|
-
tone: H,
|
|
176
|
-
buttonStyle: U,
|
|
177
|
-
size: W,
|
|
178
|
-
iconOnly: G,
|
|
179
|
-
className: t("action-menu--component", K, e.className),
|
|
180
|
-
children: X
|
|
181
|
-
});
|
|
182
|
-
}) }), /* @__PURE__ */ y(p, {
|
|
183
|
-
density: T === "table" ? "compact" : T,
|
|
184
|
-
align: d,
|
|
185
|
-
side: f,
|
|
186
|
-
className: t("action-menu--content", _, "min-w-36", m),
|
|
187
|
-
children: /* @__PURE__ */ y(u, {
|
|
188
|
-
className: "action-menu--group",
|
|
189
|
-
children: j({
|
|
190
|
-
actions: z,
|
|
191
|
-
density: T,
|
|
192
|
-
closeOnSelect: C,
|
|
193
|
-
renderLink: k
|
|
194
|
-
})
|
|
195
|
-
})
|
|
196
|
-
})]
|
|
197
|
-
});
|
|
198
|
-
});
|
|
199
|
-
N.displayName = "ActionMenu";
|
|
200
|
-
var P = g.forwardRef(function({ actions: e, className: n, buttonClassName: r, size: a = "sm", renderLink: o }, s) {
|
|
201
|
-
let c = w(e, !0);
|
|
202
|
-
return c.length === 0 ? null : /* @__PURE__ */ y("div", {
|
|
203
|
-
ref: s,
|
|
204
|
-
className: t("action-buttons--component flex flex-wrap items-center gap-space-sm", n),
|
|
205
|
-
children: c.map((e, n) => {
|
|
206
|
-
let s = T(e, n);
|
|
207
|
-
if (e.render) return /* @__PURE__ */ y(g.Fragment, { children: e.render }, s);
|
|
208
|
-
let c = E(e.icon), l = k(e), u = /* @__PURE__ */ b(v, { children: [!!c && /* @__PURE__ */ y("span", {
|
|
209
|
-
className: "action-buttons--icon inline-flex shrink-0 items-center",
|
|
210
|
-
children: c
|
|
211
|
-
}), D(e.label, "action-buttons--label")] });
|
|
212
|
-
if (e.href && !e.disabled && o) {
|
|
213
|
-
let n = e.href;
|
|
214
|
-
return /* @__PURE__ */ y(i, {
|
|
215
|
-
type: "button",
|
|
216
|
-
tone: l.tone,
|
|
217
|
-
buttonStyle: l.buttonStyle,
|
|
218
|
-
size: e.buttonSize ?? a,
|
|
219
|
-
nativeButton: !1,
|
|
220
|
-
className: t("action-buttons--item", l.className, r, e.className),
|
|
221
|
-
onClick: () => {
|
|
222
|
-
e.onClick?.();
|
|
223
|
-
},
|
|
224
|
-
render: (t) => o({
|
|
225
|
-
...t,
|
|
226
|
-
href: n,
|
|
227
|
-
children: t.children,
|
|
228
|
-
target: e.target,
|
|
229
|
-
rel: e.rel,
|
|
230
|
-
external: e.external,
|
|
231
|
-
disabled: e.disabled
|
|
232
|
-
}),
|
|
233
|
-
children: u
|
|
234
|
-
}, s);
|
|
235
|
-
}
|
|
236
|
-
return e.href && !e.disabled ? /* @__PURE__ */ y(i, {
|
|
237
|
-
href: e.href,
|
|
238
|
-
target: e.target,
|
|
239
|
-
rel: e.rel,
|
|
240
|
-
tone: l.tone,
|
|
241
|
-
buttonStyle: l.buttonStyle,
|
|
242
|
-
size: e.buttonSize ?? a,
|
|
243
|
-
className: t("action-buttons--item", l.className, r, e.className),
|
|
244
|
-
onClick: e.onClick,
|
|
245
|
-
children: u
|
|
246
|
-
}, s) : /* @__PURE__ */ y(i, {
|
|
247
|
-
type: "button",
|
|
248
|
-
tone: l.tone,
|
|
249
|
-
buttonStyle: l.buttonStyle,
|
|
250
|
-
size: e.buttonSize ?? a,
|
|
251
|
-
className: t("action-buttons--item", l.className, r, e.className),
|
|
252
|
-
disabled: !!e.disabled,
|
|
253
|
-
onClick: () => {
|
|
254
|
-
e.onClick?.();
|
|
255
|
-
},
|
|
256
|
-
children: u
|
|
257
|
-
}, s);
|
|
258
|
-
})
|
|
259
|
-
});
|
|
260
|
-
});
|
|
261
|
-
P.displayName = "ActionButtons";
|
|
262
|
-
//#endregion
|
|
263
|
-
export { N as n, S as r, P as t };
|
|
264
|
-
|
|
265
|
-
//# sourceMappingURL=action-menu-Drxw_vJk.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"action-menu-Drxw_vJk.js","names":["Icon","_Fragment","_jsx","Text","Button","collectionRecipes","CollectionContent","DropdownMenuItem","DropdownMenuSeparator","DropdownMenuTrigger","DropdownMenuGroup","DropdownMenuCheckboxItem","DropdownMenuLabel","DropdownMenuContent","DropdownMenuLinkItem","DropdownMenu","React","Fragment$1","defaultActionMenuStrings","isDestructiveAction","action","resolveActions","visible","actions","preserveOrder","standard","destructive","getActionKey","index","renderActionIcon","icon","isValidElement","renderActionLabel","label","cn","className","toMenuVariant","tone","toButtonPresentation","buttonStyle","renderMenuAction","key","shouldCloseOnSelect","closeOnSelect","content","density","href","renderLink","props","renderGroupedActions","nodes","currentGroup","args","nextGroup","groupChanged","DisplayLabel","assignRef","ref","node","ActionMenu","MoreVertical","stringsProp","open","setOpen","strings","useStrings","resolvedSrText","srText","resolvedActions","hasVisibleLabel","labelVisibility","defaultButtonProps","triggerClassName","triggerProps","buttonProps","labelClassName","triggerIcon","buttonContent","renderTrigger","baseTriggerRef","dropdownTriggerProps","composedRef","width","contentClassName","ActionButtons","visibleActions","resolved","children","size","buttonClassName","buttonRenderProps"],"sources":["../src/components/base/action-menu/action-menu.strings.ts","../src/components/base/action-menu/action-menu.tsx"],"sourcesContent":["export interface ActionMenuStrings {\n\topenMenuLabel: string;\n}\n\nexport const defaultActionMenuStrings: ActionMenuStrings = {\n\topenMenuLabel: 'Open menu',\n};\n","/**\n * ActionMenu — centralized action chrome for page, card, table, and row\n * overflow menus.\n *\n * Primary API is definition-driven: pass `actions={[...]}` and the component\n * renders the trigger, menu surface, grouping, checkbox rows, destructive\n * separation, links, disabled state, and density. `ActionButtons` renders the\n * same definitions as inline buttons for page/toolbars that need visible\n * actions plus an overflow menu.\n */\nimport type { LucideIcon } from 'lucide-react';\nimport { MoreVertical } from 'lucide-react';\nimport React, { isValidElement, type ComponentType, type ElementType, type ReactElement, type ReactNode } from 'react';\n\nimport { Button, type ButtonSize, type ButtonStyle } from '../buttons';\nimport { collectionRecipes, type CollectionDensity } from '../popover/popover.recipes';\nimport { CollectionContent } from '../popover/collection-content';\nimport {\n\tDropdownMenu,\n\tDropdownMenuCheckboxItem,\n\tDropdownMenuContent,\n\tDropdownMenuGroup,\n\tDropdownMenuItem,\n\tDropdownMenuLabel,\n\tDropdownMenuLinkItem,\n\tDropdownMenuSeparator,\n\tDropdownMenuTrigger,\n} from '../navigation/dropdown-menu';\nimport { DisplayLabel, Text } from '../../typography';\nimport type { ActionButtonStyle, ActionPresentation } from '../../../lib/action-presentation';\nimport { useStrings, type StringsProp } from '../../../lib/strings';\nimport { cn } from '../../../lib/utils';\n\nimport {\n\tdefaultActionMenuStrings,\n\ttype ActionMenuStrings,\n} from './action-menu.strings';\n\ntype ActionMenuButtonProps = Partial<React.ComponentPropsWithoutRef<typeof Button>> & {\n\t[key: `data-${string}`]: string | boolean | undefined;\n\t'aria-label'?: string;\n\tonPointerDown?: React.PointerEventHandler<HTMLButtonElement>;\n};\nexport type ActionMenuDensity = CollectionDensity | 'table';\nexport type ActionMenuLabelVisibility = 'visible' | 'responsive' | 'hidden';\nexport interface ActionMenuLinkRenderProps extends React.ComponentPropsWithoutRef<'a'> {\n\thref: string;\n\tdisabled?: boolean;\n\texternal?: boolean;\n}\n\nexport type ActionMenuIcon = LucideIcon | ComponentType<{ className?: string }> | ReactNode;\n\nexport interface ActionMenuAction extends ActionPresentation {\n\t/** Stable React key. Falls back to a string `label`, then the index. */\n\tid?: string;\n\t/** Visible label for the entry. */\n\tlabel: ReactNode;\n\t/** Leading glyph. Accepts a Lucide icon, a component, or a rendered node. */\n\ticon?: ActionMenuIcon;\n\t/** `'checkbox'` renders a toggle driven by `checked`/`onCheckedChange`. Defaults to `'item'`. */\n\ttype?: 'item' | 'checkbox';\n\t/**\n\t * Renders the entry as a link. By default this is a native `<a href>`, so it\n\t * performs a full page navigation; pass `renderLink` on `ActionMenu` to route\n\t * it through your framework's router instead.\n\t */\n\thref?: string;\n\t/** Anchor target forwarded to the rendered link. Requires `href`. */\n\ttarget?: string;\n\t/** Anchor rel forwarded to the rendered link. Requires `href`. */\n\trel?: string;\n\t/** Marks the destination as leaving the app; forwarded to `renderLink`. */\n\texternal?: boolean;\n\t/** Runs when the entry is chosen. This is the handler for a normal item. */\n\tonClick?: () => void;\n\t/** Checked state for a `'checkbox'` entry. */\n\tchecked?: boolean;\n\t/** Fires with the next checked state for a `'checkbox'` entry. */\n\tonCheckedChange?: (checked: boolean) => void;\n\t/**\n\t * Starts a new group, drawing a separator above this entry. A string also\n\t * captions the group; `true` rules off without a heading, for the common\n\t * case of holding one entry apart (a sign-out, a delete) with no label to\n\t * write.\n\t */\n\tgroup?: string | true;\n\t/** Overrides the button size when the action renders as a button. */\n\tbuttonSize?: ButtonSize;\n\t/** Escape hatch merged onto the entry root. */\n\tclassName?: string;\n\t/** Escape hatch merged onto the entry's inner content. */\n\tcontentClassName?: string;\n\t/** Overrides the menu's `closeOnSelect` for this entry. */\n\tcloseOnSelect?: boolean;\n\t/** Replaces the rendered entry, e.g. to emit a framework `<Link>`. */\n\trender?: ReactNode;\n}\n\nexport interface ActionMenuProps {\n\t/**\n\t * Commands to offer. Destructive entries are moved last unless\n\t * `preserveOrder` is set.\n\t */\n\tactions: readonly ActionMenuAction[];\n\t/** Trigger text. Omit for an icon-only trigger, and set `srText` instead. */\n\tlabel?: string;\n\t/** Trigger glyph. Defaults to the horizontal ellipsis. */\n\ticon?: ActionMenuIcon;\n\t/** Accessible name when the trigger shows no visible `label`. */\n\tsrText?: string;\n\t/** Escape hatch forwarded to the trigger button. */\n\tbuttonProps?: ActionMenuButtonProps;\n\t/** Menu alignment against the trigger. Defaults to `end`. */\n\talign?: 'center' | 'start' | 'end';\n\t/** Which edge of the trigger the menu opens from. Defaults to `bottom`. */\n\tside?: 'top' | 'right' | 'bottom' | 'left';\n\t/** Merged onto the menu surface. */\n\tcontentClassName?: string;\n\t/** Fixed menu width. Defaults to sizing from the widest item. */\n\twidth?: string;\n\t/** Closes the menu after an action runs. Defaults to `true`. */\n\tcloseOnSelect?: boolean;\n\t/** Vertical row rhythm; table preserves the legacy tight action spacing. Inline room stays stable. */\n\tdensity?: ActionMenuDensity;\n\t/** Whether the trigger's `label` is visible, hidden, or responsive. */\n\tlabelVisibility?: ActionMenuLabelVisibility;\n\t/** Preserve incoming action order instead of moving destructive items last. */\n\tpreserveOrder?: boolean;\n\t/**\n\t * Renders actions carrying an `href` through the consumer's router, keeping\n\t * this component framework-agnostic. Without it, such actions render as\n\t * plain anchors.\n\t */\n\trenderLink?: (props: ActionMenuLinkRenderProps) => ReactElement;\n\t/**\n\t * Replaces the default trigger button entirely, so a menu can hang off a\n\t * shape that is not a button with a glyph — an account block, a sidebar\n\t * row, a tab that has to match its siblings.\n\t *\n\t * Takes Base UI's `render` contract: either an element, whose props are\n\t * merged for you, or a function receiving the props to spread. Either way\n\t * the ARIA wiring, the open/close handlers and the popup's anchor ref reach\n\t * a real DOM node without anyone cloning anything.\n\t *\n\t * For a plain button that just needs different words or a different glyph,\n\t * `label`, `icon` and `buttonProps` are the smaller tools; reach for this\n\t * only when the trigger is a different thing.\n\t */\n\trenderTrigger?: React.ComponentProps<typeof DropdownMenuTrigger>['render'];\n\t/** Overrides the menu's own copy (the default trigger label). */\n\tstrings?: StringsProp<ActionMenuStrings>;\n}\n\nexport interface ActionButtonsProps {\n\t/** Commands to render side by side rather than collapsed into a menu. */\n\tactions: readonly ActionMenuAction[];\n\t/** Merged onto the button group. */\n\tclassName?: string;\n\t/** Merged onto every button in the group. */\n\tbuttonClassName?: string;\n\t/** Height preset applied to each button. */\n\tsize?: ButtonSize;\n\t/** Renders actions carrying an `href` through the consumer's router. */\n\trenderLink?: (props: ActionMenuLinkRenderProps) => ReactElement;\n}\n\nfunction isDestructiveAction(action: ActionMenuAction) {\n\treturn action.tone === 'destructive';\n}\n\nfunction resolveActions(actions: readonly ActionMenuAction[], preserveOrder = false) {\n\tconst visible = actions.filter((action) => action.visible !== false);\n\tif (preserveOrder) return visible;\n\n\tconst standard = visible.filter((action) => !isDestructiveAction(action));\n\tconst destructive = visible.filter(isDestructiveAction);\n\treturn [...standard, ...destructive];\n}\n\nfunction getActionKey(action: ActionMenuAction, index: number) {\n\treturn action.id ?? (typeof action.label === 'string' ? action.label : `action-${index}`);\n}\n\nfunction renderActionIcon(icon: ActionMenuAction['icon']) {\n\tif (!icon) return null;\n\tif (isValidElement(icon)) return icon;\n\tif (typeof icon === 'function') {\n\t\tconst Icon = icon as LucideIcon;\n\t\treturn <Icon className=\"size-icon-sm\" aria-hidden=\"true\" />;\n\t}\n\tif (typeof icon === 'object' && icon !== null && '$$typeof' in icon) {\n\t\tconst Icon = icon as unknown as ElementType<{ className?: string; 'aria-hidden'?: boolean }>;\n\t\treturn <Icon className=\"size-icon-sm\" aria-hidden />;\n\t}\n\treturn icon;\n}\n\nfunction renderActionLabel(label: ReactNode, className?: string) {\n\tif (typeof label === 'string' || typeof label === 'number' || typeof label === 'bigint') {\n\t\treturn <Text tag=\"span\" lineHeight=\"tight\" className={cn('text-inherit', className)}>{label}</Text>;\n\t}\n\treturn className ? <span className={className}>{label}</span> : label;\n}\n\nfunction toMenuVariant(tone: ActionMenuAction['tone']): 'default' | 'destructive' {\n\treturn tone === 'destructive' ? 'destructive' : 'default';\n}\n\nfunction toButtonPresentation(action: Pick<ActionMenuAction, 'tone' | 'buttonStyle'>): {\n\ttone: NonNullable<ActionMenuAction['tone']>;\n\tbuttonStyle: ButtonStyle;\n\tclassName?: string;\n} {\n\tconst tone = action.tone ?? 'primary';\n\tconst buttonStyle: ActionButtonStyle = action.buttonStyle ?? 'solid';\n\tif (buttonStyle === 'link') {\n\t\treturn {\n\t\t\ttone,\n\t\t\tbuttonStyle: 'ghost',\n\t\t\tclassName: 'underline underline-offset-4',\n\t\t};\n\t}\n\treturn { tone, buttonStyle };\n}\n\nfunction renderMenuAction({\n\taction,\n\tindex,\n\tdensity,\n\tcloseOnSelect,\n\trenderLink,\n}: {\n\taction: ActionMenuAction;\n\tindex: number;\n\tdensity: ActionMenuDensity;\n\tcloseOnSelect: boolean;\n\trenderLink?: (props: ActionMenuLinkRenderProps) => ReactElement;\n}) {\n\tconst key = getActionKey(action, index);\n\tconst shouldCloseOnSelect = action.closeOnSelect ?? closeOnSelect;\n\tif (action.render) {\n\t\treturn <div key={key} className=\"action-menu--item\">{action.render}</div>;\n\t}\n\n\tconst icon = renderActionIcon(action.icon);\n\tconst content = (\n\t\t<CollectionContent label={action.label} leading={icon} wrap\n\t\t className={cn('action-menu--item-content w-full',action.contentClassName)}\n\t\t leadingClassName=\"action-menu--item-icon text-inherit\" labelClassName=\"action-menu--item-label\"/>\n\t);\n\tconst className = cn(\n\t\t'action-menu--item',\n\t\tdensity === 'table' && collectionRecipes.tableRow,\n\t\taction.className,\n\t);\n\tif (action.type === 'checkbox') {\n\t\treturn (\n\t\t\t<DropdownMenuCheckboxItem\n\t\t\t\tkey={key}\n\t\t\t\tchecked={!!action.checked}\n\t\t\t\tdisabled={action.disabled}\n\t\t\t\tcloseOnClick={shouldCloseOnSelect}\n\t\t\t\tonCheckedChange={action.onCheckedChange}\n\t\t\t\tclassName={className}\n\t\t\t>\n\t\t\t\t{content}\n\t\t\t</DropdownMenuCheckboxItem>\n\t\t);\n\t}\n\n\tif (action.href && !action.disabled) {\n\t\tconst href = action.href;\n\t\treturn (\n\t\t\t<DropdownMenuLinkItem\n\t\t\t\tkey={key}\n\t\t\t\thref={href}\n\t\t\t\tvariant={toMenuVariant(action.tone)}\n\t\t\t\tcloseOnClick={shouldCloseOnSelect}\n\t\t\t\tonClick={action.onClick}\n\t\t\t\t// Element form, not a function, when the consumer supplies a link\n\t\t\t\t// renderer. The function form hands the menu-item props to the\n\t\t\t\t// consumer and trusts them to spread — and the renderer people\n\t\t\t\t// actually write destructures href/children/className and drops the\n\t\t\t\t// rest, which silently costs the row its `role=\"menuitem\"`. Handing\n\t\t\t\t// back an element lets the menu merge its own props on afterwards,\n\t\t\t\t// so a narrow renderer stays accessible.\n\t\t\t\trender={\n\t\t\t\t\trenderLink\n\t\t\t\t\t\t? (renderLink({\n\t\t\t\t\t\t\thref,\n\t\t\t\t\t\t\tchildren: content,\n\t\t\t\t\t\t\ttarget: action.target,\n\t\t\t\t\t\t\trel: action.rel,\n\t\t\t\t\t\t\texternal: action.external,\n\t\t\t\t\t\t\tdisabled: action.disabled,\n\t\t\t\t\t\t}) as ReactElement)\n\t\t\t\t\t\t: (props) => (\n\t\t\t\t\t\t\t<a\n\t\t\t\t\t\t\t\t{...props}\n\t\t\t\t\t\t\t\thref={href}\n\t\t\t\t\t\t\t\ttarget={action.target}\n\t\t\t\t\t\t\t\trel={action.rel}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t\tclassName={className}\n\t\t\t>\n\t\t\t\t{content}\n\t\t\t</DropdownMenuLinkItem>\n\t\t);\n\t}\n\n\treturn (\n\t\t<DropdownMenuItem\n\t\tkey={key}\n\t\tdisabled={action.disabled}\n\t\tvariant={toMenuVariant(action.tone)}\n\t\tcloseOnClick={shouldCloseOnSelect}\n\t\tonClick={action.onClick}\n\t\tclassName={className}\n\t\t>\n\t\t\t{content}\n\t\t</DropdownMenuItem>\n\t);\n}\n\nfunction renderGroupedActions(args: {\n\tactions: readonly ActionMenuAction[];\n\tdensity: ActionMenuDensity;\n\tcloseOnSelect: boolean;\n\trenderLink?: (props: ActionMenuLinkRenderProps) => ReactElement;\n}) {\n\tconst nodes: ReactNode[] = [];\n\tlet currentGroup: string | true | null = null;\n\n\targs.actions.forEach((action, index) => {\n\t\tconst nextGroup = action.group ?? null;\n\t\tconst groupChanged = nextGroup !== currentGroup;\n\n\t\tif (nodes.length > 0 && groupChanged) {\n\t\t\tnodes.push(<DropdownMenuSeparator key={`sep-${currentGroup ?? 'root'}-${nextGroup ?? 'root'}-${index}`} />);\n\t\t}\n\n\t\tif (groupChanged) {\n\t\t\tcurrentGroup = nextGroup;\n\t\t\tif (typeof nextGroup === 'string') {\n\t\t\t\tnodes.push(\n\t\t\t\t\t<DropdownMenuLabel\n\t\t\t\t\t\tkey={`group-${nextGroup}-${index}`}\n\t\t\t\t\t\tclassName=\"normal-case\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<DisplayLabel tag=\"span\">{nextGroup}</DisplayLabel>\n\t\t\t\t\t</DropdownMenuLabel>,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tnodes.push(renderMenuAction({ ...args, action, index }));\n\t});\n\n\treturn nodes;\n}\n\n/**\n * Writes a node into a ref of either shape. `ActionMenu` has two claims on its\n * trigger — Base UI's own anchor ref and the consumer's — so neither may\n * overwrite the other.\n */\nfunction assignRef<T>(ref: React.Ref<T> | undefined, node: T | null) {\n\tif (typeof ref === 'function') {\n\t\tref(node);\n\t} else if (ref) {\n\t\t(ref as React.RefObject<T | null>).current = node;\n\t}\n}\n\nexport const ActionMenu = React.forwardRef<HTMLButtonElement, ActionMenuProps>(function ActionMenu({\n\tactions,\n\tlabel,\n\ticon = MoreVertical,\n\tsrText,\n\tbuttonProps,\n\talign = 'end',\n\tside = 'bottom',\n\tcontentClassName = '',\n\twidth = 'w-auto',\n\tcloseOnSelect = true,\n\tdensity = 'default',\n\tlabelVisibility = 'visible',\n\tpreserveOrder = false,\n\trenderLink,\n\trenderTrigger,\n\tstrings: stringsProp,\n}: ActionMenuProps, ref) {\n\tconst [open, setOpen] = React.useState(false);\n\tconst strings = useStrings(defaultActionMenuStrings, stringsProp);\n\tconst resolvedSrText = srText ?? strings.openMenuLabel;\n\tconst resolvedActions = React.useMemo(\n\t\t() => resolveActions(actions, preserveOrder),\n\t\t[actions, preserveOrder],\n\t);\n\n\tif (resolvedActions.length === 0) return null;\n\tconst hasVisibleLabel = Boolean(label) && labelVisibility === 'visible';\n\tconst hasResponsiveLabel = Boolean(label) && labelVisibility === 'responsive';\n\n\tconst defaultButtonProps: ActionMenuButtonProps = {\n\t\ttone: 'secondary',\n\t\tbuttonStyle: 'ghost',\n\t\tsize: hasVisibleLabel ? 'sm' : 'md',\n\t\ticonOnly: !hasVisibleLabel,\n\t\tclassName: hasVisibleLabel\n\t\t\t? undefined\n\t\t\t: hasResponsiveLabel\n\t\t\t\t? 'size-action p-0 sm:w-auto sm:gap-space-sm sm:px-control-sm'\n\t\t\t\t: 'size-action p-0',\n\t};\n\n\tconst mergedButtonProps = {\n\t\t...defaultButtonProps,\n\t\t...buttonProps,\n\t\tclassName: cn(defaultButtonProps.className, buttonProps?.className),\n\t};\n\n\tconst {\n\t\ttone = 'secondary',\n\t\tbuttonStyle = 'ghost',\n\t\tsize = 'md',\n\t\ticonOnly = !hasVisibleLabel,\n\t\tclassName: triggerClassName,\n\t\t...triggerProps\n\t} = mergedButtonProps;\n\n\tconst labelClassName =\n\t\tlabelVisibility === 'hidden'\n\t\t\t? 'sr-only'\n\t\t\t: labelVisibility === 'responsive'\n\t\t\t\t? 'sr-only sm:not-sr-only'\n\t\t\t\t: undefined;\n\n\tconst triggerIcon = renderActionIcon(icon);\n\n\tconst buttonContent = label ? (\n\t\t<>\n\t\t\t{triggerIcon}\n\t\t\t<Text tag=\"span\" size=\"inherit\" weight=\"medium\" lineHeight=\"tight\" className={cn('whitespace-nowrap text-inherit', labelClassName)}>\n\t\t\t\t{label}\n\t\t\t</Text>\n\t\t</>\n\t) : (\n\t\t<>\n\t\t\t{triggerIcon}\n\t\t\t<Text tag=\"span\" size=\"inherit\" className=\"sr-only\">{resolvedSrText}</Text>\n\t\t</>\n\t);\n\n\treturn (\n\t\t<DropdownMenu open={open} onOpenChange={setOpen}>\n\t\t\t<DropdownMenuTrigger\n\t\t\t\trender={renderTrigger ?? ((dropdownTriggerProps) => {\n\t\t\t\t\t// Base UI supplies its own trigger ref through `render`. Composing\n\t\t\t\t\t// rather than overwriting keeps the popup anchored while still\n\t\t\t\t\t// handing the consumer the trigger element.\n\t\t\t\t\tconst { ref: baseTriggerRef } = dropdownTriggerProps as {\n\t\t\t\t\t\tref?: React.Ref<HTMLButtonElement>;\n\t\t\t\t\t};\n\n\t\t\t\t\tconst composedRef = (node: HTMLButtonElement | null) => {\n\t\t\t\t\t\tassignRef(baseTriggerRef, node);\n\t\t\t\t\t\tassignRef(ref, node);\n\t\t\t\t\t};\n\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t{...triggerProps}\n\t\t\t\t\t\t\t{...dropdownTriggerProps}\n\t\t\t\t\t\t\tref={composedRef}\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\ttone={tone}\n\t\t\t\t\t\t\tbuttonStyle={buttonStyle}\n\t\t\t\t\t\t\tsize={size}\n\t\t\t\t\t\t\ticonOnly={iconOnly}\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t'action-menu--component',\n\t\t\t\t\t\t\t\ttriggerClassName,\n\t\t\t\t\t\t\t\t(dropdownTriggerProps as { className?: string }).className,\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{buttonContent}\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\t<DropdownMenuContent\n\t\t\t\tdensity={density === 'table' ? 'compact' : density}\n\t\t\t\talign={align}\n\t\t\t\tside={side}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'action-menu--content',\n\t\t\t\t\twidth,\n\t\t\t\t\t'min-w-36',\n\t\t\t\t\tcontentClassName,\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t<DropdownMenuGroup className=\"action-menu--group\">\n\t\t\t\t\t{renderGroupedActions({\n\t\t\t\t\t\tactions: resolvedActions,\n\t\t\t\t\t\tdensity,\n\t\t\t\t\t\tcloseOnSelect,\n\t\t\t\t\t\trenderLink,\n\t\t\t\t\t})}\n\t\t\t\t</DropdownMenuGroup>\n\t\t\t</DropdownMenuContent>\n\t\t</DropdownMenu>\n\t);\n});\n\nActionMenu.displayName = 'ActionMenu';\n\nexport const ActionButtons = React.forwardRef<HTMLDivElement, ActionButtonsProps>(function ActionButtons({\n\tactions,\n\tclassName,\n\tbuttonClassName,\n\tsize = 'sm',\n\trenderLink,\n}: ActionButtonsProps, ref) {\n\tconst visibleActions = resolveActions(actions, true);\n\tif (visibleActions.length === 0) return null;\n\n\treturn (\n\t\t<div ref={ref} className={cn('action-buttons--component flex flex-wrap items-center gap-space-sm', className)}>\n\t\t\t{visibleActions.map((action, index) => {\n\t\t\t\tconst key = getActionKey(action, index);\n\t\t\t\tif (action.render) {\n\t\t\t\t\treturn <React.Fragment key={key}>{action.render}</React.Fragment>;\n\t\t\t\t}\n\n\t\t\t\tconst icon = renderActionIcon(action.icon);\n\t\t\t\tconst resolved = toButtonPresentation(action);\n\t\t\t\tconst children = (\n\t\t\t\t\t<>\n\t\t\t\t\t\t{!!icon && <span className=\"action-buttons--icon inline-flex shrink-0 items-center\">{icon}</span>}\n\t\t\t\t\t\t{renderActionLabel(action.label, 'action-buttons--label')}\n\t\t\t\t\t</>\n\t\t\t\t);\n\n\t\t\t\tif (action.href && !action.disabled && renderLink) {\n\t\t\t\t\tconst href = action.href;\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\tkey={key}\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\ttone={resolved.tone}\n\t\t\t\t\t\t\tbuttonStyle={resolved.buttonStyle}\n\t\t\t\t\t\t\tsize={action.buttonSize ?? size}\n\t\t\t\t\t\t\tnativeButton={false}\n\t\t\t\t\t\t\tclassName={cn('action-buttons--item', resolved.className, buttonClassName, action.className)}\n\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\taction.onClick?.();\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\trender={(buttonRenderProps) =>\n\t\t\t\t\t\t\t\trenderLink({\n\t\t\t\t\t\t\t\t\t...buttonRenderProps,\n\t\t\t\t\t\t\t\t\thref,\n\t\t\t\t\t\t\t\t\tchildren: buttonRenderProps.children,\n\t\t\t\t\t\t\t\t\ttarget: action.target,\n\t\t\t\t\t\t\t\t\trel: action.rel,\n\t\t\t\t\t\t\t\t\texternal: action.external,\n\t\t\t\t\t\t\t\t\tdisabled: action.disabled,\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\t\t{children}\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tif (action.href && !action.disabled) {\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<Button key={key} href={action.href} target={action.target} rel={action.rel} tone={resolved.tone} buttonStyle={resolved.buttonStyle} size={action.buttonSize ?? size} className={cn('action-buttons--item', resolved.className, buttonClassName, action.className)} onClick={action.onClick}>\n\t\t\t\t\t\t\t{children}\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tconst button = (\n\t\t\t\t\t<Button\n\t\t\t\t\t\tkey={key}\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\ttone={resolved.tone}\n\t\t\t\t\t\tbuttonStyle={resolved.buttonStyle}\n\t\t\t\t\t\tsize={action.buttonSize ?? size}\n\t\t\t\t\t\tclassName={cn('action-buttons--item', resolved.className, buttonClassName, action.className)}\n\t\t\t\t\t\tdisabled={!!action.disabled}\n\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\taction.onClick?.();\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t{children}\n\t\t\t\t\t</Button>\n\t\t\t\t);\n\n\t\t\t\treturn button;\n\t\t\t})}\n\t\t</div>\n\t);\n});\n\nActionButtons.displayName = 'ActionButtons';\n\nexport {\n\tdefaultActionMenuStrings,\n\ttype ActionMenuStrings,\n} from './action-menu.strings';\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"affordance-geometry.generated-CL84ZN9A.js","names":["affordanceGeometry","\"inlineEditColumns\"","\"single\"","\"multiline\"","\"avatarOverlap\"","\"sm\"","\"md\"","\"lg\"","\"navigationGuideStart\"","\"clearEnd\"","\"clearPadding\"","\"pairedClearPadding\"","\"pairedIconPadding\"","\"pairedAddonPadding\"","\"pairedCountPadding\"","\"measuredPadding\"","\"measuredStartPadding\"","\"textareaCountPadding\"","\"togglePadding\"","\"largeIconStart\"","\"largeIconEnd\"","\"overlayClose\"","\"overlayHeader\""],"sources":["../src/lib/affordance-geometry.generated.ts"],"sourcesContent":["/* Generated by scripts/primitive-geometry.mjs; recipes, not theme roots. */\nexport const affordanceGeometry = {\n \"inlineEditColumns\": {\n \"single\": \"grid-cols-[minmax(0,1fr)_calc(var(--height-action)*8/9*var(--density-scale)*2+0.25rem*var(--space-scale))]\",\n \"multiline\": \"grid-cols-[minmax(0,1fr)_calc(var(--height-action)*8/9*var(--density-scale))]\"\n },\n \"avatarOverlap\": {\n \"sm\": \"has-data-[scale=sm]:-space-x-[calc(var(--avatar)*0.75/4)]\",\n \"md\": \"-space-x-[calc(var(--avatar)/4)]\",\n \"lg\": \"has-data-[scale=lg]:-space-x-[calc(var(--avatar)*1.25/4)]\"\n },\n \"navigationGuideStart\": \"ms-[calc(var(--control-x)*0.8333333*var(--space-scale)+var(--icon)*0.75/2)]\",\n \"clearEnd\": {\n \"sm\": \"end-[calc(var(--control-x)*0.8333333*var(--space-scale))]\",\n \"md\": \"end-[calc(var(--control-x)*var(--space-scale))]\",\n \"lg\": \"end-[calc(var(--control-x)*var(--space-scale))]\"\n },\n \"clearPadding\": {\n \"sm\": \"pe-[calc(var(--control-x)*0.8333333*var(--space-scale)+1.375rem*var(--density-scale)+0.375rem*var(--space-scale))]\",\n \"md\": \"pe-[calc(var(--control-x)*var(--space-scale)+1.375rem*var(--density-scale)+0.375rem*var(--space-scale))]\",\n \"lg\": \"pe-[calc(var(--control-x)*var(--space-scale)+1.375rem*var(--density-scale)+0.375rem*var(--space-scale))]\"\n },\n \"pairedClearPadding\": {\n \"sm\": \"pe-[calc(var(--control-x)*0.8333333*var(--space-scale)+2.75rem*var(--density-scale)+0.75rem*var(--space-scale))]\",\n \"md\": \"pe-[calc(var(--control-x)*var(--space-scale)+2.75rem*var(--density-scale)+0.75rem*var(--space-scale))]\",\n \"lg\": \"pe-[calc(var(--control-x)*var(--space-scale)+2.75rem*var(--density-scale)+0.75rem*var(--space-scale))]\"\n },\n \"pairedIconPadding\": {\n \"sm\": \"pe-[calc((var(--control-x)*0.8333333+0.375rem)*var(--space-scale)+var(--icon)*0.75+1.375rem*var(--density-scale)+0.375rem*var(--space-scale))]\",\n \"md\": \"pe-[calc((var(--control-x)+0.5rem)*var(--space-scale)+var(--icon)+1.375rem*var(--density-scale)+0.375rem*var(--space-scale))]\",\n \"lg\": \"pe-[calc((var(--control-x)+0.5rem)*var(--space-scale)+var(--icon)*1.25+1.375rem*var(--density-scale)+0.375rem*var(--space-scale))]\"\n },\n \"pairedAddonPadding\": {\n \"sm\": \"pe-[calc(var(--control-x)*0.8333333*var(--space-scale)+1.25rem+0.375rem*var(--space-scale)+1.375rem*var(--density-scale)+0.375rem*var(--space-scale))]\",\n \"md\": \"pe-[calc(var(--control-x)*var(--space-scale)+1.5rem+0.375rem*var(--space-scale)+1.375rem*var(--density-scale)+0.375rem*var(--space-scale))]\",\n \"lg\": \"pe-[calc(var(--control-x)*var(--space-scale)+1.5rem+0.375rem*var(--space-scale)+1.375rem*var(--density-scale)+0.375rem*var(--space-scale))]\"\n },\n \"pairedCountPadding\": {\n \"sm\": \"pe-[calc(var(--control-x)*0.8333333*var(--space-scale)+2.25rem+1.375rem*var(--density-scale)+0.375rem*var(--space-scale))]\",\n \"md\": \"pe-[calc(var(--control-x)*var(--space-scale)+2.5rem+1.375rem*var(--density-scale)+0.375rem*var(--space-scale))]\",\n \"lg\": \"pe-[calc(var(--control-x)*var(--space-scale)+2.5rem+1.375rem*var(--density-scale)+0.375rem*var(--space-scale))]\"\n },\n \"measuredPadding\": {\n \"sm\": \"pe-[calc(var(--control-x)*0.8333333*var(--space-scale)+var(--field-trailing-width)+0.375rem*var(--space-scale))]\",\n \"md\": \"pe-[calc(var(--control-x)*var(--space-scale)+var(--field-trailing-width)+0.375rem*var(--space-scale))]\",\n \"lg\": \"pe-[calc(var(--control-x)*var(--space-scale)+var(--field-trailing-width)+0.375rem*var(--space-scale))]\"\n },\n \"measuredStartPadding\": {\n \"sm\": \"ps-[calc(var(--control-x)*0.8333333*var(--space-scale)+var(--field-leading-width)+0.375rem*var(--space-scale))]\",\n \"md\": \"ps-[calc(var(--control-x)*var(--space-scale)+var(--field-leading-width)+0.375rem*var(--space-scale))]\",\n \"lg\": \"ps-[calc(var(--control-x)*var(--space-scale)+var(--field-leading-width)+0.375rem*var(--space-scale))]\"\n },\n \"textareaCountPadding\": \"pb-[calc(var(--text-xs)*var(--leading-normal)+0.625rem*var(--space-scale))]\",\n \"togglePadding\": \"pe-[calc(1.375rem*var(--density-scale)+0.625rem*var(--space-scale))]\",\n \"largeIconStart\": \"ps-[calc((var(--control-x)+0.5rem)*var(--space-scale)+var(--icon)*1.25)]\",\n \"largeIconEnd\": \"pe-[calc((var(--control-x)+0.5rem)*var(--space-scale)+var(--icon)*1.25)]\",\n \"overlayClose\": \"absolute top-[calc(var(--surface-y)*var(--space-scale))] end-[calc(var(--surface-x)*var(--space-scale))]\",\n \"overlayHeader\": \"[[data-slot$=-content]:has(>[data-overlay-close])>&]:pe-[calc(var(--surface-x)*var(--space-scale)+var(--height-action)*8/9*var(--density-scale)+0.5rem*var(--space-scale))]\"\n} as const;\n"],"mappings":";AACA,IAAaA,IAAqB;CAChCC,mBAAqB;EACnBC,QAAU;EACVC,WAAa;CACf;CACAC,eAAiB;EACfC,IAAM;EACNC,IAAM;EACNC,IAAM;CACR;CACAC,sBAAwB;CACxBC,UAAY;EACVJ,IAAM;EACNC,IAAM;EACNC,IAAM;CACR;CACAG,cAAgB;EACdL,IAAM;EACNC,IAAM;EACNC,IAAM;CACR;CACAI,oBAAsB;EACpBN,IAAM;EACNC,IAAM;EACNC,IAAM;CACR;CACAK,mBAAqB;EACnBP,IAAM;EACNC,IAAM;EACNC,IAAM;CACR;CACAM,oBAAsB;EACpBR,IAAM;EACNC,IAAM;EACNC,IAAM;CACR;CACAO,oBAAsB;EACpBT,IAAM;EACNC,IAAM;EACNC,IAAM;CACR;CACAQ,iBAAmB;EACjBV,IAAM;EACNC,IAAM;EACNC,IAAM;CACR;CACAS,sBAAwB;EACtBX,IAAM;EACNC,IAAM;EACNC,IAAM;CACR;CACAU,sBAAwB;CACxBC,eAAiB;CACjBC,gBAAkB;CAClBC,cAAgB;CAChBC,cAAgB;CAChBC,eAAiB;AACnB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ai-artifact-DLVdK0Py.js","names":["_Fragment","STATUS_VARIANT","_Fragment","NumberValue","_Fragment","_Fragment","_Fragment","cn","Text","DisplayLabel","TextLink","Button","Stack","SecondaryValue","MonoValue","Duration","Number","IconBadge","Badge","AttachmentFileIcon","AttachmentTitle","AttachmentDescription","AttachmentActions","AttachmentMedia","AttachmentContent","AttachmentProgress","Attachment","Message","CodeBlock","Fragment$1","useCopyFeedback","copied","setCopied","useState","failed","setFailed","mounted","useRef","attempt","timer","useEffect","source","request","text","error","onCopyError","defaultAiMessageBubbleStrings","AiMessageBubble","stringsProp","strings","useStrings","copyText","plainText","children","renderedAvatar","avatar","avatarLabel","role","User","Bot","showActions","onCopy","onRegenerate","authorName","className","loading","copy","Copy","RotateCcw","defaultAiToolCallStrings","STATUS_BADGE","CircleDot","Loader2","AlertCircle","DurationValue","label","ms","AiToolCall","IconComponent","Wrench","expandedProp","internalExpanded","setInternalExpanded","defaultExpanded","expanded","setExpanded","next","onExpandedChange","labelByStatus","StatusIcon","status","hasDetails","args","result","name","durationMs","jsx","ChevronDown","ChevronRight","DetailBlock","tone","AiShimmer","paused","style","duration","defaultAiCodeBlockStrings","AiCodeBlock","props","defaultAiAttachmentStrings","AiAttachment","Icon","showProgress","errored","progress","thumbnailUrl","meta","onRemove","X","defaultAiAgentStrings","TONE_AVATAR","STATUS_VARIANT$1","AiAgent","icon","avatarSize","variant","iconSize","StatusPill","subtitle","trailing","defaultAiConfirmationStrings","TONE","AiConfirmation","ShieldCheck","toneCfg","title","description","details","onReject","rejectLabel","onApprove","Check","approveLabel","defaultAiSourcesStrings","interpolate","template","v","params","k","m","AiSources","mergeStrings","titleText","sources","AvatarStrip","maxAvatars","visible","AvatarStack","SourceRow","idx","onSelect","max","overflow","visual","s","SourceFavicon","i","visitLabel","src","Globe","interactive","rowClassName","rowContent","index","ExternalLink","defaultAiReasoningStrings","renderThoughtFor","durationParts","seconds","AiReasoning","streaming","expandWhileStreaming","headerLabel","durationSeconds","Brain","defaultAiChainOfThoughtStrings","STATUS_VISUAL","Circle","AiChainOfThought","hideHeader","steps","step","isLast","defaultAiTaskStrings","STATUS_ICON","XCircle","MinusCircle","STATUS_VARIANT","AiTask","TaskRow","task","item","hasChildren","open","setOpen","density","depth","indent","child","defaultAiArtifactStrings","AiArtifact","FileText","actions","ActionIcon","action","onDownload","Download","onOpen","collapsed"],"sources":["../src/components/blocks/ai/use-copy-feedback.ts","../src/components/blocks/ai/ai-message-bubble/types.ts","../src/components/blocks/ai/ai-message-bubble/ai-message-bubble.tsx","../src/components/blocks/ai/ai-tool-call/types.ts","../src/components/blocks/ai/ai-tool-call/ai-tool-call.tsx","../src/components/blocks/ai/ai-shimmer/ai-shimmer.tsx","../src/components/blocks/ai/ai-code-block/types.ts","../src/components/blocks/ai/ai-code-block/ai-code-block.tsx","../src/components/blocks/ai/ai-attachment/types.ts","../src/components/blocks/ai/ai-attachment/ai-attachment.tsx","../src/components/blocks/ai/ai-agent/types.ts","../src/components/blocks/ai/ai-agent/ai-agent.tsx","../src/components/blocks/ai/ai-confirmation/types.ts","../src/components/blocks/ai/ai-confirmation/ai-confirmation.tsx","../src/components/blocks/ai/ai-sources/types.ts","../src/components/blocks/ai/ai-sources/ai-sources.tsx","../src/components/blocks/ai/ai-reasoning/types.ts","../src/components/blocks/ai/ai-reasoning/ai-reasoning.tsx","../src/components/blocks/ai/ai-chain-of-thought/types.ts","../src/components/blocks/ai/ai-chain-of-thought/ai-chain-of-thought.tsx","../src/components/blocks/ai/ai-task/types.ts","../src/components/blocks/ai/ai-task/ai-task.tsx","../src/components/blocks/ai/ai-artifact/types.ts","../src/components/blocks/ai/ai-artifact/ai-artifact.tsx"],"sourcesContent":["import { useEffect, useRef, useState } from 'react';\n\n/** Shared clipboard lifecycle for AI surfaces; callbacks and text stay per mount. */\nexport function useCopyFeedback(onCopyError?: (error: unknown) => void, source?: string) {\n\tconst [copied, setCopied] = useState(false);\n\tconst [failed, setFailed] = useState(false);\n\tconst mounted = useRef(false);\n\tconst attempt = useRef(0);\n\tconst timer = useRef<ReturnType<typeof setTimeout> | undefined>(undefined);\n\n\tuseEffect(() => {\n\t\tmounted.current = true;\n\t\tsetCopied(false);\n\t\tsetFailed(false);\n\t\treturn () => {\n\t\t\tmounted.current = false;\n\t\t\tattempt.current += 1;\n\t\t\tclearTimeout(timer.current);\n\t\t};\n\t}, [source]);\n\n\tconst copy = async (text: string) => {\n\t\tconst request = ++attempt.current;\n\t\tclearTimeout(timer.current);\n\t\tsetCopied(false);\n\t\tsetFailed(false);\n\t\ttry {\n\t\t\tif (typeof navigator === 'undefined' || !navigator.clipboard?.writeText) {\n\t\t\t\tthrow new Error('Clipboard unavailable');\n\t\t\t}\n\t\t\tawait navigator.clipboard.writeText(text);\n\t\t} catch (error) {\n\t\t\tif (mounted.current && request === attempt.current) {\n\t\t\t\tsetFailed(true);\n\t\t\t\tonCopyError?.(error);\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t\tif (!mounted.current || request !== attempt.current) return false;\n\t\tsetCopied(true);\n\t\ttimer.current = setTimeout(() => setCopied(false), 1500);\n\t\treturn true;\n\t};\n\n\treturn { copied, failed, copy };\n}\n","import type { ReactNode } from 'react';\nimport type { StringsProp } from '../../../../lib/strings';\n\nexport type AiMessageRole = 'assistant' | 'user' | 'system';\n\nexport interface AiMessageBubbleStrings {\n\t/** Optional localized loading announcement. */\n\tloading?: string;\n\tcopyAria: string;\n /** Failure feedback, additive for existing string dictionaries. */\n copyError?: string;\n\tcopied: string;\n\tregenerateAria: string;\n}\n\nexport const defaultAiMessageBubbleStrings: AiMessageBubbleStrings = {\n copyError: 'Could not copy. Please try again.',\n\tcopyAria: 'Copy message',\n\tcopied: 'Copied',\n\tregenerateAria: 'Regenerate response',\n};\n\nexport interface AiMessageBubbleProps {\n\trole?: AiMessageRole;\n\t/** Leading avatar. */\n\tavatar?: ReactNode;\n\tavatarLabel?: string;\n\tauthorName?: ReactNode;\n\t/** Formatted time for the entry. */\n\ttimestamp?: ReactNode;\n\tchildren?: ReactNode;\n\t/** Plain-text version of the message content; used for the copy action. */\n\tplainText?: string;\n\tloading?: boolean;\n\t/** Fired when an entry is copied. */\n\tonCopy?: () => void;\n\tonRegenerate?: () => void;\n\t/** Merged onto the outermost node. */\n\t/** Called when the clipboard is unavailable or the write fails. */\n onCopyError?: (error: unknown) => void;\n className?: string;\n\t/** Overrides this surface's own copy. */\n\tstrings?: StringsProp<AiMessageBubbleStrings>;\n}\n","import { Bot, Copy, RotateCcw, User } from 'lucide-react';\nimport { Button } from '../../../base/buttons';\nimport { Message } from '../../collaboration/message';\nimport { Text } from '../../../typography';\nimport { useStrings } from '../../../../lib/strings';\nimport { cn } from '../../../../lib/utils';\nimport { useCopyFeedback } from '../use-copy-feedback';\nimport { defaultAiMessageBubbleStrings, type AiMessageBubbleProps } from './types';\n/** AI-specific copy/regenerate actions on the generic message presentation owner. */\nexport function AiMessageBubble({ role = 'assistant', avatar, avatarLabel, authorName, timestamp, children, plainText, loading = false, onCopy, onRegenerate, onCopyError, className, strings: stringsProp }: AiMessageBubbleProps) {\n const strings = useStrings(defaultAiMessageBubbleStrings, stringsProp);\n const copyText = plainText ?? (typeof children === 'string' ? children : '');\n const { copied, failed, copy } = useCopyFeedback(onCopyError, copyText);\n const Icon = role === 'user' ? User : Bot;\n const renderedAvatar = avatar ?? <span aria-label={avatarLabel} className=\"inline-flex size-avatar-sm shrink-0 items-center justify-center rounded-full bg-muted text-muted-foreground\"><Icon aria-hidden=\"true\" className=\"size-icon-md\" /></span>;\n const showActions = (onCopy !== undefined || plainText || onRegenerate) && role === 'assistant';\n return <Message align={role === 'user' ? 'end' : 'start'} tone={role === 'user' ? 'primary' : role === 'system' ? 'muted' : 'surface'} avatar={renderedAvatar} author={authorName} timestamp={timestamp} loading={loading} strings={{ loading: strings.loading }} className={cn('ai-message-bubble--component', className)} actions={showActions ? <>\n <Button type=\"button\" tone=\"secondary\" buttonStyle=\"ghost\" size=\"sm\" iconOnly aria-label={strings.copyAria} disabled={!copyText || loading} onClick={async () => { if (copyText && await copy(copyText)) onCopy?.(); }}><Copy aria-hidden=\"true\" className=\"size-icon-md\" /></Button>\n {copied && <Text size=\"xs\" type=\"success\">{strings.copied}</Text>}\n {onRegenerate && <Button type=\"button\" tone=\"secondary\" buttonStyle=\"ghost\" size=\"sm\" iconOnly aria-label={strings.regenerateAria} onClick={onRegenerate}><RotateCcw aria-hidden=\"true\" className=\"size-icon-md\" /></Button>}\n {failed && <Text role=\"alert\" size=\"xs\" type=\"error\">{strings.copyError ?? defaultAiMessageBubbleStrings.copyError}</Text>}\n </> : undefined}>{children}</Message>;\n}\nAiMessageBubble.displayName = 'AiMessageBubble';\n","import type { LucideIcon } from 'lucide-react';\nimport type { ReactNode } from 'react';\nimport type { StringsProp } from '../../../../lib/strings';\n\nexport type AiToolCallStatus = 'pending' | 'running' | 'success' | 'error';\n\nexport interface AiToolCallStrings {\n\tpending: string;\n\trunning: string;\n\tsuccess: string;\n\terror: string;\n\texpand: string;\n\tcollapse: string;\n\targs: string;\n\tresult: string;\n\tdurationLabel: string;\n}\n\nexport const defaultAiToolCallStrings: AiToolCallStrings = {\n\tpending: 'Queued',\n\trunning: 'Running',\n\tsuccess: 'Success',\n\terror: 'Failed',\n\texpand: 'Show details',\n\tcollapse: 'Hide details',\n\targs: 'Arguments',\n\tresult: 'Result',\n\tdurationLabel: 'Took',\n};\n\nexport interface AiToolCallProps {\n\t/** Display name. */\n\tname: string;\n\tstatus: AiToolCallStatus;\n\t/** Leading glyph. */\n\ticon?: LucideIcon;\n\targs?: ReactNode;\n\tresult?: ReactNode;\n\terror?: ReactNode;\n\t/** Duration in ms; rendered as \"Took 1.2s\". */\n\tdurationMs?: number;\n\t/** Expanded state, for controlled use. */\n\texpanded?: boolean;\n\t/** Initial expanded state, for uncontrolled use. */\n\tdefaultExpanded?: boolean;\n\t/** Fired whenever the disclosure state changes. */\n\tonExpandedChange?: (expanded: boolean) => void;\n\t/** Merged onto the outermost node. */\n\tclassName?: string;\n\t/** Overrides this surface's own copy. */\n\tstrings?: StringsProp<AiToolCallStrings>;\n}\n","/**\n * AiToolCall — collapsible trace for a model-invoked tool / function. Header\n * shows the tool name, status pill, and an expand/collapse toggle. Expanded\n * content reveals JSON-style `args` and `result` blocks (or an error block\n * when status is `error`) plus an optional duration. Use to surface tool-use\n * transparency in chat / agent UIs. Strings overridable for i18n.\n */\nimport {\n\tuseState,\n\ttype ReactNode } from 'react';\nimport {\n\tAlertCircle,\n\tChevronDown,\n\tChevronRight,\n\tCircleDot,\n\tLoader2,\n\tWrench,\n\ttype LucideIcon,\n\t} from 'lucide-react';\nimport { Badge } from '../../../base/badge';\nimport { Button } from '../../../base/buttons';\nimport { IconBadge,\n} from '../../../base/display';\nimport { Stack } from '../../../base/structure';\nimport { Duration, MonoValue, SecondaryValue } from '../../../primitives';\nimport { DisplayLabel } from '../../../typography';\nimport { useStrings } from '../../../../lib/strings';\nimport { cn } from '../../../../lib/utils';\n\nimport {\n\tdefaultAiToolCallStrings,\n\ttype AiToolCallProps,\n\ttype AiToolCallStatus,\n} from './types';\n\nconst STATUS_BADGE: Record<\n\tAiToolCallStatus,\n\t{ tone: 'secondary' | 'primary' | 'success' | 'destructive'; icon?: LucideIcon }\n> = {\n\tpending: { tone: 'secondary', icon: CircleDot },\n\trunning: { tone: 'primary', icon: Loader2 },\n\tsuccess: { tone: 'success' },\n\terror: { tone: 'destructive', icon: AlertCircle },\n};\n\nfunction DurationValue({ label, ms }: { label: string; ms: number }) {\n\treturn (\n\t\t<span className=\"inline-flex shrink-0 items-baseline gap-space-xs\">\n\t\t\t<SecondaryValue size=\"xs\">\n\t\t\t\t{label}\n\t\t\t</SecondaryValue>\n\t\t\t<Duration\n\t\t\t\tvalue={ms}\n\t\t\t\tfrom=\"milliseconds\"\n\t\t\t\tmaxParts={1}\n\t\t\t\tsize=\"xs\"\n\t\t\t\talign=\"left\"\n\t\t\t\ttype=\"secondary\"\n\t\t\t\tmaximumFractionDigits={ms < 10_000 ? 1 : 0}\n\t\t\t/>\n\t\t</span>\n\t);\n}\n\nexport function AiToolCall({\n\tname,\n\tstatus,\n\ticon: IconComponent = Wrench,\n\targs,\n\tresult,\n\terror,\n\tdurationMs,\n\texpanded: expandedProp,\n\tdefaultExpanded = false,\n\tonExpandedChange,\n\tclassName,\n\tstrings: stringsProp,\n}: AiToolCallProps) {\n\tconst strings = useStrings(defaultAiToolCallStrings, stringsProp);\n\tconst [internalExpanded, setInternalExpanded] = useState(defaultExpanded);\n\tconst expanded = expandedProp ?? internalExpanded;\n\tconst setExpanded = (next: boolean) => {\n\t\tif (expandedProp === undefined) setInternalExpanded(next);\n\t\tonExpandedChange?.(next);\n\t};\n\tconst labelByStatus: Record<AiToolCallStatus, string> = {\n\t\tpending: strings.pending,\n\t\trunning: strings.running,\n\t\tsuccess: strings.success,\n\t\terror: strings.error,\n\t};\n\tconst StatusIcon = STATUS_BADGE[status].icon;\n\n\tconst hasDetails = Boolean(args || result || error);\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn('ai-tool-call--component @container/ai-tool-call', \n\t\t\t\t'overflow-hidden rounded-radius border border-border/60 bg-card',\n\t\t\t\tstatus === 'error' && 'border-destructive/40 bg-destructive/5',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t>\n\t\t\t<Button\n\t\t\t\ttype=\"button\"\n\t\t\t\ttone=\"secondary\"\n\t\t\t\tbuttonStyle=\"ghost\"\n\t\t\t\tsize=\"md\"\n\t\t\t\tonClick={() => hasDetails && setExpanded(!expanded)}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'ai-tool-call--trigger h-auto w-full flex-wrap justify-start gap-space-md whitespace-normal rounded-none px-space-lg py-space-md text-left @md/ai-tool-call:flex-nowrap',\n\t\t\t\t\thasDetails ? 'cursor-pointer hover:bg-muted/40' : 'cursor-default',\n\t\t\t\t)}\n\t\t\t\taria-expanded={hasDetails ? expanded : undefined}\n\t\t\t\taria-label={hasDetails ? (expanded ? strings.collapse : strings.expand) : undefined}\n\t\t\t>\n\t\t\t\t<IconBadge icon={IconComponent} tone=\"neutral\" size=\"md\" shape=\"square\" />\n\t\t\t\t<div className=\"min-w-0 flex-1\">\n\t\t\t\t\t<MonoValue className=\"truncate\">\n\t\t\t\t\t\t{name}\n\t\t\t\t\t</MonoValue>\n\t\t\t\t</div>\n\t\t\t\t<span className=\"ai-tool-call--meta order-last flex w-full flex-wrap items-center gap-space-sm @md/ai-tool-call:order-none @md/ai-tool-call:w-auto @md/ai-tool-call:flex-nowrap\">\n\t\t\t\t\t<Badge tone={STATUS_BADGE[status].tone} className=\"gap-space-xs\">\n\t\t\t\t\t\t{!!StatusIcon && (\n\t\t\t\t\t\t\t<StatusIcon\n\t\t\t\t\t\t\t\tclassName={cn('size-icon-sm', status === 'running' && 'animate-spin')}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{labelByStatus[status]}\n\t\t\t\t\t</Badge>\n\t\t\t\t\t{!!durationMs && (\n\t\t\t\t\t\t<DurationValue label={strings.durationLabel} ms={durationMs} />\n\t\t\t\t\t)}\n\t\t\t\t</span>\n\t\t\t\t{hasDetails &&\n\t\t\t\t\t(expanded ? (\n\t\t\t\t\t\t<ChevronDown className=\"size-icon-md shrink-0 text-muted-foreground\" />\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<ChevronRight className=\"size-icon-md shrink-0 text-muted-foreground\" />\n\t\t\t\t\t))}\n\t\t\t</Button>\n\n\t\t\t{!!expanded && hasDetails && (\n\t\t\t\t<Stack gap=\"md\" className=\"ai-tool-call--details border-t border-border/60 bg-muted/20 px-space-lg py-space-md\">\n\t\t\t\t\t{!!args && (\n\t\t\t\t\t\t<DetailBlock label={strings.args}>{args}</DetailBlock>\n\t\t\t\t\t)}\n\t\t\t\t\t{status === 'error' && !!error ? (\n\t\t\t\t\t\t<DetailBlock label={strings.error} tone=\"destructive\">\n\t\t\t\t\t\t\t{error}\n\t\t\t\t\t\t</DetailBlock>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t!!result && <DetailBlock label={strings.result}>{result}</DetailBlock>\n\t\t\t\t\t)}\n\t\t\t\t</Stack>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n\nAiToolCall.displayName = 'AiToolCall';\n\nfunction DetailBlock({\n\tlabel,\n\tchildren,\n\ttone = 'neutral',\n}: {\n\t/** Display label. */\n\tlabel: string;\n\tchildren: ReactNode;\n\ttone?: 'neutral' | 'destructive';\n}) {\n\treturn (\n\t\t<Stack gap=\"sm\" className=\"ai-tool-call--detail-block\">\n\t\t\t<DisplayLabel>\n\t\t\t\t{label}\n\t\t\t</DisplayLabel>\n\t\t\t<pre\n\t\t\t\ttabIndex={0}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'max-w-full overflow-x-auto rounded-inner bg-card px-space-md py-space-md font-mono text-xs leading-relaxed',\n\t\t\t\t\ttone === 'destructive' && 'text-destructive bg-destructive/5',\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t</pre>\n\t\t</Stack>\n\t);\n}\n","/**\n * AiShimmer — gradient text shimmer for streaming / loading copy. Renders\n * children with a moving highlight band that draws the eye while a model is\n * thinking. Use anywhere a static \"Loading…\" feels too inert: agent typing,\n * tool warm-up, awaiting first token.\n */\nimport type { CSSProperties } from 'react';\nimport { Text } from '../../../typography';\nimport { cn } from '../../../../lib/utils';\n\nimport type { AiShimmerProps } from './types';\n\nexport function AiShimmer({\n\tchildren = 'Thinking…',\n\tpaused = false,\n\tduration = 2.4,\n\tclassName,\n}: AiShimmerProps) {\n\tif (paused) {\n\t\treturn (\n\t\t\t<Text tag=\"span\" type=\"secondary\" weight=\"medium\" className={cn('ai-shimmer--component', className)}>\n\t\t\t\t{children}\n\t\t\t</Text>\n\t\t);\n\t}\n\n\t// `CSSProperties` has no index signature for custom properties, which is the\n\t// only reason this needed a cast. Widening the annotation states the intent\n\t// — one known custom property — instead of switching the key off.\n\tconst style: CSSProperties & Record<'--ai-shimmer-duration', string> = {\n\t\t'--ai-shimmer-duration': `${duration}s`,\n\t};\n\n\treturn (\n\t\t<Text\n\t\t\ttag=\"span\"\n\t\t\tweight=\"medium\"\n\t\t\tdata-ai-shimmer\n\t\t\trole=\"status\"\n\t\t\taria-live=\"polite\"\n\t\t\tclassName={cn(\n\t\t\t\t'ai-shimmer--component inline-block bg-clip-text text-transparent',\n\t\t\t\t// foreground -> muted -> foreground gradient swept across\n\t\t\t\t'bg-[linear-gradient(110deg,var(--ai-shimmer-base,var(--muted-foreground))_30%,var(--ai-shimmer-highlight,var(--foreground))_50%,var(--ai-shimmer-base,var(--muted-foreground))_70%)]',\n\t\t\t\t'bg-[length:200%_100%]',\n\t\t\t\t'animate-[ai-shimmer-sweep_var(--ai-shimmer-duration,2.4s)_linear_infinite] motion-reduce:animate-none',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\tstyle={style}\n\t\t>\n\t\t\t{children}\n\t\t</Text>\n\t);\n}\n\nAiShimmer.displayName = 'AiShimmer';\n","import type { ReactNode } from 'react';\nimport type { StringsProp } from '../../../../lib/strings';\n\nexport interface AiCodeBlockStrings {\n\tcopy: string;\n\tcopied: string;\n\tcopyAria: string;\n /** Failure feedback, additive for existing string dictionaries. */\n copyError?: string;\n\t/** Header label when no language is provided. */\n\tdefaultLanguageLabel: string;\n}\n\nexport const defaultAiCodeBlockStrings: AiCodeBlockStrings = {\n\tcopy: 'Copy',\n\tcopied: 'Copied',\n copyError: 'Could not copy. Please try again.',\n\tcopyAria: 'Copy code',\n\tdefaultLanguageLabel: 'Code',\n};\n\nexport interface AiCodeBlockProps {\n\t/** The code to render. Pre-formatted text. */\n\tcode: string;\n\t/** Display label for the language (e.g. \"TypeScript\", \"shell\"). */\n\tlanguage?: string;\n\t/** Optional filename rendered in the header next to the language label. */\n\tfilename?: string;\n\t/** Render with line numbers. */\n\tshowLineNumbers?: boolean;\n\t/** Highlight specific 1-indexed line numbers. */\n\thighlightLines?: ReadonlyArray<number>;\n\t/** Hide the header strip entirely. */\n\thideHeader?: boolean;\n\t/** Force max-height before scroll. */\n\tmaxHeight?: number | string;\n\t/** Trailing slot inside the header (e.g. extra action button). */\n\theaderActions?: ReactNode;\n\t/** Fired when the user copies (after the navigator.clipboard write). */\n\tonCopy?: () => void;\n\t/** Merged onto the outermost node. */\n\t/** Called when the clipboard is unavailable or the write fails. */\n onCopyError?: (error: unknown) => void;\n className?: string;\n\t/** Overrides this surface's own copy. */\n\tstrings?: StringsProp<AiCodeBlockStrings>;\n}\n","import { CodeBlock } from '../../../base/code-block';\nimport { useStrings } from '../../../../lib/strings';\nimport { cn } from '../../../../lib/utils';\nimport { defaultAiCodeBlockStrings, type AiCodeBlockProps } from './types';\n/** Compatibility adapter; the generic code display owns layout and copying. */\nexport function AiCodeBlock({ strings: stringsProp, className, onCopy, ...props }: AiCodeBlockProps) {\n const strings = useStrings(defaultAiCodeBlockStrings, stringsProp);\n return <CodeBlock {...props} className={cn('ai-code-block--component', className)} onCopy={onCopy ? () => onCopy() : undefined} strings={{ copyAria: strings.copyAria, copied: strings.copied, copyError: strings.copyError, defaultLanguageLabel: strings.defaultLanguageLabel }} />;\n}\nAiCodeBlock.displayName = 'AiCodeBlock';\n","import type { LucideIcon } from 'lucide-react';\nimport type { StringsProp } from '../../../../lib/strings';\n\nexport type AiAttachmentKind = 'image' | 'document' | 'audio' | 'video' | 'code' | 'archive' | 'generic';\n\nexport interface AiAttachmentStrings {\n\tremoveAria: string;\n\topenAria: string;\n\tuploadProgressAria: string;\n\t/** Text feedback when the attachment cannot be used. */\n\terror?: string;\n}\n\nexport const defaultAiAttachmentStrings: AiAttachmentStrings = {\n\tremoveAria: 'Remove attachment',\n\topenAria: 'Open attachment',\n\tuploadProgressAria: 'Upload progress',\n\terror: 'Failed',\n};\n\nexport interface AiAttachmentProps {\n\t/** Filename / display label. */\n\tname: string;\n\t/** Optional secondary label — formatted size, file extension, etc. */\n\tmeta?: string;\n\t/** Pre-categorized kind. Defaults to \"generic\" — drives the fallback icon. */\n\tkind?: AiAttachmentKind;\n\t/** Override the auto-picked kind icon. */\n\ticon?: LucideIcon;\n\t/** When set, renders the chip as a thumbnail tile with this image. */\n\tthumbnailUrl?: string;\n\t/** Show a small loading bar (in-flight upload). */\n\tprogress?: number; // 0..1\n\t/** Show as errored — overrides progress. */\n\terrored?: boolean;\n\t/** Open / download callback (clicking the chip body). */\n\tonOpen?: () => void;\n\t/** Render a remove (×) action. */\n\tonRemove?: () => void;\n\t/** Merged onto the outermost node. */\n\tclassName?: string;\n\t/** Overrides this surface's own copy. */\n\tstrings?: StringsProp<AiAttachmentStrings>;\n}\n","/** Compatibility presentation for staged AI files; Attachment owns the file anatomy. */\nimport { AlertCircle, X } from 'lucide-react';\nimport { Attachment, AttachmentMedia, AttachmentContent, AttachmentTitle, AttachmentDescription, AttachmentActions, AttachmentProgress, AttachmentFileIcon } from '../../../base/attachment';\nimport { Button } from '../../../base/buttons';\nimport { Text } from '../../../typography';\nimport { useStrings } from '../../../../lib/strings';\nimport { cn } from '../../../../lib/utils';\nimport { defaultAiAttachmentStrings, type AiAttachmentProps } from './types';\n\nexport function AiAttachment({ name, meta, kind = 'generic', icon: Icon, thumbnailUrl, progress, errored = false, onOpen, onRemove, className, strings: stringsProp }: AiAttachmentProps) {\n const strings = useStrings(defaultAiAttachmentStrings, stringsProp);\n const showProgress = !errored && typeof progress === 'number' && progress >= 0 && progress < 1;\n return <Attachment name={name} layout=\"compact\" status={errored ? 'error' : showProgress ? 'uploading' : undefined} onOpen={onOpen} strings={{ preview: () => strings.openAria }} className={cn('ai-attachment--component inline-flex w-auto', className)}>\n <AttachmentMedia variant={thumbnailUrl ? 'image' : 'icon'}>\n {thumbnailUrl ? <img src={thumbnailUrl} alt=\"\" /> : errored ? <AlertCircle aria-hidden=\"true\" /> : Icon ? <Icon aria-hidden=\"true\" /> : <AttachmentFileIcon name={name} kind={kind} />}\n </AttachmentMedia>\n <AttachmentContent>\n <AttachmentTitle title={name}>{name}</AttachmentTitle>\n {meta && <AttachmentDescription clamp={1}>{meta}</AttachmentDescription>}\n {errored && <AttachmentDescription clamp=\"none\"><Text tag=\"span\" size=\"xs\" type=\"error\" role=\"alert\">{strings.error ?? defaultAiAttachmentStrings.error}</Text></AttachmentDescription>}\n {showProgress && <AttachmentProgress value={Math.round((progress ?? 0) * 100)} size=\"sm\" aria-label={strings.uploadProgressAria} />}\n </AttachmentContent>\n {onRemove && <AttachmentActions><Button type=\"button\" tone=\"secondary\" buttonStyle=\"ghost\" size=\"sm\" iconOnly aria-label={strings.removeAria} onClick={onRemove}><X aria-hidden=\"true\" className=\"size-icon-sm\" /></Button></AttachmentActions>}\n </Attachment>;\n}\nAiAttachment.displayName = 'AiAttachment';\n","import type { LucideIcon } from 'lucide-react';\nimport type { ReactNode } from 'react';\nimport type { StringsProp } from '../../../../lib/strings';\n\nexport type AiAgentStatus = 'idle' | 'thinking' | 'working' | 'done' | 'error' | 'offline';\n\nexport interface AiAgentStrings {\n\tstatusLabels: Record<AiAgentStatus, string>;\n}\n\nexport const defaultAiAgentStrings: AiAgentStrings = {\n\tstatusLabels: {\n\t\tidle: 'Idle',\n\t\tthinking: 'Thinking',\n\t\tworking: 'Working',\n\t\tdone: 'Done',\n\t\terror: 'Error',\n\t\toffline: 'Offline',\n\t},\n};\n\nexport interface AiAgentProps {\n\t/** Display name (e.g. \"Atlas\", \"Claude\"). */\n\tname: string;\n\t/** Avatar / mark — typically an icon or short emoji. */\n\ticon?: LucideIcon;\n\t/** Override avatar with arbitrary content (image, gradient mark, etc.). */\n\tavatar?: ReactNode;\n\t/** Short blurb / model identifier rendered under the name. */\n\tsubtitle?: ReactNode;\n\t/** Tone color for the avatar wash. */\n\ttone?: 'primary' | 'success' | 'warning' | 'destructive' | 'info' | 'neutral';\n\t/** Live status displayed as a pill next to the name. */\n\tstatus?: AiAgentStatus;\n\t/** Density variant — `inline` is a single-line chip, `card` is a tile. */\n\tvariant?: 'inline' | 'card';\n\t/** Trailing slot — typically actions, badges. */\n\ttrailing?: ReactNode;\n\t/** Merged onto the outermost node. */\n\tclassName?: string;\n\t/** Overrides this surface's own copy. */\n\tstrings?: StringsProp<AiAgentStrings>;\n}\n","/**\n * AiAgent — identity card for an AI persona / model. Renders avatar (icon\n * or custom), name, optional subtitle (model id, role), and a live status\n * pill. `variant='inline'` is a one-line chip (header strips, breadcrumbs);\n * `variant='card'` is a small tile (model picker, agent dock).\n */\nimport { Bot, type LucideIcon } from 'lucide-react';\nimport { Badge } from '../../../base/badge';\nimport { Text } from '../../../typography';\nimport { useStrings } from '../../../../lib/strings';\nimport { Stack } from '../../../base/structure';\nimport { cn } from '../../../../lib/utils';\n\nimport {\n\tdefaultAiAgentStrings,\n\ttype AiAgentProps,\n\ttype AiAgentStatus,\n} from './types';\n\nconst TONE_AVATAR: Record<NonNullable<AiAgentProps['tone']>, string> = {\n\tprimary: 'bg-primary/15 text-primary-accent',\n\tsuccess: 'bg-success/15 text-success',\n\twarning: 'bg-warning/20 text-warning-accent',\n\tdestructive: 'bg-destructive/15 text-destructive',\n\tinfo: 'bg-info/15 text-info',\n\tneutral: 'bg-muted text-muted-foreground',\n};\n\nconst STATUS_VARIANT: Record<\n\tAiAgentStatus,\n\t'secondary' | 'primary' | 'success' | 'warning' | 'destructive'\n> = {\n\tidle: 'secondary',\n\tthinking: 'primary',\n\tworking: 'primary',\n\tdone: 'success',\n\terror: 'destructive',\n\toffline: 'secondary',\n};\n\nexport function AiAgent({\n\tname,\n\ticon,\n\tavatar,\n\tsubtitle,\n\ttone = 'primary',\n\tstatus,\n\tvariant = 'inline',\n\ttrailing,\n\tclassName,\n\tstrings: stringsProp,\n}: AiAgentProps) {\n\tconst strings = useStrings(defaultAiAgentStrings, stringsProp);\n\tconst Icon: LucideIcon = icon ?? Bot;\n\n\tconst avatarSize = variant === 'card' ? 'size-9' : 'size-7';\n\tconst iconSize = variant === 'card' ? 'size-icon' : 'size-icon-md';\n\n\tconst renderedAvatar =\n\t\tavatar ?? (\n\t\t\t<span\n\t\t\t\taria-hidden\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'inline-flex shrink-0 items-center justify-center rounded-full',\n\t\t\t\t\tavatarSize,\n\t\t\t\t\tTONE_AVATAR[tone],\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t<Icon className={iconSize} />\n\t\t\t</span>\n\t\t);\n\n\tconst StatusPill = !!status && (\n\t\t<Badge tone={STATUS_VARIANT[status]} className=\"gap-space-xs\">\n\t\t\t<span\n\t\t\t\taria-hidden\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'inline-block size-1.5 rounded-full',\n\t\t\t\t\tstatus === 'thinking' || status === 'working'\n\t\t\t\t\t\t? 'animate-pulse bg-current'\n\t\t\t\t\t\t: 'bg-current',\n\t\t\t\t)}\n\t\t\t/>\n\t\t\t{strings.statusLabels[status]}\n\t\t</Badge>\n\t);\n\n\tif (variant === 'card') {\n\t\treturn (\n\t\t\t<div className={cn('ai-agent--component',\n\t\t\t\t\t'rounded-radius border border-border/60 bg-card p-surface-xs',\n\t\t\t\t\tclassName,\n\t\t\t\t)}>\n\t\t\t<Stack direction=\"horizontal\" align=\"center\" gap=\"lg\">\n\t\t\t\t{renderedAvatar}\n\t\t\t\t\t<Stack gap=\"dense\" className=\"min-w-0 flex-1\">\n\t\t\t\t\t<div className=\"flex items-center gap-space-md\">\n\t\t\t\t\t\t<Text weight=\"semibold\" className=\"truncate\">\n\t\t\t\t\t\t\t{name}\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t{StatusPill}\n\t\t\t\t\t</div>\n\t\t\t\t\t{!!subtitle && (\n\t\t\t\t\t\t<Text size=\"xs\" type=\"secondary\" className=\"line-clamp-1\">\n\t\t\t\t\t\t\t{subtitle}\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t)}\n\t\t\t\t\t</Stack>\n\t\t\t\t{!!trailing && <div className=\"ml-auto flex items-center gap-space-xs\">{trailing}</div>}\n\t\t\t</Stack>\n\t\t\t</div>\n\t\t);\n\t}\n\n\treturn (\n\t\t<div className={cn('ai-agent--component', 'inline-flex items-center gap-space-md', className)}>\n\t\t\t{renderedAvatar}\n\t\t\t<Stack direction=\"horizontal\" align=\"center\" gap=\"md\" className=\"min-w-0\">\n\t\t\t\t<Text weight=\"medium\" className=\"truncate\">\n\t\t\t\t\t{name}\n\t\t\t\t</Text>\n\t\t\t\t{!!subtitle && (\n\t\t\t\t\t<Text size=\"xs\" type=\"secondary\" className=\"truncate\">\n\t\t\t\t\t\t{subtitle}\n\t\t\t\t\t</Text>\n\t\t\t\t)}\n\t\t\t\t{StatusPill}\n\t\t\t</Stack>\n\t\t\t{!!trailing && <div className=\"ml-1 flex items-center gap-space-xs\">{trailing}</div>}\n\t\t</div>\n\t);\n}\n\nAiAgent.displayName = 'AiAgent';\n","import type { LucideIcon } from 'lucide-react';\nimport type { ReactNode } from 'react';\nimport type { StringsProp } from '../../../../lib/strings';\nimport type { SemanticTone } from '../../../../lib/component-vocabulary';\n\nexport type AiConfirmationTone = Extract<\n\tSemanticTone,\n\t'neutral' | 'destructive' | 'warning' | 'info' | 'primary'\n>;\n\nexport interface AiConfirmationStrings {\n\tapprove: string;\n\treject: string;\n\tpending: string;\n\tapproved: string;\n\trejected: string;\n}\n\nexport const defaultAiConfirmationStrings: AiConfirmationStrings = {\n\tapprove: 'Approve',\n\treject: 'Reject',\n\tpending: 'Awaiting your approval',\n\tapproved: 'Approved',\n\trejected: 'Rejected',\n};\n\nexport type AiConfirmationStatus = 'pending' | 'approved' | 'rejected';\n\nexport interface AiConfirmationProps {\n\t/** Title — short, action-oriented (e.g. \"Run npm install\"). */\n\ttitle: ReactNode;\n\t/** Body description / details. */\n\tdescription?: ReactNode;\n\t/** Decorative icon. */\n\ticon?: LucideIcon;\n\t/** Semantic color intent. */\n\ttone?: AiConfirmationTone;\n\t/** Current status — when set, the action row is replaced with a result pill. */\n\tstatus?: AiConfirmationStatus;\n\t/** Approve callback. */\n\tonApprove?: () => void;\n\t/** Reject callback. */\n\tonReject?: () => void;\n\t/** Override the approve button label. */\n\tapproveLabel?: ReactNode;\n\t/** Override the reject button label. */\n\trejectLabel?: ReactNode;\n\t/** Render a \"details\" expandable area. */\n\tdetails?: ReactNode;\n\t/** Merged onto the outermost node. */\n\tclassName?: string;\n\t/** Overrides this surface's own copy. */\n\tstrings?: StringsProp<AiConfirmationStrings>;\n}\n","/**\n * AiConfirmation — inline approval prompt rendered in-stream when an agent\n * needs user permission before taking a side-effecting action (run command,\n * call write API, charge a card). Carries title, description, icon, optional\n * details, and an approve/reject pair. After resolution, the action row\n * collapses into a status pill.\n */\nimport {\n\tCheck,\n\tShieldCheck,\n\tX,\n\ttype LucideIcon } from 'lucide-react';\nimport { Button } from '../../../base/buttons';\nimport { IconBadge,\n} from '../../../base/display';\nimport { Text } from '../../../typography';\nimport { useStrings } from '../../../../lib/strings';\nimport { Stack } from '../../../base/structure';\nimport { cn } from '../../../../lib/utils';\n\nimport {\n\tdefaultAiConfirmationStrings,\n\ttype AiConfirmationProps,\n\ttype AiConfirmationTone,\n} from './types';\n\nconst TONE: Record<\n\tAiConfirmationTone,\n\t{ ring: string; icon: 'neutral' | 'primary' | 'success' | 'warning' | 'destructive' | 'info' }\n> = {\n\tneutral: { ring: 'border-border/60 bg-card', icon: 'neutral' },\n\tdestructive: { ring: 'border-destructive/40 bg-destructive/5', icon: 'destructive' },\n\twarning: { ring: 'border-warning/40 bg-warning/5', icon: 'warning' },\n\tinfo: { ring: 'border-info/40 bg-info/5', icon: 'info' },\n\tprimary: { ring: 'border-primary/40 bg-primary/5', icon: 'primary' },\n};\n\nexport function AiConfirmation({\n\ttitle,\n\tdescription,\n\ticon,\n\ttone = 'neutral',\n\tstatus = 'pending',\n\tonApprove,\n\tonReject,\n\tapproveLabel,\n\trejectLabel,\n\tdetails,\n\tclassName,\n\tstrings: stringsProp,\n}: AiConfirmationProps) {\n\tconst strings = useStrings(defaultAiConfirmationStrings, stringsProp);\n\tconst Icon: LucideIcon = icon ?? ShieldCheck;\n\tconst toneCfg = TONE[tone];\n\n\treturn (\n\t\t<div\n\t\t\trole=\"region\"\n\t\t\taria-live=\"polite\"\n\t\t\tclassName={cn('ai-confirmation--component',\n\t\t\t\t'@container/ai-confirmation rounded-radius border p-surface-xs',\n\t\t\t\ttoneCfg.ring,\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t>\n\t\t\t<div className=\"ai-confirmation--header flex items-start gap-space-lg\">\n\t\t\t\t<IconBadge icon={Icon} tone={toneCfg.icon} size=\"md\" shape=\"square\" />\n\t\t\t\t<div className=\"min-w-0 flex-1\">\n\t\t\t\t\t<Stack gap=\"normal\">\n\t\t\t\t\t<Text weight=\"semibold\">{title}</Text>\n\t\t\t\t\t{!!description && (\n\t\t\t\t\t\t<Text type=\"secondary\">\n\t\t\t\t\t\t\t{description}\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t)}\n\t\t\t\t\t</Stack>\n\t\t\t\t\t{!!details && <div className=\"mt-space-md\">{details}</div>}\n\t\t\t\t</div>\n\t\t\t</div>\n\n\t\t\t{status === 'pending' ? (\n\t\t\t\t<div className=\"ai-confirmation--footer mt-space-lg flex flex-col items-stretch gap-space-md border-t border-border/60 pt-surface-xs @sm/ai-confirmation:flex-row @sm/ai-confirmation:items-center @sm/ai-confirmation:justify-between\">\n\t\t\t\t\t<Text size=\"xs\" type=\"secondary\">\n\t\t\t\t\t\t{strings.pending}\n\t\t\t\t\t</Text>\n\t\t\t\t\t<Stack direction=\"horizontal\" align=\"center\" justify=\"end\" gap=\"md\" className=\"ai-confirmation--actions\">\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\ttone=\"secondary\"\n\t\t\t\t\t\t\tbuttonStyle=\"ghost\"\n\t\t\t\t\t\t\tonClick={onReject}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<X className=\"size-icon-md\" />\n\t\t\t\t\t\t\t{rejectLabel ?? strings.reject}\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\ttone={tone === 'destructive' ? 'destructive' : 'primary'}\n\t\t\t\t\t\t\tonClick={onApprove}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Check className=\"size-icon-md\" />\n\t\t\t\t\t\t\t{approveLabel ?? strings.approve}\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t</Stack>\n\t\t\t\t</div>\n\t\t\t) : (\n\t\t\t\t<div className=\"ai-confirmation--footer mt-space-lg flex items-center gap-space-md border-t border-border/60 pt-surface-xs\">\n\t\t\t\t\t{status === 'approved' ? (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t<Check className=\"size-icon-md text-success\" />\n\t\t\t\t\t\t\t<Text size=\"xs\" type=\"success\" weight=\"medium\">\n\t\t\t\t\t\t\t\t{strings.approved}\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t</>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t<X className=\"size-icon-md text-muted-foreground\" />\n\t\t\t\t\t\t\t<Text size=\"xs\" type=\"secondary\" weight=\"medium\">\n\t\t\t\t\t\t\t\t{strings.rejected}\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t</>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n\nAiConfirmation.displayName = 'AiConfirmation';\n","import type { ReactNode } from 'react';\nimport type { StringsProp } from '../../../../lib/strings';\n\nexport interface AiSourceItem {\n\t/** Stable identity for this entry. */\n\tid: string;\n\t/** Surface title. */\n\ttitle: ReactNode;\n\turl?: string;\n\t/** Hostname / publisher / \"doc-section\" — rendered under the title. */\n\tpublisher?: string;\n\t/** Favicon / logo URL — rendered as a small avatar; falls back to a globe. */\n\tfaviconUrl?: string;\n\t/** Optional short snippet shown only in the expanded variant. */\n\tsnippet?: ReactNode;\n}\n\nexport interface AiSourcesStrings {\n\t/** Header title — `{{count}}` placeholder for the source count. */\n\ttitle: string;\n\texpand: string;\n\tcollapse: string;\n\tvisit: string;\n}\n\nexport const defaultAiSourcesStrings: AiSourcesStrings = {\n\ttitle: '{{count}} sources',\n\texpand: 'Show all sources',\n\tcollapse: 'Hide sources',\n\tvisit: 'Visit source',\n};\n\nexport type AiSourcesVariant = 'list' | 'avatars';\n\nexport interface AiSourcesProps {\n\t/** Source list. Order is significant — index drives the displayed number. */\n\tsources: ReadonlyArray<AiSourceItem>;\n\t/** `list` is a vertical row layout; `avatars` is a stacked-favicons strip. */\n\tvariant?: AiSourcesVariant;\n\t/** Number of sources rendered in the avatar strip before the \"+N\" overflow. */\n\tmaxAvatars?: number;\n\t/** Expanded state, for controlled use in the list variant. */\n\texpanded?: boolean;\n\t/** Render the list expanded by default (only applies to `list` variant). */\n\tdefaultExpanded?: boolean;\n\t/** Fired whenever the disclosure state changes. */\n\tonExpandedChange?: (expanded: boolean) => void;\n\t/** Click handler — preferred over `url` for SPA routing. */\n\tonSelect?: (source: AiSourceItem, index: number) => void;\n\t/** Merged onto the outermost node. */\n\tclassName?: string;\n\t/** Overrides this surface's own copy. */\n\tstrings?: StringsProp<AiSourcesStrings>;\n}\n","/**\n * AiSources — light-weight source list rendered under streamed content. Two\n * shapes: `list` is a vertical stack of source rows (favicon + title + host);\n * `avatars` is a compact stacked-favicon strip used when space is tight (chat\n * footer, side panel header). For richer \"expandable\" footnote-style sources\n * with relevance bars and snippets, see `<AiCitation>`.\n */\nimport { useEffect, useState } from 'react';\nimport { ChevronDown, ChevronRight, ExternalLink, Globe } from 'lucide-react';\nimport { Button } from '../../../base/buttons';\nimport { Stack } from '../../../base/structure';\nimport { Number as NumberValue, SecondaryValue } from '../../../primitives';\nimport { Text, TextLink } from '../../../typography';\nimport { mergeStrings } from '../../../../lib/strings';\nimport { cn } from '../../../../lib/utils';\n\nimport { defaultAiSourcesStrings, type AiSourceItem, type AiSourcesProps } from './types';\n\nfunction interpolate(template: string, params: Record<string, string | number>): string {\n\treturn template.replace(/\\{\\{\\s*(\\w+)\\s*\\}\\}/g, (m, k) => {\n\t\tconst v = params[k];\n\t\treturn v === undefined ? m : String(v);\n\t});\n}\n\nexport function AiSources({\n\tsources,\n\tvariant = 'list',\n\tmaxAvatars = 5,\n\texpanded: expandedProp,\n\tdefaultExpanded = false,\n\tonExpandedChange,\n\tonSelect,\n\tclassName,\n\tstrings: stringsProp,\n}: AiSourcesProps) {\n\tconst strings = mergeStrings(defaultAiSourcesStrings, stringsProp);\n\tconst [internalExpanded, setInternalExpanded] = useState(defaultExpanded);\n\tconst expanded = expandedProp ?? internalExpanded;\n\tconst setExpanded = (next: boolean) => {\n\t\tif (expandedProp === undefined) setInternalExpanded(next);\n\t\tonExpandedChange?.(next);\n\t};\n\tconst titleText = interpolate(strings.title, { count: sources.length });\n\n\tif (variant === 'avatars') {\n\t\treturn (\n\t\t\t<AvatarStrip\n\t\t\t\tsources={sources}\n\t\t\t\tmax={maxAvatars}\n\t\t\t\ttitle={titleText}\n\t\t\t\tvisitLabel={strings.visit}\n\t\t\t\tonSelect={onSelect}\n\t\t\t\tclassName={cn('ai-sources--component', className)}\n\t\t\t/>\n\t\t);\n\t}\n\n\tconst visible = expanded ? sources : sources.slice(0, 0);\n\n\treturn (\n\t\t<div className={cn('ai-sources--component rounded-radius border border-border/60 bg-card', className)}>\n\t\t\t<Button\n\t\t\t\ttype=\"button\"\n\t\t\t\ttone=\"secondary\"\n\t\t\t\tbuttonStyle=\"ghost\"\n\t\t\t\tsize=\"md\"\n\t\t\t\tonClick={() => setExpanded(!expanded)}\n\t\t\t\taria-expanded={expanded}\n\t\t\t\taria-label={expanded ? strings.collapse : strings.expand}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'ai-sources--trigger h-auto w-full justify-start gap-space-md px-surface-xs py-row-y text-left',\n\t\t\t\t\t'rounded-inner hover:bg-muted/40',\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t<AvatarStack sources={sources.slice(0, 4)} />\n\t\t\t\t<Text weight=\"medium\" className=\"flex-1\">\n\t\t\t\t\t{titleText}\n\t\t\t\t</Text>\n\t\t\t\t{expanded ? (\n\t\t\t\t\t<ChevronDown className=\"size-icon-md text-muted-foreground\" />\n\t\t\t\t) : (\n\t\t\t\t\t<ChevronRight className=\"size-icon-md text-muted-foreground\" />\n\t\t\t\t)}\n\t\t\t</Button>\n\n\t\t\t{expanded && (\n\t\t\t\t<div className=\"ai-sources--list border-t border-border/60 px-surface-xs py-row-y\">\n\t\t\t\t\t<Stack render={<ol />} gap=\"2xs\" className=\"m-0 list-none p-0 font-sans\">\n\t\t\t\t\t\t{visible.map((source, idx) => (\n\t\t\t\t\t\t\t<SourceRow\n\t\t\t\t\t\t\t\tkey={source.id}\n\t\t\t\t\t\t\t\tsource={source}\n\t\t\t\t\t\t\t\tindex={idx + 1}\n\t\t\t\t\t\t\t\tonSelect={onSelect ? () => onSelect(source, idx) : undefined}\n\t\t\t\t\t\t\t\tvisitLabel={strings.visit}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</Stack>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n\nAiSources.displayName = 'AiSources';\n\nfunction AvatarStrip({\n\tsources,\n\tmax,\n\ttitle,\n\tvisitLabel,\n\tonSelect,\n\tclassName,\n}: {\n\tsources: ReadonlyArray<AiSourceItem>;\n\tmax: number;\n\ttitle: string;\n\tvisitLabel: string;\n\tonSelect?: (source: AiSourceItem, index: number) => void;\n\tclassName?: string;\n}) {\n\tconst visible = sources.slice(0, max);\n\tconst overflow = sources.length - visible.length;\n\treturn (\n\t\t<div className={cn('inline-flex items-center gap-space-md', className)}>\n\t\t\t<AvatarStack sources={visible} onSelect={onSelect} visitLabel={visitLabel} />\n\t\t\t<Text size=\"xs\" type=\"secondary\">\n\t\t\t\t{title}\n\t\t\t</Text>\n\t\t\t{overflow > 0 && (\n\t\t\t\t<SecondaryValue size=\"xs\" className=\"tabular-nums\">\n\t\t\t\t\t+\n\t\t\t\t\t<NumberValue value={overflow} size=\"xs\" type=\"secondary\" align=\"left\" />\n\t\t\t\t</SecondaryValue>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n\nfunction AvatarStack({\n\tsources,\n\tonSelect,\n\tvisitLabel,\n}: {\n\tsources: ReadonlyArray<AiSourceItem>;\n\tonSelect?: (source: AiSourceItem, index: number) => void;\n\tvisitLabel?: string;\n}) {\n\treturn (\n\t\t<div className={cn('flex', onSelect ? 'gap-space-2xs' : '-space-x-space-sm')}>\n\t\t\t{sources.map((s, i) => {\n\t\t\t\tconst visual = (\n\t\t\t\t\t<span\n\t\t\t\t\t\tkey={s.id}\n\t\t\t\t\t\taria-hidden\n\t\t\t\t\t\ttitle={typeof s.title === 'string' ? s.title : undefined}\n\t\t\t\t\t\tclassName=\"inline-flex size-icon-lg items-center justify-center overflow-hidden rounded-full border border-card bg-muted text-muted-foreground ring-1 ring-border/60\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<SourceFavicon src={s.faviconUrl} />\n\t\t\t\t\t</span>\n\t\t\t\t);\n\t\t\t\tif (onSelect) {\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\tkey={s.id}\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tonClick={() => onSelect(s, i)}\n\t\t\t\t\t\t\taria-label={typeof s.title === 'string' ? `${visitLabel}: ${s.title}` : visitLabel}\n\t\t\t\t\t\t\tclassName=\"box-border inline-flex size-action-xs shrink-0 items-center justify-center rounded-inner border-0 bg-transparent p-0 font-sans focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{visual}\n\t\t\t\t\t\t</button>\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\treturn visual;\n\t\t\t})}\n\t\t</div>\n\t);\n}\n\nfunction SourceFavicon({ src }: { src?: string }) {\n\tconst [failed, setFailed] = useState(false);\n\n\tuseEffect(() => {\n\t\tsetFailed(false);\n\t}, [src]);\n\n\tif (!src || failed) {\n\t\treturn <Globe className=\"size-icon-sm\" />;\n\t}\n\n\treturn <img src={src} alt=\"\" className=\"size-full object-cover\" onError={() => setFailed(true)} />;\n}\n\nfunction SourceRow({\n\tsource,\n\tindex,\n\tonSelect,\n\tvisitLabel,\n}: {\n\tsource: AiSourceItem;\n\tindex: number;\n\tonSelect?: () => void;\n\tvisitLabel: string;\n}) {\n\tconst interactive = Boolean(source.url || onSelect);\n\tconst rowClassName = cn(\n\t\t'group box-border flex w-full items-start gap-space-lg rounded-inner border-0 bg-transparent px-row-x py-row-y-sm text-left font-sans text-foreground',\n\t\tinteractive && 'hover:bg-muted/40 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n\t);\n\tconst rowContent = (\n\t\t<>\n\t\t\t<NumberValue\n\t\t\t\tvalue={index}\n\t\t\t\tsize=\"xs\"\n\t\t\t\tweight=\"semibold\"\n\t\t\t\ttype=\"secondary\"\n\t\t\t\talign=\"center\"\n\t\t\t\tclassName=\"inline-flex size-icon-lg shrink-0 items-center justify-center rounded-full bg-muted\"\n\t\t\t/>\n\t\t\t<Stack gap=\"dense\" className=\"min-w-0 flex-1\">\n\t\t\t\t<Text weight=\"medium\" className=\"truncate\">\n\t\t\t\t\t{source.title}\n\t\t\t\t\t{!!source.url && (\n\t\t\t\t\t\t<ExternalLink className=\"ml-1 inline size-icon-sm text-muted-foreground/70 align-baseline\" />\n\t\t\t\t\t)}\n\t\t\t\t</Text>\n\t\t\t\t{!!source.publisher && (\n\t\t\t\t\t<Text size=\"xs\" type=\"secondary\" className=\"truncate\">\n\t\t\t\t\t\t{source.publisher}\n\t\t\t\t\t</Text>\n\t\t\t\t)}\n\t\t\t\t{!!source.snippet && (\n\t\t\t\t\t<Text size=\"xs\" type=\"secondary\" className=\"line-clamp-2\">\n\t\t\t\t\t\t{source.snippet}\n\t\t\t\t\t</Text>\n\t\t\t\t)}\n\t\t\t</Stack>\n\t\t</>\n\t);\n\n\treturn (\n\t\t<li>\n\t\t\t{source.url && !onSelect ? (\n\t\t\t\t<TextLink\n\t\t\t\t\thref={source.url}\n\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\trel=\"noopener noreferrer\"\n\t\t\t\t\tsize=\"inherit\"\n\t\t\t\t\tunderline={false}\n\t\t\t\t\tclassName={rowClassName}\n\t\t\t\t\taria-label={visitLabel}\n\t\t\t\t>\n\t\t\t\t\t{rowContent}\n\t\t\t\t</TextLink>\n\t\t\t) : onSelect ? (\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tonClick={onSelect}\n\t\t\t\t\tclassName={cn(rowClassName, 'h-auto justify-start whitespace-normal')}\n\t\t\t\t\taria-label={source.url ? visitLabel : undefined}\n\t\t\t\t>\n\t\t\t\t\t{rowContent}\n\t\t\t\t</button>\n\t\t\t) : (\n\t\t\t\t<span className={rowClassName}>{rowContent}</span>\n\t\t\t)}\n\t\t</li>\n\t);\n}\n","import type { ReactNode } from 'react';\nimport type { StringsProp } from '../../../../lib/strings';\n\nexport interface AiReasoningStrings {\n\t/** Header label when collapsed and reasoning is in progress. */\n\tthinking: string;\n\t/** Header label when reasoning is complete. Use `{{duration}}` for the formatted elapsed time. */\n\tthoughtFor: string;\n\t/** Header label when no duration is available. */\n\tthoughtDone: string;\n\texpandAria: string;\n\tcollapseAria: string;\n}\n\nexport const defaultAiReasoningStrings: AiReasoningStrings = {\n\tthinking: 'Thinking…',\n\tthoughtFor: 'Thought for {{duration}}',\n\tthoughtDone: 'Reasoning complete',\n\texpandAria: 'Expand reasoning',\n\tcollapseAria: 'Collapse reasoning',\n};\n\nexport interface AiReasoningProps {\n\t/** Reasoning trace — typically streamed plaintext. */\n\tchildren?: ReactNode;\n\t/** Show the live \"Thinking…\" header with shimmer. */\n\tstreaming?: boolean;\n\t/** Total elapsed time in seconds — shown in the collapsed-done header. */\n\tdurationSeconds?: number;\n\t/** Auto-expand while streaming. */\n\texpandWhileStreaming?: boolean;\n\t/** Initial expanded state. */\n\tdefaultExpanded?: boolean;\n\t/** Controlled expanded state. */\n\texpanded?: boolean;\n\tonExpandedChange?: (expanded: boolean) => void;\n\t/** Merged onto the outermost node. */\n\tclassName?: string;\n\t/** Overrides this surface's own copy. */\n\tstrings?: StringsProp<AiReasoningStrings>;\n}\n","/**\n * AiReasoning — collapsible \"thinking\" trace shown above the assistant's\n * final answer. While `streaming` is true the header runs the shimmer label\n * and the body is auto-expanded; once streaming ends, the header switches\n * to a localized duration summary and the body collapses to a peek.\n *\n * Accept the trace as `children` so the consumer can stream raw text, JSX\n * blocks (substeps, code), or Markdown via their own renderer.\n */\nimport { useEffect, useState, type ReactNode } from 'react';\nimport { Brain, ChevronDown, ChevronRight } from 'lucide-react';\nimport { Button } from '../../../base/buttons';\nimport { Duration } from '../../../primitives';\nimport { Text } from '../../../typography';\nimport { useStrings } from '../../../../lib/strings';\nimport { cn } from '../../../../lib/utils';\n\nimport { AiShimmer } from '../ai-shimmer/ai-shimmer';\nimport { defaultAiReasoningStrings, type AiReasoningProps } from './types';\n\nfunction renderThoughtFor(template: string, seconds: number): ReactNode {\n\tconst durationParts = template.split(/\\{\\{\\s*duration\\s*\\}\\}/);\n\tif (durationParts.length === 1) return template;\n\n\treturn (\n\t\t<>\n\t\t\t{durationParts[0]}\n\t\t\t<Duration value={seconds} maxParts={1} align=\"left\" />\n\t\t\t{durationParts.slice(1).join('{{duration}}')}\n\t\t</>\n\t);\n}\n\nexport function AiReasoning({\n\tchildren,\n\tstreaming = false,\n\tdurationSeconds,\n\texpandWhileStreaming = true,\n\tdefaultExpanded = false,\n\texpanded: expandedProp,\n\tonExpandedChange,\n\tclassName,\n\tstrings: stringsProp,\n}: AiReasoningProps) {\n\tconst strings = useStrings(defaultAiReasoningStrings, stringsProp);\n\tconst [internalExpanded, setInternalExpanded] = useState(defaultExpanded);\n\tconst expanded = expandedProp ?? internalExpanded;\n\tconst setExpanded = (next: boolean) => {\n\t\tif (expandedProp === undefined) setInternalExpanded(next);\n\t\tonExpandedChange?.(next);\n\t};\n\n\tuseEffect(() => {\n\t\tif (streaming && expandWhileStreaming && !expanded) {\n\t\t\tsetExpanded(true);\n\t\t}\n\t\tif (!streaming && expandWhileStreaming && expanded && !defaultExpanded && expandedProp === undefined) {\n\t\t\t// auto-collapse only once when streaming flips off and consumer hasn't pinned state\n\t\t\tsetExpanded(false);\n\t\t}\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t}, [streaming]);\n\n\tconst headerLabel: ReactNode = streaming ? (\n\t\t<AiShimmer className=\"flex-1\">{strings.thinking}</AiShimmer>\n\t) : durationSeconds !== undefined ? (\n\t\t<Text weight=\"medium\" className=\"flex-1\">\n\t\t\t{renderThoughtFor(strings.thoughtFor, durationSeconds)}\n\t\t</Text>\n\t) : (\n\t\t<Text weight=\"medium\" className=\"flex-1\">\n\t\t\t{strings.thoughtDone}\n\t\t</Text>\n\t);\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn('ai-reasoning--component', \n\t\t\t\t'overflow-hidden rounded-radius border border-border/60 bg-muted/20',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t>\n\t\t\t<Button\n\t\t\t\ttype=\"button\"\n\t\t\t\ttone=\"secondary\"\n\t\t\t\tbuttonStyle=\"ghost\"\n\t\t\t\tsize=\"md\"\n\t\t\t\tonClick={() => setExpanded(!expanded)}\n\t\t\t\taria-expanded={expanded}\n\t\t\t\taria-label={expanded ? strings.collapseAria : strings.expandAria}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'ai-reasoning--trigger h-auto w-full justify-start gap-space-md rounded-none px-surface-xs py-row-y text-left',\n\t\t\t\t\t'hover:bg-muted/30',\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t<Brain className=\"size-icon-md text-muted-foreground\" />\n\t\t\t\t{headerLabel}\n\t\t\t\t{expanded ? (\n\t\t\t\t\t<ChevronDown className=\"size-icon-md text-muted-foreground\" />\n\t\t\t\t) : (\n\t\t\t\t\t<ChevronRight className=\"size-icon-md text-muted-foreground\" />\n\t\t\t\t)}\n\t\t\t</Button>\n\n\t\t\t{expanded && (\n\t\t\t\t<div className=\"ai-reasoning--body border-t border-border/60 p-surface-xs\">\n\t\t\t\t\t{typeof children === 'string' ? (\n\t\t\t\t\t\t<Text type=\"secondary\" lineHeight=\"relaxed\" className=\"whitespace-pre-wrap\">\n\t\t\t\t\t\t\t{children}\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<div className=\"whitespace-pre-wrap\">{children}</div>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n\nAiReasoning.displayName = 'AiReasoning';\n","import type { LucideIcon } from 'lucide-react';\nimport type { ReactNode } from 'react';\nimport type { StringsProp } from '../../../../lib/strings';\n\nexport type AiChainStepStatus = 'pending' | 'active' | 'completed' | 'failed';\n\nexport interface AiChainStep {\n\t/** Stable identity for this entry. */\n\tid: string;\n\t/** Surface title. */\n\ttitle: ReactNode;\n\t/** Optional rationale rendered under the title. */\n\tdescription?: ReactNode;\n\t/** Step status — drives the marker style. */\n\tstatus?: AiChainStepStatus;\n\t/** Custom icon override for the step marker. */\n\ticon?: LucideIcon;\n\t/** Free-form children rendered inside the step body (substeps, code, …). */\n\tbody?: ReactNode;\n}\n\nexport interface AiChainOfThoughtStrings {\n\t/** Surface title. */\n\ttitle: string;\n\tstreamingHint: string;\n}\n\nexport const defaultAiChainOfThoughtStrings: AiChainOfThoughtStrings = {\n\ttitle: 'Reasoning',\n\tstreamingHint: 'Working through the steps…',\n};\n\nexport interface AiChainOfThoughtProps {\n\t/** Step list — order is significant. */\n\tsteps: ReadonlyArray<AiChainStep>;\n\t/** Hide the header strip. */\n\thideHeader?: boolean;\n\t/** Show the streaming hint under the header. */\n\tstreaming?: boolean;\n\t/** Merged onto the outermost node. */\n\tclassName?: string;\n\t/** Overrides this surface's own copy. */\n\tstrings?: StringsProp<AiChainOfThoughtStrings>;\n}\n","/**\n * AiChainOfThought — vertical timeline of reasoning steps an agent took (or\n * is taking) to reach a conclusion. Status-aware markers; per-step body slot\n * for nested content (tool calls, code, sub-steps). Pair with `AiReasoning`\n * (free-form trace) when the model emits structured plan steps.\n */\nimport { AlertCircle, Check, Circle, Loader2, type LucideIcon } from 'lucide-react';\nimport { Stack } from '../../../base/structure';\nimport { DisplayLabel, Text } from '../../../typography';\nimport { useStrings } from '../../../../lib/strings';\nimport { cn } from '../../../../lib/utils';\n\nimport { AiShimmer } from '../ai-shimmer/ai-shimmer';\nimport {\n\tdefaultAiChainOfThoughtStrings,\n\ttype AiChainOfThoughtProps,\n\ttype AiChainStepStatus,\n} from './types';\n\nconst STATUS_VISUAL: Record<\n\tAiChainStepStatus,\n\t{ icon: LucideIcon; iconCls: string; ring: string; spin?: boolean }\n> = {\n\tpending: {\n\t\ticon: Circle,\n\t\ticonCls: 'text-muted-foreground/60',\n\t\tring: 'border-border/60 bg-card',\n\t},\n\tactive: {\n\t\ticon: Loader2,\n\t\ticonCls: 'text-primary-accent',\n\t\tring: 'border-primary/40 bg-primary/5',\n\t\tspin: true,\n\t},\n\tcompleted: {\n\t\ticon: Check,\n\t\ticonCls: 'text-success-foreground',\n\t\tring: 'border-success/40 bg-success',\n\t},\n\tfailed: {\n\t\ticon: AlertCircle,\n\t\ticonCls: 'text-destructive-foreground',\n\t\tring: 'border-destructive/40 bg-destructive',\n\t},\n};\n\nexport function AiChainOfThought({\n\tsteps,\n\thideHeader = false,\n\tstreaming = false,\n\tclassName,\n\tstrings: stringsProp,\n}: AiChainOfThoughtProps) {\n\tconst strings = useStrings(defaultAiChainOfThoughtStrings, stringsProp);\n\n\treturn (\n\t\t<Stack\n\t\t\tgap=\"none\"\n\t\t\tclassName={cn('ai-chain-of-thought--component', 'rounded-radius border border-border/60 bg-card', className)}\n\t\t>\n\t\t\t{!hideHeader && (\n\t\t\t\t<div className=\"ai-chain-of-thought--header border-b border-border/60 p-surface\">\n\t\t\t\t<Stack direction=\"horizontal\" gap=\"sm\" wrap={false}>\n\t\t\t\t\t<DisplayLabel>\n\t\t\t\t\t\t{strings.title}\n\t\t\t\t\t</DisplayLabel>\n\t\t\t\t\t{streaming && (\n\t\t\t\t\t\t<AiShimmer className=\"ml-auto !text-xs\">\n\t\t\t\t\t\t\t{strings.streamingHint}\n\t\t\t\t\t\t</AiShimmer>\n\t\t\t\t\t)}\n\t\t\t\t</Stack>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t\t<ol className=\"ai-chain-of-thought--body relative m-0 list-none p-surface font-sans\">\n\t\t\t\t{steps.map((step, idx) => {\n\t\t\t\t\tconst status: AiChainStepStatus = step.status ?? 'pending';\n\t\t\t\t\tconst visual = STATUS_VISUAL[status];\n\t\t\t\t\tconst Icon = step.icon ?? visual.icon;\n\t\t\t\t\tconst isLast = idx === steps.length - 1;\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<li key={step.id} className=\"relative flex gap-space-lg pb-space-lg last:pb-0\">\n\t\t\t\t\t\t\t{!isLast && (\n\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\taria-hidden\n\t\t\t\t\t\t\t\t\tclassName=\"absolute bottom-0 left-[11px] top-[26px] w-px bg-border/60\"\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<span\n\t\t\t\t\t\t\t\taria-hidden\n\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t'relative z-[1] mt-0.5 inline-flex size-6 shrink-0 items-center justify-center rounded-full border',\n\t\t\t\t\t\t\t\t\tvisual.ring,\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<Icon\n\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t'size-icon-sm',\n\t\t\t\t\t\t\t\t\t\tvisual.iconCls,\n\t\t\t\t\t\t\t\t\t\tvisual.spin && 'animate-spin',\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</span>\n\t\t\t\t\t\t\t<div className=\"min-w-0 flex-1\">\n\t\t\t\t\t\t\t\t<Stack gap=\"dense\">\n\t\t\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\t\t\tweight={status === 'active' ? 'semibold' : 'medium'}\n\t\t\t\t\t\t\t\t\tclassName={cn(status === 'pending' && 'text-muted-foreground')}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{step.title}\n\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t{!!step.description && (\n\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{step.description}\n\t\t\t\t\t\t\t\t\t</Text>\n\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\t{!!step.body && (\n\t\t\t\t\t\t\t\t\t<div className=\"mt-space-md\">{step.body}</div>\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</li>\n\t\t\t\t\t);\n\t\t\t\t})}\n\t\t\t</ol>\n\t\t</Stack>\n\t);\n}\n\nAiChainOfThought.displayName = 'AiChainOfThought';\n","import type { LucideIcon } from 'lucide-react';\nimport type { ReactNode } from 'react';\nimport type { StringsProp } from '../../../../lib/strings';\n\nexport type AiTaskStatus = 'queued' | 'running' | 'completed' | 'failed' | 'cancelled' | 'skipped';\n\nexport interface AiTaskItem {\n\t/** Stable identity for this entry. */\n\tid: string;\n\t/** Surface title. */\n\ttitle: ReactNode;\n\t/** Status — drives the marker pill and icon. */\n\tstatus?: AiTaskStatus;\n\t/** Optional sub-task list rendered nested. */\n\tchildren?: ReadonlyArray<AiTaskItem>;\n\t/** Decorative icon override. */\n\ticon?: LucideIcon;\n\t/** Right-aligned slot — duration, byte count, etc. */\n\trightSlot?: ReactNode;\n\t/** Free-form body rendered under the title (logs, code, …). */\n\tbody?: ReactNode;\n}\n\nexport interface AiTaskStrings {\n\tstatusLabels: Record<AiTaskStatus, string>;\n\tcollapseSubtasks: string;\n\texpandSubtasks: string;\n}\n\nexport const defaultAiTaskStrings: AiTaskStrings = {\n\tstatusLabels: {\n\t\tqueued: 'Queued',\n\t\trunning: 'Running',\n\t\tcompleted: 'Done',\n\t\tfailed: 'Failed',\n\t\tcancelled: 'Cancelled',\n\t\tskipped: 'Skipped',\n\t},\n\tcollapseSubtasks: 'Collapse subtasks',\n\texpandSubtasks: 'Expand subtasks',\n};\n\nexport interface AiTaskProps {\n\t/** Top-level task. */\n\ttask: AiTaskItem;\n\t/** Compact = single row with collapsible children; expanded = always show. */\n\tdensity?: 'compact' | 'expanded';\n\t/** Indentation width per nesting level (px). */\n\tindent?: number;\n\t/** Merged onto the outermost node. */\n\tclassName?: string;\n\t/** Overrides this surface's own copy. */\n\tstrings?: StringsProp<AiTaskStrings>;\n}\n","/**\n * AiTask — single task (with optional sub-tasks) used by agent surfaces to\n * surface long-running plans: scaffolding, package installs, multi-file\n * edits. Each row carries a status marker, a title, and optional body /\n * right-slot. Children render nested under the parent and are auto-\n * collapsed by default in the `compact` density.\n */\nimport { useState } from 'react';\nimport {\n\tAlertCircle,\n\tCheck,\n\tChevronDown,\n\tChevronRight,\n\tCircle,\n\tLoader2,\n\tMinusCircle,\n\tXCircle,\n\ttype LucideIcon,\n} from 'lucide-react';\nimport { Badge } from '../../../base/badge';\nimport { Button } from '../../../base/buttons';\nimport { Text } from '../../../typography';\nimport { useStrings } from '../../../../lib/strings';\nimport { cn } from '../../../../lib/utils';\n\nimport {\n\tdefaultAiTaskStrings,\n\ttype AiTaskItem,\n\ttype AiTaskProps,\n\ttype AiTaskStatus,\n} from './types';\n\nconst STATUS_ICON: Record<AiTaskStatus, { icon: LucideIcon; cls: string; spin?: boolean }> = {\n\tqueued: { icon: Circle, cls: 'text-muted-foreground/60' },\n\trunning: { icon: Loader2, cls: 'text-primary-accent', spin: true },\n\tcompleted: { icon: Check, cls: 'text-success' },\n\tfailed: { icon: AlertCircle, cls: 'text-destructive' },\n\tcancelled: { icon: XCircle, cls: 'text-muted-foreground' },\n\tskipped: { icon: MinusCircle, cls: 'text-muted-foreground' },\n};\n\nconst STATUS_VARIANT: Record<\n\tAiTaskStatus,\n\t'secondary' | 'primary' | 'success' | 'destructive' | 'warning'\n> = {\n\tqueued: 'secondary',\n\trunning: 'primary',\n\tcompleted: 'success',\n\tfailed: 'destructive',\n\tcancelled: 'secondary',\n\tskipped: 'secondary',\n};\n\nexport function AiTask({\n\ttask,\n\tdensity = 'compact',\n\tindent = 18,\n\tclassName,\n\tstrings: stringsProp,\n}: AiTaskProps) {\n\tconst strings = useStrings(defaultAiTaskStrings, stringsProp);\n\treturn (\n\t\t<div className={cn('ai-task--component', 'rounded-radius border border-border/60 bg-card', className)}>\n\t\t\t<TaskRow\n\t\t\t\titem={task}\n\t\t\t\tdepth={0}\n\t\t\t\tdensity={density}\n\t\t\t\tindent={indent}\n\t\t\t\tstrings={strings}\n\t\t\t/>\n\t\t</div>\n\t);\n}\n\nAiTask.displayName = 'AiTask';\n\nfunction TaskRow({\n\titem,\n\tdepth,\n\tdensity,\n\tindent,\n\tstrings,\n}: {\n\titem: AiTaskItem;\n\tdepth: number;\n\tdensity: 'compact' | 'expanded';\n\tindent: number;\n\tstrings: ReturnType<typeof useStrings<typeof defaultAiTaskStrings>>;\n}) {\n\tconst status: AiTaskStatus = item.status ?? 'queued';\n\tconst visual = STATUS_ICON[status];\n\tconst Icon = item.icon ?? visual.icon;\n\tconst hasChildren = !!item.children?.length;\n\tconst [open, setOpen] = useState(density === 'expanded' || depth === 0 ? true : false);\n\n\treturn (\n\t\t<>\n\t\t\t<div\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'flex items-start gap-space-md px-row-x py-row-y',\n\t\t\t\t\tdepth > 0 && 'border-t border-border/60',\n\t\t\t\t)}\n\t\t\t\tstyle={{ paddingInlineStart: `calc(var(--row-x) * var(--space-scale) + ${depth * indent}px)` }}\n\t\t\t>\n\t\t\t\t{hasChildren ? (\n\t\t\t\t\t<Button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\ttone=\"secondary\"\n\t\t\t\t\t\tbuttonStyle=\"ghost\"\n\t\t\t\t\t\tsize=\"sm\" iconOnly\n\t\t\t\t\t\tonClick={() => setOpen((v) => !v)}\n\t\t\t\t\t\taria-expanded={open}\n\t\t\t\t\t\taria-label={open ? strings.collapseSubtasks : strings.expandSubtasks}\n\t\t\t\t\t\tclassName=\"-ml-1 mt-0.5 size-icon rounded-inner p-0 text-muted-foreground hover:text-foreground\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{open ? (\n\t\t\t\t\t\t\t<ChevronDown className=\"size-icon-md\" />\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<ChevronRight className=\"size-icon-md\" />\n\t\t\t\t\t\t)}\n\t\t\t\t\t</Button>\n\t\t\t\t) : (\n\t\t\t\t\t<span aria-hidden className=\"mt-0.5 size-icon\" />\n\t\t\t\t)}\n\t\t\t\t<Icon\n\t\t\t\t\tclassName={cn('mt-[3px] size-icon-md shrink-0', visual.cls, visual.spin && 'animate-spin')}\n\t\t\t\t/>\n\t\t\t\t<div className=\"min-w-0 flex-1\">\n\t\t\t\t\t<div className=\"flex items-center gap-space-md\">\n\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\tweight={status === 'running' ? 'semibold' : 'medium'}\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t'flex-1 truncate',\n\t\t\t\t\t\t\t\tstatus === 'queued' && 'text-muted-foreground',\n\t\t\t\t\t\t\t\tstatus === 'cancelled' && 'line-through text-muted-foreground',\n\t\t\t\t\t\t\t\tstatus === 'skipped' && 'text-muted-foreground/70',\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{item.title}\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t<Badge tone={STATUS_VARIANT[status]}>\n\t\t\t\t\t\t\t{strings.statusLabels[status]}\n\t\t\t\t\t\t</Badge>\n\t\t\t\t\t\t{!!item.rightSlot && (\n\t\t\t\t\t\t\t<span className=\"tabular-nums text-muted-foreground\">\n\t\t\t\t\t\t\t\t{item.rightSlot}\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\t\t\t\t\t{!!item.body && <div className=\"mt-space-md\">{item.body}</div>}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t{hasChildren && open && (\n\t\t\t\t<div>\n\t\t\t\t\t{item.children!.map((child) => (\n\t\t\t\t\t\t<TaskRow\n\t\t\t\t\t\t\tkey={child.id}\n\t\t\t\t\t\t\titem={child}\n\t\t\t\t\t\t\tdepth={depth + 1}\n\t\t\t\t\t\t\tdensity={density}\n\t\t\t\t\t\t\tindent={indent}\n\t\t\t\t\t\t\tstrings={strings}\n\t\t\t\t\t\t/>\n\t\t\t\t\t))}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</>\n\t);\n}\n","import type { LucideIcon } from 'lucide-react';\nimport type { ReactNode } from 'react';\nimport type { StringsProp } from '../../../../lib/strings';\n\nexport interface AiArtifactStrings {\n\topenAria: string;\n\tcopy: string;\n\tcopied: string;\n\tcopyAria: string;\n /** Failure feedback, additive for existing string dictionaries. */\n copyError?: string;\n\tdownloadAria: string;\n\texpandAria: string;\n}\n\nexport const defaultAiArtifactStrings: AiArtifactStrings = {\n\topenAria: 'Open artifact',\n\tcopy: 'Copy',\n\tcopied: 'Copied',\n copyError: 'Could not copy. Please try again.',\n\tcopyAria: 'Copy artifact',\n\tdownloadAria: 'Download artifact',\n\texpandAria: 'Expand artifact',\n};\n\nexport interface AiArtifactAction {\n\t/** Stable identity for this entry. */\n\tid: string;\n\t/** Display label. */\n\tlabel: string;\n\t/** Leading glyph. */\n\ticon?: LucideIcon;\n\t/** Fired when an entry is activated. */\n\tonSelect?: () => void;\n}\n\nexport interface AiArtifactProps {\n\t/** Title — typically the artifact name (e.g. \"App.tsx\", \"design-spec.md\"). */\n\ttitle: ReactNode;\n\t/** Subtitle — typically the kind / language (\"React component\", \"Markdown\"). */\n\tsubtitle?: ReactNode;\n\t/** Icon override for the leading badge. */\n\ticon?: LucideIcon;\n\t/** Plain text content used by the default copy action. */\n\tcopyText?: string;\n\t/** Body content — preview, code, sandbox iframe, etc. */\n\tchildren?: ReactNode;\n\t/** Hide the body and render the artifact as a clickable preview-only chip. */\n\tcollapsed?: boolean;\n\t/** Click handler for the whole header (e.g. open in side panel). */\n\tonOpen?: () => void;\n\t/** Custom actions in the header. */\n\tactions?: ReadonlyArray<AiArtifactAction>;\n\t/** Provide a download handler — adds a download button. */\n\tonDownload?: () => void;\n\t/** Merged onto the outermost node. */\n\t/** Called when the clipboard is unavailable or the write fails. */\n onCopyError?: (error: unknown) => void;\n className?: string;\n\t/** Overrides this surface's own copy. */\n\tstrings?: StringsProp<AiArtifactStrings>;\n}\n","import { useCopyFeedback } from '../use-copy-feedback';\n/**\n * AiArtifact — generic shell for a model-produced asset (code file, document,\n * design spec, sandbox preview, …). Header carries a leading icon, title /\n * subtitle, and an action toolbar (open, copy, download, custom actions).\n * Body slot accepts the preview itself: `<AiCodeBlock>`, an `<iframe>`, an\n * `<AiPackageInfo>`, etc.\n */\n\nimport {\n\tCheck,\n\tCopy,\n\tDownload,\n\tExternalLink,\n\tFileText,\n\ttype LucideIcon,\n\t} from 'lucide-react';\nimport { Button } from '../../../base/buttons';\nimport { IconBadge,\n} from '../../../base/display';\nimport { Text } from '../../../typography';\nimport { useStrings } from '../../../../lib/strings';\nimport { Stack } from '../../../base/structure';\nimport { cn } from '../../../../lib/utils';\n\nimport { defaultAiArtifactStrings, type AiArtifactProps } from './types';\n\nexport function AiArtifact({\n\ttitle,\n\tsubtitle,\n\ticon,\n\tcopyText,\n\tchildren,\n\tcollapsed = false,\n\tonOpen,\n\tactions,\n\tonDownload,\n\tonCopyError,\n\tclassName,\n\tstrings: stringsProp,\n}: AiArtifactProps) {\n\tconst strings = useStrings(defaultAiArtifactStrings, stringsProp);\n\tconst Icon: LucideIcon = icon ?? FileText;\n\tconst { copied, failed, copy } = useCopyFeedback(onCopyError, copyText);\n\n\tconst handleCopy = async () => {\n\t\tif (copyText) await copy(copyText);\n\t};\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn('ai-artifact--component', \n\t\t\t\t'overflow-hidden rounded-radius border border-border/60 bg-card',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t>\n\t\t\t<div className=\"ai-artifact--header @container/ai-artifact-header border-b border-border/60 bg-muted/20 p-surface\">\n\t\t\t<Stack direction=\"horizontal\" align=\"center\" gap=\"lg\">\n\t\t\t\t<div className=\"ai-artifact--identity flex min-w-0 basis-full items-center gap-space-lg @sm/ai-artifact-header:flex-1 @sm/ai-artifact-header:basis-0\">\n\t\t\t\t<IconBadge icon={Icon} tone=\"neutral\" size=\"md\" shape=\"square\" />\n\t\t\t\t<div className=\"min-w-0 flex-1\">\n\t\t\t\t\t<Text weight=\"semibold\" className=\"break-words\">\n\t\t\t\t\t\t{title}\n\t\t\t\t\t</Text>\n\t\t\t\t\t{!!subtitle && (\n\t\t\t\t\t\t<Text size=\"xs\" type=\"secondary\" className=\"break-words\">\n\t\t\t\t\t\t\t{subtitle}\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<div className=\"ai-artifact--actions flex flex-wrap items-center gap-space-xs\">\n\t\t\t\t\t{actions?.map((action) => {\n\t\t\t\t\t\tconst ActionIcon = action.icon;\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\tkey={action.id}\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\ttone=\"secondary\"\n\t\t\t\t\t\t\t\tbuttonStyle=\"ghost\"\n\t\t\t\t\t\t\t\tonClick={action.onSelect}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{!!ActionIcon && <ActionIcon className=\"size-icon-md\" />}\n\t\t\t\t\t\t\t\t{action.label}\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t);\n\t\t\t\t\t})}\n\t\t\t\t\t{!!copyText && (\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\ttone=\"secondary\"\n\t\t\t\t\t\t\tbuttonStyle=\"ghost\"\n\t\t\t\t\t\t\tsize=\"sm\" iconOnly\n\t\t\t\t\t\t\taria-label={strings.copyAria}\n\t\t\t\t\t\t\tonClick={handleCopy}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{copied ? (\n\t\t\t\t\t\t\t\t<Check className=\"size-icon-md text-success\" />\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<Copy className=\"size-icon-md\" />\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t)}\n\t\t\t\t\t{!!onDownload && (\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\ttone=\"secondary\"\n\t\t\t\t\t\t\tbuttonStyle=\"ghost\"\n\t\t\t\t\t\t\tsize=\"sm\" iconOnly\n\t\t\t\t\t\t\taria-label={strings.downloadAria}\n\t\t\t\t\t\t\tonClick={onDownload}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Download className=\"size-icon-md\" />\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t)}\n\t\t\t\t\t{!!onOpen && (\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\ttone=\"secondary\"\n\t\t\t\t\t\t\tbuttonStyle=\"ghost\"\n\t\t\t\t\t\t\tsize=\"sm\" iconOnly\n\t\t\t\t\t\t\taria-label={strings.openAria}\n\t\t\t\t\t\t\tonClick={onOpen}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<ExternalLink className=\"size-icon-md\" />\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t</Stack>\n\t\t\t</div>\n\t\t\t{!collapsed && !!children && <div className=\"bg-card\">{children}</div>}\n\n\t\t\t{failed && <div className=\"px-control py-row-y\"><Text role=\"alert\" size=\"xs\" type=\"error\">{strings.copyError ?? defaultAiArtifactStrings.copyError}</Text></div>}\n\t\t</div>\n\t);\n}\n\nAiArtifact.displayName = 'AiArtifact';\n"],"mappings":"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"}
|