themelia-react-ui 2.0.0 → 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 +351 -0
- package/README.md +26 -13
- package/dist/{accordion-CQXVcd7Q.js → accordion-B6a3vVgA.js} +84 -82
- 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-CCIXb2A1.js → affordance-geometry.generated-B5iu-Mkr.js} +3 -2
- package/dist/affordance-geometry.generated-B5iu-Mkr.js.map +1 -0
- package/dist/{ai-artifact-2PQ2fItc.js → ai-artifact-BMJdv-6q.js} +379 -376
- package/dist/ai-artifact-BMJdv-6q.js.map +1 -0
- package/dist/{app-shell-BE_j8-AT.js → app-shell-ZK5RWdo6.js} +4 -4
- package/dist/{app-shell-BE_j8-AT.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-M3vGMgDR.js → auth-CYxKfo69.js} +237 -235
- package/dist/auth-CYxKfo69.js.map +1 -0
- package/dist/{avatar-djdaaQ_s.js → avatar-BBnEJIx8.js} +66 -65
- 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 +13 -13
- package/dist/base/carousel.js.map +1 -1
- package/dist/base/cascader.js +103 -115
- 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 +17 -17
- package/dist/base/inline-edit.js.map +1 -1
- package/dist/base/item.js +1 -1
- package/dist/base/media-gallery.js +1 -1
- package/dist/base/metadata-list.js +3 -0
- package/dist/base/navigation.js +7 -7
- package/dist/base/popover-menu.js +1 -1
- package/dist/base/popover.js +1 -1
- package/dist/base/qr-code.js +1 -1
- package/dist/base/repeaters.js +171 -170
- package/dist/base/repeaters.js.map +1 -1
- package/dist/base/sheet.js +1 -1
- package/dist/base/sidebar.js +1 -1
- package/dist/base/signature-pad.js +147 -137
- package/dist/base/signature-pad.js.map +1 -1
- package/dist/base/skeleton.js +1 -1
- package/dist/base/spinner.js +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 +2 -2
- 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 +173 -171
- package/dist/blocks/admin.js.map +1 -1
- package/dist/blocks/ai.js +266 -263
- package/dist/blocks/ai.js.map +1 -1
- package/dist/blocks/analytics/usage-card.js +1 -1
- package/dist/blocks/analytics.js +440 -438
- 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 +1945 -1266
- 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 +25 -25
- 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-R9CCoH7A.js → button-QYwiyhD2.js} +15 -14
- package/dist/button-QYwiyhD2.js.map +1 -0
- package/dist/{button-BS3KDg00.js → buttons-SbIcm1HJ.js} +200 -213
- package/dist/buttons-SbIcm1HJ.js.map +1 -0
- package/dist/{cards-QoJ4syG9.js → cards-CiiHpKYd.js} +8 -8
- package/dist/cards-CiiHpKYd.js.map +1 -0
- package/dist/{chart-DwYRKKc-.js → chart-QfrARkXl.js} +5 -5
- package/dist/{chart-DwYRKKc-.js.map → chart-QfrARkXl.js.map} +1 -1
- 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-oMUGM4tr.js → collapsible-D8AEGU1-.js} +4 -4
- package/dist/{collapsible-oMUGM4tr.js.map → collapsible-D8AEGU1-.js.map} +1 -1
- package/dist/{collection-content-Ys-OZOkY.js → collection-content-uK16Grv0.js} +3 -3
- package/dist/{collection-content-Ys-OZOkY.js.map → collection-content-uK16Grv0.js.map} +1 -1
- package/dist/{combobox-6dvVny2q.js → combobox-2Ic8N9bL.js} +74 -68
- package/dist/combobox-2Ic8N9bL.js.map +1 -0
- package/dist/{combobox-CB7039j7.js → combobox-DLl0bfiq.js} +307 -305
- package/dist/combobox-DLl0bfiq.js.map +1 -0
- package/dist/{command-kPMPjIxJ.js → command-kNR20o7x.js} +7 -7
- package/dist/{command-kPMPjIxJ.js.map → command-kNR20o7x.js.map} +1 -1
- package/dist/{comments-You0Bzbr.js → comments-BpDuCUUu.js} +341 -339
- package/dist/comments-BpDuCUUu.js.map +1 -0
- package/dist/components/base/action-menu/action-menu.d.ts +21 -4
- package/dist/components/base/action-menu/action-menu.recipes.d.ts +21 -0
- package/dist/components/base/action-menu/index.d.ts +1 -0
- package/dist/components/base/badge/badge.recipes.d.ts +4 -4
- package/dist/components/base/batch-action-bar/batch-action-bar.d.ts +50 -0
- package/dist/components/base/batch-action-bar/batch-action-bar.strings.d.ts +20 -0
- package/dist/components/base/batch-action-bar/index.d.ts +8 -0
- package/dist/components/base/buttons/button-group.recipes.d.ts +1 -1
- package/dist/components/base/buttons/button.recipes.d.ts +2 -2
- package/dist/components/base/choice-inputs/checkbox.d.ts +2 -2
- package/dist/components/base/choice-inputs/choice-types.d.ts +18 -6
- package/dist/components/base/display/alert-dialog.d.ts +6 -5
- package/dist/components/base/display/dialog.d.ts +4 -8
- package/dist/components/base/display/icon-badge/icon-badge.d.ts +1 -1
- package/dist/components/base/forms/form-sizing.d.ts +15 -12
- package/dist/components/base/metadata-list/index.d.ts +12 -0
- package/dist/components/{blocks/data-display/metadata → base/metadata-list}/metadata-list.d.ts +28 -25
- package/dist/components/{blocks/data-display/metadata → base/metadata-list}/metadata-value.d.ts +2 -2
- package/dist/components/base/navigation/index.d.ts +1 -1
- package/dist/components/base/navigation/page-header/index.d.ts +1 -0
- package/dist/components/base/navigation/page-header/page-header-commands.d.ts +73 -0
- package/dist/components/base/navigation/page-header/page-header.d.ts +26 -3
- package/dist/components/base/sheet/sheet.d.ts +4 -8
- package/dist/components/base/signature-pad/signature-pad.types.d.ts +5 -1
- package/dist/components/base/signature-pad/signature-pad.utils.d.ts +11 -3
- package/dist/components/base/text-inputs/field-clear-button.d.ts +6 -0
- package/dist/components/base/upload/upload.recipes.d.ts +25 -3
- package/dist/components/base/value-inputs/index.d.ts +5 -5
- package/dist/components/base/value-inputs/tags-input.d.ts +36 -12
- package/dist/components/blocks/commerce/address-card/address-card.d.ts +1 -1
- package/dist/components/blocks/commerce/address-card/types.d.ts +2 -1
- package/dist/components/blocks/commerce/cart-summary/cart-summary.d.ts +3 -1
- package/dist/components/blocks/commerce/cart-summary/index.d.ts +2 -2
- package/dist/components/blocks/commerce/cart-summary/types.d.ts +6 -1
- package/dist/components/blocks/commerce/discount-stack/discount-stack.d.ts +3 -1
- package/dist/components/blocks/commerce/discount-stack/index.d.ts +2 -2
- package/dist/components/blocks/commerce/discount-stack/types.d.ts +16 -4
- package/dist/components/blocks/commerce/fulfillment-group/fulfillment-group.d.ts +5 -0
- package/dist/components/blocks/commerce/fulfillment-group/index.d.ts +2 -0
- package/dist/components/blocks/commerce/fulfillment-group/types.d.ts +43 -0
- package/dist/components/blocks/commerce/index.d.ts +13 -5
- package/dist/components/blocks/commerce/invoice-header/invoice-header.d.ts +1 -1
- package/dist/components/blocks/commerce/invoice-header/types.d.ts +4 -2
- package/dist/components/blocks/commerce/invoice-mini/invoice-mini.d.ts +1 -1
- package/dist/components/blocks/commerce/invoice-mini/types.d.ts +2 -1
- package/dist/components/blocks/commerce/order-customer/index.d.ts +2 -0
- package/dist/components/blocks/commerce/order-customer/order-customer.d.ts +5 -0
- package/dist/components/blocks/commerce/order-customer/types.d.ts +48 -0
- package/dist/components/blocks/commerce/order-header/index.d.ts +2 -0
- package/dist/components/blocks/commerce/order-header/order-header.d.ts +5 -0
- package/dist/components/blocks/commerce/order-header/types.d.ts +37 -0
- package/dist/components/blocks/commerce/order-line-item/index.d.ts +2 -0
- package/dist/components/blocks/commerce/order-line-item/order-line-item.d.ts +5 -0
- package/dist/components/blocks/commerce/order-line-item/types.d.ts +46 -0
- package/dist/components/blocks/commerce/order-summary/index.d.ts +2 -0
- package/dist/components/blocks/commerce/order-summary/order-summary.d.ts +5 -0
- package/dist/components/blocks/commerce/order-summary/types.d.ts +42 -0
- package/dist/components/blocks/commerce/order-transactions/index.d.ts +2 -0
- package/dist/components/blocks/commerce/order-transactions/order-transactions.d.ts +5 -0
- package/dist/components/blocks/commerce/order-transactions/types.d.ts +46 -0
- package/dist/components/blocks/commerce/payment-method/index.d.ts +2 -2
- package/dist/components/blocks/commerce/payment-method/payment-method.d.ts +9 -1
- package/dist/components/blocks/commerce/payment-method/types.d.ts +12 -1
- package/dist/components/blocks/commerce/refund-status/index.d.ts +2 -2
- package/dist/components/blocks/commerce/refund-status/refund-status.d.ts +3 -1
- package/dist/components/blocks/commerce/refund-status/types.d.ts +6 -3
- package/dist/components/blocks/commerce/shared/address-lines.d.ts +21 -0
- package/dist/components/blocks/commerce/shared/line-thumbnail.d.ts +9 -0
- package/dist/components/blocks/commerce/shared/order-status.d.ts +51 -0
- package/dist/components/blocks/commerce/shipment-tracking/shipment-tracking.d.ts +1 -1
- package/dist/components/blocks/commerce/shipment-tracking/types.d.ts +27 -6
- package/dist/components/blocks/commerce/summary-panel/amount-row.d.ts +2 -0
- package/dist/components/blocks/commerce/summary-panel/index.d.ts +3 -0
- package/dist/components/blocks/commerce/summary-panel/summary-panel.d.ts +2 -0
- package/dist/components/blocks/commerce/summary-panel/types.d.ts +26 -0
- package/dist/components/blocks/commerce/tax-breakdown/tax-breakdown.d.ts +1 -1
- package/dist/components/blocks/commerce/tax-breakdown/types.d.ts +2 -1
- package/dist/components/blocks/data-display/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/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/index.d.ts +1 -1
- package/dist/components/features/overlays/overlay-tone-icon.d.ts +3 -3
- package/dist/components/features/overlays/overlays.types.d.ts +20 -0
- package/dist/components/features/products/components/product-contract-overview.d.ts +5 -0
- package/dist/components/features/products/components/product-details-card.d.ts +5 -0
- package/dist/components/features/products/components/product-operations-card.d.ts +5 -0
- package/dist/components/features/products/components/product-option-action-menu.d.ts +5 -0
- package/dist/components/features/products/components/product-options-summary.d.ts +5 -0
- package/dist/components/features/products/components/product-policies-card.d.ts +5 -0
- package/dist/components/features/products/components/product-quote-preview-card.d.ts +5 -0
- package/dist/components/features/products/components/product-readiness-card.d.ts +5 -0
- package/dist/components/features/products/components/product-structure-card.d.ts +5 -0
- package/dist/components/features/products/components/product-variant-action-menu.d.ts +23 -1
- package/dist/components/features/products/products.types.d.ts +9 -2
- package/dist/components/features/resource/index.d.ts +1 -1
- package/dist/components/features/resource/resource.d.ts +1 -1
- package/dist/components/features/resource/resource.types.d.ts +34 -6
- package/dist/components/features/rich-text-editor/index.d.ts +2 -1
- package/dist/components/features/rich-text-editor/partials/image-nodes.d.ts +13 -0
- package/dist/components/features/rich-text-editor/partials/image-uploads.d.ts +66 -0
- package/dist/components/features/rich-text-editor/partials/inline-reference-node.d.ts +19 -0
- package/dist/components/features/rich-text-editor/rich-text-editor.recipes.d.ts +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/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 +33 -36
- package/dist/components/layout/page/partials/page-actions.d.ts +1 -0
- package/dist/components/layout/page/partials/page-header.d.ts +1 -1
- package/dist/components/layout/settings/settings.d.ts +16 -2
- package/dist/components/layout/workspace/workspace.types.d.ts +21 -4
- package/dist/components/typography/rich-text/index.d.ts +1 -1
- package/dist/components/typography/rich-text/rich-text-tree.d.ts +19 -0
- package/dist/components/typography/rich-text/rich-text.d.ts +16 -0
- package/dist/components/typography/text-link.d.ts +4 -3
- package/dist/components/ui/checkbox.d.ts +4 -3
- package/dist/components/ui/overlay.recipes.d.ts +0 -9
- package/dist/components/ui/switch.d.ts +2 -2
- package/dist/{containers-D_L4mTVb.js → containers-DmWiJa2I.js} +36 -35
- package/dist/containers-DmWiJa2I.js.map +1 -0
- package/dist/{copyable-DDjTeW_j.js → copyable-B3Gwgdqc.js} +6 -6
- package/dist/{copyable-DDjTeW_j.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-uf3z37Nm.js → date-BgK3bTdo.js} +5 -5
- package/dist/{date-uf3z37Nm.js.map → date-BgK3bTdo.js.map} +1 -1
- package/dist/date-picker-CF-DtUpF.js +1529 -0
- package/dist/date-picker-CF-DtUpF.js.map +1 -0
- package/dist/{date-pickers-CnFCb0n2.js → date-pickers-BmzxJl5l.js} +19 -19
- package/dist/{date-pickers-CnFCb0n2.js.map → date-pickers-BmzxJl5l.js.map} +1 -1
- package/dist/{display-DrdvPwF0.js → display-DsQTVzMz.js} +88 -87
- package/dist/display-DsQTVzMz.js.map +1 -0
- package/dist/{dropdown-menu-CURh59jb.js → dropdown-menu-E2qmdC7o.js} +7 -7
- package/dist/{dropdown-menu-CURh59jb.js.map → dropdown-menu-E2qmdC7o.js.map} +1 -1
- package/dist/features/activities.js +414 -501
- package/dist/features/activities.js.map +1 -1
- package/dist/features/ai-chat.js +170 -169
- 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 +73 -71
- package/dist/features/email-composer.js.map +1 -1
- package/dist/features/event-calendar.js +278 -275
- 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 +918 -825
- 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 +1115 -1122
- package/dist/features/products.js.map +1 -1
- package/dist/features/questionnaire.js +202 -194
- package/dist/features/questionnaire.js.map +1 -1
- package/dist/features/resource-assignment.js +25 -25
- 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 +33 -33
- package/dist/features/schema-form.js.map +1 -1
- package/dist/features/suggestions.js +3 -3
- package/dist/features/sync.js +3 -3
- package/dist/features/table.js +1 -1
- package/dist/features/theme-tweaker.js +397 -396
- package/dist/features/theme-tweaker.js.map +1 -1
- package/dist/{feedback-C7nR0UtT.js → feedback-qNuMBtRH.js} +84 -83
- package/dist/feedback-qNuMBtRH.js.map +1 -0
- package/dist/{field-affordance-recipes-CkOCdE2y.js → field-affordance-recipes-qQeIf4lG.js} +8 -6
- 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-Da-gNPsE.js → filters-BkHH53uv.js} +565 -563
- 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-VZRULhUK.js → form-field-DUt4UxSV.js} +4 -4
- package/dist/{form-field-VZRULhUK.js.map → form-field-DUt4UxSV.js.map} +1 -1
- package/dist/{form-sizing-uWP4lzVh.js → form-sizing-By94KzXE.js} +19 -15
- package/dist/form-sizing-By94KzXE.js.map +1 -0
- package/dist/{forms-DDeEnXSY.js → forms-Bzha-Y3B.js} +22 -22
- package/dist/{forms-DDeEnXSY.js.map → forms-Bzha-Y3B.js.map} +1 -1
- package/dist/{forms-numeric-D3CO60IF.js → forms-numeric-C0bvjRPZ.js} +265 -264
- package/dist/forms-numeric-C0bvjRPZ.js.map +1 -0
- package/dist/{header-2ycNqGOR.js → header-BOefOKd1.js} +47 -51
- package/dist/header-BOefOKd1.js.map +1 -0
- package/dist/{hooks-DQ5SPwZw.js → hooks-9k_TtmKh.js} +2 -2
- package/dist/{hooks-DQ5SPwZw.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-BoLm9Hks.js → input-Ddi_LSYv.js} +3 -3
- package/dist/{input-BoLm9Hks.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-xzh8Df65.js → item-DEmDiTlD.js} +98 -97
- 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 +1 -0
- package/dist/lib/field-affordance-recipes.d.ts +6 -1
- package/dist/lib/field-state-recipes.d.ts +9 -8
- package/dist/lib/focus-recipes.d.ts +24 -0
- package/dist/lib/interaction-recipes.d.ts +35 -0
- package/dist/lib/layer-recipes.d.ts +19 -0
- package/dist/lib/motion-recipes.d.ts +1 -0
- package/dist/lib/overlay-anatomy-recipes.d.ts +1 -0
- package/dist/lib/safe-image-src.d.ts +10 -0
- package/dist/lib/sanitize-html.d.ts +15 -3
- package/dist/lib/surface-recipes.d.ts +47 -7
- package/dist/lib/token-merge.generated.d.ts +9 -6
- package/dist/lib/tone-recipes.d.ts +79 -0
- package/dist/lib/ui-provider/hooks.d.ts +2 -1
- package/dist/lib/ui-provider/index.d.ts +2 -2
- package/dist/lib/ui-provider/types.d.ts +9 -0
- 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-YfFmbXNP.js → message-CdHgIWKf.js} +5 -5
- package/dist/{message-YfFmbXNP.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-DlU-4QYO.js → navigation-row-recipes-BVowojQw.js} +2 -2
- package/dist/{navigation-row-recipes-DlU-4QYO.js.map → navigation-row-recipes-BVowojQw.js.map} +1 -1
- package/dist/{number-CKRBYmZK.js → number-DMhe-Vsk.js} +5 -5
- package/dist/{number-CKRBYmZK.js.map → number-DMhe-Vsk.js.map} +1 -1
- 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-B5dTH9gE.js +224 -0
- 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-Cm0jqa3I.js → pagination-3bPA_a6K.js} +15 -15
- package/dist/{pagination-Cm0jqa3I.js.map → pagination-3bPA_a6K.js.map} +1 -1
- package/dist/{popover-Dcv_9jxr.js → popover-Di55PyAI.js} +8 -8
- package/dist/popover-Di55PyAI.js.map +1 -0
- package/dist/{popover-menu-DnRFKnHP.js → popover-menu-B71Tn2Qz.js} +6 -6
- package/dist/{popover-menu-DnRFKnHP.js.map → popover-menu-B71Tn2Qz.js.map} +1 -1
- package/dist/{popover.recipes-wmbvL8Ah.js → popover.recipes-Bdyhj2db.js} +2 -2
- package/dist/{popover.recipes-wmbvL8Ah.js.map → popover.recipes-Bdyhj2db.js.map} +1 -1
- package/dist/{primitives-BHrwQXFC.js → primitives-B-CkiEMU.js} +5 -5
- package/dist/{primitives-BHrwQXFC.js.map → primitives-B-CkiEMU.js.map} +1 -1
- package/dist/primitives.js +4 -4
- package/dist/{progress-Br9WTFya.js → progress-rnS8-uAW.js} +9 -9
- package/dist/{progress-Br9WTFya.js.map → progress-rnS8-uAW.js.map} +1 -1
- package/dist/{receipt-CV89q1fs.js → receipt-D0oswZ0p.js} +6 -6
- package/dist/{receipt-CV89q1fs.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-Do5GWDYi.js → separator-C8DlRGwF.js} +3 -3
- package/dist/{separator-Do5GWDYi.js.map → separator-C8DlRGwF.js.map} +1 -1
- package/dist/{separator-BMEvwnSX.js → separator-CYHnjsAb.js} +2 -2
- package/dist/{separator-BMEvwnSX.js.map → separator-CYHnjsAb.js.map} +1 -1
- package/dist/services/actions/action-adapters.d.ts +18 -0
- package/dist/services/actions/index.d.ts +1 -1
- package/dist/services/actions.js +16 -4
- package/dist/services/actions.js.map +1 -1
- package/dist/settings-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-Crc9M9JV.js → sidebar-C7WWR29L.js} +180 -179
- package/dist/sidebar-C7WWR29L.js.map +1 -0
- package/dist/{sidebar-Cb8WzOvE.js → sidebar-d7Dg80ln.js} +16 -16
- package/dist/sidebar-d7Dg80ln.js.map +1 -0
- package/dist/{skeleton-DVMXr15h.js → skeleton-Cz890JZF.js} +9 -9
- package/dist/{skeleton-DVMXr15h.js.map → skeleton-Cz890JZF.js.map} +1 -1
- package/dist/smart-card-lFKxn5Hu.js +595 -0
- package/dist/smart-card-lFKxn5Hu.js.map +1 -0
- package/dist/{spinner-CmTAbEp0.js → spinner-fa3h1Aif.js} +7 -7
- package/dist/{spinner-CmTAbEp0.js.map → spinner-fa3h1Aif.js.map} +1 -1
- package/dist/{structure-hzCW-XsV.js → structure-DC2dygdA.js} +2 -2
- package/dist/{structure-hzCW-XsV.js.map → structure-DC2dygdA.js.map} +1 -1
- package/dist/style.css +1 -1
- package/dist/surface-recipes-BKRVW8Os.js +43 -0
- package/dist/surface-recipes-BKRVW8Os.js.map +1 -0
- package/dist/{table-D6zKeYQX.js → table-CIKyLUsy.js} +59 -58
- package/dist/table-CIKyLUsy.js.map +1 -0
- package/dist/table-CrcLN9Io.js +1458 -0
- package/dist/table-CrcLN9Io.js.map +1 -0
- package/dist/{tabs-Dk8E_knt.js → tabs-DwBJfjxX.js} +58 -57
- package/dist/tabs-DwBJfjxX.js.map +1 -0
- package/dist/{text-inputs-BFpku0Qd.js → text-inputs-aaK9wcDT.js} +74 -79
- package/dist/text-inputs-aaK9wcDT.js.map +1 -0
- package/dist/theme.css +3 -3
- package/dist/{timelines-CxuAFIc2.js → timelines-C_SBwHNP.js} +153 -150
- 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/{tree-BotPlyiD.js → tree-BiKhg8AY.js} +68 -66
- 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 +1 -1
- package/dist/{ui-provider-D2_TeLqw.js → ui-provider-1D_NSYzO.js} +11 -3
- package/dist/ui-provider-1D_NSYzO.js.map +1 -0
- package/dist/ui-provider.js +3 -3
- package/dist/{upload-B0WHW7ak.js → upload-BO8-CLN6.js} +209 -209
- package/dist/upload-BO8-CLN6.js.map +1 -0
- package/dist/{upload-queue-BHZ_wBfd.js → upload-queue-EOC8g1gf.js} +109 -111
- 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-U0YBLTNT.js → usage-card-obRaBskq.js} +46 -46
- package/dist/{usage-card-U0YBLTNT.js.map → usage-card-obRaBskq.js.map} +1 -1
- package/dist/{utils-Cospvlj1.js → utils-l5LpDw2z.js} +56 -24
- 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-Deb3yQZg.js → value-typography-b8wpz1eX.js} +2 -2
- package/dist/{value-typography-Deb3yQZg.js.map → value-typography-b8wpz1eX.js.map} +1 -1
- package/dist/workspace-DH0v0KcB.js +407 -0
- package/dist/workspace-DH0v0KcB.js.map +1 -0
- package/docs/consumer-skill/SKILL.md +19 -20
- package/docs/consumer-skill/examples/app-layout.tsx +1 -1
- package/docs/consumer-skill/examples/composition.tsx +3 -3
- package/docs/consumer-skill/examples/detail.tsx +59 -12
- package/docs/consumer-skill/examples/edit.tsx +1 -1
- package/docs/consumer-skill/examples/receipt.tsx +2 -2
- package/docs/consumer-skill/examples/scoped-directory.tsx +1 -1
- package/docs/consumer-skill/examples/website.tsx +1 -1
- package/docs/consumer-skill/references/agents-md.md +33 -0
- package/docs/consumer-skill/references/analytics.md +1 -1
- package/docs/consumer-skill/references/composition.md +51 -8
- package/docs/consumer-skill/references/design-contract.md +12 -3
- package/docs/consumer-skill/references/installation.md +11 -1
- package/docs/consumer-skill/references/public-api.json +847 -447
- package/docs/consumer-skill/references/review.md +25 -5
- package/docs/consumer-skill/references/theming.md +8 -4
- package/docs/consumer-skill/references/tokens.json +1 -1
- package/docs/consumer-skill/references/workflows.md +29 -10
- package/docs/consumer-skill/scripts/composition-policy.mjs +41 -11
- package/docs/consumer-skill/scripts/surface-policy.mjs +139 -5
- package/package.json +10 -2
- package/dist/accordion-CQXVcd7Q.js.map +0 -1
- package/dist/action-menu-BTpyPWJ2.js +0 -264
- package/dist/action-menu-BTpyPWJ2.js.map +0 -1
- package/dist/affordance-geometry.generated-CCIXb2A1.js.map +0 -1
- package/dist/ai-artifact-2PQ2fItc.js.map +0 -1
- package/dist/attachment-q69dlt5Y.js +0 -244
- package/dist/attachment-q69dlt5Y.js.map +0 -1
- package/dist/auth-M3vGMgDR.js.map +0 -1
- package/dist/avatar-djdaaQ_s.js.map +0 -1
- package/dist/badge-0tATj-tW.js +0 -92
- package/dist/badge-0tATj-tW.js.map +0 -1
- package/dist/breadcrumbs-BG_FfMK4.js +0 -128
- package/dist/breadcrumbs-BG_FfMK4.js.map +0 -1
- package/dist/button-BS3KDg00.js.map +0 -1
- package/dist/button-R9CCoH7A.js.map +0 -1
- package/dist/buttons-DS0ZIwJ_.js +0 -99
- package/dist/buttons-DS0ZIwJ_.js.map +0 -1
- package/dist/cards-QoJ4syG9.js.map +0 -1
- package/dist/checkbox-B7ygNTYp.js +0 -35
- package/dist/checkbox-B7ygNTYp.js.map +0 -1
- package/dist/choice-inputs-DrJ17tpL.js +0 -752
- package/dist/choice-inputs-DrJ17tpL.js.map +0 -1
- package/dist/code-block-CD0B7M93.js +0 -183
- package/dist/code-block-CD0B7M93.js.map +0 -1
- package/dist/combobox-6dvVny2q.js.map +0 -1
- package/dist/combobox-CB7039j7.js.map +0 -1
- package/dist/comments-You0Bzbr.js.map +0 -1
- package/dist/components/layout/page/partials/page-header-commands.d.ts +0 -13
- package/dist/containers-D_L4mTVb.js.map +0 -1
- package/dist/data-display-3xWQUnMA.js +0 -1335
- package/dist/data-display-3xWQUnMA.js.map +0 -1
- package/dist/date-picker-DrDFj8Lo.js +0 -1527
- package/dist/date-picker-DrDFj8Lo.js.map +0 -1
- package/dist/display-DrdvPwF0.js.map +0 -1
- package/dist/feedback-C7nR0UtT.js.map +0 -1
- package/dist/field-affordance-recipes-CkOCdE2y.js.map +0 -1
- package/dist/field-state-recipes-C-MFBX_8.js +0 -11
- package/dist/field-state-recipes-C-MFBX_8.js.map +0 -1
- package/dist/filters-Da-gNPsE.js.map +0 -1
- package/dist/form-sizing-uWP4lzVh.js.map +0 -1
- package/dist/forms-numeric-D3CO60IF.js.map +0 -1
- package/dist/header-2ycNqGOR.js.map +0 -1
- package/dist/icon-badge-DKlaKXoo.js +0 -53
- package/dist/icon-badge-DKlaKXoo.js.map +0 -1
- package/dist/input-DhQdBnV3.js +0 -255
- package/dist/input-DhQdBnV3.js.map +0 -1
- package/dist/item-xzh8Df65.js.map +0 -1
- package/dist/media-gallery-DQUQ0m3O.js +0 -201
- package/dist/media-gallery-DQUQ0m3O.js.map +0 -1
- package/dist/mentions-DwnO1hh4.js +0 -564
- package/dist/mentions-DwnO1hh4.js.map +0 -1
- package/dist/navigation-Cbp5V8gG.js +0 -264
- package/dist/navigation-Cbp5V8gG.js.map +0 -1
- package/dist/navigation-Cs1npsPm.js +0 -300
- package/dist/navigation-Cs1npsPm.js.map +0 -1
- package/dist/overlay.recipes-CNO2S9V6.js +0 -34
- package/dist/overlay.recipes-CNO2S9V6.js.map +0 -1
- package/dist/overlays-DhZO7N-I.js +0 -994
- package/dist/overlays-DhZO7N-I.js.map +0 -1
- package/dist/page-C6R_8jFt.js +0 -325
- package/dist/page-C6R_8jFt.js.map +0 -1
- package/dist/page-header-hUTzcRZX.js +0 -112
- package/dist/page-header-hUTzcRZX.js.map +0 -1
- package/dist/popover-Dcv_9jxr.js.map +0 -1
- package/dist/rich-text-editor-CF8QYt5p.js +0 -574
- package/dist/rich-text-editor-CF8QYt5p.js.map +0 -1
- package/dist/rich-text-editor.recipes-CnrbmTS1.js +0 -81
- package/dist/rich-text-editor.recipes-CnrbmTS1.js.map +0 -1
- package/dist/rich-text-editor.strings-BpnIQgMl.js +0 -25
- package/dist/rich-text-editor.strings-BpnIQgMl.js.map +0 -1
- package/dist/rich-text-j-FGAeZW.js +0 -32
- package/dist/rich-text-j-FGAeZW.js.map +0 -1
- package/dist/sanitize-html-BG9FGe-j.js +0 -64
- package/dist/sanitize-html-BG9FGe-j.js.map +0 -1
- package/dist/scroll-area-DRdr16Pt.js +0 -47
- package/dist/scroll-area-DRdr16Pt.js.map +0 -1
- package/dist/settings-DHk0L2MF.js +0 -161
- package/dist/settings-DHk0L2MF.js.map +0 -1
- package/dist/sheet-DRFNY1_D.js +0 -207
- package/dist/sheet-DRFNY1_D.js.map +0 -1
- package/dist/sidebar-Cb8WzOvE.js.map +0 -1
- package/dist/sidebar-Crc9M9JV.js.map +0 -1
- package/dist/smart-card-Bek-TwUp.js +0 -599
- package/dist/smart-card-Bek-TwUp.js.map +0 -1
- package/dist/surface-recipes-DOdoBXGm.js +0 -28
- package/dist/surface-recipes-DOdoBXGm.js.map +0 -1
- package/dist/table-D6zKeYQX.js.map +0 -1
- package/dist/table-Dn4XSrSB.js +0 -1444
- package/dist/table-Dn4XSrSB.js.map +0 -1
- package/dist/tabs-Dk8E_knt.js.map +0 -1
- package/dist/text-inputs-BFpku0Qd.js.map +0 -1
- package/dist/timelines-CxuAFIc2.js.map +0 -1
- package/dist/tree-BotPlyiD.js.map +0 -1
- package/dist/typography-CAr3dQhX.js +0 -116
- package/dist/typography-CAr3dQhX.js.map +0 -1
- package/dist/ui-provider-D2_TeLqw.js.map +0 -1
- package/dist/upload-B0WHW7ak.js.map +0 -1
- package/dist/upload-queue-BHZ_wBfd.js.map +0 -1
- package/dist/use-file-drop-target-BX7GnhoQ.js +0 -39
- package/dist/use-file-drop-target-BX7GnhoQ.js.map +0 -1
- package/dist/utils-Cospvlj1.js.map +0 -1
- package/dist/value-inputs-CjfzGMsN.js +0 -854
- package/dist/value-inputs-CjfzGMsN.js.map +0 -1
- package/dist/workspace-YoFjXi6i.js +0 -394
- package/dist/workspace-YoFjXi6i.js.map +0 -1
- /package/dist/components/{blocks/data-display/metadata → base/metadata-list}/metadata-list.strings.d.ts +0 -0
package/dist/blocks/ai.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai.js","names":["_Fragment","NumberValue","NumberValue","_Fragment","cn","DisplayLabel","Text","TextLink","Button","Grid","Stack","Progress","SecondaryValue","MonoValue","Percent","Number","IconBadge","Badge","Textarea","ItemFooter","ItemMedia","ItemDescription","ItemActions","ItemGroup","ItemContent","Item","ItemTitle","InlineStat","defaultAiMessageBubbleStrings","AiMessageBubble","AiCodeBlock","AiChainOfThought","AiToolCall","defaultAiReasoningStrings","AiConfirmation","defaultAiConfirmationStrings","defaultAiAttachmentStrings","AiAttachment","defaultAiTaskStrings","AiSources","defaultAiAgentStrings","defaultAiArtifactStrings","defaultAiChainOfThoughtStrings","AiAgent","AiTask","AiReasoning","AiArtifact","defaultAiSourcesStrings","defaultAiCodeBlockStrings","defaultAiToolCallStrings","AiShimmer","Tree","Fragment$1","defaultAiSummaryStrings","defaultAiClassificationStrings","confidenceBars","ConfidenceBars","filled","level","i","label","AiSummaryBlock","stringsProp","strings","useStrings","defaultMetadata","data","defaultActions","resolvedMetadata","metadata","resolvedActions","actions","footerContent","footer","className","entity","children","AiClassificationPanel","confidenceLabel","flag","defaultAiConfidenceStrings","levelVariant","score","AiConfidence","pct","variant","c","dash","model","factors","f","defaultAiPromptSuggestionsStrings","AiPromptSuggestions","suggestions","Icon","s","onPick","defaultAiTokenUsageStrings","AiTokenUsage","total","inputTokens","outputTokens","maxTokens","cell","cost","defaultAiFeedbackStrings","AiFeedback","internalVote","setInternalVote","useState","comment","setComment","vote","value","cast","resolved","next","onVote","submitted","ThumbsUp","ThumbsDown","allowComment","onSubmitComment","defaultAiCitationStrings","n","AiCitation","expandedProp","mergeStrings","internalExpanded","setInternalExpanded","defaultExpanded","expanded","setExpanded","onExpandedChange","visible","sources","maxCollapsedRows","hidden","jsx","ChevronDown","ChevronRight","CitationRow","relevancePct","source","TitleEl","titleProps","index","ExternalLink","defaultAiInlineCitationStrings","interpolate","template","v","params","k","m","AiInlineCitation","ariaLabel","title","tooltip","baseCls","url","onSelect","defaultAiPackageInfoStrings","AiPackageInfo","bodyContent","name","version","description","license","publishedAt","weeklyDownloads","MetaItem","keywords","keyword","bodyClassName","homepage","repository","defaultAiFileTreeStrings","statusTones","statusIconClasses","pickFileIcon","ext","FileCode","FileText","File","initialExpansion","nodes","node","depth","AiFileTree","props","localExpanded","setLocalExpanded","defaultExpandedIds","expandedIds","items","useMemo","map","directory","FolderOpen","Folder","hideStatusLabels","selectedId","values","onExpandedIdsChange"],"sources":["../../src/components/blocks/ai/ai.strings.ts","../../src/components/blocks/ai/ai-summary/ai-summary.tsx","../../src/components/blocks/ai/ai-classification/ai-classification.tsx","../../src/components/blocks/ai/ai-confidence/types.ts","../../src/components/blocks/ai/ai-confidence/ai-confidence.tsx","../../src/components/blocks/ai/ai-prompt-suggestions/types.ts","../../src/components/blocks/ai/ai-prompt-suggestions/ai-prompt-suggestions.tsx","../../src/components/blocks/ai/ai-token-usage/types.ts","../../src/components/blocks/ai/ai-token-usage/ai-token-usage.tsx","../../src/components/blocks/ai/ai-feedback/types.ts","../../src/components/blocks/ai/ai-feedback/ai-feedback.tsx","../../src/components/blocks/ai/ai-citation/types.ts","../../src/components/blocks/ai/ai-citation/ai-citation.tsx","../../src/components/blocks/ai/ai-inline-citation/types.ts","../../src/components/blocks/ai/ai-inline-citation/ai-inline-citation.tsx","../../src/components/blocks/ai/ai-package-info/types.ts","../../src/components/blocks/ai/ai-package-info/ai-package-info.tsx","../../src/components/blocks/ai/ai-file-tree/types.ts","../../src/components/blocks/ai/ai-file-tree/ai-file-tree.tsx"],"sourcesContent":["/**\n * Shared default strings for `blocks/ai` components.\n *\n * Each component accepts a `strings` prop deep-merged over the default subset\n * it reads. Consumers wire backend i18n at the call site:\n *\n * <AiSummaryBlock strings={{ regenerate: t('ai.summary.regenerate') }} … />\n */\n\nexport interface AiSummaryStrings {\n\t/** Regenerate button label. */\n\tregenerate: string;\n\t/** Confidence-bar level labels. */\n\tconfidenceLevels: { low: string; medium: string; high: string };\n}\n\nexport const defaultAiSummaryStrings: AiSummaryStrings = {\n\tregenerate: 'Regenerate',\n\tconfidenceLevels: { low: 'low', medium: 'medium', high: 'high' },\n};\n\nexport interface AiClassificationStrings {\n\t/** Card title rendered in the header. */\n\ttitle: string;\n\t/** Inline-stat row labels. */\n\tcomplexityLabel: string;\n\tflagsLabel: string;\n\tnextStepLabel: string;\n\t/** Confidence pill prefix (e.g. \"Confidence: High\"). */\n\tconfidencePrefix: string;\n\t/** Confidence band labels. */\n\tconfidenceBands: { low: string; medium: string; high: string };\n}\n\nexport const defaultAiClassificationStrings: AiClassificationStrings = {\n\ttitle: 'Classification',\n\tcomplexityLabel: 'Complexity',\n\tflagsLabel: 'Flags',\n\tnextStepLabel: 'Next step',\n\tconfidencePrefix: 'Confidence',\n\tconfidenceBands: { low: 'Low', medium: 'Medium', high: 'High' },\n};\n","import { Badge } from '../../../base/badge';\nimport { Button } from '../../../base/buttons';\nimport { Stack } from '../../../base/structure';\nimport { SecondaryValue } from '../../../primitives';\nimport { Text } from '../../../typography/text';\nimport { useStrings } from '../../../../lib/strings';\nimport { cn } from '../../../../lib/utils';\n\nimport { defaultAiSummaryStrings } from '../ai.strings';\nimport type { AiSummaryBlockProps, ConfidenceLevel } from './types';\n\nconst confidenceBars: Record<ConfidenceLevel, number> = {\n\tlow: 1,\n\tmedium: 2,\n\thigh: 3,\n};\n\nfunction ConfidenceBars({ level, label }: { level: ConfidenceLevel; label: string }) {\n\tconst filled = confidenceBars[level];\n\n\treturn (\n\t\t<div className=\"ai-summary--confidence flex items-center gap-space-sm\">\n\t\t\t<div className=\"flex items-center gap-space-2xs\" aria-hidden=\"true\">\n\t\t\t\t{Array.from({ length: 3 }, (_, i) => (\n\t\t\t\t\t<div\n\t\t\t\t\t\tkey={`bar-${String(i)}`}\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t'h-2.5 w-1 rounded-radius-sm',\n\t\t\t\t\t\t\ti < filled ? 'bg-foreground/60' : 'bg-muted-foreground/20',\n\t\t\t\t\t\t)}\n\t\t\t\t\t/>\n\t\t\t\t))}\n\t\t\t</div>\n\t\t\t<Text size=\"xs\" type=\"secondary\" tag=\"span\" className=\"capitalize\">\n\t\t\t\t{label}\n\t\t\t</Text>\n\t\t</div>\n\t);\n}\n\nexport function AiSummaryBlock({\n\tdata,\n\tchildren,\n\tmetadata,\n\tactions,\n\tfooter,\n\tclassName,\n\tstrings: stringsProp,\n}: AiSummaryBlockProps) {\n\tconst strings = useStrings(defaultAiSummaryStrings, stringsProp);\n\tconst defaultMetadata = (\n\t\t<div className=\"ai-summary--metadata flex min-w-0 flex-wrap items-center gap-x-space-md gap-y-space-xs\">\n\t\t\t{!!data.generatedAt && (\n\t\t\t\t<SecondaryValue size=\"xs\" className=\"min-w-0\">\n\t\t\t\t\t{data.generatedAt}\n\t\t\t\t</SecondaryValue>\n\t\t\t)}\n\t\t\t{!!data.model && (\n\t\t\t\t<SecondaryValue size=\"xs\" className=\"min-w-0 truncate\">\n\t\t\t\t\t{data.model}\n\t\t\t\t</SecondaryValue>\n\t\t\t)}\n\t\t</div>\n\t);\n\tconst defaultActions = data.onRegenerate ? (\n\t\t<Button tone=\"secondary\" buttonStyle=\"ghost\" onClick={data.onRegenerate}>\n\t\t\t{strings.regenerate}\n\t\t</Button>\n\t) : null;\n\tconst resolvedMetadata = metadata === undefined ? defaultMetadata : metadata;\n\tconst resolvedActions = actions === undefined ? defaultActions : actions;\n\tconst footerContent = footer !== undefined\n\t\t? footer\n\t\t: (resolvedMetadata || resolvedActions) && (\n\t\t\t<>\n\t\t\t\t{resolvedMetadata}\n\t\t\t\t{resolvedActions}\n\t\t\t</>\n\t\t);\n\n\treturn (\n\t\t<Stack\n\t\t\tdata-component=\"ai-summary\"\n\t\t\tdata-slot=\"ai-summary\"\n\t\t\tclassName={cn('ai-summary--component', className)}\n\t\t>\n\t\t\t<Text lineHeight=\"relaxed\">\n\t\t\t\t{data.summary}\n\t\t\t</Text>\n\n\t\t\t{data.entities.length > 0 && (\n\t\t\t\t<Stack direction=\"horizontal\" wrap gap=\"sm\" className=\"ai-summary--entities min-w-0\">\n\t\t\t\t\t{data.entities.map((entity) => (\n\t\t\t\t\t\t<Badge key={entity} tone=\"secondary\">\n\t\t\t\t\t\t\t{entity}\n\t\t\t\t\t\t</Badge>\n\t\t\t\t\t))}\n\t\t\t\t</Stack>\n\t\t\t)}\n\n\t\t\t<ConfidenceBars level={data.confidence} label={strings.confidenceLevels[data.confidence]} />\n\n\t\t\t{children}\n\n\t\t\t{!!footerContent && (\n\t\t\t\t<Stack\n\t\t\t\t\tdirection={{ base: 'vertical', sm: 'horizontal' }}\n\t\t\t\t\tgap=\"md\"\n\t\t\t\t\tjustify={{ sm: 'between' }}\n\t\t\t\t\tclassName=\"ai-summary--footer pt-space-xs\"\n\t\t\t\t>\n\t\t\t\t\t{footerContent}\n\t\t\t\t</Stack>\n\t\t\t)}\n\t\t</Stack>\n\t);\n}\n","import { Badge } from '../../../base/badge';\nimport { Stack } from '../../../base/structure';\nimport { InlineStat } from '../../data-display';\nimport { Text } from '../../../typography/text';\nimport { useStrings } from '../../../../lib/strings';\nimport { cn } from '../../../../lib/utils';\n\nimport { defaultAiClassificationStrings } from '../ai.strings';\nimport type { AiClassificationPanelProps } from './types';\n\nexport function AiClassificationPanel({ data, children, className, strings: stringsProp }: AiClassificationPanelProps) {\n\tconst strings = useStrings(defaultAiClassificationStrings, stringsProp);\n\tconst confidenceLabel =\n\t\tdata.confidence >= 0.9\n\t\t\t? strings.confidenceBands.high\n\t\t\t: data.confidence >= 0.7\n\t\t\t\t? strings.confidenceBands.medium\n\t\t\t\t: strings.confidenceBands.low;\n\n\treturn (\n\t\t<Stack\n\t\t\tdata-component=\"ai-classification\"\n\t\t\tdata-slot=\"ai-classification\"\n\t\t\tclassName={cn('ai-classification--component', className)}\n\t\t>\n\t\t\t{/* Only urgency and sentiment carry status tones; the request type, flags and\n\t\t\t next step are categories and copy, so they stay neutral. */}\n\t\t\t<Stack direction=\"horizontal\" wrap align=\"center\" gap=\"sm\">\n\t\t\t\t<Badge>\n\t\t\t\t\t{data.requestType}\n\t\t\t\t</Badge>\n\t\t\t\t<Badge tone={data.urgencyTone}>\n\t\t\t\t\t{data.urgency}\n\t\t\t\t</Badge>\n\t\t\t\t<Badge tone={data.sentimentTone} dot>\n\t\t\t\t\t{data.tone}\n\t\t\t\t</Badge>\n\t\t\t</Stack>\n\n\t\t\t<InlineStat\n\t\t\t\tlabel={strings.complexityLabel}\n\t\t\t\tlabelClassName=\"text-sm font-medium text-foreground\"\n\t\t\t\tvalue={\n\t\t\t\t\t<span className=\"flex items-center gap-space-md\">\n\t\t\t\t\t\t<span className=\"flex items-center gap-space-xs\">\n\t\t\t\t\t\t{Array.from({ length: 5 }, (_, i) => (\n\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\tkey={`cx-${String(i)}`}\n\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t'h-1.5 w-3 rounded-radius-sm',\n\t\t\t\t\t\t\t\t\ti < data.complexityScore ? 'bg-foreground/60' : 'bg-muted',\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</span>\n\t\t\t\t\t\t<Text tag=\"span\" size=\"xs\" type=\"secondary\">\n\t\t\t\t\t\t\t{String(data.complexityScore)}/5\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t</span>\n\t\t\t\t}\n\t\t\t/>\n\n\t\t\t{data.flags.length > 0 && (\n\t\t\t\t<InlineStat\n\t\t\t\t\tlabel={strings.flagsLabel}\n\t\t\t\t\tlabelClassName=\"text-sm font-medium text-foreground\"\n\t\t\t\t\tvalue={\n\t\t\t\t\t\t<span className=\"flex gap-space-xs\">\n\t\t\t\t\t\t\t{data.flags.map((flag) => (\n\t\t\t\t\t\t\t\t<Badge key={flag}>\n\t\t\t\t\t\t\t\t\t{flag}\n\t\t\t\t\t\t\t\t</Badge>\n\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t}\n\t\t\t\t/>\n\t\t\t)}\n\n\t\t\t<InlineStat\n\t\t\t\tlabel={strings.nextStepLabel}\n\t\t\t\tlabelClassName=\"text-sm font-medium text-foreground\"\n\t\t\t\tvalue={data.suggestedAction}\n\t\t\t\tvalueClassName=\"text-right\"\n\t\t\t/>\n\n\t\t\t<Text lineHeight=\"relaxed\" type=\"secondary\">\n\t\t\t\t{data.summary}\n\t\t\t</Text>\n\n\t\t\t<div className=\"flex items-center gap-space-md\">\n\t\t\t\t<Badge tone=\"secondary\">\n\t\t\t\t\t{strings.confidencePrefix}: {confidenceLabel}\n\t\t\t\t</Badge>\n\t\t\t\t<Text size=\"xs\" type=\"discrete\" tag=\"span\">\n\t\t\t\t\t{data.model}\n\t\t\t\t</Text>\n\t\t\t</div>\n\n\t\t\t{children}\n\t\t</Stack>\n\t);\n}\n","import type { StringsProp } from '../../../../lib/strings';\n\nexport interface AiConfidenceFactor {\n\t/** Display label. */\n\tlabel: string;\n\tscore: number; // 0–1\n}\n\nexport interface AiConfidenceStrings {\n\t/** Surface title. */\n\ttitle: string;\n\tconfidenceLabel: string;\n\tfactorsLabel: string;\n\tlevelHigh: string;\n\tlevelMedium: string;\n\tlevelLow: string;\n}\n\nexport const defaultAiConfidenceStrings: AiConfidenceStrings = {\n\ttitle: 'AI Confidence',\n\tconfidenceLabel: 'Overall',\n\tfactorsLabel: 'Contributing factors',\n\tlevelHigh: 'High',\n\tlevelMedium: 'Medium',\n\tlevelLow: 'Low',\n};\n\nexport interface AiConfidenceProps {\n\tscore: number; // 0–1\n\tmodel?: string;\n\tfactors?: AiConfidenceFactor[];\n\t/** Merged onto the outermost node. */\n\tclassName?: string;\n\t/** Overrides this surface's own copy. */\n\tstrings?: StringsProp<AiConfidenceStrings>;\n}\n","import { Progress } from '../../../base/feedback';\n/**\n * AiConfidence — visualises an AI model's overall confidence with a circular\n * progress dial and a list of weighted contributing factors. Strings are overridable.\n */\nimport { Percent } from '../../../primitives';\nimport { DisplayLabel, Text } from '../../../typography';\nimport { Badge } from '../../../base/badge';\nimport { InlineStat } from '../../data-display';\nimport { Stack } from '../../../base/structure';\nimport { useStrings } from '../../../../lib/strings';\nimport { cn } from '../../../../lib/utils';\n\nimport { defaultAiConfidenceStrings, type AiConfidenceProps } from './types';\n\nfunction levelVariant(score: number) {\n\tif (score >= 0.85) return 'success' as const;\n\tif (score >= 0.6) return 'warning' as const;\n\treturn 'destructive' as const;\n}\n\nexport function AiConfidence({ score, model, factors, className, strings: stringsProp }: AiConfidenceProps) {\n\tconst strings = useStrings(defaultAiConfidenceStrings, stringsProp);\n\tconst pct = Math.round(score * 100);\n\tconst variant = levelVariant(score);\n\tconst label = variant === 'success' ? strings.levelHigh : variant === 'warning' ? strings.levelMedium : strings.levelLow;\n\tconst c = 2 * Math.PI * 24;\n\tconst dash = c - (pct / 100) * c;\n\n\treturn (\n\t\t<Stack\n\t\t\tdata-component=\"ai-confidence\"\n\t\t\tdata-slot=\"ai-confidence\"\n\t\t\tgap=\"xl\"\n\t\t\tclassName={cn('ai-confidence--component @container/ai-confidence', className)}\n\t\t\taria-label={strings.title}\n\t\t>\n\t\t\t<div className=\"grid gap-space-xl @md/ai-confidence:grid-cols-[auto_minmax(0,1fr)] @md/ai-confidence:items-center\">\n\t\t\t\t<div className=\"relative w-fit shrink-0\">\n\t\t\t\t\t<svg width=\"56\" height=\"56\" viewBox=\"0 0 64 64\" aria-hidden=\"true\">\n\t\t\t\t\t\t<circle cx=\"32\" cy=\"32\" r=\"24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"5\" className=\"text-muted/60\" />\n\t\t\t\t\t\t<circle\n\t\t\t\t\t\t\tcx=\"32\"\n\t\t\t\t\t\t\tcy=\"32\"\n\t\t\t\t\t\t\tr=\"24\"\n\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\t\tstrokeWidth=\"5\"\n\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t\tstrokeDasharray={c}\n\t\t\t\t\t\t\tstrokeDashoffset={dash}\n\t\t\t\t\t\t\ttransform=\"rotate(-90 32 32)\"\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\tvariant === 'success' && 'text-success',\n\t\t\t\t\t\t\t\tvariant === 'warning' && 'text-warning-accent',\n\t\t\t\t\t\t\t\tvariant === 'destructive' && 'text-destructive',\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</svg>\n\t\t\t\t\t<div className=\"absolute inset-0 flex flex-col items-center justify-center\">\n\t\t\t\t\t\t<Percent value={pct} scaled weight=\"semibold\" className=\"leading-none\" />\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<Stack gap=\"sm\">\n\t\t\t\t\t<DisplayLabel>\n\t\t\t\t\t\t{strings.confidenceLabel}\n\t\t\t\t\t</DisplayLabel>\n\t\t\t\t\t<Stack direction=\"horizontal\" gap=\"sm\">\n\t\t\t\t\t\t<Badge tone={variant}>{label}</Badge>\n\t\t\t\t\t\t{!!model && (\n\t\t\t\t\t\t\t<Text size=\"xs\" type=\"secondary\" className=\"truncate\">\n\t\t\t\t\t\t\t\t{model}\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</Stack>\n\t\t\t\t</Stack>\n\t\t\t</div>\n\n\t\t\t{!!factors && factors.length > 0 && (\n\t\t\t\t<Stack gap=\"md\">\n\t\t\t\t\t<DisplayLabel>\n\t\t\t\t\t\t{strings.factorsLabel}\n\t\t\t\t\t</DisplayLabel>\n\t\t\t\t\t{factors.map((f) => (\n\t\t\t\t\t\t<Stack key={f.label} gap=\"sm\">\n\t\t\t\t\t\t\t<InlineStat\n\t\t\t\t\t\t\t\tlabel={f.label}\n\t\t\t\t\t\t\t\tvalue={<Percent value={f.score} size=\"xs\" weight=\"semibold\" />}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<Progress value={Math.round(f.score * 100)} aria-label={f.label} />\n\t\t\t\t\t\t</Stack>\n\t\t\t\t\t))}\n\t\t\t\t</Stack>\n\t\t\t)}\n\t\t</Stack>\n\t);\n}\n\nAiConfidence.displayName = 'AiConfidence';\n","import type { LucideIcon } from 'lucide-react';\nimport type { StringsProp } from '../../../../lib/strings';\n\nexport interface AiPromptSuggestion {\n\t/** Stable identity for this entry. */\n\tid: string;\n\t/** Display label. */\n\tlabel: string;\n\t/** Supporting copy shown under the label. */\n\tdescription?: string;\n\t/** Leading glyph. */\n\ticon?: LucideIcon;\n}\n\nexport interface AiPromptSuggestionsStrings {\n\t/** Surface title. */\n\ttitle: string;\n\thint: string;\n}\n\nexport const defaultAiPromptSuggestionsStrings: AiPromptSuggestionsStrings = {\n\ttitle: 'Try asking',\n\thint: 'Tap a prompt to start',\n};\n\nexport interface AiPromptSuggestionsProps {\n\tsuggestions: AiPromptSuggestion[];\n\tonPick?: (suggestion: AiPromptSuggestion) => void;\n\t/** Merged onto the outermost node. */\n\tclassName?: string;\n\t/** Overrides this surface's own copy. */\n\tstrings?: StringsProp<AiPromptSuggestionsStrings>;\n}\n","/**\n * AiPromptSuggestions — grid of clickable prompt rows.\n * Use to seed a chat or assistant input with curated starting prompts.\n */\nimport { IconBadge } from '../../../base/display';\nimport { Stack } from '../../../base/structure';\nimport {\n\tItem,\n\tItemContent,\n\tItemDescription,\n\tItemMedia,\n\tItemTitle,\n} from '../../../base/item';\nimport { cn } from '../../../../lib/utils';\nimport { useStrings } from '../../../../lib/strings';\n\nimport {\n\tdefaultAiPromptSuggestionsStrings,\n\ttype AiPromptSuggestionsProps,\n} from './types';\n\nexport function AiPromptSuggestions({ suggestions, onPick, className, strings: stringsProp }: AiPromptSuggestionsProps) {\n\tconst strings = useStrings(defaultAiPromptSuggestionsStrings, stringsProp);\n\n\treturn (\n\t\t<Stack\n\t\t\tdata-component=\"ai-prompt-suggestions\"\n\t\t\tdata-slot=\"ai-prompt-suggestions\"\n\t\t\tclassName={cn('ai-prompt-suggestions--component', className)}\n\t\t>\n\t\t\t<Stack gap=\"normal\" className=\"ai-prompt-suggestions--intro\">\n\t\t\t\t<ItemTitle>{strings.title}</ItemTitle>\n\t\t\t\t<ItemDescription>{strings.hint}</ItemDescription>\n\t\t\t</Stack>\n\t\t\t<div className=\"grid grid-cols-[repeat(auto-fit,minmax(min(15rem,100%),1fr))] gap-space-xl\">\n\t\t\t\t{suggestions.map((s) => {\n\t\t\t\t\tconst Icon = s.icon;\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<Item\n\t\t\t\t\t\t\tkey={s.id}\n\t\t\t\t\t\t\tvariant=\"outline\"\n\t\t\t\t\t\t\trender={<button type=\"button\" onClick={() => onPick?.(s)} />}\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t'ai-prompt-suggestions--item h-full items-start gap-space-lg p-surface transition-[border-color,background] duration-150',\n\t\t\t\t\t\t\t\t'hover:border-foreground/20 hover:bg-muted/40',\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{!!Icon && (\n\t\t\t\t\t\t\t\t<ItemMedia>\n\t\t\t\t\t\t\t\t\t<IconBadge icon={Icon} tone=\"neutral\" size=\"md\" shape=\"square\" />\n\t\t\t\t\t\t\t\t</ItemMedia>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t<ItemContent className=\"min-w-0 gap-space-sm\">\n\t\t\t\t\t\t\t\t<ItemTitle>{s.label}</ItemTitle>\n\t\t\t\t\t\t\t\t{!!s.description && (\n\t\t\t\t\t\t\t\t\t<ItemDescription>{s.description}</ItemDescription>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</ItemContent>\n\t\t\t\t\t\t</Item>\n\t\t\t\t\t);\n\t\t\t\t})}\n\t\t\t</div>\n\t\t</Stack>\n\t);\n}\n\nAiPromptSuggestions.displayName = 'AiPromptSuggestions';\n","import type { StringsProp } from '../../../../lib/strings';\n\nexport interface AiTokenUsageStrings {\n\t/** Surface title. */\n\ttitle: string;\n\tinput: string;\n\toutput: string;\n\t/** Total number of records across all pages. */\n\ttotal: string;\n\tcost: string;\n}\n\nexport const defaultAiTokenUsageStrings: AiTokenUsageStrings = {\n\ttitle: 'Token usage',\n\tinput: 'Input',\n\toutput: 'Output',\n\ttotal: 'Total',\n\tcost: 'Estimated cost',\n};\n\nexport interface AiTokenUsageProps {\n\tmodel?: string;\n\tinputTokens: number;\n\toutputTokens: number;\n\tcost?: string;\n\tmaxTokens?: number;\n\t/** Merged onto the outermost node. */\n\tclassName?: string;\n\t/** Overrides this surface's own copy. */\n\tstrings?: StringsProp<AiTokenUsageStrings>;\n}\n","/**\n * AiTokenUsage — input + output token counts with a usage bar\n * relative to a max context window, plus optional cost estimate.\n */\nimport { useStrings } from '../../../../lib/strings';\nimport { Badge } from '../../../base/badge';\nimport { DisplayLabel, Text } from '../../../typography';\nimport { InlineStat } from '../../data-display';\nimport { Grid, Stack } from '../../../base/structure';\nimport { Number as NumberValue, Percent } from '../../../primitives';\n\nimport { defaultAiTokenUsageStrings, type AiTokenUsageProps } from './types';\n\nimport { cn } from '../../../../lib/utils';\nexport function AiTokenUsage({\n\tmodel,\n\tinputTokens,\n\toutputTokens,\n\tcost,\n\tmaxTokens,\n\tclassName,\n\tstrings: stringsProp,\n}: AiTokenUsageProps) {\n\tconst strings = useStrings(defaultAiTokenUsageStrings, stringsProp);\n\tconst total = inputTokens + outputTokens;\n\tconst pct = maxTokens ? Math.min(100, Math.round((total / maxTokens) * 100)) : 0;\n\n\t// Plain figures on the parent surface: no tile per count, no tinted cost panel,\n\t// and the Stack gap is the only space between the groups.\n\treturn (\n\t\t<Stack\n\t\t\tdata-component=\"ai-token-usage\"\n\t\t\tdata-slot=\"ai-token-usage\"\n\t\t\tclassName={cn('ai-token-usage--component', className)}\n\t\t>\n\t\t\t{!!model && (\n\t\t\t\t<div className=\"ai-token-usage--metadata flex min-w-0 justify-start\">\n\t\t\t\t\t<Badge tone=\"secondary\">{model}</Badge>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t\t{/* Three short figures share one row at any practical width, so the\n\t\t\t counts read as one set instead of wrapping two-plus-one. */}\n\t\t\t<Grid columns={3} gap=\"md\">\n\t\t\t\t{[\n\t\t\t\t\t{ label: strings.input, value: inputTokens },\n\t\t\t\t\t{ label: strings.output, value: outputTokens },\n\t\t\t\t\t{ label: strings.total, value: total },\n\t\t\t\t].map((cell) => (\n\t\t\t\t\t// `DisplayLabel` and `NumberValue` are both inline, and JSX drops\n\t\t\t\t\t// the newline between them, so bare siblings rendered as\n\t\t\t\t\t// \"Input3,240\". Stack them so the cell reads label-over-value.\n\t\t\t\t\t<Stack key={cell.label} gap=\"2xs\">\n\t\t\t\t\t\t<DisplayLabel>{cell.label}</DisplayLabel>\n\t\t\t\t\t\t<NumberValue value={cell.value} weight=\"semibold\" align=\"left\" />\n\t\t\t\t\t</Stack>\n\t\t\t\t))}\n\t\t\t</Grid>\n\t\t\t{!!maxTokens && (\n\t\t\t\t<Stack gap=\"xs\">\n\t\t\t\t\t<InlineStat\n\t\t\t\t\t\tlabel={(\n\t\t\t\t\t\t\t<span className=\"inline-flex items-center gap-space-xs\">\n\t\t\t\t\t\t\t\t<NumberValue value={total} size=\"xs\" align=\"left\" />\n\t\t\t\t\t\t\t\t<Text tag=\"span\" size=\"xs\" aria-hidden>/</Text>\n\t\t\t\t\t\t\t\t<NumberValue value={maxTokens} size=\"xs\" align=\"left\" />\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\tvalue={<Percent value={pct} scaled size=\"xs\" weight=\"semibold\" align=\"right\" />}\n\t\t\t\t\t\tvalueClassName=\"text-xs font-semibold\"\n\t\t\t\t\t/>\n\t\t\t\t\t<div className=\"h-1.5 w-full overflow-hidden rounded-full bg-muted\">\n\t\t\t\t\t\t<div className=\"h-full rounded-full bg-primary\" style={{ width: `${pct}%` }} />\n\t\t\t\t\t</div>\n\t\t\t\t</Stack>\n\t\t\t)}\n\t\t\t{!!cost && (\n\t\t\t\t<InlineStat\n\t\t\t\t\tlabel={<Text tag=\"span\" size=\"xs\" weight=\"medium\" lineHeight=\"tight\">{strings.cost}</Text>}\n\t\t\t\t\tvalue={cost}\n\t\t\t\t\tvalueClassName=\"text-sm font-bold tabular-nums\"\n\t\t\t\t/>\n\t\t\t)}\n\t\t</Stack>\n\t);\n}\n\nAiTokenUsage.displayName = 'AiTokenUsage';\n","import type { StringsProp } from '../../../../lib/strings';\n\nexport type AiFeedbackVote = 'up' | 'down' | null;\n\nexport interface AiFeedbackStrings {\n\tprompt: string;\n\tthumbsUpAria: string;\n\tthumbsDownAria: string;\n\tcommentPlaceholder: string;\n\tsubmit: string;\n\tthanks: string;\n}\n\nexport const defaultAiFeedbackStrings: AiFeedbackStrings = {\n\tprompt: 'Was this helpful?',\n\tthumbsUpAria: 'Mark as helpful',\n\tthumbsDownAria: 'Mark as not helpful',\n\tcommentPlaceholder: 'Tell us more (optional)',\n\tsubmit: 'Send feedback',\n\tthanks: 'Thanks for your feedback.',\n};\n\nexport interface AiFeedbackProps {\n\t/** Current value. Controlled. */\n\tvalue?: AiFeedbackVote;\n\tonVote?: (vote: AiFeedbackVote) => void;\n\t/** Fired when a comment is submitted. */\n\tonSubmitComment?: (comment: string, vote: AiFeedbackVote) => void;\n\tallowComment?: boolean;\n\tsubmitted?: boolean;\n\t/** Merged onto the outermost node. */\n\tclassName?: string;\n\t/** Overrides this surface's own copy. */\n\tstrings?: StringsProp<AiFeedbackStrings>;\n}\n","/**\n * AiFeedback — thumbs-up / thumbs-down voter with an optional follow-up\n * comment field. Wires into model-improvement loops: emits the vote via\n * `onVote` immediately and a comment via `onSubmitComment` when the user\n * submits the textarea. After `submitted=true` the surface is replaced with\n * a thank-you confirmation. Strings overridable for i18n.\n */\nimport { useState } from 'react';\nimport { ThumbsDown, ThumbsUp } from 'lucide-react';\nimport { Button } from '../../../base/buttons';\nimport { Textarea } from '../../../base/text-inputs';\nimport { Stack } from '../../../base/structure';\nimport { Text } from '../../../typography';\nimport { useStrings } from '../../../../lib/strings';\nimport { cn } from '../../../../lib/utils';\n\nimport {\n\tdefaultAiFeedbackStrings,\n\ttype AiFeedbackProps,\n\ttype AiFeedbackVote,\n} from './types';\n\nexport function AiFeedback({\n\tvalue,\n\tonVote,\n\tonSubmitComment,\n\tallowComment = true,\n\tsubmitted = false,\n\tclassName,\n\tstrings: stringsProp,\n}: AiFeedbackProps) {\n\tconst strings = useStrings(defaultAiFeedbackStrings, stringsProp);\n\tconst [internalVote, setInternalVote] = useState<AiFeedbackVote>(null);\n\tconst [comment, setComment] = useState('');\n\tconst vote = value ?? internalVote;\n\n\tconst cast = (next: AiFeedbackVote) => {\n\t\tconst resolved = vote === next ? null : next;\n\t\tif (value === undefined) setInternalVote(resolved);\n\t\tonVote?.(resolved);\n\t};\n\n\tif (submitted) {\n\t\treturn (\n\t\t\t<div\n\t\t\t\tclassName={cn('ai-feedback--component', \n\t\t\t\t\t'inline-flex items-center gap-space-md rounded-radius bg-success/10 px-space-lg py-space-sm',\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t<ThumbsUp className=\"size-icon-md text-success\" />\n\t\t\t\t<Text size=\"xs\" type=\"success\" weight=\"medium\">\n\t\t\t\t\t{strings.thanks}\n\t\t\t\t</Text>\n\t\t\t</div>\n\t\t);\n\t}\n\n\treturn (\n\t\t<div className={cn('ai-feedback--component inline-flex flex-col gap-space-md', className)}>\n\t\t\t<div className=\"flex items-center gap-space-md\">\n\t\t\t\t<Text size=\"xs\" type=\"secondary\">{strings.prompt}</Text>\n\t\t\t\t<Button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\ttone=\"secondary\"\n\t\t\t\t\tbuttonStyle={vote === 'up' ? 'solid' : 'ghost'}\n\t\t\t\t\tsize=\"sm\" iconOnly\n\t\t\t\t\taria-label={strings.thumbsUpAria}\n\t\t\t\t\taria-pressed={vote === 'up'}\n\t\t\t\t\tonClick={() => cast('up')}\n\t\t\t\t\tclassName={cn(vote === 'up' && 'text-success bg-success/15 hover:bg-success/20')}\n\t\t\t\t>\n\t\t\t\t\t<ThumbsUp className=\"size-icon-md\" />\n\t\t\t\t</Button>\n\t\t\t\t<Button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\ttone=\"secondary\"\n\t\t\t\t\tbuttonStyle={vote === 'down' ? 'solid' : 'ghost'}\n\t\t\t\t\tsize=\"sm\" iconOnly\n\t\t\t\t\taria-label={strings.thumbsDownAria}\n\t\t\t\t\taria-pressed={vote === 'down'}\n\t\t\t\t\tonClick={() => cast('down')}\n\t\t\t\t\tclassName={cn(vote === 'down' && 'text-destructive bg-destructive/10 hover:bg-destructive/10')}\n\t\t\t\t>\n\t\t\t\t\t<ThumbsDown className=\"size-icon-md\" />\n\t\t\t\t</Button>\n\t\t\t</div>\n\n\t\t\t{!!allowComment && !!vote && (\n\t\t\t\t<Stack gap=\"md\">\n\t\t\t\t\t<Textarea\n\t\t\t\t\t\tvalue={comment}\n\t\t\t\t\t\tonChange={(e) => setComment((e.target as HTMLTextAreaElement).value)}\n\t\t\t\t\t\tplaceholder={strings.commentPlaceholder}\n\t\t\t\t\t\tminRows={2}\n\t\t\t\t\t/>\n\t\t\t\t\t<Stack direction=\"horizontal\" gap=\"none\" justify=\"end\">\n\t\t\t\t\t\t<Button tone=\"primary\"\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\tonSubmitComment?.(comment, vote);\n\t\t\t\t\t\t\t\tsetComment('');\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\tdisabled={!comment.trim()}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{strings.submit}\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t</Stack>\n\t\t\t\t</Stack>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n\nAiFeedback.displayName = 'AiFeedback';\n","import type { ReactNode } from 'react';\nimport type { StringsProp } from '../../../../lib/strings';\n\nexport interface AiCitationSource {\n\t/** Stable identity for this entry. */\n\tid: string;\n\t/** Surface title. */\n\ttitle: ReactNode;\n\turl?: string;\n\tsnippet?: ReactNode;\n\tpublisher?: string;\n\tpublishedAt?: string;\n\trelevance?: number; // 0–1\n}\n\nexport interface AiCitationStrings {\n\t/** Surface title. */\n\ttitle: string;\n\tsourceCount: (n: number) => string;\n\thiddenCount: (n: number) => string;\n\texpand: string;\n\tcollapse: string;\n\tvisit: string;\n\trelevance: string;\n}\n\nexport const defaultAiCitationStrings: AiCitationStrings = {\n\ttitle: 'Sources',\n\tsourceCount: (n: number) => (n === 1 ? '1 source' : `${n} sources`),\n\thiddenCount: (n: number) => (n === 1 ? '+1 more' : `+${n} more`),\n\texpand: 'Show sources',\n\tcollapse: 'Hide sources',\n\tvisit: 'Visit',\n\trelevance: 'Relevance',\n};\n\nexport interface AiCitationProps {\n\tsources: AiCitationSource[];\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\tmaxCollapsedRows?: number;\n\t/** Merged onto the outermost node. */\n\tclassName?: string;\n\t/** Overrides this surface's own copy. */\n\tstrings?: StringsProp<AiCitationStrings>;\n}\n","/**\n * AiCitation — expandable source list for AI-grounded responses. Renders an\n * inline footnote-style header (e.g. \"3 sources\") that toggles a list of\n * source rows: title link, snippet, publisher / date, and a relevance bar.\n * Use under `AiSummaryBlock` and `AiMessageBubble` to make AI claims\n * traceable. Strings overridable for i18n.\n *\n * Note: `strings.sourceCount` is a function (single / plural form) — pass an\n * override if your locale needs more complex pluralisation.\n */\nimport { useState } from 'react';\nimport { ChevronDown, ChevronRight, ExternalLink } from 'lucide-react';\nimport { Button } from '../../../base/buttons';\nimport { Stack } from '../../../base/structure';\nimport { Number as NumberValue, Percent, SecondaryValue } from '../../../primitives';\nimport { Text } from '../../../typography';\nimport {\n\tItem,\n\tItemActions,\n\tItemContent,\n\tItemDescription,\n\tItemFooter,\n\tItemGroup,\n\tItemMedia,\n\tItemTitle,\n} from '../../../base/item';\nimport { mergeStrings } from '../../../../lib/strings';\nimport { cn } from '../../../../lib/utils';\n\nimport { defaultAiCitationStrings, type AiCitationProps, type AiCitationSource } from './types';\n\nexport function AiCitation({\n\tsources,\n\texpanded: expandedProp,\n\tdefaultExpanded = false,\n\tonExpandedChange,\n\tmaxCollapsedRows = 0,\n\tclassName,\n\tstrings: stringsProp,\n}: AiCitationProps) {\n\t// `sourceCount` is a function so we cannot use `useStrings` deep-merge\n\t// (the merger replaces functions wholesale, which is what we want).\n\tconst strings = mergeStrings(defaultAiCitationStrings, 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 visible = expanded ? sources : sources.slice(0, Math.max(0, maxCollapsedRows));\n\tconst hidden = sources.length - visible.length;\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t'ai-citation--component',\n\t\t\t\t'rounded-radius border border-border bg-card px-surface-xs py-surface-xs shadow-xs',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t>\n\t\t\t<Stack gap=\"lg\">\n\t\t\t\t<Button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\ttone=\"secondary\"\n\t\t\t\t\tbuttonStyle=\"ghost\"\n\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\tonClick={() => setExpanded(!expanded)}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t'ai-citation--trigger h-auto min-h-0 justify-start gap-space-sm rounded-inner px-control py-row-y',\n\t\t\t\t\t\t'text-muted-foreground hover:text-foreground hover:bg-muted/40',\n\t\t\t\t\t)}\n\t\t\t\t\taria-expanded={expanded}\n\t\t\t\t\taria-label={expanded ? strings.collapse : strings.expand}\n\t\t\t\t>\n\t\t\t\t\t<Text weight=\"medium\">\n\t\t\t\t\t\t{strings.title} · {strings.sourceCount(sources.length)}\n\t\t\t\t\t</Text>\n\t\t\t\t\t{expanded ? <ChevronDown className=\"size-icon-md\" /> : <ChevronRight className=\"size-icon-md\" />}\n\t\t\t\t</Button>\n\n\t\t\t\t{(expanded || maxCollapsedRows > 0) && (\n\t\t\t\t\t<ItemGroup>\n\t\t\t\t\t\t{visible.map((s, i) => (\n\t\t\t\t\t\t\t<CitationRow key={s.id} source={s} index={i + 1} strings={strings} />\n\t\t\t\t\t\t))}\n\t\t\t\t\t\t{!expanded && hidden > 0 && (\n\t\t\t\t\t\t\t<Text size=\"xs\" type=\"secondary\">\n\t\t\t\t\t\t\t\t{strings.hiddenCount(hidden)}\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</ItemGroup>\n\t\t\t\t)}\n\t\t\t</Stack>\n\t\t</div>\n\t);\n}\n\nAiCitation.displayName = 'AiCitation';\n\nfunction CitationRow({\n\tsource,\n\tindex,\n\tstrings,\n}: {\n\tsource: AiCitationSource;\n\tindex: number;\n\tstrings: ReturnType<typeof mergeStrings<typeof defaultAiCitationStrings>>;\n}) {\n\tconst relevancePct =\n\t\ttypeof source.relevance === 'number' ? Math.round(Math.max(0, Math.min(1, source.relevance)) * 100) : null;\n\n\tconst TitleEl = source.url ? 'a' : 'span';\n\tconst titleProps = source.url\n\t\t? {\n\t\t\t\thref: source.url,\n\t\t\t\ttarget: '_blank' as const,\n\t\t\t\trel: 'noopener noreferrer',\n\t\t\t}\n\t\t: {};\n\n\treturn (\n\t\t<Item variant=\"outline\" size=\"sm\" className=\"items-start px-surface-xs py-surface-xs\">\n\t\t\t<ItemMedia>\n\t\t\t\t<NumberValue\n\t\t\t\t\tvalue={index}\n\t\t\t\t\tsize=\"xs\"\n\t\t\t\t\tweight=\"semibold\"\n\t\t\t\t\ttype=\"secondary\"\n\t\t\t\t\talign=\"center\"\n\t\t\t\t\tclassName=\"inline-flex size-icon-lg shrink-0 items-center justify-center rounded-full bg-muted\"\n\t\t\t\t/>\n\t\t\t</ItemMedia>\n\t\t\t<ItemContent>\n\t\t\t\t<ItemTitle className=\"truncate\">\n\t\t\t\t\t<TitleEl\n\t\t\t\t\t\t{...titleProps}\n\t\t\t\t\t\tclassName={cn('truncate', source.url && 'hover:text-primary-accent hover:underline')}\n\t\t\t\t\t>\n\t\t\t\t\t\t{source.title}\n\t\t\t\t\t\t{!!source.url && <ExternalLink className=\"ml-1 inline size-icon-sm align-baseline\" />}\n\t\t\t\t\t</TitleEl>\n\t\t\t\t</ItemTitle>\n\t\t\t\t{!!source.snippet && <ItemDescription clamp={2}>{source.snippet}</ItemDescription>}\n\t\t\t\t{(source.publisher || source.publishedAt) && (\n\t\t\t\t\t<ItemFooter className=\"mt-1 justify-start gap-space-sm\">\n\t\t\t\t\t\t{!!source.publisher && (\n\t\t\t\t\t\t\t<Text size=\"xs\" type=\"discrete\">\n\t\t\t\t\t\t\t\t{source.publisher}\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{!!source.publisher && !!source.publishedAt && (\n\t\t\t\t\t\t\t<Text size=\"xs\" type=\"discrete\">\n\t\t\t\t\t\t\t\t·\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{!!source.publishedAt && (\n\t\t\t\t\t\t\t<SecondaryValue size=\"xs\" className=\"tabular-nums opacity-80\">\n\t\t\t\t\t\t\t\t{source.publishedAt}\n\t\t\t\t\t\t\t</SecondaryValue>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</ItemFooter>\n\t\t\t\t)}\n\t\t\t</ItemContent>\n\t\t\t{relevancePct !== null && (\n\t\t\t\t<ItemActions className=\"w-16 flex-col items-end gap-space-2xs\">\n\t\t\t\t\t<Percent value={relevancePct} scaled size=\"xs\" type=\"secondary\" weight=\"medium\" />\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName=\"h-1 w-full overflow-hidden rounded-full bg-muted\"\n\t\t\t\t\t\trole=\"progressbar\"\n\t\t\t\t\t\taria-label={strings.relevance}\n\t\t\t\t\t\taria-valuemin={0}\n\t\t\t\t\t\taria-valuemax={100}\n\t\t\t\t\t\taria-valuenow={relevancePct}\n\t\t\t\t\t>\n\t\t\t\t\t\t<div className=\"h-full rounded-full bg-primary\" style={{ width: `${relevancePct}%` }} />\n\t\t\t\t\t</div>\n\t\t\t\t</ItemActions>\n\t\t\t)}\n\t\t</Item>\n\t);\n}\n","import type { StringsProp } from '../../../../lib/strings';\n\nexport interface AiInlineCitationStrings {\n\t/** Tooltip prefix when only a number is rendered. */\n\tsourcePrefix: string;\n\t/** Aria label template — supports `{{n}}` and `{{title}}` placeholders. */\n\topenAria: string;\n}\n\nexport const defaultAiInlineCitationStrings: AiInlineCitationStrings = {\n\tsourcePrefix: 'Source',\n\topenAria: 'Open source {{n}}: {{title}}',\n};\n\nexport interface AiInlineCitationProps {\n\t/** 1-indexed citation number rendered inside the pill. */\n\tindex: number;\n\t/** Title of the cited source — used in the tooltip / aria-label. */\n\ttitle?: string;\n\t/** Optional URL — when provided, the pill renders as a link. */\n\turl?: string;\n\t/** Click handler — preferred over `url` for SPA / virtual link routing. */\n\tonSelect?: () => void;\n\t/** Merged onto the outermost node. */\n\tclassName?: string;\n\t/** Overrides this surface's own copy. */\n\tstrings?: StringsProp<AiInlineCitationStrings>;\n}\n","/**\n * AiInlineCitation — small footnote-style pill rendered inline inside AI\n * response prose. The number references a position in the parent\n * sources/AiCitation list. Hover to see the source title; click to jump.\n */\nimport { Text, TextLink } from '../../../typography';\nimport { mergeStrings } from '../../../../lib/strings';\nimport { cn } from '../../../../lib/utils';\n\nimport {\n\tdefaultAiInlineCitationStrings,\n\ttype AiInlineCitationProps,\n} 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 AiInlineCitation({\n\tindex,\n\ttitle,\n\turl,\n\tonSelect,\n\tclassName,\n\tstrings: stringsProp,\n}: AiInlineCitationProps) {\n\tconst strings = mergeStrings(defaultAiInlineCitationStrings, stringsProp);\n\tconst ariaLabel = interpolate(strings.openAria, {\n\t\tn: index,\n\t\ttitle: title ?? '',\n\t});\n\tconst tooltip = title ? `${strings.sourcePrefix} ${index}: ${title}` : `${strings.sourcePrefix} ${index}`;\n\n\t// Inline markers use the compact shared action geometry; the Text child\n\t// owns their numeric role independently of the surrounding prose size.\n\tconst baseCls = cn(\n\t\t'box-border inline-flex h-action-xs min-w-action-xs -translate-y-px items-center justify-center rounded-inner border-0 px-control-xs font-sans',\n\t\t'align-middle tabular-nums',\n\t\t'bg-muted text-muted-foreground',\n\t\t'hover:bg-primary/10 hover:text-primary-accent',\n\t\t'transition-colors duration-150',\n\t\t'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n\t\tclassName,\n\t);\n\n\tif (url) {\n\t\treturn (\n\t\t\t<TextLink\n\t\t\t\thref={url}\n\t\t\t\tsize=\"inherit\"\n\t\t\t\tunderline={false}\n\t\t\t\ttarget=\"_blank\"\n\t\t\t\trel=\"noopener noreferrer\"\n\t\t\t\ttitle={tooltip}\n\t\t\t\taria-label={ariaLabel}\n\t\t\t\tclassName={cn('ai-inline-citation--component', baseCls)}\n\t\t\t>\n\t\t\t\t<Text tag=\"span\" size=\"xs\" weight=\"medium\" className=\"leading-none\">\n\t\t\t\t\t{index}\n\t\t\t\t</Text>\n\t\t\t</TextLink>\n\t\t);\n\t}\n\n\tif (onSelect) {\n\t\treturn (\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tonClick={onSelect}\n\t\t\t\ttitle={tooltip}\n\t\t\t\taria-label={ariaLabel}\n\t\t\t\tclassName={cn('ai-inline-citation--component', baseCls)}\n\t\t\t>\n\t\t\t\t<Text tag=\"span\" size=\"xs\" weight=\"medium\" className=\"leading-none\">\n\t\t\t\t\t{index}\n\t\t\t\t</Text>\n\t\t\t</button>\n\t\t);\n\t}\n\n\treturn (\n\t\t<span\n\t\t\ttitle={tooltip}\n\t\t\taria-label={ariaLabel}\n\t\t\tclassName={cn('ai-inline-citation--component', baseCls)}\n\t\t>\n\t\t\t<Text tag=\"span\" size=\"xs\" weight=\"medium\" className=\"leading-none\">\n\t\t\t\t{index}\n\t\t\t</Text>\n\t\t</span>\n\t);\n}\n\nAiInlineCitation.displayName = 'AiInlineCitation';\n","import type { ReactNode } from 'react';\nimport type { StringsProp } from '../../../../lib/strings';\n\nexport interface AiPackageInfoStrings {\n\tversionLabel: string;\n\tlicenseLabel: string;\n\tpublishedLabel: string;\n\thomepageAria: string;\n\thomepageLabel: string;\n\trepositoryAria: string;\n\trepositoryLabel: string;\n\tweeklyDownloadsLabel: string;\n}\n\nexport const defaultAiPackageInfoStrings: AiPackageInfoStrings = {\n\tversionLabel: 'Version',\n\tlicenseLabel: 'License',\n\tpublishedLabel: 'Published',\n\thomepageAria: 'Open homepage',\n\thomepageLabel: 'Homepage',\n\trepositoryAria: 'Open repository',\n\trepositoryLabel: 'Repository',\n\tweeklyDownloadsLabel: 'Weekly downloads',\n};\n\nexport interface AiPackageInfoProps {\n\t/** Package name (npm-style: optional `@scope/`). */\n\tname: string;\n\t/** Latest / pinned version. */\n\tversion?: string;\n\t/** Short description from the package manifest. */\n\tdescription?: ReactNode;\n\t/** SPDX-style license identifier (e.g. \"MIT\"). */\n\tlicense?: string;\n\t/** ISO date or human label of last publish. */\n\tpublishedAt?: string;\n\t/** Package homepage URL. */\n\thomepage?: string;\n\t/** Repository URL (typically GitHub). */\n\trepository?: string;\n\t/** Weekly downloads — formatted by the consumer. */\n\tweeklyDownloads?: string | number;\n\t/** Comma-separated tag list rendered as small chips. */\n\tkeywords?: ReadonlyArray<string>;\n\t/** Click handler for the whole card. */\n\tonSelect?: () => void;\n\t/** Merged onto the outermost node. */\n\tclassName?: string;\n\t/** Overrides this surface's own copy. */\n\tstrings?: StringsProp<AiPackageInfoStrings>;\n}\n","/**\n * AiPackageInfo — compact card describing an npm / library package referenced\n * by the model. Header: name + version chip; body: description + optional\n * meta (license, published date, weekly downloads) and keyword chips. Footer\n * exposes homepage / repository links when provided.\n */\nimport { ExternalLink } from 'lucide-react';\nimport { Badge } from '../../../base/badge';\nimport { Button } from '../../../base/buttons';\nimport { MonoValue, SecondaryValue } from '../../../primitives';\nimport { Text, TextLink } from '../../../typography';\nimport { useStrings } from '../../../../lib/strings';\nimport { Stack } from '../../../base/structure';\nimport { cn } from '../../../../lib/utils';\n\nimport { defaultAiPackageInfoStrings, type AiPackageInfoProps } from './types';\n\nexport function AiPackageInfo({\n\tname,\n\tversion,\n\tdescription,\n\tlicense,\n\tpublishedAt,\n\thomepage,\n\trepository,\n\tweeklyDownloads,\n\tkeywords,\n\tonSelect,\n\tclassName,\n\tstrings: stringsProp,\n}: AiPackageInfoProps) {\n\tconst strings = useStrings(defaultAiPackageInfoStrings, stringsProp);\n\t// The package name is the identity; a generic package glyph would only repeat it.\n\tconst bodyContent = (\n\t\t<>\n\t\t\t<div className=\"min-w-0 flex-1\">\n\t\t\t\t<Stack gap=\"dense\">\n\t\t\t\t<Stack direction=\"horizontal\" gap=\"md\" align=\"center\">\n\t\t\t\t\t<MonoValue weight=\"semibold\" className=\"truncate\">\n\t\t\t\t\t\t{name}\n\t\t\t\t\t</MonoValue>\n\t\t\t\t\t{!!version && (\n\t\t\t\t\t\t<Badge tone=\"secondary\">\n\t\t\t\t\t\t\t<MonoValue size=\"xs\" className=\"text-inherit\">v{version.replace(/^v/, '')}</MonoValue>\n\t\t\t\t\t\t</Badge>\n\t\t\t\t\t)}\n\t\t\t\t</Stack>\n\t\t\t\t{!!description && (\n\t\t\t\t\t<Text size=\"xs\" type=\"secondary\" className=\"line-clamp-2\">\n\t\t\t\t\t\t{description}\n\t\t\t\t\t</Text>\n\t\t\t\t)}\n\t\t\t\t</Stack>\n\n\t\t\t\t{(license || publishedAt || weeklyDownloads !== undefined) && (\n\t\t\t\t\t<div className=\"mt-space-md flex flex-wrap items-center gap-x-space-lg gap-y-space-xs\">\n\t\t\t\t\t\t{!!license && <MetaItem label={strings.licenseLabel} value={license} />}\n\t\t\t\t\t\t{!!publishedAt && <MetaItem label={strings.publishedLabel} value={publishedAt} />}\n\t\t\t\t\t\t{weeklyDownloads !== undefined && (\n\t\t\t\t\t\t\t<MetaItem label={strings.weeklyDownloadsLabel} value={String(weeklyDownloads)} />\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\n\t\t\t\t{!!keywords?.length && (\n\t\t\t\t\t<div className=\"mt-space-md flex flex-wrap gap-space-xs\">\n\t\t\t\t\t\t{keywords.slice(0, 6).map((keyword) => (\n\t\t\t\t\t\t\t<Badge key={keyword} tone=\"secondary\">\n\t\t\t\t\t\t\t\t{keyword}\n\t\t\t\t\t\t\t</Badge>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t</>\n\t);\n\tconst bodyClassName = 'ai-package-info--body flex w-full items-start gap-space-lg p-surface-xs text-left';\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t'ai-package-info--component block w-full 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{onSelect ? (\n\t\t\t\t<Button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\ttone=\"secondary\"\n\t\t\t\t\tbuttonStyle=\"ghost\"\n\t\t\t\t\tonClick={onSelect}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\tbodyClassName,\n\t\t\t\t\t\t'h-auto min-h-0 justify-start rounded-none whitespace-normal transition-colors hover:bg-muted/40',\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t{bodyContent}\n\t\t\t\t</Button>\n\t\t\t) : (\n\t\t\t\t<div className={bodyClassName}>{bodyContent}</div>\n\t\t\t)}\n\n\t\t\t{(homepage || repository) && (\n\t\t\t\t// Links continue the body's inset: no rule or tinted band, and the body's\n\t\t\t\t// bottom padding is the only space above them.\n\t\t\t\t<div className=\"ai-package-info--footer px-surface-xs pb-surface-xs\">\n\t\t\t\t\t<Stack direction=\"horizontal\" align=\"center\" gap=\"md\">\n\t\t\t\t\t\t{!!homepage && (\n\t\t\t\t\t\t\t<TextLink\n\t\t\t\t\t\t\t\thref={homepage}\n\t\t\t\t\t\t\t\tsize=\"inherit\"\n\t\t\t\t\t\t\t\tunderline={false}\n\t\t\t\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\t\t\t\trel=\"noopener noreferrer\"\n\t\t\t\t\t\t\t\tonClick={(e) => e.stopPropagation()}\n\t\t\t\t\t\t\t\taria-label={strings.homepageAria}\n\t\t\t\t\t\t\t\tclassName=\"inline-flex items-center gap-space-xs rounded text-muted-foreground hover:text-foreground\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<Text tag=\"span\" weight=\"medium\">\n\t\t\t\t\t\t\t\t\t{strings.homepageLabel}\n\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t<ExternalLink className=\"size-icon-sm\" />\n\t\t\t\t\t\t\t</TextLink>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{!!homepage && !!repository && (\n\t\t\t\t\t\t\t<Text tag=\"span\" size=\"xs\" type=\"secondary\" className=\"opacity-40\" aria-hidden>\n\t\t\t\t\t\t\t\t·\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{!!repository && (\n\t\t\t\t\t\t\t<TextLink\n\t\t\t\t\t\t\t\thref={repository}\n\t\t\t\t\t\t\t\tsize=\"inherit\"\n\t\t\t\t\t\t\t\tunderline={false}\n\t\t\t\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\t\t\t\trel=\"noopener noreferrer\"\n\t\t\t\t\t\t\t\tonClick={(e) => e.stopPropagation()}\n\t\t\t\t\t\t\t\taria-label={strings.repositoryAria}\n\t\t\t\t\t\t\t\tclassName=\"inline-flex items-center gap-space-xs rounded text-muted-foreground hover:text-foreground\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<Text tag=\"span\" weight=\"medium\">\n\t\t\t\t\t\t\t\t\t{strings.repositoryLabel}\n\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t<ExternalLink className=\"size-icon-sm\" />\n\t\t\t\t\t\t\t</TextLink>\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\nAiPackageInfo.displayName = 'AiPackageInfo';\n\nfunction MetaItem({ label, value }: { label: string; value: string }) {\n\treturn (\n\t\t<div className=\"inline-flex items-baseline gap-space-xs\">\n\t\t\t<Text size=\"xs\" type=\"discrete\">\n\t\t\t\t{label}\n\t\t\t</Text>\n\t\t\t<SecondaryValue size=\"xs\" weight=\"medium\" className=\"tabular-nums\">\n\t\t\t\t{value}\n\t\t\t</SecondaryValue>\n\t\t</div>\n\t);\n}\n","import type { LucideIcon } from 'lucide-react';\nimport type { ComponentProps, ReactNode } from 'react';\nimport type { RowDensity } from '../../../../lib/row-recipes';\nimport type { StringsProp } from '../../../../lib/strings';\n\nexport type AiFileTreeNodeKind = 'directory' | 'file';\n\nexport type AiFileTreeChangeStatus = 'added' | 'modified' | 'removed' | 'renamed';\n\nexport interface AiFileTreeNode {\n\t/** Stable identity, unique throughout the hierarchy. */\n\tid: string;\n\t/** Display name. */\n\tname: string;\n\tkind: AiFileTreeNodeKind;\n\t/** Children — only meaningful for directories. */\n\tchildren?: ReadonlyArray<AiFileTreeNode>;\n\t/** Custom icon override (file kinds, etc.). */\n\ticon?: LucideIcon;\n\t/** Diff status — drives the semantic icon color and trailing Badge. */\n\tstatus?: AiFileTreeChangeStatus;\n\t/** Trailing slot — badge, line count, etc. */\n\ttrailing?: ReactNode;\n\t/** Default-expanded state for directories. */\n\tdefaultExpanded?: boolean;\n /** Disables this entry and all descendants. */\n disabled?: boolean;\n}\n\nexport interface AiFileTreeStrings {\n /** Accessible hierarchy name; aria-label/aria-labelledby can override it. */\n treeAria?: string;\n\texpandAria: string;\n\tcollapseAria: string;\n\tstatusLabels: Record<AiFileTreeChangeStatus, string>;\n}\n\nexport const defaultAiFileTreeStrings: AiFileTreeStrings = {\n treeAria: 'Files',\n\texpandAria: 'Expand directory',\n\tcollapseAria: 'Collapse directory',\n\tstatusLabels: {\n\t\tadded: 'A',\n\t\tmodified: 'M',\n\t\tremoved: 'D',\n\t\trenamed: 'R',\n\t},\n};\n\nexport interface AiFileTreeProps extends Omit<ComponentProps<'div'>, 'children' | 'onSelect'> {\n\t/** Root nodes — typically one entry but the API accepts multiple. */\n\tnodes: ReadonlyArray<AiFileTreeNode>;\n\t/** Selected file id — drives the active row state. Controlled. */\n\tselectedId?: string;\n\t/** Click handler — fires for files only by default. */\n\tonSelect?: (node: AiFileTreeNode) => void;\n\t/** Hide diff status badges; semantic icon colors remain visible. */\n\thideStatusLabels?: boolean;\n\t/** Indent width per nesting level (px). Omit for the shared token-backed hierarchy inset. */\n\tindent?: number;\n /** Vertical rhythm; compact by default. */\n density?: RowDensity;\n /** Disables the entire hierarchy. */\n disabled?: boolean;\n /** Controlled directory expansion. */\n expandedIds?: readonly string[];\n /** Initial expansion; otherwise each directory's defaultExpanded is respected. */\n defaultExpandedIds?: readonly string[];\n /** Expansion request, independent of file selection. */\n onExpandedIdsChange?: (ids: string[], node: AiFileTreeNode) => void;\n\t/** Merged onto the outermost node. */\n\tclassName?: string;\n\t/** Overrides this surface's own copy. */\n\tstrings?: StringsProp<AiFileTreeStrings>;\n}\n","/** File-change presentation on the public keyboard hierarchy; framing belongs to the caller. */\nimport { useMemo, useState } from 'react';\nimport { File, FileCode, FileText, Folder, FolderOpen, type LucideIcon } from 'lucide-react';\nimport { Tree, type TreeNode } from '../../../base/tree';\nimport { Badge } from '../../../base/badge';\nimport { Stack } from '../../../base/structure';\nimport { MonoValue, SecondaryValue } from '../../../primitives';\nimport { useStrings } from '../../../../lib/strings';\nimport { cn } from '../../../../lib/utils';\nimport { defaultAiFileTreeStrings, type AiFileTreeChangeStatus, type AiFileTreeNode, type AiFileTreeProps } from './types';\n\nconst statusTones = { added: 'success', modified: 'warning', removed: 'destructive', renamed: 'info' } as const;\nconst statusIconClasses: Record<AiFileTreeChangeStatus, string> = {\n added: 'text-success', modified: 'text-warning-accent', removed: 'text-destructive', renamed: 'text-info',\n};\nfunction pickFileIcon(name: string): LucideIcon {\n const ext = name.split('.').pop()?.toLowerCase() ?? '';\n if (['ts', 'tsx', 'js', 'jsx', 'mjs', 'cjs', 'json', 'css', 'scss', 'html', 'sh', 'py', 'rs', 'go'].includes(ext)) return FileCode;\n if (['md', 'mdx', 'txt'].includes(ext)) return FileText;\n return File;\n}\nfunction initialExpansion(nodes: readonly AiFileTreeNode[], depth = 0): string[] {\n return nodes.flatMap(node => [\n ...(node.kind === 'directory' && (node.defaultExpanded ?? depth < 1) ? [node.id] : []),\n ...initialExpansion(node.children ?? [], depth + 1),\n ]);\n}\nexport function AiFileTree({\n nodes, selectedId, onSelect, hideStatusLabels = false, indent, density = 'compact', disabled,\n expandedIds, defaultExpandedIds, onExpandedIdsChange, className, strings: stringsProp, ...props\n}: AiFileTreeProps) {\n const strings = useStrings(defaultAiFileTreeStrings, stringsProp);\n const [localExpanded, setLocalExpanded] = useState(() => defaultExpandedIds ?? initialExpansion(nodes));\n const expanded = expandedIds ?? localExpanded;\n const items = useMemo(() => {\n function map(nodes: readonly AiFileTreeNode[]): TreeNode<AiFileTreeNode>[] {\n return nodes.map(node => {\n const directory = node.kind === 'directory';\n const Icon = node.icon ?? (directory ? expanded.includes(node.id) ? FolderOpen : Folder : pickFileIcon(node.name));\n return {\n value: node.id, label: node.name, data: node, disabled: node.disabled,\n hasChildren: directory, children: directory ? map(node.children ?? []) : undefined,\n icon: <Icon aria-hidden=\"true\" className={cn('size-icon', node.status && statusIconClasses[node.status])} />,\n trailing: <Stack direction=\"horizontal\" gap=\"xs\" align=\"center\" className=\"shrink-0\">\n {node.status && !hideStatusLabels && <Badge tone={statusTones[node.status]} size=\"sm\" title={node.status}>{strings.statusLabels[node.status]}</Badge>}\n {node.trailing != null && <SecondaryValue size=\"xs\" className=\"tabular-nums\">{node.trailing}</SecondaryValue>}\n </Stack>,\n };\n });\n }\n return map(nodes);\n }, [nodes, expanded, hideStatusLabels, strings.statusLabels]);\n return <Tree {...props} aria-label={props['aria-label'] ?? strings.treeAria} items={items} selectedValues={selectedId === undefined ? [] : [selectedId]}\n expandedValues={expanded} branchActivation=\"toggle\" density={density} disabled={disabled} indent={indent}\n strings={{ expand: label => `${strings.expandAria}: ${label}`, collapse: label => `${strings.collapseAria}: ${label}` }}\n onExpandedValuesChange={(values, node) => {\n if (expandedIds === undefined) setLocalExpanded(values);\n onExpandedIdsChange?.(values, node.data!);\n }}\n onSelectedValuesChange={(_values, node) => { if (node.data?.kind === 'file') onSelect?.(node.data); }}\n renderLabel={node => <MonoValue size=\"inherit\" weight=\"regular\" className={cn('ai-file-tree--name text-inherit wrap-anywhere', node.data?.status === 'removed' && 'line-through')}>{node.label}</MonoValue>}\n className={cn('ai-file-tree--component', className)} />;\n}\nAiFileTree.displayName = 'AiFileTree';\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ai.js","names":["_Fragment","NumberValue","NumberValue","_Fragment","cn","Button","DisplayLabel","Text","TextLink","focusRecipes","Grid","Stack","toneRecipes","Progress","interactionRecipes","SecondaryValue","Percent","Number","IconBadge","Badge","Textarea","ItemFooter","ItemMedia","ItemDescription","ItemActions","ItemGroup","ItemContent","Item","ItemTitle","InlineStat","defaultAiMessageBubbleStrings","AiMessageBubble","AiCodeBlock","AiChainOfThought","AiToolCall","defaultAiReasoningStrings","AiConfirmation","defaultAiConfirmationStrings","defaultAiAttachmentStrings","AiAttachment","defaultAiTaskStrings","AiSources","defaultAiAgentStrings","defaultAiArtifactStrings","defaultAiChainOfThoughtStrings","AiAgent","AiTask","AiReasoning","AiArtifact","defaultAiSourcesStrings","defaultAiCodeBlockStrings","defaultAiToolCallStrings","AiShimmer","Tree","Fragment$1","defaultAiSummaryStrings","defaultAiClassificationStrings","confidenceBars","ConfidenceBars","filled","level","i","label","AiSummaryBlock","stringsProp","strings","useStrings","defaultMetadata","data","defaultActions","resolvedMetadata","metadata","resolvedActions","actions","footerContent","footer","className","entity","children","AiClassificationPanel","confidenceLabel","flag","defaultAiConfidenceStrings","levelVariant","score","AiConfidence","pct","variant","c","dash","model","factors","f","defaultAiPromptSuggestionsStrings","AiPromptSuggestions","suggestions","Icon","s","onPick","defaultAiTokenUsageStrings","AiTokenUsage","total","inputTokens","outputTokens","maxTokens","cell","cost","defaultAiFeedbackStrings","AiFeedback","internalVote","setInternalVote","useState","comment","setComment","vote","value","cast","resolved","next","onVote","submitted","ThumbsUp","ThumbsDown","allowComment","onSubmitComment","defaultAiCitationStrings","n","AiCitation","expandedProp","mergeStrings","internalExpanded","setInternalExpanded","defaultExpanded","expanded","setExpanded","onExpandedChange","visible","sources","maxCollapsedRows","hidden","jsx","ChevronDown","ChevronRight","CitationRow","relevancePct","source","TitleEl","titleProps","index","ExternalLink","defaultAiInlineCitationStrings","interpolate","template","v","params","k","m","AiInlineCitation","ariaLabel","title","tooltip","baseCls","url","onSelect","defaultAiPackageInfoStrings","AiPackageInfo","bodyContent","MonoValue","name","version","description","license","publishedAt","weeklyDownloads","MetaItem","keywords","keyword","bodyClassName","homepage","repository","defaultAiFileTreeStrings","statusTones","statusIconClasses","pickFileIcon","ext","FileCode","FileText","File","initialExpansion","nodes","node","depth","AiFileTree","props","localExpanded","setLocalExpanded","defaultExpandedIds","expandedIds","items","useMemo","map","directory","FolderOpen","Folder","hideStatusLabels","selectedId","values","onExpandedIdsChange"],"sources":["../../src/components/blocks/ai/ai.strings.ts","../../src/components/blocks/ai/ai-summary/ai-summary.tsx","../../src/components/blocks/ai/ai-classification/ai-classification.tsx","../../src/components/blocks/ai/ai-confidence/types.ts","../../src/components/blocks/ai/ai-confidence/ai-confidence.tsx","../../src/components/blocks/ai/ai-prompt-suggestions/types.ts","../../src/components/blocks/ai/ai-prompt-suggestions/ai-prompt-suggestions.tsx","../../src/components/blocks/ai/ai-token-usage/types.ts","../../src/components/blocks/ai/ai-token-usage/ai-token-usage.tsx","../../src/components/blocks/ai/ai-feedback/types.ts","../../src/components/blocks/ai/ai-feedback/ai-feedback.tsx","../../src/components/blocks/ai/ai-citation/types.ts","../../src/components/blocks/ai/ai-citation/ai-citation.tsx","../../src/components/blocks/ai/ai-inline-citation/types.ts","../../src/components/blocks/ai/ai-inline-citation/ai-inline-citation.tsx","../../src/components/blocks/ai/ai-package-info/types.ts","../../src/components/blocks/ai/ai-package-info/ai-package-info.tsx","../../src/components/blocks/ai/ai-file-tree/types.ts","../../src/components/blocks/ai/ai-file-tree/ai-file-tree.tsx"],"sourcesContent":["/**\n * Shared default strings for `blocks/ai` components.\n *\n * Each component accepts a `strings` prop deep-merged over the default subset\n * it reads. Consumers wire backend i18n at the call site:\n *\n * <AiSummaryBlock strings={{ regenerate: t('ai.summary.regenerate') }} … />\n */\n\nexport interface AiSummaryStrings {\n\t/** Regenerate button label. */\n\tregenerate: string;\n\t/** Confidence-bar level labels. */\n\tconfidenceLevels: { low: string; medium: string; high: string };\n}\n\nexport const defaultAiSummaryStrings: AiSummaryStrings = {\n\tregenerate: 'Regenerate',\n\tconfidenceLevels: { low: 'low', medium: 'medium', high: 'high' },\n};\n\nexport interface AiClassificationStrings {\n\t/** Card title rendered in the header. */\n\ttitle: string;\n\t/** Inline-stat row labels. */\n\tcomplexityLabel: string;\n\tflagsLabel: string;\n\tnextStepLabel: string;\n\t/** Confidence pill prefix (e.g. \"Confidence: High\"). */\n\tconfidencePrefix: string;\n\t/** Confidence band labels. */\n\tconfidenceBands: { low: string; medium: string; high: string };\n}\n\nexport const defaultAiClassificationStrings: AiClassificationStrings = {\n\ttitle: 'Classification',\n\tcomplexityLabel: 'Complexity',\n\tflagsLabel: 'Flags',\n\tnextStepLabel: 'Next step',\n\tconfidencePrefix: 'Confidence',\n\tconfidenceBands: { low: 'Low', medium: 'Medium', high: 'High' },\n};\n","import { Badge } from '../../../base/badge';\nimport { Button } from '../../../base/buttons';\nimport { Stack } from '../../../base/structure';\nimport { SecondaryValue } from '../../../primitives';\nimport { Text } from '../../../typography/text';\nimport { useStrings } from '../../../../lib/strings';\nimport { cn } from '../../../../lib/utils';\n\nimport { defaultAiSummaryStrings } from '../ai.strings';\nimport type { AiSummaryBlockProps, ConfidenceLevel } from './types';\n\nconst confidenceBars: Record<ConfidenceLevel, number> = {\n\tlow: 1,\n\tmedium: 2,\n\thigh: 3,\n};\n\nfunction ConfidenceBars({ level, label }: { level: ConfidenceLevel; label: string }) {\n\tconst filled = confidenceBars[level];\n\n\treturn (\n\t\t<div className=\"ai-summary--confidence flex items-center gap-space-sm\">\n\t\t\t<div className=\"flex items-center gap-space-2xs\" aria-hidden=\"true\">\n\t\t\t\t{Array.from({ length: 3 }, (_, i) => (\n\t\t\t\t\t<div\n\t\t\t\t\t\tkey={`bar-${String(i)}`}\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t'h-2.5 w-1 rounded-radius-sm',\n\t\t\t\t\t\t\ti < filled ? 'bg-muted-foreground' : 'bg-muted',\n\t\t\t\t\t\t)}\n\t\t\t\t\t/>\n\t\t\t\t))}\n\t\t\t</div>\n\t\t\t<Text size=\"xs\" type=\"secondary\" tag=\"span\" className=\"capitalize\">\n\t\t\t\t{label}\n\t\t\t</Text>\n\t\t</div>\n\t);\n}\n\nexport function AiSummaryBlock({\n\tdata,\n\tchildren,\n\tmetadata,\n\tactions,\n\tfooter,\n\tclassName,\n\tstrings: stringsProp,\n}: AiSummaryBlockProps) {\n\tconst strings = useStrings(defaultAiSummaryStrings, stringsProp);\n\tconst defaultMetadata = (\n\t\t<div className=\"ai-summary--metadata flex min-w-0 flex-wrap items-center gap-x-space-md gap-y-space-xs\">\n\t\t\t{!!data.generatedAt && (\n\t\t\t\t<SecondaryValue size=\"xs\" className=\"min-w-0\">\n\t\t\t\t\t{data.generatedAt}\n\t\t\t\t</SecondaryValue>\n\t\t\t)}\n\t\t\t{!!data.model && (\n\t\t\t\t<SecondaryValue size=\"xs\" className=\"min-w-0 truncate\">\n\t\t\t\t\t{data.model}\n\t\t\t\t</SecondaryValue>\n\t\t\t)}\n\t\t</div>\n\t);\n\tconst defaultActions = data.onRegenerate ? (\n\t\t<Button tone=\"secondary\" buttonStyle=\"ghost\" onClick={data.onRegenerate}>\n\t\t\t{strings.regenerate}\n\t\t</Button>\n\t) : null;\n\tconst resolvedMetadata = metadata === undefined ? defaultMetadata : metadata;\n\tconst resolvedActions = actions === undefined ? defaultActions : actions;\n\tconst footerContent = footer !== undefined\n\t\t? footer\n\t\t: (resolvedMetadata || resolvedActions) && (\n\t\t\t<>\n\t\t\t\t{resolvedMetadata}\n\t\t\t\t{resolvedActions}\n\t\t\t</>\n\t\t);\n\n\treturn (\n\t\t<Stack\n\t\t\tdata-component=\"ai-summary\"\n\t\t\tdata-slot=\"ai-summary\"\n\t\t\tclassName={cn('ai-summary--component', className)}\n\t\t>\n\t\t\t<Text lineHeight=\"relaxed\">\n\t\t\t\t{data.summary}\n\t\t\t</Text>\n\n\t\t\t{data.entities.length > 0 && (\n\t\t\t\t<Stack direction=\"horizontal\" wrap gap=\"sm\" className=\"ai-summary--entities min-w-0\">\n\t\t\t\t\t{data.entities.map((entity) => (\n\t\t\t\t\t\t<Badge key={entity} tone=\"secondary\">\n\t\t\t\t\t\t\t{entity}\n\t\t\t\t\t\t</Badge>\n\t\t\t\t\t))}\n\t\t\t\t</Stack>\n\t\t\t)}\n\n\t\t\t<ConfidenceBars level={data.confidence} label={strings.confidenceLevels[data.confidence]} />\n\n\t\t\t{children}\n\n\t\t\t{!!footerContent && (\n\t\t\t\t<Stack\n\t\t\t\t\tdirection={{ base: 'vertical', sm: 'horizontal' }}\n\t\t\t\t\tgap=\"md\"\n\t\t\t\t\tjustify={{ sm: 'between' }}\n\t\t\t\t\tclassName=\"ai-summary--footer pt-space-xs\"\n\t\t\t\t>\n\t\t\t\t\t{footerContent}\n\t\t\t\t</Stack>\n\t\t\t)}\n\t\t</Stack>\n\t);\n}\n","import { Badge } from '../../../base/badge';\nimport { Stack } from '../../../base/structure';\nimport { InlineStat } from '../../data-display';\nimport { Text } from '../../../typography/text';\nimport { useStrings } from '../../../../lib/strings';\nimport { cn } from '../../../../lib/utils';\n\nimport { defaultAiClassificationStrings } from '../ai.strings';\nimport type { AiClassificationPanelProps } from './types';\n\nexport function AiClassificationPanel({ data, children, className, strings: stringsProp }: AiClassificationPanelProps) {\n\tconst strings = useStrings(defaultAiClassificationStrings, stringsProp);\n\tconst confidenceLabel =\n\t\tdata.confidence >= 0.9\n\t\t\t? strings.confidenceBands.high\n\t\t\t: data.confidence >= 0.7\n\t\t\t\t? strings.confidenceBands.medium\n\t\t\t\t: strings.confidenceBands.low;\n\n\treturn (\n\t\t<Stack\n\t\t\tdata-component=\"ai-classification\"\n\t\t\tdata-slot=\"ai-classification\"\n\t\t\tclassName={cn('ai-classification--component', className)}\n\t\t>\n\t\t\t{/* Only urgency and sentiment carry status tones; the request type, flags and\n\t\t\t next step are categories and copy, so they stay neutral. */}\n\t\t\t<Stack direction=\"horizontal\" wrap align=\"center\" gap=\"sm\">\n\t\t\t\t<Badge>\n\t\t\t\t\t{data.requestType}\n\t\t\t\t</Badge>\n\t\t\t\t<Badge tone={data.urgencyTone}>\n\t\t\t\t\t{data.urgency}\n\t\t\t\t</Badge>\n\t\t\t\t<Badge tone={data.sentimentTone} dot>\n\t\t\t\t\t{data.tone}\n\t\t\t\t</Badge>\n\t\t\t</Stack>\n\n\t\t\t<InlineStat\n\t\t\t\tlabel={strings.complexityLabel}\n\t\t\t\tlabelClassName=\"text-sm font-medium text-foreground\"\n\t\t\t\tvalue={\n\t\t\t\t\t<span className=\"flex items-center gap-space-md\">\n\t\t\t\t\t\t<span className=\"flex items-center gap-space-xs\">\n\t\t\t\t\t\t{Array.from({ length: 5 }, (_, i) => (\n\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\tkey={`cx-${String(i)}`}\n\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t'h-1.5 w-3 rounded-radius-sm',\n\t\t\t\t\t\t\t\t\ti < data.complexityScore ? 'bg-muted-foreground' : 'bg-muted',\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</span>\n\t\t\t\t\t\t<Text tag=\"span\" size=\"xs\" type=\"secondary\">\n\t\t\t\t\t\t\t{String(data.complexityScore)}/5\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t</span>\n\t\t\t\t}\n\t\t\t/>\n\n\t\t\t{data.flags.length > 0 && (\n\t\t\t\t<InlineStat\n\t\t\t\t\tlabel={strings.flagsLabel}\n\t\t\t\t\tlabelClassName=\"text-sm font-medium text-foreground\"\n\t\t\t\t\tvalue={\n\t\t\t\t\t\t<span className=\"flex gap-space-xs\">\n\t\t\t\t\t\t\t{data.flags.map((flag) => (\n\t\t\t\t\t\t\t\t<Badge key={flag}>\n\t\t\t\t\t\t\t\t\t{flag}\n\t\t\t\t\t\t\t\t</Badge>\n\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t}\n\t\t\t\t/>\n\t\t\t)}\n\n\t\t\t<InlineStat\n\t\t\t\tlabel={strings.nextStepLabel}\n\t\t\t\tlabelClassName=\"text-sm font-medium text-foreground\"\n\t\t\t\tvalue={data.suggestedAction}\n\t\t\t\tvalueClassName=\"text-right\"\n\t\t\t/>\n\n\t\t\t<Text lineHeight=\"relaxed\" type=\"secondary\">\n\t\t\t\t{data.summary}\n\t\t\t</Text>\n\n\t\t\t<div className=\"flex items-center gap-space-md\">\n\t\t\t\t<Badge tone=\"secondary\">\n\t\t\t\t\t{strings.confidencePrefix}: {confidenceLabel}\n\t\t\t\t</Badge>\n\t\t\t\t<Text size=\"xs\" type=\"discrete\" tag=\"span\">\n\t\t\t\t\t{data.model}\n\t\t\t\t</Text>\n\t\t\t</div>\n\n\t\t\t{children}\n\t\t</Stack>\n\t);\n}\n","import type { StringsProp } from '../../../../lib/strings';\n\nexport interface AiConfidenceFactor {\n\t/** Display label. */\n\tlabel: string;\n\tscore: number; // 0–1\n}\n\nexport interface AiConfidenceStrings {\n\t/** Surface title. */\n\ttitle: string;\n\tconfidenceLabel: string;\n\tfactorsLabel: string;\n\tlevelHigh: string;\n\tlevelMedium: string;\n\tlevelLow: string;\n}\n\nexport const defaultAiConfidenceStrings: AiConfidenceStrings = {\n\ttitle: 'AI Confidence',\n\tconfidenceLabel: 'Overall',\n\tfactorsLabel: 'Contributing factors',\n\tlevelHigh: 'High',\n\tlevelMedium: 'Medium',\n\tlevelLow: 'Low',\n};\n\nexport interface AiConfidenceProps {\n\tscore: number; // 0–1\n\tmodel?: string;\n\tfactors?: AiConfidenceFactor[];\n\t/** Merged onto the outermost node. */\n\tclassName?: string;\n\t/** Overrides this surface's own copy. */\n\tstrings?: StringsProp<AiConfidenceStrings>;\n}\n","import { Progress } from '../../../base/feedback';\n/**\n * AiConfidence — visualises an AI model's overall confidence with a circular\n * progress dial and a list of weighted contributing factors. Strings are overridable.\n */\nimport { Percent } from '../../../primitives';\nimport { DisplayLabel, Text } from '../../../typography';\nimport { Badge } from '../../../base/badge';\nimport { InlineStat } from '../../data-display';\nimport { Stack } from '../../../base/structure';\nimport { useStrings } from '../../../../lib/strings';\nimport { cn } from '../../../../lib/utils';\n\nimport { defaultAiConfidenceStrings, type AiConfidenceProps } from './types';\n\nfunction levelVariant(score: number) {\n\tif (score >= 0.85) return 'success' as const;\n\tif (score >= 0.6) return 'warning' as const;\n\treturn 'destructive' as const;\n}\n\nexport function AiConfidence({ score, model, factors, className, strings: stringsProp }: AiConfidenceProps) {\n\tconst strings = useStrings(defaultAiConfidenceStrings, stringsProp);\n\tconst pct = Math.round(score * 100);\n\tconst variant = levelVariant(score);\n\tconst label = variant === 'success' ? strings.levelHigh : variant === 'warning' ? strings.levelMedium : strings.levelLow;\n\tconst c = 2 * Math.PI * 24;\n\tconst dash = c - (pct / 100) * c;\n\n\treturn (\n\t\t<Stack\n\t\t\tdata-component=\"ai-confidence\"\n\t\t\tdata-slot=\"ai-confidence\"\n\t\t\tgap=\"xl\"\n\t\t\tclassName={cn('ai-confidence--component @container/ai-confidence', className)}\n\t\t\taria-label={strings.title}\n\t\t>\n\t\t\t<div className=\"grid gap-space-xl @md/ai-confidence:grid-cols-[auto_minmax(0,1fr)] @md/ai-confidence:items-center\">\n\t\t\t\t<div className=\"relative w-fit shrink-0\">\n\t\t\t\t\t<svg width=\"56\" height=\"56\" viewBox=\"0 0 64 64\" aria-hidden=\"true\">\n\t\t\t\t\t\t<circle cx=\"32\" cy=\"32\" r=\"24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"5\" className=\"text-muted/60\" />\n\t\t\t\t\t\t<circle\n\t\t\t\t\t\t\tcx=\"32\"\n\t\t\t\t\t\t\tcy=\"32\"\n\t\t\t\t\t\t\tr=\"24\"\n\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\t\tstrokeWidth=\"5\"\n\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t\tstrokeDasharray={c}\n\t\t\t\t\t\t\tstrokeDashoffset={dash}\n\t\t\t\t\t\t\ttransform=\"rotate(-90 32 32)\"\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\tvariant === 'success' && 'text-success',\n\t\t\t\t\t\t\t\tvariant === 'warning' && 'text-warning-accent',\n\t\t\t\t\t\t\t\tvariant === 'destructive' && 'text-destructive',\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</svg>\n\t\t\t\t\t<div className=\"absolute inset-0 flex flex-col items-center justify-center\">\n\t\t\t\t\t\t<Percent value={pct} scaled weight=\"semibold\" className=\"leading-none\" />\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<Stack gap=\"sm\">\n\t\t\t\t\t<DisplayLabel>\n\t\t\t\t\t\t{strings.confidenceLabel}\n\t\t\t\t\t</DisplayLabel>\n\t\t\t\t\t<Stack direction=\"horizontal\" gap=\"sm\">\n\t\t\t\t\t\t<Badge tone={variant}>{label}</Badge>\n\t\t\t\t\t\t{!!model && (\n\t\t\t\t\t\t\t<Text size=\"xs\" type=\"secondary\" className=\"truncate\">\n\t\t\t\t\t\t\t\t{model}\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</Stack>\n\t\t\t\t</Stack>\n\t\t\t</div>\n\n\t\t\t{!!factors && factors.length > 0 && (\n\t\t\t\t<Stack gap=\"md\">\n\t\t\t\t\t<DisplayLabel>\n\t\t\t\t\t\t{strings.factorsLabel}\n\t\t\t\t\t</DisplayLabel>\n\t\t\t\t\t{factors.map((f) => (\n\t\t\t\t\t\t<Stack key={f.label} gap=\"sm\">\n\t\t\t\t\t\t\t<InlineStat\n\t\t\t\t\t\t\t\tlabel={f.label}\n\t\t\t\t\t\t\t\tvalue={<Percent value={f.score} size=\"xs\" weight=\"semibold\" />}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<Progress value={Math.round(f.score * 100)} aria-label={f.label} />\n\t\t\t\t\t\t</Stack>\n\t\t\t\t\t))}\n\t\t\t\t</Stack>\n\t\t\t)}\n\t\t</Stack>\n\t);\n}\n\nAiConfidence.displayName = 'AiConfidence';\n","import type { LucideIcon } from 'lucide-react';\nimport type { StringsProp } from '../../../../lib/strings';\n\nexport interface AiPromptSuggestion {\n\t/** Stable identity for this entry. */\n\tid: string;\n\t/** Display label. */\n\tlabel: string;\n\t/** Supporting copy shown under the label. */\n\tdescription?: string;\n\t/** Leading glyph. */\n\ticon?: LucideIcon;\n}\n\nexport interface AiPromptSuggestionsStrings {\n\t/** Surface title. */\n\ttitle: string;\n\thint: string;\n}\n\nexport const defaultAiPromptSuggestionsStrings: AiPromptSuggestionsStrings = {\n\ttitle: 'Try asking',\n\thint: 'Tap a prompt to start',\n};\n\nexport interface AiPromptSuggestionsProps {\n\tsuggestions: AiPromptSuggestion[];\n\tonPick?: (suggestion: AiPromptSuggestion) => void;\n\t/** Merged onto the outermost node. */\n\tclassName?: string;\n\t/** Overrides this surface's own copy. */\n\tstrings?: StringsProp<AiPromptSuggestionsStrings>;\n}\n","/**\n * AiPromptSuggestions — grid of clickable prompt rows.\n * Use to seed a chat or assistant input with curated starting prompts.\n */\nimport { IconBadge } from '../../../base/display';\nimport { Stack } from '../../../base/structure';\nimport {\n\tItem,\n\tItemContent,\n\tItemDescription,\n\tItemMedia,\n\tItemTitle,\n} from '../../../base/item';\nimport { cn } from '../../../../lib/utils';\nimport { useStrings } from '../../../../lib/strings';\n\nimport {\n\tdefaultAiPromptSuggestionsStrings,\n\ttype AiPromptSuggestionsProps,\n} from './types';\nimport { interactionRecipes } from '../../../../lib/interaction-recipes';\n\nexport function AiPromptSuggestions({ suggestions, onPick, className, strings: stringsProp }: AiPromptSuggestionsProps) {\n\tconst strings = useStrings(defaultAiPromptSuggestionsStrings, stringsProp);\n\n\treturn (\n\t\t<Stack\n\t\t\tdata-component=\"ai-prompt-suggestions\"\n\t\t\tdata-slot=\"ai-prompt-suggestions\"\n\t\t\tclassName={cn('ai-prompt-suggestions--component', className)}\n\t\t>\n\t\t\t<Stack gap=\"normal\" className=\"ai-prompt-suggestions--intro\">\n\t\t\t\t<ItemTitle>{strings.title}</ItemTitle>\n\t\t\t\t<ItemDescription>{strings.hint}</ItemDescription>\n\t\t\t</Stack>\n\t\t\t<div className=\"grid grid-cols-[repeat(auto-fit,minmax(min(15rem,100%),1fr))] gap-space-xl\">\n\t\t\t\t{suggestions.map((s) => {\n\t\t\t\t\tconst Icon = s.icon;\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<Item\n\t\t\t\t\t\t\tkey={s.id}\n\t\t\t\t\t\t\tvariant=\"outline\"\n\t\t\t\t\t\t\trender={<button type=\"button\" onClick={() => onPick?.(s)} />}\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t'ai-prompt-suggestions--item h-full items-start gap-space-lg p-surface',\n\t\t\t\t\t\t\t\tinteractionRecipes.rowHover,\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{!!Icon && (\n\t\t\t\t\t\t\t\t<ItemMedia>\n\t\t\t\t\t\t\t\t\t<IconBadge icon={Icon} tone=\"neutral\" size=\"md\" shape=\"square\" />\n\t\t\t\t\t\t\t\t</ItemMedia>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t<ItemContent className=\"min-w-0 gap-space-sm\">\n\t\t\t\t\t\t\t\t<ItemTitle>{s.label}</ItemTitle>\n\t\t\t\t\t\t\t\t{!!s.description && (\n\t\t\t\t\t\t\t\t\t<ItemDescription>{s.description}</ItemDescription>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</ItemContent>\n\t\t\t\t\t\t</Item>\n\t\t\t\t\t);\n\t\t\t\t})}\n\t\t\t</div>\n\t\t</Stack>\n\t);\n}\n\nAiPromptSuggestions.displayName = 'AiPromptSuggestions';\n","import type { StringsProp } from '../../../../lib/strings';\n\nexport interface AiTokenUsageStrings {\n\t/** Surface title. */\n\ttitle: string;\n\tinput: string;\n\toutput: string;\n\t/** Total number of records across all pages. */\n\ttotal: string;\n\tcost: string;\n}\n\nexport const defaultAiTokenUsageStrings: AiTokenUsageStrings = {\n\ttitle: 'Token usage',\n\tinput: 'Input',\n\toutput: 'Output',\n\ttotal: 'Total',\n\tcost: 'Estimated cost',\n};\n\nexport interface AiTokenUsageProps {\n\tmodel?: string;\n\tinputTokens: number;\n\toutputTokens: number;\n\tcost?: string;\n\tmaxTokens?: number;\n\t/** Merged onto the outermost node. */\n\tclassName?: string;\n\t/** Overrides this surface's own copy. */\n\tstrings?: StringsProp<AiTokenUsageStrings>;\n}\n","/**\n * AiTokenUsage — input + output token counts with a usage bar\n * relative to a max context window, plus optional cost estimate.\n */\nimport { useStrings } from '../../../../lib/strings';\nimport { Badge } from '../../../base/badge';\nimport { DisplayLabel, Text } from '../../../typography';\nimport { InlineStat } from '../../data-display';\nimport { Grid, Stack } from '../../../base/structure';\nimport { Number as NumberValue, Percent } from '../../../primitives';\n\nimport { defaultAiTokenUsageStrings, type AiTokenUsageProps } from './types';\n\nimport { cn } from '../../../../lib/utils';\nexport function AiTokenUsage({\n\tmodel,\n\tinputTokens,\n\toutputTokens,\n\tcost,\n\tmaxTokens,\n\tclassName,\n\tstrings: stringsProp,\n}: AiTokenUsageProps) {\n\tconst strings = useStrings(defaultAiTokenUsageStrings, stringsProp);\n\tconst total = inputTokens + outputTokens;\n\tconst pct = maxTokens ? Math.min(100, Math.round((total / maxTokens) * 100)) : 0;\n\n\t// Plain figures on the parent surface: no tile per count, no tinted cost panel,\n\t// and the Stack gap is the only space between the groups.\n\treturn (\n\t\t<Stack\n\t\t\tdata-component=\"ai-token-usage\"\n\t\t\tdata-slot=\"ai-token-usage\"\n\t\t\tclassName={cn('ai-token-usage--component', className)}\n\t\t>\n\t\t\t{!!model && (\n\t\t\t\t<div className=\"ai-token-usage--metadata flex min-w-0 justify-start\">\n\t\t\t\t\t<Badge tone=\"secondary\">{model}</Badge>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t\t{/* Three short figures share one row at any practical width, so the\n\t\t\t counts read as one set instead of wrapping two-plus-one. */}\n\t\t\t<Grid columns={3} gap=\"md\">\n\t\t\t\t{[\n\t\t\t\t\t{ label: strings.input, value: inputTokens },\n\t\t\t\t\t{ label: strings.output, value: outputTokens },\n\t\t\t\t\t{ label: strings.total, value: total },\n\t\t\t\t].map((cell) => (\n\t\t\t\t\t// `DisplayLabel` and `NumberValue` are both inline, and JSX drops\n\t\t\t\t\t// the newline between them, so bare siblings rendered as\n\t\t\t\t\t// \"Input3,240\". Stack them so the cell reads label-over-value.\n\t\t\t\t\t<Stack key={cell.label} gap=\"2xs\">\n\t\t\t\t\t\t<DisplayLabel>{cell.label}</DisplayLabel>\n\t\t\t\t\t\t<NumberValue value={cell.value} weight=\"semibold\" align=\"left\" />\n\t\t\t\t\t</Stack>\n\t\t\t\t))}\n\t\t\t</Grid>\n\t\t\t{!!maxTokens && (\n\t\t\t\t<Stack gap=\"xs\">\n\t\t\t\t\t<InlineStat\n\t\t\t\t\t\tlabel={(\n\t\t\t\t\t\t\t<span className=\"inline-flex items-center gap-space-xs\">\n\t\t\t\t\t\t\t\t<NumberValue value={total} size=\"xs\" align=\"left\" />\n\t\t\t\t\t\t\t\t<Text tag=\"span\" size=\"xs\" aria-hidden>/</Text>\n\t\t\t\t\t\t\t\t<NumberValue value={maxTokens} size=\"xs\" align=\"left\" />\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\tvalue={<Percent value={pct} scaled size=\"xs\" weight=\"semibold\" align=\"right\" />}\n\t\t\t\t\t\tvalueClassName=\"text-xs font-semibold\"\n\t\t\t\t\t/>\n\t\t\t\t\t<div className=\"h-1.5 w-full overflow-hidden rounded-full bg-muted\">\n\t\t\t\t\t\t<div className=\"h-full rounded-full bg-primary\" style={{ width: `${pct}%` }} />\n\t\t\t\t\t</div>\n\t\t\t\t</Stack>\n\t\t\t)}\n\t\t\t{!!cost && (\n\t\t\t\t<InlineStat\n\t\t\t\t\tlabel={<Text tag=\"span\" size=\"xs\" weight=\"medium\" lineHeight=\"tight\">{strings.cost}</Text>}\n\t\t\t\t\tvalue={cost}\n\t\t\t\t\tvalueClassName=\"text-sm font-bold tabular-nums\"\n\t\t\t\t/>\n\t\t\t)}\n\t\t</Stack>\n\t);\n}\n\nAiTokenUsage.displayName = 'AiTokenUsage';\n","import type { StringsProp } from '../../../../lib/strings';\n\nexport type AiFeedbackVote = 'up' | 'down' | null;\n\nexport interface AiFeedbackStrings {\n\tprompt: string;\n\tthumbsUpAria: string;\n\tthumbsDownAria: string;\n\tcommentPlaceholder: string;\n\tsubmit: string;\n\tthanks: string;\n}\n\nexport const defaultAiFeedbackStrings: AiFeedbackStrings = {\n\tprompt: 'Was this helpful?',\n\tthumbsUpAria: 'Mark as helpful',\n\tthumbsDownAria: 'Mark as not helpful',\n\tcommentPlaceholder: 'Tell us more (optional)',\n\tsubmit: 'Send feedback',\n\tthanks: 'Thanks for your feedback.',\n};\n\nexport interface AiFeedbackProps {\n\t/** Current value. Controlled. */\n\tvalue?: AiFeedbackVote;\n\tonVote?: (vote: AiFeedbackVote) => void;\n\t/** Fired when a comment is submitted. */\n\tonSubmitComment?: (comment: string, vote: AiFeedbackVote) => void;\n\tallowComment?: boolean;\n\tsubmitted?: boolean;\n\t/** Merged onto the outermost node. */\n\tclassName?: string;\n\t/** Overrides this surface's own copy. */\n\tstrings?: StringsProp<AiFeedbackStrings>;\n}\n","/**\n * AiFeedback — thumbs-up / thumbs-down voter with an optional follow-up\n * comment field. Wires into model-improvement loops: emits the vote via\n * `onVote` immediately and a comment via `onSubmitComment` when the user\n * submits the textarea. After `submitted=true` the surface is replaced with\n * a thank-you confirmation. Strings overridable for i18n.\n */\nimport { useState } from 'react';\nimport { ThumbsDown, ThumbsUp } from 'lucide-react';\nimport { Button } from '../../../base/buttons';\nimport { Textarea } from '../../../base/text-inputs';\nimport { Stack } from '../../../base/structure';\nimport { Text } from '../../../typography';\nimport { useStrings } from '../../../../lib/strings';\nimport { cn } from '../../../../lib/utils';\n\nimport {\n\tdefaultAiFeedbackStrings,\n\ttype AiFeedbackProps,\n\ttype AiFeedbackVote,\n} from './types';\nimport { toneRecipes } from '../../../../lib/tone-recipes';\nimport { interactionRecipes } from '../../../../lib/interaction-recipes';\n\nexport function AiFeedback({\n\tvalue,\n\tonVote,\n\tonSubmitComment,\n\tallowComment = true,\n\tsubmitted = false,\n\tclassName,\n\tstrings: stringsProp,\n}: AiFeedbackProps) {\n\tconst strings = useStrings(defaultAiFeedbackStrings, stringsProp);\n\tconst [internalVote, setInternalVote] = useState<AiFeedbackVote>(null);\n\tconst [comment, setComment] = useState('');\n\tconst vote = value ?? internalVote;\n\n\tconst cast = (next: AiFeedbackVote) => {\n\t\tconst resolved = vote === next ? null : next;\n\t\tif (value === undefined) setInternalVote(resolved);\n\t\tonVote?.(resolved);\n\t};\n\n\tif (submitted) {\n\t\treturn (\n\t\t\t<div\n\t\t\t\tclassName={cn('ai-feedback--component', \n\t\t\t\t\t'inline-flex items-center gap-space-md rounded-radius px-space-lg py-space-sm',\n\t\t\t\t\ttoneRecipes.success.wash,\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t<ThumbsUp className=\"size-icon-md text-success\" />\n\t\t\t\t<Text size=\"xs\" type=\"success\" weight=\"medium\">\n\t\t\t\t\t{strings.thanks}\n\t\t\t\t</Text>\n\t\t\t</div>\n\t\t);\n\t}\n\n\treturn (\n\t\t<div className={cn('ai-feedback--component inline-flex flex-col gap-space-md', className)}>\n\t\t\t<div className=\"flex items-center gap-space-md\">\n\t\t\t\t<Text size=\"xs\" type=\"secondary\">{strings.prompt}</Text>\n\t\t\t\t<Button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\ttone=\"secondary\"\n\t\t\t\t\tbuttonStyle=\"ghost\"\n\t\t\t\t\tsize=\"sm\" iconOnly\n\t\t\t\t\taria-label={strings.thumbsUpAria}\n\t\t\t\t\taria-pressed={vote === 'up'}\n\t\t\t\t\tonClick={() => cast('up')}\n\t\t\t\t\t// A vote is a toggle: pressed holds the accent fill, like every pressed toggle.\n\t\t\t\t\tclassName={vote === 'up' ? interactionRecipes.togglePressed : interactionRecipes.toggleHoverButton}\n\t\t\t\t>\n\t\t\t\t\t<ThumbsUp className=\"size-icon-md\" />\n\t\t\t\t</Button>\n\t\t\t\t<Button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\ttone=\"secondary\"\n\t\t\t\t\tbuttonStyle=\"ghost\"\n\t\t\t\t\tsize=\"sm\" iconOnly\n\t\t\t\t\taria-label={strings.thumbsDownAria}\n\t\t\t\t\taria-pressed={vote === 'down'}\n\t\t\t\t\tonClick={() => cast('down')}\n\t\t\t\t\tclassName={vote === 'down' ? interactionRecipes.togglePressed : interactionRecipes.toggleHoverButton}\n\t\t\t\t>\n\t\t\t\t\t<ThumbsDown className=\"size-icon-md\" />\n\t\t\t\t</Button>\n\t\t\t</div>\n\n\t\t\t{!!allowComment && !!vote && (\n\t\t\t\t<Stack gap=\"md\">\n\t\t\t\t\t<Textarea\n\t\t\t\t\t\tvalue={comment}\n\t\t\t\t\t\tonChange={(e) => setComment((e.target as HTMLTextAreaElement).value)}\n\t\t\t\t\t\tplaceholder={strings.commentPlaceholder}\n\t\t\t\t\t\tminRows={2}\n\t\t\t\t\t/>\n\t\t\t\t\t<Stack direction=\"horizontal\" gap=\"none\" justify=\"end\">\n\t\t\t\t\t\t<Button tone=\"primary\"\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\tonSubmitComment?.(comment, vote);\n\t\t\t\t\t\t\t\tsetComment('');\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\tdisabled={!comment.trim()}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{strings.submit}\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t</Stack>\n\t\t\t\t</Stack>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n\nAiFeedback.displayName = 'AiFeedback';\n","import type { ReactNode } from 'react';\nimport type { StringsProp } from '../../../../lib/strings';\n\nexport interface AiCitationSource {\n\t/** Stable identity for this entry. */\n\tid: string;\n\t/** Surface title. */\n\ttitle: ReactNode;\n\turl?: string;\n\tsnippet?: ReactNode;\n\tpublisher?: string;\n\tpublishedAt?: string;\n\trelevance?: number; // 0–1\n}\n\nexport interface AiCitationStrings {\n\t/** Surface title. */\n\ttitle: string;\n\tsourceCount: (n: number) => string;\n\thiddenCount: (n: number) => string;\n\texpand: string;\n\tcollapse: string;\n\tvisit: string;\n\trelevance: string;\n}\n\nexport const defaultAiCitationStrings: AiCitationStrings = {\n\ttitle: 'Sources',\n\tsourceCount: (n: number) => (n === 1 ? '1 source' : `${n} sources`),\n\thiddenCount: (n: number) => (n === 1 ? '+1 more' : `+${n} more`),\n\texpand: 'Show sources',\n\tcollapse: 'Hide sources',\n\tvisit: 'Visit',\n\trelevance: 'Relevance',\n};\n\nexport interface AiCitationProps {\n\tsources: AiCitationSource[];\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\tmaxCollapsedRows?: number;\n\t/** Merged onto the outermost node. */\n\tclassName?: string;\n\t/** Overrides this surface's own copy. */\n\tstrings?: StringsProp<AiCitationStrings>;\n}\n","/**\n * AiCitation — expandable source list for AI-grounded responses. Renders an\n * inline footnote-style header (e.g. \"3 sources\") that toggles a list of\n * source rows: title link, snippet, publisher / date, and a relevance bar.\n * Use under `AiSummaryBlock` and `AiMessageBubble` to make AI claims\n * traceable. Strings overridable for i18n.\n *\n * Note: `strings.sourceCount` is a function (single / plural form) — pass an\n * override if your locale needs more complex pluralisation.\n */\nimport { useState } from 'react';\nimport { ChevronDown, ChevronRight, ExternalLink } from 'lucide-react';\nimport { Button } from '../../../base/buttons';\nimport { Stack } from '../../../base/structure';\nimport { Number as NumberValue, Percent, SecondaryValue } from '../../../primitives';\nimport { Text } from '../../../typography';\nimport {\n\tItem,\n\tItemActions,\n\tItemContent,\n\tItemDescription,\n\tItemFooter,\n\tItemGroup,\n\tItemMedia,\n\tItemTitle,\n} from '../../../base/item';\nimport { mergeStrings } from '../../../../lib/strings';\nimport { cn } from '../../../../lib/utils';\n\nimport { defaultAiCitationStrings, type AiCitationProps, type AiCitationSource } from './types';\nimport { interactionRecipes } from '../../../../lib/interaction-recipes';\n\nexport function AiCitation({\n\tsources,\n\texpanded: expandedProp,\n\tdefaultExpanded = false,\n\tonExpandedChange,\n\tmaxCollapsedRows = 0,\n\tclassName,\n\tstrings: stringsProp,\n}: AiCitationProps) {\n\t// `sourceCount` is a function so we cannot use `useStrings` deep-merge\n\t// (the merger replaces functions wholesale, which is what we want).\n\tconst strings = mergeStrings(defaultAiCitationStrings, 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 visible = expanded ? sources : sources.slice(0, Math.max(0, maxCollapsedRows));\n\tconst hidden = sources.length - visible.length;\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t'ai-citation--component',\n\t\t\t\t'rounded-radius border border-border bg-card px-surface-xs py-surface-xs shadow-xs',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t>\n\t\t\t<Stack gap=\"lg\">\n\t\t\t\t<Button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\ttone=\"secondary\"\n\t\t\t\t\tbuttonStyle=\"ghost\"\n\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\tonClick={() => setExpanded(!expanded)}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t'ai-citation--trigger h-auto min-h-0 justify-start gap-space-sm rounded-inner px-control py-row-y',\n\t\t\t\t\t\t`text-muted-foreground ${interactionRecipes.rowHover}`,\n\t\t\t\t\t)}\n\t\t\t\t\taria-expanded={expanded}\n\t\t\t\t\taria-label={expanded ? strings.collapse : strings.expand}\n\t\t\t\t>\n\t\t\t\t\t<Text weight=\"medium\">\n\t\t\t\t\t\t{strings.title} · {strings.sourceCount(sources.length)}\n\t\t\t\t\t</Text>\n\t\t\t\t\t{expanded ? <ChevronDown className=\"size-icon-md\" /> : <ChevronRight className=\"size-icon-md\" />}\n\t\t\t\t</Button>\n\n\t\t\t\t{(expanded || maxCollapsedRows > 0) && (\n\t\t\t\t\t<ItemGroup>\n\t\t\t\t\t\t{visible.map((s, i) => (\n\t\t\t\t\t\t\t<CitationRow key={s.id} source={s} index={i + 1} strings={strings} />\n\t\t\t\t\t\t))}\n\t\t\t\t\t\t{!expanded && hidden > 0 && (\n\t\t\t\t\t\t\t<Text size=\"xs\" type=\"secondary\">\n\t\t\t\t\t\t\t\t{strings.hiddenCount(hidden)}\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</ItemGroup>\n\t\t\t\t)}\n\t\t\t</Stack>\n\t\t</div>\n\t);\n}\n\nAiCitation.displayName = 'AiCitation';\n\nfunction CitationRow({\n\tsource,\n\tindex,\n\tstrings,\n}: {\n\tsource: AiCitationSource;\n\tindex: number;\n\tstrings: ReturnType<typeof mergeStrings<typeof defaultAiCitationStrings>>;\n}) {\n\tconst relevancePct =\n\t\ttypeof source.relevance === 'number' ? Math.round(Math.max(0, Math.min(1, source.relevance)) * 100) : null;\n\n\tconst TitleEl = source.url ? 'a' : 'span';\n\tconst titleProps = source.url\n\t\t? {\n\t\t\t\thref: source.url,\n\t\t\t\ttarget: '_blank' as const,\n\t\t\t\trel: 'noopener noreferrer',\n\t\t\t}\n\t\t: {};\n\n\treturn (\n\t\t<Item variant=\"outline\" size=\"sm\" className=\"items-start px-surface-xs py-surface-xs\">\n\t\t\t<ItemMedia>\n\t\t\t\t<NumberValue\n\t\t\t\t\tvalue={index}\n\t\t\t\t\tsize=\"xs\"\n\t\t\t\t\tweight=\"semibold\"\n\t\t\t\t\ttype=\"secondary\"\n\t\t\t\t\talign=\"center\"\n\t\t\t\t\tclassName=\"inline-flex size-icon-lg shrink-0 items-center justify-center rounded-full bg-muted\"\n\t\t\t\t/>\n\t\t\t</ItemMedia>\n\t\t\t<ItemContent>\n\t\t\t\t<ItemTitle className=\"truncate\">\n\t\t\t\t\t<TitleEl\n\t\t\t\t\t\t{...titleProps}\n\t\t\t\t\t\tclassName={cn('truncate', source.url && 'hover:text-primary-accent hover:underline')}\n\t\t\t\t\t>\n\t\t\t\t\t\t{source.title}\n\t\t\t\t\t\t{!!source.url && <ExternalLink className=\"ml-1 inline size-icon-sm align-baseline\" />}\n\t\t\t\t\t</TitleEl>\n\t\t\t\t</ItemTitle>\n\t\t\t\t{!!source.snippet && <ItemDescription clamp={2}>{source.snippet}</ItemDescription>}\n\t\t\t\t{(source.publisher || source.publishedAt) && (\n\t\t\t\t\t<ItemFooter className=\"mt-1 justify-start gap-space-sm\">\n\t\t\t\t\t\t{!!source.publisher && (\n\t\t\t\t\t\t\t<Text size=\"xs\" type=\"discrete\">\n\t\t\t\t\t\t\t\t{source.publisher}\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{!!source.publisher && !!source.publishedAt && (\n\t\t\t\t\t\t\t<Text size=\"xs\" type=\"discrete\">\n\t\t\t\t\t\t\t\t·\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{!!source.publishedAt && (\n\t\t\t\t\t\t\t<SecondaryValue size=\"xs\" className=\"tabular-nums opacity-80\">\n\t\t\t\t\t\t\t\t{source.publishedAt}\n\t\t\t\t\t\t\t</SecondaryValue>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</ItemFooter>\n\t\t\t\t)}\n\t\t\t</ItemContent>\n\t\t\t{relevancePct !== null && (\n\t\t\t\t<ItemActions className=\"w-16 flex-col items-end gap-space-2xs\">\n\t\t\t\t\t<Percent value={relevancePct} scaled size=\"xs\" type=\"secondary\" weight=\"medium\" />\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName=\"h-1 w-full overflow-hidden rounded-full bg-muted\"\n\t\t\t\t\t\trole=\"progressbar\"\n\t\t\t\t\t\taria-label={strings.relevance}\n\t\t\t\t\t\taria-valuemin={0}\n\t\t\t\t\t\taria-valuemax={100}\n\t\t\t\t\t\taria-valuenow={relevancePct}\n\t\t\t\t\t>\n\t\t\t\t\t\t<div className=\"h-full rounded-full bg-primary\" style={{ width: `${relevancePct}%` }} />\n\t\t\t\t\t</div>\n\t\t\t\t</ItemActions>\n\t\t\t)}\n\t\t</Item>\n\t);\n}\n","import type { StringsProp } from '../../../../lib/strings';\n\nexport interface AiInlineCitationStrings {\n\t/** Tooltip prefix when only a number is rendered. */\n\tsourcePrefix: string;\n\t/** Aria label template — supports `{{n}}` and `{{title}}` placeholders. */\n\topenAria: string;\n}\n\nexport const defaultAiInlineCitationStrings: AiInlineCitationStrings = {\n\tsourcePrefix: 'Source',\n\topenAria: 'Open source {{n}}: {{title}}',\n};\n\nexport interface AiInlineCitationProps {\n\t/** 1-indexed citation number rendered inside the pill. */\n\tindex: number;\n\t/** Title of the cited source — used in the tooltip / aria-label. */\n\ttitle?: string;\n\t/** Optional URL — when provided, the pill renders as a link. */\n\turl?: string;\n\t/** Click handler — preferred over `url` for SPA / virtual link routing. */\n\tonSelect?: () => void;\n\t/** Merged onto the outermost node. */\n\tclassName?: string;\n\t/** Overrides this surface's own copy. */\n\tstrings?: StringsProp<AiInlineCitationStrings>;\n}\n","/**\n * AiInlineCitation — small footnote-style pill rendered inline inside AI\n * response prose. The number references a position in the parent\n * sources/AiCitation list. Hover to see the source title; click to jump.\n */\nimport { Text, TextLink } from '../../../typography';\nimport { mergeStrings } from '../../../../lib/strings';\nimport { cn } from '../../../../lib/utils';\n\nimport {\n\tdefaultAiInlineCitationStrings,\n\ttype AiInlineCitationProps,\n} from './types';\nimport { focusRecipes } from '../../../../lib/focus-recipes';\nimport { interactionRecipes } from '../../../../lib/interaction-recipes';\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 AiInlineCitation({\n\tindex,\n\ttitle,\n\turl,\n\tonSelect,\n\tclassName,\n\tstrings: stringsProp,\n}: AiInlineCitationProps) {\n\tconst strings = mergeStrings(defaultAiInlineCitationStrings, stringsProp);\n\tconst ariaLabel = interpolate(strings.openAria, {\n\t\tn: index,\n\t\ttitle: title ?? '',\n\t});\n\tconst tooltip = title ? `${strings.sourcePrefix} ${index}: ${title}` : `${strings.sourcePrefix} ${index}`;\n\n\t// Inline markers use the compact shared action geometry; the Text child\n\t// owns their numeric role independently of the surrounding prose size.\n\tconst baseCls = cn(\n\t\t'box-border inline-flex h-action-xs min-w-action-xs -translate-y-px items-center justify-center rounded-inner border-0 px-control-xs font-sans',\n\t\t'align-middle tabular-nums',\n\t\t'bg-muted text-muted-foreground',\n\t\tinteractionRecipes.rowHover,\n\t\t'transition-colors duration-150',\n\t\t`focus-visible:outline-none ${focusRecipes.edge}`,\n\t\tclassName,\n\t);\n\n\tif (url) {\n\t\treturn (\n\t\t\t<TextLink\n\t\t\t\thref={url}\n\t\t\t\tsize=\"inherit\"\n\t\t\t\tunderline={false}\n\t\t\t\ttarget=\"_blank\"\n\t\t\t\trel=\"noopener noreferrer\"\n\t\t\t\ttitle={tooltip}\n\t\t\t\taria-label={ariaLabel}\n\t\t\t\tclassName={cn('ai-inline-citation--component', baseCls)}\n\t\t\t>\n\t\t\t\t<Text tag=\"span\" size=\"xs\" weight=\"medium\" className=\"leading-none\">\n\t\t\t\t\t{index}\n\t\t\t\t</Text>\n\t\t\t</TextLink>\n\t\t);\n\t}\n\n\tif (onSelect) {\n\t\treturn (\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tonClick={onSelect}\n\t\t\t\ttitle={tooltip}\n\t\t\t\taria-label={ariaLabel}\n\t\t\t\tclassName={cn('ai-inline-citation--component', baseCls)}\n\t\t\t>\n\t\t\t\t<Text tag=\"span\" size=\"xs\" weight=\"medium\" className=\"leading-none\">\n\t\t\t\t\t{index}\n\t\t\t\t</Text>\n\t\t\t</button>\n\t\t);\n\t}\n\n\treturn (\n\t\t<span\n\t\t\ttitle={tooltip}\n\t\t\taria-label={ariaLabel}\n\t\t\tclassName={cn('ai-inline-citation--component', baseCls)}\n\t\t>\n\t\t\t<Text tag=\"span\" size=\"xs\" weight=\"medium\" className=\"leading-none\">\n\t\t\t\t{index}\n\t\t\t</Text>\n\t\t</span>\n\t);\n}\n\nAiInlineCitation.displayName = 'AiInlineCitation';\n","import type { ReactNode } from 'react';\nimport type { StringsProp } from '../../../../lib/strings';\n\nexport interface AiPackageInfoStrings {\n\tversionLabel: string;\n\tlicenseLabel: string;\n\tpublishedLabel: string;\n\thomepageAria: string;\n\thomepageLabel: string;\n\trepositoryAria: string;\n\trepositoryLabel: string;\n\tweeklyDownloadsLabel: string;\n}\n\nexport const defaultAiPackageInfoStrings: AiPackageInfoStrings = {\n\tversionLabel: 'Version',\n\tlicenseLabel: 'License',\n\tpublishedLabel: 'Published',\n\thomepageAria: 'Open homepage',\n\thomepageLabel: 'Homepage',\n\trepositoryAria: 'Open repository',\n\trepositoryLabel: 'Repository',\n\tweeklyDownloadsLabel: 'Weekly downloads',\n};\n\nexport interface AiPackageInfoProps {\n\t/** Package name (npm-style: optional `@scope/`). */\n\tname: string;\n\t/** Latest / pinned version. */\n\tversion?: string;\n\t/** Short description from the package manifest. */\n\tdescription?: ReactNode;\n\t/** SPDX-style license identifier (e.g. \"MIT\"). */\n\tlicense?: string;\n\t/** ISO date or human label of last publish. */\n\tpublishedAt?: string;\n\t/** Package homepage URL. */\n\thomepage?: string;\n\t/** Repository URL (typically GitHub). */\n\trepository?: string;\n\t/** Weekly downloads — formatted by the consumer. */\n\tweeklyDownloads?: string | number;\n\t/** Comma-separated tag list rendered as small chips. */\n\tkeywords?: ReadonlyArray<string>;\n\t/** Click handler for the whole card. */\n\tonSelect?: () => void;\n\t/** Merged onto the outermost node. */\n\tclassName?: string;\n\t/** Overrides this surface's own copy. */\n\tstrings?: StringsProp<AiPackageInfoStrings>;\n}\n","/**\n * AiPackageInfo — compact card describing an npm / library package referenced\n * by the model. Header: name + version chip; body: description + optional\n * meta (license, published date, weekly downloads) and keyword chips. Footer\n * exposes homepage / repository links when provided.\n */\nimport { ExternalLink } from 'lucide-react';\nimport { Badge } from '../../../base/badge';\nimport { Button } from '../../../base/buttons';\nimport { MonoValue, SecondaryValue } from '../../../primitives';\nimport { Text, TextLink } from '../../../typography';\nimport { useStrings } from '../../../../lib/strings';\nimport { Stack } from '../../../base/structure';\nimport { cn } from '../../../../lib/utils';\n\nimport { defaultAiPackageInfoStrings, type AiPackageInfoProps } from './types';\nimport { interactionRecipes } from '../../../../lib/interaction-recipes';\n\nexport function AiPackageInfo({\n\tname,\n\tversion,\n\tdescription,\n\tlicense,\n\tpublishedAt,\n\thomepage,\n\trepository,\n\tweeklyDownloads,\n\tkeywords,\n\tonSelect,\n\tclassName,\n\tstrings: stringsProp,\n}: AiPackageInfoProps) {\n\tconst strings = useStrings(defaultAiPackageInfoStrings, stringsProp);\n\t// The package name is the identity; a generic package glyph would only repeat it.\n\tconst bodyContent = (\n\t\t<>\n\t\t\t<div className=\"min-w-0 flex-1\">\n\t\t\t\t<Stack gap=\"dense\">\n\t\t\t\t<Stack direction=\"horizontal\" gap=\"md\" align=\"center\">\n\t\t\t\t\t<MonoValue weight=\"semibold\" className=\"truncate\">\n\t\t\t\t\t\t{name}\n\t\t\t\t\t</MonoValue>\n\t\t\t\t\t{!!version && (\n\t\t\t\t\t\t<Badge tone=\"secondary\">\n\t\t\t\t\t\t\t<MonoValue size=\"xs\" className=\"text-inherit\">v{version.replace(/^v/, '')}</MonoValue>\n\t\t\t\t\t\t</Badge>\n\t\t\t\t\t)}\n\t\t\t\t</Stack>\n\t\t\t\t{!!description && (\n\t\t\t\t\t<Text size=\"xs\" type=\"secondary\" className=\"line-clamp-2\">\n\t\t\t\t\t\t{description}\n\t\t\t\t\t</Text>\n\t\t\t\t)}\n\t\t\t\t</Stack>\n\n\t\t\t\t{(license || publishedAt || weeklyDownloads !== undefined) && (\n\t\t\t\t\t<div className=\"mt-space-md flex flex-wrap items-center gap-x-space-lg gap-y-space-xs\">\n\t\t\t\t\t\t{!!license && <MetaItem label={strings.licenseLabel} value={license} />}\n\t\t\t\t\t\t{!!publishedAt && <MetaItem label={strings.publishedLabel} value={publishedAt} />}\n\t\t\t\t\t\t{weeklyDownloads !== undefined && (\n\t\t\t\t\t\t\t<MetaItem label={strings.weeklyDownloadsLabel} value={String(weeklyDownloads)} />\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\n\t\t\t\t{!!keywords?.length && (\n\t\t\t\t\t<div className=\"mt-space-md flex flex-wrap gap-space-xs\">\n\t\t\t\t\t\t{keywords.slice(0, 6).map((keyword) => (\n\t\t\t\t\t\t\t<Badge key={keyword} tone=\"secondary\">\n\t\t\t\t\t\t\t\t{keyword}\n\t\t\t\t\t\t\t</Badge>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t</>\n\t);\n\tconst bodyClassName = 'ai-package-info--body flex w-full items-start gap-space-lg p-surface-xs text-left';\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t'ai-package-info--component block w-full 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{onSelect ? (\n\t\t\t\t<Button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\ttone=\"secondary\"\n\t\t\t\t\tbuttonStyle=\"ghost\"\n\t\t\t\t\tonClick={onSelect}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\tbodyClassName,\n\t\t\t\t\t\t`h-auto min-h-0 justify-start rounded-none whitespace-normal transition-colors ${interactionRecipes.rowHover}`,\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t{bodyContent}\n\t\t\t\t</Button>\n\t\t\t) : (\n\t\t\t\t<div className={bodyClassName}>{bodyContent}</div>\n\t\t\t)}\n\n\t\t\t{(homepage || repository) && (\n\t\t\t\t// Links continue the body's inset: no rule or tinted band, and the body's\n\t\t\t\t// bottom padding is the only space above them.\n\t\t\t\t<div className=\"ai-package-info--footer px-surface-xs pb-surface-xs\">\n\t\t\t\t\t<Stack direction=\"horizontal\" align=\"center\" gap=\"md\">\n\t\t\t\t\t\t{!!homepage && (\n\t\t\t\t\t\t\t<TextLink\n\t\t\t\t\t\t\t\thref={homepage}\n\t\t\t\t\t\t\t\tsize=\"inherit\"\n\t\t\t\t\t\t\t\tunderline={false}\n\t\t\t\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\t\t\t\trel=\"noopener noreferrer\"\n\t\t\t\t\t\t\t\tonClick={(e) => e.stopPropagation()}\n\t\t\t\t\t\t\t\taria-label={strings.homepageAria}\n\t\t\t\t\t\t\t\tclassName=\"inline-flex items-center gap-space-xs rounded-radius-xs text-muted-foreground hover:text-foreground\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<Text tag=\"span\" weight=\"medium\">\n\t\t\t\t\t\t\t\t\t{strings.homepageLabel}\n\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t<ExternalLink className=\"size-icon-sm\" />\n\t\t\t\t\t\t\t</TextLink>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{!!homepage && !!repository && (\n\t\t\t\t\t\t\t<Text tag=\"span\" size=\"xs\" type=\"secondary\" className=\"opacity-40\" aria-hidden>\n\t\t\t\t\t\t\t\t·\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{!!repository && (\n\t\t\t\t\t\t\t<TextLink\n\t\t\t\t\t\t\t\thref={repository}\n\t\t\t\t\t\t\t\tsize=\"inherit\"\n\t\t\t\t\t\t\t\tunderline={false}\n\t\t\t\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\t\t\t\trel=\"noopener noreferrer\"\n\t\t\t\t\t\t\t\tonClick={(e) => e.stopPropagation()}\n\t\t\t\t\t\t\t\taria-label={strings.repositoryAria}\n\t\t\t\t\t\t\t\tclassName=\"inline-flex items-center gap-space-xs rounded-radius-xs text-muted-foreground hover:text-foreground\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<Text tag=\"span\" weight=\"medium\">\n\t\t\t\t\t\t\t\t\t{strings.repositoryLabel}\n\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t<ExternalLink className=\"size-icon-sm\" />\n\t\t\t\t\t\t\t</TextLink>\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\nAiPackageInfo.displayName = 'AiPackageInfo';\n\nfunction MetaItem({ label, value }: { label: string; value: string }) {\n\treturn (\n\t\t<div className=\"inline-flex items-baseline gap-space-xs\">\n\t\t\t<Text size=\"xs\" type=\"discrete\">\n\t\t\t\t{label}\n\t\t\t</Text>\n\t\t\t<SecondaryValue size=\"xs\" weight=\"medium\" className=\"tabular-nums\">\n\t\t\t\t{value}\n\t\t\t</SecondaryValue>\n\t\t</div>\n\t);\n}\n","import type { LucideIcon } from 'lucide-react';\nimport type { ComponentProps, ReactNode } from 'react';\nimport type { RowDensity } from '../../../../lib/row-recipes';\nimport type { StringsProp } from '../../../../lib/strings';\n\nexport type AiFileTreeNodeKind = 'directory' | 'file';\n\nexport type AiFileTreeChangeStatus = 'added' | 'modified' | 'removed' | 'renamed';\n\nexport interface AiFileTreeNode {\n\t/** Stable identity, unique throughout the hierarchy. */\n\tid: string;\n\t/** Display name. */\n\tname: string;\n\tkind: AiFileTreeNodeKind;\n\t/** Children — only meaningful for directories. */\n\tchildren?: ReadonlyArray<AiFileTreeNode>;\n\t/** Custom icon override (file kinds, etc.). */\n\ticon?: LucideIcon;\n\t/** Diff status — drives the semantic icon color and trailing Badge. */\n\tstatus?: AiFileTreeChangeStatus;\n\t/** Trailing slot — badge, line count, etc. */\n\ttrailing?: ReactNode;\n\t/** Default-expanded state for directories. */\n\tdefaultExpanded?: boolean;\n /** Disables this entry and all descendants. */\n disabled?: boolean;\n}\n\nexport interface AiFileTreeStrings {\n /** Accessible hierarchy name; aria-label/aria-labelledby can override it. */\n treeAria?: string;\n\texpandAria: string;\n\tcollapseAria: string;\n\tstatusLabels: Record<AiFileTreeChangeStatus, string>;\n}\n\nexport const defaultAiFileTreeStrings: AiFileTreeStrings = {\n treeAria: 'Files',\n\texpandAria: 'Expand directory',\n\tcollapseAria: 'Collapse directory',\n\tstatusLabels: {\n\t\tadded: 'A',\n\t\tmodified: 'M',\n\t\tremoved: 'D',\n\t\trenamed: 'R',\n\t},\n};\n\nexport interface AiFileTreeProps extends Omit<ComponentProps<'div'>, 'children' | 'onSelect'> {\n\t/** Root nodes — typically one entry but the API accepts multiple. */\n\tnodes: ReadonlyArray<AiFileTreeNode>;\n\t/** Selected file id — drives the active row state. Controlled. */\n\tselectedId?: string;\n\t/** Click handler — fires for files only by default. */\n\tonSelect?: (node: AiFileTreeNode) => void;\n\t/** Hide diff status badges; semantic icon colors remain visible. */\n\thideStatusLabels?: boolean;\n\t/** Indent width per nesting level (px). Omit for the shared token-backed hierarchy inset. */\n\tindent?: number;\n /** Vertical rhythm; compact by default. */\n density?: RowDensity;\n /** Disables the entire hierarchy. */\n disabled?: boolean;\n /** Controlled directory expansion. */\n expandedIds?: readonly string[];\n /** Initial expansion; otherwise each directory's defaultExpanded is respected. */\n defaultExpandedIds?: readonly string[];\n /** Expansion request, independent of file selection. */\n onExpandedIdsChange?: (ids: string[], node: AiFileTreeNode) => void;\n\t/** Merged onto the outermost node. */\n\tclassName?: string;\n\t/** Overrides this surface's own copy. */\n\tstrings?: StringsProp<AiFileTreeStrings>;\n}\n","/** File-change presentation on the public keyboard hierarchy; framing belongs to the caller. */\nimport { useMemo, useState } from 'react';\nimport { File, FileCode, FileText, Folder, FolderOpen, type LucideIcon } from 'lucide-react';\nimport { Tree, type TreeNode } from '../../../base/tree';\nimport { Badge } from '../../../base/badge';\nimport { Stack } from '../../../base/structure';\nimport { MonoValue, SecondaryValue } from '../../../primitives';\nimport { useStrings } from '../../../../lib/strings';\nimport { cn } from '../../../../lib/utils';\nimport { defaultAiFileTreeStrings, type AiFileTreeChangeStatus, type AiFileTreeNode, type AiFileTreeProps } from './types';\n\nconst statusTones = { added: 'success', modified: 'warning', removed: 'destructive', renamed: 'info' } as const;\nconst statusIconClasses: Record<AiFileTreeChangeStatus, string> = {\n added: 'text-success', modified: 'text-warning-accent', removed: 'text-destructive', renamed: 'text-info',\n};\nfunction pickFileIcon(name: string): LucideIcon {\n const ext = name.split('.').pop()?.toLowerCase() ?? '';\n if (['ts', 'tsx', 'js', 'jsx', 'mjs', 'cjs', 'json', 'css', 'scss', 'html', 'sh', 'py', 'rs', 'go'].includes(ext)) return FileCode;\n if (['md', 'mdx', 'txt'].includes(ext)) return FileText;\n return File;\n}\nfunction initialExpansion(nodes: readonly AiFileTreeNode[], depth = 0): string[] {\n return nodes.flatMap(node => [\n ...(node.kind === 'directory' && (node.defaultExpanded ?? depth < 1) ? [node.id] : []),\n ...initialExpansion(node.children ?? [], depth + 1),\n ]);\n}\nexport function AiFileTree({\n nodes, selectedId, onSelect, hideStatusLabels = false, indent, density = 'compact', disabled,\n expandedIds, defaultExpandedIds, onExpandedIdsChange, className, strings: stringsProp, ...props\n}: AiFileTreeProps) {\n const strings = useStrings(defaultAiFileTreeStrings, stringsProp);\n const [localExpanded, setLocalExpanded] = useState(() => defaultExpandedIds ?? initialExpansion(nodes));\n const expanded = expandedIds ?? localExpanded;\n const items = useMemo(() => {\n function map(nodes: readonly AiFileTreeNode[]): TreeNode<AiFileTreeNode>[] {\n return nodes.map(node => {\n const directory = node.kind === 'directory';\n const Icon = node.icon ?? (directory ? expanded.includes(node.id) ? FolderOpen : Folder : pickFileIcon(node.name));\n return {\n value: node.id, label: node.name, data: node, disabled: node.disabled,\n hasChildren: directory, children: directory ? map(node.children ?? []) : undefined,\n icon: <Icon aria-hidden=\"true\" className={cn('size-icon', node.status && statusIconClasses[node.status])} />,\n trailing: <Stack direction=\"horizontal\" gap=\"xs\" align=\"center\" className=\"shrink-0\">\n {node.status && !hideStatusLabels && <Badge tone={statusTones[node.status]} size=\"sm\" title={node.status}>{strings.statusLabels[node.status]}</Badge>}\n {node.trailing != null && <SecondaryValue size=\"xs\" className=\"tabular-nums\">{node.trailing}</SecondaryValue>}\n </Stack>,\n };\n });\n }\n return map(nodes);\n }, [nodes, expanded, hideStatusLabels, strings.statusLabels]);\n return <Tree {...props} aria-label={props['aria-label'] ?? strings.treeAria} items={items} selectedValues={selectedId === undefined ? [] : [selectedId]}\n expandedValues={expanded} branchActivation=\"toggle\" density={density} disabled={disabled} indent={indent}\n strings={{ expand: label => `${strings.expandAria}: ${label}`, collapse: label => `${strings.collapseAria}: ${label}` }}\n onExpandedValuesChange={(values, node) => {\n if (expandedIds === undefined) setLocalExpanded(values);\n onExpandedIdsChange?.(values, node.data!);\n }}\n onSelectedValuesChange={(_values, node) => { if (node.data?.kind === 'file') onSelect?.(node.data); }}\n renderLabel={node => <MonoValue size=\"inherit\" weight=\"regular\" className={cn('ai-file-tree--name text-inherit wrap-anywhere', node.data?.status === 'removed' && 'line-through')}>{node.label}</MonoValue>}\n className={cn('ai-file-tree--component', className)} />;\n}\nAiFileTree.displayName = 'AiFileTree';\n"],"mappings":"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"}
|