themelia-react-ui 1.0.1 → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (488) hide show
  1. package/CHANGELOG.md +137 -0
  2. package/README.md +59 -13
  3. package/dist/{accordion-B-5Focs8.js → accordion-BRTcsp8J.js} +8 -8
  4. package/dist/accordion-BRTcsp8J.js.map +1 -0
  5. package/dist/{action-menu-Cx3SdfbN.js → action-menu-Drxw_vJk.js} +36 -36
  6. package/dist/action-menu-Drxw_vJk.js.map +1 -0
  7. package/dist/affordance-geometry.generated-CL84ZN9A.js +63 -0
  8. package/dist/affordance-geometry.generated-CL84ZN9A.js.map +1 -0
  9. package/dist/{ai-artifact-B5tPpXnS.js → ai-artifact-DLVdK0Py.js} +151 -155
  10. package/dist/ai-artifact-DLVdK0Py.js.map +1 -0
  11. package/dist/{app-shell-at8Kt4l_.js → app-shell-C_fKpljx.js} +11 -10
  12. package/dist/app-shell-C_fKpljx.js.map +1 -0
  13. package/dist/{attachment-BO2R47wn.js → attachment-DbjUWsP0.js} +12 -12
  14. package/dist/{attachment-BO2R47wn.js.map → attachment-DbjUWsP0.js.map} +1 -1
  15. package/dist/auth-CAQcasMV.js +723 -0
  16. package/dist/auth-CAQcasMV.js.map +1 -0
  17. package/dist/{avatar-Bpzty83c.js → avatar-Bu2HhitA.js} +6 -6
  18. package/dist/{avatar-Bpzty83c.js.map → avatar-Bu2HhitA.js.map} +1 -1
  19. package/dist/{badge-BZXZT9wd.js → badge-CzId1Wlm.js} +4 -4
  20. package/dist/{badge-BZXZT9wd.js.map → badge-CzId1Wlm.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/buttons.js +3 -2
  27. package/dist/base/cards.js +3 -3
  28. package/dist/base/carousel.js +25 -27
  29. package/dist/base/carousel.js.map +1 -1
  30. package/dist/base/cascader.js +150 -148
  31. package/dist/base/cascader.js.map +1 -1
  32. package/dist/base/chart.js +1 -1
  33. package/dist/base/choice-inputs.js +2 -2
  34. package/dist/base/code-block.js +1 -1
  35. package/dist/base/combobox.js +1 -1
  36. package/dist/base/command.js +1 -1
  37. package/dist/base/copyable.js +1 -1
  38. package/dist/base/date-pickers.js +3 -3
  39. package/dist/base/display.js +7 -7
  40. package/dist/base/feedback.js +4 -4
  41. package/dist/base/forms-numeric.js +1 -1
  42. package/dist/base/forms.js +2 -2
  43. package/dist/base/inline-edit.js +40 -43
  44. package/dist/base/inline-edit.js.map +1 -1
  45. package/dist/base/item.js +1 -1
  46. package/dist/base/media-gallery.js +1 -1
  47. package/dist/base/navigation.js +6 -6
  48. package/dist/base/popover-menu.js +1 -1
  49. package/dist/base/popover.js +1 -1
  50. package/dist/base/qr-code.js +1 -1
  51. package/dist/base/repeaters.js +33 -33
  52. package/dist/base/repeaters.js.map +1 -1
  53. package/dist/base/sheet.js +1 -1
  54. package/dist/base/sidebar.js +1 -1
  55. package/dist/base/signature-pad.js +83 -81
  56. package/dist/base/signature-pad.js.map +1 -1
  57. package/dist/base/skeleton.js +1 -1
  58. package/dist/base/spinner.js +1 -1
  59. package/dist/base/structure.js +1 -1
  60. package/dist/base/table.js +1 -1
  61. package/dist/base/text-inputs.js +2 -2
  62. package/dist/base/toaster.js +6 -6
  63. package/dist/base/toaster.js.map +1 -1
  64. package/dist/base/tree.js +1 -1
  65. package/dist/base/upload-queue.js +1 -1
  66. package/dist/base/upload.js +3 -3
  67. package/dist/base/value-inputs.js +1 -1
  68. package/dist/blocks/admin.js +134 -134
  69. package/dist/blocks/admin.js.map +1 -1
  70. package/dist/blocks/ai.js +120 -117
  71. package/dist/blocks/ai.js.map +1 -1
  72. package/dist/blocks/analytics/usage-card.js +1 -1
  73. package/dist/blocks/analytics.js +510 -472
  74. package/dist/blocks/analytics.js.map +1 -1
  75. package/dist/blocks/collaboration.js +2 -2
  76. package/dist/blocks/commerce/receipt.js +1 -1
  77. package/dist/blocks/commerce.js +395 -383
  78. package/dist/blocks/commerce.js.map +1 -1
  79. package/dist/blocks/data-display.js +1 -1
  80. package/dist/blocks/onboarding.js +6 -6
  81. package/dist/blocks/onboarding.js.map +1 -1
  82. package/dist/blocks/planning.js +36 -36
  83. package/dist/blocks/planning.js.map +1 -1
  84. package/dist/blocks/timelines.js +1 -1
  85. package/dist/{breadcrumbs-DdQ_I5ra.js → breadcrumbs-BuYz5SDU.js} +9 -8
  86. package/dist/breadcrumbs-BuYz5SDU.js.map +1 -0
  87. package/dist/button-BZDasD04.js +651 -0
  88. package/dist/button-BZDasD04.js.map +1 -0
  89. package/dist/{button-BS6l5JUw.js → button-BZyfTvwm.js} +3 -3
  90. package/dist/button-BZyfTvwm.js.map +1 -0
  91. package/dist/buttons-D_6KJvEE.js +99 -0
  92. package/dist/buttons-D_6KJvEE.js.map +1 -0
  93. package/dist/{cards-Cum56XOF.js → cards-qGSErLw_.js} +12 -12
  94. package/dist/{cards-Cum56XOF.js.map → cards-qGSErLw_.js.map} +1 -1
  95. package/dist/chart-Bsc5BICK.js +150 -0
  96. package/dist/chart-Bsc5BICK.js.map +1 -0
  97. package/dist/{checkbox-BavDRjF7.js → checkbox-BQNDjUCh.js} +3 -3
  98. package/dist/checkbox-BQNDjUCh.js.map +1 -0
  99. package/dist/choice-inputs-Mk3iWbhr.js +725 -0
  100. package/dist/choice-inputs-Mk3iWbhr.js.map +1 -0
  101. package/dist/{code-block-xHKbAJDj.js → code-block-DzHKRybS.js} +23 -23
  102. package/dist/code-block-DzHKRybS.js.map +1 -0
  103. package/dist/{collapsible-DsnktFNv.js → collapsible-ClvC7Bj3.js} +3 -3
  104. package/dist/{collapsible-DsnktFNv.js.map → collapsible-ClvC7Bj3.js.map} +1 -1
  105. package/dist/{collection-content-C4fthJV_.js → collection-content-D6S8cv_n.js} +3 -3
  106. package/dist/{collection-content-C4fthJV_.js.map → collection-content-D6S8cv_n.js.map} +1 -1
  107. package/dist/{combobox-DEbdr-3u.js → combobox-BFnbJJp3.js} +18 -18
  108. package/dist/combobox-BFnbJJp3.js.map +1 -0
  109. package/dist/{combobox-xv3yJbzl.js → combobox-hozNwUcc.js} +313 -316
  110. package/dist/combobox-hozNwUcc.js.map +1 -0
  111. package/dist/{command-C0xe7u9B.js → command-BnmSchli.js} +9 -9
  112. package/dist/command-BnmSchli.js.map +1 -0
  113. package/dist/comments-u5L0OGip.js +1156 -0
  114. package/dist/comments-u5L0OGip.js.map +1 -0
  115. package/dist/components/base/buttons/button-group.recipes.d.ts +1 -1
  116. package/dist/components/base/buttons/button.recipes.d.ts +10 -19
  117. package/dist/components/base/buttons/use-pending-button-focus.d.ts +3 -0
  118. package/dist/components/base/cards/card.recipes.d.ts +13 -5
  119. package/dist/components/base/cards/partials/card-primitives.d.ts +9 -4
  120. package/dist/components/base/cards/smart-card.types.d.ts +1 -1
  121. package/dist/components/base/date-pickers/date-picker.recipes.d.ts +5 -18
  122. package/dist/components/base/date-pickers/datepicker.types.d.ts +3 -0
  123. package/dist/components/base/forms/form-field.d.ts +1 -0
  124. package/dist/components/base/forms/form-sizing.d.ts +3 -3
  125. package/dist/components/base/navigation/tabs.d.ts +3 -5
  126. package/dist/components/base/popover/popover.recipes.d.ts +3 -3
  127. package/dist/components/base/table/index.d.ts +1 -1
  128. package/dist/components/base/text-inputs/clear-native-field.d.ts +2 -0
  129. package/dist/components/base/text-inputs/input-trailing-action.d.ts +3 -0
  130. package/dist/components/blocks/analytics/types.d.ts +1 -1
  131. package/dist/components/blocks/collaboration/message/message.recipes.d.ts +12 -0
  132. package/dist/components/blocks/data-display/empty-state/partials/illustrations/document-stack.d.ts +1 -4
  133. package/dist/components/blocks/data-display/empty-state/partials/illustrations/inbox-clean.d.ts +1 -4
  134. package/dist/components/blocks/data-display/empty-state/partials/illustrations/index.d.ts +3 -3
  135. package/dist/components/blocks/data-display/empty-state/partials/illustrations/stacked-cards.d.ts +1 -6
  136. package/dist/components/features/combobox/components/error-message.d.ts +1 -1
  137. package/dist/components/features/comments/hooks/use-attachment-upload.d.ts +5 -0
  138. package/dist/components/features/filters/facets/search-facet.d.ts +0 -12
  139. package/dist/components/features/filters/facets/tags-facet.d.ts +1 -1
  140. package/dist/components/features/media-library/media-library.d.ts +1 -1
  141. package/dist/components/features/media-library/media-library.types.d.ts +9 -1
  142. package/dist/components/features/media-library/partials/media-library-partials.d.ts +1 -1
  143. package/dist/components/features/overlays/hooks/use-pending-overlay-focus.d.ts +2 -0
  144. package/dist/components/features/overlays/overlays.types.d.ts +5 -4
  145. package/dist/components/features/rich-text-editor/rich-text-editor.recipes.d.ts +2 -1
  146. package/dist/components/features/table/data-table.d.ts +1 -1
  147. package/dist/components/features/table/table.types.d.ts +1 -1
  148. package/dist/components/features/theme-tweaker/theme-provider-settings.d.ts +3 -1
  149. package/dist/components/layout/auth/auth.types.d.ts +1 -0
  150. package/dist/components/layout/page/page.d.ts +0 -1
  151. package/dist/components/layout/page/page.types.d.ts +9 -3
  152. package/dist/components/layout/sidebar/sidebar.context.d.ts +1 -1
  153. package/dist/components/layout/sidebar/sidebar.types.d.ts +4 -0
  154. package/dist/components/layout/workspace/workspace.types.d.ts +3 -0
  155. package/dist/components/typography/heading.d.ts +5 -2
  156. package/dist/components/typography/index.d.ts +1 -1
  157. package/dist/components/typography/text.styles.d.ts +10 -0
  158. package/dist/components/ui/popover.d.ts +1 -1
  159. package/dist/components/ui/sidebar.d.ts +1 -1
  160. package/dist/components/ui/table.d.ts +2 -1
  161. package/dist/container.recipes-D9t8MHR3.js +27 -0
  162. package/dist/container.recipes-D9t8MHR3.js.map +1 -0
  163. package/dist/{containers-6s-ucRQQ.js → containers-DqB-bSYE.js} +33 -56
  164. package/dist/containers-DqB-bSYE.js.map +1 -0
  165. package/dist/control-group-recipes-DBXmfh2E.js +21 -0
  166. package/dist/control-group-recipes-DBXmfh2E.js.map +1 -0
  167. package/dist/{copyable-B7SBXJMr.js → copyable-BTSByfmq.js} +6 -6
  168. package/dist/{copyable-B7SBXJMr.js.map → copyable-BTSByfmq.js.map} +1 -1
  169. package/dist/{data-display-cWIRdeaf.js → data-display-Bihs9Ven.js} +545 -332
  170. package/dist/data-display-Bihs9Ven.js.map +1 -0
  171. package/dist/{date-BFNMnrS5.js → date-DOKhJPu7.js} +4 -4
  172. package/dist/{date-BFNMnrS5.js.map → date-DOKhJPu7.js.map} +1 -1
  173. package/dist/{date-picker-CA6ogMQB.js → date-picker-DzP5HQq7.js} +492 -472
  174. package/dist/date-picker-DzP5HQq7.js.map +1 -0
  175. package/dist/date-pickers-BpgGz7S-.js +196 -0
  176. package/dist/date-pickers-BpgGz7S-.js.map +1 -0
  177. package/dist/{display-CFM5myut.js → display-CS6Hbk18.js} +8 -8
  178. package/dist/{display-CFM5myut.js.map → display-CS6Hbk18.js.map} +1 -1
  179. package/dist/{dropdown-menu-BlnyHr-9.js → dropdown-menu-D-boNgGO.js} +7 -7
  180. package/dist/{dropdown-menu-BlnyHr-9.js.map → dropdown-menu-D-boNgGO.js.map} +1 -1
  181. package/dist/features/activities.js +152 -141
  182. package/dist/features/activities.js.map +1 -1
  183. package/dist/features/ai-chat.js +182 -179
  184. package/dist/features/ai-chat.js.map +1 -1
  185. package/dist/features/async-preview.js +9 -9
  186. package/dist/features/async-preview.js.map +1 -1
  187. package/dist/features/combobox.js +1 -1
  188. package/dist/features/comments.js +1 -1
  189. package/dist/features/data-view.js +25 -23
  190. package/dist/features/data-view.js.map +1 -1
  191. package/dist/features/email-composer/engine.js +1 -1
  192. package/dist/features/email-composer.js +103 -104
  193. package/dist/features/email-composer.js.map +1 -1
  194. package/dist/features/event-calendar.js +375 -373
  195. package/dist/features/event-calendar.js.map +1 -1
  196. package/dist/features/filters.js +1 -1
  197. package/dist/features/global-search.js +222 -224
  198. package/dist/features/global-search.js.map +1 -1
  199. package/dist/features/kanban.js +29 -29
  200. package/dist/features/kanban.js.map +1 -1
  201. package/dist/features/map.js +59 -58
  202. package/dist/features/map.js.map +1 -1
  203. package/dist/features/media-library.js +856 -855
  204. package/dist/features/media-library.js.map +1 -1
  205. package/dist/features/mentions.js +1 -1
  206. package/dist/features/overlays.js +1 -1
  207. package/dist/features/products.js +1209 -1209
  208. package/dist/features/products.js.map +1 -1
  209. package/dist/features/questionnaire.js +52 -52
  210. package/dist/features/questionnaire.js.map +1 -1
  211. package/dist/features/resource-assignment.js +29 -31
  212. package/dist/features/resource-assignment.js.map +1 -1
  213. package/dist/features/resource.js +13 -13
  214. package/dist/features/resource.js.map +1 -1
  215. package/dist/features/rich-text-editor.js +2 -2
  216. package/dist/features/schema-form.js +82 -82
  217. package/dist/features/schema-form.js.map +1 -1
  218. package/dist/features/suggestions.js +3 -3
  219. package/dist/features/sync.js +4 -4
  220. package/dist/features/sync.js.map +1 -1
  221. package/dist/features/table.js +1 -1
  222. package/dist/features/theme-tweaker.js +456 -450
  223. package/dist/features/theme-tweaker.js.map +1 -1
  224. package/dist/{feedback-DWUkgEjR.js → feedback-CJkUAapr.js} +29 -29
  225. package/dist/feedback-CJkUAapr.js.map +1 -0
  226. package/dist/field-affordance-recipes-uKY4MsZ_.js +25 -0
  227. package/dist/field-affordance-recipes-uKY4MsZ_.js.map +1 -0
  228. package/dist/{field-state-recipes-CBTRt9Bt.js → field-state-recipes-DQQpiLWC.js} +3 -3
  229. package/dist/field-state-recipes-DQQpiLWC.js.map +1 -0
  230. package/dist/{filters-BhsUtsxW.js → filters-D6FF8L6s.js} +715 -720
  231. package/dist/filters-D6FF8L6s.js.map +1 -0
  232. package/dist/{form-field-Bn7ZH1rA.js → form-field-CZwrkP7m.js} +17 -9
  233. package/dist/form-field-CZwrkP7m.js.map +1 -0
  234. package/dist/{form-sizing-BWs70_a2.js → form-sizing-QP8aIRaW.js} +8 -5
  235. package/dist/form-sizing-QP8aIRaW.js.map +1 -0
  236. package/dist/{forms-B7pzS25o.js → forms-B5NCbkSC.js} +35 -35
  237. package/dist/{forms-B7pzS25o.js.map → forms-B5NCbkSC.js.map} +1 -1
  238. package/dist/forms-numeric-Crrm80Lm.js +867 -0
  239. package/dist/forms-numeric-Crrm80Lm.js.map +1 -0
  240. package/dist/{header-C59QZyxV.js → header-kxruN3RM.js} +53 -49
  241. package/dist/header-kxruN3RM.js.map +1 -0
  242. package/dist/{hooks-CM1Vp9Pe.js → hooks-BrlnCwQd.js} +2 -2
  243. package/dist/{hooks-CM1Vp9Pe.js.map → hooks-BrlnCwQd.js.map} +1 -1
  244. package/dist/{http-CLTVJc5I.js → http-CdEIHyQf.js} +2 -2
  245. package/dist/http-CdEIHyQf.js.map +1 -0
  246. package/dist/{icon-badge-Dv0RYQwj.js → icon-badge-Btc6pQrp.js} +4 -4
  247. package/dist/{icon-badge-Dv0RYQwj.js.map → icon-badge-Btc6pQrp.js.map} +1 -1
  248. package/dist/index.js +2 -2
  249. package/dist/input-SX9V0AL3.js +255 -0
  250. package/dist/input-SX9V0AL3.js.map +1 -0
  251. package/dist/input-vxcaNCYC.js +20 -0
  252. package/dist/input-vxcaNCYC.js.map +1 -0
  253. package/dist/{item-pJ0GsOiJ.js → item-DE4YnuJx.js} +18 -17
  254. package/dist/item-DE4YnuJx.js.map +1 -0
  255. package/dist/layout/app-shell.js +1 -1
  256. package/dist/layout/auth.js +1 -1
  257. package/dist/layout/containers.js +1 -1
  258. package/dist/layout/header.js +1 -1
  259. package/dist/layout/hooks.js +1 -1
  260. package/dist/layout/navigation.js +1 -1
  261. package/dist/layout/page.js +1 -1
  262. package/dist/layout/settings.js +1 -1
  263. package/dist/layout/sidebar.js +2 -2
  264. package/dist/layout/workspace.js +1 -1
  265. package/dist/layout.js +10 -10
  266. package/dist/lib/affordance-geometry.generated.d.ts +40 -9
  267. package/dist/lib/control-group-recipes.d.ts +22 -0
  268. package/dist/lib/field-affordance-recipes.d.ts +35 -2
  269. package/dist/lib/field-state-recipes.d.ts +2 -2
  270. package/dist/lib/navigation-row-recipes.d.ts +3 -2
  271. package/dist/lib/overlay-anatomy-recipes.d.ts +1 -1
  272. package/dist/lib/surface-recipes.d.ts +5 -2
  273. package/dist/lib/token-merge.generated.d.ts +144 -2
  274. package/dist/lib/ui-provider/types.d.ts +4 -2
  275. package/dist/lib/use-prefers-reduced-motion.d.ts +2 -0
  276. package/dist/lib/utils.js +1 -1
  277. package/dist/{media-gallery-DhDRgnVZ.js → media-gallery-DLp3HAz0.js} +75 -74
  278. package/dist/media-gallery-DLp3HAz0.js.map +1 -0
  279. package/dist/{mentions-B8Ko-fhS.js → mentions-Cl0Kt_Pd.js} +52 -50
  280. package/dist/{mentions-B8Ko-fhS.js.map → mentions-Cl0Kt_Pd.js.map} +1 -1
  281. package/dist/message-SZUNB1eX.js +127 -0
  282. package/dist/message-SZUNB1eX.js.map +1 -0
  283. package/dist/{navigation-DBEu4POU.js → navigation-DnQSNMT0.js} +64 -55
  284. package/dist/navigation-DnQSNMT0.js.map +1 -0
  285. package/dist/{navigation-BUIn2Qxx.js → navigation-DyytsLRB.js} +37 -37
  286. package/dist/navigation-DyytsLRB.js.map +1 -0
  287. package/dist/{navigation-row-recipes-GVh11KiT.js → navigation-row-recipes-DQEXQcqY.js} +3 -3
  288. package/dist/navigation-row-recipes-DQEXQcqY.js.map +1 -0
  289. package/dist/{number-BNT_BIzJ.js → number-DasMFWEG.js} +4 -4
  290. package/dist/{number-BNT_BIzJ.js.map → number-DasMFWEG.js.map} +1 -1
  291. package/dist/overlays-DUbs1KEi.js +1011 -0
  292. package/dist/overlays-DUbs1KEi.js.map +1 -0
  293. package/dist/{page-BV6ioQg3.js → page-hGmT4nWK.js} +75 -64
  294. package/dist/page-hGmT4nWK.js.map +1 -0
  295. package/dist/{page-header-DQRa0jug.js → page-header-D8nERkn5.js} +9 -9
  296. package/dist/page-header-D8nERkn5.js.map +1 -0
  297. package/dist/{pagination-C29vvt3I.js → pagination-NLGqRirf.js} +20 -20
  298. package/dist/pagination-NLGqRirf.js.map +1 -0
  299. package/dist/{popover-CoLDEg19.js → popover-CghIYdQf.js} +23 -22
  300. package/dist/popover-CghIYdQf.js.map +1 -0
  301. package/dist/{popover-menu-GLIQTJTx.js → popover-menu-B4PoWhRl.js} +6 -6
  302. package/dist/{popover-menu-GLIQTJTx.js.map → popover-menu-B4PoWhRl.js.map} +1 -1
  303. package/dist/{popover.recipes-zgBhMlUu.js → popover.recipes-QlD4JenO.js} +5 -5
  304. package/dist/popover.recipes-QlD4JenO.js.map +1 -0
  305. package/dist/{primitives-DKPOGVpj.js → primitives-C7ff0QaI.js} +120 -113
  306. package/dist/primitives-C7ff0QaI.js.map +1 -0
  307. package/dist/primitives.js +3 -3
  308. package/dist/{progress-BOe8l_FZ.js → progress-BroqrAyV.js} +10 -9
  309. package/dist/progress-BroqrAyV.js.map +1 -0
  310. package/dist/{receipt-BM8xsGFy.js → receipt-BuJynLgf.js} +8 -8
  311. package/dist/{receipt-BM8xsGFy.js.map → receipt-BuJynLgf.js.map} +1 -1
  312. package/dist/{rich-text-B7sBAdDG.js → rich-text-DlxDOtf4.js} +4 -4
  313. package/dist/{rich-text-B7sBAdDG.js.map → rich-text-DlxDOtf4.js.map} +1 -1
  314. package/dist/rich-text-editor-BKyG7rWz.js +574 -0
  315. package/dist/rich-text-editor-BKyG7rWz.js.map +1 -0
  316. package/dist/{rich-text-editor.recipes-DxvOE0Lp.js → rich-text-editor.recipes-B72Nfuze.js} +35 -26
  317. package/dist/rich-text-editor.recipes-B72Nfuze.js.map +1 -0
  318. package/dist/{scroll-area-BheMQ270.js → scroll-area-D-pIhEKl.js} +3 -3
  319. package/dist/scroll-area-D-pIhEKl.js.map +1 -0
  320. package/dist/{separator-Gk_WXH-l.js → separator-BNIgG3au.js} +3 -3
  321. package/dist/{separator-Gk_WXH-l.js.map → separator-BNIgG3au.js.map} +1 -1
  322. package/dist/{separator-DO0EbCEm.js → separator-BhtFyo4x.js} +2 -2
  323. package/dist/{separator-DO0EbCEm.js.map → separator-BhtFyo4x.js.map} +1 -1
  324. package/dist/services/actions.js +1 -1
  325. package/dist/{settings-BnCyyPOJ.js → settings-DOTOzeZ2.js} +10 -9
  326. package/dist/{settings-BnCyyPOJ.js.map → settings-DOTOzeZ2.js.map} +1 -1
  327. package/dist/{sheet-B-q914Ad.js → sheet-BFhrNehm.js} +11 -11
  328. package/dist/sheet-BFhrNehm.js.map +1 -0
  329. package/dist/{sidebar-DPR7fmqN.js → sidebar-CyR4XKwR.js} +219 -200
  330. package/dist/sidebar-CyR4XKwR.js.map +1 -0
  331. package/dist/{sidebar-C_2p3Tfj.js → sidebar-SvGJ0Zwi.js} +63 -58
  332. package/dist/sidebar-SvGJ0Zwi.js.map +1 -0
  333. package/dist/{skeleton-CmT1ppqb.js → skeleton-3F0uhYn3.js} +4 -4
  334. package/dist/{skeleton-CmT1ppqb.js.map → skeleton-3F0uhYn3.js.map} +1 -1
  335. package/dist/{smart-card-CYLn46e6.js → smart-card-DjGVV2xr.js} +171 -165
  336. package/dist/smart-card-DjGVV2xr.js.map +1 -0
  337. package/dist/{spinner-BY9HbUEh.js → spinner-Cpf7oRkF.js} +5 -5
  338. package/dist/{spinner-BY9HbUEh.js.map → spinner-Cpf7oRkF.js.map} +1 -1
  339. package/dist/{structure-MvKVq-oL.js → structure-CRdqVawd.js} +2 -2
  340. package/dist/{structure-MvKVq-oL.js.map → structure-CRdqVawd.js.map} +1 -1
  341. package/dist/style.css +1 -1
  342. package/dist/{surface-recipes-CQfRr-VL.js → surface-recipes-Dd__PD-w.js} +4 -3
  343. package/dist/surface-recipes-Dd__PD-w.js.map +1 -0
  344. package/dist/{table-DnlAJ-xR.js → table-CLtJTxoR.js} +17 -16
  345. package/dist/table-CLtJTxoR.js.map +1 -0
  346. package/dist/table-CcRDZiLP.js +1444 -0
  347. package/dist/table-CcRDZiLP.js.map +1 -0
  348. package/dist/tabs-BNgu7g0u.js +188 -0
  349. package/dist/tabs-BNgu7g0u.js.map +1 -0
  350. package/dist/text-inputs-DsR56TR-.js +330 -0
  351. package/dist/text-inputs-DsR56TR-.js.map +1 -0
  352. package/dist/{text.styles-BwB7vAF2.js → text.styles-Q4sGAIgA.js} +18 -10
  353. package/dist/text.styles-Q4sGAIgA.js.map +1 -0
  354. package/dist/theme.css +77 -115
  355. package/dist/{timelines-B9ICkQcV.js → timelines-D1pkt3se.js} +84 -78
  356. package/dist/timelines-D1pkt3se.js.map +1 -0
  357. package/dist/{tree-BdWSaoFT.js → tree-BtmYyMZV.js} +8 -8
  358. package/dist/{tree-BdWSaoFT.js.map → tree-BtmYyMZV.js.map} +1 -1
  359. package/dist/typography/rich-text.js +1 -1
  360. package/dist/typography-BxQgiZyw.js +96 -0
  361. package/dist/typography-BxQgiZyw.js.map +1 -0
  362. package/dist/typography.js +1 -1
  363. package/dist/{ui-provider-CftIB6TY.js → ui-provider-DRPn3qNl.js} +3 -2
  364. package/dist/ui-provider-DRPn3qNl.js.map +1 -0
  365. package/dist/ui-provider.js +1 -1
  366. package/dist/{upload-D8Za5x_c.js → upload-CDbYw1WN.js} +326 -323
  367. package/dist/upload-CDbYw1WN.js.map +1 -0
  368. package/dist/{upload-queue-hIIYBLS7.js → upload-queue-CNd_hH_a.js} +25 -25
  369. package/dist/upload-queue-CNd_hH_a.js.map +1 -0
  370. package/dist/{usage-card-DnmnJ58D.js → usage-card-VyJLUwRr.js} +53 -54
  371. package/dist/usage-card-VyJLUwRr.js.map +1 -0
  372. package/dist/utils-BvH9PSmq.js +4275 -0
  373. package/dist/utils-BvH9PSmq.js.map +1 -0
  374. package/dist/value-inputs-D0KCrfVC.js +840 -0
  375. package/dist/value-inputs-D0KCrfVC.js.map +1 -0
  376. package/dist/{workspace-C1PZmk8L.js → workspace-CcR8r-Nt.js} +115 -122
  377. package/dist/workspace-CcR8r-Nt.js.map +1 -0
  378. package/docs/consumer-skill/SKILL.md +110 -119
  379. package/docs/consumer-skill/examples/analytics.tsx +34 -0
  380. package/docs/consumer-skill/examples/app-layout.tsx +42 -12
  381. package/docs/consumer-skill/examples/detail.tsx +20 -4
  382. package/docs/consumer-skill/examples/manifest.json +13 -1
  383. package/docs/consumer-skill/examples/website.tsx +56 -0
  384. package/docs/consumer-skill/references/analytics.md +70 -0
  385. package/docs/consumer-skill/references/composition.md +116 -2
  386. package/docs/consumer-skill/references/design-contract.md +33 -7
  387. package/docs/consumer-skill/references/discovery.md +76 -5
  388. package/docs/consumer-skill/references/integration.md +14 -0
  389. package/docs/consumer-skill/references/public-api.json +2023 -218
  390. package/docs/consumer-skill/references/review.md +55 -3
  391. package/docs/consumer-skill/references/theming.md +52 -7
  392. package/docs/consumer-skill/references/tokens.json +177 -9
  393. package/docs/consumer-skill/references/workflows.md +32 -0
  394. package/docs/consumer-skill/scripts/check-composition.mjs +1 -1
  395. package/docs/consumer-skill/scripts/composition-policy.mjs +179 -17
  396. package/docs/consumer-skill/scripts/discovery.mjs +61 -9
  397. package/docs/consumer-skill/scripts/surface-policy.mjs +44 -0
  398. package/package.json +7 -4
  399. package/dist/accordion-B-5Focs8.js.map +0 -1
  400. package/dist/action-menu-Cx3SdfbN.js.map +0 -1
  401. package/dist/affordance-geometry.generated-D8Jcfb0G.js +0 -32
  402. package/dist/affordance-geometry.generated-D8Jcfb0G.js.map +0 -1
  403. package/dist/ai-artifact-B5tPpXnS.js.map +0 -1
  404. package/dist/app-shell-at8Kt4l_.js.map +0 -1
  405. package/dist/auth-OFwWSAap.js +0 -704
  406. package/dist/auth-OFwWSAap.js.map +0 -1
  407. package/dist/breadcrumbs-DdQ_I5ra.js.map +0 -1
  408. package/dist/button-BS6l5JUw.js.map +0 -1
  409. package/dist/buttons-Co6GavvM.js +0 -674
  410. package/dist/buttons-Co6GavvM.js.map +0 -1
  411. package/dist/chart-DVfcwQu6.js +0 -149
  412. package/dist/chart-DVfcwQu6.js.map +0 -1
  413. package/dist/checkbox-BavDRjF7.js.map +0 -1
  414. package/dist/choice-inputs-CC7XqPQO.js +0 -619
  415. package/dist/choice-inputs-CC7XqPQO.js.map +0 -1
  416. package/dist/code-block-xHKbAJDj.js.map +0 -1
  417. package/dist/combobox-DEbdr-3u.js.map +0 -1
  418. package/dist/combobox-xv3yJbzl.js.map +0 -1
  419. package/dist/command-C0xe7u9B.js.map +0 -1
  420. package/dist/comments-DviPLnwy.js +0 -1132
  421. package/dist/comments-DviPLnwy.js.map +0 -1
  422. package/dist/containers-6s-ucRQQ.js.map +0 -1
  423. package/dist/data-display-cWIRdeaf.js.map +0 -1
  424. package/dist/date-picker-CA6ogMQB.js.map +0 -1
  425. package/dist/date-pickers-BPIKLdsD.js +0 -224
  426. package/dist/date-pickers-BPIKLdsD.js.map +0 -1
  427. package/dist/feedback-DWUkgEjR.js.map +0 -1
  428. package/dist/field-affordance-recipes-IjzPrCTw.js +0 -17
  429. package/dist/field-affordance-recipes-IjzPrCTw.js.map +0 -1
  430. package/dist/field-state-recipes-CBTRt9Bt.js.map +0 -1
  431. package/dist/filters-BhsUtsxW.js.map +0 -1
  432. package/dist/form-field-Bn7ZH1rA.js.map +0 -1
  433. package/dist/form-sizing-BWs70_a2.js.map +0 -1
  434. package/dist/forms-numeric-BUBxELBv.js +0 -867
  435. package/dist/forms-numeric-BUBxELBv.js.map +0 -1
  436. package/dist/header-C59QZyxV.js.map +0 -1
  437. package/dist/http-CLTVJc5I.js.map +0 -1
  438. package/dist/input-WwYQZJzG.js +0 -202
  439. package/dist/input-WwYQZJzG.js.map +0 -1
  440. package/dist/input-ci9fIgFH.js +0 -20
  441. package/dist/input-ci9fIgFH.js.map +0 -1
  442. package/dist/item-pJ0GsOiJ.js.map +0 -1
  443. package/dist/media-gallery-DhDRgnVZ.js.map +0 -1
  444. package/dist/message-COsdEvXT.js +0 -108
  445. package/dist/message-COsdEvXT.js.map +0 -1
  446. package/dist/navigation-BUIn2Qxx.js.map +0 -1
  447. package/dist/navigation-DBEu4POU.js.map +0 -1
  448. package/dist/navigation-row-recipes-GVh11KiT.js.map +0 -1
  449. package/dist/overlays-B11wZka6.js +0 -982
  450. package/dist/overlays-B11wZka6.js.map +0 -1
  451. package/dist/page-BV6ioQg3.js.map +0 -1
  452. package/dist/page-header-DQRa0jug.js.map +0 -1
  453. package/dist/pagination-C29vvt3I.js.map +0 -1
  454. package/dist/popover-CoLDEg19.js.map +0 -1
  455. package/dist/popover.recipes-zgBhMlUu.js.map +0 -1
  456. package/dist/primitives-DKPOGVpj.js.map +0 -1
  457. package/dist/progress-BOe8l_FZ.js.map +0 -1
  458. package/dist/rich-text-editor-CoVrTiSv.js +0 -575
  459. package/dist/rich-text-editor-CoVrTiSv.js.map +0 -1
  460. package/dist/rich-text-editor.recipes-DxvOE0Lp.js.map +0 -1
  461. package/dist/scroll-area-BheMQ270.js.map +0 -1
  462. package/dist/select-B2mb-qN2.js +0 -108
  463. package/dist/select-B2mb-qN2.js.map +0 -1
  464. package/dist/sheet-B-q914Ad.js.map +0 -1
  465. package/dist/sidebar-C_2p3Tfj.js.map +0 -1
  466. package/dist/sidebar-DPR7fmqN.js.map +0 -1
  467. package/dist/smart-card-CYLn46e6.js.map +0 -1
  468. package/dist/surface-recipes-CQfRr-VL.js.map +0 -1
  469. package/dist/table-BS39xnlq.js +0 -1424
  470. package/dist/table-BS39xnlq.js.map +0 -1
  471. package/dist/table-DnlAJ-xR.js.map +0 -1
  472. package/dist/tabs-B5cNMWiP.js +0 -187
  473. package/dist/tabs-B5cNMWiP.js.map +0 -1
  474. package/dist/text-inputs-Dh9XGyiS.js +0 -331
  475. package/dist/text-inputs-Dh9XGyiS.js.map +0 -1
  476. package/dist/text.styles-BwB7vAF2.js.map +0 -1
  477. package/dist/timelines-B9ICkQcV.js.map +0 -1
  478. package/dist/typography-Cv8MT-82.js +0 -96
  479. package/dist/typography-Cv8MT-82.js.map +0 -1
  480. package/dist/ui-provider-CftIB6TY.js.map +0 -1
  481. package/dist/upload-D8Za5x_c.js.map +0 -1
  482. package/dist/upload-queue-hIIYBLS7.js.map +0 -1
  483. package/dist/usage-card-DnmnJ58D.js.map +0 -1
  484. package/dist/utils-C2EKeIw3.js +0 -72
  485. package/dist/utils-C2EKeIw3.js.map +0 -1
  486. package/dist/value-inputs-DX2dbxjj.js +0 -824
  487. package/dist/value-inputs-DX2dbxjj.js.map +0 -1
  488. package/dist/workspace-C1PZmk8L.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"ai.js","names":["_Fragment","NumberValue","NumberValue","_Fragment","cn","Button","Text","DisplayLabel","TextLink","AdaptiveGrid","Stack","Progress","SecondaryValue","MonoValue","Percent","Number","IconBadge","Badge","Separator","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","RefreshCw","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","Quote","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","Package","name","version","description","license","publishedAt","weeklyDownloads","MetaItem","keywords","keyword","bodyClassName","homepage","repository","Globe","Code2","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 { RefreshCw } from 'lucide-react';\n\nimport { Badge } from '../../../base/badge';\nimport { Button } from '../../../base/buttons';\nimport { Stack } from '../../../base/structure';\nimport { SecondaryValue } from '../../../primitives';\nimport { Text } from '../../../typography/text';\nimport { useStrings } from '../../../../lib/strings';\nimport { cn } from '../../../../lib/utils';\n\nimport { defaultAiSummaryStrings } from '../ai.strings';\nimport type { AiSummaryBlockProps, ConfidenceLevel } from './types';\n\nconst confidenceBars: Record<ConfidenceLevel, number> = {\n\tlow: 1,\n\tmedium: 2,\n\thigh: 3,\n};\n\nfunction ConfidenceBars({ level, label }: { level: ConfidenceLevel; label: string }) {\n\tconst filled = confidenceBars[level];\n\n\treturn (\n\t\t<div className=\"ai-summary--confidence flex items-center gap-space-sm\">\n\t\t\t<div className=\"flex items-center gap-space-2xs\" aria-hidden=\"true\">\n\t\t\t\t{Array.from({ length: 3 }, (_, i) => (\n\t\t\t\t\t<div\n\t\t\t\t\t\tkey={`bar-${String(i)}`}\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t'h-2.5 w-1 rounded-radius-sm',\n\t\t\t\t\t\t\ti < filled ? 'bg-foreground/60' : 'bg-muted-foreground/20',\n\t\t\t\t\t\t)}\n\t\t\t\t\t/>\n\t\t\t\t))}\n\t\t\t</div>\n\t\t\t<Text size=\"xs\" type=\"secondary\" tag=\"span\" className=\"capitalize\">\n\t\t\t\t{label}\n\t\t\t</Text>\n\t\t</div>\n\t);\n}\n\nexport function AiSummaryBlock({\n\tdata,\n\tchildren,\n\tmetadata,\n\tactions,\n\tfooter,\n\tclassName,\n\tstrings: stringsProp,\n}: AiSummaryBlockProps) {\n\tconst strings = useStrings(defaultAiSummaryStrings, stringsProp);\n\tconst defaultMetadata = (\n\t\t<div className=\"ai-summary--metadata flex min-w-0 flex-wrap items-center gap-x-space-md gap-y-space-xs\">\n\t\t\t{!!data.generatedAt && (\n\t\t\t\t<SecondaryValue size=\"xs\" className=\"min-w-0\">\n\t\t\t\t\t{data.generatedAt}\n\t\t\t\t</SecondaryValue>\n\t\t\t)}\n\t\t\t{!!data.model && (\n\t\t\t\t<SecondaryValue size=\"xs\" className=\"min-w-0 truncate\">\n\t\t\t\t\t{data.model}\n\t\t\t\t</SecondaryValue>\n\t\t\t)}\n\t\t</div>\n\t);\n\tconst defaultActions = data.onRegenerate ? (\n\t\t<Button tone=\"secondary\" buttonStyle=\"ghost\" onClick={data.onRegenerate}>\n\t\t\t<RefreshCw className=\"mr-1 h-3 w-3\" />\n\t\t\t{strings.regenerate}\n\t\t</Button>\n\t) : null;\n\tconst resolvedMetadata = metadata === undefined ? defaultMetadata : metadata;\n\tconst resolvedActions = actions === undefined ? defaultActions : actions;\n\tconst footerContent = footer !== undefined\n\t\t? footer\n\t\t: (resolvedMetadata || resolvedActions) && (\n\t\t\t<>\n\t\t\t\t{resolvedMetadata}\n\t\t\t\t{resolvedActions}\n\t\t\t</>\n\t\t);\n\n\treturn (\n\t\t<Stack\n\t\t\tdata-component=\"ai-summary\"\n\t\t\tdata-slot=\"ai-summary\"\n\t\t\tclassName={cn('ai-summary--component', className)}\n\t\t>\n\t\t\t<Text lineHeight=\"relaxed\">\n\t\t\t\t{data.summary}\n\t\t\t</Text>\n\n\t\t\t{data.entities.length > 0 && (\n\t\t\t\t<Stack direction=\"horizontal\" wrap gap=\"sm\" className=\"ai-summary--entities min-w-0\">\n\t\t\t\t\t{data.entities.map((entity) => (\n\t\t\t\t\t\t<Badge key={entity} tone=\"secondary\">\n\t\t\t\t\t\t\t{entity}\n\t\t\t\t\t\t</Badge>\n\t\t\t\t\t))}\n\t\t\t\t</Stack>\n\t\t\t)}\n\n\t\t\t<ConfidenceBars level={data.confidence} label={strings.confidenceLevels[data.confidence]} />\n\n\t\t\t{children}\n\n\t\t\t{!!footerContent && (\n\t\t\t\t<Stack\n\t\t\t\t\tdirection={{ base: 'vertical', sm: 'horizontal' }}\n\t\t\t\t\tgap=\"md\"\n\t\t\t\t\tjustify={{ sm: 'between' }}\n\t\t\t\t\tclassName=\"ai-summary--footer pt-space-xs\"\n\t\t\t\t>\n\t\t\t\t\t{footerContent}\n\t\t\t\t</Stack>\n\t\t\t)}\n\t\t</Stack>\n\t);\n}\n","import { Badge } from '../../../base/badge';\nimport { Stack } from '../../../base/structure';\nimport { InlineStat } from '../../data-display';\nimport { Separator } from '../../../base/display/separator';\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<Stack direction=\"horizontal\" wrap align=\"center\" gap=\"sm\">\n\t\t\t\t<Badge tone=\"primary\">\n\t\t\t\t\t{data.requestType}\n\t\t\t\t</Badge>\n\t\t\t\t<Badge tone={data.urgencyTone}>\n\t\t\t\t\t{data.urgency}\n\t\t\t\t</Badge>\n\t\t\t\t<Badge tone={data.sentimentTone} dot>\n\t\t\t\t\t{data.tone}\n\t\t\t\t</Badge>\n\t\t\t</Stack>\n\n\t\t\t<InlineStat\n\t\t\t\tlabel={strings.complexityLabel}\n\t\t\t\tlabelClassName=\"text-sm font-medium text-foreground\"\n\t\t\t\tvalue={\n\t\t\t\t\t<span className=\"flex items-center gap-space-xs\">\n\t\t\t\t\t\t{Array.from({ length: 5 }, (_, i) => (\n\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\tkey={`cx-${String(i)}`}\n\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t'h-1.5 w-3 rounded-radius-sm',\n\t\t\t\t\t\t\t\t\ti < data.complexityScore ? 'bg-foreground/60' : 'bg-muted',\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t))}\n\t\t\t\t\t\t<Text tag=\"span\" size=\"xs\" type=\"secondary\" className=\"ml-1\">\n\t\t\t\t\t\t\t{String(data.complexityScore)}/5\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t</span>\n\t\t\t\t}\n\t\t\t/>\n\n\t\t\t{data.flags.length > 0 && (\n\t\t\t\t<InlineStat\n\t\t\t\t\tlabel={strings.flagsLabel}\n\t\t\t\t\tlabelClassName=\"text-sm font-medium text-foreground\"\n\t\t\t\t\tvalue={\n\t\t\t\t\t\t<span className=\"flex gap-space-xs\">\n\t\t\t\t\t\t\t{data.flags.map((flag) => (\n\t\t\t\t\t\t\t\t<Badge key={flag} tone=\"warning\">\n\t\t\t\t\t\t\t\t\t{flag}\n\t\t\t\t\t\t\t\t</Badge>\n\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t}\n\t\t\t\t/>\n\t\t\t)}\n\n\t\t\t<InlineStat\n\t\t\t\tlabel={strings.nextStepLabel}\n\t\t\t\tlabelClassName=\"text-sm font-medium text-foreground\"\n\t\t\t\tvalue={<Badge tone=\"info\">{data.suggestedAction}</Badge>}\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<Separator />\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 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',\n\t\t\t\t\t\t\t\tvariant === 'destructive' && 'text-destructive',\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</svg>\n\t\t\t\t\t<div className=\"absolute inset-0 flex flex-col items-center justify-center\">\n\t\t\t\t\t\t<Percent value={pct} scaled weight=\"semibold\" className=\"leading-none\" />\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<Stack gap=\"sm\">\n\t\t\t\t\t<DisplayLabel>\n\t\t\t\t\t\t{strings.confidenceLabel}\n\t\t\t\t\t</DisplayLabel>\n\t\t\t\t\t<Stack direction=\"horizontal\" gap=\"sm\">\n\t\t\t\t\t\t<Badge tone={variant}>{label}</Badge>\n\t\t\t\t\t\t{!!model && (\n\t\t\t\t\t\t\t<Text size=\"xs\" type=\"secondary\" className=\"truncate\">\n\t\t\t\t\t\t\t\t{model}\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</Stack>\n\t\t\t\t</Stack>\n\t\t\t</div>\n\n\t\t\t{!!factors && factors.length > 0 && (\n\t\t\t\t<Stack gap=\"md\" className=\"mt-space-xl\">\n\t\t\t\t\t<DisplayLabel>\n\t\t\t\t\t\t{strings.factorsLabel}\n\t\t\t\t\t</DisplayLabel>\n\t\t\t\t\t{factors.map((f) => (\n\t\t\t\t\t\t<Stack key={f.label} gap=\"sm\">\n\t\t\t\t\t\t\t<InlineStat\n\t\t\t\t\t\t\t\tlabel={f.label}\n\t\t\t\t\t\t\t\tvalue={<Percent value={f.score} size=\"xs\" weight=\"semibold\" />}\n\t\t\t\t\t\t\t\tmono\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<Progress value={Math.round(f.score * 100)} aria-label={f.label} />\n\t\t\t\t\t\t</Stack>\n\t\t\t\t\t))}\n\t\t\t\t</Stack>\n\t\t\t)}\n\t\t</Stack>\n\t);\n}\n\nAiConfidence.displayName = 'AiConfidence';\n","import type { LucideIcon } from 'lucide-react';\nimport type { StringsProp } from '../../../../lib/strings';\n\nexport interface AiPromptSuggestion {\n\t/** Stable identity for this entry. */\n\tid: string;\n\t/** Display label. */\n\tlabel: string;\n\t/** Supporting copy shown under the label. */\n\tdescription?: string;\n\t/** Leading glyph. */\n\ticon?: LucideIcon;\n}\n\nexport interface AiPromptSuggestionsStrings {\n\t/** Surface title. */\n\ttitle: string;\n\thint: string;\n}\n\nexport const defaultAiPromptSuggestionsStrings: AiPromptSuggestionsStrings = {\n\ttitle: 'Try asking',\n\thint: 'Tap a prompt to start',\n};\n\nexport interface AiPromptSuggestionsProps {\n\tsuggestions: AiPromptSuggestion[];\n\tonPick?: (suggestion: AiPromptSuggestion) => void;\n\t/** Merged onto the outermost node. */\n\tclassName?: string;\n\t/** Overrides this surface's own copy. */\n\tstrings?: StringsProp<AiPromptSuggestionsStrings>;\n}\n","/**\n * AiPromptSuggestions — grid of clickable prompt rows.\n * Use to seed a chat or assistant input with curated starting prompts.\n */\nimport { IconBadge } from '../../../base/display';\nimport { Stack } from '../../../base/structure';\nimport {\n\tItem,\n\tItemContent,\n\tItemDescription,\n\tItemMedia,\n\tItemTitle,\n} from '../../../base/item';\nimport { cn } from '../../../../lib/utils';\nimport { useStrings } from '../../../../lib/strings';\n\nimport {\n\tdefaultAiPromptSuggestionsStrings,\n\ttype AiPromptSuggestionsProps,\n} from './types';\n\nexport function AiPromptSuggestions({ suggestions, onPick, className, strings: stringsProp }: AiPromptSuggestionsProps) {\n\tconst strings = useStrings(defaultAiPromptSuggestionsStrings, stringsProp);\n\n\treturn (\n\t\t<Stack\n\t\t\tdata-component=\"ai-prompt-suggestions\"\n\t\t\tdata-slot=\"ai-prompt-suggestions\"\n\t\t\tclassName={cn('ai-prompt-suggestions--component', className)}\n\t\t>\n\t\t\t<Stack gap=\"normal\" className=\"ai-prompt-suggestions--intro\">\n\t\t\t\t<ItemTitle>{strings.title}</ItemTitle>\n\t\t\t\t<ItemDescription>{strings.hint}</ItemDescription>\n\t\t\t</Stack>\n\t\t\t<div className=\"grid grid-cols-[repeat(auto-fit,minmax(min(15rem,100%),1fr))] gap-space-xl\">\n\t\t\t\t{suggestions.map((s) => {\n\t\t\t\t\tconst Icon = s.icon;\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<Item\n\t\t\t\t\t\t\tkey={s.id}\n\t\t\t\t\t\t\tvariant=\"outline\"\n\t\t\t\t\t\t\trender={<button type=\"button\" onClick={() => onPick?.(s)} />}\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t'ai-prompt-suggestions--item h-full items-start gap-space-lg p-surface transition-[border-color,background] duration-150',\n\t\t\t\t\t\t\t\t'hover:border-foreground/20 hover:bg-muted/40',\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{!!Icon && (\n\t\t\t\t\t\t\t\t<ItemMedia>\n\t\t\t\t\t\t\t\t\t<IconBadge icon={Icon} tone=\"primary\" size=\"md\" shape=\"square\" />\n\t\t\t\t\t\t\t\t</ItemMedia>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t<ItemContent className=\"min-w-0 gap-space-sm\">\n\t\t\t\t\t\t\t\t<ItemTitle>{s.label}</ItemTitle>\n\t\t\t\t\t\t\t\t{!!s.description && (\n\t\t\t\t\t\t\t\t\t<ItemDescription>{s.description}</ItemDescription>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</ItemContent>\n\t\t\t\t\t\t</Item>\n\t\t\t\t\t);\n\t\t\t\t})}\n\t\t\t</div>\n\t\t</Stack>\n\t);\n}\n\nAiPromptSuggestions.displayName = 'AiPromptSuggestions';\n","import type { StringsProp } from '../../../../lib/strings';\n\nexport interface AiTokenUsageStrings {\n\t/** Surface title. */\n\ttitle: string;\n\tinput: string;\n\toutput: string;\n\t/** Total number of records across all pages. */\n\ttotal: string;\n\tcost: string;\n}\n\nexport const defaultAiTokenUsageStrings: AiTokenUsageStrings = {\n\ttitle: 'Token usage',\n\tinput: 'Input',\n\toutput: 'Output',\n\ttotal: 'Total',\n\tcost: 'Estimated cost',\n};\n\nexport interface AiTokenUsageProps {\n\tmodel?: string;\n\tinputTokens: number;\n\toutputTokens: number;\n\tcost?: string;\n\tmaxTokens?: number;\n\t/** Merged onto the outermost node. */\n\tclassName?: string;\n\t/** Overrides this surface's own copy. */\n\tstrings?: StringsProp<AiTokenUsageStrings>;\n}\n","/**\n * AiTokenUsage — input + output token counts with a usage bar\n * relative to a max context window, plus optional cost estimate.\n */\nimport { useStrings } from '../../../../lib/strings';\nimport { Badge } from '../../../base/badge';\nimport { DisplayLabel, Text } from '../../../typography';\nimport { InlineStat } from '../../data-display';\nimport { AdaptiveGrid, Stack } from '../../../base/structure';\nimport { Number as NumberValue, Percent } from '../../../primitives';\n\nimport { defaultAiTokenUsageStrings, type AiTokenUsageProps } from './types';\n\nimport { cn } from '../../../../lib/utils';\nexport function AiTokenUsage({\n\tmodel,\n\tinputTokens,\n\toutputTokens,\n\tcost,\n\tmaxTokens,\n\tclassName,\n\tstrings: stringsProp,\n}: AiTokenUsageProps) {\n\tconst strings = useStrings(defaultAiTokenUsageStrings, stringsProp);\n\tconst total = inputTokens + outputTokens;\n\tconst pct = maxTokens ? Math.min(100, Math.round((total / maxTokens) * 100)) : 0;\n\n\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<AdaptiveGrid minColumnWidth=\"sm\" 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 tile reads label-over-value.\n\t\t\t\t\t<div key={cell.label} className=\"rounded-radius-md bg-muted/40 p-surface-xs\">\n\t\t\t\t\t\t<Stack gap=\"2xs\">\n\t\t\t\t\t\t\t<DisplayLabel>{cell.label}</DisplayLabel>\n\t\t\t\t\t\t\t<NumberValue value={cell.value} weight=\"semibold\" align=\"left\" />\n\t\t\t\t\t\t</Stack>\n\t\t\t\t\t</div>\n\t\t\t\t))}\n\t\t\t</AdaptiveGrid>\n\t\t\t{!!maxTokens && (\n\t\t\t\t<div className=\"mt-space-lg\">\n\t\t\t\t\t<InlineStat\n\t\t\t\t\t\tlabel={(\n\t\t\t\t\t\t\t<span className=\"inline-flex items-center gap-space-xs\">\n\t\t\t\t\t\t\t\t<NumberValue value={total} size=\"xs\" align=\"left\" />\n\t\t\t\t\t\t\t\t<Text tag=\"span\" size=\"xs\" aria-hidden>/</Text>\n\t\t\t\t\t\t\t\t<NumberValue value={maxTokens} size=\"xs\" align=\"left\" />\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\tvalue={<Percent value={pct} scaled size=\"xs\" weight=\"semibold\" align=\"right\" />}\n\t\t\t\t\t\tmono\n\t\t\t\t\t\tvalueClassName=\"text-xs font-semibold\"\n\t\t\t\t\t/>\n\t\t\t\t\t<div className=\"mt-1 h-1.5 w-full overflow-hidden rounded-full bg-muted\">\n\t\t\t\t\t\t<div className=\"h-full rounded-full bg-primary\" style={{ width: `${pct}%` }} />\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t\t{!!cost && (\n\t\t\t\t<InlineStat\n\t\t\t\t\tclassName=\"mt-space-lg rounded-radius-md bg-primary/5 p-surface-xs\"\n\t\t\t\t\tlabel={<Text tag=\"span\" size=\"xs\" weight=\"medium\" lineHeight=\"tight\">{strings.cost}</Text>}\n\t\t\t\t\tvalue={cost}\n\t\t\t\t\tmono\n\t\t\t\t\tvalueClassName=\"text-sm font-bold\"\n\t\t\t\t/>\n\t\t\t)}\n\t\t</Stack>\n\t);\n}\n\nAiTokenUsage.displayName = 'AiTokenUsage';\n","import type { StringsProp } from '../../../../lib/strings';\n\nexport type AiFeedbackVote = 'up' | 'down' | null;\n\nexport interface AiFeedbackStrings {\n\tprompt: string;\n\tthumbsUpAria: string;\n\tthumbsDownAria: string;\n\tcommentPlaceholder: string;\n\tsubmit: string;\n\tthanks: string;\n}\n\nexport const defaultAiFeedbackStrings: AiFeedbackStrings = {\n\tprompt: 'Was this helpful?',\n\tthumbsUpAria: 'Mark as helpful',\n\tthumbsDownAria: 'Mark as not helpful',\n\tcommentPlaceholder: 'Tell us more (optional)',\n\tsubmit: 'Send feedback',\n\tthanks: 'Thanks for your feedback.',\n};\n\nexport interface AiFeedbackProps {\n\t/** Current value. Controlled. */\n\tvalue?: AiFeedbackVote;\n\tonVote?: (vote: AiFeedbackVote) => void;\n\t/** Fired when a comment is submitted. */\n\tonSubmitComment?: (comment: string, vote: AiFeedbackVote) => void;\n\tallowComment?: boolean;\n\tsubmitted?: boolean;\n\t/** Merged onto the outermost node. */\n\tclassName?: string;\n\t/** Overrides this surface's own copy. */\n\tstrings?: StringsProp<AiFeedbackStrings>;\n}\n","/**\n * AiFeedback — thumbs-up / thumbs-down voter with an optional follow-up\n * comment field. Wires into model-improvement loops: emits the vote via\n * `onVote` immediately and a comment via `onSubmitComment` when the user\n * submits the textarea. After `submitted=true` the surface is replaced with\n * a thank-you confirmation. Strings overridable for i18n.\n */\nimport { useState } from 'react';\nimport { ThumbsDown, ThumbsUp } from 'lucide-react';\nimport { Button } from '../../../base/buttons';\nimport { Textarea } from '../../../base/text-inputs';\nimport { Stack } from '../../../base/structure';\nimport { Text } from '../../../typography';\nimport { useStrings } from '../../../../lib/strings';\nimport { cn } from '../../../../lib/utils';\n\nimport {\n\tdefaultAiFeedbackStrings,\n\ttype AiFeedbackProps,\n\ttype AiFeedbackVote,\n} from './types';\n\nexport function AiFeedback({\n\tvalue,\n\tonVote,\n\tonSubmitComment,\n\tallowComment = true,\n\tsubmitted = false,\n\tclassName,\n\tstrings: stringsProp,\n}: AiFeedbackProps) {\n\tconst strings = useStrings(defaultAiFeedbackStrings, stringsProp);\n\tconst [internalVote, setInternalVote] = useState<AiFeedbackVote>(null);\n\tconst [comment, setComment] = useState('');\n\tconst vote = value ?? internalVote;\n\n\tconst cast = (next: AiFeedbackVote) => {\n\t\tconst resolved = vote === next ? null : next;\n\t\tif (value === undefined) setInternalVote(resolved);\n\t\tonVote?.(resolved);\n\t};\n\n\tif (submitted) {\n\t\treturn (\n\t\t\t<div\n\t\t\t\tclassName={cn('ai-feedback--component', \n\t\t\t\t\t'inline-flex items-center gap-space-md rounded-full bg-success/10 px-space-lg py-space-sm',\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t<ThumbsUp className=\"size-icon-md text-success\" />\n\t\t\t\t<Text size=\"xs\" type=\"success\" weight=\"medium\">\n\t\t\t\t\t{strings.thanks}\n\t\t\t\t</Text>\n\t\t\t</div>\n\t\t);\n\t}\n\n\treturn (\n\t\t<div className={cn('ai-feedback--component inline-flex flex-col gap-space-md', className)}>\n\t\t\t<div className=\"flex items-center gap-space-md\">\n\t\t\t\t<Text size=\"xs\" type=\"secondary\">{strings.prompt}</Text>\n\t\t\t\t<Button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\ttone=\"secondary\"\n\t\t\t\t\tbuttonStyle={vote === 'up' ? 'solid' : 'ghost'}\n\t\t\t\t\tsize=\"sm\" iconOnly\n\t\t\t\t\taria-label={strings.thumbsUpAria}\n\t\t\t\t\taria-pressed={vote === 'up'}\n\t\t\t\t\tonClick={() => cast('up')}\n\t\t\t\t\tclassName={cn(vote === 'up' && 'text-success bg-success/15 hover:bg-success/20')}\n\t\t\t\t>\n\t\t\t\t\t<ThumbsUp className=\"size-icon-md\" />\n\t\t\t\t</Button>\n\t\t\t\t<Button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\ttone=\"secondary\"\n\t\t\t\t\tbuttonStyle={vote === 'down' ? 'solid' : 'ghost'}\n\t\t\t\t\tsize=\"sm\" iconOnly\n\t\t\t\t\taria-label={strings.thumbsDownAria}\n\t\t\t\t\taria-pressed={vote === 'down'}\n\t\t\t\t\tonClick={() => cast('down')}\n\t\t\t\t\tclassName={cn(vote === 'down' && 'text-destructive bg-destructive/15 hover:bg-destructive/20')}\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\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, Quote } from 'lucide-react';\nimport { Button } from '../../../base/buttons';\nimport { Stack } from '../../../base/structure';\nimport { Number as NumberValue, Percent, SecondaryValue } from '../../../primitives';\nimport { Text } from '../../../typography';\nimport {\n\tItem,\n\tItemActions,\n\tItemContent,\n\tItemDescription,\n\tItemFooter,\n\tItemGroup,\n\tItemMedia,\n\tItemTitle,\n} from '../../../base/item';\nimport { mergeStrings } from '../../../../lib/strings';\nimport { cn } from '../../../../lib/utils';\n\nimport { defaultAiCitationStrings, type AiCitationProps, type AiCitationSource } from './types';\n\nexport function AiCitation({\n\tsources,\n\texpanded: expandedProp,\n\tdefaultExpanded = false,\n\tonExpandedChange,\n\tmaxCollapsedRows = 0,\n\tclassName,\n\tstrings: stringsProp,\n}: AiCitationProps) {\n\t// `sourceCount` is a function so we cannot use `useStrings` deep-merge\n\t// (the merger replaces functions wholesale, which is what we want).\n\tconst strings = mergeStrings(defaultAiCitationStrings, stringsProp);\n\tconst [internalExpanded, setInternalExpanded] = useState(defaultExpanded);\n\tconst expanded = expandedProp ?? internalExpanded;\n\tconst setExpanded = (next: boolean) => {\n\t\tif (expandedProp === undefined) setInternalExpanded(next);\n\t\tonExpandedChange?.(next);\n\t};\n\tconst visible = expanded ? sources : sources.slice(0, Math.max(0, maxCollapsedRows));\n\tconst hidden = sources.length - visible.length;\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t'ai-citation--component',\n\t\t\t\t'rounded-radius border border-border bg-card px-surface-xs py-surface-xs shadow-xs',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t>\n\t\t\t<Stack gap=\"lg\">\n\t\t\t\t<Button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\ttone=\"secondary\"\n\t\t\t\t\tbuttonStyle=\"ghost\"\n\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\tonClick={() => setExpanded(!expanded)}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t'ai-citation--trigger h-auto justify-start gap-space-sm rounded-radius-md px-control py-row-y',\n\t\t\t\t\t\t'text-muted-foreground hover:text-foreground hover:bg-muted/40',\n\t\t\t\t\t)}\n\t\t\t\t\taria-expanded={expanded}\n\t\t\t\t\taria-label={expanded ? strings.collapse : strings.expand}\n\t\t\t\t>\n\t\t\t\t\t<Quote className=\"size-icon-md\" />\n\t\t\t\t\t<Text weight=\"medium\">\n\t\t\t\t\t\t{strings.title} · {strings.sourceCount(sources.length)}\n\t\t\t\t\t</Text>\n\t\t\t\t\t{expanded ? <ChevronDown className=\"size-icon-md\" /> : <ChevronRight className=\"size-icon-md\" />}\n\t\t\t\t</Button>\n\n\t\t\t\t{(expanded || maxCollapsedRows > 0) && (\n\t\t\t\t\t<ItemGroup>\n\t\t\t\t\t\t{visible.map((s, i) => (\n\t\t\t\t\t\t\t<CitationRow key={s.id} source={s} index={i + 1} strings={strings} />\n\t\t\t\t\t\t))}\n\t\t\t\t\t\t{!expanded && hidden > 0 && (\n\t\t\t\t\t\t\t<Text size=\"xs\" type=\"secondary\">\n\t\t\t\t\t\t\t\t{strings.hiddenCount(hidden)}\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</ItemGroup>\n\t\t\t\t)}\n\t\t\t</Stack>\n\t\t</div>\n\t);\n}\n\nAiCitation.displayName = 'AiCitation';\n\nfunction CitationRow({\n\tsource,\n\tindex,\n\tstrings,\n}: {\n\tsource: AiCitationSource;\n\tindex: number;\n\tstrings: ReturnType<typeof mergeStrings<typeof defaultAiCitationStrings>>;\n}) {\n\tconst relevancePct =\n\t\ttypeof source.relevance === 'number' ? Math.round(Math.max(0, Math.min(1, source.relevance)) * 100) : null;\n\n\tconst TitleEl = source.url ? 'a' : 'span';\n\tconst titleProps = source.url\n\t\t? {\n\t\t\t\thref: source.url,\n\t\t\t\ttarget: '_blank' as const,\n\t\t\t\trel: 'noopener noreferrer',\n\t\t\t}\n\t\t: {};\n\n\treturn (\n\t\t<Item variant=\"outline\" size=\"sm\" className=\"items-start px-surface-xs py-surface-xs\">\n\t\t\t<ItemMedia>\n\t\t\t\t<NumberValue\n\t\t\t\t\tvalue={index}\n\t\t\t\t\tsize=\"xs\"\n\t\t\t\t\tweight=\"semibold\"\n\t\t\t\t\ttype=\"secondary\"\n\t\t\t\t\talign=\"center\"\n\t\t\t\t\tclassName=\"inline-flex size-icon-lg shrink-0 items-center justify-center rounded-full bg-muted\"\n\t\t\t\t/>\n\t\t\t</ItemMedia>\n\t\t\t<ItemContent>\n\t\t\t\t<ItemTitle className=\"truncate\">\n\t\t\t\t\t<TitleEl\n\t\t\t\t\t\t{...titleProps}\n\t\t\t\t\t\tclassName={cn('truncate', source.url && 'hover:text-primary-accent hover:underline')}\n\t\t\t\t\t>\n\t\t\t\t\t\t{source.title}\n\t\t\t\t\t\t{!!source.url && <ExternalLink className=\"ml-1 inline size-icon-sm align-baseline\" />}\n\t\t\t\t\t</TitleEl>\n\t\t\t\t</ItemTitle>\n\t\t\t\t{!!source.snippet && <ItemDescription clamp={2}>{source.snippet}</ItemDescription>}\n\t\t\t\t{(source.publisher || source.publishedAt) && (\n\t\t\t\t\t<ItemFooter className=\"mt-1 justify-start gap-space-sm\">\n\t\t\t\t\t\t{!!source.publisher && (\n\t\t\t\t\t\t\t<Text size=\"xs\" type=\"discrete\">\n\t\t\t\t\t\t\t\t{source.publisher}\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{!!source.publisher && !!source.publishedAt && (\n\t\t\t\t\t\t\t<Text size=\"xs\" type=\"discrete\">\n\t\t\t\t\t\t\t\t·\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{!!source.publishedAt && (\n\t\t\t\t\t\t\t<SecondaryValue size=\"xs\" className=\"tabular-nums opacity-80\">\n\t\t\t\t\t\t\t\t{source.publishedAt}\n\t\t\t\t\t\t\t</SecondaryValue>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</ItemFooter>\n\t\t\t\t)}\n\t\t\t</ItemContent>\n\t\t\t{relevancePct !== null && (\n\t\t\t\t<ItemActions className=\"w-16 flex-col items-end gap-space-2xs\">\n\t\t\t\t\t<Percent value={relevancePct} scaled size=\"xs\" type=\"secondary\" weight=\"medium\" />\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName=\"h-1 w-full overflow-hidden rounded-full bg-muted\"\n\t\t\t\t\t\trole=\"progressbar\"\n\t\t\t\t\t\taria-label={strings.relevance}\n\t\t\t\t\t\taria-valuemin={0}\n\t\t\t\t\t\taria-valuemax={100}\n\t\t\t\t\t\taria-valuenow={relevancePct}\n\t\t\t\t\t>\n\t\t\t\t\t\t<div className=\"h-full rounded-full bg-primary\" style={{ width: `${relevancePct}%` }} />\n\t\t\t\t\t</div>\n\t\t\t\t</ItemActions>\n\t\t\t)}\n\t\t</Item>\n\t);\n}\n","import type { StringsProp } from '../../../../lib/strings';\n\nexport interface AiInlineCitationStrings {\n\t/** Tooltip prefix when only a number is rendered. */\n\tsourcePrefix: string;\n\t/** Aria label template — supports `{{n}}` and `{{title}}` placeholders. */\n\topenAria: string;\n}\n\nexport const defaultAiInlineCitationStrings: AiInlineCitationStrings = {\n\tsourcePrefix: 'Source',\n\topenAria: 'Open source {{n}}: {{title}}',\n};\n\nexport interface AiInlineCitationProps {\n\t/** 1-indexed citation number rendered inside the pill. */\n\tindex: number;\n\t/** Title of the cited source — used in the tooltip / aria-label. */\n\ttitle?: string;\n\t/** Optional URL — when provided, the pill renders as a link. */\n\turl?: string;\n\t/** Click handler — preferred over `url` for SPA / virtual link routing. */\n\tonSelect?: () => void;\n\t/** Merged onto the outermost node. */\n\tclassName?: string;\n\t/** Overrides this surface's own copy. */\n\tstrings?: StringsProp<AiInlineCitationStrings>;\n}\n","/**\n * AiInlineCitation — small footnote-style pill rendered inline inside AI\n * response prose. The number references a position in the parent\n * sources/AiCitation list. Hover to see the source title; click to jump.\n */\nimport { Text, TextLink } from '../../../typography';\nimport { Button } from '../../../base/buttons';\nimport { mergeStrings } from '../../../../lib/strings';\nimport { cn } from '../../../../lib/utils';\n\nimport {\n\tdefaultAiInlineCitationStrings,\n\ttype AiInlineCitationProps,\n} from './types';\n\nfunction interpolate(template: string, params: Record<string, string | number>): string {\n\treturn template.replace(/\\{\\{\\s*(\\w+)\\s*\\}\\}/g, (m, k) => {\n\t\tconst v = params[k];\n\t\treturn v === undefined ? m : String(v);\n\t});\n}\n\nexport function AiInlineCitation({\n\tindex,\n\ttitle,\n\turl,\n\tonSelect,\n\tclassName,\n\tstrings: stringsProp,\n}: AiInlineCitationProps) {\n\tconst strings = mergeStrings(defaultAiInlineCitationStrings, stringsProp);\n\tconst ariaLabel = interpolate(strings.openAria, {\n\t\tn: index,\n\t\ttitle: title ?? '',\n\t});\n\tconst tooltip = title ? `${strings.sourcePrefix} ${index}: ${title}` : `${strings.sourcePrefix} ${index}`;\n\n\t// The Text child owns the compact numeric citation role.\n\t// The active variant restates the resting `-translate-y-px` on the same line,\n\t// the way the carousel controls restate their centring: the shared button\n\t// base ships `active:…:translate-y-px`, and cancelling to 0 instead would\n\t// drop this marker off its optical baseline for the duration of a press.\n\tconst baseCls = cn(\n\t\t'inline-flex h-5 min-w-5 -translate-y-px active:not-aria-[haspopup]:-translate-y-px items-center justify-center rounded px-space-xs',\n\t\t'align-middle tabular-nums',\n\t\t'bg-muted text-muted-foreground',\n\t\t'hover:bg-primary/10 hover:text-primary-accent',\n\t\t'transition-colors duration-150',\n\t\t'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/40',\n\t\tclassName,\n\t);\n\n\tif (url) {\n\t\treturn (\n\t\t\t<TextLink\n\t\t\t\thref={url}\n\t\t\t\tsize=\"inherit\"\n\t\t\t\tunderline={false}\n\t\t\t\ttarget=\"_blank\"\n\t\t\t\trel=\"noopener noreferrer\"\n\t\t\t\ttitle={tooltip}\n\t\t\t\taria-label={ariaLabel}\n\t\t\t\tclassName={cn('ai-inline-citation--component', baseCls)}\n\t\t\t>\n\t\t\t\t<Text tag=\"span\" size=\"xs\" weight=\"medium\" className=\"leading-none\">\n\t\t\t\t\t{index}\n\t\t\t\t</Text>\n\t\t\t</TextLink>\n\t\t);\n\t}\n\n\tif (onSelect) {\n\t\treturn (\n\t\t\t<Button\n\t\t\t\ttype=\"button\"\n\t\t\t\ttone=\"secondary\"\n\t\t\t\tbuttonStyle=\"ghost\"\n\t\t\t\tsize=\"sm\"\n\t\t\t\tonClick={onSelect}\n\t\t\t\ttitle={tooltip}\n\t\t\t\taria-label={ariaLabel}\n\t\t\t\tclassName={cn('ai-inline-citation--component', baseCls)}\n\t\t\t>\n\t\t\t\t<Text tag=\"span\" size=\"xs\" weight=\"medium\" className=\"leading-none\">\n\t\t\t\t\t{index}\n\t\t\t\t</Text>\n\t\t\t</Button>\n\t\t);\n\t}\n\n\treturn (\n\t\t<span\n\t\t\ttitle={tooltip}\n\t\t\taria-label={ariaLabel}\n\t\t\tclassName={cn('ai-inline-citation--component', baseCls)}\n\t\t>\n\t\t\t<Text tag=\"span\" size=\"xs\" weight=\"medium\" className=\"leading-none\">\n\t\t\t\t{index}\n\t\t\t</Text>\n\t\t</span>\n\t);\n}\n\nAiInlineCitation.displayName = 'AiInlineCitation';\n","import type { ReactNode } from 'react';\nimport type { StringsProp } from '../../../../lib/strings';\n\nexport interface AiPackageInfoStrings {\n\tversionLabel: string;\n\tlicenseLabel: string;\n\tpublishedLabel: string;\n\thomepageAria: string;\n\thomepageLabel: string;\n\trepositoryAria: string;\n\trepositoryLabel: string;\n\tweeklyDownloadsLabel: string;\n}\n\nexport const defaultAiPackageInfoStrings: AiPackageInfoStrings = {\n\tversionLabel: 'Version',\n\tlicenseLabel: 'License',\n\tpublishedLabel: 'Published',\n\thomepageAria: 'Open homepage',\n\thomepageLabel: 'Homepage',\n\trepositoryAria: 'Open repository',\n\trepositoryLabel: 'Repository',\n\tweeklyDownloadsLabel: 'Weekly downloads',\n};\n\nexport interface AiPackageInfoProps {\n\t/** Package name (npm-style: optional `@scope/`). */\n\tname: string;\n\t/** Latest / pinned version. */\n\tversion?: string;\n\t/** Short description from the package manifest. */\n\tdescription?: ReactNode;\n\t/** SPDX-style license identifier (e.g. \"MIT\"). */\n\tlicense?: string;\n\t/** ISO date or human label of last publish. */\n\tpublishedAt?: string;\n\t/** Package homepage URL. */\n\thomepage?: string;\n\t/** Repository URL (typically GitHub). */\n\trepository?: string;\n\t/** Weekly downloads — formatted by the consumer. */\n\tweeklyDownloads?: string | number;\n\t/** Comma-separated tag list rendered as small chips. */\n\tkeywords?: ReadonlyArray<string>;\n\t/** Click handler for the whole card. */\n\tonSelect?: () => void;\n\t/** Merged onto the outermost node. */\n\tclassName?: string;\n\t/** Overrides this surface's own copy. */\n\tstrings?: StringsProp<AiPackageInfoStrings>;\n}\n","/**\n * AiPackageInfo — compact card describing an npm / library package referenced\n * by the model. Header: name + version chip; body: description + optional\n * meta (license, published date, weekly downloads) and keyword chips. Footer\n * exposes homepage / repository links when provided.\n */\nimport { Code2, ExternalLink, Globe, Package } from 'lucide-react';\nimport { Badge } from '../../../base/badge';\nimport { Button } from '../../../base/buttons';\nimport { MonoValue, SecondaryValue } from '../../../primitives';\nimport { Text, TextLink } from '../../../typography';\nimport { useStrings } from '../../../../lib/strings';\nimport { Stack } from '../../../base/structure';\nimport { cn } from '../../../../lib/utils';\n\nimport { defaultAiPackageInfoStrings, type AiPackageInfoProps } from './types';\n\nexport function AiPackageInfo({\n\tname,\n\tversion,\n\tdescription,\n\tlicense,\n\tpublishedAt,\n\thomepage,\n\trepository,\n\tweeklyDownloads,\n\tkeywords,\n\tonSelect,\n\tclassName,\n\tstrings: stringsProp,\n}: AiPackageInfoProps) {\n\tconst strings = useStrings(defaultAiPackageInfoStrings, stringsProp);\n\tconst bodyContent = (\n\t\t<>\n\t\t\t<span\n\t\t\t\taria-hidden\n\t\t\t\tclassName=\"inline-flex size-9 shrink-0 items-center justify-center rounded-radius-md bg-muted text-muted-foreground\"\n\t\t\t>\n\t\t\t\t<Package className=\"size-icon\" />\n\t\t\t</span>\n\t\t\t<div className=\"min-w-0 flex-1\">\n\t\t\t\t<div className=\"flex items-center gap-space-md\">\n\t\t\t\t\t<MonoValue weight=\"semibold\" className=\"truncate\">\n\t\t\t\t\t\t{name}\n\t\t\t\t\t</MonoValue>\n\t\t\t\t\t{!!version && (\n\t\t\t\t\t\t<Badge tone=\"secondary\">\n\t\t\t\t\t\t\t<MonoValue size=\"xs\" className=\"text-inherit\">v{version.replace(/^v/, '')}</MonoValue>\n\t\t\t\t\t\t</Badge>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t\t{!!description && (\n\t\t\t\t\t<Text size=\"xs\" type=\"secondary\" className=\"mt-1 line-clamp-2\">\n\t\t\t\t\t\t{description}\n\t\t\t\t\t</Text>\n\t\t\t\t)}\n\n\t\t\t\t{(license || publishedAt || weeklyDownloads !== undefined) && (\n\t\t\t\t\t<div className=\"mt-space-md flex flex-wrap items-center gap-x-space-lg gap-y-space-xs\">\n\t\t\t\t\t\t{!!license && <MetaItem label={strings.licenseLabel} value={license} />}\n\t\t\t\t\t\t{!!publishedAt && <MetaItem label={strings.publishedLabel} value={publishedAt} />}\n\t\t\t\t\t\t{weeklyDownloads !== undefined && (\n\t\t\t\t\t\t\t<MetaItem label={strings.weeklyDownloadsLabel} value={String(weeklyDownloads)} />\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\n\t\t\t\t{!!keywords?.length && (\n\t\t\t\t\t<div className=\"mt-space-md flex flex-wrap gap-space-xs\">\n\t\t\t\t\t\t{keywords.slice(0, 6).map((keyword) => (\n\t\t\t\t\t\t\t<Badge key={keyword} tone=\"secondary\">\n\t\t\t\t\t\t\t\t{keyword}\n\t\t\t\t\t\t\t</Badge>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t</>\n\t);\n\tconst bodyClassName = 'ai-package-info--body flex w-full items-start gap-space-lg p-surface-xs text-left';\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t'ai-package-info--component block w-full overflow-hidden rounded-radius border border-border/60 bg-card',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t>\n\t\t\t{onSelect ? (\n\t\t\t\t<Button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\ttone=\"secondary\"\n\t\t\t\t\tbuttonStyle=\"ghost\"\n\t\t\t\t\tonClick={onSelect}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\tbodyClassName,\n\t\t\t\t\t\t'h-auto justify-start rounded-none whitespace-normal transition-colors hover:bg-muted/40',\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t{bodyContent}\n\t\t\t\t</Button>\n\t\t\t) : (\n\t\t\t\t<div className={bodyClassName}>{bodyContent}</div>\n\t\t\t)}\n\n\t\t\t{(homepage || repository) && (\n\t\t\t\t<div className=\"ai-package-info--footer border-t border-border/60 bg-muted/20 px-surface-xs py-row-y\">\n\t\t\t\t\t<Stack direction=\"horizontal\" align=\"center\" gap=\"md\">\n\t\t\t\t\t\t{!!homepage && (\n\t\t\t\t\t\t\t<TextLink\n\t\t\t\t\t\t\t\thref={homepage}\n\t\t\t\t\t\t\t\tsize=\"inherit\"\n\t\t\t\t\t\t\t\tunderline={false}\n\t\t\t\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\t\t\t\trel=\"noopener noreferrer\"\n\t\t\t\t\t\t\t\tonClick={(e) => e.stopPropagation()}\n\t\t\t\t\t\t\t\taria-label={strings.homepageAria}\n\t\t\t\t\t\t\t\tclassName=\"inline-flex items-center gap-space-xs rounded text-muted-foreground hover:text-foreground\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<Globe className=\"size-icon-sm\" />\n\t\t\t\t\t\t\t\t<Text tag=\"span\" weight=\"medium\">\n\t\t\t\t\t\t\t\t\t{strings.homepageLabel}\n\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t<ExternalLink className=\"size-icon-sm\" />\n\t\t\t\t\t\t\t</TextLink>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{!!homepage && !!repository && (\n\t\t\t\t\t\t\t<Text tag=\"span\" size=\"xs\" type=\"secondary\" className=\"opacity-40\" aria-hidden>\n\t\t\t\t\t\t\t\t·\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{!!repository && (\n\t\t\t\t\t\t\t<TextLink\n\t\t\t\t\t\t\t\thref={repository}\n\t\t\t\t\t\t\t\tsize=\"inherit\"\n\t\t\t\t\t\t\t\tunderline={false}\n\t\t\t\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\t\t\t\trel=\"noopener noreferrer\"\n\t\t\t\t\t\t\t\tonClick={(e) => e.stopPropagation()}\n\t\t\t\t\t\t\t\taria-label={strings.repositoryAria}\n\t\t\t\t\t\t\t\tclassName=\"inline-flex items-center gap-space-xs rounded text-muted-foreground hover:text-foreground\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<Code2 className=\"size-icon-sm\" />\n\t\t\t\t\t\t\t\t<Text tag=\"span\" weight=\"medium\">\n\t\t\t\t\t\t\t\t\t{strings.repositoryLabel}\n\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t<ExternalLink className=\"size-icon-sm\" />\n\t\t\t\t\t\t\t</TextLink>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</Stack>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n\nAiPackageInfo.displayName = 'AiPackageInfo';\n\nfunction MetaItem({ label, value }: { label: string; value: string }) {\n\treturn (\n\t\t<div className=\"inline-flex items-baseline gap-space-xs\">\n\t\t\t<Text size=\"xs\" type=\"discrete\">\n\t\t\t\t{label}\n\t\t\t</Text>\n\t\t\t<SecondaryValue size=\"xs\" weight=\"medium\" className=\"tabular-nums\">\n\t\t\t\t{value}\n\t\t\t</SecondaryValue>\n\t\t</div>\n\t);\n}\n","import type { LucideIcon } from 'lucide-react';\nimport type { ComponentProps, ReactNode } from 'react';\nimport type { RowDensity } from '../../../../lib/row-recipes';\nimport type { StringsProp } from '../../../../lib/strings';\n\nexport type AiFileTreeNodeKind = 'directory' | 'file';\n\nexport type AiFileTreeChangeStatus = 'added' | 'modified' | 'removed' | 'renamed';\n\nexport interface AiFileTreeNode {\n\t/** Stable identity, unique throughout the hierarchy. */\n\tid: string;\n\t/** Display name. */\n\tname: string;\n\tkind: AiFileTreeNodeKind;\n\t/** Children — only meaningful for directories. */\n\tchildren?: ReadonlyArray<AiFileTreeNode>;\n\t/** Custom icon override (file kinds, etc.). */\n\ticon?: LucideIcon;\n\t/** Diff status — drives the semantic icon color and trailing Badge. */\n\tstatus?: AiFileTreeChangeStatus;\n\t/** Trailing slot — badge, line count, etc. */\n\ttrailing?: ReactNode;\n\t/** Default-expanded state for directories. */\n\tdefaultExpanded?: boolean;\n /** Disables this entry and all descendants. */\n disabled?: boolean;\n}\n\nexport interface AiFileTreeStrings {\n /** Accessible hierarchy name; aria-label/aria-labelledby can override it. */\n treeAria?: string;\n\texpandAria: string;\n\tcollapseAria: string;\n\tstatusLabels: Record<AiFileTreeChangeStatus, string>;\n}\n\nexport const defaultAiFileTreeStrings: AiFileTreeStrings = {\n treeAria: 'Files',\n\texpandAria: 'Expand directory',\n\tcollapseAria: 'Collapse directory',\n\tstatusLabels: {\n\t\tadded: 'A',\n\t\tmodified: 'M',\n\t\tremoved: 'D',\n\t\trenamed: 'R',\n\t},\n};\n\nexport interface AiFileTreeProps extends Omit<ComponentProps<'div'>, 'children' | 'onSelect'> {\n\t/** Root nodes — typically one entry but the API accepts multiple. */\n\tnodes: ReadonlyArray<AiFileTreeNode>;\n\t/** Selected file id — drives the active row state. Controlled. */\n\tselectedId?: string;\n\t/** Click handler — fires for files only by default. */\n\tonSelect?: (node: AiFileTreeNode) => void;\n\t/** Hide diff status badges; semantic icon colors remain visible. */\n\thideStatusLabels?: boolean;\n\t/** Indent width per nesting level (px). Omit for the shared token-backed hierarchy inset. */\n\tindent?: number;\n /** Vertical rhythm; compact by default. */\n density?: RowDensity;\n /** Disables the entire hierarchy. */\n disabled?: boolean;\n /** Controlled directory expansion. */\n expandedIds?: readonly string[];\n /** Initial expansion; otherwise each directory's defaultExpanded is respected. */\n defaultExpandedIds?: readonly string[];\n /** Expansion request, independent of file selection. */\n onExpandedIdsChange?: (ids: string[], node: AiFileTreeNode) => void;\n\t/** Merged onto the outermost node. */\n\tclassName?: string;\n\t/** Overrides this surface's own copy. */\n\tstrings?: StringsProp<AiFileTreeStrings>;\n}\n","/** File-change presentation on the public keyboard hierarchy; framing belongs to the caller. */\nimport { useMemo, useState } from 'react';\nimport { File, FileCode, FileText, Folder, FolderOpen, type LucideIcon } from 'lucide-react';\nimport { Tree, type TreeNode } from '../../../base/tree';\nimport { Badge } from '../../../base/badge';\nimport { Stack } from '../../../base/structure';\nimport { MonoValue, SecondaryValue } from '../../../primitives';\nimport { useStrings } from '../../../../lib/strings';\nimport { cn } from '../../../../lib/utils';\nimport { defaultAiFileTreeStrings, type AiFileTreeChangeStatus, type AiFileTreeNode, type AiFileTreeProps } from './types';\n\nconst statusTones = { added: 'success', modified: 'warning', removed: 'destructive', renamed: 'info' } as const;\nconst statusIconClasses: Record<AiFileTreeChangeStatus, string> = {\n added: 'text-success', modified: 'text-warning-accent', removed: 'text-destructive', renamed: 'text-info',\n};\nfunction pickFileIcon(name: string): LucideIcon {\n const ext = name.split('.').pop()?.toLowerCase() ?? '';\n if (['ts', 'tsx', 'js', 'jsx', 'mjs', 'cjs', 'json', 'css', 'scss', 'html', 'sh', 'py', 'rs', 'go'].includes(ext)) return FileCode;\n if (['md', 'mdx', 'txt'].includes(ext)) return FileText;\n return File;\n}\nfunction initialExpansion(nodes: readonly AiFileTreeNode[], depth = 0): string[] {\n return nodes.flatMap(node => [\n ...(node.kind === 'directory' && (node.defaultExpanded ?? depth < 1) ? [node.id] : []),\n ...initialExpansion(node.children ?? [], depth + 1),\n ]);\n}\nexport function AiFileTree({\n nodes, selectedId, onSelect, hideStatusLabels = false, indent, density = 'compact', disabled,\n expandedIds, defaultExpandedIds, onExpandedIdsChange, className, strings: stringsProp, ...props\n}: AiFileTreeProps) {\n const strings = useStrings(defaultAiFileTreeStrings, stringsProp);\n const [localExpanded, setLocalExpanded] = useState(() => defaultExpandedIds ?? initialExpansion(nodes));\n const expanded = expandedIds ?? localExpanded;\n const items = useMemo(() => {\n function map(nodes: readonly AiFileTreeNode[]): TreeNode<AiFileTreeNode>[] {\n return nodes.map(node => {\n const directory = node.kind === 'directory';\n const Icon = node.icon ?? (directory ? expanded.includes(node.id) ? FolderOpen : Folder : pickFileIcon(node.name));\n return {\n value: node.id, label: node.name, data: node, disabled: node.disabled,\n hasChildren: directory, children: directory ? map(node.children ?? []) : undefined,\n icon: <Icon aria-hidden=\"true\" className={cn('size-icon', node.status && statusIconClasses[node.status])} />,\n trailing: <Stack direction=\"horizontal\" gap=\"xs\" align=\"center\" className=\"shrink-0\">\n {node.status && !hideStatusLabels && <Badge tone={statusTones[node.status]} size=\"sm\" title={node.status}>{strings.statusLabels[node.status]}</Badge>}\n {node.trailing != null && <SecondaryValue size=\"xs\" className=\"tabular-nums\">{node.trailing}</SecondaryValue>}\n </Stack>,\n };\n });\n }\n return map(nodes);\n }, [nodes, expanded, hideStatusLabels, strings.statusLabels]);\n return <Tree {...props} aria-label={props['aria-label'] ?? strings.treeAria} items={items} selectedValues={selectedId === undefined ? [] : [selectedId]}\n expandedValues={expanded} branchActivation=\"toggle\" density={density} disabled={disabled} indent={indent}\n strings={{ expand: label => `${strings.expandAria}: ${label}`, collapse: label => `${strings.collapseAria}: ${label}` }}\n onExpandedValuesChange={(values, node) => {\n if (expandedIds === undefined) setLocalExpanded(values);\n onExpandedIdsChange?.(values, node.data!);\n }}\n onSelectedValuesChange={(_values, node) => { if (node.data?.kind === 'file') onSelect?.(node.data); }}\n renderLabel={node => <MonoValue size=\"inherit\" weight=\"regular\" className={cn('ai-file-tree--name text-inherit wrap-anywhere', node.data?.status === 'removed' && 'line-through')}>{node.label}</MonoValue>}\n className={cn('ai-file-tree--component', className)} />;\n}\nAiFileTree.displayName = 'AiFileTree';\n"],"mappings":"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"}
