themelia-react-ui 2.0.3 → 2.0.5

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.
Files changed (648) hide show
  1. package/CHANGELOG.md +185 -0
  2. package/README.md +168 -36
  3. package/dist/{accordion-Cjb6sx0G.js → accordion-B9MHG0cT.js} +11 -11
  4. package/dist/accordion-B9MHG0cT.js.map +1 -0
  5. package/dist/action-menu-Dr8K-ghE.js +284 -0
  6. package/dist/action-menu-Dr8K-ghE.js.map +1 -0
  7. package/dist/{affordance-geometry.generated-tF36bREk.js → affordance-geometry.generated-P-aVJisu.js} +42 -36
  8. package/dist/affordance-geometry.generated-P-aVJisu.js.map +1 -0
  9. package/dist/{ai-artifact-DvTwDVyL.js → ai-artifact-C58tQcBy.js} +387 -350
  10. package/dist/ai-artifact-C58tQcBy.js.map +1 -0
  11. package/dist/app-shell-B_IuNWOo.js +321 -0
  12. package/dist/app-shell-B_IuNWOo.js.map +1 -0
  13. package/dist/{attachment-BxDfL2mw.js → attachment-Dg_69lPS.js} +9 -9
  14. package/dist/{attachment-BxDfL2mw.js.map → attachment-Dg_69lPS.js.map} +1 -1
  15. package/dist/{auth-BGua8ouh.js → auth-DTkkshS8.js} +44 -47
  16. package/dist/auth-DTkkshS8.js.map +1 -0
  17. package/dist/{avatar-DAPlDvhJ.js → avatar-CeZaFmNH.js} +8 -8
  18. package/dist/avatar-CeZaFmNH.js.map +1 -0
  19. package/dist/{badge-HpFqoqSY.js → badge-xIiV_E7f.js} +5 -5
  20. package/dist/{badge-HpFqoqSY.js.map → badge-xIiV_E7f.js.map} +1 -1
  21. package/dist/base/accordion.js +1 -1
  22. package/dist/base/action-menu.js +1 -1
  23. package/dist/base/attachment.js +1 -1
  24. package/dist/base/avatar.js +1 -1
  25. package/dist/base/badge.js +1 -1
  26. package/dist/base/batch-action-bar.js +1 -1
  27. package/dist/base/buttons.js +1 -1
  28. package/dist/base/cards.js +2 -2
  29. package/dist/base/carousel.js +3 -3
  30. package/dist/base/cascader.js +2 -372
  31. package/dist/base/chart.js +1 -1
  32. package/dist/base/choice-inputs.js +2 -2
  33. package/dist/base/code-block.js +1 -1
  34. package/dist/base/combobox.js +2 -2
  35. package/dist/base/command.js +1 -1
  36. package/dist/base/copyable.js +1 -1
  37. package/dist/base/date-pickers.js +2 -2
  38. package/dist/base/display.js +6 -6
  39. package/dist/base/feedback.js +3 -3
  40. package/dist/base/forms-numeric.js +1 -1
  41. package/dist/base/forms.js +3 -3
  42. package/dist/base/inline-edit.js +10 -10
  43. package/dist/base/item.js +1 -1
  44. package/dist/base/media-gallery.js +1 -1
  45. package/dist/base/metadata-list.js +1 -1
  46. package/dist/base/navigation.js +7 -7
  47. package/dist/base/popover-menu.js +1 -1
  48. package/dist/base/popover.js +1 -1
  49. package/dist/base/qr-code.js +1 -1
  50. package/dist/base/repeaters.js +12 -12
  51. package/dist/base/repeaters.js.map +1 -1
  52. package/dist/base/sheet.js +1 -1
  53. package/dist/base/sidebar.js +2 -2
  54. package/dist/base/signature-pad.js +7 -7
  55. package/dist/base/signature-pad.js.map +1 -1
  56. package/dist/base/skeleton.js +1 -1
  57. package/dist/base/spinner.js +4 -4
  58. package/dist/base/structure.js +1 -1
  59. package/dist/base/table.js +1 -1
  60. package/dist/base/text-inputs.js +2 -2
  61. package/dist/base/toaster.js +36 -36
  62. package/dist/base/toaster.js.map +1 -1
  63. package/dist/base/tree.js +1 -1
  64. package/dist/base/upload-queue.js +1 -1
  65. package/dist/base/upload.js +3 -3
  66. package/dist/base/value-inputs.js +1 -1
  67. package/dist/{batch-action-bar-DnUJ21NQ.js → batch-action-bar-Cb8cuvyy.js} +6 -6
  68. package/dist/batch-action-bar-Cb8cuvyy.js.map +1 -0
  69. package/dist/blocks/admin.js +23 -23
  70. package/dist/blocks/admin.js.map +1 -1
  71. package/dist/blocks/ai.js +230 -216
  72. package/dist/blocks/ai.js.map +1 -1
  73. package/dist/blocks/analytics/usage-card.js +1 -1
  74. package/dist/blocks/analytics.js +326 -307
  75. package/dist/blocks/analytics.js.map +1 -1
  76. package/dist/blocks/collaboration.js +1 -1
  77. package/dist/blocks/commerce/receipt.js +1 -1
  78. package/dist/blocks/commerce.js +1247 -1169
  79. package/dist/blocks/commerce.js.map +1 -1
  80. package/dist/blocks/data-display.js +2 -2
  81. package/dist/blocks/onboarding.js +6 -6
  82. package/dist/blocks/onboarding.js.map +1 -1
  83. package/dist/blocks/planning.js +11 -11
  84. package/dist/blocks/timelines.js +1 -1
  85. package/dist/{breadcrumbs-C-oqs1sQ.js → breadcrumbs-J-K2kl4c.js} +6 -6
  86. package/dist/{breadcrumbs-C-oqs1sQ.js.map → breadcrumbs-J-K2kl4c.js.map} +1 -1
  87. package/dist/{button-DVzspB_G.js → button-S2Cubiiz.js} +3 -3
  88. package/dist/button-S2Cubiiz.js.map +1 -0
  89. package/dist/{buttons-DPZekJFu.js → buttons-BedGfygC.js} +16 -16
  90. package/dist/buttons-BedGfygC.js.map +1 -0
  91. package/dist/cards-rNX1M4Xn.js +69 -0
  92. package/dist/cards-rNX1M4Xn.js.map +1 -0
  93. package/dist/cascader-B1MiqkBq.js +439 -0
  94. package/dist/cascader-B1MiqkBq.js.map +1 -0
  95. package/dist/chart-Darg_0Kv.js +162 -0
  96. package/dist/chart-Darg_0Kv.js.map +1 -0
  97. package/dist/{checkbox-AWIhNhmo.js → checkbox-fflqmODR.js} +9 -5
  98. package/dist/checkbox-fflqmODR.js.map +1 -0
  99. package/dist/choice-inputs-zUgBZfE4.js +777 -0
  100. package/dist/choice-inputs-zUgBZfE4.js.map +1 -0
  101. package/dist/{code-block-DeneBJR_.js → code-block-BzmM9Eig.js} +9 -9
  102. package/dist/code-block-BzmM9Eig.js.map +1 -0
  103. package/dist/{collapsible-C-_l4hpy.js → collapsible-BkAI_XD4.js} +5 -5
  104. package/dist/{collapsible-C-_l4hpy.js.map → collapsible-BkAI_XD4.js.map} +1 -1
  105. package/dist/{collection-content-By56pLog.js → collection-content-gDh1v6O4.js} +3 -3
  106. package/dist/{collection-content-By56pLog.js.map → collection-content-gDh1v6O4.js.map} +1 -1
  107. package/dist/combobox-BEx0vJgF.js +362 -0
  108. package/dist/combobox-BEx0vJgF.js.map +1 -0
  109. package/dist/{combobox-Dxo2fAYQ.js → combobox-BwzoXFSG.js} +254 -247
  110. package/dist/combobox-BwzoXFSG.js.map +1 -0
  111. package/dist/{command-C25VMRII.js → command-CrlPIL6m.js} +12 -12
  112. package/dist/command-CrlPIL6m.js.map +1 -0
  113. package/dist/{comments-DD0DUPwJ.js → comments-Dmpp0YIc.js} +380 -379
  114. package/dist/comments-Dmpp0YIc.js.map +1 -0
  115. package/dist/components/base/action-menu/action-menu.d.ts +9 -1
  116. package/dist/components/base/buttons/button-group.recipes.d.ts +2 -2
  117. package/dist/components/base/cards/card.recipes.d.ts +16 -7
  118. package/dist/components/base/cards/partials/card-primitives.d.ts +9 -2
  119. package/dist/components/base/cards/partials/smart-card-header-row.d.ts +3 -1
  120. package/dist/components/base/cards/smart-card.types.d.ts +11 -7
  121. package/dist/components/base/cascader/cascader-panel.d.ts +76 -0
  122. package/dist/components/base/chart/chart.d.ts +6 -1
  123. package/dist/components/base/choice-inputs/checkbox.d.ts +7 -2
  124. package/dist/components/base/choice-inputs/choice-types.d.ts +1 -1
  125. package/dist/components/base/choice-inputs/switch-card.d.ts +7 -0
  126. package/dist/components/base/choice-inputs/toggle-field.d.ts +7 -0
  127. package/dist/components/base/combobox/index.d.ts +4 -2
  128. package/dist/components/base/date-pickers/datepicker.types.d.ts +7 -0
  129. package/dist/components/base/feedback/alert.d.ts +1 -1
  130. package/dist/components/base/forms/controlled-form-field.d.ts +6 -6
  131. package/dist/components/base/forms/form-field.d.ts +5 -3
  132. package/dist/components/base/forms/form-sizing.d.ts +7 -7
  133. package/dist/components/base/forms/index.d.ts +1 -0
  134. package/dist/components/base/forms/server-errors.d.ts +16 -0
  135. package/dist/components/base/forms/workflow.d.ts +11 -2
  136. package/dist/components/base/forms-numeric/coordinates-input.d.ts +4 -0
  137. package/dist/components/base/metadata-list/metadata-list.d.ts +3 -1
  138. package/dist/components/base/navigation/dropdown-menu.d.ts +1 -1
  139. package/dist/components/base/navigation/page-header/page-header-commands.d.ts +14 -7
  140. package/dist/components/base/navigation/page-header/page-header.d.ts +13 -4
  141. package/dist/components/base/popover/popover.d.ts +3 -3
  142. package/dist/components/base/popover/popover.recipes.d.ts +10 -6
  143. package/dist/components/base/sheet/sheet.d.ts +2 -0
  144. package/dist/components/base/sidebar/index.d.ts +1 -1
  145. package/dist/components/base/sidebar/sidebar.d.ts +27 -5
  146. package/dist/components/base/structure/composition.recipes.d.ts +17 -0
  147. package/dist/components/base/text-inputs/hooks/use-form-field-state.d.ts +7 -2
  148. package/dist/components/base/text-inputs/input.d.ts +4 -2
  149. package/dist/components/base/text-inputs/textarea.d.ts +4 -2
  150. package/dist/components/base/toaster/index.d.ts +1 -0
  151. package/dist/components/base/value-inputs/date-time-input.d.ts +2 -1
  152. package/dist/components/base/value-inputs/slider.d.ts +5 -1
  153. package/dist/components/base/value-inputs/tags-input.d.ts +5 -1
  154. package/dist/components/blocks/ai/ai-file-tree/types.d.ts +1 -1
  155. package/dist/components/blocks/ai/ai-tool-call/types.d.ts +3 -1
  156. package/dist/components/blocks/ai/ai.strings.d.ts +2 -0
  157. package/dist/components/blocks/analytics/metric-comparison/metric-comparison.d.ts +2 -0
  158. package/dist/components/blocks/analytics/usage-card/usage-card.strings.d.ts +2 -0
  159. package/dist/components/blocks/commerce/cart-summary/cart-summary.d.ts +1 -1
  160. package/dist/components/blocks/commerce/cart-summary/types.d.ts +3 -1
  161. package/dist/components/blocks/commerce/discount-stack/discount-stack.d.ts +1 -1
  162. package/dist/components/blocks/commerce/discount-stack/types.d.ts +3 -1
  163. package/dist/components/blocks/commerce/fulfillment-group/fulfillment-group.d.ts +1 -1
  164. package/dist/components/blocks/commerce/fulfillment-group/types.d.ts +11 -2
  165. package/dist/components/blocks/commerce/index.d.ts +7 -6
  166. package/dist/components/blocks/commerce/inventory-section/inventory-section.d.ts +1 -1
  167. package/dist/components/blocks/commerce/inventory-section/types.d.ts +7 -2
  168. package/dist/components/blocks/commerce/invoice-header/index.d.ts +2 -1
  169. package/dist/components/blocks/commerce/invoice-header/invoice-header.d.ts +1 -1
  170. package/dist/components/blocks/commerce/invoice-header/types.d.ts +20 -6
  171. package/dist/components/blocks/commerce/invoice-line-items/invoice-line-items.d.ts +1 -1
  172. package/dist/components/blocks/commerce/invoice-line-items/types.d.ts +24 -7
  173. package/dist/components/blocks/commerce/invoice-mini/index.d.ts +2 -1
  174. package/dist/components/blocks/commerce/invoice-mini/types.d.ts +7 -1
  175. package/dist/components/blocks/commerce/order-customer/order-customer.d.ts +1 -1
  176. package/dist/components/blocks/commerce/order-customer/types.d.ts +9 -1
  177. package/dist/components/blocks/commerce/refund-status/refund-status.d.ts +1 -1
  178. package/dist/components/blocks/commerce/refund-status/types.d.ts +3 -1
  179. package/dist/components/blocks/commerce/shipment-tracking/shipment-tracking.d.ts +1 -1
  180. package/dist/components/blocks/commerce/shipment-tracking/types.d.ts +3 -1
  181. package/dist/components/blocks/commerce/tax-breakdown/tax-breakdown.d.ts +1 -1
  182. package/dist/components/blocks/commerce/tax-breakdown/types.d.ts +3 -1
  183. package/dist/components/features/activities/activities.types.d.ts +8 -2
  184. package/dist/components/features/activities/partials/activity-marker.d.ts +7 -3
  185. package/dist/components/features/activities/partials/activity-row.d.ts +24 -0
  186. package/dist/components/features/event-calendar/colors.d.ts +2 -2
  187. package/dist/components/features/event-calendar/event-calendar.types.d.ts +4 -0
  188. package/dist/components/features/filters/facets/select-facet.d.ts +2 -1
  189. package/dist/components/features/filters/filters.strings.d.ts +4 -0
  190. package/dist/components/features/filters/filters.types.d.ts +3 -0
  191. package/dist/components/features/filters/partials/filter-editor-header.d.ts +16 -0
  192. package/dist/components/features/filters/partials/filter-popover-content.d.ts +1 -1
  193. package/dist/components/features/filters/partials/nested-filter-options.d.ts +21 -0
  194. package/dist/components/features/filters/partials/regular-filter-content.d.ts +2 -1
  195. package/dist/components/features/filters/utils/filter-utils.d.ts +21 -3
  196. package/dist/components/features/global-search/global-search.types.d.ts +2 -0
  197. package/dist/components/features/global-search/partials/global-search-input.d.ts +10 -0
  198. package/dist/components/features/global-search/partials/global-search-result-row.d.ts +7 -1
  199. package/dist/components/features/media-library/media-library.strings.d.ts +2 -0
  200. package/dist/components/features/media-library/media-library.types.d.ts +14 -4
  201. package/dist/components/features/media-library/partials/media-library-partials.d.ts +1 -1
  202. package/dist/components/features/products/components/product-options-matrix.d.ts +1 -1
  203. package/dist/components/features/products/components/product-variant-editor.d.ts +1 -1
  204. package/dist/components/features/products/components/product-variants-manager.d.ts +1 -1
  205. package/dist/components/features/products/products.strings.d.ts +9 -1
  206. package/dist/components/features/products/products.types.d.ts +43 -6
  207. package/dist/components/features/resource/resource.d.ts +5 -1
  208. package/dist/components/features/resource/resource.types.d.ts +12 -1
  209. package/dist/components/features/rich-text-editor/partials/image-uploads.d.ts +1 -1
  210. package/dist/components/features/rich-text-editor/rich-text-editor.recipes.d.ts +12 -2
  211. package/dist/components/features/table/partials/resource-cell.d.ts +22 -5
  212. package/dist/components/features/table/table.types.d.ts +1 -1
  213. package/dist/components/layout/app-shell/app-shell.types.d.ts +35 -6
  214. package/dist/components/layout/app-shell/index.d.ts +1 -1
  215. package/dist/components/layout/app-shell/shell-regions.d.ts +27 -0
  216. package/dist/components/layout/app-shell/sidebar-inset-layout.d.ts +1 -1
  217. package/dist/components/layout/app-shell/stacked-layout.d.ts +1 -1
  218. package/dist/components/layout/app-shell/topbar-sidebar-layout.d.ts +1 -1
  219. package/dist/components/layout/containers/two-column-layout.d.ts +2 -0
  220. package/dist/components/layout/header/header.recipes.d.ts +6 -0
  221. package/dist/components/layout/header/header.types.d.ts +6 -6
  222. package/dist/components/layout/navigation/section-nav/section-nav.d.ts +5 -0
  223. package/dist/components/layout/page/index.d.ts +2 -1
  224. package/dist/components/layout/page/page.d.ts +1 -0
  225. package/dist/components/layout/page/page.strings.d.ts +11 -0
  226. package/dist/components/layout/page/page.types.d.ts +69 -17
  227. package/dist/components/layout/page/partials/page-header.d.ts +1 -1
  228. package/dist/components/layout/settings/settings.d.ts +9 -2
  229. package/dist/components/layout/sidebar/app-sidebar.d.ts +1 -1
  230. package/dist/components/layout/sidebar/components/sidebar-grouped-navigation.d.ts +1 -1
  231. package/dist/components/layout/sidebar/components/sidebar-navigation.d.ts +1 -1
  232. package/dist/components/layout/sidebar/index.d.ts +2 -1
  233. package/dist/components/layout/sidebar/sidebar-navigation-rail.d.ts +36 -0
  234. package/dist/components/layout/sidebar/sidebar.context.d.ts +5 -7
  235. package/dist/components/layout/sidebar/sidebar.types.d.ts +48 -10
  236. package/dist/components/layout/sidebar/sidebar.utils.d.ts +9 -1
  237. package/dist/components/layout/workspace/workspace.types.d.ts +8 -1
  238. package/dist/components/typography/text.styles.d.ts +26 -1
  239. package/dist/components/ui/alert-dialog.d.ts +2 -2
  240. package/dist/components/ui/combobox.d.ts +1 -1
  241. package/dist/components/ui/dialog.d.ts +2 -2
  242. package/dist/components/ui/overlay-layer.d.ts +18 -0
  243. package/dist/components/ui/sheet.d.ts +5 -1
  244. package/dist/components/ui/sidebar-state.d.ts +82 -0
  245. package/dist/components/ui/sidebar.d.ts +5 -17
  246. package/dist/composition.recipes-COdiFhxB.js +19 -0
  247. package/dist/composition.recipes-COdiFhxB.js.map +1 -0
  248. package/dist/containers-CIxwbZt5.js +112 -0
  249. package/dist/containers-CIxwbZt5.js.map +1 -0
  250. package/dist/{control-group-recipes-DBXmfh2E.js → control-group-recipes-fMuFo0H7.js} +6 -6
  251. package/dist/control-group-recipes-fMuFo0H7.js.map +1 -0
  252. package/dist/{copyable-ClBuk_UK.js → copyable-DIznBqiT.js} +7 -7
  253. package/dist/{copyable-ClBuk_UK.js.map → copyable-DIznBqiT.js.map} +1 -1
  254. package/dist/{data-display-DT_khPl_.js → data-display-BdgCAw8T.js} +277 -285
  255. package/dist/data-display-BdgCAw8T.js.map +1 -0
  256. package/dist/{date-DCrsDTZc.js → date-Cq8ioE4o.js} +5 -5
  257. package/dist/{date-DCrsDTZc.js.map → date-Cq8ioE4o.js.map} +1 -1
  258. package/dist/{date-picker-B2K3ucWn.js → date-picker-RlIzKom_.js} +501 -480
  259. package/dist/date-picker-RlIzKom_.js.map +1 -0
  260. package/dist/date-pickers-DY-CpXS1.js +179 -0
  261. package/dist/date-pickers-DY-CpXS1.js.map +1 -0
  262. package/dist/{display-hAc1HjpI.js → display-KsZLw9Ov.js} +9 -9
  263. package/dist/{display-hAc1HjpI.js.map → display-KsZLw9Ov.js.map} +1 -1
  264. package/dist/dropdown-menu-CLs8Lihj.js +194 -0
  265. package/dist/dropdown-menu-CLs8Lihj.js.map +1 -0
  266. package/dist/features/activities.js +302 -253
  267. package/dist/features/activities.js.map +1 -1
  268. package/dist/features/ai-chat.js +15 -14
  269. package/dist/features/ai-chat.js.map +1 -1
  270. package/dist/features/appointment-calendar.js +222 -220
  271. package/dist/features/appointment-calendar.js.map +1 -1
  272. package/dist/features/async-preview.js +11 -10
  273. package/dist/features/async-preview.js.map +1 -1
  274. package/dist/features/combobox.js +1 -1
  275. package/dist/features/comments.js +1 -1
  276. package/dist/features/data-view.js +13 -13
  277. package/dist/features/data-view.js.map +1 -1
  278. package/dist/features/email-composer.js +249 -249
  279. package/dist/features/email-composer.js.map +1 -1
  280. package/dist/features/event-calendar.js +264 -269
  281. package/dist/features/event-calendar.js.map +1 -1
  282. package/dist/features/filters.js +1 -1
  283. package/dist/features/global-search.js +167 -138
  284. package/dist/features/global-search.js.map +1 -1
  285. package/dist/features/kanban.js +6 -7
  286. package/dist/features/kanban.js.map +1 -1
  287. package/dist/features/map.js +269 -260
  288. package/dist/features/map.js.map +1 -1
  289. package/dist/features/media-library.js +827 -777
  290. package/dist/features/media-library.js.map +1 -1
  291. package/dist/features/mentions.js +1 -1
  292. package/dist/features/overlays.js +1 -1
  293. package/dist/features/products.js +1246 -1169
  294. package/dist/features/products.js.map +1 -1
  295. package/dist/features/questionnaire.js +13 -13
  296. package/dist/features/questionnaire.js.map +1 -1
  297. package/dist/features/resource-assignment.js +8 -8
  298. package/dist/features/resource.js +127 -123
  299. package/dist/features/resource.js.map +1 -1
  300. package/dist/features/rich-text-editor.js +2 -2
  301. package/dist/features/schema-form.js +254 -253
  302. package/dist/features/schema-form.js.map +1 -1
  303. package/dist/features/suggestions.js +3 -3
  304. package/dist/features/sync.js +3 -3
  305. package/dist/features/table.js +1 -1
  306. package/dist/features/theme-tweaker.js +95 -96
  307. package/dist/features/theme-tweaker.js.map +1 -1
  308. package/dist/{feedback-BYIhtitP.js → feedback-Dm4izqFn.js} +81 -80
  309. package/dist/feedback-Dm4izqFn.js.map +1 -0
  310. package/dist/{field-affordance-recipes-DZhnIL_Y.js → field-affordance-recipes-DWcNcOjh.js} +4 -4
  311. package/dist/field-affordance-recipes-DWcNcOjh.js.map +1 -0
  312. package/dist/{filters-DJVAveHA.js → filters-DzgSJpMK.js} +693 -645
  313. package/dist/filters-DzgSJpMK.js.map +1 -0
  314. package/dist/{form-field-CwH9y77i.js → form-field-BriWAXyg.js} +14 -8
  315. package/dist/form-field-BriWAXyg.js.map +1 -0
  316. package/dist/{form-sizing-BdP_Mf5p.js → form-sizing-Bs2qFUeE.js} +4 -4
  317. package/dist/form-sizing-Bs2qFUeE.js.map +1 -0
  318. package/dist/forms-C0RGnJTe.js +216 -0
  319. package/dist/forms-C0RGnJTe.js.map +1 -0
  320. package/dist/{forms-numeric-B_jraJaQ.js → forms-numeric-DIhghX1Q.js} +295 -291
  321. package/dist/forms-numeric-DIhghX1Q.js.map +1 -0
  322. package/dist/{header-BSfIEWbI.js → header-DMMxG__r.js} +67 -63
  323. package/dist/header-DMMxG__r.js.map +1 -0
  324. package/dist/header.recipes-BigdJjw1.js +6 -0
  325. package/dist/header.recipes-BigdJjw1.js.map +1 -0
  326. package/dist/hooks/useFormErrors.d.ts +1 -1
  327. package/dist/{hooks-ClH9thn4.js → hooks-DB6CJ4MR.js} +26 -14
  328. package/dist/hooks-DB6CJ4MR.js.map +1 -0
  329. package/dist/{icon-badge-DYKIwvOV.js → icon-badge-DZF-YjQp.js} +4 -4
  330. package/dist/{icon-badge-DYKIwvOV.js.map → icon-badge-DZF-YjQp.js.map} +1 -1
  331. package/dist/index.js +4 -5
  332. package/dist/input-CvyDQlY7.js +289 -0
  333. package/dist/input-CvyDQlY7.js.map +1 -0
  334. package/dist/input-DMBwAZmr.js +21 -0
  335. package/dist/input-DMBwAZmr.js.map +1 -0
  336. package/dist/item-DjCcM18E.js +277 -0
  337. package/dist/item-DjCcM18E.js.map +1 -0
  338. package/dist/layout/app-shell.js +1 -1
  339. package/dist/layout/auth.js +1 -1
  340. package/dist/layout/containers.js +1 -1
  341. package/dist/layout/header.js +1 -1
  342. package/dist/layout/hooks.js +1 -1
  343. package/dist/layout/navigation.js +1 -1
  344. package/dist/layout/page.js +2 -2
  345. package/dist/layout/settings.js +1 -1
  346. package/dist/layout/sidebar.js +3 -3
  347. package/dist/layout/workspace.js +1 -1
  348. package/dist/layout.js +11 -11
  349. package/dist/lib/affordance-geometry.generated.d.ts +41 -35
  350. package/dist/lib/control-group-recipes.d.ts +5 -5
  351. package/dist/lib/field-affordance-recipes.d.ts +2 -2
  352. package/dist/lib/motion-recipes.d.ts +3 -0
  353. package/dist/lib/navigation-row-recipes.d.ts +7 -7
  354. package/dist/lib/overlay-anatomy-recipes.d.ts +3 -3
  355. package/dist/lib/portal-recipes.d.ts +3 -0
  356. package/dist/lib/token-merge.generated.d.ts +13 -10
  357. package/dist/lib/ui-provider/types.d.ts +1 -1
  358. package/dist/lib/utils.js +1 -1
  359. package/dist/map-demo-tile.svg +1 -1
  360. package/dist/{media-gallery-3zIVLMWH.js → media-gallery-C-vChPmE.js} +6 -6
  361. package/dist/{media-gallery-3zIVLMWH.js.map → media-gallery-C-vChPmE.js.map} +1 -1
  362. package/dist/{mentions-CGlEJ15c.js → mentions-0_4nWuI-.js} +10 -10
  363. package/dist/{mentions-CGlEJ15c.js.map → mentions-0_4nWuI-.js.map} +1 -1
  364. package/dist/{message-DZ_ruyUV.js → message-g8p7eVtN.js} +7 -7
  365. package/dist/message-g8p7eVtN.js.map +1 -0
  366. package/dist/metadata-list-C3MkU-Om.js +443 -0
  367. package/dist/metadata-list-C3MkU-Om.js.map +1 -0
  368. package/dist/{motion-recipes-ChBg4HBq.js → motion-recipes-DitYv6P2.js} +10 -2
  369. package/dist/motion-recipes-DitYv6P2.js.map +1 -0
  370. package/dist/navigation-C90-oQFq.js +255 -0
  371. package/dist/navigation-C90-oQFq.js.map +1 -0
  372. package/dist/{navigation-BzhHI3lo.js → navigation-DaRjthVk.js} +101 -82
  373. package/dist/navigation-DaRjthVk.js.map +1 -0
  374. package/dist/{navigation-row-recipes-BFLCk_Aq.js → navigation-row-recipes-BGVLvU_O.js} +9 -9
  375. package/dist/navigation-row-recipes-BGVLvU_O.js.map +1 -0
  376. package/dist/{number-DbV1Dija.js → number-CRU3kGuk.js} +5 -5
  377. package/dist/{number-DbV1Dija.js.map → number-CRU3kGuk.js.map} +1 -1
  378. package/dist/overflow-tab-bar-IVFVQFV6.js +172 -0
  379. package/dist/overflow-tab-bar-IVFVQFV6.js.map +1 -0
  380. package/dist/overlays-BSgCtM2v.js +1013 -0
  381. package/dist/overlays-BSgCtM2v.js.map +1 -0
  382. package/dist/page-DUUKDAjo.js +331 -0
  383. package/dist/page-DUUKDAjo.js.map +1 -0
  384. package/dist/page-header-commands-7P3sfE9u.js +193 -0
  385. package/dist/page-header-commands-7P3sfE9u.js.map +1 -0
  386. package/dist/{pagination-BL25hu2s.js → pagination-CgCjElfu.js} +7 -7
  387. package/dist/{pagination-BL25hu2s.js.map → pagination-CgCjElfu.js.map} +1 -1
  388. package/dist/popover-B85RenIl.js +201 -0
  389. package/dist/popover-B85RenIl.js.map +1 -0
  390. package/dist/{popover-menu-Cn9rUkdc.js → popover-menu-DlnQ2zlR.js} +7 -7
  391. package/dist/{popover-menu-Cn9rUkdc.js.map → popover-menu-DlnQ2zlR.js.map} +1 -1
  392. package/dist/{popover.recipes-D3j8R8Yp.js → popover.recipes-DdiEp0rd.js} +18 -11
  393. package/dist/popover.recipes-DdiEp0rd.js.map +1 -0
  394. package/dist/portal-recipes-BpsV_iRw.js +9 -0
  395. package/dist/portal-recipes-BpsV_iRw.js.map +1 -0
  396. package/dist/{primitives-BFK08r9M.js → primitives-ByWgGUgt.js} +6 -6
  397. package/dist/{primitives-BFK08r9M.js.map → primitives-ByWgGUgt.js.map} +1 -1
  398. package/dist/primitives.js +4 -4
  399. package/dist/{progress-B1VnCT0K.js → progress-BJhQP9WX.js} +9 -9
  400. package/dist/{progress-B1VnCT0K.js.map → progress-BJhQP9WX.js.map} +1 -1
  401. package/dist/{receipt-BVSOH3Xo.js → receipt-tOc7B3hw.js} +7 -7
  402. package/dist/receipt-tOc7B3hw.js.map +1 -0
  403. package/dist/{rich-text-GOUyKQ-s.js → rich-text-Dth5E882.js} +4 -4
  404. package/dist/{rich-text-GOUyKQ-s.js.map → rich-text-Dth5E882.js.map} +1 -1
  405. package/dist/{rich-text-editor-cRLC-eBK.js → rich-text-editor-C1fOjBTd.js} +429 -430
  406. package/dist/rich-text-editor-C1fOjBTd.js.map +1 -0
  407. package/dist/{rich-text-editor-toolbar-DfXg0-VC.js → rich-text-editor-toolbar-laT3tpBT.js} +33 -29
  408. package/dist/rich-text-editor-toolbar-laT3tpBT.js.map +1 -0
  409. package/dist/{scroll-area-DcI-M1UT.js → scroll-area-B0dB2cBi.js} +2 -2
  410. package/dist/{scroll-area-DcI-M1UT.js.map → scroll-area-B0dB2cBi.js.map} +1 -1
  411. package/dist/{separator-Bom7NsGO.js → separator-Bb17I4pu.js} +2 -2
  412. package/dist/{separator-Bom7NsGO.js.map → separator-Bb17I4pu.js.map} +1 -1
  413. package/dist/{separator-BDV-Y648.js → separator-Ct_WSWTJ.js} +3 -3
  414. package/dist/{separator-BDV-Y648.js.map → separator-Ct_WSWTJ.js.map} +1 -1
  415. package/dist/services/actions.js +1 -1
  416. package/dist/settings-Bar5wiSo.js +167 -0
  417. package/dist/settings-Bar5wiSo.js.map +1 -0
  418. package/dist/sheet-BGPERY55.js +250 -0
  419. package/dist/sheet-BGPERY55.js.map +1 -0
  420. package/dist/sidebar-D-JYMMbY.js +686 -0
  421. package/dist/sidebar-D-JYMMbY.js.map +1 -0
  422. package/dist/sidebar-f9gRWXIR.js +1001 -0
  423. package/dist/sidebar-f9gRWXIR.js.map +1 -0
  424. package/dist/skeleton-BapcJd9C.js +265 -0
  425. package/dist/skeleton-BapcJd9C.js.map +1 -0
  426. package/dist/smart-card-CW0hjetE.js +617 -0
  427. package/dist/smart-card-CW0hjetE.js.map +1 -0
  428. package/dist/{structure-BmisBK-3.js → structure-DuxKl954.js} +3 -3
  429. package/dist/{structure-BmisBK-3.js.map → structure-DuxKl954.js.map} +1 -1
  430. package/dist/{structure.recipes-EPz60cU8.js → structure.recipes-BB4-n58V.js} +2 -2
  431. package/dist/{structure.recipes-EPz60cU8.js.map → structure.recipes-BB4-n58V.js.map} +1 -1
  432. package/dist/style.css +1 -1
  433. package/dist/{table-DsfzoUia.js → table-B4TE7iOV.js} +3 -3
  434. package/dist/{table-DsfzoUia.js.map → table-B4TE7iOV.js.map} +1 -1
  435. package/dist/{table-BweFy_P9.js → table-CFOWY9pQ.js} +394 -388
  436. package/dist/table-CFOWY9pQ.js.map +1 -0
  437. package/dist/{tabs-CDocW5D1.js → tabs-e7ko9S2o.js} +11 -11
  438. package/dist/tabs-e7ko9S2o.js.map +1 -0
  439. package/dist/{text-inputs-f9Ia-aCi.js → text-inputs-B1culiSK.js} +107 -104
  440. package/dist/text-inputs-B1culiSK.js.map +1 -0
  441. package/dist/{text.styles-g4He6UIW.js → text.styles-B64My8RZ.js} +25 -10
  442. package/dist/text.styles-B64My8RZ.js.map +1 -0
  443. package/dist/theme.css +192 -149
  444. package/dist/{timelines-CwM_9IhD.js → timelines-D3Sl9ueq.js} +13 -12
  445. package/dist/timelines-D3Sl9ueq.js.map +1 -0
  446. package/dist/tooltip-8wz5S_Zr.js +113 -0
  447. package/dist/tooltip-8wz5S_Zr.js.map +1 -0
  448. package/dist/{tree-WnKQzwbq.js → tree-CzUJHnFs.js} +9 -9
  449. package/dist/{tree-WnKQzwbq.js.map → tree-CzUJHnFs.js.map} +1 -1
  450. package/dist/typography/rich-text.js +1 -1
  451. package/dist/typography-BQnine1k.js +117 -0
  452. package/dist/typography-BQnine1k.js.map +1 -0
  453. package/dist/typography.js +1 -1
  454. package/dist/ui-provider-C-74NVLc.js +178 -0
  455. package/dist/ui-provider-C-74NVLc.js.map +1 -0
  456. package/dist/ui-provider.js +2 -3
  457. package/dist/{upload-CXyxmQBP.js → upload-BOW6U2tI.js} +25 -24
  458. package/dist/upload-BOW6U2tI.js.map +1 -0
  459. package/dist/{upload-queue-Boscubn9.js → upload-queue-qUXn1ykN.js} +16 -14
  460. package/dist/upload-queue-qUXn1ykN.js.map +1 -0
  461. package/dist/{usage-card-BhO5eqkX.js → usage-card-BeSLY0i0.js} +145 -137
  462. package/dist/usage-card-BeSLY0i0.js.map +1 -0
  463. package/dist/{utils-BRhFDwuU.js → utils-B6kKb8jB.js} +303 -144
  464. package/dist/utils-B6kKb8jB.js.map +1 -0
  465. package/dist/value-inputs-skdVB2zh.js +980 -0
  466. package/dist/value-inputs-skdVB2zh.js.map +1 -0
  467. package/dist/{value-typography-BP8OG6h5.js → value-typography-uAmWUAL1.js} +2 -2
  468. package/dist/{value-typography-BP8OG6h5.js.map → value-typography-uAmWUAL1.js.map} +1 -1
  469. package/dist/workspace-DHeHv0qw.js +411 -0
  470. package/dist/workspace-DHeHv0qw.js.map +1 -0
  471. package/docs/consumer-skill/SKILL.md +15 -129
  472. package/docs/consumer-skill/agents/themelia-ui-designer.md +96 -0
  473. package/docs/consumer-skill/examples/app-layout.tsx +74 -13
  474. package/docs/consumer-skill/examples/authentication.tsx +77 -0
  475. package/docs/consumer-skill/examples/commerce-lines.tsx +271 -0
  476. package/docs/consumer-skill/examples/custom-composition.tsx +21 -0
  477. package/docs/consumer-skill/examples/detail.tsx +5 -4
  478. package/docs/consumer-skill/examples/edit.tsx +30 -38
  479. package/docs/consumer-skill/examples/editable-sections.tsx +38 -0
  480. package/docs/consumer-skill/examples/index-table.tsx +4 -4
  481. package/docs/consumer-skill/examples/manifest.json +88 -1
  482. package/docs/consumer-skill/examples/product-media.tsx +41 -0
  483. package/docs/consumer-skill/examples/product-parts.tsx +81 -0
  484. package/docs/consumer-skill/examples/rhf-bindings.tsx +86 -0
  485. package/docs/consumer-skill/examples/rhf-edit-page.tsx +141 -0
  486. package/docs/consumer-skill/examples/rhf-overlay-form.tsx +105 -0
  487. package/docs/consumer-skill/examples/rhf-transport.tsx +28 -0
  488. package/docs/consumer-skill/examples/token-domain-structure.tsx +68 -0
  489. package/docs/consumer-skill/references/agents-md.md +23 -11
  490. package/docs/consumer-skill/references/analytics.md +18 -1
  491. package/docs/consumer-skill/references/authentication.md +42 -0
  492. package/docs/consumer-skill/references/commerce-composition.md +97 -0
  493. package/docs/consumer-skill/references/component-contracts.json +325201 -0
  494. package/docs/consumer-skill/references/composition-mapping.md +106 -0
  495. package/docs/consumer-skill/references/composition.md +198 -46
  496. package/docs/consumer-skill/references/critique-rubric.md +98 -0
  497. package/docs/consumer-skill/references/custom-composition.md +261 -0
  498. package/docs/consumer-skill/references/data-reading.md +79 -0
  499. package/docs/consumer-skill/references/design-contract.md +43 -9
  500. package/docs/consumer-skill/references/discovery.md +109 -8
  501. package/docs/consumer-skill/references/domain-structures.md +124 -0
  502. package/docs/consumer-skill/references/installation.md +51 -36
  503. package/docs/consumer-skill/references/integration.md +41 -2
  504. package/docs/consumer-skill/references/product-composition.md +94 -0
  505. package/docs/consumer-skill/references/public-api.json +4390 -475
  506. package/docs/consumer-skill/references/review.md +47 -5
  507. package/docs/consumer-skill/references/rhf-workflows.md +93 -0
  508. package/docs/consumer-skill/references/screen-archetypes.md +34 -0
  509. package/docs/consumer-skill/references/screen-decisions.md +126 -0
  510. package/docs/consumer-skill/references/theming.md +25 -27
  511. package/docs/consumer-skill/references/tokens.json +20 -11
  512. package/docs/consumer-skill/references/view-craft.md +153 -0
  513. package/docs/consumer-skill/references/view-spec.md +73 -0
  514. package/docs/consumer-skill/references/workflows.md +9 -2
  515. package/docs/consumer-skill/scripts/composition-policy.mjs +39 -3
  516. package/docs/consumer-skill/scripts/composition-schema.d.mts +2 -0
  517. package/docs/consumer-skill/scripts/composition-schema.mjs +32 -0
  518. package/docs/consumer-skill/scripts/composition.mjs +254 -0
  519. package/docs/consumer-skill/scripts/discovery.mjs +96 -10
  520. package/docs/consumer-skill/scripts/inspect-component.mjs +11 -0
  521. package/docs/consumer-skill/scripts/inspect-tokens.mjs +11 -0
  522. package/docs/consumer-skill/scripts/inspection.mjs +193 -0
  523. package/docs/consumer-skill/scripts/map-composition.mjs +12 -0
  524. package/docs/consumer-skill/scripts/setup-skills.mjs +111 -0
  525. package/docs/consumer-skill/scripts/surface-policy.mjs +5 -5
  526. package/docs/consumer-skills/themelia-components/SKILL.md +31 -0
  527. package/docs/consumer-skills/themelia-composition/SKILL.md +34 -0
  528. package/docs/consumer-skills/themelia-design/SKILL.md +55 -0
  529. package/docs/consumer-skills/themelia-forms/SKILL.md +12 -0
  530. package/docs/consumer-skills/themelia-foundation/SKILL.md +15 -0
  531. package/docs/consumer-skills/themelia-tokenization/SKILL.md +42 -0
  532. package/package.json +4 -2
  533. package/templates/README.md +39 -0
  534. package/templates/admin-shell-template.tsx +382 -0
  535. package/templates/analytics-operations-template.tsx +376 -0
  536. package/templates/customers-template.tsx +509 -0
  537. package/templates/index.ts +29 -0
  538. package/templates/orders-template.tsx +1102 -0
  539. package/templates/products-template.tsx +834 -0
  540. package/templates/user-permissions-template.tsx +450 -0
  541. package/dist/accordion-Cjb6sx0G.js.map +0 -1
  542. package/dist/action-menu-CllU52Mm.js +0 -280
  543. package/dist/action-menu-CllU52Mm.js.map +0 -1
  544. package/dist/affordance-geometry.generated-tF36bREk.js.map +0 -1
  545. package/dist/ai-artifact-DvTwDVyL.js.map +0 -1
  546. package/dist/app-shell-C4FhvCqF.js +0 -236
  547. package/dist/app-shell-C4FhvCqF.js.map +0 -1
  548. package/dist/auth-BGua8ouh.js.map +0 -1
  549. package/dist/avatar-DAPlDvhJ.js.map +0 -1
  550. package/dist/base/cascader.js.map +0 -1
  551. package/dist/batch-action-bar-DnUJ21NQ.js.map +0 -1
  552. package/dist/button-DVzspB_G.js.map +0 -1
  553. package/dist/buttons-DPZekJFu.js.map +0 -1
  554. package/dist/cards-BaBZR-AU.js +0 -68
  555. package/dist/cards-BaBZR-AU.js.map +0 -1
  556. package/dist/chart-ZOYyK2xG.js +0 -155
  557. package/dist/chart-ZOYyK2xG.js.map +0 -1
  558. package/dist/checkbox-AWIhNhmo.js.map +0 -1
  559. package/dist/choice-inputs-CNHvARCJ.js +0 -770
  560. package/dist/choice-inputs-CNHvARCJ.js.map +0 -1
  561. package/dist/code-block-DeneBJR_.js.map +0 -1
  562. package/dist/combobox-DaHESuiL.js +0 -355
  563. package/dist/combobox-DaHESuiL.js.map +0 -1
  564. package/dist/combobox-Dxo2fAYQ.js.map +0 -1
  565. package/dist/command-C25VMRII.js.map +0 -1
  566. package/dist/comments-DD0DUPwJ.js.map +0 -1
  567. package/dist/containers-Mu1LMGV1.js +0 -103
  568. package/dist/containers-Mu1LMGV1.js.map +0 -1
  569. package/dist/control-group-recipes-DBXmfh2E.js.map +0 -1
  570. package/dist/data-display-DT_khPl_.js.map +0 -1
  571. package/dist/date-picker-B2K3ucWn.js.map +0 -1
  572. package/dist/date-pickers-Ds8gLaoP.js +0 -175
  573. package/dist/date-pickers-Ds8gLaoP.js.map +0 -1
  574. package/dist/dropdown-menu-Cl4X7L5S.js +0 -193
  575. package/dist/dropdown-menu-Cl4X7L5S.js.map +0 -1
  576. package/dist/feedback-BYIhtitP.js.map +0 -1
  577. package/dist/field-affordance-recipes-DZhnIL_Y.js.map +0 -1
  578. package/dist/filters-DJVAveHA.js.map +0 -1
  579. package/dist/form-field-CwH9y77i.js.map +0 -1
  580. package/dist/form-sizing-BdP_Mf5p.js.map +0 -1
  581. package/dist/forms-B9G_xwzi.js +0 -194
  582. package/dist/forms-B9G_xwzi.js.map +0 -1
  583. package/dist/forms-numeric-B_jraJaQ.js.map +0 -1
  584. package/dist/header-BSfIEWbI.js.map +0 -1
  585. package/dist/hooks-ClH9thn4.js.map +0 -1
  586. package/dist/input-CZw8iU99.js +0 -21
  587. package/dist/input-CZw8iU99.js.map +0 -1
  588. package/dist/input-DQdEd0YD.js +0 -263
  589. package/dist/input-DQdEd0YD.js.map +0 -1
  590. package/dist/item-K5_ghvze.js +0 -275
  591. package/dist/item-K5_ghvze.js.map +0 -1
  592. package/dist/message-DZ_ruyUV.js.map +0 -1
  593. package/dist/metadata-list-8N16ZMW_.js +0 -405
  594. package/dist/metadata-list-8N16ZMW_.js.map +0 -1
  595. package/dist/motion-recipes-ChBg4HBq.js.map +0 -1
  596. package/dist/navigation-Bnotn4AQ.js +0 -145
  597. package/dist/navigation-Bnotn4AQ.js.map +0 -1
  598. package/dist/navigation-BzhHI3lo.js.map +0 -1
  599. package/dist/navigation-row-recipes-BFLCk_Aq.js.map +0 -1
  600. package/dist/overflow-tab-bar-CWY7Nogn.js +0 -282
  601. package/dist/overflow-tab-bar-CWY7Nogn.js.map +0 -1
  602. package/dist/overlays-tMkF-VAN.js +0 -1003
  603. package/dist/overlays-tMkF-VAN.js.map +0 -1
  604. package/dist/page-CL9YeH_V.js +0 -224
  605. package/dist/page-CL9YeH_V.js.map +0 -1
  606. package/dist/page-header-commands-DOb6WsfD.js +0 -126
  607. package/dist/page-header-commands-DOb6WsfD.js.map +0 -1
  608. package/dist/popover-gnTOhbFM.js +0 -198
  609. package/dist/popover-gnTOhbFM.js.map +0 -1
  610. package/dist/popover.recipes-D3j8R8Yp.js.map +0 -1
  611. package/dist/receipt-BVSOH3Xo.js.map +0 -1
  612. package/dist/rich-text-editor-cRLC-eBK.js.map +0 -1
  613. package/dist/rich-text-editor-toolbar-DfXg0-VC.js.map +0 -1
  614. package/dist/settings-ybnjVwbd.js +0 -171
  615. package/dist/settings-ybnjVwbd.js.map +0 -1
  616. package/dist/sheet-ijlsjq-n.js +0 -213
  617. package/dist/sheet-ijlsjq-n.js.map +0 -1
  618. package/dist/sidebar-Db6gkh3U.js +0 -619
  619. package/dist/sidebar-Db6gkh3U.js.map +0 -1
  620. package/dist/sidebar-DkTO4VTO.js +0 -512
  621. package/dist/sidebar-DkTO4VTO.js.map +0 -1
  622. package/dist/skeleton-Byjnt7qr.js +0 -264
  623. package/dist/skeleton-Byjnt7qr.js.map +0 -1
  624. package/dist/smart-card-DiC5aac3.js +0 -604
  625. package/dist/smart-card-DiC5aac3.js.map +0 -1
  626. package/dist/table-BweFy_P9.js.map +0 -1
  627. package/dist/tabs-CDocW5D1.js.map +0 -1
  628. package/dist/text-inputs-f9Ia-aCi.js.map +0 -1
  629. package/dist/text.styles-g4He6UIW.js.map +0 -1
  630. package/dist/theme-scope-BJ6eE2xt.js +0 -50
  631. package/dist/theme-scope-BJ6eE2xt.js.map +0 -1
  632. package/dist/timelines-CwM_9IhD.js.map +0 -1
  633. package/dist/tooltip-yiRJUFjp.js +0 -111
  634. package/dist/tooltip-yiRJUFjp.js.map +0 -1
  635. package/dist/typography-UTnveOEy.js +0 -117
  636. package/dist/typography-UTnveOEy.js.map +0 -1
  637. package/dist/ui-provider-C_U0Xma4.js +0 -136
  638. package/dist/ui-provider-C_U0Xma4.js.map +0 -1
  639. package/dist/upload-CXyxmQBP.js.map +0 -1
  640. package/dist/upload-queue-Boscubn9.js.map +0 -1
  641. package/dist/usage-card-BhO5eqkX.js.map +0 -1
  642. package/dist/use-mobile-vaLKwgyf.js +0 -15
  643. package/dist/use-mobile-vaLKwgyf.js.map +0 -1
  644. package/dist/utils-BRhFDwuU.js.map +0 -1
  645. package/dist/value-inputs-TaX4OjNk.js +0 -963
  646. package/dist/value-inputs-TaX4OjNk.js.map +0 -1
  647. package/dist/workspace-B-OEm3Kf.js +0 -408
  648. package/dist/workspace-B-OEm3Kf.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"ai.js","names":["_Fragment","NumberValue","NumberValue","cn","Button","Text","DisplayLabel","TextLink","focusRecipes","Grid","Stack","toneRecipes","Card","Progress","interactionRecipes","Value","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-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 type=\"inherit\" 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\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\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\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 type=\"inherit\" value={pct} scaled weight=\"semibold\" lineHeight=\"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 type=\"inherit\" 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 { Progress } from '../../../base/feedback';\nimport { DisplayLabel, Text } from '../../../typography';\nimport { InlineStat } from '../../data-display';\nimport { Grid, Stack } from '../../../base/structure';\nimport { Number as NumberValue, Percent, Value } 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 type=\"inherit\" 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 type=\"inherit\" value={total} size=\"xs\" align=\"left\" />\n\t\t\t\t\t\t\t\t<Text type=\"inherit\" tag=\"span\" size=\"xs\" aria-hidden>/</Text>\n\t\t\t\t\t\t\t\t<NumberValue type=\"inherit\" 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 type=\"inherit\" value={pct} scaled size=\"xs\" weight=\"semibold\" align=\"right\" />}\n\t\t\t\t\t/>\n\t\t\t\t\t<Progress value={pct} aria-label={strings.title} className=\"ai-token-usage--bar\" />\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 type=\"inherit\" tag=\"span\" size=\"xs\" weight=\"medium\" lineHeight=\"tight\">{strings.cost}</Text>}\n\t\t\t\t\tvalue={<Value type=\"inherit\" weight=\"semibold\">{cost}</Value>}\n\t\t\t\t\tvalueClassName=\"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 { Card } from '../../../base/cards';\nimport { Progress } from '../../../base/feedback';\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';\nimport { IconBadge } from '../../../base/display';\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\t// The public Card owns the frame and its compact inset.\n\treturn (\n\t\t<Card surface=\"card\" padding=\"sm\" className={cn('ai-citation--component', className)}>\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 type=\"inherit\" 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</Card>\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{/* The source number stays readable: it is how a citation names its source. */}\n\t\t\t\t<IconBadge tone=\"neutral\" size=\"sm\" aria-hidden={false} className=\"shrink-0\">\n\t\t\t\t\t<NumberValue value={index} size=\"xs\" weight=\"semibold\" type=\"secondary\" align=\"center\" />\n\t\t\t\t</IconBadge>\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\">\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<Progress value={relevancePct} size=\"sm\" aria-label={strings.relevance} className=\"ai-citation--relevance\" />\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 type=\"inherit\" tag=\"span\" size=\"xs\" weight=\"medium\" lineHeight=\"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 type=\"inherit\" tag=\"span\" size=\"xs\" weight=\"medium\" lineHeight=\"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 type=\"inherit\" tag=\"span\" size=\"xs\" weight=\"medium\" lineHeight=\"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 { Card } from '../../../base/cards';\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\t// Identity, facts and keywords are separated by the Stack gap alone.\n\tconst bodyContent = (\n\t\t<Stack gap=\"md\" className=\"min-w-0 flex-1\">\n\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 type=\"inherit\" 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</Stack>\n\n\t\t\t{(license || publishedAt || weeklyDownloads !== undefined) && (\n\t\t\t\t<div className=\"ai-package-info--meta flex flex-wrap items-center gap-x-space-lg gap-y-space-xs\">\n\t\t\t\t\t{!!license && <MetaItem label={strings.licenseLabel} value={license} />}\n\t\t\t\t\t{!!publishedAt && <MetaItem label={strings.publishedLabel} value={publishedAt} />}\n\t\t\t\t\t{weeklyDownloads !== undefined && (\n\t\t\t\t\t\t<MetaItem label={strings.weeklyDownloadsLabel} value={String(weeklyDownloads)} />\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t)}\n\n\t\t\t{!!keywords?.length && (\n\t\t\t\t<Stack direction=\"horizontal\" gap=\"xs\" className=\"ai-package-info--keywords\">\n\t\t\t\t\t{keywords.slice(0, 6).map((keyword) => (\n\t\t\t\t\t\t<Badge key={keyword} tone=\"secondary\">\n\t\t\t\t\t\t\t{keyword}\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\t\t</Stack>\n\t);\n\tconst bodyClassName = 'ai-package-info--body flex w-full items-start gap-space-lg p-surface-xs text-left';\n\n\t// The public Card owns the frame; the body and link row own their compact insets.\n\treturn (\n\t\t<Card surface=\"card\" padding=\"none\" className={cn('ai-package-info--component', className)}>\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 type=\"inherit\" 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\" 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 type=\"inherit\" 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</Card>\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","cn","Button","Text","DisplayLabel","TextLink","focusRecipes","Grid","Stack","toneRecipes","Card","Progress","interactionRecipes","Value","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","name","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","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\t/** Visible name of the confidence signal, read before its level. Additive. */\n\tconfidenceLabel?: string;\n}\n\nexport const defaultAiSummaryStrings: AiSummaryStrings = {\n\tregenerate: 'Regenerate',\n\tconfidenceLevels: { low: 'low', medium: 'medium', high: 'high' },\n\tconfidenceLabel: 'Confidence',\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, name }: { level: ConfidenceLevel; label: string; name: string }) {\n\tconst filled = confidenceBars[level];\n\n\t// The signal names what it measures, so \"▮▮▮ high\" reads \"Confidence ▮▮▮ high\".\n\treturn (\n\t\t<div className=\"ai-summary--confidence flex items-center gap-space-sm\">\n\t\t\t<Text size=\"xs\" type=\"secondary\" tag=\"span\" className=\"ai-summary--confidence-label\">\n\t\t\t\t{name}\n\t\t\t</Text>\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 type=\"inherit\" 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]} name={strings.confidenceLabel ?? defaultAiSummaryStrings.confidenceLabel ?? ''} />\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\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\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\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 type=\"inherit\" value={pct} scaled weight=\"semibold\" lineHeight=\"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 type=\"inherit\" 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 { Progress } from '../../../base/feedback';\nimport { DisplayLabel, Text } from '../../../typography';\nimport { InlineStat } from '../../data-display';\nimport { Grid, Stack } from '../../../base/structure';\nimport { Number as NumberValue, Percent, Value } 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 type=\"inherit\" 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 type=\"inherit\" value={total} size=\"xs\" align=\"left\" />\n\t\t\t\t\t\t\t\t<Text type=\"inherit\" tag=\"span\" size=\"xs\" aria-hidden>/</Text>\n\t\t\t\t\t\t\t\t<NumberValue type=\"inherit\" 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 type=\"inherit\" value={pct} scaled size=\"xs\" weight=\"semibold\" align=\"right\" />}\n\t\t\t\t\t/>\n\t\t\t\t\t<Progress value={pct} aria-label={strings.title} className=\"ai-token-usage--bar\" />\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 type=\"inherit\" tag=\"span\" size=\"xs\" weight=\"medium\" lineHeight=\"tight\">{strings.cost}</Text>}\n\t\t\t\t\tvalue={<Value type=\"inherit\" weight=\"semibold\">{cost}</Value>}\n\t\t\t\t\tvalueClassName=\"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 { Card } from '../../../base/cards';\nimport { Progress } from '../../../base/feedback';\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 { focusRecipes } from '../../../../lib/focus-recipes';\nimport { interactionRecipes } from '../../../../lib/interaction-recipes';\nimport { IconBadge } from '../../../base/display';\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\t// The public Card owns the frame; the trigger and the list share one compact\n\t// inline inset, so the heading, every source and the overflow count start on\n\t// one edge. Sources are plain rows inside the card, not boxes within it.\n\treturn (\n\t\t<Card surface=\"card\" padding=\"none\" contentGap=\"none\" className={cn('ai-citation--component', className)}>\n\t\t\t<Button\n\t\t\t\ttype=\"button\"\n\t\t\t\ttone=\"secondary\"\n\t\t\t\tbuttonStyle=\"ghost\"\n\t\t\t\tsize=\"sm\"\n\t\t\t\tonClick={() => setExpanded(!expanded)}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t// A borderless row inside the clipping card: no 1px button border pushes\n\t\t\t\t\t// its text off the list edge, and focus draws the inset edge.\n\t\t\t\t\t'ai-citation--trigger h-auto min-h-0 w-full justify-start gap-space-sm rounded-radius border-0 px-surface-xs py-row-y text-left',\n\t\t\t\t\t`text-muted-foreground ${interactionRecipes.rowHover} ${focusRecipes.inset}`,\n\t\t\t\t)}\n\t\t\t\taria-expanded={expanded}\n\t\t\t\taria-label={expanded ? strings.collapse : strings.expand}\n\t\t\t>\n\t\t\t\t<Text type=\"inherit\" weight=\"medium\">\n\t\t\t\t\t{strings.title} · {strings.sourceCount(sources.length)}\n\t\t\t\t</Text>\n\t\t\t\t{expanded ? <ChevronDown className=\"size-icon-md\" /> : <ChevronRight className=\"size-icon-md\" />}\n\t\t\t</Button>\n\n\t\t\t{(expanded || maxCollapsedRows > 0) && (\n\t\t\t\t<Stack gap=\"sm\" className=\"ai-citation--list border-t border-border/60 px-surface-xs py-row-y\">\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</ItemGroup>\n\t\t\t\t\t{!expanded && hidden > 0 && (\n\t\t\t\t\t\t<Text size=\"xs\" type=\"secondary\" className=\"ai-citation--hidden-count\">\n\t\t\t\t\t\t\t{strings.hiddenCount(hidden)}\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t)}\n\t\t\t\t</Stack>\n\t\t\t)}\n\t\t</Card>\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 size=\"sm\" className=\"items-start\">\n\t\t\t<ItemMedia>\n\t\t\t\t{/* The source number stays readable: it is how a citation names its source. */}\n\t\t\t\t<IconBadge tone=\"neutral\" size=\"sm\" aria-hidden={false} className=\"shrink-0\">\n\t\t\t\t\t<NumberValue value={index} size=\"xs\" weight=\"semibold\" type=\"secondary\" align=\"center\" />\n\t\t\t\t</IconBadge>\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\">\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<Progress value={relevancePct} size=\"sm\" aria-label={strings.relevance} className=\"ai-citation--relevance\" />\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-radius 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 type=\"inherit\" tag=\"span\" size=\"xs\" weight=\"medium\" lineHeight=\"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 type=\"inherit\" tag=\"span\" size=\"xs\" weight=\"medium\" lineHeight=\"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 type=\"inherit\" tag=\"span\" size=\"xs\" weight=\"medium\" lineHeight=\"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 { Card } from '../../../base/cards';\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\t// Identity, facts and keywords are separated by the Stack gap alone.\n\tconst bodyContent = (\n\t\t<Stack gap=\"md\" className=\"min-w-0 flex-1\">\n\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 type=\"inherit\" 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</Stack>\n\n\t\t\t{(license || publishedAt || weeklyDownloads !== undefined) && (\n\t\t\t\t<div className=\"ai-package-info--meta flex flex-wrap items-center gap-x-space-lg gap-y-space-xs\">\n\t\t\t\t\t{!!license && <MetaItem label={strings.licenseLabel} value={license} />}\n\t\t\t\t\t{!!publishedAt && <MetaItem label={strings.publishedLabel} value={publishedAt} />}\n\t\t\t\t\t{weeklyDownloads !== undefined && (\n\t\t\t\t\t\t<MetaItem label={strings.weeklyDownloadsLabel} value={String(weeklyDownloads)} />\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t)}\n\n\t\t\t{!!keywords?.length && (\n\t\t\t\t<Stack direction=\"horizontal\" gap=\"xs\" className=\"ai-package-info--keywords\">\n\t\t\t\t\t{keywords.slice(0, 6).map((keyword) => (\n\t\t\t\t\t\t<Badge key={keyword} tone=\"secondary\">\n\t\t\t\t\t\t\t{keyword}\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\t\t</Stack>\n\t);\n\tconst bodyClassName = 'ai-package-info--body flex w-full items-start gap-space-lg p-surface-xs text-left';\n\n\t// The public Card owns the frame; the body and link row own their compact insets.\n\treturn (\n\t\t<Card surface=\"card\" padding=\"none\" className={cn('ai-package-info--component', className)}>\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 type=\"inherit\" 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\" 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 type=\"inherit\" 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</Card>\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; each file icon then takes its status colour instead. With badges shown, icons stay neutral. */\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 // Status is stated once: by the badge, or by the icon colour only when the\n // badges are hidden. A tinted icon beside its badge would repeat it per row.\n icon: <Icon aria-hidden=\"true\" className={cn('size-icon', hideStatusLabels && 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,3 +1,3 @@
1
1
  "use client";
2
- import { n as e, t } from "../../usage-card-BhO5eqkX.js";
2
+ import { n as e, t } from "../../usage-card-BeSLY0i0.js";
3
3
  export { t as UsageCard, e as defaultUsageCardStrings };