1
+ {"version":3,"file":"ai.js","names":["_Fragment","NumberValue","NumberValue","_Fragment","cn","Text","DisplayLabel","TextLink","Button","AdaptiveGrid","Stack","Progress","SecondaryValue","MonoValue","Percent","Number","IconBadge","Badge","Separator","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","RefreshCw","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","Quote","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","Package","name","version","description","license","publishedAt","weeklyDownloads","MetaItem","keywords","keyword","bodyClassName","homepage","repository","Globe","Code2","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 { RefreshCw } from 'lucide-react';\n\nimport { Badge } from '../../../base/badge';\nimport { Button } from '../../../base/buttons';\nimport { Stack } from '../../../base/structure';\nimport { SecondaryValue } from '../../../primitives';\nimport { Text } from '../../../typography/text';\nimport { useStrings } from '../../../../lib/strings';\nimport { cn } from '../../../../lib/utils';\n\nimport { defaultAiSummaryStrings } from '../ai.strings';\nimport type { AiSummaryBlockProps, ConfidenceLevel } from './types';\n\nconst confidenceBars: Record<ConfidenceLevel, number> = {\n\tlow: 1,\n\tmedium: 2,\n\thigh: 3,\n};\n\nfunction ConfidenceBars({ level, label }: { level: ConfidenceLevel; label: string }) {\n\tconst filled = confidenceBars[level];\n\n\treturn (\n\t\t<div className=\"ai-summary--confidence flex items-center gap-space-sm\">\n\t\t\t<div className=\"flex items-center gap-space-2xs\" aria-hidden=\"true\">\n\t\t\t\t{Array.from({ length: 3 }, (_, i) => (\n\t\t\t\t\t<div\n\t\t\t\t\t\tkey={`bar-${String(i)}`}\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t'h-2.5 w-1 rounded-radius-sm',\n\t\t\t\t\t\t\ti < filled ? 'bg-foreground/60' : 'bg-muted-foreground/20',\n\t\t\t\t\t\t)}\n\t\t\t\t\t/>\n\t\t\t\t))}\n\t\t\t</div>\n\t\t\t<Text size=\"xs\" type=\"secondary\" tag=\"span\" className=\"capitalize\">\n\t\t\t\t{label}\n\t\t\t</Text>\n\t\t</div>\n\t);\n}\n\nexport function AiSummaryBlock({\n\tdata,\n\tchildren,\n\tmetadata,\n\tactions,\n\tfooter,\n\tclassName,\n\tstrings: stringsProp,\n}: AiSummaryBlockProps) {\n\tconst strings = useStrings(defaultAiSummaryStrings, stringsProp);\n\tconst defaultMetadata = (\n\t\t<div className=\"ai-summary--metadata flex min-w-0 flex-wrap items-center gap-x-space-md gap-y-space-xs\">\n\t\t\t{!!data.generatedAt && (\n\t\t\t\t<SecondaryValue size=\"xs\" className=\"min-w-0\">\n\t\t\t\t\t{data.generatedAt}\n\t\t\t\t</SecondaryValue>\n\t\t\t)}\n\t\t\t{!!data.model && (\n\t\t\t\t<SecondaryValue size=\"xs\" className=\"min-w-0 truncate\">\n\t\t\t\t\t{data.model}\n\t\t\t\t</SecondaryValue>\n\t\t\t)}\n\t\t</div>\n\t);\n\tconst defaultActions = data.onRegenerate ? (\n\t\t<Button tone=\"secondary\" buttonStyle=\"ghost\" onClick={data.onRegenerate}>\n\t\t\t<RefreshCw className=\"mr-1 h-3 w-3\" />\n\t\t\t{strings.regenerate}\n\t\t</Button>\n\t) : null;\n\tconst resolvedMetadata = metadata === undefined ? defaultMetadata : metadata;\n\tconst resolvedActions = actions === undefined ? defaultActions : actions;\n\tconst footerContent = footer !== undefined\n\t\t? footer\n\t\t: (resolvedMetadata || resolvedActions) && (\n\t\t\t<>\n\t\t\t\t{resolvedMetadata}\n\t\t\t\t{resolvedActions}\n\t\t\t</>\n\t\t);\n\n\treturn (\n\t\t<Stack\n\t\t\tdata-component=\"ai-summary\"\n\t\t\tdata-slot=\"ai-summary\"\n\t\t\tclassName={cn('ai-summary--component', className)}\n\t\t>\n\t\t\t<Text lineHeight=\"relaxed\">\n\t\t\t\t{data.summary}\n\t\t\t</Text>\n\n\t\t\t{data.entities.length > 0 && (\n\t\t\t\t<Stack direction=\"horizontal\" wrap gap=\"sm\" className=\"ai-summary--entities min-w-0\">\n\t\t\t\t\t{data.entities.map((entity) => (\n\t\t\t\t\t\t<Badge key={entity} tone=\"secondary\">\n\t\t\t\t\t\t\t{entity}\n\t\t\t\t\t\t</Badge>\n\t\t\t\t\t))}\n\t\t\t\t</Stack>\n\t\t\t)}\n\n\t\t\t<ConfidenceBars level={data.confidence} label={strings.confidenceLevels[data.confidence]} />\n\n\t\t\t{children}\n\n\t\t\t{!!footerContent && (\n\t\t\t\t<Stack\n\t\t\t\t\tdirection={{ base: 'vertical', sm: 'horizontal' }}\n\t\t\t\t\tgap=\"md\"\n\t\t\t\t\tjustify={{ sm: 'between' }}\n\t\t\t\t\tclassName=\"ai-summary--footer pt-space-xs\"\n\t\t\t\t>\n\t\t\t\t\t{footerContent}\n\t\t\t\t</Stack>\n\t\t\t)}\n\t\t</Stack>\n\t);\n}\n","import { Badge } from '../../../base/badge';\nimport { Stack } from '../../../base/structure';\nimport { InlineStat } from '../../data-display';\nimport { Separator } from '../../../base/display/separator';\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<Stack direction=\"horizontal\" wrap align=\"center\" gap=\"sm\">\n\t\t\t\t<Badge tone=\"primary\">\n\t\t\t\t\t{data.requestType}\n\t\t\t\t</Badge>\n\t\t\t\t<Badge tone={data.urgencyTone}>\n\t\t\t\t\t{data.urgency}\n\t\t\t\t</Badge>\n\t\t\t\t<Badge tone={data.sentimentTone} dot>\n\t\t\t\t\t{data.tone}\n\t\t\t\t</Badge>\n\t\t\t</Stack>\n\n\t\t\t<InlineStat\n\t\t\t\tlabel={strings.complexityLabel}\n\t\t\t\tlabelClassName=\"text-sm font-medium text-foreground\"\n\t\t\t\tvalue={\n\t\t\t\t\t<span className=\"flex items-center gap-space-md\">\n\t\t\t\t\t\t<span className=\"flex items-center gap-space-xs\">\n\t\t\t\t\t\t{Array.from({ length: 5 }, (_, i) => (\n\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\tkey={`cx-${String(i)}`}\n\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t'h-1.5 w-3 rounded-radius-sm',\n\t\t\t\t\t\t\t\t\ti < data.complexityScore ? 'bg-foreground/60' : 'bg-muted',\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t))}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t\t<Text tag=\"span\" size=\"xs\" type=\"secondary\">\n\t\t\t\t\t\t\t{String(data.complexityScore)}/5\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t</span>\n\t\t\t\t}\n\t\t\t/>\n\n\t\t\t{data.flags.length > 0 && (\n\t\t\t\t<InlineStat\n\t\t\t\t\tlabel={strings.flagsLabel}\n\t\t\t\t\tlabelClassName=\"text-sm font-medium text-foreground\"\n\t\t\t\t\tvalue={\n\t\t\t\t\t\t<span className=\"flex gap-space-xs\">\n\t\t\t\t\t\t\t{data.flags.map((flag) => (\n\t\t\t\t\t\t\t\t<Badge key={flag} tone=\"warning\">\n\t\t\t\t\t\t\t\t\t{flag}\n\t\t\t\t\t\t\t\t</Badge>\n\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t}\n\t\t\t\t/>\n\t\t\t)}\n\n\t\t\t<InlineStat\n\t\t\t\tlabel={strings.nextStepLabel}\n\t\t\t\tlabelClassName=\"text-sm font-medium text-foreground\"\n\t\t\t\tvalue={<Badge tone=\"info\">{data.suggestedAction}</Badge>}\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<Separator />\n\n\t\t\t<div className=\"flex items-center gap-space-md\">\n\t\t\t\t<Badge tone=\"secondary\">\n\t\t\t\t\t{strings.confidencePrefix}: {confidenceLabel}\n\t\t\t\t</Badge>\n\t\t\t\t<Text size=\"xs\" type=\"discrete\" tag=\"span\">\n\t\t\t\t\t{data.model}\n\t\t\t\t</Text>\n\t\t\t</div>\n\n\t\t\t{children}\n\t\t</Stack>\n\t);\n}\n","import type { StringsProp } from '../../../../lib/strings';\n\nexport interface AiConfidenceFactor {\n\t/** Display label. */\n\tlabel: string;\n\tscore: number; // 0–1\n}\n\nexport interface AiConfidenceStrings {\n\t/** Surface title. */\n\ttitle: string;\n\tconfidenceLabel: string;\n\tfactorsLabel: string;\n\tlevelHigh: string;\n\tlevelMedium: string;\n\tlevelLow: string;\n}\n\nexport const defaultAiConfidenceStrings: AiConfidenceStrings = {\n\ttitle: 'AI Confidence',\n\tconfidenceLabel: 'Overall',\n\tfactorsLabel: 'Contributing factors',\n\tlevelHigh: 'High',\n\tlevelMedium: 'Medium',\n\tlevelLow: 'Low',\n};\n\nexport interface AiConfidenceProps {\n\tscore: number; // 0–1\n\tmodel?: string;\n\tfactors?: AiConfidenceFactor[];\n\t/** Merged onto the outermost node. */\n\tclassName?: string;\n\t/** Overrides this surface's own copy. */\n\tstrings?: StringsProp<AiConfidenceStrings>;\n}\n","import { Progress } from '../../../base/feedback';\n/**\n * AiConfidence — visualises an AI model's overall confidence with a circular\n * progress dial and a list of weighted contributing factors. Strings are overridable.\n */\nimport { Percent } from '../../../primitives';\nimport { DisplayLabel, Text } from '../../../typography';\nimport { Badge } from '../../../base/badge';\nimport { InlineStat } from '../../data-display';\nimport { Stack } from '../../../base/structure';\nimport { useStrings } from '../../../../lib/strings';\nimport { cn } from '../../../../lib/utils';\n\nimport { defaultAiConfidenceStrings, type AiConfidenceProps } from './types';\n\nfunction levelVariant(score: number) {\n\tif (score >= 0.85) return 'success' as const;\n\tif (score >= 0.6) return 'warning' as const;\n\treturn 'destructive' as const;\n}\n\nexport function AiConfidence({ score, model, factors, className, strings: stringsProp }: AiConfidenceProps) {\n\tconst strings = useStrings(defaultAiConfidenceStrings, stringsProp);\n\tconst pct = Math.round(score * 100);\n\tconst variant = levelVariant(score);\n\tconst label = variant === 'success' ? strings.levelHigh : variant === 'warning' ? strings.levelMedium : strings.levelLow;\n\tconst c = 2 * Math.PI * 24;\n\tconst dash = c - (pct / 100) * c;\n\n\treturn (\n\t\t<Stack\n\t\t\tdata-component=\"ai-confidence\"\n\t\t\tdata-slot=\"ai-confidence\"\n\t\t\tgap=\"xl\"\n\t\t\tclassName={cn('ai-confidence--component @container/ai-confidence', className)}\n\t\t\taria-label={strings.title}\n\t\t>\n\t\t\t<div className=\"grid gap-space-xl @md/ai-confidence:grid-cols-[auto_minmax(0,1fr)] @md/ai-confidence:items-center\">\n\t\t\t\t<div className=\"relative w-fit shrink-0\">\n\t\t\t\t\t<svg width=\"56\" height=\"56\" viewBox=\"0 0 64 64\" aria-hidden=\"true\">\n\t\t\t\t\t\t<circle cx=\"32\" cy=\"32\" r=\"24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"5\" className=\"text-muted/60\" />\n\t\t\t\t\t\t<circle\n\t\t\t\t\t\t\tcx=\"32\"\n\t\t\t\t\t\t\tcy=\"32\"\n\t\t\t\t\t\t\tr=\"24\"\n\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\t\tstrokeWidth=\"5\"\n\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t\tstrokeDasharray={c}\n\t\t\t\t\t\t\tstrokeDashoffset={dash}\n\t\t\t\t\t\t\ttransform=\"rotate(-90 32 32)\"\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\tvariant === 'success' && 'text-success',\n\t\t\t\t\t\t\t\tvariant === 'warning' && 'text-warning-accent',\n\t\t\t\t\t\t\t\tvariant === 'destructive' && 'text-destructive',\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</svg>\n\t\t\t\t\t<div className=\"absolute inset-0 flex flex-col items-center justify-center\">\n\t\t\t\t\t\t<Percent value={pct} scaled weight=\"semibold\" className=\"leading-none\" />\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<Stack gap=\"sm\">\n\t\t\t\t\t<DisplayLabel>\n\t\t\t\t\t\t{strings.confidenceLabel}\n\t\t\t\t\t</DisplayLabel>\n\t\t\t\t\t<Stack direction=\"horizontal\" gap=\"sm\">\n\t\t\t\t\t\t<Badge tone={variant}>{label}</Badge>\n\t\t\t\t\t\t{!!model && (\n\t\t\t\t\t\t\t<Text size=\"xs\" type=\"secondary\" className=\"truncate\">\n\t\t\t\t\t\t\t\t{model}\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</Stack>\n\t\t\t\t</Stack>\n\t\t\t</div>\n\n\t\t\t{!!factors && factors.length > 0 && (\n\t\t\t\t<Stack gap=\"md\" className=\"mt-space-xl\">\n\t\t\t\t\t<DisplayLabel>\n\t\t\t\t\t\t{strings.factorsLabel}\n\t\t\t\t\t</DisplayLabel>\n\t\t\t\t\t{factors.map((f) => (\n\t\t\t\t\t\t<Stack key={f.label} gap=\"sm\">\n\t\t\t\t\t\t\t<InlineStat\n\t\t\t\t\t\t\t\tlabel={f.label}\n\t\t\t\t\t\t\t\tvalue={<Percent value={f.score} size=\"xs\" weight=\"semibold\" />}\n\t\t\t\t\t\t\t\tmono\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<Progress value={Math.round(f.score * 100)} aria-label={f.label} />\n\t\t\t\t\t\t</Stack>\n\t\t\t\t\t))}\n\t\t\t\t</Stack>\n\t\t\t)}\n\t\t</Stack>\n\t);\n}\n\nAiConfidence.displayName = 'AiConfidence';\n","import type { LucideIcon } from 'lucide-react';\nimport type { StringsProp } from '../../../../lib/strings';\n\nexport interface AiPromptSuggestion {\n\t/** Stable identity for this entry. */\n\tid: string;\n\t/** Display label. */\n\tlabel: string;\n\t/** Supporting copy shown under the label. */\n\tdescription?: string;\n\t/** Leading glyph. */\n\ticon?: LucideIcon;\n}\n\nexport interface AiPromptSuggestionsStrings {\n\t/** Surface title. */\n\ttitle: string;\n\thint: string;\n}\n\nexport const defaultAiPromptSuggestionsStrings: AiPromptSuggestionsStrings = {\n\ttitle: 'Try asking',\n\thint: 'Tap a prompt to start',\n};\n\nexport interface AiPromptSuggestionsProps {\n\tsuggestions: AiPromptSuggestion[];\n\tonPick?: (suggestion: AiPromptSuggestion) => void;\n\t/** Merged onto the outermost node. */\n\tclassName?: string;\n\t/** Overrides this surface's own copy. */\n\tstrings?: StringsProp<AiPromptSuggestionsStrings>;\n}\n","/**\n * AiPromptSuggestions — grid of clickable prompt rows.\n * Use to seed a chat or assistant input with curated starting prompts.\n */\nimport { IconBadge } from '../../../base/display';\nimport { Stack } from '../../../base/structure';\nimport {\n\tItem,\n\tItemContent,\n\tItemDescription,\n\tItemMedia,\n\tItemTitle,\n} from '../../../base/item';\nimport { cn } from '../../../../lib/utils';\nimport { useStrings } from '../../../../lib/strings';\n\nimport {\n\tdefaultAiPromptSuggestionsStrings,\n\ttype AiPromptSuggestionsProps,\n} from './types';\n\nexport function AiPromptSuggestions({ suggestions, onPick, className, strings: stringsProp }: AiPromptSuggestionsProps) {\n\tconst strings = useStrings(defaultAiPromptSuggestionsStrings, stringsProp);\n\n\treturn (\n\t\t<Stack\n\t\t\tdata-component=\"ai-prompt-suggestions\"\n\t\t\tdata-slot=\"ai-prompt-suggestions\"\n\t\t\tclassName={cn('ai-prompt-suggestions--component', className)}\n\t\t>\n\t\t\t<Stack gap=\"normal\" className=\"ai-prompt-suggestions--intro\">\n\t\t\t\t<ItemTitle>{strings.title}</ItemTitle>\n\t\t\t\t<ItemDescription>{strings.hint}</ItemDescription>\n\t\t\t</Stack>\n\t\t\t<div className=\"grid grid-cols-[repeat(auto-fit,minmax(min(15rem,100%),1fr))] gap-space-xl\">\n\t\t\t\t{suggestions.map((s) => {\n\t\t\t\t\tconst Icon = s.icon;\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<Item\n\t\t\t\t\t\t\tkey={s.id}\n\t\t\t\t\t\t\tvariant=\"outline\"\n\t\t\t\t\t\t\trender={<button type=\"button\" onClick={() => onPick?.(s)} />}\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t'ai-prompt-suggestions--item h-full items-start gap-space-lg p-surface transition-[border-color,background] duration-150',\n\t\t\t\t\t\t\t\t'hover:border-foreground/20 hover:bg-muted/40',\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{!!Icon && (\n\t\t\t\t\t\t\t\t<ItemMedia>\n\t\t\t\t\t\t\t\t\t<IconBadge icon={Icon} tone=\"primary\" size=\"md\" shape=\"square\" />\n\t\t\t\t\t\t\t\t</ItemMedia>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t<ItemContent className=\"min-w-0 gap-space-sm\">\n\t\t\t\t\t\t\t\t<ItemTitle>{s.label}</ItemTitle>\n\t\t\t\t\t\t\t\t{!!s.description && (\n\t\t\t\t\t\t\t\t\t<ItemDescription>{s.description}</ItemDescription>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</ItemContent>\n\t\t\t\t\t\t</Item>\n\t\t\t\t\t);\n\t\t\t\t})}\n\t\t\t</div>\n\t\t</Stack>\n\t);\n}\n\nAiPromptSuggestions.displayName = 'AiPromptSuggestions';\n","import type { StringsProp } from '../../../../lib/strings';\n\nexport interface AiTokenUsageStrings {\n\t/** Surface title. */\n\ttitle: string;\n\tinput: string;\n\toutput: string;\n\t/** Total number of records across all pages. */\n\ttotal: string;\n\tcost: string;\n}\n\nexport const defaultAiTokenUsageStrings: AiTokenUsageStrings = {\n\ttitle: 'Token usage',\n\tinput: 'Input',\n\toutput: 'Output',\n\ttotal: 'Total',\n\tcost: 'Estimated cost',\n};\n\nexport interface AiTokenUsageProps {\n\tmodel?: string;\n\tinputTokens: number;\n\toutputTokens: number;\n\tcost?: string;\n\tmaxTokens?: number;\n\t/** Merged onto the outermost node. */\n\tclassName?: string;\n\t/** Overrides this surface's own copy. */\n\tstrings?: StringsProp<AiTokenUsageStrings>;\n}\n","/**\n * AiTokenUsage — input + output token counts with a usage bar\n * relative to a max context window, plus optional cost estimate.\n */\nimport { useStrings } from '../../../../lib/strings';\nimport { Badge } from '../../../base/badge';\nimport { DisplayLabel, Text } from '../../../typography';\nimport { InlineStat } from '../../data-display';\nimport { AdaptiveGrid, Stack } from '../../../base/structure';\nimport { Number as NumberValue, Percent } from '../../../primitives';\n\nimport { defaultAiTokenUsageStrings, type AiTokenUsageProps } from './types';\n\nimport { cn } from '../../../../lib/utils';\nexport function AiTokenUsage({\n\tmodel,\n\tinputTokens,\n\toutputTokens,\n\tcost,\n\tmaxTokens,\n\tclassName,\n\tstrings: stringsProp,\n}: AiTokenUsageProps) {\n\tconst strings = useStrings(defaultAiTokenUsageStrings, stringsProp);\n\tconst total = inputTokens + outputTokens;\n\tconst pct = maxTokens ? Math.min(100, Math.round((total / maxTokens) * 100)) : 0;\n\n\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<AdaptiveGrid minColumnWidth=\"sm\" 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 tile reads label-over-value.\n\t\t\t\t\t<div key={cell.label} className=\"rounded-radius bg-muted/40 p-surface-xs\">\n\t\t\t\t\t\t<Stack gap=\"2xs\">\n\t\t\t\t\t\t\t<DisplayLabel>{cell.label}</DisplayLabel>\n\t\t\t\t\t\t\t<NumberValue value={cell.value} weight=\"semibold\" align=\"left\" />\n\t\t\t\t\t\t</Stack>\n\t\t\t\t\t</div>\n\t\t\t\t))}\n\t\t\t</AdaptiveGrid>\n\t\t\t{!!maxTokens && (\n\t\t\t\t<div className=\"mt-space-lg\">\n\t\t\t\t\t<InlineStat\n\t\t\t\t\t\tlabel={(\n\t\t\t\t\t\t\t<span className=\"inline-flex items-center gap-space-xs\">\n\t\t\t\t\t\t\t\t<NumberValue value={total} size=\"xs\" align=\"left\" />\n\t\t\t\t\t\t\t\t<Text tag=\"span\" size=\"xs\" aria-hidden>/</Text>\n\t\t\t\t\t\t\t\t<NumberValue value={maxTokens} size=\"xs\" align=\"left\" />\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\tvalue={<Percent value={pct} scaled size=\"xs\" weight=\"semibold\" align=\"right\" />}\n\t\t\t\t\t\tmono\n\t\t\t\t\t\tvalueClassName=\"text-xs font-semibold\"\n\t\t\t\t\t/>\n\t\t\t\t\t<div className=\"mt-1 h-1.5 w-full overflow-hidden rounded-full bg-muted\">\n\t\t\t\t\t\t<div className=\"h-full rounded-full bg-primary\" style={{ width: `${pct}%` }} />\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t\t{!!cost && (\n\t\t\t\t<InlineStat\n\t\t\t\t\tclassName=\"mt-space-lg rounded-radius bg-primary/5 p-surface-xs\"\n\t\t\t\t\tlabel={<Text tag=\"span\" size=\"xs\" weight=\"medium\" lineHeight=\"tight\">{strings.cost}</Text>}\n\t\t\t\t\tvalue={cost}\n\t\t\t\t\tmono\n\t\t\t\t\tvalueClassName=\"text-sm font-bold\"\n\t\t\t\t/>\n\t\t\t)}\n\t\t</Stack>\n\t);\n}\n\nAiTokenUsage.displayName = 'AiTokenUsage';\n","import type { StringsProp } from '../../../../lib/strings';\n\nexport type AiFeedbackVote = 'up' | 'down' | null;\n\nexport interface AiFeedbackStrings {\n\tprompt: string;\n\tthumbsUpAria: string;\n\tthumbsDownAria: string;\n\tcommentPlaceholder: string;\n\tsubmit: string;\n\tthanks: string;\n}\n\nexport const defaultAiFeedbackStrings: AiFeedbackStrings = {\n\tprompt: 'Was this helpful?',\n\tthumbsUpAria: 'Mark as helpful',\n\tthumbsDownAria: 'Mark as not helpful',\n\tcommentPlaceholder: 'Tell us more (optional)',\n\tsubmit: 'Send feedback',\n\tthanks: 'Thanks for your feedback.',\n};\n\nexport interface AiFeedbackProps {\n\t/** Current value. Controlled. */\n\tvalue?: AiFeedbackVote;\n\tonVote?: (vote: AiFeedbackVote) => void;\n\t/** Fired when a comment is submitted. */\n\tonSubmitComment?: (comment: string, vote: AiFeedbackVote) => void;\n\tallowComment?: boolean;\n\tsubmitted?: boolean;\n\t/** Merged onto the outermost node. */\n\tclassName?: string;\n\t/** Overrides this surface's own copy. */\n\tstrings?: StringsProp<AiFeedbackStrings>;\n}\n","/**\n * AiFeedback — thumbs-up / thumbs-down voter with an optional follow-up\n * comment field. Wires into model-improvement loops: emits the vote via\n * `onVote` immediately and a comment via `onSubmitComment` when the user\n * submits the textarea. After `submitted=true` the surface is replaced with\n * a thank-you confirmation. Strings overridable for i18n.\n */\nimport { useState } from 'react';\nimport { ThumbsDown, ThumbsUp } from 'lucide-react';\nimport { Button } from '../../../base/buttons';\nimport { Textarea } from '../../../base/text-inputs';\nimport { Stack } from '../../../base/structure';\nimport { Text } from '../../../typography';\nimport { useStrings } from '../../../../lib/strings';\nimport { cn } from '../../../../lib/utils';\n\nimport {\n\tdefaultAiFeedbackStrings,\n\ttype AiFeedbackProps,\n\ttype AiFeedbackVote,\n} from './types';\n\nexport function AiFeedback({\n\tvalue,\n\tonVote,\n\tonSubmitComment,\n\tallowComment = true,\n\tsubmitted = false,\n\tclassName,\n\tstrings: stringsProp,\n}: AiFeedbackProps) {\n\tconst strings = useStrings(defaultAiFeedbackStrings, stringsProp);\n\tconst [internalVote, setInternalVote] = useState<AiFeedbackVote>(null);\n\tconst [comment, setComment] = useState('');\n\tconst vote = value ?? internalVote;\n\n\tconst cast = (next: AiFeedbackVote) => {\n\t\tconst resolved = vote === next ? null : next;\n\t\tif (value === undefined) setInternalVote(resolved);\n\t\tonVote?.(resolved);\n\t};\n\n\tif (submitted) {\n\t\treturn (\n\t\t\t<div\n\t\t\t\tclassName={cn('ai-feedback--component', \n\t\t\t\t\t'inline-flex items-center gap-space-md rounded-radius bg-success/10 px-space-lg py-space-sm',\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t<ThumbsUp className=\"size-icon-md text-success\" />\n\t\t\t\t<Text size=\"xs\" type=\"success\" weight=\"medium\">\n\t\t\t\t\t{strings.thanks}\n\t\t\t\t</Text>\n\t\t\t</div>\n\t\t);\n\t}\n\n\treturn (\n\t\t<div className={cn('ai-feedback--component inline-flex flex-col gap-space-md', className)}>\n\t\t\t<div className=\"flex items-center gap-space-md\">\n\t\t\t\t<Text size=\"xs\" type=\"secondary\">{strings.prompt}</Text>\n\t\t\t\t<Button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\ttone=\"secondary\"\n\t\t\t\t\tbuttonStyle={vote === 'up' ? 'solid' : 'ghost'}\n\t\t\t\t\tsize=\"sm\" iconOnly\n\t\t\t\t\taria-label={strings.thumbsUpAria}\n\t\t\t\t\taria-pressed={vote === 'up'}\n\t\t\t\t\tonClick={() => cast('up')}\n\t\t\t\t\tclassName={cn(vote === 'up' && 'text-success bg-success/15 hover:bg-success/20')}\n\t\t\t\t>\n\t\t\t\t\t<ThumbsUp className=\"size-icon-md\" />\n\t\t\t\t</Button>\n\t\t\t\t<Button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\ttone=\"secondary\"\n\t\t\t\t\tbuttonStyle={vote === 'down' ? 'solid' : 'ghost'}\n\t\t\t\t\tsize=\"sm\" iconOnly\n\t\t\t\t\taria-label={strings.thumbsDownAria}\n\t\t\t\t\taria-pressed={vote === 'down'}\n\t\t\t\t\tonClick={() => cast('down')}\n\t\t\t\t\tclassName={cn(vote === 'down' && 'text-destructive bg-destructive/10 hover:bg-destructive/10')}\n\t\t\t\t>\n\t\t\t\t\t<ThumbsDown className=\"size-icon-md\" />\n\t\t\t\t</Button>\n\t\t\t</div>\n\n\t\t\t{!!allowComment && !!vote && (\n\t\t\t\t<Stack gap=\"md\">\n\t\t\t\t\t<Textarea\n\t\t\t\t\t\tvalue={comment}\n\t\t\t\t\t\tonChange={(e) => setComment((e.target as HTMLTextAreaElement).value)}\n\t\t\t\t\t\tplaceholder={strings.commentPlaceholder}\n\t\t\t\t\t\tminRows={2}\n\t\t\t\t\t/>\n\t\t\t\t\t<Stack direction=\"horizontal\" gap=\"none\" justify=\"end\">\n\t\t\t\t\t\t<Button\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, Quote } from 'lucide-react';\nimport { Button } from '../../../base/buttons';\nimport { Stack } from '../../../base/structure';\nimport { Number as NumberValue, Percent, SecondaryValue } from '../../../primitives';\nimport { Text } from '../../../typography';\nimport {\n\tItem,\n\tItemActions,\n\tItemContent,\n\tItemDescription,\n\tItemFooter,\n\tItemGroup,\n\tItemMedia,\n\tItemTitle,\n} from '../../../base/item';\nimport { mergeStrings } from '../../../../lib/strings';\nimport { cn } from '../../../../lib/utils';\n\nimport { defaultAiCitationStrings, type AiCitationProps, type AiCitationSource } from './types';\n\nexport function AiCitation({\n\tsources,\n\texpanded: expandedProp,\n\tdefaultExpanded = false,\n\tonExpandedChange,\n\tmaxCollapsedRows = 0,\n\tclassName,\n\tstrings: stringsProp,\n}: AiCitationProps) {\n\t// `sourceCount` is a function so we cannot use `useStrings` deep-merge\n\t// (the merger replaces functions wholesale, which is what we want).\n\tconst strings = mergeStrings(defaultAiCitationStrings, stringsProp);\n\tconst [internalExpanded, setInternalExpanded] = useState(defaultExpanded);\n\tconst expanded = expandedProp ?? internalExpanded;\n\tconst setExpanded = (next: boolean) => {\n\t\tif (expandedProp === undefined) setInternalExpanded(next);\n\t\tonExpandedChange?.(next);\n\t};\n\tconst visible = expanded ? sources : sources.slice(0, Math.max(0, maxCollapsedRows));\n\tconst hidden = sources.length - visible.length;\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t'ai-citation--component',\n\t\t\t\t'rounded-radius border border-border bg-card px-surface-xs py-surface-xs shadow-xs',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t>\n\t\t\t<Stack gap=\"lg\">\n\t\t\t\t<Button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\ttone=\"secondary\"\n\t\t\t\t\tbuttonStyle=\"ghost\"\n\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\tonClick={() => setExpanded(!expanded)}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t'ai-citation--trigger h-auto justify-start gap-space-sm rounded-inner px-control py-row-y',\n\t\t\t\t\t\t'text-muted-foreground hover:text-foreground hover:bg-muted/40',\n\t\t\t\t\t)}\n\t\t\t\t\taria-expanded={expanded}\n\t\t\t\t\taria-label={expanded ? strings.collapse : strings.expand}\n\t\t\t\t>\n\t\t\t\t\t<Quote className=\"size-icon-md\" />\n\t\t\t\t\t<Text weight=\"medium\">\n\t\t\t\t\t\t{strings.title} · {strings.sourceCount(sources.length)}\n\t\t\t\t\t</Text>\n\t\t\t\t\t{expanded ? <ChevronDown className=\"size-icon-md\" /> : <ChevronRight className=\"size-icon-md\" />}\n\t\t\t\t</Button>\n\n\t\t\t\t{(expanded || maxCollapsedRows > 0) && (\n\t\t\t\t\t<ItemGroup>\n\t\t\t\t\t\t{visible.map((s, i) => (\n\t\t\t\t\t\t\t<CitationRow key={s.id} source={s} index={i + 1} strings={strings} />\n\t\t\t\t\t\t))}\n\t\t\t\t\t\t{!expanded && hidden > 0 && (\n\t\t\t\t\t\t\t<Text size=\"xs\" type=\"secondary\">\n\t\t\t\t\t\t\t\t{strings.hiddenCount(hidden)}\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</ItemGroup>\n\t\t\t\t)}\n\t\t\t</Stack>\n\t\t</div>\n\t);\n}\n\nAiCitation.displayName = 'AiCitation';\n\nfunction CitationRow({\n\tsource,\n\tindex,\n\tstrings,\n}: {\n\tsource: AiCitationSource;\n\tindex: number;\n\tstrings: ReturnType<typeof mergeStrings<typeof defaultAiCitationStrings>>;\n}) {\n\tconst relevancePct =\n\t\ttypeof source.relevance === 'number' ? Math.round(Math.max(0, Math.min(1, source.relevance)) * 100) : null;\n\n\tconst TitleEl = source.url ? 'a' : 'span';\n\tconst titleProps = source.url\n\t\t? {\n\t\t\t\thref: source.url,\n\t\t\t\ttarget: '_blank' as const,\n\t\t\t\trel: 'noopener noreferrer',\n\t\t\t}\n\t\t: {};\n\n\treturn (\n\t\t<Item variant=\"outline\" size=\"sm\" className=\"items-start px-surface-xs py-surface-xs\">\n\t\t\t<ItemMedia>\n\t\t\t\t<NumberValue\n\t\t\t\t\tvalue={index}\n\t\t\t\t\tsize=\"xs\"\n\t\t\t\t\tweight=\"semibold\"\n\t\t\t\t\ttype=\"secondary\"\n\t\t\t\t\talign=\"center\"\n\t\t\t\t\tclassName=\"inline-flex size-icon-lg shrink-0 items-center justify-center rounded-full bg-muted\"\n\t\t\t\t/>\n\t\t\t</ItemMedia>\n\t\t\t<ItemContent>\n\t\t\t\t<ItemTitle className=\"truncate\">\n\t\t\t\t\t<TitleEl\n\t\t\t\t\t\t{...titleProps}\n\t\t\t\t\t\tclassName={cn('truncate', source.url && 'hover:text-primary-accent hover:underline')}\n\t\t\t\t\t>\n\t\t\t\t\t\t{source.title}\n\t\t\t\t\t\t{!!source.url && <ExternalLink className=\"ml-1 inline size-icon-sm align-baseline\" />}\n\t\t\t\t\t</TitleEl>\n\t\t\t\t</ItemTitle>\n\t\t\t\t{!!source.snippet && <ItemDescription clamp={2}>{source.snippet}</ItemDescription>}\n\t\t\t\t{(source.publisher || source.publishedAt) && (\n\t\t\t\t\t<ItemFooter className=\"mt-1 justify-start gap-space-sm\">\n\t\t\t\t\t\t{!!source.publisher && (\n\t\t\t\t\t\t\t<Text size=\"xs\" type=\"discrete\">\n\t\t\t\t\t\t\t\t{source.publisher}\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{!!source.publisher && !!source.publishedAt && (\n\t\t\t\t\t\t\t<Text size=\"xs\" type=\"discrete\">\n\t\t\t\t\t\t\t\t·\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{!!source.publishedAt && (\n\t\t\t\t\t\t\t<SecondaryValue size=\"xs\" className=\"tabular-nums opacity-80\">\n\t\t\t\t\t\t\t\t{source.publishedAt}\n\t\t\t\t\t\t\t</SecondaryValue>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</ItemFooter>\n\t\t\t\t)}\n\t\t\t</ItemContent>\n\t\t\t{relevancePct !== null && (\n\t\t\t\t<ItemActions className=\"w-16 flex-col items-end gap-space-2xs\">\n\t\t\t\t\t<Percent value={relevancePct} scaled size=\"xs\" type=\"secondary\" weight=\"medium\" />\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName=\"h-1 w-full overflow-hidden rounded-full bg-muted\"\n\t\t\t\t\t\trole=\"progressbar\"\n\t\t\t\t\t\taria-label={strings.relevance}\n\t\t\t\t\t\taria-valuemin={0}\n\t\t\t\t\t\taria-valuemax={100}\n\t\t\t\t\t\taria-valuenow={relevancePct}\n\t\t\t\t\t>\n\t\t\t\t\t\t<div className=\"h-full rounded-full bg-primary\" style={{ width: `${relevancePct}%` }} />\n\t\t\t\t\t</div>\n\t\t\t\t</ItemActions>\n\t\t\t)}\n\t\t</Item>\n\t);\n}\n","import type { StringsProp } from '../../../../lib/strings';\n\nexport interface AiInlineCitationStrings {\n\t/** Tooltip prefix when only a number is rendered. */\n\tsourcePrefix: string;\n\t/** Aria label template — supports `{{n}}` and `{{title}}` placeholders. */\n\topenAria: string;\n}\n\nexport const defaultAiInlineCitationStrings: AiInlineCitationStrings = {\n\tsourcePrefix: 'Source',\n\topenAria: 'Open source {{n}}: {{title}}',\n};\n\nexport interface AiInlineCitationProps {\n\t/** 1-indexed citation number rendered inside the pill. */\n\tindex: number;\n\t/** Title of the cited source — used in the tooltip / aria-label. */\n\ttitle?: string;\n\t/** Optional URL — when provided, the pill renders as a link. */\n\turl?: string;\n\t/** Click handler — preferred over `url` for SPA / virtual link routing. */\n\tonSelect?: () => void;\n\t/** Merged onto the outermost node. */\n\tclassName?: string;\n\t/** Overrides this surface's own copy. */\n\tstrings?: StringsProp<AiInlineCitationStrings>;\n}\n","/**\n * AiInlineCitation — small footnote-style pill rendered inline inside AI\n * response prose. The number references a position in the parent\n * sources/AiCitation list. Hover to see the source title; click to jump.\n */\nimport { Text, TextLink } from '../../../typography';\nimport { mergeStrings } from '../../../../lib/strings';\nimport { cn } from '../../../../lib/utils';\n\nimport {\n\tdefaultAiInlineCitationStrings,\n\ttype AiInlineCitationProps,\n} from './types';\n\nfunction interpolate(template: string, params: Record<string, string | number>): string {\n\treturn template.replace(/\\{\\{\\s*(\\w+)\\s*\\}\\}/g, (m, k) => {\n\t\tconst v = params[k];\n\t\treturn v === undefined ? m : String(v);\n\t});\n}\n\nexport function AiInlineCitation({\n\tindex,\n\ttitle,\n\turl,\n\tonSelect,\n\tclassName,\n\tstrings: stringsProp,\n}: AiInlineCitationProps) {\n\tconst strings = mergeStrings(defaultAiInlineCitationStrings, stringsProp);\n\tconst ariaLabel = interpolate(strings.openAria, {\n\t\tn: index,\n\t\ttitle: title ?? '',\n\t});\n\tconst tooltip = title ? `${strings.sourcePrefix} ${index}: ${title}` : `${strings.sourcePrefix} ${index}`;\n\n\t// Inline markers use the compact shared action geometry; the Text child\n\t// owns their numeric role independently of the surrounding prose size.\n\tconst baseCls = cn(\n\t\t'box-border inline-flex h-action-xs min-w-action-xs -translate-y-px items-center justify-center rounded-inner border-0 px-control-xs font-sans',\n\t\t'align-middle tabular-nums',\n\t\t'bg-muted text-muted-foreground',\n\t\t'hover:bg-primary/10 hover:text-primary-accent',\n\t\t'transition-colors duration-150',\n\t\t'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n\t\tclassName,\n\t);\n\n\tif (url) {\n\t\treturn (\n\t\t\t<TextLink\n\t\t\t\thref={url}\n\t\t\t\tsize=\"inherit\"\n\t\t\t\tunderline={false}\n\t\t\t\ttarget=\"_blank\"\n\t\t\t\trel=\"noopener noreferrer\"\n\t\t\t\ttitle={tooltip}\n\t\t\t\taria-label={ariaLabel}\n\t\t\t\tclassName={cn('ai-inline-citation--component', baseCls)}\n\t\t\t>\n\t\t\t\t<Text tag=\"span\" size=\"xs\" weight=\"medium\" className=\"leading-none\">\n\t\t\t\t\t{index}\n\t\t\t\t</Text>\n\t\t\t</TextLink>\n\t\t);\n\t}\n\n\tif (onSelect) {\n\t\treturn (\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tonClick={onSelect}\n\t\t\t\ttitle={tooltip}\n\t\t\t\taria-label={ariaLabel}\n\t\t\t\tclassName={cn('ai-inline-citation--component', baseCls)}\n\t\t\t>\n\t\t\t\t<Text tag=\"span\" size=\"xs\" weight=\"medium\" className=\"leading-none\">\n\t\t\t\t\t{index}\n\t\t\t\t</Text>\n\t\t\t</button>\n\t\t);\n\t}\n\n\treturn (\n\t\t<span\n\t\t\ttitle={tooltip}\n\t\t\taria-label={ariaLabel}\n\t\t\tclassName={cn('ai-inline-citation--component', baseCls)}\n\t\t>\n\t\t\t<Text tag=\"span\" size=\"xs\" weight=\"medium\" className=\"leading-none\">\n\t\t\t\t{index}\n\t\t\t</Text>\n\t\t</span>\n\t);\n}\n\nAiInlineCitation.displayName = 'AiInlineCitation';\n","import type { ReactNode } from 'react';\nimport type { StringsProp } from '../../../../lib/strings';\n\nexport interface AiPackageInfoStrings {\n\tversionLabel: string;\n\tlicenseLabel: string;\n\tpublishedLabel: string;\n\thomepageAria: string;\n\thomepageLabel: string;\n\trepositoryAria: string;\n\trepositoryLabel: string;\n\tweeklyDownloadsLabel: string;\n}\n\nexport const defaultAiPackageInfoStrings: AiPackageInfoStrings = {\n\tversionLabel: 'Version',\n\tlicenseLabel: 'License',\n\tpublishedLabel: 'Published',\n\thomepageAria: 'Open homepage',\n\thomepageLabel: 'Homepage',\n\trepositoryAria: 'Open repository',\n\trepositoryLabel: 'Repository',\n\tweeklyDownloadsLabel: 'Weekly downloads',\n};\n\nexport interface AiPackageInfoProps {\n\t/** Package name (npm-style: optional `@scope/`). */\n\tname: string;\n\t/** Latest / pinned version. */\n\tversion?: string;\n\t/** Short description from the package manifest. */\n\tdescription?: ReactNode;\n\t/** SPDX-style license identifier (e.g. \"MIT\"). */\n\tlicense?: string;\n\t/** ISO date or human label of last publish. */\n\tpublishedAt?: string;\n\t/** Package homepage URL. */\n\thomepage?: string;\n\t/** Repository URL (typically GitHub). */\n\trepository?: string;\n\t/** Weekly downloads — formatted by the consumer. */\n\tweeklyDownloads?: string | number;\n\t/** Comma-separated tag list rendered as small chips. */\n\tkeywords?: ReadonlyArray<string>;\n\t/** Click handler for the whole card. */\n\tonSelect?: () => void;\n\t/** Merged onto the outermost node. */\n\tclassName?: string;\n\t/** Overrides this surface's own copy. */\n\tstrings?: StringsProp<AiPackageInfoStrings>;\n}\n","/**\n * AiPackageInfo — compact card describing an npm / library package referenced\n * by the model. Header: name + version chip; body: description + optional\n * meta (license, published date, weekly downloads) and keyword chips. Footer\n * exposes homepage / repository links when provided.\n */\nimport { Code2, ExternalLink, Globe, Package } from 'lucide-react';\nimport { Badge } from '../../../base/badge';\nimport { Button } from '../../../base/buttons';\nimport { MonoValue, SecondaryValue } from '../../../primitives';\nimport { Text, TextLink } from '../../../typography';\nimport { useStrings } from '../../../../lib/strings';\nimport { Stack } from '../../../base/structure';\nimport { cn } from '../../../../lib/utils';\n\nimport { defaultAiPackageInfoStrings, type AiPackageInfoProps } from './types';\n\nexport function AiPackageInfo({\n\tname,\n\tversion,\n\tdescription,\n\tlicense,\n\tpublishedAt,\n\thomepage,\n\trepository,\n\tweeklyDownloads,\n\tkeywords,\n\tonSelect,\n\tclassName,\n\tstrings: stringsProp,\n}: AiPackageInfoProps) {\n\tconst strings = useStrings(defaultAiPackageInfoStrings, stringsProp);\n\tconst bodyContent = (\n\t\t<>\n\t\t\t<span\n\t\t\t\taria-hidden\n\t\t\t\tclassName=\"inline-flex size-9 shrink-0 items-center justify-center rounded-inner bg-muted text-muted-foreground\"\n\t\t\t>\n\t\t\t\t<Package className=\"size-icon\" />\n\t\t\t</span>\n\t\t\t<div className=\"min-w-0 flex-1\">\n\t\t\t\t<Stack gap=\"dense\">\n\t\t\t\t<Stack direction=\"horizontal\" gap=\"md\" align=\"center\">\n\t\t\t\t\t<MonoValue weight=\"semibold\" className=\"truncate\">\n\t\t\t\t\t\t{name}\n\t\t\t\t\t</MonoValue>\n\t\t\t\t\t{!!version && (\n\t\t\t\t\t\t<Badge tone=\"secondary\">\n\t\t\t\t\t\t\t<MonoValue size=\"xs\" className=\"text-inherit\">v{version.replace(/^v/, '')}</MonoValue>\n\t\t\t\t\t\t</Badge>\n\t\t\t\t\t)}\n\t\t\t\t</Stack>\n\t\t\t\t{!!description && (\n\t\t\t\t\t<Text size=\"xs\" type=\"secondary\" className=\"line-clamp-2\">\n\t\t\t\t\t\t{description}\n\t\t\t\t\t</Text>\n\t\t\t\t)}\n\t\t\t\t</Stack>\n\n\t\t\t\t{(license || publishedAt || weeklyDownloads !== undefined) && (\n\t\t\t\t\t<div className=\"mt-space-md flex flex-wrap items-center gap-x-space-lg gap-y-space-xs\">\n\t\t\t\t\t\t{!!license && <MetaItem label={strings.licenseLabel} value={license} />}\n\t\t\t\t\t\t{!!publishedAt && <MetaItem label={strings.publishedLabel} value={publishedAt} />}\n\t\t\t\t\t\t{weeklyDownloads !== undefined && (\n\t\t\t\t\t\t\t<MetaItem label={strings.weeklyDownloadsLabel} value={String(weeklyDownloads)} />\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\n\t\t\t\t{!!keywords?.length && (\n\t\t\t\t\t<div className=\"mt-space-md flex flex-wrap gap-space-xs\">\n\t\t\t\t\t\t{keywords.slice(0, 6).map((keyword) => (\n\t\t\t\t\t\t\t<Badge key={keyword} tone=\"secondary\">\n\t\t\t\t\t\t\t\t{keyword}\n\t\t\t\t\t\t\t</Badge>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t</>\n\t);\n\tconst bodyClassName = 'ai-package-info--body flex w-full items-start gap-space-lg p-surface-xs text-left';\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t'ai-package-info--component block w-full overflow-hidden rounded-radius border border-border/60 bg-card',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t>\n\t\t\t{onSelect ? (\n\t\t\t\t<Button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\ttone=\"secondary\"\n\t\t\t\t\tbuttonStyle=\"ghost\"\n\t\t\t\t\tonClick={onSelect}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\tbodyClassName,\n\t\t\t\t\t\t'h-auto justify-start rounded-none whitespace-normal transition-colors hover:bg-muted/40',\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t{bodyContent}\n\t\t\t\t</Button>\n\t\t\t) : (\n\t\t\t\t<div className={bodyClassName}>{bodyContent}</div>\n\t\t\t)}\n\n\t\t\t{(homepage || repository) && (\n\t\t\t\t<div className=\"ai-package-info--footer border-t border-border/60 bg-muted/20 px-surface-xs py-row-y\">\n\t\t\t\t\t<Stack direction=\"horizontal\" align=\"center\" gap=\"md\">\n\t\t\t\t\t\t{!!homepage && (\n\t\t\t\t\t\t\t<TextLink\n\t\t\t\t\t\t\t\thref={homepage}\n\t\t\t\t\t\t\t\tsize=\"inherit\"\n\t\t\t\t\t\t\t\tunderline={false}\n\t\t\t\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\t\t\t\trel=\"noopener noreferrer\"\n\t\t\t\t\t\t\t\tonClick={(e) => e.stopPropagation()}\n\t\t\t\t\t\t\t\taria-label={strings.homepageAria}\n\t\t\t\t\t\t\t\tclassName=\"inline-flex items-center gap-space-xs rounded text-muted-foreground hover:text-foreground\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<Globe className=\"size-icon-sm\" />\n\t\t\t\t\t\t\t\t<Text tag=\"span\" weight=\"medium\">\n\t\t\t\t\t\t\t\t\t{strings.homepageLabel}\n\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t<ExternalLink className=\"size-icon-sm\" />\n\t\t\t\t\t\t\t</TextLink>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{!!homepage && !!repository && (\n\t\t\t\t\t\t\t<Text tag=\"span\" size=\"xs\" type=\"secondary\" className=\"opacity-40\" aria-hidden>\n\t\t\t\t\t\t\t\t·\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{!!repository && (\n\t\t\t\t\t\t\t<TextLink\n\t\t\t\t\t\t\t\thref={repository}\n\t\t\t\t\t\t\t\tsize=\"inherit\"\n\t\t\t\t\t\t\t\tunderline={false}\n\t\t\t\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\t\t\t\trel=\"noopener noreferrer\"\n\t\t\t\t\t\t\t\tonClick={(e) => e.stopPropagation()}\n\t\t\t\t\t\t\t\taria-label={strings.repositoryAria}\n\t\t\t\t\t\t\t\tclassName=\"inline-flex items-center gap-space-xs rounded text-muted-foreground hover:text-foreground\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<Code2 className=\"size-icon-sm\" />\n\t\t\t\t\t\t\t\t<Text tag=\"span\" weight=\"medium\">\n\t\t\t\t\t\t\t\t\t{strings.repositoryLabel}\n\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t<ExternalLink className=\"size-icon-sm\" />\n\t\t\t\t\t\t\t</TextLink>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</Stack>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n\nAiPackageInfo.displayName = 'AiPackageInfo';\n\nfunction MetaItem({ label, value }: { label: string; value: string }) {\n\treturn (\n\t\t<div className=\"inline-flex items-baseline gap-space-xs\">\n\t\t\t<Text size=\"xs\" type=\"discrete\">\n\t\t\t\t{label}\n\t\t\t</Text>\n\t\t\t<SecondaryValue size=\"xs\" weight=\"medium\" className=\"tabular-nums\">\n\t\t\t\t{value}\n\t\t\t</SecondaryValue>\n\t\t</div>\n\t);\n}\n","import type { LucideIcon } from 'lucide-react';\nimport type { ComponentProps, ReactNode } from 'react';\nimport type { RowDensity } from '../../../../lib/row-recipes';\nimport type { StringsProp } from '../../../../lib/strings';\n\nexport type AiFileTreeNodeKind = 'directory' | 'file';\n\nexport type AiFileTreeChangeStatus = 'added' | 'modified' | 'removed' | 'renamed';\n\nexport interface AiFileTreeNode {\n\t/** Stable identity, unique throughout the hierarchy. */\n\tid: string;\n\t/** Display name. */\n\tname: string;\n\tkind: AiFileTreeNodeKind;\n\t/** Children — only meaningful for directories. */\n\tchildren?: ReadonlyArray<AiFileTreeNode>;\n\t/** Custom icon override (file kinds, etc.). */\n\ticon?: LucideIcon;\n\t/** Diff status — drives the semantic icon color and trailing Badge. */\n\tstatus?: AiFileTreeChangeStatus;\n\t/** Trailing slot — badge, line count, etc. */\n\ttrailing?: ReactNode;\n\t/** Default-expanded state for directories. */\n\tdefaultExpanded?: boolean;\n /** Disables this entry and all descendants. */\n disabled?: boolean;\n}\n\nexport interface AiFileTreeStrings {\n /** Accessible hierarchy name; aria-label/aria-labelledby can override it. */\n treeAria?: string;\n\texpandAria: string;\n\tcollapseAria: string;\n\tstatusLabels: Record<AiFileTreeChangeStatus, string>;\n}\n\nexport const defaultAiFileTreeStrings: AiFileTreeStrings = {\n treeAria: 'Files',\n\texpandAria: 'Expand directory',\n\tcollapseAria: 'Collapse directory',\n\tstatusLabels: {\n\t\tadded: 'A',\n\t\tmodified: 'M',\n\t\tremoved: 'D',\n\t\trenamed: 'R',\n\t},\n};\n\nexport interface AiFileTreeProps extends Omit<ComponentProps<'div'>, 'children' | 'onSelect'> {\n\t/** Root nodes — typically one entry but the API accepts multiple. */\n\tnodes: ReadonlyArray<AiFileTreeNode>;\n\t/** Selected file id — drives the active row state. Controlled. */\n\tselectedId?: string;\n\t/** Click handler — fires for files only by default. */\n\tonSelect?: (node: AiFileTreeNode) => void;\n\t/** Hide diff status badges; semantic icon colors remain visible. */\n\thideStatusLabels?: boolean;\n\t/** Indent width per nesting level (px). Omit for the shared token-backed hierarchy inset. */\n\tindent?: number;\n /** Vertical rhythm; compact by default. */\n density?: RowDensity;\n /** Disables the entire hierarchy. */\n disabled?: boolean;\n /** Controlled directory expansion. */\n expandedIds?: readonly string[];\n /** Initial expansion; otherwise each directory's defaultExpanded is respected. */\n defaultExpandedIds?: readonly string[];\n /** Expansion request, independent of file selection. */\n onExpandedIdsChange?: (ids: string[], node: AiFileTreeNode) => void;\n\t/** Merged onto the outermost node. */\n\tclassName?: string;\n\t/** Overrides this surface's own copy. */\n\tstrings?: StringsProp<AiFileTreeStrings>;\n}\n","/** File-change presentation on the public keyboard hierarchy; framing belongs to the caller. */\nimport { useMemo, useState } from 'react';\nimport { File, FileCode, FileText, Folder, FolderOpen, type LucideIcon } from 'lucide-react';\nimport { Tree, type TreeNode } from '../../../base/tree';\nimport { Badge } from '../../../base/badge';\nimport { Stack } from '../../../base/structure';\nimport { MonoValue, SecondaryValue } from '../../../primitives';\nimport { useStrings } from '../../../../lib/strings';\nimport { cn } from '../../../../lib/utils';\nimport { defaultAiFileTreeStrings, type AiFileTreeChangeStatus, type AiFileTreeNode, type AiFileTreeProps } from './types';\n\nconst statusTones = { added: 'success', modified: 'warning', removed: 'destructive', renamed: 'info' } as const;\nconst statusIconClasses: Record<AiFileTreeChangeStatus, string> = {\n added: 'text-success', modified: 'text-warning-accent', removed: 'text-destructive', renamed: 'text-info',\n};\nfunction pickFileIcon(name: string): LucideIcon {\n const ext = name.split('.').pop()?.toLowerCase() ?? '';\n if (['ts', 'tsx', 'js', 'jsx', 'mjs', 'cjs', 'json', 'css', 'scss', 'html', 'sh', 'py', 'rs', 'go'].includes(ext)) return FileCode;\n if (['md', 'mdx', 'txt'].includes(ext)) return FileText;\n return File;\n}\nfunction initialExpansion(nodes: readonly AiFileTreeNode[], depth = 0): string[] {\n return nodes.flatMap(node => [\n ...(node.kind === 'directory' && (node.defaultExpanded ?? depth < 1) ? [node.id] : []),\n ...initialExpansion(node.children ?? [], depth + 1),\n ]);\n}\nexport function AiFileTree({\n nodes, selectedId, onSelect, hideStatusLabels = false, indent, density = 'compact', disabled,\n expandedIds, defaultExpandedIds, onExpandedIdsChange, className, strings: stringsProp, ...props\n}: AiFileTreeProps) {\n const strings = useStrings(defaultAiFileTreeStrings, stringsProp);\n const [localExpanded, setLocalExpanded] = useState(() => defaultExpandedIds ?? initialExpansion(nodes));\n const expanded = expandedIds ?? localExpanded;\n const items = useMemo(() => {\n function map(nodes: readonly AiFileTreeNode[]): TreeNode<AiFileTreeNode>[] {\n return nodes.map(node => {\n const directory = node.kind === 'directory';\n const Icon = node.icon ?? (directory ? expanded.includes(node.id) ? FolderOpen : Folder : pickFileIcon(node.name));\n return {\n value: node.id, label: node.name, data: node, disabled: node.disabled,\n hasChildren: directory, children: directory ? map(node.children ?? []) : undefined,\n icon: <Icon aria-hidden=\"true\" className={cn('size-icon', node.status && statusIconClasses[node.status])} />,\n trailing: <Stack direction=\"horizontal\" gap=\"xs\" align=\"center\" className=\"shrink-0\">\n {node.status && !hideStatusLabels && <Badge tone={statusTones[node.status]} size=\"sm\" title={node.status}>{strings.statusLabels[node.status]}</Badge>}\n {node.trailing != null && <SecondaryValue size=\"xs\" className=\"tabular-nums\">{node.trailing}</SecondaryValue>}\n </Stack>,\n };\n });\n }\n return map(nodes);\n }, [nodes, expanded, hideStatusLabels, strings.statusLabels]);\n return <Tree {...props} aria-label={props['aria-label'] ?? strings.treeAria} items={items} selectedValues={selectedId === undefined ? [] : [selectedId]}\n expandedValues={expanded} branchActivation=\"toggle\" density={density} disabled={disabled} indent={indent}\n strings={{ expand: label => `${strings.expandAria}: ${label}`, collapse: label => `${strings.collapseAria}: ${label}` }}\n onExpandedValuesChange={(values, node) => {\n if (expandedIds === undefined) setLocalExpanded(values);\n onExpandedIdsChange?.(values, node.data!);\n }}\n onSelectedValuesChange={(_values, node) => { if (node.data?.kind === 'file') onSelect?.(node.data); }}\n renderLabel={node => <MonoValue size=\"inherit\" weight=\"regular\" className={cn('ai-file-tree--name text-inherit wrap-anywhere', node.data?.status === 'removed' && 'line-through')}>{node.label}</MonoValue>}\n className={cn('ai-file-tree--component', className)} />;\n}\nAiFileTree.displayName = 'AiFileTree';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAgBA,IAAasD,KAA4C;CACxD,YAAY;CACZ,kBAAkB;EAAE,KAAK;EAAO,QAAQ;EAAU,MAAM;CAAO;AAChE,GAeaC,KAA0D;CACtE,OAAO;CACP,iBAAiB;CACjB,YAAY;CACZ,eAAe;CACf,kBAAkB;CAClB,iBAAiB;EAAE,KAAK;EAAO,QAAQ;EAAU,MAAM;CAAO;AAC/D,GC5BMC,KAAkD;CACvD,KAAK;CACL,QAAQ;CACR,MAAM;AACP;AAEA,SAASC,GAAe,EAAE,UAAO,YAAoD;CACpF,IAAMC,IAASF,GAAeG;CAE9B,OACC,kBAAC,OAAD;EAAK,WAAU;EAAf,UAAA,CACC,kBAAC,OAAD;GAAK,WAAU;GAAkC,eAAY;GAC3D,UAAA,MAAM,KAAK,EAAE,QAAQ,EAAE,IAAI,GAAG,MAC9B,kBAAC,OAAD,EAEC,WAAWvD,EACV,+BACAwD,IAAIF,IAAS,qBAAqB,wBACnC,EACA,GALK,OAAO,OAAOE,CAAC,GAKpB,CACD;EACG,CAAA,GACL,kBAACvD,GAAD;GAAM,MAAK;GAAK,MAAK;GAAY,KAAI;GAAO,WAAU;GACpD,UAAAwD;EACI,CAAA,CACF;;AAEP;AAEA,SAAgBC,GAAe,EAC9B,SACA,aACA,aACA,YACA,WACA,cACA,SAASC,KACc;CACvB,IAAMC,IAAUC,EAAWX,IAAyBS,CAAW,GACzDG,IACL,kBAAC,OAAD;EAAK,WAAU;EAAf,UAAA,CACE,CAAC,CAACC,EAAK,eACP,kBAACvD,GAAD;GAAgB,MAAK;GAAK,WAAU;GAClC,UAAAuD,EAAK;EACS,CAAA,GAEhB,CAAC,CAACA,EAAK,SACP,kBAACvD,GAAD;GAAgB,MAAK;GAAK,WAAU;GAClC,UAAAuD,EAAK;EACS,CAAA,CAEb;KAEAC,IAAiBD,EAAK,eAC3B,kBAAC3D,GAAD;EAAQ,MAAK;EAAY,aAAY;EAAQ,SAAS2D,EAAK;EAA3D,UAAA,CACC,kBAACE,IAAD,EAAW,WAAU,eAAgB,CAAA,GACpCL,EAAQ,UACF;CACL,CAAA,IAAA,MACEM,IAAmBC,MAAa,KAAA,IAAYL,IAAkBK,GAC9DC,IAAkBC,MAAY,KAAA,IAAYL,IAAiBK,GAC3DC,IAAgBC,MAAW,KAAA,KAE7BL,KAAoBE,MACtB,kBAAAxE,GAAA,EAAA,UAAA,CACEsE,GACAE,CACA,EAAA,CAAA,IALDG;CAQH,OACC,kBAACjE,GAAD;EACC,kBAAe;EACf,aAAU;EACV,WAAWN,EAAG,yBAAyBwE,CAAS;EAHjD,UAAA;GAKC,kBAACvE,GAAD;IAAM,YAAW;IACf,UAAA8D,EAAK;GACD,CAAA;GAELA,EAAK,SAAS,SAAS,KACvB,kBAACzD,GAAD;IAAO,WAAU;IAAa,MAAA;IAAK,KAAI;IAAK,WAAU;IACpD,UAAAyD,EAAK,SAAS,KAAK,MACnB,kBAAClD,GAAD;KAAoB,MAAK;KACvB,UAAA4D;IACK,GAFKA,CAEL,CACP;GACK,CAAA;GAGR,kBAACpB,IAAD;IAAgB,OAAOU,EAAK;IAAY,OAAOH,EAAQ,iBAAiBG,EAAK;GAAc,CAAA;GAE1FW;GAEA,CAAC,CAACJ,KACF,kBAAChE,GAAD;IACC,WAAW;KAAE,MAAM;KAAY,IAAI;IAAa;IAChD,KAAI;IACJ,SAAS,EAAE,IAAI,UAAU;IACzB,WAAU;IAET,UAAAgE;GACK,CAAA;EAEF;;AAET;;;AC5GA,SAAgBK,GAAsB,EAAE,SAAM,aAAU,cAAW,SAAShB,KAA2C;CACtH,IAAMC,IAAUC,EAAWV,IAAgCQ,CAAW,GAChEiB,IACLb,EAAK,cAAc,KAChBH,EAAQ,gBAAgB,OACxBG,EAAK,cAAc,KAClBH,EAAQ,gBAAgB,SACxBA,EAAQ,gBAAgB;CAE7B,OACC,kBAACtD,GAAD;EACC,kBAAe;EACf,aAAU;EACV,WAAWN,EAAG,gCAAgCwE,CAAS;EAHxD,UAAA;GAKC,kBAAClE,GAAD;IAAO,WAAU;IAAa,MAAA;IAAK,OAAM;IAAS,KAAI;IAAtD,UAAA;KACC,kBAACO,GAAD;MAAO,MAAK;MACV,UAAAkD,EAAK;KACA,CAAA;KACP,kBAAClD,GAAD;MAAO,MAAMkD,EAAK;MAChB,UAAAA,EAAK;KACA,CAAA;KACP,kBAAClD,GAAD;MAAO,MAAMkD,EAAK;MAAe,KAAA;MAC/B,UAAAA,EAAK;KACA,CAAA;IACD;;GAEP,kBAACvC,GAAD;IACC,OAAOoC,EAAQ;IACf,gBAAe;IACf,OACC,kBAAC,QAAD;KAAM,WAAU;KAAhB,UAAA,CACC,kBAAC,QAAD;MAAM,WAAU;MACf,UAAA,MAAM,KAAK,EAAE,QAAQ,EAAE,IAAI,GAAG,MAC9B,kBAAC,QAAD,EAEC,WAAW5D,EACV,+BACAwD,IAAIO,EAAK,kBAAkB,qBAAqB,UACjD,EACA,GALK,MAAM,OAAOP,CAAC,GAKnB,CACD;KACK,CAAA,GACN,kBAACvD,GAAD;MAAM,KAAI;MAAO,MAAK;MAAK,MAAK;MAAhC,UAAA,CACE,OAAO8D,EAAK,eAAe,GAAE,IACzB;KACD,CAAA,CAAA;;GAEP,CAAA;GAEAA,EAAK,MAAM,SAAS,KACpB,kBAACvC,GAAD;IACC,OAAOoC,EAAQ;IACf,gBAAe;IACf,OACC,kBAAC,QAAD;KAAM,WAAU;KACd,UAAAG,EAAK,MAAM,KAAK,MAChB,kBAAClD,GAAD;MAAkB,MAAK;MACrB,UAAAgE;KACK,GAFKA,CAEL,CACP;IACI,CAAA;GAEP,CAAA;GAGF,kBAACrD,GAAD;IACC,OAAOoC,EAAQ;IACf,gBAAe;IACf,OAAO,kBAAC/C,GAAD;KAAO,MAAK;KAAQ,UAAAkD,EAAK;IAAuB,CAAA;GACvD,CAAA;GAED,kBAAC9D,GAAD;IAAM,YAAW;IAAU,MAAK;IAC9B,UAAA8D,EAAK;GACD,CAAA;GAEN,kBAACjD,GAAD,CAAY,CAAA;GAEZ,kBAAC,OAAD;IAAK,WAAU;IAAf,UAAA,CACC,kBAACD,GAAD;KAAO,MAAK;KAAZ,UAAA;MACE+C,EAAQ;MAAiB;MAAGgB;KACvB;IACP,CAAA,GAAA,kBAAC3E,GAAD;KAAM,MAAK;KAAK,MAAK;KAAW,KAAI;KAClC,UAAA8D,EAAK;IACD,CAAA,CACF;;GAEJW;EACK;;AAET;;;ACnFA,IAAaI,IAAkD;CAC9D,OAAO;CACP,iBAAiB;CACjB,cAAc;CACd,WAAW;CACX,aAAa;CACb,UAAU;AACX;;;ACVA,SAASC,GAAa,GAAe;CAGpC,OAFIC,KAAS,MAAa,YACtBA,KAAS,KAAY,YAClB;AACR;AAEA,SAAgBC,EAAa,EAAE,UAAO,UAAO,YAAS,cAAW,SAAStB,KAAkC;CAC3G,IAAMC,IAAUC,EAAWiB,GAA4BnB,CAAW,GAC5DuB,IAAM,KAAK,MAAMF,IAAQ,GAAG,GAC5BG,IAAUJ,GAAaC,CAAK,GAC5BvB,IAAQ0B,MAAY,YAAYvB,EAAQ,YAAYuB,MAAY,YAAYvB,EAAQ,cAAcA,EAAQ,UAC1GwB,IAAI,IAAI,KAAK,KAAK,IAClBC,IAAOD,IAAKF,IAAM,MAAOE;CAE/B,OACC,kBAAC9E,GAAD;EACC,kBAAe;EACf,aAAU;EACV,KAAI;EACJ,WAAWN,EAAG,qDAAqDwE,CAAS;EAC5E,cAAYZ,EAAQ;EALrB,UAAA,CAOC,kBAAC,OAAD;GAAK,WAAU;GAAf,UAAA,CACC,kBAAC,OAAD;IAAK,WAAU;IAAf,UAAA,CACC,kBAAC,OAAD;KAAK,OAAM;KAAK,QAAO;KAAK,SAAQ;KAAY,eAAY;KAA5D,UAAA,CACC,kBAAC,UAAD;MAAQ,IAAG;MAAK,IAAG;MAAK,GAAE;MAAK,MAAK;MAAO,QAAO;MAAe,aAAY;MAAI,WAAU;KAAiB,CAAA,GAC5G,kBAAC,UAAD;MACC,IAAG;MACH,IAAG;MACH,GAAE;MACF,MAAK;MACL,QAAO;MACP,aAAY;MACZ,eAAc;MACd,iBAAiBwB;MACjB,kBAAkBC;MAClB,WAAU;MACV,WAAWrF,EACVmF,MAAY,aAAa,gBACzBA,MAAY,aAAa,uBACzBA,MAAY,iBAAiB,kBAC9B;KACA,CAAA,CACG;IACL,CAAA,GAAA,kBAAC,OAAD;KAAK,WAAU;KACd,UAAA,kBAACzE,GAAD;MAAS,OAAOwE;MAAK,QAAA;MAAO,QAAO;MAAW,WAAU;KAAgB,CAAA;IACpE,CAAA,CACD;GACL,CAAA,GAAA,kBAAC5E,GAAD;IAAO,KAAI;IAAX,UAAA,CACC,kBAACJ,GAAD,EAAA,UACE0D,EAAQ,gBACI,CAAA,GACd,kBAACtD,GAAD;KAAO,WAAU;KAAa,KAAI;KAAlC,UAAA,CACC,kBAACO,GAAD;MAAO,MAAMsE;MAAU,UAAA1B;KAAa,CAAA,GACnC,CAAC,CAAC6B,KACF,kBAACrF,GAAD;MAAM,MAAK;MAAK,MAAK;MAAY,WAAU;MACzC,UAAAqF;KACI,CAAA,CAED;IACD,CAAA,CAAA;GACH,CAAA,CAAA;EAEJ,CAAA,GAAA,CAAC,CAACC,KAAWA,EAAQ,SAAS,KAC9B,kBAACjF,GAAD;GAAO,KAAI;GAAK,WAAU;GAA1B,UAAA,CACC,kBAACJ,GAAD,EAAA,UACE0D,EAAQ,aACI,CAAA,GACb2B,EAAQ,KAAK,MACb,kBAACjF,GAAD;IAAqB,KAAI;IAAzB,UAAA,CACC,kBAACkB,GAAD;KACC,OAAOgE,EAAE;KACT,OAAO,kBAAC9E,GAAD;MAAS,OAAO8E,EAAE;MAAO,MAAK;MAAK,QAAO;KAAY,CAAA;KAC7D,MAAA;IACA,CAAA,GACD,kBAACjF,GAAD;KAAU,OAAO,KAAK,MAAMiF,EAAE,QAAQ,GAAG;KAAG,cAAYA,EAAE;IAAQ,CAAA,CAC5D;GAPK,GAAAA,EAAE,KAOP,CACP,CACK;EAEF,CAAA,CAAA;;AAET;AAEA,EAAa,cAAc;;;AC/E3B,IAAaC,IAAgE;CAC5E,OAAO;CACP,MAAM;AACP;;;ACFA,SAAgBC,EAAoB,EAAE,gBAAa,WAAQ,cAAW,SAAS/B,KAAyC;CACvH,IAAMC,IAAUC,EAAW4B,GAAmC9B,CAAW;CAEzE,OACC,kBAACrD,GAAD;EACC,kBAAe;EACf,aAAU;EACV,WAAWN,EAAG,oCAAoCwE,CAAS;EAH5D,UAAA,CAKC,kBAAClE,GAAD;GAAO,KAAI;GAAS,WAAU;GAA9B,UAAA,CACC,kBAACiB,GAAD,EAAA,UAAYqC,EAAQ,MAAiB,CAAA,GACrC,kBAAC1C,GAAD,EAAA,UAAkB0C,EAAQ,KAAsB,CAAA,CAC1C;EACP,CAAA,GAAA,kBAAC,OAAD;GAAK,WAAU;GACb,UAAA+B,EAAY,KAAK,MAAM;IACvB,IAAMC,IAAOC,EAAE;IACf,OACC,kBAACvE,GAAD;KAEC,SAAQ;KACR,QAAQ,kBAAC,UAAD;MAAQ,MAAK;MAAS,eAAewE,IAASD,CAAC;KAAI,CAAA;KAC3D,WAAW7F,EACV,2HACA,8CACD;KAPD,UAAA,CASE,CAAC,CAAC4F,KACF,kBAAC3E,GAAD,EAAA,UACC,kBAACL,GAAD;MAAW,MAAMgF;MAAM,MAAK;MAAU,MAAK;MAAK,OAAM;KAAU,CAAA,EACtD,CAAA,GAEZ,kBAACvE,GAAD;MAAa,WAAU;MAAvB,UAAA,CACC,kBAACE,GAAD,EAAA,UAAYsE,EAAE,MAAiB,CAAA,GAC9B,CAAC,CAACA,EAAE,eACJ,kBAAC3E,GAAD,EAAA,UAAkB2E,EAAE,YAA6B,CAAA,CAEtC;KACR,CAAA,CAAA;IAnBA,GAAAA,EAAE,EAmBF;GAER,CAAC;EACG,CAAA,CACC;;AAET;AAEA,EAAoB,cAAc;;;ACtDlC,IAAaE,IAAkD;CAC9D,OAAO;CACP,OAAO;CACP,QAAQ;CACR,OAAO;CACP,MAAM;AACP;;;ACJA,SAAgBC,EAAa,EAC5B,UACA,gBACA,iBACA,SACA,cACA,cACA,SAASrC,KACY;CACrB,IAAMC,IAAUC,EAAWkC,GAA4BpC,CAAW,GAC5DsC,IAAQC,IAAcC,GACtBjB,IAAMkB,IAAY,KAAK,IAAI,KAAK,KAAK,MAAOH,IAAQG,IAAa,GAAG,CAAC,IAAI;CAE/E,OACC,kBAAC9F,GAAD;EACC,kBAAe;EACf,aAAU;EACV,WAAWN,EAAG,6BAA6BwE,CAAS;EAHrD,UAAA;GAKE,CAAC,CAACc,KACF,kBAAC,OAAD;IAAK,WAAU;IACd,UAAA,kBAACzE,GAAD;KAAO,MAAK;KAAa,UAAAyE;IAAa,CAAA;GAClC,CAAA;GAEN,kBAACjF,GAAD;IAAc,gBAAe;IAAK,KAAI;IACpC,UAAA;KACA;MAAE,OAAOuD,EAAQ;MAAO,OAAOsC;KAAY;KAC3C;MAAE,OAAOtC,EAAQ;MAAQ,OAAOuC;KAAa;KAC7C;MAAE,OAAOvC,EAAQ;MAAO,OAAOqC;KAAM;IACtC,CAAC,CAAC,KAAK,MAIN,kBAAC,OAAD;KAAsB,WAAU;KAC/B,UAAA,kBAAC3F,GAAD;MAAO,KAAI;MAAX,UAAA,CACC,kBAACJ,GAAD,EAAA,UAAemG,EAAK,MAAoB,CAAA,GACxC,kBAACxG,GAAD;OAAa,OAAOwG,EAAK;OAAO,QAAO;OAAW,OAAM;MAAQ,CAAA,CAC1D;;IACH,GALKA,EAAK,KAKV,CACL;GACY,CAAA;GACb,CAAC,CAACD,KACF,kBAAC,OAAD;IAAK,WAAU;IAAf,UAAA,CACC,kBAAC5E,GAAD;KACC,OACC,kBAAC,QAAD;MAAM,WAAU;MAAhB,UAAA;OACC,kBAAC3B,GAAD;QAAa,OAAOoG;QAAO,MAAK;QAAK,OAAM;OAAQ,CAAA;OACnD,kBAAChG,GAAD;QAAM,KAAI;QAAO,MAAK;QAAK,eAAA;QAAY,UAAA;OAAO,CAAA;OAC9C,kBAACJ,GAAD;QAAa,OAAOuG;QAAW,MAAK;QAAK,OAAM;OAAQ,CAAA;MAClD;;KAEP,OAAO,kBAAC1F,GAAD;MAAS,OAAOwE;MAAK,QAAA;MAAO,MAAK;MAAK,QAAO;MAAW,OAAM;KAAS,CAAA;KAC9E,MAAA;KACA,gBAAe;IACf,CAAA,GACD,kBAAC,OAAD;KAAK,WAAU;KACd,UAAA,kBAAC,OAAD;MAAK,WAAU;MAAiC,OAAO,EAAE,OAAO,GAAGA,EAAI,GAAG;KAAI,CAAA;IAC1E,CAAA,CACD;;GAEL,CAAC,CAACoB,KACF,kBAAC9E,GAAD;IACC,WAAU;IACV,OAAO,kBAACvB,GAAD;KAAM,KAAI;KAAO,MAAK;KAAK,QAAO;KAAS,YAAW;KAAS,UAAA2D,EAAQ;IAAW,CAAA;IACzF,OAAO0C;IACP,MAAA;IACA,gBAAe;GACf,CAAA;EAEI;;AAET;AAEA,EAAa,cAAc;;;AC1E3B,IAAaC,IAA8C;CAC1D,QAAQ;CACR,cAAc;CACd,gBAAgB;CAChB,oBAAoB;CACpB,QAAQ;CACR,QAAQ;AACT;;;ACEA,SAAgBC,EAAW,EAC1B,UACA,WACA,oBACA,kBAAe,IACf,eAAY,IACZ,cACA,SAAS7C,KACU;CACnB,IAAMC,IAAUC,EAAW0C,GAA0B5C,CAAW,GAC1D,CAAC8C,GAAcC,KAAmBC,EAAyB,IAAI,GAC/D,CAACC,GAASC,KAAcF,EAAS,EAAE,GACnCG,IAAOC,KAASN,GAEhBO,KAAQ,MAAyB;EACtC,IAAMC,IAAWH,MAASI,IAAO,OAAOA;EAExC,AADIH,MAAU,KAAA,KAAWL,EAAgBO,CAAQ,GACjDE,IAASF,CAAQ;CAClB;CAkBA,OAhBIG,IAEF,kBAAC,OAAD;EACC,WAAWpH,EAAG,0BACb,8FACAwE,CACD;EAJD,UAAA,CAMC,kBAAC6C,GAAD,EAAU,WAAU,4BAA6B,CAAA,GACjD,kBAACpH,GAAD;GAAM,MAAK;GAAK,MAAK;GAAU,QAAO;GACpC,UAAA2D,EAAQ;EACJ,CAAA,CACF;MAKN,kBAAC,OAAD;EAAK,WAAW5D,EAAG,4DAA4DwE,CAAS;EAAxF,UAAA,CACC,kBAAC,OAAD;GAAK,WAAU;GAAf,UAAA;IACC,kBAACvE,GAAD;KAAM,MAAK;KAAK,MAAK;KAAa,UAAA2D,EAAQ;IAAa,CAAA;IACvD,kBAACxD,GAAD;KACC,MAAK;KACL,MAAK;KACL,aAAa0G,MAAS,OAAO,UAAU;KACvC,MAAK;KAAK,UAAA;KACV,cAAYlD,EAAQ;KACpB,gBAAckD,MAAS;KACvB,eAAeE,EAAK,IAAI;KACxB,WAAWhH,EAAG8G,MAAS,QAAQ,gDAAgD;KAE/E,UAAA,kBAACO,GAAD,EAAU,WAAU,eAAgB,CAAA;IAC7B,CAAA;IACR,kBAACjH,GAAD;KACC,MAAK;KACL,MAAK;KACL,aAAa0G,MAAS,SAAS,UAAU;KACzC,MAAK;KAAK,UAAA;KACV,cAAYlD,EAAQ;KACpB,gBAAckD,MAAS;KACvB,eAAeE,EAAK,MAAM;KAC1B,WAAWhH,EAAG8G,MAAS,UAAU,4DAA4D;KAE7F,UAAA,kBAACQ,IAAD,EAAY,WAAU,eAAgB,CAAA;IAC/B,CAAA;GACJ;EAEJ,CAAA,GAAA,CAAC,CAACC,KAAgB,CAAC,CAACT,KACpB,kBAACxG,GAAD;GAAO,KAAI;GAAX,UAAA,CACC,kBAACS,GAAD;IACC,OAAO6F;IACP,WAAW,MAAMC,EAAY,EAAE,OAA+B,KAAK;IACnE,aAAajD,EAAQ;IACrB,SAAS;GACT,CAAA,GACD,kBAACtD,GAAD;IAAO,WAAU;IAAa,KAAI;IAAO,SAAQ;IAChD,UAAA,kBAACF,GAAD;KACC,MAAK;KACL,eAAe;MAEd,AADAoH,IAAkBZ,GAASE,CAAI,GAC/BD,EAAW,EAAE;KACd;KACA,UAAU,CAACD,EAAQ,KAAK;KAEvB,UAAAhD,EAAQ;IACF,CAAA;GACF,CAAA,CACD;EAEJ,CAAA,CAAA;;AAEP;AAEA,EAAW,cAAc;;;ACxFzB,IAAa6D,IAA8C;CAC1D,OAAO;CACP,cAAc,MAAeC,MAAM,IAAI,aAAa,GAAGA,EAAE;CACzD,cAAc,MAAeA,MAAM,IAAI,YAAY,IAAIA,EAAE;CACzD,QAAQ;CACR,UAAU;CACV,OAAO;CACP,WAAW;AACZ;;;ACHA,SAAgBC,EAAW,EAC1B,YACA,UAAUC,GACV,qBAAkB,IAClB,qBACA,sBAAmB,GACnB,cACA,SAASjE,KACU;CAGnB,IAAMC,IAAUiE,EAAaJ,GAA0B9D,CAAW,GAC5D,CAACmE,GAAkBC,KAAuBpB,EAASqB,CAAe,GAClEC,IAAWL,KAAgBE,GAC3BI,KAAe,MAAkB;EAEtC,AADIN,MAAiB,KAAA,KAAWG,EAAoBb,CAAI,GACxDiB,IAAmBjB,CAAI;CACxB,GACMkB,IAAUH,IAAWI,IAAUA,EAAQ,MAAM,GAAG,KAAK,IAAI,GAAGC,CAAgB,CAAC,GAC7EC,IAASF,EAAQ,SAASD,EAAQ;CAExC,OACC,kBAAC,OAAD;EACC,WAAWpI,EACV,0BACA,qFACAwE,CACD;EAEA,UAAA,kBAAClE,GAAD;GAAO,KAAI;GAAX,UAAA,CACC,kBAACF,GAAD;IACC,MAAK;IACL,MAAK;IACL,aAAY;IACZ,MAAK;IACL,eAAe8H,EAAY,CAACD,CAAQ;IACpC,WAAWjI,EACV,4FACA,+DACD;IACA,iBAAeiI;IACf,cAAYA,IAAWrE,EAAQ,WAAWA,EAAQ;IAXnD,UAAA;KAaC,kBAAC4E,IAAD,EAAO,WAAU,eAAgB,CAAA;KACjC,kBAACvI,GAAD;MAAM,QAAO;MAAb,UAAA;OACE2D,EAAQ;OAAM;OAAIA,EAAQ,YAAYyE,EAAQ,MAAM;MAChD;;KACMI,EAAXR,IAAYS,KAA2CC,IAA5C,EAAa,WAAU,eAAgB,CAA4C;IACxF;GAEN,CAAA,IAAAV,KAAYK,IAAmB,MAChC,kBAAClH,GAAD,EAAA,UAAA,CACEgH,EAAQ,KAAK,GAAG,MAChB,kBAACQ,IAAD;IAAwB,QAAQ/C;IAAG,OAAOrC,IAAI;IAAY;GAAU,GAAlDqC,EAAE,EAAgD,CACpE,GACA,CAACoC,KAAYM,IAAS,KACtB,kBAACtI,GAAD;IAAM,MAAK;IAAK,MAAK;IACnB,UAAA2D,EAAQ,YAAY2E,CAAM;GACtB,CAAA,CAEG,EAAA,CAAA,CAEN;;CACH,CAAA;AAEP;AAEA,EAAW,cAAc;AAEzB,SAASK,GAAY,EACpB,WACA,UACA,cAKE;CACF,IAAMC,IACL,OAAOC,EAAO,aAAc,WAAW,KAAK,MAAM,KAAK,IAAI,GAAG,KAAK,IAAI,GAAGA,EAAO,SAAS,CAAC,IAAI,GAAG,IAAI,MAEjGC,IAAUD,EAAO,MAAM,MAAM,QAC7BE,IAAaF,EAAO,MACvB;EACA,MAAMA,EAAO;EACb,QAAQ;EACR,KAAK;CACN,IACC,CAAC;CAEJ,OACC,kBAACxH,GAAD;EAAM,SAAQ;EAAU,MAAK;EAAK,WAAU;EAA5C,UAAA;GACC,kBAACL,GAAD,EAAA,UACC,kBAACnB,GAAD;IACC,OAAOmJ;IACP,MAAK;IACL,QAAO;IACP,MAAK;IACL,OAAM;IACN,WAAU;GACV,CAAA,EACS,CAAA;GACX,kBAAC5H,GAAD,EAAA,UAAA;IACC,kBAACE,GAAD;KAAW,WAAU;KACpB,UAAA,kBAACwH,GAAD;MACC,GAAIC;MACJ,WAAWhJ,EAAG,YAAY8I,EAAO,OAAO,2CAA2C;MAFpF,UAAA,CAIEA,EAAO,OACP,CAAC,CAACA,EAAO,OAAO,kBAACI,GAAD,EAAc,WAAU,0CAA2C,CAAA,CAC5E;;IACC,CAAA;IACV,CAAC,CAACJ,EAAO,WAAW,kBAAC5H,GAAD;KAAiB,OAAO;KAAI,UAAA4H,EAAO;IAAyB,CAAA;KAC/EA,EAAO,aAAaA,EAAO,gBAC5B,kBAAC9H,GAAD;KAAY,WAAU;KAAtB,UAAA;MACE,CAAC,CAAC8H,EAAO,aACT,kBAAC7I,GAAD;OAAM,MAAK;OAAK,MAAK;OACnB,UAAA6I,EAAO;MACH,CAAA;MAEN,CAAC,CAACA,EAAO,aAAa,CAAC,CAACA,EAAO,eAC/B,kBAAC7I,GAAD;OAAM,MAAK;OAAK,MAAK;OAAW,UAAA;MAE1B,CAAA;MAEN,CAAC,CAAC6I,EAAO,eACT,kBAACtI,GAAD;OAAgB,MAAK;OAAK,WAAU;OAClC,UAAAsI,EAAO;MACO,CAAA;KAEN;;GAED,EAAA,CAAA;GACZD,MAAiB,QACjB,kBAAC1H,GAAD;IAAa,WAAU;IAAvB,UAAA,CACC,kBAACT,GAAD;KAAS,OAAOmI;KAAc,QAAA;KAAO,MAAK;KAAK,MAAK;KAAY,QAAO;IAAU,CAAA,GACjF,kBAAC,OAAD;KACC,WAAU;KACV,MAAK;KACL,cAAYjF,EAAQ;KACpB,iBAAe;KACf,iBAAe;KACf,iBAAeiF;KAEf,UAAA,kBAAC,OAAD;MAAK,WAAU;MAAiC,OAAO,EAAE,OAAO,GAAGA,EAAa,GAAG;KAAI,CAAA;IACnF,CAAA,CACO;;EAET;;AAER;;;AC5KA,IAAaM,IAA0D;CACtE,cAAc;CACd,UAAU;AACX;;;ACEA,SAASC,GAAY,GAAkB,GAAiD;CACvF,OAAOC,EAAS,QAAQ,yBAAyB,GAAG,MAAM;EACzD,IAAMC,IAAIC,EAAOC;EACjB,OAAOF,MAAM,KAAA,IAAYG,IAAI,OAAOH,CAAC;CACtC,CAAC;AACF;AAEA,SAAgBI,EAAiB,EAChC,UACA,UACA,QACA,aACA,cACA,SAAS/F,KACgB;CACzB,IAAMC,IAAUiE,EAAasB,GAAgCxF,CAAW,GAClEgG,IAAYP,GAAYxF,EAAQ,UAAU;EAC/C,GAAGqF;EACH,OAAOW,KAAS;CACjB,CAAC,GACKC,IAAUD,IAAQ,GAAGhG,EAAQ,aAAa,GAAGqF,EAAM,IAAIW,MAAU,GAAGhG,EAAQ,aAAa,GAAGqF,KAI5Fa,IAAU9J,EACf,iJACA,6BACA,kCACA,iDACA,kCACA,2EACAwE,CACD;CAqCA,OAnCIuF,IAEF,kBAAC5J,GAAD;EACC,MAAM4J;EACN,MAAK;EACL,WAAW;EACX,QAAO;EACP,KAAI;EACJ,OAAOF;EACP,cAAYF;EACZ,WAAW3J,EAAG,iCAAiC8J,CAAO;EAEtD,UAAA,kBAAC7J,GAAD;GAAM,KAAI;GAAO,MAAK;GAAK,QAAO;GAAS,WAAU;GACnD,UAAAgJ;EACI,CAAA;CACG,CAAA,IAIRe,IAEF,kBAAC,UAAD;EACC,MAAK;EACL,SAASA;EACT,OAAOH;EACP,cAAYF;EACZ,WAAW3J,EAAG,iCAAiC8J,CAAO;EAEtD,UAAA,kBAAC7J,GAAD;GAAM,KAAI;GAAO,MAAK;GAAK,QAAO;GAAS,WAAU;GACnD,UAAAgJ;EACI,CAAA;CACC,CAAA,IAKT,kBAAC,QAAD;EACC,OAAOY;EACP,cAAYF;EACZ,WAAW3J,EAAG,iCAAiC8J,CAAO;EAEtD,UAAA,kBAAC7J,GAAD;GAAM,KAAI;GAAO,MAAK;GAAK,QAAO;GAAS,WAAU;GACnD,UAAAgJ;EACI,CAAA;CACD,CAAA;AAER;AAEA,EAAiB,cAAc;;;AClF/B,IAAagB,IAAoD;CAChE,cAAc;CACd,cAAc;CACd,gBAAgB;CAChB,cAAc;CACd,eAAe;CACf,gBAAgB;CAChB,iBAAiB;CACjB,sBAAsB;AACvB;;;ACNA,SAAgBC,EAAc,EAC7B,SACA,YACA,gBACA,YACA,gBACA,aACA,eACA,oBACA,aACA,aACA,cACA,SAASvG,KACa;CACtB,IAAMC,IAAUC,EAAWoG,GAA6BtG,CAAW,GAC7DwG,IACL,kBAAApK,GAAA,EAAA,UAAA,CACC,kBAAC,QAAD;EACC,eAAA;EACA,WAAU;EAEV,UAAA,kBAACqK,GAAD,EAAS,WAAU,YAAa,CAAA;CAC3B,CAAA,GACN,kBAAC,OAAD;EAAK,WAAU;EAAf,UAAA;GACC,kBAAC9J,GAAD;IAAO,KAAI;IAAX,UAAA,CACA,kBAACA,GAAD;KAAO,WAAU;KAAa,KAAI;KAAK,OAAM;KAA7C,UAAA,CACC,kBAACG,GAAD;MAAW,QAAO;MAAW,WAAU;MACrC,UAAA4J;KACS,CAAA,GACV,CAAC,CAACC,KACF,kBAACzJ,GAAD;MAAO,MAAK;MACX,UAAA,kBAACJ,GAAD;OAAW,MAAK;OAAK,WAAU;OAA/B,UAAA,CAA8C,KAAE6J,EAAQ,QAAQ,MAAM,EAAE,CAAa;;KAC/E,CAAA,CAEF;IACN,CAAA,GAAA,CAAC,CAACC,KACF,kBAACtK,GAAD;KAAM,MAAK;KAAK,MAAK;KAAY,WAAU;KACzC,UAAAsK;IACI,CAAA,CAEA;;IAELC,KAAWC,KAAeC,MAAoB,KAAA,MAC/C,kBAAC,OAAD;IAAK,WAAU;IAAf,UAAA;KACE,CAAC,CAACF,KAAW,kBAACG,GAAD;MAAU,OAAO/G,EAAQ;MAAc,OAAO4G;KAAU,CAAA;KACrE,CAAC,CAACC,KAAe,kBAACE,GAAD;MAAU,OAAO/G,EAAQ;MAAgB,OAAO6G;KAAc,CAAA;KAC/EC,MAAoB,KAAA,KACpB,kBAACC,GAAD;MAAU,OAAO/G,EAAQ;MAAsB,OAAO,OAAO8G,CAAe;KAAI,CAAA;IAE7E;;GAGL,CAAC,CAACE,GAAU,UACZ,kBAAC,OAAD;IAAK,WAAU;IACb,UAAAA,EAAS,MAAM,GAAG,CAAC,CAAC,CAAC,KAAK,MAC1B,kBAAC/J,GAAD;KAAqB,MAAK;KACxB,UAAAgK;IACK,GAFKA,CAEL,CACP;GACG,CAAA;EAEF;CACJ,CAAA,CAAA,EAAA,CAAA,GAEGC,IAAgB;CAEtB,OACC,kBAAC,OAAD;EACC,WAAW9K,EACV,0GACAwE,CACD;EAJD,UAAA,CAMEwF,IACA,kBAAC5J,GAAD;GACC,MAAK;GACL,MAAK;GACL,aAAY;GACZ,SAAS4J;GACT,WAAWhK,EACV8K,GACA,yFACD;GAEC,UAAAX;EACM,CAAA,IAER,kBAAC,OAAD;GAAK,WAAWW;GAAgB,UAAAX;EAAiB,CAAA,IAGhDY,KAAYC,MACb,kBAAC,OAAD;GAAK,WAAU;GACd,UAAA,kBAAC1K,GAAD;IAAO,WAAU;IAAa,OAAM;IAAS,KAAI;IAAjD,UAAA;KACE,CAAC,CAACyK,KACF,kBAAC5K,GAAD;MACC,MAAM4K;MACN,MAAK;MACL,WAAW;MACX,QAAO;MACP,KAAI;MACJ,UAAU,MAAM,EAAE,gBAAgB;MAClC,cAAYnH,EAAQ;MACpB,WAAU;MARX,UAAA;OAUC,kBAACqH,IAAD,EAAO,WAAU,eAAgB,CAAA;OACjC,kBAAChL,GAAD;QAAM,KAAI;QAAO,QAAO;QACtB,UAAA2D,EAAQ;OACJ,CAAA;OACN,kBAACsF,GAAD,EAAc,WAAU,eAAgB,CAAA;MAC/B;;KAEV,CAAC,CAAC6B,KAAY,CAAC,CAACC,KAChB,kBAAC/K,GAAD;MAAM,KAAI;MAAO,MAAK;MAAK,MAAK;MAAY,WAAU;MAAa,eAAA;MAAY,UAAA;KAEzE,CAAA;KAEN,CAAC,CAAC+K,KACF,kBAAC7K,GAAD;MACC,MAAM6K;MACN,MAAK;MACL,WAAW;MACX,QAAO;MACP,KAAI;MACJ,UAAU,MAAM,EAAE,gBAAgB;MAClC,cAAYpH,EAAQ;MACpB,WAAU;MARX,UAAA;OAUC,kBAACsH,IAAD,EAAO,WAAU,eAAgB,CAAA;OACjC,kBAACjL,GAAD;QAAM,KAAI;QAAO,QAAO;QACtB,UAAA2D,EAAQ;OACJ,CAAA;OACN,kBAACsF,GAAD,EAAc,WAAU,eAAgB,CAAA;MAC/B;;IAEL;;EACH,CAAA,CAEF;;AAEP;AAEA,EAAc,cAAc;AAE5B,SAASyB,EAAS,EAAE,UAAO,YAA2C;CACrE,OACC,kBAAC,OAAD;EAAK,WAAU;EAAf,UAAA,CACC,kBAAC1K,GAAD;GAAM,MAAK;GAAK,MAAK;GACnB,UAAAwD;EACI,CAAA,GACN,kBAACjD,GAAD;GAAgB,MAAK;GAAK,QAAO;GAAS,WAAU;GAClD,UAAAuG;EACc,CAAA,CACZ;;AAEP;;;ACtIA,IAAaoE,IAA8C;CAC1D,UAAU;CACV,YAAY;CACZ,cAAc;CACd,cAAc;EACb,OAAO;EACP,UAAU;EACV,SAAS;EACT,SAAS;CACV;AACD,GCpCMC,KAAc;CAAE,OAAO;CAAW,UAAU;CAAW,SAAS;CAAe,SAAS;AAAO,GAC/FC,KAA4D;CACjE,OAAO;CAAgB,UAAU;CAAuB,SAAS;CAAoB,SAAS;AAC/F;AACA,SAASC,GAAa,GAA0B;CAC/C,IAAMC,IAAMlB,EAAK,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,YAAY,KAAK;CAGpD,OAFI;EAAC;EAAM;EAAO;EAAM;EAAO;EAAO;EAAO;EAAQ;EAAO;EAAQ;EAAQ;EAAM;EAAM;EAAM;CAAI,CAAC,CAAC,SAASkB,CAAG,IAAUC,KACtH;EAAC;EAAM;EAAO;CAAK,CAAC,CAAC,SAASD,CAAG,IAAUE,KACxCC;AACR;AACA,SAASC,EAAiB,GAAkC,IAAQ,GAAa;CAChF,OAAOC,EAAM,SAAQ,MAAQ,CAC5B,GAAIC,EAAK,SAAS,gBAAgBA,EAAK,mBAAmBC,IAAQ,KAAK,CAACD,EAAK,EAAE,IAAI,CAAC,GACpF,GAAGF,EAAiBE,EAAK,YAAY,CAAC,GAAGC,IAAQ,CAAC,CACnD,CAAC;AACF;AACA,SAAgBC,EAAW,EAC1B,UAAO,eAAY,aAAU,sBAAmB,IAAO,WAAQ,aAAU,WAAW,aACpF,gBAAa,uBAAoB,wBAAqB,cAAW,SAASpI,GAAa,GAAGqI,KACvE;CACnB,IAAMpI,IAAUC,EAAWsH,GAA0BxH,CAAW,GAC1D,CAACsI,GAAeC,KAAoBvF,QAAewF,KAAsBR,EAAiBC,CAAK,CAAC,GAChG3D,IAAWmE,KAAeH,GAC1BI,IAAQC,SAAc;EAC3B,SAASC,EAAI,GAA8D;GAC1E,OAAOX,EAAM,KAAI,MAAQ;IACxB,IAAMY,IAAYX,EAAK,SAAS,aAC1BjG,IAAOiG,EAAK,SAASW,IAAYvE,EAAS,SAAS4D,EAAK,EAAE,IAAIY,KAAaC,KAASpB,GAAaO,EAAK,IAAI;IAChH,OAAO;KACN,OAAOA,EAAK;KAAI,OAAOA,EAAK;KAAM,MAAMA;KAAM,UAAUA,EAAK;KAC7D,aAAaW;KAAW,UAAUA,IAAYD,EAAIV,EAAK,YAAY,CAAC,CAAC,IAAI,KAAA;KACzE,MAAM,kBAACjG,GAAD;MAAM,eAAY;MAAO,WAAW5F,EAAG,aAAa6L,EAAK,UAAUR,GAAkBQ,EAAK,OAAO;KAAI,CAAA;KAC3G,UAAU,kBAACvL,GAAD;MAAO,WAAU;MAAa,KAAI;MAAK,OAAM;MAAS,WAAU;MAAhE,UAAA,CACRuL,EAAK,UAAU,CAACc,KAAoB,kBAAC9L,GAAD;OAAO,MAAMuK,GAAYS,EAAK;OAAS,MAAK;OAAK,OAAOA,EAAK;OAAS,UAAAjI,EAAQ,aAAaiI,EAAK;MAAe,CAAA,GACnJA,EAAK,YAAY,QAAQ,kBAACrL,GAAD;OAAgB,MAAK;OAAK,WAAU;OAAgB,UAAAqL,EAAK;MAAyB,CAAA,CACtG;;IACR;GACD,CAAC;EACF;EACA,OAAOU,EAAIX,CAAK;CACjB,GAAG;EAACA;EAAO3D;EAAU0E;EAAkB/I,EAAQ;CAAY,CAAC;CAC5D,OAAO,kBAACZ,IAAD;EAAM,GAAIgJ;EAAO,cAAYA,EAAM,iBAAiBpI,EAAQ;EAAiB;EAAO,gBAAgBgJ,MAAe,KAAA,IAAY,CAAC,IAAI,CAACA,CAAU;EACrJ,gBAAgB3E;EAAU,kBAAiB;EAAkB;EAAmB;EAAkB;EAClG,SAAS;GAAE,SAAQ,MAAS,GAAGrE,EAAQ,WAAW,IAAIH;GAAS,WAAU,MAAS,GAAGG,EAAQ,aAAa,IAAIH;EAAQ;EACtH,yBAAyB,GAAQ,MAAS;GAEzC,AADI2I,MAAgB,KAAA,KAAWF,EAAiBW,CAAM,GACtDC,IAAsBD,GAAQhB,EAAK,IAAK;EACzC;EACA,yBAAyB,GAAS,MAAS;GAAE,AAAIA,EAAK,MAAM,SAAS,UAAQ7B,IAAW6B,EAAK,IAAI;EAAG;EACpG,cAAa,MAAQ,kBAACpL,GAAD;GAAW,MAAK;GAAU,QAAO;GAAU,WAAWT,EAAG,iDAAiD6L,EAAK,MAAM,WAAW,aAAa,cAAc;GAAI,UAAAA,EAAK;EAAiB,CAAA;EAC1M,WAAW7L,EAAG,2BAA2BwE,CAAS;CAAI,CAAA;AACxD;AACA,EAAW,cAAc"}
@@ -1,3 +1,3 @@
1
1
  "use client";
2
- import { n as e, t } from "../../usage-card-DnmnJ58D.js";
2
+ import { n as e, t } from "../../usage-card-VyJLUwRr.js";
3
3
  export { t as UsageCard, e as defaultUsageCardStrings };