@lostgradient/cinder 0.4.0 → 0.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1086) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/components.json +2 -2
  3. package/dist/components/_sortable-item.svelte.d.ts +1 -1
  4. package/dist/components/autocomplete/index.js +76 -63
  5. package/dist/components/avatar-group/index.js +96 -16
  6. package/dist/components/chat/index.js +294 -142
  7. package/dist/components/chat-conversation-header/index.js +69 -3
  8. package/dist/components/combobox/combobox.schema.js +5 -1
  9. package/dist/components/combobox/combobox.types.d.ts +2 -0
  10. package/dist/components/combobox/index.js +108 -47
  11. package/dist/components/command-menu/index.js +8 -4
  12. package/dist/components/command-palette/index.js +8 -4
  13. package/dist/components/context-menu/index.js +69 -3
  14. package/dist/components/data-table/data-table.css +20 -0
  15. package/dist/components/data-table/data-table.schema.js +30 -1
  16. package/dist/components/data-table/data-table.svelte.d.ts +4 -4
  17. package/dist/components/data-table/data-table.types.d.ts +26 -0
  18. package/dist/components/data-table/index.d.ts +1 -1
  19. package/dist/components/data-table/index.js +708 -303
  20. package/dist/components/diff-viewer/index.js +75 -9
  21. package/dist/components/dropdown/index.js +69 -3
  22. package/dist/components/dropdown-item/dropdown-item.schema.js +4 -4
  23. package/dist/components/dropdown-item/dropdown-item.types.d.ts +3 -3
  24. package/dist/components/dropdown-item/index.js +2 -2
  25. package/dist/components/dropdown-menu/index.js +68 -2
  26. package/dist/components/experimental/json-viewer/index.d.ts +3 -1
  27. package/dist/components/experimental/json-viewer/index.js +396 -3
  28. package/dist/components/experimental/message/index.d.ts +3 -1
  29. package/dist/components/experimental/message/index.js +81 -3
  30. package/dist/components/hover-card/index.js +67 -8
  31. package/dist/components/json-schema-editor/diff-view.svelte.d.ts +1 -1
  32. package/dist/components/json-schema-editor/form-view.svelte.d.ts +1 -1
  33. package/dist/components/json-schema-editor/index.js +256 -110
  34. package/dist/components/json-schema-editor/json-schema-editor-state.svelte.d.ts +2 -12
  35. package/dist/components/json-schema-editor/json-schema-editor-state.types.d.ts +13 -0
  36. package/dist/components/json-schema-editor/json-schema-toolbar.svelte.d.ts +1 -1
  37. package/dist/components/json-schema-editor/json-view.svelte.d.ts +1 -1
  38. package/dist/components/markdown-editor/index.js +311 -159
  39. package/dist/components/menu-bar/index.d.ts +3 -1
  40. package/dist/components/menu-bar/index.js +3702 -3
  41. package/dist/components/review-editor/index.js +404 -252
  42. package/dist/components/segment/index.js +8 -4
  43. package/dist/components/segmented-control/index.js +71 -5
  44. package/dist/components/segmented-control/segmented-control.schema.js +5 -1
  45. package/dist/components/segmented-control/segmented-control.types.d.ts +2 -0
  46. package/dist/components/sortable-list/sortable-list.types.d.ts +4 -4
  47. package/dist/components/tag-input/index.d.ts +3 -1
  48. package/dist/components/tag-input/index.js +566 -3
  49. package/dist/components/tooltip/index.js +96 -16
  50. package/dist/components/tree/index.js +66 -44
  51. package/dist/index.d.ts +5 -5
  52. package/dist/server/components/access-gate/access-gate.schema.js +2 -4
  53. package/dist/server/components/access-gate/access-gate.variables.js +2 -4
  54. package/dist/server/components/access-gate/index.js +21 -1559
  55. package/dist/server/components/accordion/accordion.schema.js +2 -4
  56. package/dist/server/components/accordion/accordion.variables.js +2 -4
  57. package/dist/server/components/accordion/index.js +10 -122
  58. package/dist/server/components/accordion-item/accordion-item.schema.js +2 -4
  59. package/dist/server/components/accordion-item/accordion-item.variables.js +2 -4
  60. package/dist/server/components/accordion-item/index.js +9 -46
  61. package/dist/server/components/alert/alert.schema.js +2 -4
  62. package/dist/server/components/alert/alert.variables.js +2 -4
  63. package/dist/server/components/alert/index.js +9 -108
  64. package/dist/server/components/alert-dialog/alert-dialog.schema.js +2 -4
  65. package/dist/server/components/alert-dialog/alert-dialog.variables.js +2 -4
  66. package/dist/server/components/alert-dialog/index.js +16 -785
  67. package/dist/server/components/approval-card/approval-card.schema.js +2 -4
  68. package/dist/server/components/approval-card/approval-card.variables.js +2 -4
  69. package/dist/server/components/approval-card/index.js +36 -2494
  70. package/dist/server/components/area-chart/area-chart.schema.js +2 -4
  71. package/dist/server/components/area-chart/area-chart.variables.js +2 -4
  72. package/dist/server/components/area-chart/index.js +9 -1138
  73. package/dist/server/components/aspect-ratio/aspect-ratio.schema.js +2 -4
  74. package/dist/server/components/aspect-ratio/aspect-ratio.variables.js +2 -4
  75. package/dist/server/components/aspect-ratio/index.js +7 -42
  76. package/dist/server/components/autocomplete/autocomplete.schema.js +2 -4
  77. package/dist/server/components/autocomplete/autocomplete.variables.js +2 -4
  78. package/dist/server/components/autocomplete/index.js +19 -854
  79. package/dist/server/components/avatar/avatar.schema.js +2 -4
  80. package/dist/server/components/avatar/avatar.variables.js +2 -4
  81. package/dist/server/components/avatar/index.js +10 -94
  82. package/dist/server/components/avatar-group/avatar-group.schema.js +2 -4
  83. package/dist/server/components/avatar-group/avatar-group.variables.js +2 -4
  84. package/dist/server/components/avatar-group/index.js +16 -481
  85. package/dist/server/components/backdrop/backdrop.schema.js +2 -4
  86. package/dist/server/components/backdrop/backdrop.variables.js +2 -4
  87. package/dist/server/components/backdrop/index.js +9 -134
  88. package/dist/server/components/badge/badge.schema.js +2 -4
  89. package/dist/server/components/badge/badge.variables.js +2 -4
  90. package/dist/server/components/badge/index.js +9 -107
  91. package/dist/server/components/banner/banner.schema.js +2 -4
  92. package/dist/server/components/banner/banner.variables.js +2 -4
  93. package/dist/server/components/banner/index.js +7 -107
  94. package/dist/server/components/bar-chart/bar-chart.schema.js +2 -4
  95. package/dist/server/components/bar-chart/bar-chart.variables.js +2 -4
  96. package/dist/server/components/bar-chart/index.js +9 -1135
  97. package/dist/server/components/breadcrumbs/breadcrumbs.schema.js +2 -4
  98. package/dist/server/components/breadcrumbs/breadcrumbs.variables.js +2 -4
  99. package/dist/server/components/breadcrumbs/index.js +7 -52
  100. package/dist/server/components/button/button.schema.js +2 -4
  101. package/dist/server/components/button/button.variables.js +2 -4
  102. package/dist/server/components/button/index.js +11 -167
  103. package/dist/server/components/button-group/button-group.schema.js +2 -4
  104. package/dist/server/components/button-group/button-group.variables.js +2 -4
  105. package/dist/server/components/button-group/index.js +12 -132
  106. package/dist/server/components/callout/callout.schema.js +2 -4
  107. package/dist/server/components/callout/callout.variables.js +2 -4
  108. package/dist/server/components/callout/index.js +7 -67
  109. package/dist/server/components/capability-gate/capability-gate.schema.js +2 -4
  110. package/dist/server/components/capability-gate/capability-gate.variables.js +2 -4
  111. package/dist/server/components/capability-gate/index.js +9 -132
  112. package/dist/server/components/card/card.schema.js +2 -4
  113. package/dist/server/components/card/card.variables.js +2 -4
  114. package/dist/server/components/card/index.js +9 -82
  115. package/dist/server/components/chat/chat.schema.js +2 -4
  116. package/dist/server/components/chat/chat.variables.js +2 -4
  117. package/dist/server/components/chat/index.js +96 -8868
  118. package/dist/server/components/chat-conversation-header/chat-conversation-header.schema.js +2 -4
  119. package/dist/server/components/chat-conversation-header/chat-conversation-header.variables.js +2 -4
  120. package/dist/server/components/chat-conversation-header/index.js +36 -1661
  121. package/dist/server/components/chat-conversation-list/chat-conversation-list.schema.js +2 -4
  122. package/dist/server/components/chat-conversation-list/chat-conversation-list.variables.js +2 -4
  123. package/dist/server/components/chat-conversation-list/index.js +12 -348
  124. package/dist/server/components/checkbox/checkbox.schema.js +2 -4
  125. package/dist/server/components/checkbox/checkbox.variables.js +2 -4
  126. package/dist/server/components/checkbox/index.js +15 -192
  127. package/dist/server/components/checkbox-group/checkbox-group.schema.js +2 -4
  128. package/dist/server/components/checkbox-group/checkbox-group.variables.js +2 -4
  129. package/dist/server/components/checkbox-group/index.js +10 -116
  130. package/dist/server/components/chip/chip.schema.js +2 -4
  131. package/dist/server/components/chip/chip.variables.js +2 -4
  132. package/dist/server/components/chip/index.js +9 -136
  133. package/dist/server/components/choice-grid/choice-grid.schema.js +2 -4
  134. package/dist/server/components/choice-grid/choice-grid.variables.js +2 -4
  135. package/dist/server/components/choice-grid/index.js +12 -347
  136. package/dist/server/components/choice-grid-item/choice-grid-item.schema.js +2 -4
  137. package/dist/server/components/choice-grid-item/choice-grid-item.variables.js +2 -4
  138. package/dist/server/components/choice-grid-item/index.js +12 -103
  139. package/dist/server/components/click-away-listener/click-away-listener.schema.js +2 -4
  140. package/dist/server/components/click-away-listener/click-away-listener.variables.js +2 -4
  141. package/dist/server/components/click-away-listener/index.js +7 -37
  142. package/dist/server/components/code-block/code-block.schema.js +2 -4
  143. package/dist/server/components/code-block/code-block.variables.js +2 -4
  144. package/dist/server/components/code-block/index.js +19 -330
  145. package/dist/server/components/collapsible/collapsible.schema.js +2 -4
  146. package/dist/server/components/collapsible/collapsible.variables.js +2 -4
  147. package/dist/server/components/collapsible/index.js +10 -88
  148. package/dist/server/components/color-field/color-field.schema.js +2 -4
  149. package/dist/server/components/color-field/color-field.variables.js +2 -4
  150. package/dist/server/components/color-field/index.js +15 -687
  151. package/dist/server/components/color-picker/color-picker.schema.js +2 -4
  152. package/dist/server/components/color-picker/color-picker.variables.js +2 -4
  153. package/dist/server/components/color-picker/index.js +15 -923
  154. package/dist/server/components/color-swatch-picker/color-swatch-picker.schema.js +2 -4
  155. package/dist/server/components/color-swatch-picker/color-swatch-picker.variables.js +2 -4
  156. package/dist/server/components/color-swatch-picker/index.js +16 -478
  157. package/dist/server/components/combobox/combobox.schema.js +6 -4
  158. package/dist/server/components/combobox/combobox.variables.js +2 -4
  159. package/dist/server/components/combobox/index.js +19 -710
  160. package/dist/server/components/command-item/command-item.schema.js +2 -4
  161. package/dist/server/components/command-item/command-item.variables.js +2 -4
  162. package/dist/server/components/command-item/index.js +8 -121
  163. package/dist/server/components/command-menu/command-menu.schema.js +2 -4
  164. package/dist/server/components/command-menu/command-menu.variables.js +2 -4
  165. package/dist/server/components/command-menu/index.js +16 -552
  166. package/dist/server/components/command-palette/command-palette.schema.js +2 -4
  167. package/dist/server/components/command-palette/command-palette.variables.js +2 -4
  168. package/dist/server/components/command-palette/index.js +12 -402
  169. package/dist/server/components/confirm-dialog/confirm-dialog.schema.js +2 -4
  170. package/dist/server/components/confirm-dialog/confirm-dialog.variables.js +2 -4
  171. package/dist/server/components/confirm-dialog/index.js +16 -785
  172. package/dist/server/components/container/container.schema.js +2 -4
  173. package/dist/server/components/container/container.variables.js +2 -4
  174. package/dist/server/components/container/index.js +7 -44
  175. package/dist/server/components/context-menu/context-menu.schema.js +2 -4
  176. package/dist/server/components/context-menu/context-menu.variables.js +2 -4
  177. package/dist/server/components/context-menu/index.js +26 -1096
  178. package/dist/server/components/context-menu-trigger/context-menu-trigger.schema.js +2 -4
  179. package/dist/server/components/context-menu-trigger/context-menu-trigger.variables.js +2 -4
  180. package/dist/server/components/context-menu-trigger/index.js +10 -162
  181. package/dist/server/components/copy-button/copy-button.schema.js +2 -4
  182. package/dist/server/components/copy-button/copy-button.variables.js +2 -4
  183. package/dist/server/components/copy-button/index.js +16 -255
  184. package/dist/server/components/data-grid/data-grid.schema.js +2 -4
  185. package/dist/server/components/data-grid/data-grid.variables.js +2 -4
  186. package/dist/server/components/data-grid/index.js +11 -2819
  187. package/dist/server/components/data-list/data-list.schema.js +2 -4
  188. package/dist/server/components/data-list/data-list.variables.js +2 -4
  189. package/dist/server/components/data-list/index.js +9 -82
  190. package/dist/server/components/data-table/data-table.schema.js +31 -4
  191. package/dist/server/components/data-table/data-table.variables.js +2 -4
  192. package/dist/server/components/data-table/index.js +23 -721
  193. package/dist/server/components/date-range-field/date-range-field.schema.js +2 -4
  194. package/dist/server/components/date-range-field/date-range-field.variables.js +2 -4
  195. package/dist/server/components/date-range-field/index.js +8 -318
  196. package/dist/server/components/description-list/description-list.schema.js +2 -4
  197. package/dist/server/components/description-list/description-list.variables.js +2 -4
  198. package/dist/server/components/description-list/index.js +11 -72
  199. package/dist/server/components/diff-statistics/diff-statistics.schema.js +2 -4
  200. package/dist/server/components/diff-statistics/diff-statistics.variables.js +2 -4
  201. package/dist/server/components/diff-statistics/index.js +9 -99
  202. package/dist/server/components/diff-viewer/diff-viewer.schema.js +2 -4
  203. package/dist/server/components/diff-viewer/diff-viewer.variables.js +2 -4
  204. package/dist/server/components/diff-viewer/index.js +29 -1946
  205. package/dist/server/components/divider/divider.schema.js +2 -4
  206. package/dist/server/components/divider/divider.variables.js +2 -4
  207. package/dist/server/components/divider/index.js +7 -78
  208. package/dist/server/components/drawer/drawer.schema.js +2 -4
  209. package/dist/server/components/drawer/drawer.variables.js +2 -4
  210. package/dist/server/components/drawer/index.js +17 -761
  211. package/dist/server/components/dropdown/dropdown.schema.js +2 -4
  212. package/dist/server/components/dropdown/dropdown.variables.js +2 -4
  213. package/dist/server/components/dropdown/index.js +27 -1008
  214. package/dist/server/components/dropdown-group/dropdown-group.schema.js +2 -4
  215. package/dist/server/components/dropdown-group/dropdown-group.variables.js +2 -4
  216. package/dist/server/components/dropdown-group/index.js +9 -64
  217. package/dist/server/components/dropdown-item/dropdown-item.schema.js +5 -7
  218. package/dist/server/components/dropdown-item/dropdown-item.variables.js +2 -4
  219. package/dist/server/components/dropdown-item/index.js +10 -128
  220. package/dist/server/components/dropdown-label/dropdown-label.schema.js +2 -4
  221. package/dist/server/components/dropdown-label/dropdown-label.variables.js +2 -4
  222. package/dist/server/components/dropdown-label/index.js +9 -35
  223. package/dist/server/components/dropdown-menu/dropdown-menu.schema.js +2 -4
  224. package/dist/server/components/dropdown-menu/dropdown-menu.variables.js +2 -4
  225. package/dist/server/components/dropdown-menu/index.js +19 -442
  226. package/dist/server/components/dropdown-separator/dropdown-separator.schema.js +2 -4
  227. package/dist/server/components/dropdown-separator/dropdown-separator.variables.js +2 -4
  228. package/dist/server/components/dropdown-separator/index.js +9 -27
  229. package/dist/server/components/dropdown-trigger/dropdown-trigger.schema.js +2 -4
  230. package/dist/server/components/dropdown-trigger/dropdown-trigger.variables.js +2 -4
  231. package/dist/server/components/dropdown-trigger/index.js +10 -81
  232. package/dist/server/components/empty-state/empty-state.schema.js +2 -4
  233. package/dist/server/components/empty-state/empty-state.variables.js +2 -4
  234. package/dist/server/components/empty-state/index.js +9 -72
  235. package/dist/server/components/event-stream-viewer/event-stream-viewer.schema.js +2 -4
  236. package/dist/server/components/event-stream-viewer/event-stream-viewer.variables.js +2 -4
  237. package/dist/server/components/event-stream-viewer/index.js +17 -889
  238. package/dist/server/components/experimental/json-viewer/index.js +14 -17
  239. package/dist/server/components/experimental/message/index.js +13 -17
  240. package/dist/server/components/faceted-filter-bar/faceted-filter-bar.schema.js +2 -4
  241. package/dist/server/components/faceted-filter-bar/faceted-filter-bar.variables.js +2 -4
  242. package/dist/server/components/faceted-filter-bar/index.js +21 -749
  243. package/dist/server/components/feed/feed.schema.js +2 -4
  244. package/dist/server/components/feed/feed.variables.js +2 -4
  245. package/dist/server/components/feed/index.js +9 -96
  246. package/dist/server/components/feed-event/feed-event.schema.js +2 -4
  247. package/dist/server/components/feed-event/feed-event.variables.js +2 -4
  248. package/dist/server/components/feed-event/index.js +9 -69
  249. package/dist/server/components/file-upload/file-upload.schema.js +2 -4
  250. package/dist/server/components/file-upload/file-upload.variables.js +2 -4
  251. package/dist/server/components/file-upload/index.js +14 -459
  252. package/dist/server/components/floating-action-button/floating-action-button.schema.js +2 -4
  253. package/dist/server/components/floating-action-button/floating-action-button.variables.js +2 -4
  254. package/dist/server/components/floating-action-button/index.js +11 -101
  255. package/dist/server/components/focus-trap/focus-trap.schema.js +2 -4
  256. package/dist/server/components/focus-trap/focus-trap.variables.js +2 -4
  257. package/dist/server/components/focus-trap/index.js +10 -249
  258. package/dist/server/components/form-field/form-field.schema.js +2 -4
  259. package/dist/server/components/form-field/form-field.variables.js +2 -4
  260. package/dist/server/components/form-field/index.js +10 -145
  261. package/dist/server/components/form-section/form-section.schema.js +2 -4
  262. package/dist/server/components/form-section/form-section.variables.js +2 -4
  263. package/dist/server/components/form-section/index.js +9 -87
  264. package/dist/server/components/grid/grid.schema.js +2 -4
  265. package/dist/server/components/grid/grid.variables.js +2 -4
  266. package/dist/server/components/grid/index.js +9 -109
  267. package/dist/server/components/grid-item/grid-item.schema.js +2 -4
  268. package/dist/server/components/grid-item/grid-item.variables.js +2 -4
  269. package/dist/server/components/grid-item/index.js +9 -57
  270. package/dist/server/components/grid-list/grid-list.schema.js +2 -4
  271. package/dist/server/components/grid-list/grid-list.variables.js +2 -4
  272. package/dist/server/components/grid-list/index.js +8 -128
  273. package/dist/server/components/grid-list-item/grid-list-item.schema.js +2 -4
  274. package/dist/server/components/grid-list-item/grid-list-item.variables.js +2 -4
  275. package/dist/server/components/grid-list-item/index.js +9 -102
  276. package/dist/server/components/hover-card/hover-card.schema.js +2 -4
  277. package/dist/server/components/hover-card/hover-card.variables.js +2 -4
  278. package/dist/server/components/hover-card/index.js +13 -312
  279. package/dist/server/components/image/image.schema.js +2 -4
  280. package/dist/server/components/image/image.variables.js +2 -4
  281. package/dist/server/components/image/index.js +7 -83
  282. package/dist/server/components/input/index.js +15 -243
  283. package/dist/server/components/input/input.schema.js +2 -4
  284. package/dist/server/components/input/input.variables.js +2 -4
  285. package/dist/server/components/invocation-rule-builder/index.js +7 -367
  286. package/dist/server/components/invocation-rule-builder/invocation-rule-builder.schema.js +2 -4
  287. package/dist/server/components/invocation-rule-builder/invocation-rule-builder.variables.js +2 -4
  288. package/dist/server/components/json-schema-editor/index.js +56 -5676
  289. package/dist/server/components/json-schema-editor/json-schema-editor.schema.js +2 -4
  290. package/dist/server/components/json-schema-editor/json-schema-editor.variables.js +2 -4
  291. package/dist/server/components/json-viewer/index.js +9 -230
  292. package/dist/server/components/json-viewer/json-viewer.schema.js +2 -4
  293. package/dist/server/components/json-viewer/json-viewer.variables.js +2 -4
  294. package/dist/server/components/kanban-board/index.js +11 -1141
  295. package/dist/server/components/kanban-board/kanban-board.schema.js +2 -4
  296. package/dist/server/components/kanban-board/kanban-board.variables.js +2 -4
  297. package/dist/server/components/kbd/index.js +9 -44
  298. package/dist/server/components/kbd/kbd.schema.js +2 -4
  299. package/dist/server/components/kbd/kbd.variables.js +2 -4
  300. package/dist/server/components/keyboard-shortcuts/index.js +8 -113
  301. package/dist/server/components/keyboard-shortcuts/keyboard-shortcuts.schema.js +2 -4
  302. package/dist/server/components/keyboard-shortcuts/keyboard-shortcuts.variables.js +2 -4
  303. package/dist/server/components/label/index.js +7 -46
  304. package/dist/server/components/label/label.schema.js +2 -4
  305. package/dist/server/components/label/label.variables.js +2 -4
  306. package/dist/server/components/line-chart/index.js +9 -1147
  307. package/dist/server/components/line-chart/line-chart.schema.js +2 -4
  308. package/dist/server/components/line-chart/line-chart.variables.js +2 -4
  309. package/dist/server/components/link/index.js +9 -93
  310. package/dist/server/components/link/link.schema.js +2 -4
  311. package/dist/server/components/link/link.variables.js +2 -4
  312. package/dist/server/components/load-more/index.js +9 -141
  313. package/dist/server/components/load-more/load-more.schema.js +2 -4
  314. package/dist/server/components/load-more/load-more.variables.js +2 -4
  315. package/dist/server/components/locale-provider/index.js +8 -50
  316. package/dist/server/components/locale-provider/locale-provider.schema.js +2 -4
  317. package/dist/server/components/locale-provider/locale-provider.variables.js +2 -4
  318. package/dist/server/components/markdown-editor/index.js +44 -3998
  319. package/dist/server/components/markdown-editor/markdown-editor.schema.js +2 -4
  320. package/dist/server/components/markdown-editor/markdown-editor.variables.js +2 -4
  321. package/dist/server/components/masonry/index.js +7 -43
  322. package/dist/server/components/masonry/masonry.schema.js +2 -4
  323. package/dist/server/components/masonry/masonry.variables.js +2 -4
  324. package/dist/server/components/matrix-chart/index.js +10 -1017
  325. package/dist/server/components/matrix-chart/matrix-chart.schema.js +2 -4
  326. package/dist/server/components/matrix-chart/matrix-chart.variables.js +2 -4
  327. package/dist/server/components/media-controls/index.js +8 -161
  328. package/dist/server/components/media-controls/media-controls.schema.js +2 -4
  329. package/dist/server/components/media-controls/media-controls.variables.js +2 -4
  330. package/dist/server/components/menu-bar/index.js +23 -6
  331. package/dist/server/components/menu-bar/menu-bar.schema.js +2 -4
  332. package/dist/server/components/menu-bar/menu-bar.variables.js +2 -4
  333. package/dist/server/components/message/index.js +7 -55
  334. package/dist/server/components/message/message.schema.js +2 -4
  335. package/dist/server/components/message/message.variables.js +2 -4
  336. package/dist/server/components/modal/index.js +16 -547
  337. package/dist/server/components/modal/modal.schema.js +2 -4
  338. package/dist/server/components/modal/modal.variables.js +2 -4
  339. package/dist/server/components/navigation-bar/index.js +7 -152
  340. package/dist/server/components/navigation-bar/navigation-bar.schema.js +2 -4
  341. package/dist/server/components/navigation-bar/navigation-bar.variables.js +2 -4
  342. package/dist/server/components/navigation-item/index.js +9 -81
  343. package/dist/server/components/navigation-item/navigation-item.schema.js +2 -4
  344. package/dist/server/components/navigation-item/navigation-item.variables.js +2 -4
  345. package/dist/server/components/number-input/index.js +14 -488
  346. package/dist/server/components/number-input/number-input.schema.js +2 -4
  347. package/dist/server/components/number-input/number-input.variables.js +2 -4
  348. package/dist/server/components/pagination/index.js +8 -101
  349. package/dist/server/components/pagination/pagination.schema.js +2 -4
  350. package/dist/server/components/pagination/pagination.variables.js +2 -4
  351. package/dist/server/components/payload-inspector/index.js +31 -1476
  352. package/dist/server/components/payload-inspector/payload-inspector.schema.js +2 -4
  353. package/dist/server/components/payload-inspector/payload-inspector.variables.js +2 -4
  354. package/dist/server/components/permission-matrix/index.js +11 -289
  355. package/dist/server/components/permission-matrix/permission-matrix.schema.js +2 -4
  356. package/dist/server/components/permission-matrix/permission-matrix.variables.js +2 -4
  357. package/dist/server/components/phone-input/index.js +13 -4532
  358. package/dist/server/components/phone-input/phone-input.schema.js +2 -4
  359. package/dist/server/components/phone-input/phone-input.variables.js +2 -4
  360. package/dist/server/components/pin-input/index.js +12 -322
  361. package/dist/server/components/pin-input/pin-input.schema.js +2 -4
  362. package/dist/server/components/pin-input/pin-input.variables.js +2 -4
  363. package/dist/server/components/popover/index.js +17 -428
  364. package/dist/server/components/popover/popover.schema.js +2 -4
  365. package/dist/server/components/popover/popover.variables.js +2 -4
  366. package/dist/server/components/portal/index.js +11 -109
  367. package/dist/server/components/portal/portal.schema.js +2 -4
  368. package/dist/server/components/portal/portal.variables.js +2 -4
  369. package/dist/server/components/pricing-card/index.js +10 -237
  370. package/dist/server/components/pricing-card/pricing-card.schema.js +2 -4
  371. package/dist/server/components/pricing-card/pricing-card.variables.js +2 -4
  372. package/dist/server/components/progress/index.js +11 -71
  373. package/dist/server/components/progress/progress.schema.js +2 -4
  374. package/dist/server/components/progress/progress.variables.js +2 -4
  375. package/dist/server/components/radio-group/index.js +10 -198
  376. package/dist/server/components/radio-group/radio-group.schema.js +2 -4
  377. package/dist/server/components/radio-group/radio-group.variables.js +2 -4
  378. package/dist/server/components/rating/index.js +12 -357
  379. package/dist/server/components/rating/rating.schema.js +2 -4
  380. package/dist/server/components/rating/rating.variables.js +2 -4
  381. package/dist/server/components/resizable-panels/index.js +10 -721
  382. package/dist/server/components/resizable-panels/resizable-panels.schema.js +2 -4
  383. package/dist/server/components/resizable-panels/resizable-panels.variables.js +2 -4
  384. package/dist/server/components/review-editor/index.js +83 -9393
  385. package/dist/server/components/review-editor/review-editor.schema.js +2 -4
  386. package/dist/server/components/review-editor/review-editor.variables.js +2 -4
  387. package/dist/server/components/run-step-timeline/index.js +15 -755
  388. package/dist/server/components/run-step-timeline/run-step-timeline.schema.js +2 -4
  389. package/dist/server/components/run-step-timeline/run-step-timeline.variables.js +2 -4
  390. package/dist/server/components/schema-form/index.js +21 -1978
  391. package/dist/server/components/schema-form/schema-form.schema.js +2 -4
  392. package/dist/server/components/schema-form/schema-form.variables.js +2 -4
  393. package/dist/server/components/scroll-area/index.js +7 -52
  394. package/dist/server/components/scroll-area/scroll-area.schema.js +2 -4
  395. package/dist/server/components/scroll-area/scroll-area.variables.js +2 -4
  396. package/dist/server/components/search-field/index.js +19 -289
  397. package/dist/server/components/search-field/search-field.schema.js +2 -4
  398. package/dist/server/components/search-field/search-field.variables.js +2 -4
  399. package/dist/server/components/secret-value-field/index.js +11 -168
  400. package/dist/server/components/secret-value-field/secret-value-field.schema.js +2 -4
  401. package/dist/server/components/secret-value-field/secret-value-field.variables.js +2 -4
  402. package/dist/server/components/section-heading/index.js +7 -77
  403. package/dist/server/components/section-heading/section-heading.schema.js +2 -4
  404. package/dist/server/components/section-heading/section-heading.variables.js +2 -4
  405. package/dist/server/components/segment/index.js +12 -306
  406. package/dist/server/components/segment/segment.schema.js +2 -4
  407. package/dist/server/components/segment/segment.variables.js +2 -4
  408. package/dist/server/components/segmented-control/index.js +12 -308
  409. package/dist/server/components/segmented-control/segmented-control.schema.js +6 -4
  410. package/dist/server/components/segmented-control/segmented-control.variables.js +2 -4
  411. package/dist/server/components/select/index.js +14 -180
  412. package/dist/server/components/select/select.schema.js +2 -4
  413. package/dist/server/components/select/select.variables.js +2 -4
  414. package/dist/server/components/selection-popover/index.js +16 -443
  415. package/dist/server/components/selection-popover/selection-popover.schema.js +2 -4
  416. package/dist/server/components/selection-popover/selection-popover.variables.js +2 -4
  417. package/dist/server/components/share-card/index.js +9 -240
  418. package/dist/server/components/share-card/share-card.schema.js +2 -4
  419. package/dist/server/components/share-card/share-card.variables.js +2 -4
  420. package/dist/server/components/sheet/index.js +15 -768
  421. package/dist/server/components/sheet/sheet.schema.js +2 -4
  422. package/dist/server/components/sheet/sheet.variables.js +2 -4
  423. package/dist/server/components/shortcut-hint/index.js +8 -98
  424. package/dist/server/components/shortcut-hint/shortcut-hint.schema.js +2 -4
  425. package/dist/server/components/shortcut-hint/shortcut-hint.variables.js +2 -4
  426. package/dist/server/components/side-navigation/index.js +12 -240
  427. package/dist/server/components/side-navigation/side-navigation.schema.js +2 -4
  428. package/dist/server/components/side-navigation/side-navigation.variables.js +2 -4
  429. package/dist/server/components/side-navigation-group/index.js +11 -119
  430. package/dist/server/components/side-navigation-group/side-navigation-group.schema.js +2 -4
  431. package/dist/server/components/side-navigation-group/side-navigation-group.variables.js +2 -4
  432. package/dist/server/components/side-navigation-item/index.js +12 -117
  433. package/dist/server/components/side-navigation-item/side-navigation-item.schema.js +2 -4
  434. package/dist/server/components/side-navigation-item/side-navigation-item.variables.js +2 -4
  435. package/dist/server/components/sidebar/index.js +17 -921
  436. package/dist/server/components/sidebar/sidebar.schema.js +2 -4
  437. package/dist/server/components/sidebar/sidebar.variables.js +2 -4
  438. package/dist/server/components/skeleton/index.js +7 -28
  439. package/dist/server/components/skeleton/skeleton.schema.js +2 -4
  440. package/dist/server/components/skeleton/skeleton.variables.js +2 -4
  441. package/dist/server/components/skip-link/index.js +9 -105
  442. package/dist/server/components/skip-link/skip-link.schema.js +2 -4
  443. package/dist/server/components/skip-link/skip-link.variables.js +2 -4
  444. package/dist/server/components/slider/index.js +13 -563
  445. package/dist/server/components/slider/slider.schema.js +2 -4
  446. package/dist/server/components/slider/slider.variables.js +2 -4
  447. package/dist/server/components/sortable-list/index.js +9 -632
  448. package/dist/server/components/sortable-list/sortable-list.schema.js +2 -4
  449. package/dist/server/components/sortable-list/sortable-list.variables.js +2 -4
  450. package/dist/server/components/spectrogram/index.js +10 -957
  451. package/dist/server/components/spectrogram/spectrogram.schema.js +2 -4
  452. package/dist/server/components/spectrogram/spectrogram.variables.js +2 -4
  453. package/dist/server/components/spectrum-chart/index.js +9 -858
  454. package/dist/server/components/spectrum-chart/spectrum-chart.schema.js +2 -4
  455. package/dist/server/components/spectrum-chart/spectrum-chart.variables.js +2 -4
  456. package/dist/server/components/speed-dial/index.js +12 -388
  457. package/dist/server/components/speed-dial/speed-dial.schema.js +2 -4
  458. package/dist/server/components/speed-dial/speed-dial.variables.js +2 -4
  459. package/dist/server/components/speed-dial-action/index.js +12 -166
  460. package/dist/server/components/speed-dial-action/speed-dial-action.schema.js +2 -4
  461. package/dist/server/components/speed-dial-action/speed-dial-action.variables.js +2 -4
  462. package/dist/server/components/spinner/index.js +9 -36
  463. package/dist/server/components/spinner/spinner.schema.js +2 -4
  464. package/dist/server/components/spinner/spinner.variables.js +2 -4
  465. package/dist/server/components/stacked-list-item/index.js +9 -122
  466. package/dist/server/components/stacked-list-item/stacked-list-item.schema.js +2 -4
  467. package/dist/server/components/stacked-list-item/stacked-list-item.variables.js +2 -4
  468. package/dist/server/components/stat/index.js +12 -110
  469. package/dist/server/components/stat/stat.schema.js +2 -4
  470. package/dist/server/components/stat/stat.variables.js +2 -4
  471. package/dist/server/components/stat-group/index.js +11 -144
  472. package/dist/server/components/stat-group/stat-group.schema.js +2 -4
  473. package/dist/server/components/stat-group/stat-group.variables.js +2 -4
  474. package/dist/server/components/status-dot/index.js +9 -79
  475. package/dist/server/components/status-dot/status-dot.schema.js +2 -4
  476. package/dist/server/components/status-dot/status-dot.variables.js +2 -4
  477. package/dist/server/components/steps/index.js +10 -191
  478. package/dist/server/components/steps/steps.schema.js +2 -4
  479. package/dist/server/components/steps/steps.variables.js +2 -4
  480. package/dist/server/components/surface/index.js +10 -63
  481. package/dist/server/components/surface/surface.schema.js +2 -4
  482. package/dist/server/components/surface/surface.variables.js +2 -4
  483. package/dist/server/components/tab/index.js +11 -96
  484. package/dist/server/components/tab/tab.schema.js +2 -4
  485. package/dist/server/components/tab/tab.variables.js +2 -4
  486. package/dist/server/components/tab-list/index.js +10 -31
  487. package/dist/server/components/tab-list/tab-list.schema.js +2 -4
  488. package/dist/server/components/tab-list/tab-list.variables.js +2 -4
  489. package/dist/server/components/tab-panel/index.js +10 -40
  490. package/dist/server/components/tab-panel/tab-panel.schema.js +2 -4
  491. package/dist/server/components/tab-panel/tab-panel.variables.js +2 -4
  492. package/dist/server/components/table/index.js +19 -362
  493. package/dist/server/components/table/table.schema.js +2 -4
  494. package/dist/server/components/table/table.variables.js +2 -4
  495. package/dist/server/components/table-body/index.js +11 -49
  496. package/dist/server/components/table-body/table-body.schema.js +2 -4
  497. package/dist/server/components/table-body/table-body.variables.js +2 -4
  498. package/dist/server/components/table-cell/index.js +9 -41
  499. package/dist/server/components/table-cell/table-cell.schema.js +2 -4
  500. package/dist/server/components/table-cell/table-cell.variables.js +2 -4
  501. package/dist/server/components/table-header/index.js +11 -84
  502. package/dist/server/components/table-header/table-header.schema.js +2 -4
  503. package/dist/server/components/table-header/table-header.variables.js +2 -4
  504. package/dist/server/components/table-header-cell/index.js +11 -88
  505. package/dist/server/components/table-header-cell/table-header-cell.schema.js +2 -4
  506. package/dist/server/components/table-header-cell/table-header-cell.variables.js +2 -4
  507. package/dist/server/components/table-row/index.js +13 -130
  508. package/dist/server/components/table-row/table-row.schema.js +2 -4
  509. package/dist/server/components/table-row/table-row.variables.js +2 -4
  510. package/dist/server/components/tabs/index.js +16 -393
  511. package/dist/server/components/tabs/tabs.schema.js +2 -4
  512. package/dist/server/components/tabs/tabs.variables.js +2 -4
  513. package/dist/server/components/tag-input/index.js +16 -6
  514. package/dist/server/components/tag-input/tag-input.schema.js +2 -4
  515. package/dist/server/components/tag-input/tag-input.variables.js +2 -4
  516. package/dist/server/components/textarea/index.js +12 -183
  517. package/dist/server/components/textarea/textarea.schema.js +2 -4
  518. package/dist/server/components/textarea/textarea.variables.js +2 -4
  519. package/dist/server/components/time-field/index.js +10 -286
  520. package/dist/server/components/time-field/time-field.schema.js +2 -4
  521. package/dist/server/components/time-field/time-field.variables.js +2 -4
  522. package/dist/server/components/timeline/index.js +7 -248
  523. package/dist/server/components/timeline/timeline.schema.js +2 -4
  524. package/dist/server/components/timeline/timeline.variables.js +2 -4
  525. package/dist/server/components/toast-region/index.js +10 -717
  526. package/dist/server/components/toast-region/toast-region.schema.js +2 -4
  527. package/dist/server/components/toast-region/toast-region.variables.js +2 -4
  528. package/dist/server/components/toggle/index.js +10 -80
  529. package/dist/server/components/toggle/toggle.schema.js +2 -4
  530. package/dist/server/components/toggle/toggle.variables.js +2 -4
  531. package/dist/server/components/toolbar/index.js +15 -534
  532. package/dist/server/components/toolbar/toolbar.schema.js +2 -4
  533. package/dist/server/components/toolbar/toolbar.variables.js +2 -4
  534. package/dist/server/components/tooltip/index.js +15 -267
  535. package/dist/server/components/tooltip/tooltip.schema.js +2 -4
  536. package/dist/server/components/tooltip/tooltip.variables.js +2 -4
  537. package/dist/server/components/transfer-list/index.js +8 -347
  538. package/dist/server/components/transfer-list/transfer-list.schema.js +2 -4
  539. package/dist/server/components/transfer-list/transfer-list.variables.js +2 -4
  540. package/dist/server/components/tree/index.js +16 -3400
  541. package/dist/server/components/tree/tree.schema.js +2 -4
  542. package/dist/server/components/tree/tree.variables.js +2 -4
  543. package/dist/server/components/tree-item/index.js +11 -696
  544. package/dist/server/components/tree-item/tree-item.schema.js +2 -4
  545. package/dist/server/components/tree-item/tree-item.variables.js +2 -4
  546. package/dist/server/components/typography/index.js +7 -61
  547. package/dist/server/components/typography/typography.schema.js +2 -4
  548. package/dist/server/components/typography/typography.variables.js +2 -4
  549. package/dist/server/components/virtual-list/index.js +14 -200
  550. package/dist/server/components/virtual-list/virtual-list.schema.js +2 -4
  551. package/dist/server/components/virtual-list/virtual-list.variables.js +2 -4
  552. package/dist/server/components/visually-hidden/index.js +9 -37
  553. package/dist/server/components/visually-hidden/visually-hidden.schema.js +2 -4
  554. package/dist/server/components/visually-hidden/visually-hidden.variables.js +2 -4
  555. package/dist/server/components/waveform/index.js +9 -894
  556. package/dist/server/components/waveform/waveform.schema.js +2 -4
  557. package/dist/server/components/waveform/waveform.variables.js +2 -4
  558. package/dist/server/highlighters/shiki/index.js +8 -13
  559. package/dist/server/index.js +723 -44377
  560. package/dist/server/index.server-04pgs1m4.js +9 -0
  561. package/dist/server/index.server-06ak422z.js +726 -0
  562. package/dist/server/index.server-09ky0qhy.js +9 -0
  563. package/dist/server/index.server-0a8m173j.js +73 -0
  564. package/dist/server/index.server-0ed43ctm.js +3834 -0
  565. package/dist/server/index.server-0rj7syca.js +271 -0
  566. package/dist/server/index.server-0tnw5ter.js +39 -0
  567. package/dist/server/index.server-1c79f4fe.js +38 -0
  568. package/dist/server/index.server-1gsgt31t.js +9 -0
  569. package/dist/server/index.server-1k7j69zg.js +20 -0
  570. package/dist/server/index.server-1nzyv1av.js +50 -0
  571. package/dist/server/index.server-1tp7nabp.js +98 -0
  572. package/dist/server/index.server-1vsv7ngz.js +106 -0
  573. package/dist/server/index.server-1x7gd5rm.js +55 -0
  574. package/dist/server/index.server-1yn62azq.js +145 -0
  575. package/dist/server/index.server-20y4mdhm.js +167 -0
  576. package/dist/server/index.server-24kf2kgd.js +9 -0
  577. package/dist/server/index.server-27c3ewc8.js +9 -0
  578. package/dist/server/index.server-2fa12eg1.js +153 -0
  579. package/dist/server/index.server-2fz89mxv.js +9 -0
  580. package/dist/server/index.server-2g8qr4nk.js +72 -0
  581. package/dist/server/index.server-2h3y9v3e.js +15 -0
  582. package/dist/server/index.server-2q8eszkm.js +319 -0
  583. package/dist/server/index.server-2sjf4r4j.js +1036 -0
  584. package/dist/server/index.server-2tr8ba51.js +114 -0
  585. package/dist/server/index.server-2ymxf0ra.js +71 -0
  586. package/dist/server/index.server-317enkqq.js +2 -0
  587. package/dist/server/index.server-324f5vcc.js +195 -0
  588. package/dist/server/index.server-338vqndh.js +9 -0
  589. package/dist/server/index.server-34p02y48.js +149 -0
  590. package/dist/server/index.server-36yahywm.js +423 -0
  591. package/dist/server/index.server-37x76zdn.js +6 -0
  592. package/dist/server/index.server-3cwyrz8f.js +84 -0
  593. package/dist/server/index.server-3f5f7jd4.js +371 -0
  594. package/dist/server/index.server-3fvz5gak.js +30 -0
  595. package/dist/server/index.server-3jz24pb5.js +38 -0
  596. package/dist/server/index.server-3mbgzhq8.js +59 -0
  597. package/dist/server/index.server-3zzwg4ew.js +60 -0
  598. package/dist/server/index.server-41003crj.js +125 -0
  599. package/dist/server/index.server-42qeekwc.js +10 -0
  600. package/dist/server/index.server-493m9fm5.js +14 -0
  601. package/dist/server/index.server-4jc5ny87.js +174 -0
  602. package/dist/server/index.server-4p5znv15.js +92 -0
  603. package/dist/server/index.server-4pv40879.js +68 -0
  604. package/dist/server/index.server-4pyw3ask.js +86 -0
  605. package/dist/server/index.server-4t03p6p4.js +113 -0
  606. package/dist/server/index.server-4wphqyck.js +73 -0
  607. package/dist/server/index.server-52fkd3c2.js +53 -0
  608. package/dist/server/index.server-5599w5gj.js +41 -0
  609. package/dist/server/index.server-578qndbg.js +221 -0
  610. package/dist/server/index.server-5bxfjsbc.js +74 -0
  611. package/dist/server/index.server-5h2t2v49.js +9 -0
  612. package/dist/server/index.server-5hvm9w79.js +9 -0
  613. package/dist/server/index.server-5kt7t4y4.js +69 -0
  614. package/dist/server/index.server-5qknw2zb.js +46 -0
  615. package/dist/server/index.server-5s9645md.js +97 -0
  616. package/dist/server/index.server-5v74e1fz.js +29 -0
  617. package/dist/server/index.server-5zbf7wta.js +4463 -0
  618. package/dist/server/index.server-61g7sxkr.js +191 -0
  619. package/dist/server/index.server-62gb3jcw.js +9 -0
  620. package/dist/server/index.server-6492n4zt.js +107 -0
  621. package/dist/server/index.server-64bppvdn.js +9 -0
  622. package/dist/server/index.server-68hbjs6n.js +1642 -0
  623. package/dist/server/index.server-6dfav8r0.js +142 -0
  624. package/dist/server/index.server-6evw00zj.js +245 -0
  625. package/dist/server/index.server-6jnnp1s8.js +32 -0
  626. package/dist/server/index.server-6mdy1500.js +31 -0
  627. package/dist/server/index.server-6pdmym90.js +11 -0
  628. package/dist/server/index.server-6rw2v7f4.js +457 -0
  629. package/dist/server/index.server-6tc4k9n2.js +281 -0
  630. package/dist/server/index.server-6zgzghtm.js +157 -0
  631. package/dist/server/index.server-70c570r3.js +109 -0
  632. package/dist/server/index.server-76y146qj.js +141 -0
  633. package/dist/server/index.server-77gpgvab.js +68 -0
  634. package/dist/server/index.server-78d33trm.js +88 -0
  635. package/dist/server/index.server-7d9fgwdv.js +284 -0
  636. package/dist/server/index.server-7pdq2w0a.js +17 -0
  637. package/dist/server/index.server-7ptnbrtg.js +9 -0
  638. package/dist/server/index.server-7pxzf0ch.js +9 -0
  639. package/dist/server/index.server-7wsshxkg.js +166 -0
  640. package/dist/server/index.server-7yg3rd66.js +126 -0
  641. package/dist/server/index.server-8bqpdv5z.js +63 -0
  642. package/dist/server/index.server-8cvkc386.js +271 -0
  643. package/dist/server/index.server-8d3tttbj.js +31 -0
  644. package/dist/server/index.server-8gakk9d5.js +168 -0
  645. package/dist/server/index.server-8hdvr9bt.js +18 -0
  646. package/dist/server/index.server-8jm0z4vp.js +38 -0
  647. package/dist/server/index.server-8ysrmagt.js +9 -0
  648. package/dist/server/index.server-92ae8fk6.js +83 -0
  649. package/dist/server/index.server-93xr1xx4.js +192 -0
  650. package/dist/server/index.server-94b7tjs5.js +27 -0
  651. package/dist/server/index.server-94p65bqz.js +38 -0
  652. package/dist/server/index.server-94wsps5p.js +9 -0
  653. package/dist/server/index.server-96fg085d.js +9 -0
  654. package/dist/server/index.server-9cyktwxj.js +9 -0
  655. package/dist/server/index.server-9kas8kq5.js +462 -0
  656. package/dist/server/index.server-9pbg150a.js +9 -0
  657. package/dist/server/index.server-9r0zg6d9.js +102 -0
  658. package/dist/server/index.server-9r6rts7c.js +2 -0
  659. package/dist/server/index.server-9vqgsfds.js +9 -0
  660. package/dist/server/index.server-9w7qdn8h.js +22 -0
  661. package/dist/server/index.server-9xyn021z.js +9 -0
  662. package/dist/server/index.server-abm21gz1.js +41 -0
  663. package/dist/server/index.server-adgnf7ez.js +190 -0
  664. package/dist/server/index.server-ah91j894.js +564 -0
  665. package/dist/server/index.server-ajzk1x9v.js +224 -0
  666. package/dist/server/index.server-amfq2v2p.js +12 -0
  667. package/dist/server/index.server-ans2v9y9.js +45 -0
  668. package/dist/server/index.server-anyk9x1r.js +282 -0
  669. package/dist/server/index.server-att810se.js +362 -0
  670. package/dist/server/index.server-awaramqw.js +277 -0
  671. package/dist/server/index.server-axzcx0e9.js +9 -0
  672. package/dist/server/index.server-b14k8cq5.js +458 -0
  673. package/dist/server/index.server-b54c3kn2.js +22 -0
  674. package/dist/server/index.server-bfkka7x4.js +2 -0
  675. package/dist/server/index.server-bgcpy5vk.js +47 -0
  676. package/dist/server/index.server-bktae19b.js +75 -0
  677. package/dist/server/index.server-bkz7h7jx.js +100 -0
  678. package/dist/server/index.server-br63fj2h.js +9 -0
  679. package/dist/server/index.server-bs46fdxd.js +54 -0
  680. package/dist/server/index.server-bte0dfkh.js +30 -0
  681. package/dist/server/index.server-bxmyxbfm.js +95 -0
  682. package/dist/server/index.server-c29mzp9r.js +48 -0
  683. package/dist/server/index.server-c3gbtj71.js +65 -0
  684. package/dist/server/index.server-c5jyrshr.js +9 -0
  685. package/dist/server/index.server-c7t8taqa.js +23 -0
  686. package/dist/server/index.server-chh0fzxj.js +8 -0
  687. package/dist/server/index.server-chj73na5.js +655 -0
  688. package/dist/server/index.server-cjkcwy18.js +9 -0
  689. package/dist/server/index.server-d2e6xxc3.js +94 -0
  690. package/dist/server/index.server-d63pwytk.js +85 -0
  691. package/dist/server/index.server-d6peankz.js +563 -0
  692. package/dist/server/index.server-dbkczma7.js +83 -0
  693. package/dist/server/index.server-dezmeg8v.js +244 -0
  694. package/dist/server/index.server-dpnwk6w4.js +9 -0
  695. package/dist/server/index.server-dr17jbt2.js +162 -0
  696. package/dist/server/index.server-dsf1bjt5.js +9 -0
  697. package/dist/server/index.server-dt2rpjtk.js +90 -0
  698. package/dist/server/index.server-dxkrc7sf.js +9 -0
  699. package/dist/server/index.server-dyryxwe8.js +67 -0
  700. package/dist/server/index.server-e10j3s54.js +93 -0
  701. package/dist/server/index.server-e1gjs02r.js +147 -0
  702. package/dist/server/index.server-e39mgany.js +9 -0
  703. package/dist/server/index.server-e967et3j.js +77 -0
  704. package/dist/server/index.server-e9g5b01k.js +9 -0
  705. package/dist/server/index.server-ecv75266.js +9 -0
  706. package/dist/server/index.server-eeq2c9pm.js +78 -0
  707. package/dist/server/index.server-eknv9erd.js +169 -0
  708. package/dist/server/index.server-emt82wev.js +447 -0
  709. package/dist/server/index.server-en97tw08.js +9 -0
  710. package/dist/server/index.server-eq2ca4j4.js +105 -0
  711. package/dist/server/index.server-eqa0xxbt.js +72 -0
  712. package/dist/server/index.server-et3p2cfq.js +14 -0
  713. package/dist/server/index.server-ezn8d6zv.js +285 -0
  714. package/dist/server/index.server-f1j0pjt8.js +99 -0
  715. package/dist/server/index.server-f42dvea7.js +294 -0
  716. package/dist/server/index.server-fankxd0h.js +362 -0
  717. package/dist/server/index.server-fcgycatb.js +9 -0
  718. package/dist/server/index.server-fdmb571x.js +116 -0
  719. package/dist/server/index.server-fgpfrjbw.js +9 -0
  720. package/dist/server/index.server-fhnhfrf4.js +9 -0
  721. package/dist/server/index.server-fjzvm2c4.js +175 -0
  722. package/dist/server/index.server-fn57dr4e.js +21 -0
  723. package/dist/server/index.server-fnj6xyr0.js +1028 -0
  724. package/dist/server/index.server-fy9eb0xp.js +101 -0
  725. package/dist/server/index.server-fz2jddt8.js +613 -0
  726. package/dist/server/index.server-g75bhbvb.js +2 -0
  727. package/dist/server/index.server-g8kdhzf2.js +146 -0
  728. package/dist/server/index.server-gae09raw.js +75 -0
  729. package/dist/server/index.server-gbzsb04q.js +71 -0
  730. package/dist/server/index.server-ge07r1p8.js +8 -0
  731. package/dist/server/index.server-ghvqpc50.js +71 -0
  732. package/dist/server/index.server-gj3eb1ce.js +23 -0
  733. package/dist/server/index.server-grb4gyta.js +210 -0
  734. package/dist/server/index.server-gtsdsv75.js +230 -0
  735. package/dist/server/index.server-gw4atb82.js +216 -0
  736. package/dist/server/index.server-gxhj1st8.js +9 -0
  737. package/dist/server/index.server-h1vdh0nc.js +107 -0
  738. package/dist/server/index.server-h54v6c32.js +21 -0
  739. package/dist/server/index.server-h68sx7bz.js +37 -0
  740. package/dist/server/index.server-hmw4afhn.js +25 -0
  741. package/dist/server/index.server-hn1n8dwr.js +9 -0
  742. package/dist/server/index.server-htmd13mc.js +2 -0
  743. package/dist/server/index.server-hxz0tnr9.js +57 -0
  744. package/dist/server/index.server-hzamrkgk.js +256 -0
  745. package/dist/server/index.server-j2kh5fhy.js +9 -0
  746. package/dist/server/index.server-jda8tyzf.js +53 -0
  747. package/dist/server/index.server-jev5qwr3.js +9 -0
  748. package/dist/server/index.server-jh1te4hy.js +9 -0
  749. package/dist/server/index.server-jhvs517p.js +384 -0
  750. package/dist/server/index.server-jky3p49s.js +9 -0
  751. package/dist/server/index.server-js3eva86.js +8 -0
  752. package/dist/server/index.server-jwwwgx0d.js +9 -0
  753. package/dist/server/index.server-jx2qn5an.js +9 -0
  754. package/dist/server/index.server-k02nvs46.js +50 -0
  755. package/dist/server/index.server-k15sq5qf.js +294 -0
  756. package/dist/server/index.server-k1hd2e0x.js +9 -0
  757. package/dist/server/index.server-k454ba7j.js +291 -0
  758. package/dist/server/index.server-k5fmb7tw.js +35 -0
  759. package/dist/server/index.server-k7py0pfc.js +151 -0
  760. package/dist/server/index.server-kb6w1a7c.js +27 -0
  761. package/dist/server/index.server-kjtb596w.js +163 -0
  762. package/dist/server/index.server-kq859dmc.js +1543 -0
  763. package/dist/server/index.server-kykvc153.js +3393 -0
  764. package/dist/server/index.server-m6phax03.js +137 -0
  765. package/dist/server/index.server-m8d6yz6b.js +47 -0
  766. package/dist/server/index.server-m9axazfh.js +9 -0
  767. package/dist/server/index.server-m9n4b1bv.js +9 -0
  768. package/dist/server/index.server-mc6vc1pm.js +63 -0
  769. package/dist/server/index.server-mm4g29h0.js +85 -0
  770. package/dist/server/index.server-msf37rwk.js +9 -0
  771. package/dist/server/index.server-n3zbnw3w.js +194 -0
  772. package/dist/server/index.server-n4zvbkvq.js +9 -0
  773. package/dist/server/index.server-n562tmxd.js +197 -0
  774. package/dist/server/index.server-n86bmg5s.js +393 -0
  775. package/dist/server/index.server-najpstc3.js +224 -0
  776. package/dist/server/index.server-nav1z5d8.js +59 -0
  777. package/dist/server/index.server-nhnvxwz3.js +9 -0
  778. package/dist/server/index.server-nj8mebze.js +14 -0
  779. package/dist/server/index.server-nvktnr2d.js +2311 -0
  780. package/dist/server/index.server-nw1n32dx.js +100 -0
  781. package/dist/server/index.server-nwjjp9t6.js +71 -0
  782. package/dist/server/index.server-nxx9ckb3.js +123 -0
  783. package/dist/server/index.server-ny1hfypg.js +1138 -0
  784. package/dist/server/index.server-nzjy03c0.js +189 -0
  785. package/dist/server/index.server-p045dgmk.js +49 -0
  786. package/dist/server/index.server-p3aw22qv.js +40 -0
  787. package/dist/server/index.server-p617pg5j.js +9 -0
  788. package/dist/server/index.server-p78n7r6g.js +37 -0
  789. package/dist/server/index.server-pa4qcv70.js +9 -0
  790. package/dist/server/index.server-pehx7yrn.js +72 -0
  791. package/dist/server/index.server-pg65gmdb.js +117 -0
  792. package/dist/server/index.server-ps1p8xrf.js +9 -0
  793. package/dist/server/index.server-q160a4x5.js +9 -0
  794. package/dist/server/index.server-q4qh8a6x.js +126 -0
  795. package/dist/server/index.server-q550gsbe.js +83 -0
  796. package/dist/server/index.server-qjdkp02z.js +117 -0
  797. package/dist/server/index.server-qkfd0qa7.js +2 -0
  798. package/dist/server/index.server-qkwnbj88.js +149 -0
  799. package/dist/server/index.server-qq12yqwb.js +76 -0
  800. package/dist/server/index.server-qreadmdy.js +85 -0
  801. package/dist/server/index.server-qwn3yfyq.js +74 -0
  802. package/dist/server/index.server-qxd1ej6r.js +161 -0
  803. package/dist/server/index.server-qz23rh6j.js +34 -0
  804. package/dist/server/index.server-r0wzpqh7.js +113 -0
  805. package/dist/server/index.server-r30hm3ep.js +159 -0
  806. package/dist/server/index.server-rf67m8v5.js +2 -0
  807. package/dist/server/index.server-rpenapvz.js +57 -0
  808. package/dist/server/index.server-rsjrjd13.js +223 -0
  809. package/dist/server/index.server-s0xz0vmh.js +117 -0
  810. package/dist/server/index.server-s84epxbr.js +134 -0
  811. package/dist/server/index.server-sg3pthbn.js +81 -0
  812. package/dist/server/index.server-sk2damtz.js +150 -0
  813. package/dist/server/index.server-sz7qa1vs.js +9 -0
  814. package/dist/server/index.server-sz8sxsj6.js +15 -0
  815. package/dist/server/index.server-t437b1td.js +71 -0
  816. package/dist/server/index.server-t9a3m15z.js +691 -0
  817. package/dist/server/index.server-tesf3qd9.js +446 -0
  818. package/dist/server/index.server-thp727nz.js +9 -0
  819. package/dist/server/index.server-tjbpdh7b.js +47 -0
  820. package/dist/server/index.server-tm012b9x.js +421 -0
  821. package/dist/server/index.server-tp1j7few.js +53 -0
  822. package/dist/server/index.server-tys344bj.js +61 -0
  823. package/dist/server/index.server-v5qqrjej.js +30 -0
  824. package/dist/server/index.server-v6kp8px5.js +68 -0
  825. package/dist/server/index.server-va9x168w.js +30 -0
  826. package/dist/server/index.server-vbnc9fac.js +377 -0
  827. package/dist/server/index.server-vmsmaztb.js +35 -0
  828. package/dist/server/index.server-vqgwwdzz.js +9 -0
  829. package/dist/server/index.server-vqhdvsx5.js +151 -0
  830. package/dist/server/index.server-vzvz108c.js +9 -0
  831. package/dist/server/index.server-w6am2dxc.js +12 -0
  832. package/dist/server/index.server-weae7gs2.js +15 -0
  833. package/dist/server/index.server-wj91h1wk.js +666 -0
  834. package/dist/server/index.server-wqkzae6a.js +41 -0
  835. package/dist/server/index.server-wrx4sd6j.js +9 -0
  836. package/dist/server/index.server-wrz6jqw1.js +59 -0
  837. package/dist/server/index.server-x83rwh0m.js +49 -0
  838. package/dist/server/index.server-xb4r3skb.js +9 -0
  839. package/dist/server/index.server-xecgaeth.js +102 -0
  840. package/dist/server/index.server-xjmx6rm8.js +1162 -0
  841. package/dist/server/index.server-xmphf30z.js +9 -0
  842. package/dist/server/index.server-xnh932xs.js +85 -0
  843. package/dist/server/index.server-xp53vmj5.js +129 -0
  844. package/dist/server/index.server-xpghbgpz.js +22 -0
  845. package/dist/server/index.server-xqmtg1tq.js +9 -0
  846. package/dist/server/index.server-xxddjkmm.js +9 -0
  847. package/dist/server/index.server-y0q949bm.js +27 -0
  848. package/dist/server/index.server-y16zcjfw.js +38 -0
  849. package/dist/server/index.server-y3r39npa.js +54 -0
  850. package/dist/server/index.server-y3xyech8.js +9 -0
  851. package/dist/server/index.server-y68tcxw3.js +52 -0
  852. package/dist/server/index.server-ya3f9g84.js +9 -0
  853. package/dist/server/index.server-yaejrcc0.js +53 -0
  854. package/dist/server/index.server-ygk52jt8.js +62 -0
  855. package/dist/server/index.server-yheh2spx.js +66 -0
  856. package/dist/server/index.server-yr9zjj1r.js +31 -0
  857. package/dist/server/index.server-ytdfzwh1.js +56 -0
  858. package/dist/server/index.server-z63wz94j.js +9 -0
  859. package/dist/server/index.server-z7nvkz8v.js +8 -0
  860. package/dist/server/index.server-zbcza3tc.js +62 -0
  861. package/dist/server/index.server-zbf09rvx.js +111 -0
  862. package/dist/server/index.server-zcfnwc9r.js +37 -0
  863. package/dist/server/index.server-zdg2zpx1.js +28 -0
  864. package/dist/server/index.server-zf0r6cj7.js +9 -0
  865. package/dist/server/index.server-zm9kbbpp.js +9 -0
  866. package/dist/server/index.server-zt7rjnct.js +100 -0
  867. package/dist/server/index.server-zwjp26z8.js +21 -0
  868. package/dist/server/styles/base-guard.js +6 -8
  869. package/dist/utilities/change-tracker.svelte.d.ts +1 -20
  870. package/dist/utilities/change-tracker.types.d.ts +20 -0
  871. package/dist/utilities/document-order.d.ts +0 -16
  872. package/dist/utilities/sortable-controller.svelte.d.ts +1 -47
  873. package/dist/utilities/sortable-controller.types.d.ts +48 -0
  874. package/dist/utilities/typeahead.d.ts +13 -0
  875. package/dist/utilities/use-announcer.svelte.d.ts +1 -24
  876. package/dist/utilities/use-announcer.types.d.ts +24 -0
  877. package/dist/utilities/use-history.svelte.d.ts +1 -52
  878. package/dist/utilities/use-history.types.d.ts +52 -0
  879. package/dist/utilities/use-intersection.svelte.d.ts +2 -13
  880. package/dist/utilities/use-intersection.types.d.ts +13 -0
  881. package/dist/utilities/use-mutation-observer.svelte.d.ts +2 -21
  882. package/dist/utilities/use-mutation-observer.types.d.ts +21 -0
  883. package/dist/utilities/use-reduced-motion.svelte.d.ts +1 -4
  884. package/dist/utilities/use-reduced-motion.types.d.ts +4 -0
  885. package/dist/utilities/use-resize-observer.svelte.d.ts +2 -9
  886. package/dist/utilities/use-resize-observer.types.d.ts +9 -0
  887. package/package.json +347 -174
  888. package/src/_internal/tree-registry.svelte.ts +13 -15
  889. package/src/components/_sortable-item.svelte +1 -1
  890. package/src/components/autocomplete/autocomplete.svelte +15 -2
  891. package/src/components/combobox/README.md +1 -0
  892. package/src/components/combobox/combobox.svelte +55 -0
  893. package/src/components/combobox/combobox.types.ts +2 -0
  894. package/src/components/data-table/README.md +21 -15
  895. package/src/components/data-table/data-table.css +20 -0
  896. package/src/components/data-table/data-table.svelte +157 -5
  897. package/src/components/data-table/data-table.types.ts +27 -0
  898. package/src/components/data-table/index.ts +6 -1
  899. package/src/components/dropdown-item/README.md +12 -12
  900. package/src/components/dropdown-item/dropdown-item.svelte +3 -1
  901. package/src/components/dropdown-item/dropdown-item.types.ts +3 -3
  902. package/src/components/dropdown-menu/dropdown-menu.svelte +32 -1
  903. package/src/components/experimental/json-viewer/index.ts +3 -1
  904. package/src/components/experimental/message/index.ts +3 -1
  905. package/src/components/hover-card/hover-card.svelte +6 -7
  906. package/src/components/json-schema-editor/diff-view.svelte +1 -1
  907. package/src/components/json-schema-editor/form-view.svelte +1 -1
  908. package/src/components/json-schema-editor/json-schema-editor-state.svelte.ts +3 -20
  909. package/src/components/json-schema-editor/json-schema-editor-state.types.ts +21 -0
  910. package/src/components/json-schema-editor/json-schema-toolbar.svelte +1 -1
  911. package/src/components/json-schema-editor/json-view.svelte +1 -1
  912. package/src/components/menu-bar/index.ts +4 -1
  913. package/src/components/menu-bar/menu-bar.svelte +248 -1
  914. package/src/components/segmented-control/README.md +1 -0
  915. package/src/components/segmented-control/segmented-control.svelte +54 -1
  916. package/src/components/segmented-control/segmented-control.types.ts +2 -0
  917. package/src/components/sortable-list/sortable-list.types.ts +4 -4
  918. package/src/components/tag-input/index.ts +4 -1
  919. package/src/components/tooltip/tooltip.svelte +39 -14
  920. package/src/components/tree/tree.svelte +19 -39
  921. package/src/index.ts +5 -4
  922. package/src/utilities/change-tracker.svelte.ts +1 -21
  923. package/src/utilities/change-tracker.types.ts +21 -0
  924. package/src/utilities/document-order.ts +8 -3
  925. package/src/utilities/sortable-controller.svelte.ts +5 -47
  926. package/src/utilities/sortable-controller.types.ts +49 -0
  927. package/src/utilities/typeahead.ts +63 -0
  928. package/src/utilities/use-announcer.svelte.ts +1 -26
  929. package/src/utilities/use-announcer.types.ts +26 -0
  930. package/src/utilities/use-history.svelte.ts +6 -56
  931. package/src/utilities/use-history.types.ts +56 -0
  932. package/src/utilities/use-intersection.svelte.ts +6 -15
  933. package/src/utilities/use-intersection.types.ts +16 -0
  934. package/src/utilities/use-mutation-observer.svelte.ts +6 -23
  935. package/src/utilities/use-mutation-observer.types.ts +24 -0
  936. package/src/utilities/use-reduced-motion.svelte.ts +1 -4
  937. package/src/utilities/use-reduced-motion.types.ts +4 -0
  938. package/src/utilities/use-resize-observer.svelte.ts +6 -11
  939. package/src/utilities/use-resize-observer.types.ts +12 -0
  940. package/dist/server/components/access-gate/index.css +0 -130
  941. package/dist/server/components/accordion/index.css +0 -125
  942. package/dist/server/components/accordion-item/index.css +0 -110
  943. package/dist/server/components/alert/index.css +0 -91
  944. package/dist/server/components/alert-dialog/index.css +0 -14
  945. package/dist/server/components/approval-card/index.css +0 -1767
  946. package/dist/server/components/area-chart/index.css +0 -167
  947. package/dist/server/components/aspect-ratio/index.css +0 -19
  948. package/dist/server/components/autocomplete/index.css +0 -100
  949. package/dist/server/components/avatar/index.css +0 -74
  950. package/dist/server/components/avatar-group/index.css +0 -98
  951. package/dist/server/components/backdrop/index.css +0 -26
  952. package/dist/server/components/badge/index.css +0 -77
  953. package/dist/server/components/banner/index.css +0 -102
  954. package/dist/server/components/bar-chart/index.css +0 -161
  955. package/dist/server/components/breadcrumbs/index.css +0 -90
  956. package/dist/server/components/button/index.css +0 -356
  957. package/dist/server/components/button-group/index.css +0 -109
  958. package/dist/server/components/callout/index.css +0 -84
  959. package/dist/server/components/capability-gate/index.css +0 -132
  960. package/dist/server/components/card/index.css +0 -79
  961. package/dist/server/components/chat/index.css +0 -61
  962. package/dist/server/components/chat-conversation-header/index.css +0 -315
  963. package/dist/server/components/chat-conversation-list/index.css +0 -123
  964. package/dist/server/components/checkbox/index.css +0 -155
  965. package/dist/server/components/checkbox-group/index.css +0 -87
  966. package/dist/server/components/chip/index.css +0 -199
  967. package/dist/server/components/choice-grid/index.css +0 -103
  968. package/dist/server/components/choice-grid-item/index.css +0 -86
  969. package/dist/server/components/code-block/index.css +0 -129
  970. package/dist/server/components/collapsible/index.css +0 -88
  971. package/dist/server/components/color-field/index.css +0 -49
  972. package/dist/server/components/color-picker/index.css +0 -134
  973. package/dist/server/components/color-swatch-picker/index.css +0 -113
  974. package/dist/server/components/combobox/index.css +0 -180
  975. package/dist/server/components/command-item/index.css +0 -90
  976. package/dist/server/components/command-menu/index.css +0 -131
  977. package/dist/server/components/command-palette/index.css +0 -259
  978. package/dist/server/components/confirm-dialog/index.css +0 -10
  979. package/dist/server/components/container/index.css +0 -36
  980. package/dist/server/components/context-menu/index.css +0 -274
  981. package/dist/server/components/copy-button/index.css +0 -46
  982. package/dist/server/components/data-grid/index.css +0 -268
  983. package/dist/server/components/data-list/index.css +0 -20
  984. package/dist/server/components/data-table/index.css +0 -235
  985. package/dist/server/components/date-range-field/index.css +0 -178
  986. package/dist/server/components/description-list/index.css +0 -83
  987. package/dist/server/components/diff-statistics/index.css +0 -81
  988. package/dist/server/components/divider/index.css +0 -45
  989. package/dist/server/components/drawer/index.css +0 -191
  990. package/dist/server/components/dropdown/index.css +0 -265
  991. package/dist/server/components/empty-state/index.css +0 -43
  992. package/dist/server/components/event-stream-viewer/index.css +0 -737
  993. package/dist/server/components/faceted-filter-bar/index.css +0 -117
  994. package/dist/server/components/feed/index.css +0 -74
  995. package/dist/server/components/file-upload/index.css +0 -183
  996. package/dist/server/components/floating-action-button/index.css +0 -149
  997. package/dist/server/components/form-field/index.css +0 -40
  998. package/dist/server/components/form-section/index.css +0 -54
  999. package/dist/server/components/grid/index.css +0 -26
  1000. package/dist/server/components/grid-list/index.css +0 -96
  1001. package/dist/server/components/hover-card/index.css +0 -53
  1002. package/dist/server/components/image/index.css +0 -37
  1003. package/dist/server/components/input/index.css +0 -213
  1004. package/dist/server/components/invocation-rule-builder/index.css +0 -307
  1005. package/dist/server/components/json-schema-editor/index.css +0 -334
  1006. package/dist/server/components/json-viewer/index.css +0 -123
  1007. package/dist/server/components/kanban-board/index.css +0 -233
  1008. package/dist/server/components/kbd/index.css +0 -44
  1009. package/dist/server/components/keyboard-shortcuts/index.css +0 -86
  1010. package/dist/server/components/label/index.css +0 -19
  1011. package/dist/server/components/line-chart/index.css +0 -168
  1012. package/dist/server/components/link/index.css +0 -70
  1013. package/dist/server/components/load-more/index.css +0 -82
  1014. package/dist/server/components/masonry/index.css +0 -14
  1015. package/dist/server/components/matrix-chart/index.css +0 -56
  1016. package/dist/server/components/media-controls/index.css +0 -117
  1017. package/dist/server/components/menu-bar/index.css +0 -378
  1018. package/dist/server/components/message/index.css +0 -54
  1019. package/dist/server/components/modal/index.css +0 -143
  1020. package/dist/server/components/navigation-bar/index.css +0 -157
  1021. package/dist/server/components/navigation-item/index.css +0 -88
  1022. package/dist/server/components/number-input/index.css +0 -111
  1023. package/dist/server/components/pagination/index.css +0 -110
  1024. package/dist/server/components/payload-inspector/index.css +0 -760
  1025. package/dist/server/components/permission-matrix/index.css +0 -169
  1026. package/dist/server/components/phone-input/index.css +0 -108
  1027. package/dist/server/components/pin-input/index.css +0 -91
  1028. package/dist/server/components/popover/index.css +0 -124
  1029. package/dist/server/components/pricing-card/index.css +0 -131
  1030. package/dist/server/components/progress/index.css +0 -136
  1031. package/dist/server/components/radio-group/index.css +0 -246
  1032. package/dist/server/components/rating/index.css +0 -117
  1033. package/dist/server/components/resizable-panels/index.css +0 -101
  1034. package/dist/server/components/review-editor/index.css +0 -259
  1035. package/dist/server/components/run-step-timeline/index.css +0 -658
  1036. package/dist/server/components/schema-form/index.css +0 -107
  1037. package/dist/server/components/scroll-area/index.css +0 -74
  1038. package/dist/server/components/search-field/index.css +0 -162
  1039. package/dist/server/components/secret-value-field/index.css +0 -124
  1040. package/dist/server/components/section-heading/index.css +0 -72
  1041. package/dist/server/components/segmented-control/index.css +0 -237
  1042. package/dist/server/components/select/index.css +0 -150
  1043. package/dist/server/components/selection-popover/index.css +0 -205
  1044. package/dist/server/components/share-card/index.css +0 -121
  1045. package/dist/server/components/sheet/index.css +0 -176
  1046. package/dist/server/components/shortcut-hint/index.css +0 -28
  1047. package/dist/server/components/side-navigation/index.css +0 -220
  1048. package/dist/server/components/side-navigation-group/index.css +0 -109
  1049. package/dist/server/components/sidebar/index.css +0 -86
  1050. package/dist/server/components/skeleton/index.css +0 -31
  1051. package/dist/server/components/slider/index.css +0 -116
  1052. package/dist/server/components/sortable-list/index.css +0 -117
  1053. package/dist/server/components/spectrogram/index.css +0 -46
  1054. package/dist/server/components/spectrum-chart/index.css +0 -51
  1055. package/dist/server/components/speed-dial/index.css +0 -111
  1056. package/dist/server/components/spinner/index.css +0 -57
  1057. package/dist/server/components/stacked-list-item/index.css +0 -114
  1058. package/dist/server/components/stat/index.css +0 -70
  1059. package/dist/server/components/stat-group/index.css +0 -64
  1060. package/dist/server/components/status-dot/index.css +0 -114
  1061. package/dist/server/components/steps/index.css +0 -287
  1062. package/dist/server/components/surface/index.css +0 -25
  1063. package/dist/server/components/tab/index.css +0 -2
  1064. package/dist/server/components/tab-list/index.css +0 -2
  1065. package/dist/server/components/tab-panel/index.css +0 -2
  1066. package/dist/server/components/table/index.css +0 -187
  1067. package/dist/server/components/table-body/index.css +0 -2
  1068. package/dist/server/components/table-cell/index.css +0 -2
  1069. package/dist/server/components/table-header/index.css +0 -2
  1070. package/dist/server/components/table-header-cell/index.css +0 -2
  1071. package/dist/server/components/table-row/index.css +0 -2
  1072. package/dist/server/components/tabs/index.css +0 -152
  1073. package/dist/server/components/tag-input/index.css +0 -170
  1074. package/dist/server/components/textarea/index.css +0 -118
  1075. package/dist/server/components/time-field/index.css +0 -58
  1076. package/dist/server/components/timeline/index.css +0 -143
  1077. package/dist/server/components/toast-region/index.css +0 -227
  1078. package/dist/server/components/toggle/index.css +0 -109
  1079. package/dist/server/components/toolbar/index.css +0 -63
  1080. package/dist/server/components/tooltip/index.css +0 -50
  1081. package/dist/server/components/transfer-list/index.css +0 -132
  1082. package/dist/server/components/tree/index.css +0 -341
  1083. package/dist/server/components/typography/index.css +0 -115
  1084. package/dist/server/components/virtual-list/index.css +0 -30
  1085. package/dist/server/components/waveform/index.css +0 -55
  1086. package/dist/server/index.css +0 -15602
@@ -0,0 +1,3834 @@
1
+ import {
2
+ Markdown_editor
3
+ } from "./index.server-xjmx6rm8.js";
4
+ import {
5
+ useIntersection
6
+ } from "./index.server-kb6w1a7c.js";
7
+ import {
8
+ useAnnouncer
9
+ } from "./index.server-gbzsb04q.js";
10
+ import {
11
+ formatBytes
12
+ } from "./index.server-w6am2dxc.js";
13
+ import {
14
+ stringify
15
+ } from "./index.server-nwjjp9t6.js";
16
+ import {
17
+ deriveMessageParts,
18
+ getMessageText,
19
+ getMessages,
20
+ pairToolCallsWithResults,
21
+ resolveMessageReasoning,
22
+ resolveMessageSteps,
23
+ resolveMessageSuggestions
24
+ } from "./index.server-578qndbg.js";
25
+ import {
26
+ useReducedMotion
27
+ } from "./index.server-8hdvr9bt.js";
28
+ import {
29
+ Arrow_up,
30
+ Check_check,
31
+ Chevron_up,
32
+ Circle_alert,
33
+ Paperclip,
34
+ Square
35
+ } from "./index.server-2fa12eg1.js";
36
+ import {
37
+ Ellipsis,
38
+ Pencil
39
+ } from "./index.server-nav1z5d8.js";
40
+ import {
41
+ Search
42
+ } from "./index.server-bte0dfkh.js";
43
+ import {
44
+ X
45
+ } from "./index.server-3fvz5gak.js";
46
+ import {
47
+ Chevron_down,
48
+ Chevron_left,
49
+ Chevron_right,
50
+ Rotate_ccw
51
+ } from "./index.server-e10j3s54.js";
52
+ import {
53
+ File_code
54
+ } from "./index.server-p78n7r6g.js";
55
+ import {
56
+ File_text
57
+ } from "./index.server-y16zcjfw.js";
58
+ import {
59
+ Code_block
60
+ } from "./index.server-2g8qr4nk.js";
61
+ import {
62
+ Copy_button
63
+ } from "./index.server-3cwyrz8f.js";
64
+ import {
65
+ Check
66
+ } from "./index.server-y0q949bm.js";
67
+ import {
68
+ Button
69
+ } from "./index.server-34p02y48.js";
70
+ import {
71
+ classNames
72
+ } from "./index.server-z7nvkz8v.js";
73
+ import {
74
+ __require
75
+ } from "./index.server-37x76zdn.js";
76
+
77
+ // src/components/chat/chat.svelte
78
+ import * as $36 from "svelte/internal/server";
79
+
80
+ // src/components/chat/container/chat.svelte
81
+ import * as $35 from "svelte/internal/server";
82
+ import { tick as tick2, untrack as untrack2 } from "svelte";
83
+
84
+ // src/components/chat/message/chat-date-separator.svelte
85
+ import * as $ from "svelte/internal/server";
86
+ function Chat_date_separator($$renderer, $$props) {
87
+ $$renderer.component(($$renderer2) => {
88
+ let {
89
+ date,
90
+ dateFormatter,
91
+ class: className,
92
+ $$slots,
93
+ $$events,
94
+ ...rest
95
+ } = $$props;
96
+ const dateObj = $.derived(() => typeof date === "string" ? new Date(date) : date);
97
+ const isValidDate = $.derived(() => !isNaN(dateObj().getTime()));
98
+ const formattedDate = $.derived(() => {
99
+ if (!isValidDate()) {
100
+ return "Invalid date";
101
+ }
102
+ if (dateFormatter) {
103
+ return dateFormatter(dateObj());
104
+ }
105
+ const now = new Date;
106
+ const today = new Date(now.getFullYear(), now.getMonth(), now.getDate());
107
+ const yesterday = new Date(now.getFullYear(), now.getMonth(), now.getDate() - 1);
108
+ const dateOnly = new Date(dateObj().getFullYear(), dateObj().getMonth(), dateObj().getDate());
109
+ if (dateOnly.getTime() === today.getTime()) {
110
+ return "Today";
111
+ }
112
+ if (dateOnly.getTime() === yesterday.getTime()) {
113
+ return "Yesterday";
114
+ }
115
+ return new Intl.DateTimeFormat(undefined, { weekday: "long", month: "long", day: "numeric" }).format(dateObj());
116
+ });
117
+ const isoDate = $.derived(() => isValidDate() ? dateObj().toISOString().split("T")[0] : "");
118
+ $$renderer2.push(`<div${$.attributes({
119
+ class: $.clsx(classNames("chat-date-separator", className)),
120
+ role: "separator",
121
+ "aria-label": `Messages from ${formattedDate()}`,
122
+ ...rest
123
+ }, "svelte-1ohxdji")}><span class="chat-date-separator-line svelte-1ohxdji" aria-hidden="true"></span> `);
124
+ if (isValidDate()) {
125
+ $$renderer2.push("<!--[0-->");
126
+ $$renderer2.push(`<time class="chat-date-separator-text svelte-1ohxdji"${$.attr("datetime", isoDate())}>${$.escape(formattedDate())}</time>`);
127
+ } else {
128
+ $$renderer2.push("<!--[-1-->");
129
+ $$renderer2.push(`<span class="chat-date-separator-text svelte-1ohxdji">${$.escape(formattedDate())}</span>`);
130
+ }
131
+ $$renderer2.push(`<!--]--> <span class="chat-date-separator-line svelte-1ohxdji" aria-hidden="true"></span></div>`);
132
+ });
133
+ }
134
+ // src/components/chat/message/chat-message.svelte
135
+ import * as $17 from "svelte/internal/server";
136
+
137
+ // src/components/chat/message/chat-message-parts-renderer.svelte
138
+ import * as $16 from "svelte/internal/server";
139
+
140
+ // src/components/chat/message/chat-message-parts.ts
141
+ function toRenderUnits(parts) {
142
+ const units = [];
143
+ let imageRun = [];
144
+ let stepRun = [];
145
+ let suggestionRun = [];
146
+ const flushImages = () => {
147
+ if (imageRun.length > 0) {
148
+ units.push({ kind: "images", images: imageRun, key: `images:${imageRun[0].key}` });
149
+ imageRun = [];
150
+ }
151
+ };
152
+ const flushSteps = () => {
153
+ if (stepRun.length > 0) {
154
+ units.push({ kind: "steps", steps: stepRun, key: `steps:${stepRun[0].key}` });
155
+ stepRun = [];
156
+ }
157
+ };
158
+ const flushSuggestions = () => {
159
+ if (suggestionRun.length > 0) {
160
+ units.push({
161
+ kind: "suggestions",
162
+ suggestions: suggestionRun,
163
+ key: `suggestions:${suggestionRun[0].key}`
164
+ });
165
+ suggestionRun = [];
166
+ }
167
+ };
168
+ for (const part of parts) {
169
+ if (part.type === "image") {
170
+ flushSteps();
171
+ flushSuggestions();
172
+ imageRun.push(part);
173
+ continue;
174
+ }
175
+ if (part.type === "step") {
176
+ flushImages();
177
+ flushSuggestions();
178
+ stepRun.push(part);
179
+ continue;
180
+ }
181
+ if (part.type === "suggestion") {
182
+ flushImages();
183
+ flushSteps();
184
+ suggestionRun.push(part);
185
+ continue;
186
+ }
187
+ flushImages();
188
+ flushSteps();
189
+ flushSuggestions();
190
+ units.push({ kind: "part", part, key: part.key });
191
+ }
192
+ flushImages();
193
+ flushSteps();
194
+ flushSuggestions();
195
+ return units;
196
+ }
197
+
198
+ // src/components/chat/message/parts/markdown-part.svelte
199
+ import * as $4 from "svelte/internal/server";
200
+
201
+ // src/components/chat/message/message-content.svelte
202
+ import * as $3 from "svelte/internal/server";
203
+
204
+ // src/components/chat/message/markdown-preview.svelte
205
+ import * as $2 from "svelte/internal/server";
206
+ function Markdown_preview($$renderer, $$props) {
207
+ $$renderer.component(($$renderer2) => {
208
+ let { content, class: className, $$slots, $$events, ...rest } = $$props;
209
+ let renderedHtml = "";
210
+ $$renderer2.push(`<div${$2.attributes({
211
+ class: $2.clsx(classNames("cinder-markdown-content message-content-preview", className)),
212
+ ...rest
213
+ })}>`);
214
+ if (renderedHtml) {
215
+ $$renderer2.push("<!--[0-->");
216
+ $$renderer2.push(`${$2.html(renderedHtml)}`);
217
+ } else {
218
+ $$renderer2.push("<!--[-1-->");
219
+ $$renderer2.push(`<p>${$2.escape(content)}</p>`);
220
+ }
221
+ $$renderer2.push(`<!--]--></div>`);
222
+ });
223
+ }
224
+
225
+ // src/components/chat/message/message-content.svelte
226
+ function Message_content($$renderer, $$props) {
227
+ $$renderer.component(($$renderer2) => {
228
+ let {
229
+ content,
230
+ expanded = true,
231
+ threshold = 500,
232
+ streaming = false,
233
+ overrideContent,
234
+ class: className,
235
+ $$slots,
236
+ $$events,
237
+ ...rest
238
+ } = $$props;
239
+ function findSafeBoundary(text, limit) {
240
+ const paragraphBreak = text.lastIndexOf(`
241
+
242
+ `, limit);
243
+ if (paragraphBreak > 0)
244
+ return paragraphBreak;
245
+ const lineBreak = text.lastIndexOf(`
246
+ `, limit);
247
+ if (lineBreak > 0)
248
+ return lineBreak;
249
+ return limit;
250
+ }
251
+ function splitStreamingContent(text) {
252
+ const codeFenceCount = (text.match(/```/g) ?? []).length;
253
+ if (codeFenceCount % 2 !== 0) {
254
+ const lastFenceIndex = text.lastIndexOf("```");
255
+ return {
256
+ rendered: text.slice(0, lastFenceIndex),
257
+ tail: text.slice(lastFenceIndex)
258
+ };
259
+ }
260
+ const boundary = findSafeBoundary(text, text.length);
261
+ return {
262
+ rendered: text.slice(0, boundary),
263
+ tail: text.slice(boundary)
264
+ };
265
+ }
266
+ const effectiveContent = $3.derived(() => overrideContent ?? content);
267
+ const streamingSplit = $3.derived(() => {
268
+ if (!streaming)
269
+ return null;
270
+ return splitStreamingContent(effectiveContent());
271
+ });
272
+ const displayContent = $3.derived(() => {
273
+ if (streaming) {
274
+ return streamingSplit()?.rendered ?? "";
275
+ }
276
+ if (expanded || effectiveContent().length <= threshold) {
277
+ return effectiveContent();
278
+ }
279
+ const boundary = findSafeBoundary(effectiveContent(), threshold);
280
+ return effectiveContent().slice(0, boundary);
281
+ });
282
+ const streamingTail = $3.derived(() => streaming ? streamingSplit()?.tail ?? "" : "");
283
+ const isTruncated = $3.derived(() => !streaming && !expanded && effectiveContent().length > threshold);
284
+ $$renderer2.push(`<div${$3.attributes({
285
+ class: $3.clsx(classNames("message-content", streaming && "message-content-streaming", className)),
286
+ ...rest
287
+ }, "svelte-1ntys16")}>`);
288
+ if (displayContent()) {
289
+ $$renderer2.push("<!--[0-->");
290
+ Markdown_preview($$renderer2, { content: displayContent() });
291
+ } else {
292
+ $$renderer2.push("<!--[-1-->");
293
+ }
294
+ $$renderer2.push(`<!--]--> `);
295
+ if (streaming && streamingTail()) {
296
+ $$renderer2.push("<!--[0-->");
297
+ $$renderer2.push(`<span class="message-content-tail svelte-1ntys16">${$3.escape(streamingTail())}</span>`);
298
+ } else {
299
+ $$renderer2.push("<!--[-1-->");
300
+ }
301
+ $$renderer2.push(`<!--]--> `);
302
+ if (streaming) {
303
+ $$renderer2.push("<!--[0-->");
304
+ $$renderer2.push(`<span class="message-content-cursor svelte-1ntys16" aria-hidden="true"></span>`);
305
+ } else {
306
+ $$renderer2.push("<!--[-1-->");
307
+ }
308
+ $$renderer2.push(`<!--]--> `);
309
+ if (isTruncated()) {
310
+ $$renderer2.push("<!--[0-->");
311
+ $$renderer2.push(`<span class="message-content-ellipsis svelte-1ntys16" aria-hidden="true">...</span>`);
312
+ } else {
313
+ $$renderer2.push("<!--[-1-->");
314
+ }
315
+ $$renderer2.push(`<!--]--></div>`);
316
+ });
317
+ }
318
+
319
+ // src/components/chat/message/parts/markdown-part.svelte
320
+ function Markdown_part($$renderer, $$props) {
321
+ $$renderer.component(($$renderer2) => {
322
+ let { part } = $$props;
323
+ Message_content($$renderer2, {
324
+ content: part.content,
325
+ streaming: part.streaming,
326
+ expanded: part.expanded
327
+ });
328
+ });
329
+ }
330
+
331
+ // src/components/chat/message/parts/tool-call-part.svelte
332
+ import * as $7 from "svelte/internal/server";
333
+
334
+ // src/components/chat/message/tool-call-group.svelte
335
+ import * as $6 from "svelte/internal/server";
336
+ // src/components/chat/message/tool-payload-code.svelte
337
+ import * as $5 from "svelte/internal/server";
338
+ var renderingModulePromise;
339
+ var highlighterPromise;
340
+ async function getRenderingModule() {
341
+ renderingModulePromise ??= import("@lostgradient/cinder/markdown/rendering");
342
+ return renderingModulePromise;
343
+ }
344
+ async function getJsonHighlighter() {
345
+ const renderingModule = await getRenderingModule();
346
+ highlighterPromise ??= renderingModule.getHighlighter();
347
+ return highlighterPromise;
348
+ }
349
+ function Tool_payload_code($$renderer, $$props) {
350
+ $$renderer.component(($$renderer2) => {
351
+ let { code, class: className } = $$props;
352
+ async function highlightJson(source, language) {
353
+ const { isLanguageSupported } = await getRenderingModule();
354
+ const highlighter = await getJsonHighlighter();
355
+ const lang = isLanguageSupported(language) ? language : "json";
356
+ return highlighter.codeToHtml(source, { lang, theme: "depict" });
357
+ }
358
+ $$renderer2.push(`<div${$5.attr_class($5.clsx(classNames("tool-payload-code", className)), "svelte-1fw63o4")}>`);
359
+ Code_block($$renderer2, { code, language: "json", highlighter: highlightJson });
360
+ $$renderer2.push(`<!----></div>`);
361
+ });
362
+ }
363
+
364
+ // src/components/chat/message/tool-call-group.svelte
365
+ function Tool_call_group($$renderer, $$props) {
366
+ $$renderer.component(($$renderer2) => {
367
+ let {
368
+ pair,
369
+ expanded = false,
370
+ ontoggle,
371
+ class: className,
372
+ $$slots,
373
+ $$events,
374
+ ...rest
375
+ } = $$props;
376
+ const detailsId = $6.derived(() => `tool-call-details-${pair.call.id}`);
377
+ const hasResult = $6.derived(() => !!pair.result);
378
+ const isError = $6.derived(() => pair.result?.outcome === "error");
379
+ const isSuccess = $6.derived(() => pair.result?.outcome === "success");
380
+ const isActionRequired = $6.derived(() => pair.result?.outcome === "action_required");
381
+ const status = $6.derived(() => isError() ? "error" : isSuccess() ? "success" : isActionRequired() ? "action-required" : "pending");
382
+ const errorMessage = $6.derived(() => pair.result?.error?.message ?? "");
383
+ const actionMessage = $6.derived(() => pair.result?.action?.message ?? "This tool call requires action.");
384
+ const formattedArguments = $6.derived(() => stringify(pair.call.arguments));
385
+ const formattedResult = $6.derived(() => pair.result ? stringify(pair.result.content) : "");
386
+ function handleToggle() {
387
+ ontoggle?.();
388
+ }
389
+ $$renderer2.push(`<div${$6.attributes({
390
+ class: $6.clsx(classNames("tool-call-group", className)),
391
+ "data-status": status(),
392
+ ...rest
393
+ }, "svelte-1xmm5k6")}><button type="button" class="tool-call-header svelte-1xmm5k6"${$6.attr("aria-expanded", expanded)}${$6.attr("aria-controls", detailsId())}${$6.attr("aria-label", `Toggle tool call details for ${pair.call.name}`)}><span class="tool-call-icon svelte-1xmm5k6" aria-hidden="true">`);
394
+ if (isError()) {
395
+ $$renderer2.push("<!--[0-->");
396
+ X($$renderer2, { class: "icon-xs" });
397
+ } else if (isSuccess()) {
398
+ $$renderer2.push("<!--[1-->");
399
+ Check($$renderer2, { class: "icon-xs" });
400
+ } else if (isActionRequired()) {
401
+ $$renderer2.push("<!--[2-->");
402
+ Circle_alert($$renderer2, { class: "icon-xs" });
403
+ } else {
404
+ $$renderer2.push("<!--[-1-->");
405
+ Ellipsis($$renderer2, { class: "icon-xs" });
406
+ }
407
+ $$renderer2.push(`<!--]--></span> <span class="tool-call-name svelte-1xmm5k6">${$6.escape(pair.call.name)}</span> <span class="tool-call-status svelte-1xmm5k6" role="status" aria-live="polite">`);
408
+ if (isError()) {
409
+ $$renderer2.push("<!--[0-->");
410
+ $$renderer2.push(`Failed`);
411
+ } else if (isSuccess()) {
412
+ $$renderer2.push("<!--[1-->");
413
+ $$renderer2.push(`Complete`);
414
+ } else if (isActionRequired()) {
415
+ $$renderer2.push("<!--[2-->");
416
+ $$renderer2.push(`Action required`);
417
+ } else {
418
+ $$renderer2.push("<!--[-1-->");
419
+ $$renderer2.push(`Pending`);
420
+ }
421
+ $$renderer2.push(`<!--]--></span> <span class="tool-call-chevron svelte-1xmm5k6" aria-hidden="true"${$6.attr("data-expanded", expanded)}>`);
422
+ Chevron_down($$renderer2, { class: "icon-xs" });
423
+ $$renderer2.push(`<!----></span></button> `);
424
+ if (expanded) {
425
+ $$renderer2.push("<!--[0-->");
426
+ $$renderer2.push(`<div${$6.attr("id", detailsId())} class="tool-call-details svelte-1xmm5k6" role="region" aria-label="Tool details"><div class="tool-call-section svelte-1xmm5k6"><h4 class="tool-call-section-title svelte-1xmm5k6">Arguments</h4> `);
427
+ Tool_payload_code($$renderer2, { code: formattedArguments() });
428
+ $$renderer2.push(`<!----></div> `);
429
+ if (hasResult()) {
430
+ $$renderer2.push("<!--[0-->");
431
+ $$renderer2.push(`<div class="tool-call-section svelte-1xmm5k6"${$6.attr("data-error", isError() || undefined)}><h4 class="tool-call-section-title svelte-1xmm5k6">Result</h4> `);
432
+ if (isError()) {
433
+ $$renderer2.push("<!--[0-->");
434
+ $$renderer2.push(`<div class="tool-call-error svelte-1xmm5k6" role="alert">${$6.escape(errorMessage() || formattedResult())}</div>`);
435
+ } else if (isActionRequired()) {
436
+ $$renderer2.push("<!--[1-->");
437
+ $$renderer2.push(`<div class="tool-call-action svelte-1xmm5k6" role="status">${$6.escape(actionMessage())}</div>`);
438
+ } else {
439
+ $$renderer2.push("<!--[-1-->");
440
+ Tool_payload_code($$renderer2, { code: formattedResult() });
441
+ }
442
+ $$renderer2.push(`<!--]--></div>`);
443
+ } else {
444
+ $$renderer2.push("<!--[-1-->");
445
+ }
446
+ $$renderer2.push(`<!--]--></div>`);
447
+ } else {
448
+ $$renderer2.push("<!--[-1-->");
449
+ }
450
+ $$renderer2.push(`<!--]--></div>`);
451
+ });
452
+ }
453
+
454
+ // src/components/chat/message/parts/tool-call-part.svelte
455
+ function Tool_call_part($$renderer, $$props) {
456
+ $$renderer.component(($$renderer2) => {
457
+ const noop = () => {};
458
+ let { part, expanded = false, ontoggle } = $$props;
459
+ const handleToggle = $7.derived(() => ontoggle ?? noop);
460
+ Tool_call_group($$renderer2, { pair: part.pair, expanded, ontoggle: handleToggle() });
461
+ });
462
+ }
463
+
464
+ // src/components/chat/message/parts/tool-result-part.svelte
465
+ import * as $8 from "svelte/internal/server";
466
+ function Tool_result_part($$renderer, $$props) {
467
+ $$renderer.component(($$renderer2) => {
468
+ let { part } = $$props;
469
+ const result = $8.derived(() => part.result);
470
+ const isError = $8.derived(() => result().outcome === "error");
471
+ const isActionRequired = $8.derived(() => result().outcome === "action_required");
472
+ const formatted = $8.derived(() => {
473
+ if (result().outcome === "error" && result().error) {
474
+ return result().error.message;
475
+ }
476
+ if (result().outcome === "action_required") {
477
+ return result().action?.message ?? "This tool call requires action.";
478
+ }
479
+ return stringify(result().content);
480
+ });
481
+ $$renderer2.push(`<div class="chat-message-tool-result svelte-s62laq"${$8.attr("data-error", isError() || undefined)}${$8.attr("data-action-required", isActionRequired() || undefined)}>`);
482
+ if (isError()) {
483
+ $$renderer2.push("<!--[0-->");
484
+ $$renderer2.push(`<div class="chat-message-tool-error svelte-s62laq" role="alert">${$8.escape(formatted())}</div>`);
485
+ } else if (isActionRequired()) {
486
+ $$renderer2.push("<!--[1-->");
487
+ $$renderer2.push(`<div class="chat-message-tool-action" role="status">${$8.escape(formatted())}</div>`);
488
+ } else {
489
+ $$renderer2.push("<!--[-1-->");
490
+ Tool_payload_code($$renderer2, { code: formatted() });
491
+ }
492
+ $$renderer2.push(`<!--]--></div>`);
493
+ });
494
+ }
495
+
496
+ // src/components/chat/message/parts/tool-approval-part.svelte
497
+ import * as $9 from "svelte/internal/server";
498
+ function Tool_approval_part($$renderer, $$props) {
499
+ $$renderer.component(($$renderer2) => {
500
+ let { part, onapprove, ondeny } = $$props;
501
+ const isPending = $9.derived(() => part.approved === undefined);
502
+ const isApproved = $9.derived(() => part.approved === true);
503
+ const isDenied = $9.derived(() => part.approved === false);
504
+ const actionMessage = $9.derived(() => part.action.message ?? "This tool call requires your approval before it can continue.");
505
+ const actionSchema = $9.derived(() => part.action.schema !== undefined ? stringify(part.action.schema) : undefined);
506
+ const safeKey = $9.derived(() => part.key.replace(/[^a-z0-9-]/gi, "-"));
507
+ const labelId = $9.derived(() => `tool-approval-label-${safeKey()}`);
508
+ const descId = $9.derived(() => `tool-approval-desc-${safeKey()}`);
509
+ function handleApprove() {
510
+ if (!isPending())
511
+ return;
512
+ onapprove?.(part.toolCallId);
513
+ }
514
+ function handleDeny() {
515
+ if (!isPending())
516
+ return;
517
+ ondeny?.(part.toolCallId);
518
+ }
519
+ function handleKeydown(event) {
520
+ if (event.key === "Escape" && isPending()) {
521
+ handleDeny();
522
+ }
523
+ }
524
+ $$renderer2.push(`<div class="chat-tool-approval svelte-vsdezw" role="group" tabindex="-1"${$9.attr("aria-labelledby", labelId())}${$9.attr("aria-describedby", descId())} data-cinder-tool-approval=""${$9.attr("data-cinder-status", isApproved() ? "approved" : isDenied() ? "denied" : "pending")}><div class="chat-tool-approval-header svelte-vsdezw"><span class="chat-tool-approval-icon svelte-vsdezw" aria-hidden="true">`);
525
+ if (isApproved()) {
526
+ $$renderer2.push("<!--[0-->");
527
+ $$renderer2.push(`✓`);
528
+ } else if (isDenied()) {
529
+ $$renderer2.push("<!--[1-->");
530
+ $$renderer2.push(`✕`);
531
+ } else {
532
+ $$renderer2.push("<!--[-1-->");
533
+ $$renderer2.push(`⚠`);
534
+ }
535
+ $$renderer2.push(`<!--]--></span> <span${$9.attr("id", labelId())} class="chat-tool-approval-title svelte-vsdezw">`);
536
+ if (isApproved()) {
537
+ $$renderer2.push("<!--[0-->");
538
+ $$renderer2.push(`Approved: <code class="chat-tool-approval-name svelte-vsdezw">${$9.escape(part.toolName)}</code>`);
539
+ } else if (isDenied()) {
540
+ $$renderer2.push("<!--[1-->");
541
+ $$renderer2.push(`Denied: <code class="chat-tool-approval-name svelte-vsdezw">${$9.escape(part.toolName)}</code>`);
542
+ } else {
543
+ $$renderer2.push("<!--[-1-->");
544
+ $$renderer2.push(`Action required: <code class="chat-tool-approval-name svelte-vsdezw">${$9.escape(part.toolName)}</code>`);
545
+ }
546
+ $$renderer2.push(`<!--]--></span></div> <p${$9.attr("id", descId())} class="chat-tool-approval-message svelte-vsdezw">${$9.escape(actionMessage())}</p> `);
547
+ if (actionSchema() !== undefined) {
548
+ $$renderer2.push("<!--[0-->");
549
+ $$renderer2.push(`<details class="chat-tool-approval-args svelte-vsdezw"><summary class="chat-tool-approval-args-toggle svelte-vsdezw">View parameters</summary> <pre class="chat-tool-approval-args-code svelte-vsdezw"><code>${$9.escape(actionSchema())}</code></pre></details>`);
550
+ } else {
551
+ $$renderer2.push("<!--[-1-->");
552
+ }
553
+ $$renderer2.push(`<!--]--> `);
554
+ if (isPending()) {
555
+ $$renderer2.push("<!--[0-->");
556
+ $$renderer2.push(`<div class="chat-tool-approval-actions svelte-vsdezw"><button type="button" class="chat-tool-approval-btn chat-tool-approval-btn-approve svelte-vsdezw"${$9.attr("disabled", onapprove === undefined, true)}>Approve</button> <button type="button" class="chat-tool-approval-btn chat-tool-approval-btn-deny svelte-vsdezw"${$9.attr("disabled", ondeny === undefined, true)}>Reject</button></div>`);
557
+ } else {
558
+ $$renderer2.push("<!--[-1-->");
559
+ }
560
+ $$renderer2.push(`<!--]--></div>`);
561
+ });
562
+ }
563
+
564
+ // src/components/chat/message/parts/reasoning-part.svelte
565
+ import * as $10 from "svelte/internal/server";
566
+ function Reasoning_part($$renderer, $$props) {
567
+ $$renderer.component(($$renderer2) => {
568
+ let { part, expanded = false, ontoggle } = $$props;
569
+ const labelId = $10.derived(() => `reasoning-label-${part.key.replace(/[^a-z0-9-]/gi, "-")}`);
570
+ const contentId = $10.derived(() => `reasoning-content-${part.key.replace(/[^a-z0-9-]/gi, "-")}`);
571
+ const approximateTokenCount = $10.derived(() => Math.round(part.content.length / 4));
572
+ const tokenDisplay = $10.derived(() => approximateTokenCount() > 0 ? ` (${approximateTokenCount().toLocaleString()} tokens)` : "");
573
+ let wasStreaming = false;
574
+ let announced = false;
575
+ const announcementText = $10.derived(() => announced ? "Reasoning complete." : "");
576
+ function handleToggle() {
577
+ if (!part.streaming) {
578
+ ontoggle?.();
579
+ }
580
+ }
581
+ $$renderer2.push(`<div class="chat-reasoning svelte-11vyvtm" data-cinder-reasoning=""${$10.attr("data-cinder-streaming", part.streaming ? "" : undefined)}${$10.attr("data-cinder-expanded", expanded ? "" : undefined)}><button type="button" class="chat-reasoning-toggle svelte-11vyvtm"${$10.attr("id", labelId())}${$10.attr("aria-expanded", expanded)}${$10.attr("aria-controls", contentId())}${$10.attr("disabled", part.streaming, true)}><span class="chat-reasoning-label svelte-11vyvtm" aria-hidden="true">`);
582
+ if (part.streaming) {
583
+ $$renderer2.push("<!--[0-->");
584
+ $$renderer2.push(`<span class="chat-reasoning-dot svelte-11vyvtm" aria-hidden="true"></span>`);
585
+ } else {
586
+ $$renderer2.push("<!--[-1-->");
587
+ }
588
+ $$renderer2.push(`<!--]--> Reasoning${$10.escape(tokenDisplay())}</span> <span class="sr-only svelte-11vyvtm">`);
589
+ if (part.streaming) {
590
+ $$renderer2.push("<!--[0-->");
591
+ $$renderer2.push(`Reasoning in progress`);
592
+ } else if (expanded) {
593
+ $$renderer2.push("<!--[1-->");
594
+ $$renderer2.push(`Collapse reasoning`);
595
+ } else {
596
+ $$renderer2.push("<!--[-1-->");
597
+ $$renderer2.push(`Expand reasoning`);
598
+ }
599
+ $$renderer2.push(`<!--]--></span> <span class="chat-reasoning-chevron svelte-11vyvtm" aria-hidden="true">${$10.escape(expanded ? "▲" : "▼")}</span></button> <div class="chat-reasoning-body svelte-11vyvtm"><div${$10.attr("id", contentId())} class="chat-reasoning-content svelte-11vyvtm"${$10.attr("aria-hidden", !expanded)}${$10.attr("aria-live", part.streaming ? "off" : undefined)}${$10.attr("aria-busy", part.streaming ? true : undefined)}>${$10.escape(part.content)}</div></div> <div class="sr-only svelte-11vyvtm" aria-live="polite" aria-atomic="true">${$10.escape(announcementText())}</div></div>`);
600
+ });
601
+ }
602
+
603
+ // src/components/chat/message/parts/step-part.svelte
604
+ import * as $11 from "svelte/internal/server";
605
+ function Step_part($$renderer, $$props) {
606
+ $$renderer.component(($$renderer2) => {
607
+ let { part } = $$props;
608
+ const statusIcon = { pending: "○", running: "◉", done: "●", error: "✕" };
609
+ const statusLabel = {
610
+ pending: "pending",
611
+ running: "in progress",
612
+ done: "complete",
613
+ error: "failed"
614
+ };
615
+ $$renderer2.push(`<li class="chat-step svelte-4godlk"${$11.attr("data-cinder-step-status", part.status)}${$11.attr("aria-current", part.status === "running" ? "step" : undefined)}><span class="chat-step-indicator svelte-4godlk" aria-hidden="true">${$11.escape(statusIcon[part.status])}</span> <span class="chat-step-body svelte-4godlk"><span class="chat-step-title svelte-4godlk">${$11.escape(part.title)} <span class="sr-only svelte-4godlk">— ${$11.escape(statusLabel[part.status])}</span></span> `);
616
+ if (part.content) {
617
+ $$renderer2.push("<!--[0-->");
618
+ $$renderer2.push(`<span class="chat-step-content svelte-4godlk">${$11.escape(part.content)}</span>`);
619
+ } else {
620
+ $$renderer2.push("<!--[-1-->");
621
+ }
622
+ $$renderer2.push(`<!--]--></span></li>`);
623
+ });
624
+ }
625
+
626
+ // src/components/chat/message/parts/suggestion-part.svelte
627
+ import * as $12 from "svelte/internal/server";
628
+ function Suggestion_part($$renderer, $$props) {
629
+ $$renderer.component(($$renderer2) => {
630
+ let { part, onsuggestionselect, tabindex = 0 } = $$props;
631
+ function handleClick() {
632
+ onsuggestionselect?.(part.label);
633
+ }
634
+ $$renderer2.push(`<button type="button" class="chat-suggestion-chip svelte-r2wk4e" data-cinder-suggestion=""${$12.attr("tabindex", tabindex)}>${$12.escape(part.label)}</button>`);
635
+ });
636
+ }
637
+
638
+ // src/components/chat/message/parts/image-part.svelte
639
+ import * as $15 from "svelte/internal/server";
640
+
641
+ // src/components/chat/message/message-attachments.svelte
642
+ import * as $14 from "svelte/internal/server";
643
+
644
+ // src/components/chat/message/image-lightbox.svelte
645
+ import * as $13 from "svelte/internal/server";
646
+ import { fade } from "svelte/transition";
647
+ function Image_lightbox($$renderer, $$props) {
648
+ $$renderer.component(($$renderer2) => {
649
+ let { images, initialIndex = 0, open = false, onclose } = $$props;
650
+ const reducedMotion = useReducedMotion();
651
+ const LIGHTBOX_FADE_MS = 150;
652
+ const fadeDuration = $13.derived(() => reducedMotion.current ? 0 : LIGHTBOX_FADE_MS);
653
+ const clampedInitialIndex = $13.derived(() => images.length > 0 ? Math.max(0, Math.min(initialIndex, images.length - 1)) : 0);
654
+ let navigationIndex = null;
655
+ const effectiveIndex = $13.derived(() => open ? navigationIndex ?? clampedInitialIndex() : clampedInitialIndex());
656
+ const hasMultiple = $13.derived(() => images.length > 1);
657
+ const currentImage = $13.derived(() => images[effectiveIndex()]);
658
+ const counterText = $13.derived(() => `${effectiveIndex() + 1} of ${images.length}`);
659
+ function close() {
660
+ navigationIndex = null;
661
+ open = false;
662
+ onclose?.();
663
+ }
664
+ function previous() {
665
+ navigationIndex = (effectiveIndex() - 1 + images.length) % images.length;
666
+ }
667
+ function next() {
668
+ navigationIndex = (effectiveIndex() + 1) % images.length;
669
+ }
670
+ function handleOverlayClick(event) {
671
+ if (event.target === event.currentTarget) {
672
+ close();
673
+ }
674
+ }
675
+ function handleKeyDown(event) {
676
+ switch (event.key) {
677
+ case "Escape":
678
+ event.preventDefault();
679
+ close();
680
+ break;
681
+ case "ArrowLeft":
682
+ if (hasMultiple()) {
683
+ event.preventDefault();
684
+ previous();
685
+ }
686
+ break;
687
+ case "ArrowRight":
688
+ if (hasMultiple()) {
689
+ event.preventDefault();
690
+ next();
691
+ }
692
+ break;
693
+ }
694
+ }
695
+ if (open && currentImage()) {
696
+ $$renderer2.push("<!--[0-->");
697
+ $$renderer2.push(`<div class="lightbox-overlay svelte-nzg1o2" role="dialog" aria-modal="true" aria-label="Image viewer" tabindex="-1"><button type="button" class="lightbox-close svelte-nzg1o2" aria-label="Close image viewer">`);
698
+ X($$renderer2, { size: 20 });
699
+ $$renderer2.push(`<!----></button> `);
700
+ if (hasMultiple()) {
701
+ $$renderer2.push("<!--[0-->");
702
+ $$renderer2.push(`<button type="button" class="lightbox-nav lightbox-nav-previous svelte-nzg1o2" aria-label="Previous image">`);
703
+ Chevron_left($$renderer2, { size: 24 });
704
+ $$renderer2.push(`<!----></button>`);
705
+ } else {
706
+ $$renderer2.push("<!--[-1-->");
707
+ }
708
+ $$renderer2.push(`<!--]--> <div class="lightbox-image-container svelte-nzg1o2"><img${$13.attr("src", currentImage().src)}${$13.attr("alt", currentImage().alt)} class="lightbox-image svelte-nzg1o2" decoding="async"/></div> `);
709
+ if (hasMultiple()) {
710
+ $$renderer2.push("<!--[0-->");
711
+ $$renderer2.push(`<button type="button" class="lightbox-nav lightbox-nav-next svelte-nzg1o2" aria-label="Next image">`);
712
+ Chevron_right($$renderer2, { size: 24 });
713
+ $$renderer2.push(`<!----></button> <div class="lightbox-counter svelte-nzg1o2" aria-live="polite" aria-atomic="true">${$13.escape(counterText())}</div>`);
714
+ } else {
715
+ $$renderer2.push("<!--[-1-->");
716
+ }
717
+ $$renderer2.push(`<!--]--></div>`);
718
+ } else {
719
+ $$renderer2.push("<!--[-1-->");
720
+ }
721
+ $$renderer2.push(`<!--]-->`);
722
+ $13.bind_props($$props, { open });
723
+ });
724
+ }
725
+
726
+ // src/components/chat/message/message-attachments.svelte
727
+ function Message_attachments($$renderer, $$props) {
728
+ $$renderer.component(($$renderer2) => {
729
+ let {
730
+ images,
731
+ loading = "lazy",
732
+ onimageload,
733
+ onimageerror,
734
+ class: className,
735
+ $$slots,
736
+ $$events,
737
+ ...rest
738
+ } = $$props;
739
+ const validImages = $14.derived(() => images.filter((item) => item.type === "image").map((image) => ({ image, url: getImageUrlFromContent(image) })).filter((item) => item.url !== ""));
740
+ let lightboxOpen = false;
741
+ let lightboxIndex = 0;
742
+ const lightboxImages = $14.derived(() => validImages().map(({ image, url }, index) => ({ src: url, alt: getAltText(image, index + 1) })));
743
+ function getImageUrlFromContent(image) {
744
+ if (image.type !== "image")
745
+ return "";
746
+ return image.url;
747
+ }
748
+ function getAltText(image, displayIndex) {
749
+ if (image.type !== "image")
750
+ return "";
751
+ if (image.text)
752
+ return image.text;
753
+ return `Image attachment ${displayIndex}`;
754
+ }
755
+ function handleLoad(index) {
756
+ onimageload?.(index);
757
+ }
758
+ function handleError(index, event) {
759
+ onimageerror?.(index, event);
760
+ }
761
+ function openLightbox(index) {
762
+ lightboxIndex = index;
763
+ lightboxOpen = true;
764
+ }
765
+ let $$settled = true;
766
+ let $$inner_renderer;
767
+ function $$render_inner($$renderer3) {
768
+ $$renderer3.push(`<div${$14.attributes({
769
+ class: $14.clsx(classNames("message-attachments", className)),
770
+ role: "list",
771
+ "aria-label": "Message attachments",
772
+ "data-count": validImages().length,
773
+ ...rest
774
+ }, "svelte-mmlgnv")}><!--[-->`);
775
+ const each_array = $14.ensure_array_like(validImages());
776
+ for (let loopIndex = 0, $$length = each_array.length;loopIndex < $$length; loopIndex++) {
777
+ let { image, url } = each_array[loopIndex];
778
+ const displayIndex = loopIndex + 1;
779
+ const alt = getAltText(image, displayIndex);
780
+ $$renderer3.push(`<figure class="message-attachment svelte-mmlgnv" role="listitem"><button type="button" class="message-attachment-button svelte-mmlgnv"${$14.attr("aria-label", `View image: ${alt}`)}><img${$14.attr("src", url)}${$14.attr("alt", alt)}${$14.attr("loading", loading)} decoding="async" class="message-attachment-image svelte-mmlgnv" onload="this.__e=event" onerror="this.__e=event"/></button> `);
781
+ if (alt && alt !== `Image attachment ${displayIndex}`) {
782
+ $$renderer3.push("<!--[0-->");
783
+ $$renderer3.push(`<figcaption class="sr-only svelte-mmlgnv">${$14.escape(alt)}</figcaption>`);
784
+ } else {
785
+ $$renderer3.push("<!--[-1-->");
786
+ }
787
+ $$renderer3.push(`<!--]--></figure>`);
788
+ }
789
+ $$renderer3.push(`<!--]--></div> `);
790
+ Image_lightbox($$renderer3, {
791
+ images: lightboxImages(),
792
+ initialIndex: lightboxIndex,
793
+ get open() {
794
+ return lightboxOpen;
795
+ },
796
+ set open($$value) {
797
+ lightboxOpen = $$value;
798
+ $$settled = false;
799
+ }
800
+ });
801
+ $$renderer3.push(`<!---->`);
802
+ }
803
+ do {
804
+ $$settled = true;
805
+ $$inner_renderer = $$renderer2.copy();
806
+ $$render_inner($$inner_renderer);
807
+ } while (!$$settled);
808
+ $$renderer2.subsume($$inner_renderer);
809
+ });
810
+ }
811
+
812
+ // src/components/chat/message/parts/image-part.svelte
813
+ function Image_part($$renderer, $$props) {
814
+ $$renderer.component(($$renderer2) => {
815
+ let { parts } = $$props;
816
+ const images = $15.derived(() => parts.map((part) => part.image));
817
+ Message_attachments($$renderer2, { images: images() });
818
+ });
819
+ }
820
+
821
+ // src/components/chat/message/chat-message-parts-renderer.svelte
822
+ function Chat_message_parts_renderer($$renderer, $$props) {
823
+ $$renderer.component(($$renderer2) => {
824
+ let {
825
+ parts,
826
+ messagePart,
827
+ expanded = false,
828
+ ontoggle,
829
+ onapprove,
830
+ ondeny,
831
+ reasoningExpanded = false,
832
+ onreasoning,
833
+ onsuggestionselect
834
+ } = $$props;
835
+ const units = $16.derived(() => toRenderUnits(parts));
836
+ let activeIndex = 0;
837
+ function activeChipIndex(count) {
838
+ return count === 0 ? 0 : Math.min(activeIndex, count - 1);
839
+ }
840
+ function handleToolbarKeydown(event, toolbar, count) {
841
+ if (count === 0)
842
+ return;
843
+ const current = Math.min(activeIndex, count - 1);
844
+ let next = current;
845
+ if (event.key === "ArrowRight") {
846
+ next = (current + 1) % count;
847
+ } else if (event.key === "ArrowLeft") {
848
+ next = (current - 1 + count) % count;
849
+ } else if (event.key === "Home") {
850
+ next = 0;
851
+ } else if (event.key === "End") {
852
+ next = count - 1;
853
+ } else {
854
+ return;
855
+ }
856
+ event.preventDefault();
857
+ activeIndex = next;
858
+ const chips = toolbar.querySelectorAll("[data-cinder-suggestion]");
859
+ chips[next]?.focus();
860
+ }
861
+ function renderDefault($$renderer3, part) {
862
+ if (part.type === "markdown") {
863
+ $$renderer3.push("<!--[0-->");
864
+ Markdown_part($$renderer3, { part });
865
+ } else if (part.type === "tool-call") {
866
+ $$renderer3.push("<!--[1-->");
867
+ Tool_call_part($$renderer3, { part, expanded, ontoggle });
868
+ } else if (part.type === "tool-result") {
869
+ $$renderer3.push("<!--[2-->");
870
+ Tool_result_part($$renderer3, { part });
871
+ } else if (part.type === "tool-approval") {
872
+ $$renderer3.push("<!--[3-->");
873
+ Tool_approval_part($$renderer3, { part, onapprove, ondeny });
874
+ } else if (part.type === "reasoning") {
875
+ $$renderer3.push("<!--[4-->");
876
+ Reasoning_part($$renderer3, { part, expanded: reasoningExpanded, ontoggle: onreasoning });
877
+ } else {
878
+ $$renderer3.push("<!--[-1-->");
879
+ $$renderer3.push(`<span data-cinder-unhandled-part="" aria-hidden="true"></span>`);
880
+ }
881
+ $$renderer3.push(`<!--]-->`);
882
+ }
883
+ $$renderer2.push(`<!--[-->`);
884
+ const each_array = $16.ensure_array_like(units());
885
+ for (let $$index_2 = 0, $$length = each_array.length;$$index_2 < $$length; $$index_2++) {
886
+ let unit = each_array[$$index_2];
887
+ if (unit.kind === "images") {
888
+ $$renderer2.push("<!--[0-->");
889
+ Image_part($$renderer2, { parts: unit.images });
890
+ } else if (unit.kind === "steps") {
891
+ $$renderer2.push("<!--[1-->");
892
+ $$renderer2.push(`<ol class="chat-step-list svelte-16hfc7o" aria-label="Steps"><!--[-->`);
893
+ const each_array_1 = $16.ensure_array_like(unit.steps);
894
+ for (let $$index = 0, $$length2 = each_array_1.length;$$index < $$length2; $$index++) {
895
+ let step = each_array_1[$$index];
896
+ Step_part($$renderer2, { part: step });
897
+ }
898
+ $$renderer2.push(`<!--]--></ol>`);
899
+ } else if (unit.kind === "suggestions") {
900
+ $$renderer2.push("<!--[2-->");
901
+ $$renderer2.push(`<div class="chat-suggestions svelte-16hfc7o" role="toolbar" aria-label="Suggested replies" data-cinder-suggested-replies=""><!--[-->`);
902
+ const each_array_2 = $16.ensure_array_like(unit.suggestions);
903
+ for (let index = 0, $$length2 = each_array_2.length;index < $$length2; index++) {
904
+ let suggestion = each_array_2[index];
905
+ Suggestion_part($$renderer2, {
906
+ part: suggestion,
907
+ onsuggestionselect,
908
+ tabindex: index === activeChipIndex(unit.suggestions.length) ? 0 : -1
909
+ });
910
+ }
911
+ $$renderer2.push(`<!--]--></div>`);
912
+ } else if (messagePart) {
913
+ $$renderer2.push("<!--[3-->");
914
+ messagePart($$renderer2, unit.part, renderDefault);
915
+ $$renderer2.push(`<!---->`);
916
+ } else {
917
+ $$renderer2.push("<!--[-1-->");
918
+ renderDefault($$renderer2, unit.part);
919
+ }
920
+ $$renderer2.push(`<!--]-->`);
921
+ }
922
+ $$renderer2.push(`<!--]-->`);
923
+ });
924
+ }
925
+
926
+ // src/components/chat/message/chat-message.svelte
927
+ var ROLE_LABELS = {
928
+ user: "You",
929
+ assistant: "Assistant",
930
+ system: "System",
931
+ developer: "Developer",
932
+ "tool-call": "Tool Call",
933
+ "tool-result": "Tool Result",
934
+ snapshot: "Snapshot"
935
+ };
936
+ function Chat_message($$renderer, $$props) {
937
+ $$renderer.component(($$renderer2) => {
938
+ let {
939
+ message,
940
+ toolCallPairs = [],
941
+ expanded = true,
942
+ class: className,
943
+ searchMatch = false,
944
+ actions,
945
+ status,
946
+ messagePart,
947
+ showDefaultActions = true,
948
+ streaming = false,
949
+ overrideContent,
950
+ onexpandedchange,
951
+ onretry,
952
+ onedit,
953
+ approvedToolCallIds,
954
+ deniedToolCallIds,
955
+ onapprove,
956
+ ondeny,
957
+ reasoning,
958
+ steps,
959
+ suggestions,
960
+ reasoningExpanded = false,
961
+ onreasoning,
962
+ onsuggestionselect,
963
+ tabindex,
964
+ $$slots,
965
+ $$events,
966
+ ...rest
967
+ } = $$props;
968
+ let isEditing = false;
969
+ let editContent = "";
970
+ const canEdit = $17.derived(() => message.role === "user" && onedit !== undefined && !streaming);
971
+ function startEditing() {
972
+ editContent = textContent();
973
+ isEditing = true;
974
+ }
975
+ function cancelEditing() {
976
+ isEditing = false;
977
+ editContent = "";
978
+ }
979
+ function saveEdit() {
980
+ const trimmedContent = editContent.trim();
981
+ if (trimmedContent && trimmedContent !== textContent()) {
982
+ onedit?.({ messageId: message.id, content: trimmedContent });
983
+ }
984
+ isEditing = false;
985
+ editContent = "";
986
+ }
987
+ function handleEditKeyDown(event) {
988
+ if (event.key === "Escape") {
989
+ event.preventDefault();
990
+ cancelEditing();
991
+ }
992
+ if (event.key === "Enter" && (event.metaKey || event.ctrlKey)) {
993
+ event.preventDefault();
994
+ saveEdit();
995
+ }
996
+ }
997
+ const deliveryStatus = $17.derived(() => message.metadata?.["_deliveryStatus"]);
998
+ const isFailed = $17.derived(() => deliveryStatus() === "failed");
999
+ const textContent = $17.derived(() => getMessageText(message));
1000
+ const roleLabel = $17.derived(() => ROLE_LABELS[message.role] ?? message.role);
1001
+ const isToolCall = $17.derived(() => message.role === "tool-call");
1002
+ const toolPair = $17.derived(() => {
1003
+ if (!isToolCall() || !message.toolCall)
1004
+ return null;
1005
+ return toolCallPairs.find((pair) => pair.call.id === message.toolCall?.id) ?? null;
1006
+ });
1007
+ const messageParts = $17.derived(() => deriveMessageParts(message, {
1008
+ toolCallPair: toolPair() ?? undefined,
1009
+ overrideContent,
1010
+ streaming,
1011
+ expanded,
1012
+ approvedToolCallIds,
1013
+ deniedToolCallIds,
1014
+ reasoning,
1015
+ steps,
1016
+ suggestions
1017
+ }));
1018
+ const hasMarkdownBody = $17.derived(() => messageParts().some((part) => part.type === "markdown"));
1019
+ const bodyParts = $17.derived(() => messageParts().filter((part) => part.type !== "image"));
1020
+ const imageParts = $17.derived(() => messageParts().filter((part) => part.type === "image"));
1021
+ const TRUNCATE_THRESHOLD = 500;
1022
+ const messageId = $17.derived(() => `message-${message.id}`);
1023
+ const roleId = $17.derived(() => `${messageId()}-role`);
1024
+ function toggleExpanded() {
1025
+ expanded = !expanded;
1026
+ onexpandedchange?.(expanded);
1027
+ }
1028
+ $$renderer2.push(`<div${$17.attributes({
1029
+ class: $17.clsx(classNames("chat-message-wrapper", className)),
1030
+ "data-role": message.role,
1031
+ "data-hidden": message.hidden || undefined,
1032
+ "data-failed": isFailed() || undefined,
1033
+ "data-search-match": searchMatch || undefined,
1034
+ "data-tool-pair": isToolCall() && toolPair() ? "" : undefined,
1035
+ ...rest
1036
+ }, "svelte-1sxbmxn")}><article${$17.attr("id", messageId())} class="chat-message svelte-1sxbmxn"${$17.attr("aria-labelledby", isToolCall() && toolPair() ? undefined : roleId())}${$17.attr("aria-label", isToolCall() && toolPair() ? `Tool call: ${toolPair().call.name}` : undefined)}${$17.attr("tabindex", tabindex)}><header class="chat-message-header svelte-1sxbmxn"><span${$17.attr("id", roleId())} class="chat-message-role svelte-1sxbmxn">${$17.escape(roleLabel())}</span> `);
1037
+ if (status) {
1038
+ $$renderer2.push("<!--[0-->");
1039
+ $$renderer2.push(`<div class="chat-message-status svelte-1sxbmxn">`);
1040
+ status($$renderer2);
1041
+ $$renderer2.push(`<!----></div>`);
1042
+ } else {
1043
+ $$renderer2.push("<!--[-1-->");
1044
+ }
1045
+ $$renderer2.push(`<!--]--></header> <div class="chat-message-body svelte-1sxbmxn">`);
1046
+ if (isEditing) {
1047
+ $$renderer2.push("<!--[0-->");
1048
+ $$renderer2.push(`<div class="chat-message-edit svelte-1sxbmxn"><textarea class="chat-message-edit-textarea svelte-1sxbmxn" autofocus="" aria-label="Edit message content"${$17.attr("rows", Math.min(Math.max(editContent.split(`
1049
+ `).length, 2), 10))}>`);
1050
+ const $$body = $17.escape(editContent);
1051
+ if ($$body) {
1052
+ $$renderer2.push(`${$$body}`);
1053
+ } else {}
1054
+ $$renderer2.push(`</textarea> <div class="chat-message-edit-actions svelte-1sxbmxn"><button type="button" class="chat-message-edit-save svelte-1sxbmxn">Save &amp; Resend</button> <button type="button" class="chat-message-edit-cancel svelte-1sxbmxn">Cancel</button></div></div>`);
1055
+ } else {
1056
+ $$renderer2.push("<!--[-1-->");
1057
+ Chat_message_parts_renderer($$renderer2, {
1058
+ parts: bodyParts(),
1059
+ messagePart,
1060
+ expanded,
1061
+ ontoggle: toggleExpanded,
1062
+ onapprove,
1063
+ ondeny,
1064
+ reasoningExpanded,
1065
+ onreasoning,
1066
+ onsuggestionselect
1067
+ });
1068
+ $$renderer2.push(`<!----> `);
1069
+ if (hasMarkdownBody() && textContent().length > TRUNCATE_THRESHOLD) {
1070
+ $$renderer2.push("<!--[0-->");
1071
+ $$renderer2.push(`<button type="button" class="chat-message-expand svelte-1sxbmxn">${$17.escape(expanded ? "Show less" : "Show more")}</button>`);
1072
+ } else {
1073
+ $$renderer2.push("<!--[-1-->");
1074
+ }
1075
+ $$renderer2.push(`<!--]-->`);
1076
+ }
1077
+ $$renderer2.push(`<!--]--></div> `);
1078
+ if (imageParts().length > 0) {
1079
+ $$renderer2.push("<!--[0-->");
1080
+ Chat_message_parts_renderer($$renderer2, { parts: imageParts() });
1081
+ } else {
1082
+ $$renderer2.push("<!--[-1-->");
1083
+ }
1084
+ $$renderer2.push(`<!--]--> `);
1085
+ if (isFailed() && onretry) {
1086
+ $$renderer2.push("<!--[0-->");
1087
+ $$renderer2.push(`<div class="chat-message-failed-actions svelte-1sxbmxn"><span class="chat-message-failed-label svelte-1sxbmxn" role="alert">Failed to send</span> <button type="button" class="chat-message-retry svelte-1sxbmxn">`);
1088
+ Rotate_ccw($$renderer2, { class: "icon-xs" });
1089
+ $$renderer2.push(`<!----> Retry</button></div>`);
1090
+ } else {
1091
+ $$renderer2.push("<!--[-1-->");
1092
+ }
1093
+ $$renderer2.push(`<!--]--></article> `);
1094
+ if (actions || showDefaultActions && textContent() || canEdit()) {
1095
+ $$renderer2.push("<!--[0-->");
1096
+ $$renderer2.push(`<footer class="chat-message-footer svelte-1sxbmxn" role="none"><div class="chat-message-actions svelte-1sxbmxn" role="group" aria-label="Message actions">`);
1097
+ if (actions) {
1098
+ $$renderer2.push("<!--[0-->");
1099
+ actions($$renderer2);
1100
+ $$renderer2.push(`<!---->`);
1101
+ } else {
1102
+ $$renderer2.push("<!--[-1-->");
1103
+ }
1104
+ $$renderer2.push(`<!--]--> `);
1105
+ if (showDefaultActions && textContent()) {
1106
+ $$renderer2.push("<!--[0-->");
1107
+ Copy_button($$renderer2, {
1108
+ value: textContent(),
1109
+ label: "Copy message",
1110
+ copiedLabel: "Copied!",
1111
+ iconOnly: true,
1112
+ confirmDuration: 2000,
1113
+ class: "chat-message-action-button chat-message-copy"
1114
+ });
1115
+ } else {
1116
+ $$renderer2.push("<!--[-1-->");
1117
+ }
1118
+ $$renderer2.push(`<!--]--> `);
1119
+ if (canEdit()) {
1120
+ $$renderer2.push("<!--[0-->");
1121
+ $$renderer2.push(`<button type="button" class="chat-message-action-button chat-message-edit-button" aria-label="Edit message">`);
1122
+ Pencil($$renderer2, { class: "icon-xs" });
1123
+ $$renderer2.push(`<!----></button>`);
1124
+ } else {
1125
+ $$renderer2.push("<!--[-1-->");
1126
+ }
1127
+ $$renderer2.push(`<!--]--></div></footer>`);
1128
+ } else {
1129
+ $$renderer2.push("<!--[-1-->");
1130
+ }
1131
+ $$renderer2.push(`<!--]--></div>`);
1132
+ $17.bind_props($$props, { expanded });
1133
+ });
1134
+ }
1135
+ // src/components/chat/input/attachment-kind.ts
1136
+ var CODE_MIME_TYPES = new Set([
1137
+ "application/json",
1138
+ "application/javascript",
1139
+ "application/typescript",
1140
+ "application/xml",
1141
+ "application/yaml",
1142
+ "application/x-yaml",
1143
+ "application/x-sh",
1144
+ "application/sql",
1145
+ "application/toml"
1146
+ ]);
1147
+ function deriveAttachmentKind(mimeType) {
1148
+ if (mimeType.startsWith("image/"))
1149
+ return "image";
1150
+ if (mimeType.startsWith("text/") || CODE_MIME_TYPES.has(mimeType))
1151
+ return "code";
1152
+ return "document";
1153
+ }
1154
+ // src/components/chat/input/chat-attachment-preview.svelte
1155
+ import * as $18 from "svelte/internal/server";
1156
+ function Chat_attachment_preview($$renderer, $$props) {
1157
+ $$renderer.component(($$renderer2) => {
1158
+ let { attachment, class: className } = $$props;
1159
+ const extension = $18.derived(() => attachment.file.name.includes(".") ? attachment.file.name.slice(attachment.file.name.lastIndexOf(".")) : "");
1160
+ const truncatedName = $18.derived(() => {
1161
+ const name = attachment.file.name;
1162
+ const maxLength = 18;
1163
+ if (name.length <= maxLength)
1164
+ return name;
1165
+ const ext = extension();
1166
+ const base = name.slice(0, name.length - ext.length);
1167
+ const availableLength = maxLength - ext.length - 1;
1168
+ if (availableLength < 3)
1169
+ return name.slice(0, maxLength - 1) + "…";
1170
+ return base.slice(0, availableLength) + "…" + ext;
1171
+ });
1172
+ $$renderer2.push(`<div${$18.attr_class($18.clsx(classNames("chat-attachment-preview", className)), "svelte-1svhxp5")}${$18.attr("data-kind", attachment.kind)}${$18.attr("data-error", attachment.status === "error" || undefined)}${$18.attr("data-pending", attachment.status === "pending" || undefined)}>`);
1173
+ if (attachment.kind === "image") {
1174
+ $$renderer2.push("<!--[0-->");
1175
+ $$renderer2.push(`<img${$18.attr("src", attachment.previewUrl)}${$18.attr("alt", attachment.file.name)} class="chat-attachment-preview-image svelte-1svhxp5"/>`);
1176
+ } else {
1177
+ $$renderer2.push("<!--[-1-->");
1178
+ $$renderer2.push(`<div class="chat-attachment-preview-file svelte-1svhxp5"><div class="chat-attachment-preview-icon svelte-1svhxp5">`);
1179
+ if (attachment.kind === "code") {
1180
+ $$renderer2.push("<!--[0-->");
1181
+ File_code($$renderer2, { class: "icon-sm" });
1182
+ } else {
1183
+ $$renderer2.push("<!--[-1-->");
1184
+ File_text($$renderer2, { class: "icon-sm" });
1185
+ }
1186
+ $$renderer2.push(`<!--]--></div> <div class="chat-attachment-preview-info svelte-1svhxp5"><span class="chat-attachment-preview-name svelte-1svhxp5"${$18.attr("title", attachment.file.name)}>${$18.escape(truncatedName())}</span> <span class="chat-attachment-preview-meta svelte-1svhxp5">`);
1187
+ if (extension()) {
1188
+ $$renderer2.push("<!--[0-->");
1189
+ $$renderer2.push(`<span class="chat-attachment-preview-ext svelte-1svhxp5">${$18.escape(extension())}</span>`);
1190
+ } else {
1191
+ $$renderer2.push("<!--[-1-->");
1192
+ }
1193
+ $$renderer2.push(`<!--]--> <span class="chat-attachment-preview-size svelte-1svhxp5">${$18.escape(formatBytes(attachment.file.size))}</span></span></div></div>`);
1194
+ }
1195
+ $$renderer2.push(`<!--]--> `);
1196
+ if (attachment.status === "error") {
1197
+ $$renderer2.push("<!--[0-->");
1198
+ $$renderer2.push(`<span class="chat-attachment-preview-error-badge svelte-1svhxp5"${$18.attr("aria-label", attachment.error ?? "Attachment error")}>!</span>`);
1199
+ } else {
1200
+ $$renderer2.push("<!--[-1-->");
1201
+ }
1202
+ $$renderer2.push(`<!--]--> `);
1203
+ if (attachment.status === "pending") {
1204
+ $$renderer2.push("<!--[0-->");
1205
+ $$renderer2.push(`<div class="chat-attachment-preview-loading svelte-1svhxp5" role="status" aria-label="Reading file"><div class="chat-attachment-preview-loading-bar svelte-1svhxp5"></div></div>`);
1206
+ } else {
1207
+ $$renderer2.push("<!--[-1-->");
1208
+ }
1209
+ $$renderer2.push(`<!--]--></div>`);
1210
+ });
1211
+ }
1212
+ // src/components/chat/input/chat-input.svelte
1213
+ import * as $19 from "svelte/internal/server";
1214
+ import { onDestroy } from "svelte";
1215
+
1216
+ // src/utilities/id-factory.ts
1217
+ function createIdFactory(prefix = "") {
1218
+ let counter = 0;
1219
+ return {
1220
+ next() {
1221
+ return `${prefix}-${++counter}`;
1222
+ },
1223
+ reset() {
1224
+ counter = 0;
1225
+ }
1226
+ };
1227
+ }
1228
+ var defaultIdFactory = createIdFactory("cinder");
1229
+ function djb2Hex(value) {
1230
+ let hash = 5381;
1231
+ for (let index = 0;index < value.length; index++) {
1232
+ hash = (hash << 5) + hash + value.charCodeAt(index) | 0;
1233
+ }
1234
+ return (hash >>> 0).toString(16).padStart(8, "0");
1235
+ }
1236
+ function useStableId(seed) {
1237
+ if (seed === undefined) {
1238
+ return defaultIdFactory.next();
1239
+ }
1240
+ return `id-${djb2Hex(seed)}`;
1241
+ }
1242
+ // src/components/chat/input/chat-input.svelte
1243
+ function Chat_input($$renderer, $$props) {
1244
+ $$renderer.component(($$renderer2) => {
1245
+ const attachmentIdFactory = createIdFactory("attachment");
1246
+ const usedAttachmentIds = new Set;
1247
+ let {
1248
+ id,
1249
+ value = "",
1250
+ placeholder = "Type a message...",
1251
+ composerLabel = "Message",
1252
+ disabled = false,
1253
+ sending = false,
1254
+ error,
1255
+ class: className,
1256
+ action,
1257
+ name = "content",
1258
+ clearOnSubmit = true,
1259
+ allowAttachments = true,
1260
+ maxFileSize = 10 * 1024 * 1024,
1261
+ acceptedTypes = [
1262
+ "image/*",
1263
+ "text/*",
1264
+ "application/json",
1265
+ "application/pdf",
1266
+ "application/javascript",
1267
+ "application/typescript",
1268
+ "application/xml",
1269
+ "application/yaml",
1270
+ "application/x-yaml",
1271
+ "application/x-sh",
1272
+ "application/sql",
1273
+ "application/toml"
1274
+ ],
1275
+ onsubmit,
1276
+ onstop,
1277
+ onattachmentadd,
1278
+ onattachmentremove,
1279
+ onattachmentfailure,
1280
+ actions,
1281
+ $$slots,
1282
+ $$events,
1283
+ ...rest
1284
+ } = $$props;
1285
+ const showStopButton = $19.derived(() => sending && onstop !== undefined);
1286
+ let formElement = null;
1287
+ let editorRef;
1288
+ let fileInputRef = null;
1289
+ let attachments = [];
1290
+ let isDragOver = false;
1291
+ let isComposing = false;
1292
+ const announcer = useAnnouncer();
1293
+ const errorId = $19.derived(() => `${id}-error`);
1294
+ const hintId = $19.derived(() => `${id}-hint`);
1295
+ const shortcutDescriptionId = $19.derived(() => `${id}-shortcut-description`);
1296
+ const isWhitespaceOnly = $19.derived(() => value.trim().length === 0);
1297
+ const hasPendingAttachments = $19.derived(() => attachments.some((a) => a.status === "pending" || a.status === "uploading"));
1298
+ const canSubmit = $19.derived(() => !isWhitespaceOnly() && !disabled && !sending && !hasPendingAttachments());
1299
+ const isFormActionMode = $19.derived(() => !!action);
1300
+ function isValidType(file) {
1301
+ return acceptedTypes.some((type) => {
1302
+ if (type.endsWith("/*")) {
1303
+ const category = type.slice(0, -2);
1304
+ return file.type.startsWith(category);
1305
+ }
1306
+ return file.type === type;
1307
+ });
1308
+ }
1309
+ const KIND_LABELS = { image: "Image", code: "Code file", document: "Document" };
1310
+ function addAttachment(file) {
1311
+ if (!isValidType(file)) {
1312
+ onattachmentfailure?.(file, `Invalid file type: ${file.type}. Accepted types: ${acceptedTypes.join(", ")}.`);
1313
+ return;
1314
+ }
1315
+ if (file.size > maxFileSize) {
1316
+ const maxSizeMB = Math.round(maxFileSize / (1024 * 1024));
1317
+ onattachmentfailure?.(file, `File exceeds ${maxSizeMB}MB limit`);
1318
+ return;
1319
+ }
1320
+ const kind = deriveAttachmentKind(file.type);
1321
+ let attachmentId = file.lastModified !== 0 ? useStableId(`${file.name}\x00${file.size}\x00${file.lastModified}`) : attachmentIdFactory.next();
1322
+ if (usedAttachmentIds.has(attachmentId)) {
1323
+ attachmentId = `${attachmentId}-${attachmentIdFactory.next()}`;
1324
+ }
1325
+ usedAttachmentIds.add(attachmentId);
1326
+ const attachment = {
1327
+ id: attachmentId,
1328
+ file,
1329
+ previewUrl: URL.createObjectURL(file),
1330
+ kind,
1331
+ status: kind === "code" ? "pending" : "ready"
1332
+ };
1333
+ attachments = [...attachments, attachment];
1334
+ onattachmentadd?.(attachment);
1335
+ announcer.announce(`${KIND_LABELS[kind]} attached: ${file.name}`);
1336
+ if (kind === "code") {
1337
+ file.text().then((text) => {
1338
+ attachments = attachments.map((a) => a.id === attachment.id ? { ...a, textContent: text, status: "ready" } : a);
1339
+ }, () => {
1340
+ attachments = attachments.map((a) => a.id === attachment.id ? { ...a, status: "error", error: "Failed to read file" } : a);
1341
+ });
1342
+ }
1343
+ }
1344
+ function removeAttachment(attachmentId) {
1345
+ const attachment = attachments.find((a) => a.id === attachmentId);
1346
+ if (attachment) {
1347
+ URL.revokeObjectURL(attachment.previewUrl);
1348
+ attachments = attachments.filter((a) => a.id !== attachmentId);
1349
+ onattachmentremove?.(attachment);
1350
+ announcer.announce(`${KIND_LABELS[attachment.kind]} removed`);
1351
+ }
1352
+ }
1353
+ function handleFileSelect(event) {
1354
+ const input = event.target;
1355
+ const files = input.files;
1356
+ if (files) {
1357
+ Array.from(files).forEach(addAttachment);
1358
+ }
1359
+ input.value = "";
1360
+ }
1361
+ function handlePaste(event) {
1362
+ if (!allowAttachments)
1363
+ return;
1364
+ const items = event.clipboardData?.items;
1365
+ if (!items)
1366
+ return;
1367
+ const files = [];
1368
+ for (const item of items) {
1369
+ if (item.kind === "file") {
1370
+ const file = item.getAsFile();
1371
+ if (file) {
1372
+ files.push(file);
1373
+ }
1374
+ }
1375
+ }
1376
+ if (files.length > 0) {
1377
+ event.preventDefault();
1378
+ files.forEach(addAttachment);
1379
+ }
1380
+ }
1381
+ function handleDrop(event) {
1382
+ isDragOver = false;
1383
+ if (!allowAttachments)
1384
+ return;
1385
+ event.preventDefault();
1386
+ event.stopPropagation();
1387
+ const files = event.dataTransfer?.files;
1388
+ if (files) {
1389
+ Array.from(files).forEach(addAttachment);
1390
+ }
1391
+ }
1392
+ function handleDragOver(event) {
1393
+ if (!allowAttachments)
1394
+ return;
1395
+ event.preventDefault();
1396
+ isDragOver = true;
1397
+ }
1398
+ function handleDragLeave(event) {
1399
+ if (!formElement?.contains(event.relatedTarget)) {
1400
+ isDragOver = false;
1401
+ }
1402
+ }
1403
+ function handleSubmit(event) {
1404
+ if (!canSubmit()) {
1405
+ event.preventDefault();
1406
+ return;
1407
+ }
1408
+ const latestContent = editorRef?.getMarkdown() ?? value;
1409
+ const trimmedContent = latestContent.trim();
1410
+ if (trimmedContent.length === 0) {
1411
+ event.preventDefault();
1412
+ return;
1413
+ }
1414
+ const message = { role: "user", content: trimmedContent };
1415
+ const readyAttachments = attachments.filter((a) => a.status === "ready");
1416
+ onsubmit?.(message, readyAttachments);
1417
+ if (!isFormActionMode()) {
1418
+ event.preventDefault();
1419
+ if (clearOnSubmit) {
1420
+ value = "";
1421
+ attachments.forEach((a) => URL.revokeObjectURL(a.previewUrl));
1422
+ attachments = [];
1423
+ }
1424
+ editorRef?.focus();
1425
+ announcer.announce("Message sent");
1426
+ } else {
1427
+ value = trimmedContent;
1428
+ }
1429
+ }
1430
+ function handleKeyDown(event) {
1431
+ if (event.isComposing || isComposing) {
1432
+ return;
1433
+ }
1434
+ if (event.key === "Enter" && event.shiftKey) {
1435
+ return;
1436
+ }
1437
+ if (event.key === "Enter" && !event.metaKey && !event.ctrlKey && !event.altKey) {
1438
+ event.preventDefault();
1439
+ if (canSubmit()) {
1440
+ formElement?.requestSubmit();
1441
+ }
1442
+ }
1443
+ }
1444
+ function handleCompositionStart() {
1445
+ isComposing = true;
1446
+ }
1447
+ function handleCompositionEnd() {
1448
+ isComposing = false;
1449
+ }
1450
+ function focus() {
1451
+ editorRef?.focus();
1452
+ }
1453
+ function clear() {
1454
+ value = "";
1455
+ attachments.forEach((a) => URL.revokeObjectURL(a.previewUrl));
1456
+ attachments = [];
1457
+ }
1458
+ function getAttachments() {
1459
+ return [...attachments];
1460
+ }
1461
+ function addFiles(files) {
1462
+ if (!allowAttachments)
1463
+ return;
1464
+ files.forEach(addAttachment);
1465
+ }
1466
+ onDestroy(() => {
1467
+ attachments.forEach((a) => URL.revokeObjectURL(a.previewUrl));
1468
+ });
1469
+ let $$settled = true;
1470
+ let $$inner_renderer;
1471
+ function $$render_inner($$renderer3) {
1472
+ $$renderer3.push(`<form${$19.attributes({
1473
+ class: $19.clsx(classNames("chat-input", isDragOver && "chat-input-dragover", className)),
1474
+ method: "POST",
1475
+ action,
1476
+ "aria-label": "Chat message composer",
1477
+ "aria-busy": sending || undefined,
1478
+ ...rest
1479
+ }, "svelte-1tzweuh")}>`);
1480
+ if (isFormActionMode()) {
1481
+ $$renderer3.push("<!--[0-->");
1482
+ $$renderer3.push(`<input type="hidden"${$19.attr("name", name)}${$19.attr("value", value)}/>`);
1483
+ } else {
1484
+ $$renderer3.push("<!--[-1-->");
1485
+ }
1486
+ $$renderer3.push(`<!--]--> `);
1487
+ if (attachments.length > 0) {
1488
+ $$renderer3.push("<!--[0-->");
1489
+ $$renderer3.push(`<div class="chat-input-attachments svelte-1tzweuh" role="list" aria-label="Attached files"><!--[-->`);
1490
+ const each_array = $19.ensure_array_like(attachments);
1491
+ for (let $$index = 0, $$length = each_array.length;$$index < $$length; $$index++) {
1492
+ let attachment = each_array[$$index];
1493
+ $$renderer3.push(`<div class="chat-input-attachment-wrapper svelte-1tzweuh" role="listitem">`);
1494
+ Chat_attachment_preview($$renderer3, { attachment });
1495
+ $$renderer3.push(`<!----> <button type="button" class="chat-input-attachment-remove svelte-1tzweuh"${$19.attr("aria-label", `Remove ${attachment.file.name}`)}>`);
1496
+ X($$renderer3, { class: "icon-xs" });
1497
+ $$renderer3.push(`<!----></button></div>`);
1498
+ }
1499
+ $$renderer3.push(`<!--]--></div>`);
1500
+ } else {
1501
+ $$renderer3.push("<!--[-1-->");
1502
+ }
1503
+ $$renderer3.push(`<!--]--> <div class="chat-input-editor-container svelte-1tzweuh">`);
1504
+ Markdown_editor($$renderer3, {
1505
+ id: `${id}-editor`,
1506
+ placeholder,
1507
+ label: composerLabel,
1508
+ readonly: disabled || sending,
1509
+ showToolbar: false,
1510
+ showModeToggle: false,
1511
+ class: "chat-input-editor",
1512
+ "aria-describedby": shortcutDescriptionId(),
1513
+ get value() {
1514
+ return value;
1515
+ },
1516
+ set value($$value) {
1517
+ value = $$value;
1518
+ $$settled = false;
1519
+ }
1520
+ });
1521
+ $$renderer3.push(`<!----></div> <div class="chat-input-footer svelte-1tzweuh"><div class="chat-input-footer-left svelte-1tzweuh">`);
1522
+ if (allowAttachments) {
1523
+ $$renderer3.push("<!--[0-->");
1524
+ $$renderer3.push(`<input${$19.attr("id", `${id}-file-picker`)} type="file"${$19.attr("accept", acceptedTypes.join(","))} multiple="" class="sr-only svelte-1tzweuh" aria-label="Attach files"${$19.attr("tabindex", -1)}/> `);
1525
+ Button($$renderer3, {
1526
+ type: "button",
1527
+ variant: "ghost",
1528
+ size: "sm",
1529
+ onclick: () => fileInputRef?.click(),
1530
+ disabled: disabled || sending,
1531
+ "aria-label": "Attach file",
1532
+ children: ($$renderer4) => {
1533
+ Paperclip($$renderer4, { class: "icon-sm" });
1534
+ },
1535
+ $$slots: { default: true }
1536
+ });
1537
+ $$renderer3.push(`<!---->`);
1538
+ } else {
1539
+ $$renderer3.push("<!--[-1-->");
1540
+ }
1541
+ $$renderer3.push(`<!--]--> <span${$19.attr("id", shortcutDescriptionId())} class="sr-only svelte-1tzweuh">`);
1542
+ if (showStopButton()) {
1543
+ $$renderer3.push("<!--[0-->");
1544
+ $$renderer3.push(`Response is streaming. Use the stop button to stop generation.`);
1545
+ } else {
1546
+ $$renderer3.push("<!--[-1-->");
1547
+ $$renderer3.push(`Press Enter to send, Shift+Enter for newline`);
1548
+ }
1549
+ $$renderer3.push(`<!--]--></span> `);
1550
+ if (!showStopButton()) {
1551
+ $$renderer3.push("<!--[0-->");
1552
+ $$renderer3.push(`<span${$19.attr("id", hintId())} class="chat-input-hint svelte-1tzweuh" aria-hidden="true"><kbd class="svelte-1tzweuh">Enter</kbd> to send, <kbd class="svelte-1tzweuh">Shift</kbd>+<kbd class="svelte-1tzweuh">Enter</kbd> for newline</span>`);
1553
+ } else {
1554
+ $$renderer3.push("<!--[-1-->");
1555
+ }
1556
+ $$renderer3.push(`<!--]--></div> <div class="chat-input-footer-right svelte-1tzweuh">`);
1557
+ if (actions) {
1558
+ $$renderer3.push("<!--[0-->");
1559
+ actions($$renderer3);
1560
+ $$renderer3.push(`<!---->`);
1561
+ } else {
1562
+ $$renderer3.push("<!--[-1-->");
1563
+ }
1564
+ $$renderer3.push(`<!--]--> `);
1565
+ if (showStopButton()) {
1566
+ $$renderer3.push("<!--[0-->");
1567
+ $$renderer3.push(`<button type="button" class="chat-input-send svelte-1tzweuh" data-stop="" aria-label="Stop generating"${$19.attr("aria-describedby", shortcutDescriptionId())}>`);
1568
+ Square($$renderer3, { class: "icon-sm" });
1569
+ $$renderer3.push(`<!----></button>`);
1570
+ } else {
1571
+ $$renderer3.push("<!--[-1-->");
1572
+ $$renderer3.push(`<button type="submit" class="chat-input-send svelte-1tzweuh"${$19.attr("disabled", !canSubmit(), true)}${$19.attr("aria-label", sending ? "Sending message" : "Send message")}${$19.attr("aria-describedby", shortcutDescriptionId())}>`);
1573
+ if (sending) {
1574
+ $$renderer3.push("<!--[0-->");
1575
+ $$renderer3.push(`<svg class="chat-input-spinner svelte-1tzweuh" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" aria-hidden="true"><circle class="spinner-track svelte-1tzweuh" cx="12" cy="12" r="10" stroke="currentColor" stroke-width="4"></circle><path class="spinner-head svelte-1tzweuh" fill="currentColor" d="M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"></path></svg>`);
1576
+ } else {
1577
+ $$renderer3.push("<!--[-1-->");
1578
+ Arrow_up($$renderer3, { class: "icon-sm" });
1579
+ }
1580
+ $$renderer3.push(`<!--]--></button>`);
1581
+ }
1582
+ $$renderer3.push(`<!--]--></div></div> `);
1583
+ if (error) {
1584
+ $$renderer3.push("<!--[0-->");
1585
+ $$renderer3.push(`<p${$19.attr("id", errorId())} class="chat-input-error svelte-1tzweuh" role="alert">${$19.escape(error)}</p>`);
1586
+ } else {
1587
+ $$renderer3.push("<!--[-1-->");
1588
+ }
1589
+ $$renderer3.push(`<!--]--> <div aria-live="polite" aria-atomic="true" class="sr-only svelte-1tzweuh">${$19.escape(announcer.message)}</div></form>`);
1590
+ }
1591
+ do {
1592
+ $$settled = true;
1593
+ $$inner_renderer = $$renderer2.copy();
1594
+ $$render_inner($$inner_renderer);
1595
+ } while (!$$settled);
1596
+ $$renderer2.subsume($$inner_renderer);
1597
+ $19.bind_props($$props, { value, focus, clear, getAttachments, addFiles });
1598
+ });
1599
+ }
1600
+ // src/components/chat/container/scroll-utilities.ts
1601
+ var DEFAULT_SCROLL_CONFIGURATION = {
1602
+ bottomThreshold: 150,
1603
+ jumpThreshold: 200
1604
+ };
1605
+ function isAtBottom(state, threshold) {
1606
+ const distanceFromBottom = state.scrollHeight - state.scrollTop - state.clientHeight;
1607
+ return distanceFromBottom <= threshold || state.scrollHeight <= state.clientHeight;
1608
+ }
1609
+ function shouldShowJumpToLatest(state, threshold) {
1610
+ const distanceFromBottom = state.scrollHeight - state.scrollTop - state.clientHeight;
1611
+ if (state.scrollHeight <= state.clientHeight) {
1612
+ return false;
1613
+ }
1614
+ return distanceFromBottom > threshold;
1615
+ }
1616
+ function getMessageTimestamp(message) {
1617
+ if (message.createdAt) {
1618
+ const parsed = Date.parse(message.createdAt);
1619
+ if (!Number.isNaN(parsed)) {
1620
+ return parsed;
1621
+ }
1622
+ }
1623
+ const metaTimestamp = message.metadata?.["timestamp"];
1624
+ if (typeof metaTimestamp === "number") {
1625
+ return metaTimestamp;
1626
+ }
1627
+ if (typeof metaTimestamp === "string") {
1628
+ const parsed = Date.parse(metaTimestamp);
1629
+ if (!Number.isNaN(parsed)) {
1630
+ return parsed;
1631
+ }
1632
+ }
1633
+ return null;
1634
+ }
1635
+ function calculateUnreadCount(messages, lastReadTimestamp) {
1636
+ if (lastReadTimestamp === 0) {
1637
+ return 0;
1638
+ }
1639
+ return messages.filter((message) => {
1640
+ const timestamp = getMessageTimestamp(message);
1641
+ return timestamp != null && timestamp > lastReadTimestamp;
1642
+ }).length;
1643
+ }
1644
+ function findUnreadBoundaryIndex(messages, lastReadTimestamp) {
1645
+ if (lastReadTimestamp === 0) {
1646
+ return -1;
1647
+ }
1648
+ return messages.findIndex((message) => {
1649
+ const timestamp = getMessageTimestamp(message);
1650
+ return timestamp != null && timestamp > lastReadTimestamp;
1651
+ });
1652
+ }
1653
+ function calculateScrollToBottom(state) {
1654
+ return Math.max(0, state.scrollHeight - state.clientHeight);
1655
+ }
1656
+ function formatUnreadCount(count) {
1657
+ if (count <= 0)
1658
+ return "";
1659
+ if (count > 99)
1660
+ return "99+";
1661
+ return count.toString();
1662
+ }
1663
+ function isLargeCount(count) {
1664
+ return count > 99;
1665
+ }
1666
+ function extractTimestamp(message) {
1667
+ return getMessageTimestamp(message) ?? Date.now();
1668
+ }
1669
+
1670
+ // src/components/chat/container/use-chat-scroll-state.svelte.ts
1671
+ import * as $20 from "svelte/internal/server";
1672
+ var destroy = () => {};
1673
+ function useChatScrollState(options) {
1674
+ const {
1675
+ bottomThreshold = DEFAULT_SCROLL_CONFIGURATION.bottomThreshold,
1676
+ getBottomThreshold,
1677
+ jumpThreshold = DEFAULT_SCROLL_CONFIGURATION.jumpThreshold,
1678
+ getJumpThreshold,
1679
+ onScrollStateChange,
1680
+ onReachBottom
1681
+ } = options ?? {};
1682
+ const reducedMotion = useReducedMotion();
1683
+ function getScrollBehavior() {
1684
+ return reducedMotion.current ? "auto" : "smooth";
1685
+ }
1686
+ let atBottom = true;
1687
+ let showJumpButton = false;
1688
+ let scrollTicking = false;
1689
+ let isUserScrolling = false;
1690
+ function setAtBottom(value) {
1691
+ atBottom = value;
1692
+ }
1693
+ function createScrollAttachment() {
1694
+ return (element) => {
1695
+ function handleScroll() {
1696
+ if (scrollTicking)
1697
+ return;
1698
+ scrollTicking = true;
1699
+ requestAnimationFrame(() => {
1700
+ const state = {
1701
+ scrollTop: element.scrollTop,
1702
+ scrollHeight: element.scrollHeight,
1703
+ clientHeight: element.clientHeight
1704
+ };
1705
+ const scrolledToBottom = isAtBottom(state, getBottomThreshold?.() ?? bottomThreshold);
1706
+ const shouldShowJump = shouldShowJumpToLatest(state, getJumpThreshold?.() ?? jumpThreshold);
1707
+ atBottom = scrolledToBottom;
1708
+ showJumpButton = shouldShowJump;
1709
+ if (scrolledToBottom) {
1710
+ onReachBottom?.();
1711
+ }
1712
+ onScrollStateChange?.({
1713
+ atBottom: scrolledToBottom,
1714
+ scrollTop: state.scrollTop,
1715
+ scrollHeight: state.scrollHeight
1716
+ });
1717
+ scrollTicking = false;
1718
+ });
1719
+ }
1720
+ element.addEventListener("scroll", handleScroll, { passive: true });
1721
+ return () => element.removeEventListener("scroll", handleScroll);
1722
+ };
1723
+ }
1724
+ function handleSentinelEntry(entry) {
1725
+ const sentinelVisible = entry.isIntersecting;
1726
+ if (sentinelVisible && !atBottom) {
1727
+ atBottom = true;
1728
+ onReachBottom?.();
1729
+ }
1730
+ }
1731
+ function createSentinelObserver(viewport, sentinel) {
1732
+ if (!viewport || !sentinel)
1733
+ return;
1734
+ const observer = new IntersectionObserver(([entry]) => {
1735
+ if (!entry)
1736
+ return;
1737
+ handleSentinelEntry(entry);
1738
+ }, {
1739
+ root: viewport,
1740
+ threshold: 0,
1741
+ rootMargin: `0px 0px ${getBottomThreshold?.() ?? bottomThreshold}px 0px`
1742
+ });
1743
+ observer.observe(sentinel);
1744
+ return () => observer.disconnect();
1745
+ }
1746
+ function scrollToBottom(viewport) {
1747
+ viewport?.scrollTo({ top: viewport.scrollHeight, behavior: getScrollBehavior() });
1748
+ }
1749
+ function scrollToTop(viewport) {
1750
+ viewport?.scrollTo({ top: 0, behavior: getScrollBehavior() });
1751
+ }
1752
+ function jumpToLatest(viewport, onComplete) {
1753
+ if (!viewport)
1754
+ return;
1755
+ isUserScrolling = true;
1756
+ const behavior = getScrollBehavior();
1757
+ viewport.scrollTo({ top: viewport.scrollHeight, behavior });
1758
+ onReachBottom?.();
1759
+ onComplete?.();
1760
+ const scrollDuration = reducedMotion.current ? 50 : 500;
1761
+ setTimeout(() => {
1762
+ isUserScrolling = false;
1763
+ const wrappers = viewport.querySelectorAll(".chat-message-wrapper");
1764
+ const lastWrapper = wrappers.length > 0 ? wrappers[wrappers.length - 1] : null;
1765
+ const lastMessage = lastWrapper?.querySelector(".chat-message") ?? null;
1766
+ lastMessage?.focus();
1767
+ }, scrollDuration);
1768
+ }
1769
+ return {
1770
+ get atBottom() {
1771
+ return atBottom;
1772
+ },
1773
+ get showJumpButton() {
1774
+ return showJumpButton;
1775
+ },
1776
+ setAtBottom,
1777
+ createScrollAttachment,
1778
+ createSentinelObserver,
1779
+ handleSentinelEntry,
1780
+ scrollToBottom,
1781
+ scrollToTop,
1782
+ jumpToLatest,
1783
+ getScrollBehavior,
1784
+ destroy,
1785
+ get isUserScrolling() {
1786
+ return isUserScrolling;
1787
+ }
1788
+ };
1789
+ }
1790
+
1791
+ // src/components/chat/container/use-chat-unread-state.svelte.ts
1792
+ import * as $21 from "svelte/internal/server";
1793
+ import { untrack } from "svelte";
1794
+ function useChatUnreadState(options) {
1795
+ const { announcerDebounceMs = 300, onUnreadIndicatorChange } = options ?? {};
1796
+ let unreadCount = 0;
1797
+ let newMessageIndicatorVisible = false;
1798
+ let firstUnreadId = null;
1799
+ let previousMessageCount = 0;
1800
+ let previousLastMessageId = null;
1801
+ let previousConversationId = null;
1802
+ const announcer = useAnnouncer({ debounceMs: announcerDebounceMs });
1803
+ const displayUnreadCount = $21.derived(() => formatUnreadCount(unreadCount));
1804
+ const hasLargeCount = $21.derived(() => isLargeCount(unreadCount));
1805
+ function notifyIndicatorChange() {
1806
+ onUnreadIndicatorChange?.({ unreadCount, newMessageIndicatorVisible });
1807
+ }
1808
+ function markAllAsRead() {
1809
+ const changed = unreadCount !== 0 || newMessageIndicatorVisible;
1810
+ unreadCount = 0;
1811
+ newMessageIndicatorVisible = false;
1812
+ firstUnreadId = null;
1813
+ if (changed)
1814
+ notifyIndicatorChange();
1815
+ }
1816
+ function processMessages(messages, conversationId, getAtBottom) {
1817
+ if (conversationId !== previousConversationId) {
1818
+ previousMessageCount = messages.length;
1819
+ previousLastMessageId = messages.at(-1)?.id ?? null;
1820
+ previousConversationId = conversationId;
1821
+ markAllAsRead();
1822
+ return;
1823
+ }
1824
+ const currentCount = messages.length;
1825
+ const prevCount = previousMessageCount;
1826
+ const currentLastMessageId = messages.at(-1)?.id ?? null;
1827
+ const wasAppended = currentCount > prevCount && prevCount > 0 && currentLastMessageId !== null && currentLastMessageId !== previousLastMessageId;
1828
+ if (wasAppended) {
1829
+ const atBottom = untrack(getAtBottom);
1830
+ if (!atBottom) {
1831
+ const newMessageCount = currentCount - prevCount;
1832
+ unreadCount += newMessageCount;
1833
+ newMessageIndicatorVisible = true;
1834
+ if (firstUnreadId === null) {
1835
+ const firstNewIndex = currentCount - newMessageCount;
1836
+ const firstNewMessage = messages[firstNewIndex];
1837
+ if (firstNewMessage) {
1838
+ firstUnreadId = firstNewMessage.id;
1839
+ }
1840
+ }
1841
+ announcer.announce(unreadCount === 1 ? "New message received" : `${unreadCount} new messages received`);
1842
+ notifyIndicatorChange();
1843
+ }
1844
+ }
1845
+ previousMessageCount = currentCount;
1846
+ previousLastMessageId = currentLastMessageId;
1847
+ }
1848
+ function destroy2() {
1849
+ announcer.destroy();
1850
+ }
1851
+ return {
1852
+ get unreadCount() {
1853
+ return unreadCount;
1854
+ },
1855
+ get newMessageIndicatorVisible() {
1856
+ return newMessageIndicatorVisible;
1857
+ },
1858
+ get firstUnreadId() {
1859
+ return firstUnreadId;
1860
+ },
1861
+ get displayUnreadCount() {
1862
+ return displayUnreadCount();
1863
+ },
1864
+ get hasLargeCount() {
1865
+ return hasLargeCount();
1866
+ },
1867
+ get announcerMessage() {
1868
+ return announcer.message;
1869
+ },
1870
+ markAllAsRead,
1871
+ processMessages,
1872
+ destroy: destroy2
1873
+ };
1874
+ }
1875
+
1876
+ // src/components/chat/container/use-chat-keyboard-nav.svelte.ts
1877
+ import * as $22 from "svelte/internal/server";
1878
+ import { tick } from "svelte";
1879
+ function useChatKeyboardNav(options) {
1880
+ const {
1881
+ onJumpToLatest,
1882
+ onJumpToStart,
1883
+ getScrollBehavior,
1884
+ getHistoryTrigger,
1885
+ onVirtualMessageNavigation
1886
+ } = options;
1887
+ function navigateMessages(viewport, direction) {
1888
+ const allMessages = viewport.querySelectorAll(".chat-message");
1889
+ if (allMessages.length === 0)
1890
+ return;
1891
+ const currentIndex = Array.from(allMessages).findIndex((msg) => msg === document.activeElement);
1892
+ let targetIndex;
1893
+ if (currentIndex === -1) {
1894
+ targetIndex = direction === "next" ? 0 : allMessages.length - 1;
1895
+ } else if (direction === "next") {
1896
+ targetIndex = currentIndex < allMessages.length - 1 ? currentIndex + 1 : currentIndex;
1897
+ } else {
1898
+ targetIndex = currentIndex > 0 ? currentIndex - 1 : currentIndex;
1899
+ }
1900
+ const targetMessage = allMessages[targetIndex];
1901
+ if (targetMessage && targetMessage !== document.activeElement) {
1902
+ targetMessage.focus();
1903
+ targetMessage.scrollIntoView({ behavior: getScrollBehavior(), block: "nearest" });
1904
+ }
1905
+ }
1906
+ const TEXT_EDITING_SELECTOR = "input, textarea, select, [contenteditable]";
1907
+ function handleKeyDown(event, viewport) {
1908
+ if (!viewport)
1909
+ return;
1910
+ if (document.activeElement?.closest(".chat-input") || document.activeElement?.matches(TEXT_EDITING_SELECTOR))
1911
+ return;
1912
+ const behavior = getScrollBehavior();
1913
+ switch (event.key) {
1914
+ case "End":
1915
+ event.preventDefault();
1916
+ onJumpToLatest();
1917
+ break;
1918
+ case "Home":
1919
+ event.preventDefault();
1920
+ if (onJumpToStart) {
1921
+ onJumpToStart();
1922
+ } else {
1923
+ viewport.scrollTo({ top: 0, behavior });
1924
+ }
1925
+ tick().then(() => {
1926
+ const historyTrigger = getHistoryTrigger?.();
1927
+ if (historyTrigger) {
1928
+ historyTrigger.focus();
1929
+ } else {
1930
+ const firstMessage = viewport.querySelector(".chat-message");
1931
+ firstMessage?.focus();
1932
+ }
1933
+ return;
1934
+ }, () => {
1935
+ return;
1936
+ });
1937
+ break;
1938
+ case "PageDown":
1939
+ event.preventDefault();
1940
+ viewport.scrollBy({ top: viewport.clientHeight * 0.9, behavior });
1941
+ break;
1942
+ case "PageUp":
1943
+ event.preventDefault();
1944
+ viewport.scrollBy({ top: -viewport.clientHeight * 0.9, behavior });
1945
+ break;
1946
+ case "ArrowDown":
1947
+ if (document.activeElement?.classList.contains("chat-message")) {
1948
+ event.preventDefault();
1949
+ if (!onVirtualMessageNavigation?.("next")) {
1950
+ navigateMessages(viewport, "next");
1951
+ }
1952
+ }
1953
+ break;
1954
+ case "ArrowUp":
1955
+ if (document.activeElement?.classList.contains("chat-message")) {
1956
+ event.preventDefault();
1957
+ if (!onVirtualMessageNavigation?.("previous")) {
1958
+ navigateMessages(viewport, "previous");
1959
+ }
1960
+ }
1961
+ break;
1962
+ }
1963
+ }
1964
+ return { handleKeyDown };
1965
+ }
1966
+
1967
+ // src/components/chat/container/use-chat-search.svelte.ts
1968
+ import * as $23 from "svelte/internal/server";
1969
+ function useChatSearch(options) {
1970
+ const { getMessages: getMessages2 } = options;
1971
+ let query = "";
1972
+ let isOpen = false;
1973
+ let currentMatchIndex = 0;
1974
+ const matches = $23.derived(() => {
1975
+ const trimmedQuery = query.trim();
1976
+ if (!trimmedQuery)
1977
+ return [];
1978
+ const lowercasedQuery = trimmedQuery.toLowerCase();
1979
+ const messages = getMessages2();
1980
+ return messages.map((message, messageIndex) => ({ message, messageIndex })).filter(({ message }) => getMessageText(message).toLowerCase().includes(lowercasedQuery));
1981
+ });
1982
+ const matchCount = $23.derived(() => matches().length);
1983
+ const clampedMatchIndex = $23.derived(() => matchCount() > 0 ? Math.min(currentMatchIndex, matchCount() - 1) : 0);
1984
+ const currentMatch = $23.derived(() => matches()[clampedMatchIndex()] ?? null);
1985
+ function open() {
1986
+ isOpen = true;
1987
+ }
1988
+ function close() {
1989
+ isOpen = false;
1990
+ query = "";
1991
+ currentMatchIndex = 0;
1992
+ }
1993
+ function nextMatch() {
1994
+ if (matchCount() > 0) {
1995
+ currentMatchIndex = (clampedMatchIndex() + 1) % matchCount();
1996
+ }
1997
+ }
1998
+ function previousMatch() {
1999
+ if (matchCount() > 0) {
2000
+ currentMatchIndex = (clampedMatchIndex() - 1 + matchCount()) % matchCount();
2001
+ }
2002
+ }
2003
+ function setQuery(value) {
2004
+ query = value;
2005
+ currentMatchIndex = 0;
2006
+ }
2007
+ return {
2008
+ get query() {
2009
+ return query;
2010
+ },
2011
+ get isOpen() {
2012
+ return isOpen;
2013
+ },
2014
+ get matches() {
2015
+ return matches();
2016
+ },
2017
+ get matchCount() {
2018
+ return matchCount();
2019
+ },
2020
+ get currentMatch() {
2021
+ return currentMatch();
2022
+ },
2023
+ get currentMatchIndex() {
2024
+ return clampedMatchIndex();
2025
+ },
2026
+ open,
2027
+ close,
2028
+ nextMatch,
2029
+ previousMatch,
2030
+ setQuery
2031
+ };
2032
+ }
2033
+
2034
+ // src/components/chat/container/chat-jump-controls.svelte
2035
+ import * as $24 from "svelte/internal/server";
2036
+ function Chat_jump_controls($$renderer, $$props) {
2037
+ $$renderer.component(($$renderer2) => {
2038
+ let {
2039
+ showJumpButton,
2040
+ hasNewMessageIndicator,
2041
+ unreadCount,
2042
+ displayUnreadCount,
2043
+ hasLargeCount,
2044
+ onjumptolatest
2045
+ } = $$props;
2046
+ function handleJump() {
2047
+ onjumptolatest?.();
2048
+ }
2049
+ if (showJumpButton) {
2050
+ $$renderer2.push("<!--[0-->");
2051
+ $$renderer2.push(`<button type="button" class="chat-jump-button svelte-1ornxh"${$24.attr("aria-label", unreadCount > 0 ? `Jump to ${unreadCount} new message${unreadCount !== 1 ? "s" : ""}` : "Jump to latest")}>`);
2052
+ Chevron_down($$renderer2, { class: "icon-sm" });
2053
+ $$renderer2.push(`<!----> `);
2054
+ if (unreadCount > 0) {
2055
+ $$renderer2.push("<!--[0-->");
2056
+ $$renderer2.push(`<span class="chat-jump-badge svelte-1ornxh"${$24.attr("data-large", hasLargeCount || undefined)}>${$24.escape(displayUnreadCount)}</span>`);
2057
+ } else {
2058
+ $$renderer2.push("<!--[-1-->");
2059
+ }
2060
+ $$renderer2.push(`<!--]--></button>`);
2061
+ } else {
2062
+ $$renderer2.push("<!--[-1-->");
2063
+ }
2064
+ $$renderer2.push(`<!--]--> `);
2065
+ if (hasNewMessageIndicator && !showJumpButton) {
2066
+ $$renderer2.push("<!--[0-->");
2067
+ $$renderer2.push(`<button type="button" class="chat-new-indicator svelte-1ornxh"${$24.attr("aria-label", `Jump to ${$24.stringify(displayUnreadCount)} new message${$24.stringify(unreadCount !== 1 ? "s" : "")}`)}>`);
2068
+ Chevron_down($$renderer2, { class: "icon-xs" });
2069
+ $$renderer2.push(`<!----> <span aria-hidden="true">${$24.escape(displayUnreadCount)} new message${$24.escape(unreadCount !== 1 ? "s" : "")}</span></button>`);
2070
+ } else {
2071
+ $$renderer2.push("<!--[-1-->");
2072
+ }
2073
+ $$renderer2.push(`<!--]-->`);
2074
+ });
2075
+ }
2076
+
2077
+ // src/components/chat/container/chat-history-trigger.svelte
2078
+ import * as $25 from "svelte/internal/server";
2079
+ function Chat_history_trigger($$renderer, $$props) {
2080
+ $$renderer.component(($$renderer2) => {
2081
+ let {
2082
+ loading = false,
2083
+ label = "Load earlier messages",
2084
+ loadingLabel = "Loading earlier messages",
2085
+ onload
2086
+ } = $$props;
2087
+ let buttonElement = null;
2088
+ const buttonAttachment = (node) => {
2089
+ buttonElement = node;
2090
+ return () => {
2091
+ if (buttonElement === node) {
2092
+ buttonElement = null;
2093
+ }
2094
+ };
2095
+ };
2096
+ function focus(options = undefined) {
2097
+ buttonElement?.focus(options);
2098
+ }
2099
+ $$renderer2.push(`<div class="chat-history-trigger svelte-y4b3t5" data-cinder-history-trigger=""><button type="button" class="chat-history-trigger-button svelte-y4b3t5"${$25.attr("disabled", loading, true)}${$25.attr("aria-busy", loading ? "true" : undefined)}>${$25.escape(loading ? loadingLabel : label)}</button> `);
2100
+ if (loading) {
2101
+ $$renderer2.push("<!--[0-->");
2102
+ $$renderer2.push(`<span class="sr-only svelte-y4b3t5" role="status">${$25.escape(loadingLabel)}</span>`);
2103
+ } else {
2104
+ $$renderer2.push("<!--[-1-->");
2105
+ }
2106
+ $$renderer2.push(`<!--]--></div>`);
2107
+ $25.bind_props($$props, { focus });
2108
+ });
2109
+ }
2110
+
2111
+ // src/components/chat/container/chat-status-announcer.svelte
2112
+ import * as $26 from "svelte/internal/server";
2113
+ function Chat_status_announcer($$renderer, $$props) {
2114
+ let { statusId, messageCount, announcerMessage, assertiveMessage } = $$props;
2115
+ $$renderer.push(`<div${$26.attr("id", statusId)} class="cinder-sr-only">${$26.escape(messageCount)} messages in conversation</div> <div class="cinder-sr-only" aria-live="polite" aria-atomic="true">${$26.escape(announcerMessage)}</div> <div class="cinder-sr-only" aria-live="assertive" aria-atomic="true">${$26.escape(assertiveMessage ?? "")}</div>`);
2116
+ }
2117
+
2118
+ // src/components/chat/container/chat-search-bar.svelte
2119
+ import * as $27 from "svelte/internal/server";
2120
+ function Chat_search_bar($$renderer, $$props) {
2121
+ $$renderer.component(($$renderer2) => {
2122
+ let {
2123
+ instanceId,
2124
+ query,
2125
+ matchCount,
2126
+ currentMatchIndex,
2127
+ onquerychange,
2128
+ onnext,
2129
+ onprevious,
2130
+ onclose
2131
+ } = $$props;
2132
+ const searchResultsId = $27.derived(() => `${instanceId}-search-results`);
2133
+ let inputElement = null;
2134
+ const autoFocus = (element) => {
2135
+ element.focus();
2136
+ inputElement = element;
2137
+ };
2138
+ function focusInput() {
2139
+ inputElement?.focus();
2140
+ }
2141
+ const matchLabel = $27.derived(() => {
2142
+ if (!query.trim())
2143
+ return "";
2144
+ if (matchCount === 0)
2145
+ return "No matches";
2146
+ return `${currentMatchIndex + 1} of ${matchCount}`;
2147
+ });
2148
+ const hasQuery = $27.derived(() => query.trim().length > 0);
2149
+ function handleInput(event) {
2150
+ const target = event.currentTarget;
2151
+ onquerychange(target.value);
2152
+ }
2153
+ function handleKeyDown(event) {
2154
+ if (event.key === "Escape") {
2155
+ event.preventDefault();
2156
+ onclose();
2157
+ } else if (event.key === "Enter" && matchCount > 0) {
2158
+ event.preventDefault();
2159
+ if (event.shiftKey) {
2160
+ onprevious();
2161
+ } else {
2162
+ onnext();
2163
+ }
2164
+ }
2165
+ }
2166
+ $$renderer2.push(`<div class="chat-search-bar svelte-13rzt40" role="search" aria-label="Search messages"><span class="chat-search-icon svelte-13rzt40" aria-hidden="true">`);
2167
+ Search($$renderer2, { class: "icon-sm" });
2168
+ $$renderer2.push(`<!----></span> <input type="search" class="chat-search-input svelte-13rzt40" placeholder="Search messages…"${$27.attr("value", query)} autocomplete="off" aria-label="Search messages"${$27.attr("aria-controls", hasQuery() ? searchResultsId() : undefined)}/> `);
2169
+ if (hasQuery()) {
2170
+ $$renderer2.push("<!--[0-->");
2171
+ $$renderer2.push(`<span${$27.attr("id", searchResultsId())} class="chat-search-match-count svelte-13rzt40" aria-live="polite" aria-atomic="true">${$27.escape(matchLabel())}</span>`);
2172
+ } else {
2173
+ $$renderer2.push("<!--[-1-->");
2174
+ }
2175
+ $$renderer2.push(`<!--]--> <div class="chat-search-navigation svelte-13rzt40" role="group" aria-label="Navigate search results"><button type="button" class="chat-search-nav-button svelte-13rzt40"${$27.attr("disabled", matchCount === 0, true)} aria-label="Previous match" title="Previous match (Shift+Enter)">`);
2176
+ Chevron_up($$renderer2, { class: "icon-sm" });
2177
+ $$renderer2.push(`<!----></button> <button type="button" class="chat-search-nav-button svelte-13rzt40"${$27.attr("disabled", matchCount === 0, true)} aria-label="Next match" title="Next match (Enter)">`);
2178
+ Chevron_down($$renderer2, { class: "icon-sm" });
2179
+ $$renderer2.push(`<!----></button></div> <button type="button" class="chat-search-close svelte-13rzt40" aria-label="Close search" title="Close search (Escape)">`);
2180
+ X($$renderer2, { class: "icon-sm" });
2181
+ $$renderer2.push(`<!----></button></div>`);
2182
+ $27.bind_props($$props, { focusInput });
2183
+ });
2184
+ }
2185
+
2186
+ // src/components/chat/container/use-chat-message-groups.svelte.ts
2187
+ import * as $28 from "svelte/internal/server";
2188
+ function findPairedToolResultIds(messages) {
2189
+ const visibleToolCallIds = new Set;
2190
+ const pairedResultIds = new Set;
2191
+ for (const message of messages) {
2192
+ if (message.role === "tool-call" && message.toolCall) {
2193
+ visibleToolCallIds.add(message.toolCall.id);
2194
+ }
2195
+ }
2196
+ for (const message of messages) {
2197
+ if (message.role === "tool-result" && message.toolResult && visibleToolCallIds.has(message.toolResult.callId)) {
2198
+ pairedResultIds.add(message.id);
2199
+ }
2200
+ }
2201
+ return pairedResultIds;
2202
+ }
2203
+ function buildMessagesWithDateSeparators(messages, pairedToolResultIds) {
2204
+ const result = [];
2205
+ let lastDate = null;
2206
+ for (const message of messages) {
2207
+ if (message.role === "tool-result" && pairedToolResultIds.has(message.id)) {
2208
+ continue;
2209
+ }
2210
+ const timestamp = message.createdAt ?? message.metadata?.["timestamp"];
2211
+ if (timestamp != null) {
2212
+ const messageDate = new Date(timestamp);
2213
+ const isValidDate = !isNaN(messageDate.getTime());
2214
+ if (isValidDate) {
2215
+ const dateKey = messageDate.toDateString();
2216
+ if (dateKey !== lastDate) {
2217
+ result.push({ type: "date", date: messageDate });
2218
+ lastDate = dateKey;
2219
+ }
2220
+ }
2221
+ }
2222
+ result.push({ type: "message", message });
2223
+ }
2224
+ return result;
2225
+ }
2226
+ function buildChatRenderRows(items, options) {
2227
+ const rows = [];
2228
+ const firstUnreadId = options?.firstUnreadId ?? null;
2229
+ let previousMessageId = null;
2230
+ for (const item of items) {
2231
+ if (item.type === "message") {
2232
+ if (item.message.id === firstUnreadId) {
2233
+ rows.push({ type: "unread-divider", afterMessageId: previousMessageId });
2234
+ }
2235
+ previousMessageId = item.message.id;
2236
+ }
2237
+ rows.push(item);
2238
+ }
2239
+ if (options?.showTypingIndicator) {
2240
+ rows.push({ type: "typing" });
2241
+ }
2242
+ return rows;
2243
+ }
2244
+ function chatRenderRowKey(row) {
2245
+ switch (row.type) {
2246
+ case "date":
2247
+ return `date-${row.date.toISOString()}`;
2248
+ case "message":
2249
+ return `msg-${row.message.id}`;
2250
+ case "unread-divider":
2251
+ return `unread-${row.afterMessageId ?? "start"}`;
2252
+ case "typing":
2253
+ return "typing";
2254
+ }
2255
+ }
2256
+ function findRenderRowIndexByMessageId(rows, messageId) {
2257
+ return rows.findIndex((row) => row.type === "message" && row.message.id === messageId);
2258
+ }
2259
+
2260
+ // src/components/chat/container/use-chat-virtualizer.svelte.ts
2261
+ import * as $29 from "svelte/internal/server";
2262
+ class ChatVirtualizer {
2263
+ options;
2264
+ #scrollElement = null;
2265
+ #scrollOffset = 0;
2266
+ #measurementVersion = 0;
2267
+ #offsetsCache = null;
2268
+ #offsetsCacheCount = -1;
2269
+ #offsetsCacheMeasurementVersion = -1;
2270
+ #measuredSizes = new Map;
2271
+ constructor(options) {
2272
+ this.options = options;
2273
+ }
2274
+ get virtualItems() {
2275
+ return this.#virtualItems();
2276
+ }
2277
+ get totalSize() {
2278
+ const offsets = this.#offsets();
2279
+ return offsets[offsets.length - 1] ?? 0;
2280
+ }
2281
+ get scrollPaddingStart() {
2282
+ return this.#scrollPaddingStart();
2283
+ }
2284
+ get scrollSize() {
2285
+ return this.scrollPaddingStart + this.totalSize;
2286
+ }
2287
+ get scrollOffset() {
2288
+ return this.#scrollOffset;
2289
+ }
2290
+ setScrollElement(element) {
2291
+ if (this.#scrollElement === element)
2292
+ return;
2293
+ this.#scrollElement?.removeEventListener("scroll", this.#handleScroll);
2294
+ this.#scrollElement = element;
2295
+ this.#scrollOffset = element?.scrollTop ?? 0;
2296
+ this.#scrollElement?.addEventListener("scroll", this.#handleScroll, { passive: true });
2297
+ }
2298
+ scrollElement = (node) => {
2299
+ this.setScrollElement(node);
2300
+ return () => {
2301
+ if (this.#scrollElement === node) {
2302
+ this.setScrollElement(null);
2303
+ }
2304
+ };
2305
+ };
2306
+ measureElement = (node) => {
2307
+ this.measureElementNode(node);
2308
+ if (typeof ResizeObserver !== "function")
2309
+ return;
2310
+ const resizeObserver = new ResizeObserver(() => {
2311
+ this.measureElementNode(node);
2312
+ });
2313
+ resizeObserver.observe(node);
2314
+ return () => {
2315
+ resizeObserver.disconnect();
2316
+ };
2317
+ };
2318
+ measureElementNode(node) {
2319
+ if (!node)
2320
+ return;
2321
+ this.#measureNode(node);
2322
+ }
2323
+ syncOptions() {
2324
+ const count = this.options.getCount();
2325
+ const currentKeys = new Set;
2326
+ for (let index = 0;index < count; index += 1) {
2327
+ currentKeys.add(this.options.getItemKey(index));
2328
+ }
2329
+ let changed = false;
2330
+ for (const key of this.#measuredSizes.keys()) {
2331
+ if (!currentKeys.has(key)) {
2332
+ this.#measuredSizes.delete(key);
2333
+ changed = true;
2334
+ }
2335
+ }
2336
+ if (changed)
2337
+ this.#measurementVersion += 1;
2338
+ }
2339
+ scrollToIndex(index, options = { align: "auto" }) {
2340
+ const count = this.options.getCount();
2341
+ if (count === 0)
2342
+ return;
2343
+ const clampedIndex = Math.max(0, Math.min(Math.trunc(index), count - 1));
2344
+ const offsets = this.#offsets();
2345
+ const itemStart = offsets[clampedIndex] ?? 0;
2346
+ const itemEnd = offsets[clampedIndex + 1] ?? itemStart + this.#estimatedSize();
2347
+ const itemSize = itemEnd - itemStart;
2348
+ const viewportHeight = this.#containerHeight();
2349
+ const paddingStart = this.#scrollPaddingStart();
2350
+ const viewportStart = Math.max(0, this.scrollOffset - paddingStart);
2351
+ const viewportEnd = viewportStart + viewportHeight;
2352
+ let offset = itemStart + paddingStart;
2353
+ if (options.align === "end") {
2354
+ offset = itemEnd + paddingStart - viewportHeight;
2355
+ } else if (options.align === "center") {
2356
+ offset = itemStart + paddingStart - (viewportHeight - itemSize) / 2;
2357
+ } else if (options.align === "auto") {
2358
+ if (itemStart >= viewportStart && itemEnd <= viewportEnd)
2359
+ return;
2360
+ offset = itemStart < viewportStart ? itemStart + paddingStart : itemEnd + paddingStart - viewportHeight;
2361
+ }
2362
+ this.scrollToOffset(offset, options);
2363
+ }
2364
+ getVirtualItem(index) {
2365
+ const count = this.options.getCount();
2366
+ if (count === 0)
2367
+ return null;
2368
+ const clampedIndex = Math.max(0, Math.min(Math.trunc(index), count - 1));
2369
+ return this.#virtualItemAt(clampedIndex, this.#offsets());
2370
+ }
2371
+ scrollToOffset(offset, options) {
2372
+ const element = this.#getScrollElement();
2373
+ const maximumOffset = Math.max(0, this.scrollSize - this.#containerHeight());
2374
+ const top = Math.min(maximumOffset, Math.max(0, offset));
2375
+ this.#scrollOffset = top;
2376
+ if (element) {
2377
+ const behavior = options?.behavior === "instant" ? "auto" : options?.behavior;
2378
+ if (typeof element.scrollTo === "function" && behavior && behavior !== "auto") {
2379
+ element.scrollTo({ top, behavior });
2380
+ return;
2381
+ }
2382
+ element.scrollTop = top;
2383
+ return;
2384
+ }
2385
+ }
2386
+ #handleScroll = () => {
2387
+ this.#scrollOffset = this.#scrollElement?.scrollTop ?? 0;
2388
+ };
2389
+ #getScrollElement() {
2390
+ return this.#scrollElement ?? this.options.getScrollElement();
2391
+ }
2392
+ #containerHeight() {
2393
+ const element = this.#getScrollElement();
2394
+ return element?.clientHeight || this.options.getInitialHeight();
2395
+ }
2396
+ #scrollPaddingStart() {
2397
+ return Math.max(0, this.options.getScrollPaddingStart?.() ?? 0);
2398
+ }
2399
+ #estimatedSize() {
2400
+ return Math.max(1, this.options.getEstimatedSize());
2401
+ }
2402
+ #itemSize(index) {
2403
+ const key = this.options.getItemKey(index);
2404
+ return this.#measuredSizes.get(key) ?? this.#estimatedSize();
2405
+ }
2406
+ #offsets() {
2407
+ const count = this.options.getCount();
2408
+ const measurementVersion = this.#measurementVersion;
2409
+ if (this.#offsetsCache && this.#offsetsCacheCount === count && this.#offsetsCacheMeasurementVersion === measurementVersion) {
2410
+ return this.#offsetsCache;
2411
+ }
2412
+ const offsets = Array.from({ length: count + 1 });
2413
+ let offset = 0;
2414
+ offsets[0] = 0;
2415
+ for (let index = 0;index < count; index += 1) {
2416
+ offset += this.#itemSize(index);
2417
+ offsets[index + 1] = offset;
2418
+ }
2419
+ this.#offsetsCache = offsets;
2420
+ this.#offsetsCacheCount = count;
2421
+ this.#offsetsCacheMeasurementVersion = measurementVersion;
2422
+ return offsets;
2423
+ }
2424
+ #readElementSize(node) {
2425
+ const rectHeight = node.getBoundingClientRect().height;
2426
+ return Math.ceil(rectHeight || node.scrollHeight || node.offsetHeight || 0);
2427
+ }
2428
+ #measureNode(node) {
2429
+ const index = Number(node.dataset["cinderVirtualIndex"]);
2430
+ if (!Number.isInteger(index) || index < 0 || index >= this.options.getCount())
2431
+ return;
2432
+ const measuredSize = this.#readElementSize(node);
2433
+ if (measuredSize <= 0)
2434
+ return;
2435
+ const key = this.options.getItemKey(index);
2436
+ if (this.#measuredSizes.get(key) === measuredSize)
2437
+ return;
2438
+ this.#measuredSizes.set(key, measuredSize);
2439
+ this.#measurementVersion += 1;
2440
+ }
2441
+ #startIndex(offsets, scrollTop) {
2442
+ const count = Math.max(0, offsets.length - 1);
2443
+ let low = 0;
2444
+ let high = count;
2445
+ while (low < high) {
2446
+ const mid = Math.floor((low + high) / 2);
2447
+ if ((offsets[mid + 1] ?? 0) <= scrollTop) {
2448
+ low = mid + 1;
2449
+ } else {
2450
+ high = mid;
2451
+ }
2452
+ }
2453
+ return low;
2454
+ }
2455
+ #endIndex(offsets, viewportEnd) {
2456
+ const count = Math.max(0, offsets.length - 1);
2457
+ let low = 0;
2458
+ let high = count;
2459
+ while (low < high) {
2460
+ const mid = Math.floor((low + high) / 2);
2461
+ if ((offsets[mid] ?? 0) < viewportEnd) {
2462
+ low = mid + 1;
2463
+ } else {
2464
+ high = mid;
2465
+ }
2466
+ }
2467
+ return low;
2468
+ }
2469
+ #virtualItemAt(index, offsets) {
2470
+ const start = offsets[index] ?? 0;
2471
+ const end = offsets[index + 1] ?? start + this.#estimatedSize();
2472
+ return {
2473
+ key: this.options.getItemKey(index),
2474
+ index,
2475
+ start,
2476
+ end,
2477
+ size: end - start,
2478
+ lane: 0
2479
+ };
2480
+ }
2481
+ #virtualItems() {
2482
+ const count = this.options.getCount();
2483
+ if (count === 0)
2484
+ return [];
2485
+ const offsets = this.#offsets();
2486
+ const overscan = Math.max(0, Math.trunc(this.options.getOverscan()));
2487
+ const scrollTop = Math.max(0, this.scrollOffset - this.#scrollPaddingStart());
2488
+ const viewportEnd = scrollTop + Math.max(0, this.#containerHeight());
2489
+ const visibleStartIndex = this.#startIndex(offsets, scrollTop);
2490
+ const visibleEndIndex = Math.max(visibleStartIndex + 1, this.#endIndex(offsets, viewportEnd));
2491
+ const startIndex = Math.max(0, visibleStartIndex - overscan);
2492
+ const endIndex = Math.min(count, visibleEndIndex + overscan);
2493
+ return Array.from({ length: endIndex - startIndex }, (_, offset) => {
2494
+ const index = startIndex + offset;
2495
+ return this.#virtualItemAt(index, offsets);
2496
+ });
2497
+ }
2498
+ }
2499
+
2500
+ // src/components/chat/container/use-chat-reasoning-state.svelte.ts
2501
+ import * as $30 from "svelte/internal/server";
2502
+ function useChatReasoningState(options) {
2503
+ const { onRemeasureRow } = options;
2504
+ let expandedIds = new Set;
2505
+ function isExpanded(messageId) {
2506
+ return expandedIds.has(messageId);
2507
+ }
2508
+ function toggle(messageId) {
2509
+ const next = new Set(expandedIds);
2510
+ if (next.has(messageId)) {
2511
+ next.delete(messageId);
2512
+ } else {
2513
+ next.add(messageId);
2514
+ }
2515
+ expandedIds = next;
2516
+ onRemeasureRow?.(messageId);
2517
+ }
2518
+ function reset() {
2519
+ expandedIds = new Set;
2520
+ }
2521
+ return { isExpanded, toggle, reset };
2522
+ }
2523
+
2524
+ // src/components/chat/container/use-chat-typing-indicator.svelte.ts
2525
+ import * as $31 from "svelte/internal/server";
2526
+ var ADAPTER_PARTICIPANT_ID = "__adapter__";
2527
+ var ADAPTER_PARTICIPANT_NAME = "Someone";
2528
+ function deriveTypingLabel(participants) {
2529
+ const count = participants.length;
2530
+ if (count === 0)
2531
+ return "";
2532
+ if (count === 1)
2533
+ return `${participants[0].name} is typing…`;
2534
+ if (count === 2)
2535
+ return `${participants[0].name} and ${participants[1].name} are typing…`;
2536
+ if (count <= 4)
2537
+ return `${count} people are typing…`;
2538
+ return "Several people are typing…";
2539
+ }
2540
+ function deriveAnnouncedLabel(participants) {
2541
+ const count = participants.length;
2542
+ if (count === 0)
2543
+ return "";
2544
+ if (count === 1)
2545
+ return `${participants[0].name} is typing`;
2546
+ if (count === 2)
2547
+ return `${participants[0].name} and ${participants[1].name} are typing`;
2548
+ if (count <= 4)
2549
+ return `${count} people are typing`;
2550
+ return "Several people are typing";
2551
+ }
2552
+ function useChatTypingIndicator(options) {
2553
+ let adapterIsTyping = false;
2554
+ let announcedLabel = "";
2555
+ let debounceHandle;
2556
+ const mergedParticipants = $31.derived(() => {
2557
+ const propParticipants = options.getTypingParticipants();
2558
+ if (propParticipants !== undefined)
2559
+ return propParticipants;
2560
+ if (!adapterIsTyping)
2561
+ return [];
2562
+ return [
2563
+ { id: ADAPTER_PARTICIPANT_ID, name: ADAPTER_PARTICIPANT_NAME }
2564
+ ];
2565
+ });
2566
+ const typingLabel = $31.derived(() => deriveTypingLabel(mergedParticipants()));
2567
+ const participantCount = $31.derived(() => mergedParticipants().length);
2568
+ const announcementText = $31.derived(() => deriveAnnouncedLabel(mergedParticipants()));
2569
+ function handleAdapterTypingChange(isTyping) {
2570
+ adapterIsTyping = isTyping;
2571
+ }
2572
+ function reset() {
2573
+ adapterIsTyping = false;
2574
+ }
2575
+ return {
2576
+ get typingLabel() {
2577
+ return typingLabel();
2578
+ },
2579
+ get announcedLabel() {
2580
+ return announcedLabel;
2581
+ },
2582
+ get participantCount() {
2583
+ return participantCount();
2584
+ },
2585
+ handleAdapterTypingChange,
2586
+ reset
2587
+ };
2588
+ }
2589
+
2590
+ // src/components/chat/container/use-chat-read-receipts.svelte.ts
2591
+ import * as $32 from "svelte/internal/server";
2592
+ function useChatReadReceipts(options) {
2593
+ let adapterReceipts = {};
2594
+ function getReceipt(messageId) {
2595
+ const propReceipts = options.getReadReceipts();
2596
+ if (propReceipts !== undefined)
2597
+ return propReceipts.get(messageId);
2598
+ return adapterReceipts[messageId];
2599
+ }
2600
+ function handleAdapterReadReceipt(event) {
2601
+ const existing = adapterReceipts[event.messageId];
2602
+ if (existing === undefined) {
2603
+ adapterReceipts[event.messageId] = {
2604
+ status: "read",
2605
+ ...event.readBy !== undefined ? { readBy: event.readBy } : {}
2606
+ };
2607
+ return;
2608
+ }
2609
+ if (event.readBy !== undefined && event.readBy.length > 0) {
2610
+ const merged = Array.from(new Set([...existing.readBy ?? [], ...event.readBy]));
2611
+ adapterReceipts[event.messageId] = { ...existing, readBy: merged };
2612
+ }
2613
+ }
2614
+ function reset() {
2615
+ adapterReceipts = {};
2616
+ }
2617
+ return { getReceipt, handleAdapterReadReceipt, reset };
2618
+ }
2619
+
2620
+ // src/components/chat/container/chat-participant-typing.svelte
2621
+ import * as $33 from "svelte/internal/server";
2622
+ function Chat_participant_typing($$renderer, $$props) {
2623
+ let { typingLabel, participantCount } = $$props;
2624
+ const isActive = $33.derived(() => participantCount > 0);
2625
+ $$renderer.push(`<div class="chat-participant-typing svelte-1i35kwx"${$33.attr("data-cinder-participant-typing", isActive() ? "" : undefined)}${$33.attr("data-cinder-participant-count", participantCount)} aria-hidden="true">`);
2626
+ if (isActive()) {
2627
+ $$renderer.push("<!--[0-->");
2628
+ $$renderer.push(`<div class="chat-participant-typing-indicator svelte-1i35kwx"><span class="chat-typing-dot svelte-1i35kwx" aria-hidden="true"></span> <span class="chat-typing-dot svelte-1i35kwx" aria-hidden="true"></span> <span class="chat-typing-dot svelte-1i35kwx" aria-hidden="true"></span> <span class="chat-participant-typing-label svelte-1i35kwx">${$33.escape(typingLabel)}</span></div>`);
2629
+ } else {
2630
+ $$renderer.push("<!--[-1-->");
2631
+ }
2632
+ $$renderer.push(`<!--]--></div>`);
2633
+ }
2634
+
2635
+ // src/components/chat/message/chat-read-receipt.svelte
2636
+ import * as $34 from "svelte/internal/server";
2637
+ function Chat_read_receipt($$renderer, $$props) {
2638
+ $$renderer.component(($$renderer2) => {
2639
+ let { receipt } = $$props;
2640
+ const status = $34.derived(() => receipt.status);
2641
+ const ariaLabel = $34.derived(() => {
2642
+ if (status() === "sent")
2643
+ return "Sent";
2644
+ if (status() === "delivered")
2645
+ return "Delivered";
2646
+ const readers = receipt.readBy;
2647
+ if (readers && readers.length > 0) {
2648
+ return `Read by ${readers.join(", ")}`;
2649
+ }
2650
+ return "Read";
2651
+ });
2652
+ const visibleLabel = $34.derived(() => status() === "sent" ? "Sent" : status() === "delivered" ? "Delivered" : "Read");
2653
+ const isDoubleCheck = $34.derived(() => status() === "delivered" || status() === "read");
2654
+ $$renderer2.push(`<span class="chat-read-receipt svelte-1r00g9n" role="img"${$34.attr("data-cinder-receipt-status", status())}${$34.attr("aria-label", ariaLabel())}><span class="chat-read-receipt-icon svelte-1r00g9n" aria-hidden="true">`);
2655
+ if (isDoubleCheck()) {
2656
+ $$renderer2.push("<!--[0-->");
2657
+ Check_check($$renderer2, { size: 12 });
2658
+ } else {
2659
+ $$renderer2.push("<!--[-1-->");
2660
+ Check($$renderer2, { size: 12 });
2661
+ }
2662
+ $$renderer2.push(`<!--]--></span> <span class="chat-read-receipt-label svelte-1r00g9n">${$34.escape(visibleLabel())}</span></span>`);
2663
+ });
2664
+ }
2665
+
2666
+ // src/components/chat/container/chat.svelte
2667
+ function Chat($$renderer, $$props) {
2668
+ $$renderer.component(($$renderer2) => {
2669
+ const noopAttachment = () => {};
2670
+ let {
2671
+ id,
2672
+ conversation,
2673
+ atBottom = true,
2674
+ unreadCount = 0,
2675
+ newMessageIndicatorVisible = false,
2676
+ class: className,
2677
+ surfaceMode = "default",
2678
+ density = "comfortable",
2679
+ variant = "bubble",
2680
+ bottomThreshold = DEFAULT_SCROLL_CONFIGURATION.bottomThreshold,
2681
+ jumpThreshold = DEFAULT_SCROLL_CONFIGURATION.jumpThreshold,
2682
+ streaming = false,
2683
+ streamingStatus,
2684
+ capabilities,
2685
+ virtualized = false,
2686
+ virtualizationEstimatedRowHeight = 88,
2687
+ virtualizationOverscan = 3,
2688
+ virtualizationInitialHeight = 640,
2689
+ moreHistoryAvailable = true,
2690
+ loadEarlierLabel = "Load earlier messages",
2691
+ loadingEarlierLabel = "Loading earlier messages",
2692
+ header,
2693
+ empty,
2694
+ emptyPrompts,
2695
+ messageActions,
2696
+ messageStatus,
2697
+ row,
2698
+ messagePart,
2699
+ viewportAttachment,
2700
+ typingParticipants,
2701
+ readReceipts,
2702
+ adapter,
2703
+ onadaptererror,
2704
+ onpushmessage,
2705
+ ontypingchange,
2706
+ onreadreceipt,
2707
+ onsubmit,
2708
+ onretry,
2709
+ onedit,
2710
+ onapprove,
2711
+ ondeny,
2712
+ messageReasoning,
2713
+ messageSteps,
2714
+ messageSuggestions,
2715
+ onsuggestionselect,
2716
+ onloadhistory,
2717
+ onstopgenerating,
2718
+ onjumptolatest,
2719
+ onscrollstatechange,
2720
+ onunreadindicatorchange,
2721
+ onexpandedchange,
2722
+ onattachmentadd,
2723
+ onattachmentremove,
2724
+ onattachmentfailure,
2725
+ $$slots,
2726
+ $$events,
2727
+ ...rest
2728
+ } = $$props;
2729
+ let viewport = null;
2730
+ let containerRef = null;
2731
+ let inputRef;
2732
+ let searchBarRef = undefined;
2733
+ let historyTriggerRef = undefined;
2734
+ let isContainerDragOver = false;
2735
+ let streamingContent = "";
2736
+ let streamingMessageId = null;
2737
+ let streamingRowElement = null;
2738
+ let tokenBuffer = [];
2739
+ let streamingScrollRaf;
2740
+ let approvedToolCallIds = new Set;
2741
+ let deniedToolCallIds = new Set;
2742
+ const reasoningState = useChatReasoningState({
2743
+ onRemeasureRow: (messageId) => {
2744
+ if (!isVirtualized() || !viewport)
2745
+ return;
2746
+ const rowNode = viewport.querySelector(`#message-${CSS.escape(messageId)}`);
2747
+ if (rowNode) {
2748
+ chatVirtualizer.measureElementNode(rowNode);
2749
+ }
2750
+ }
2751
+ });
2752
+ let isLoadingHistory = false;
2753
+ let adapterHasMoreHistory = undefined;
2754
+ let historyAnnouncement = "";
2755
+ let pendingHistoryScroll = null;
2756
+ let deferredAdapterHasMoreHistory = null;
2757
+ let historyAnchorMessageId = null;
2758
+ let historyAnchorViewportOffset = null;
2759
+ let historyAnchorRestoredScrollTop = null;
2760
+ let previousHistoryConversationId;
2761
+ let previousHistoryAdapter;
2762
+ const scrollState = useChatScrollState({
2763
+ getBottomThreshold: () => bottomThreshold,
2764
+ getJumpThreshold: () => jumpThreshold,
2765
+ onScrollStateChange: handleScrollStateChange,
2766
+ onReachBottom: () => {
2767
+ atBottom = true;
2768
+ if (unreadState.unreadCount > 0 || unreadState.newMessageIndicatorVisible) {
2769
+ unreadState.markAllAsRead();
2770
+ }
2771
+ }
2772
+ });
2773
+ const unreadState = useChatUnreadState({
2774
+ onUnreadIndicatorChange: (event) => {
2775
+ unreadCount = event.unreadCount;
2776
+ newMessageIndicatorVisible = event.newMessageIndicatorVisible;
2777
+ onunreadindicatorchange?.(event);
2778
+ }
2779
+ });
2780
+ const keyboardNav = useChatKeyboardNav({
2781
+ onJumpToLatest: handleJumpToLatest,
2782
+ onJumpToStart: () => {
2783
+ if (isVirtualized()) {
2784
+ chatVirtualizer.scrollToOffset(0, { behavior: scrollState.getScrollBehavior() });
2785
+ }
2786
+ },
2787
+ getScrollBehavior: scrollState.getScrollBehavior,
2788
+ getHistoryTrigger: () => showHistoryTrigger() ? historyTriggerRef : null,
2789
+ onVirtualMessageNavigation: (direction) => navigateVirtualMessage(direction)
2790
+ });
2791
+ const messages = $35.derived(() => getMessages(conversation));
2792
+ const lastMessageId = $35.derived(() => messages().at(-1)?.id);
2793
+ let previousAutoScrollMessageCount = getMessages(conversation).length;
2794
+ const conversationId = $35.derived(() => conversation.id);
2795
+ const showTypingIndicator = $35.derived(() => streaming && !streamingMessageId);
2796
+ const allowAttachments = $35.derived(() => capabilities?.attachments ?? true);
2797
+ const allowSearch = $35.derived(() => capabilities?.search ?? true);
2798
+ const allowCopy = $35.derived(() => capabilities?.copy ?? true);
2799
+ const allowEditing = $35.derived(() => capabilities?.editing ?? true);
2800
+ const allowRetry = $35.derived(() => capabilities?.retry ?? true);
2801
+ const toolCallPairsByCallId = $35.derived(() => {
2802
+ const toolCallPairs = pairToolCallsWithResults(messages());
2803
+ const map = new Map;
2804
+ for (const pair of toolCallPairs) {
2805
+ const existing = map.get(pair.call.id);
2806
+ if (existing) {
2807
+ existing.push(pair);
2808
+ } else {
2809
+ map.set(pair.call.id, [pair]);
2810
+ }
2811
+ }
2812
+ return map;
2813
+ });
2814
+ const renderRows = $35.derived(() => {
2815
+ const pairedToolResultIds = findPairedToolResultIds(messages());
2816
+ const messagesWithDates = buildMessagesWithDateSeparators(messages(), pairedToolResultIds);
2817
+ return buildChatRenderRows(messagesWithDates, {
2818
+ firstUnreadId: unreadState.firstUnreadId,
2819
+ showTypingIndicator: showTypingIndicator()
2820
+ });
2821
+ });
2822
+ let hasMounted = false;
2823
+ const isVirtualized = $35.derived(() => virtualized && hasMounted && messages().length > 0);
2824
+ const timelineResetIdentity = $35.derived(() => `${conversationId()}:${isVirtualized() ? "virtualized" : "full"}`);
2825
+ const staticRowsResetIdentity = $35.derived(() => messages()[0]?.id ?? "");
2826
+ const chatVirtualizer = new ChatVirtualizer({
2827
+ getScrollElement: () => viewport,
2828
+ getCount: () => isVirtualized() ? renderRows().length : 0,
2829
+ getItemKey: (index) => chatRenderRowKey(renderRows()[index] ?? { type: "typing" }),
2830
+ getEstimatedSize: () => virtualizationEstimatedRowHeight,
2831
+ getOverscan: () => virtualizationOverscan,
2832
+ getInitialHeight: () => virtualizationInitialHeight,
2833
+ getScrollPaddingStart: () => virtualSpacerOffsetTop()
2834
+ });
2835
+ const virtualRows = $35.derived(() => {
2836
+ if (!isVirtualized())
2837
+ return [];
2838
+ const renderedIndexes = new Set;
2839
+ const rows = [];
2840
+ for (const virtualItem of chatVirtualizer.virtualItems) {
2841
+ const row2 = renderRows()[virtualItem.index];
2842
+ if (!row2)
2843
+ continue;
2844
+ renderedIndexes.add(virtualItem.index);
2845
+ rows.push({
2846
+ row: row2,
2847
+ virtualItem: pinHistoryAnchorVirtualItem(row2, virtualItem)
2848
+ });
2849
+ }
2850
+ if (streamingMessageId) {
2851
+ const streamingIndex = findRenderRowIndexByMessageId(renderRows(), streamingMessageId);
2852
+ if (streamingIndex >= 0 && !renderedIndexes.has(streamingIndex)) {
2853
+ const virtualItem = chatVirtualizer.getVirtualItem(streamingIndex);
2854
+ if (!virtualItem)
2855
+ return rows;
2856
+ rows.push({ row: renderRows()[streamingIndex], virtualItem });
2857
+ }
2858
+ }
2859
+ if (historyAnchorMessageId) {
2860
+ const historyAnchorIndex = findRenderRowIndexByMessageId(renderRows(), historyAnchorMessageId);
2861
+ if (historyAnchorIndex >= 0 && !renderedIndexes.has(historyAnchorIndex)) {
2862
+ const virtualItem = chatVirtualizer.getVirtualItem(historyAnchorIndex);
2863
+ if (!virtualItem)
2864
+ return rows;
2865
+ const row2 = renderRows()[historyAnchorIndex];
2866
+ if (row2) {
2867
+ rows.push({
2868
+ row: row2,
2869
+ virtualItem: pinHistoryAnchorVirtualItem(row2, virtualItem)
2870
+ });
2871
+ }
2872
+ }
2873
+ }
2874
+ rows.sort((a, b) => a.virtualItem.index - b.virtualItem.index);
2875
+ return rows;
2876
+ });
2877
+ function pinHistoryAnchorVirtualItem(row2, virtualItem) {
2878
+ if (historyAnchorViewportOffset === null || row2.type !== "message" || row2.message.id !== historyAnchorMessageId) {
2879
+ return virtualItem;
2880
+ }
2881
+ const scrollTop = viewport?.scrollTop ?? chatVirtualizer.scrollOffset;
2882
+ const start = Math.max(0, scrollTop - chatVirtualizer.scrollPaddingStart + historyAnchorViewportOffset);
2883
+ return { ...virtualItem, start, end: start + virtualItem.size };
2884
+ }
2885
+ const searchState = useChatSearch({ getMessages: () => messages() });
2886
+ const typingIndicatorState = useChatTypingIndicator({ getTypingParticipants: () => typingParticipants });
2887
+ const readReceiptsState = useChatReadReceipts({ getReadReceipts: () => readReceipts });
2888
+ const viewportAttach = $35.derived(() => viewportAttachment ?? noopAttachment);
2889
+ const effectiveHasMoreHistory = $35.derived(() => adapterHasMoreHistory ?? moreHistoryAvailable);
2890
+ const hasHistoryLoader = $35.derived(() => onloadhistory !== undefined || adapter?.loadOlderMessages !== undefined);
2891
+ const showHistoryTrigger = $35.derived(() => hasHistoryLoader() && effectiveHasMoreHistory());
2892
+ const canRetry = $35.derived(() => onretry !== undefined || adapter?.retryMessage !== undefined);
2893
+ const canEdit = $35.derived(() => onedit !== undefined || adapter?.editMessage !== undefined);
2894
+ const sentinelAttach = $35.derived(() => isVirtualized() ? noopAttachment : useIntersection(scrollState.handleSentinelEntry, {
2895
+ root: viewport,
2896
+ rootMargin: `0px 0px ${bottomThreshold}px 0px`
2897
+ }));
2898
+ const timelineId = $35.derived(() => `${id}-timeline`);
2899
+ const inputId = $35.derived(() => `${id}-input`);
2900
+ const statusId = $35.derived(() => `${id}-status`);
2901
+ const toolApprovalAssertiveMessage = $35.derived(() => {
2902
+ for (const message of messages()) {
2903
+ if (message.role === "tool-result" && message.toolResult?.outcome === "action_required" && message.toolResult.action && !approvedToolCallIds.has(message.toolResult.callId) && !deniedToolCallIds.has(message.toolResult.callId)) {
2904
+ const actionMessage = message.toolResult.action.message ?? "This tool call requires your approval before it can continue.";
2905
+ return `Action required: ${actionMessage}`;
2906
+ }
2907
+ }
2908
+ return "";
2909
+ });
2910
+ async function waitForLayoutFrame() {
2911
+ await tick2();
2912
+ if (typeof requestAnimationFrame !== "function")
2913
+ return;
2914
+ await new Promise((resolve) => {
2915
+ requestAnimationFrame(() => resolve());
2916
+ });
2917
+ }
2918
+ async function restorePendingHistoryScrollAfterLayout(pending) {
2919
+ await waitForLayoutFrame();
2920
+ if (pendingHistoryScroll !== pending)
2921
+ return false;
2922
+ return restoreHistoryScroll(pending);
2923
+ }
2924
+ function restoreHistoryScroll(pending) {
2925
+ if (!viewport)
2926
+ return false;
2927
+ const currentFirstMessageId = messages()[0]?.id ?? null;
2928
+ const currentCount = messages().length;
2929
+ if (currentCount <= pending.previousCount || currentFirstMessageId === pending.previousFirstTranscriptMessageId) {
2930
+ return false;
2931
+ }
2932
+ const prependedCount = currentCount - pending.previousCount;
2933
+ pendingHistoryScroll = null;
2934
+ finishDeferredAdapterHistoryLoading();
2935
+ if (isVirtualized()) {
2936
+ setHistoryAnchor(pending);
2937
+ }
2938
+ if (isVirtualized()) {
2939
+ const newTotalSize = chatVirtualizer.scrollSize;
2940
+ const delta = newTotalSize - pending.previousTotalSize;
2941
+ const targetScrollTop = pending.previousScrollTop + delta;
2942
+ chatVirtualizer.scrollToOffset(targetScrollTop, { behavior: "instant" });
2943
+ historyAnchorRestoredScrollTop = viewport?.scrollTop ?? chatVirtualizer.scrollOffset;
2944
+ } else {
2945
+ clearHistoryAnchor();
2946
+ const newTotalSize = viewport.scrollHeight;
2947
+ const delta = newTotalSize - pending.previousScrollHeight;
2948
+ viewport.scrollTo({ top: pending.previousScrollTop + delta, behavior: "instant" });
2949
+ }
2950
+ const announcement = prependedCount === 1 ? "1 earlier message loaded." : `${prependedCount} earlier messages loaded.`;
2951
+ historyAnnouncement = announcement;
2952
+ setTimeout(() => {
2953
+ if (historyAnnouncement === announcement) {
2954
+ historyAnnouncement = "";
2955
+ }
2956
+ }, 1000);
2957
+ tick2().then(() => {
2958
+ focusAfterHistoryRestore(pending);
2959
+ });
2960
+ return true;
2961
+ }
2962
+ function setHistoryAnchor(pending) {
2963
+ historyAnchorMessageId = pending.previousFirstMessageId;
2964
+ historyAnchorViewportOffset = pending.previousFirstMessageViewportOffset;
2965
+ historyAnchorRestoredScrollTop = null;
2966
+ }
2967
+ function clearHistoryAnchor() {
2968
+ historyAnchorMessageId = null;
2969
+ historyAnchorViewportOffset = null;
2970
+ historyAnchorRestoredScrollTop = null;
2971
+ }
2972
+ function clearHistoryAnchorAfterScroll(scrollTop) {
2973
+ if (historyAnchorMessageId !== null && historyAnchorRestoredScrollTop !== null && Math.abs(scrollTop - historyAnchorRestoredScrollTop) > 2) {
2974
+ clearHistoryAnchor();
2975
+ }
2976
+ }
2977
+ function handleScrollStateChange(event) {
2978
+ clearHistoryAnchorAfterScroll(event.scrollTop);
2979
+ atBottom = event.atBottom;
2980
+ onscrollstatechange?.(event);
2981
+ }
2982
+ function virtualSpacerOffsetTop() {
2983
+ if (!viewport)
2984
+ return 0;
2985
+ const spacer = viewport.querySelector(".chat-virtual-spacer");
2986
+ if (!spacer)
2987
+ return 0;
2988
+ const offsetTop = spacer.offsetTop;
2989
+ const spacerRect = spacer.getBoundingClientRect();
2990
+ const viewportRect = viewport.getBoundingClientRect();
2991
+ const hasLayoutBox = spacerRect.top !== 0 || spacerRect.bottom !== 0 || viewportRect.top !== 0 || viewportRect.bottom !== 0;
2992
+ if (!hasLayoutBox)
2993
+ return Math.max(0, offsetTop);
2994
+ const rectOffset = spacerRect.top - viewportRect.top + viewport.scrollTop;
2995
+ return Math.max(0, Number.isFinite(rectOffset) ? rectOffset : offsetTop);
2996
+ }
2997
+ function focusAfterHistoryRestore(pending) {
2998
+ if (!viewport)
2999
+ return;
3000
+ if (showHistoryTrigger() && historyTriggerRef) {
3001
+ historyTriggerRef.focus({ preventScroll: true });
3002
+ return;
3003
+ }
3004
+ const anchor = pending.previousFirstMessageId ? viewport.querySelector(`#message-${CSS.escape(pending.previousFirstMessageId)}`) : null;
3005
+ const target = anchor ?? viewport.querySelector(".chat-message");
3006
+ target?.focus({ preventScroll: true });
3007
+ }
3008
+ const scrollAttachment = scrollState.createScrollAttachment();
3009
+ const historyAnchorScrollAttachment = $35.derived(() => historyAnchorMessageId === null || historyAnchorRestoredScrollTop === null ? noopAttachment : (node) => {
3010
+ const handleScroll = () => clearHistoryAnchorAfterScroll(node.scrollTop);
3011
+ node.addEventListener("scroll", handleScroll, { passive: true });
3012
+ return () => node.removeEventListener("scroll", handleScroll);
3013
+ });
3014
+ function handleJumpToLatest() {
3015
+ if (isVirtualized()) {
3016
+ chatVirtualizer.scrollToIndex(Math.max(0, renderRows().length - 1), { align: "end", behavior: scrollState.getScrollBehavior() });
3017
+ unreadState.markAllAsRead();
3018
+ onjumptolatest?.();
3019
+ tick2().then(() => {
3020
+ const lastMessage = viewport?.querySelector(`.chat-message-wrapper:last-of-type .chat-message`);
3021
+ lastMessage?.focus();
3022
+ });
3023
+ return;
3024
+ }
3025
+ scrollState.jumpToLatest(viewport, () => {
3026
+ unreadState.markAllAsRead();
3027
+ onjumptolatest?.();
3028
+ });
3029
+ }
3030
+ function dispatchCommand(command, runAdapterMethod, callback) {
3031
+ if (adapter) {
3032
+ try {
3033
+ const run = runAdapterMethod(adapter);
3034
+ if (run !== undefined) {
3035
+ return run.catch((error) => {
3036
+ onadaptererror?.({ command, error });
3037
+ });
3038
+ }
3039
+ } catch (error) {
3040
+ onadaptererror?.({ command, error });
3041
+ return;
3042
+ }
3043
+ }
3044
+ callback?.();
3045
+ }
3046
+ function handleSubmit(message, attachments) {
3047
+ dispatchCommand("sendMessage", (resolvedAdapter) => Promise.resolve(resolvedAdapter.sendMessage(message, attachments)), () => onsubmit?.({ message, attachments }));
3048
+ scrollState.setAtBottom(true);
3049
+ atBottom = true;
3050
+ tick2().then(() => {
3051
+ if (isVirtualized()) {
3052
+ chatVirtualizer.scrollToOffset(chatVirtualizer.scrollSize, { behavior: "instant" });
3053
+ } else {
3054
+ viewport?.scrollTo({ top: viewport.scrollHeight, behavior: "instant" });
3055
+ }
3056
+ });
3057
+ }
3058
+ function captureHistoryScroll() {
3059
+ const previousFirstTranscriptMessageId = messages()[0]?.id ?? null;
3060
+ const visibleAnchor = firstVisibleRenderedMessage();
3061
+ const previousFirstMessageId = visibleAnchor?.messageId ?? previousFirstTranscriptMessageId;
3062
+ const previousScrollTop = viewport?.scrollTop ?? chatVirtualizer.scrollOffset;
3063
+ const previousFirstMessageElement = previousFirstMessageId !== null ? renderedMessageById(previousFirstMessageId) : null;
3064
+ const previousFirstMessageViewportOffset = visibleAnchor?.viewportOffset ?? (previousFirstMessageElement && viewport ? previousFirstMessageElement.getBoundingClientRect().top - viewport.getBoundingClientRect().top : 0);
3065
+ pendingHistoryScroll = {
3066
+ previousFirstMessageId,
3067
+ previousFirstTranscriptMessageId,
3068
+ previousFirstMessageViewportOffset,
3069
+ previousCount: messages().length,
3070
+ previousScrollTop,
3071
+ previousScrollHeight: viewport?.scrollHeight ?? 0,
3072
+ previousTotalSize: chatVirtualizer.scrollSize
3073
+ };
3074
+ }
3075
+ async function settlePendingHistoryScroll(pending) {
3076
+ for (let attempt = 0;attempt < 5; attempt += 1) {
3077
+ if (pendingHistoryScroll !== pending)
3078
+ return;
3079
+ if (await restorePendingHistoryScrollAfterLayout(pending))
3080
+ return;
3081
+ }
3082
+ if (pendingHistoryScroll === pending) {
3083
+ pendingHistoryScroll = null;
3084
+ finishDeferredAdapterHistoryLoading();
3085
+ }
3086
+ }
3087
+ function finishDeferredAdapterHistoryLoading() {
3088
+ if (deferredAdapterHasMoreHistory === null)
3089
+ return;
3090
+ adapterHasMoreHistory = deferredAdapterHasMoreHistory;
3091
+ deferredAdapterHasMoreHistory = null;
3092
+ isLoadingHistory = false;
3093
+ }
3094
+ function historyTranscriptChanged(pending) {
3095
+ return messages().length > pending.previousCount || messages()[0]?.id !== pending.previousFirstTranscriptMessageId;
3096
+ }
3097
+ async function handleLoadHistory() {
3098
+ if (isLoadingHistory || !showHistoryTrigger())
3099
+ return;
3100
+ isLoadingHistory = true;
3101
+ captureHistoryScroll();
3102
+ const pending = pendingHistoryScroll;
3103
+ if (pending === null) {
3104
+ isLoadingHistory = false;
3105
+ return;
3106
+ }
3107
+ if (adapter?.loadOlderMessages) {
3108
+ let nextHasMoreHistory;
3109
+ try {
3110
+ const result = await adapter.loadOlderMessages(conversationId());
3111
+ nextHasMoreHistory = result.hasMore;
3112
+ } catch (error) {
3113
+ pendingHistoryScroll = null;
3114
+ isLoadingHistory = false;
3115
+ onadaptererror?.({ command: "loadOlderMessages", error });
3116
+ return;
3117
+ }
3118
+ const transcriptChanged = historyTranscriptChanged(pending);
3119
+ if (isVirtualized() && !transcriptChanged) {
3120
+ deferredAdapterHasMoreHistory = nextHasMoreHistory ?? null;
3121
+ await tick2();
3122
+ if (historyTranscriptChanged(pending)) {
3123
+ await settlePendingHistoryScroll(pending);
3124
+ } else if (pendingHistoryScroll === pending) {
3125
+ pendingHistoryScroll = null;
3126
+ finishDeferredAdapterHistoryLoading();
3127
+ } else {
3128
+ finishDeferredAdapterHistoryLoading();
3129
+ }
3130
+ return;
3131
+ }
3132
+ if (isVirtualized() || transcriptChanged) {
3133
+ await settlePendingHistoryScroll(pending);
3134
+ } else {
3135
+ pendingHistoryScroll = null;
3136
+ }
3137
+ adapterHasMoreHistory = nextHasMoreHistory;
3138
+ isLoadingHistory = false;
3139
+ return;
3140
+ }
3141
+ try {
3142
+ await onloadhistory?.();
3143
+ await settlePendingHistoryScroll(pending);
3144
+ } catch (error) {
3145
+ pendingHistoryScroll = null;
3146
+ throw error;
3147
+ } finally {
3148
+ isLoadingHistory = false;
3149
+ }
3150
+ }
3151
+ function handleRetry(messageId) {
3152
+ dispatchCommand("retryMessage", (resolvedAdapter) => resolvedAdapter.retryMessage ? Promise.resolve(resolvedAdapter.retryMessage(messageId)) : undefined, () => onretry?.(messageId));
3153
+ }
3154
+ function handleEdit(event) {
3155
+ dispatchCommand("editMessage", (resolvedAdapter) => resolvedAdapter.editMessage ? Promise.resolve(resolvedAdapter.editMessage(event)) : undefined, () => onedit?.(event));
3156
+ }
3157
+ function handleSuggestionSelect(label) {
3158
+ onsuggestionselect?.(label);
3159
+ inputRef?.focus();
3160
+ }
3161
+ const canApprove = $35.derived(() => onapprove !== undefined || adapter?.approveToolCall !== undefined);
3162
+ const canDeny = $35.derived(() => ondeny !== undefined || adapter?.denyToolCall !== undefined);
3163
+ function resolveToolApproval(toolCallId, command, canHandle, commit, rollback, runAdapter, callback) {
3164
+ if (!canHandle)
3165
+ return;
3166
+ if (approvedToolCallIds.has(toolCallId) || deniedToolCallIds.has(toolCallId))
3167
+ return;
3168
+ commit(toolCallId);
3169
+ if (adapter) {
3170
+ let run;
3171
+ try {
3172
+ run = runAdapter(adapter);
3173
+ } catch (error) {
3174
+ rollback(toolCallId);
3175
+ onadaptererror?.({ command, error });
3176
+ return;
3177
+ }
3178
+ if (run !== undefined) {
3179
+ run.then(() => callback?.(), (error) => {
3180
+ rollback(toolCallId);
3181
+ onadaptererror?.({ command, error });
3182
+ });
3183
+ return;
3184
+ }
3185
+ }
3186
+ callback?.();
3187
+ }
3188
+ function handleApprove(toolCallId) {
3189
+ resolveToolApproval(toolCallId, "approveToolCall", canApprove(), (id2) => approvedToolCallIds = new Set([...approvedToolCallIds, id2]), (id2) => approvedToolCallIds = removeFromSet(approvedToolCallIds, id2), (resolvedAdapter) => resolvedAdapter.approveToolCall ? Promise.resolve(resolvedAdapter.approveToolCall(toolCallId)) : undefined, () => onapprove?.(toolCallId));
3190
+ }
3191
+ function handleDeny(toolCallId) {
3192
+ resolveToolApproval(toolCallId, "denyToolCall", canDeny(), (id2) => deniedToolCallIds = new Set([...deniedToolCallIds, id2]), (id2) => deniedToolCallIds = removeFromSet(deniedToolCallIds, id2), (resolvedAdapter) => resolvedAdapter.denyToolCall ? Promise.resolve(resolvedAdapter.denyToolCall(toolCallId)) : undefined, () => ondeny?.(toolCallId));
3193
+ }
3194
+ function removeFromSet(set, value) {
3195
+ const next = new Set(set);
3196
+ next.delete(value);
3197
+ return next;
3198
+ }
3199
+ function handleStopGenerating() {
3200
+ let streamingMessage;
3201
+ for (let i = messages().length - 1;i >= 0; i--) {
3202
+ const message = messages()[i];
3203
+ if (message?.role === "assistant") {
3204
+ streamingMessage = message;
3205
+ break;
3206
+ }
3207
+ }
3208
+ if (streamingMessage) {
3209
+ const targetMessageId = streamingMessage.id;
3210
+ dispatchCommand("stopGenerating", (resolvedAdapter) => resolvedAdapter.stopGenerating ? Promise.resolve(resolvedAdapter.stopGenerating(targetMessageId)) : undefined, () => onstopgenerating?.({ messageId: targetMessageId }));
3211
+ }
3212
+ }
3213
+ function handlePromptClick(prompt) {
3214
+ const currentAttachments = (inputRef?.getAttachments() ?? []).filter((a) => a.status === "ready");
3215
+ handleSubmit({ role: "user", content: prompt }, currentAttachments);
3216
+ inputRef?.clear();
3217
+ }
3218
+ function handleKeyDown(event) {
3219
+ if (allowSearch() && (event.ctrlKey || event.metaKey) && event.key === "f") {
3220
+ event.preventDefault();
3221
+ if (searchState.isOpen) {
3222
+ searchBarRef?.focusInput();
3223
+ } else {
3224
+ searchState.open();
3225
+ }
3226
+ return;
3227
+ }
3228
+ keyboardNav.handleKeyDown(event, viewport);
3229
+ }
3230
+ function messageIdFromElement(element) {
3231
+ if (!element.id.startsWith("message-"))
3232
+ return null;
3233
+ return element.id.slice("message-".length);
3234
+ }
3235
+ function renderedMessageById(messageId) {
3236
+ return viewport?.querySelector(`#message-${CSS.escape(messageId)}`) ?? null;
3237
+ }
3238
+ function firstVisibleRenderedMessage() {
3239
+ if (!viewport)
3240
+ return null;
3241
+ const viewportRect = viewport.getBoundingClientRect();
3242
+ for (const message of viewport.querySelectorAll(".chat-message")) {
3243
+ const messageId = messageIdFromElement(message);
3244
+ if (!messageId)
3245
+ continue;
3246
+ const rect = message.getBoundingClientRect();
3247
+ if (rect.bottom <= viewportRect.top || rect.top >= viewportRect.bottom)
3248
+ continue;
3249
+ return { messageId, viewportOffset: rect.top - viewportRect.top };
3250
+ }
3251
+ return null;
3252
+ }
3253
+ async function focusVirtualMessage(messageId) {
3254
+ const existing = renderedMessageById(messageId);
3255
+ if (existing) {
3256
+ existing.focus();
3257
+ existing.scrollIntoView({ behavior: scrollState.getScrollBehavior(), block: "nearest" });
3258
+ return;
3259
+ }
3260
+ const targetIndex = findRenderRowIndexByMessageId(renderRows(), messageId);
3261
+ if (targetIndex < 0)
3262
+ return;
3263
+ chatVirtualizer.scrollToIndex(targetIndex, { align: "auto", behavior: scrollState.getScrollBehavior() });
3264
+ await tick2();
3265
+ const target = renderedMessageById(messageId);
3266
+ target?.focus();
3267
+ target?.scrollIntoView({ behavior: scrollState.getScrollBehavior(), block: "nearest" });
3268
+ }
3269
+ function navigateVirtualMessage(direction) {
3270
+ if (!isVirtualized() || !viewport)
3271
+ return false;
3272
+ const activeElement = document.activeElement instanceof HTMLElement ? document.activeElement : null;
3273
+ if (!activeElement?.classList.contains("chat-message"))
3274
+ return false;
3275
+ const currentMessageId = messageIdFromElement(activeElement);
3276
+ if (!currentMessageId)
3277
+ return false;
3278
+ const currentIndex = findRenderRowIndexByMessageId(renderRows(), currentMessageId);
3279
+ if (currentIndex < 0)
3280
+ return false;
3281
+ const step = direction === "next" ? 1 : -1;
3282
+ for (let targetIndex = currentIndex + step;targetIndex >= 0 && targetIndex < renderRows().length; targetIndex += step) {
3283
+ const targetRow = renderRows()[targetIndex];
3284
+ if (targetRow?.type !== "message")
3285
+ continue;
3286
+ focusVirtualMessage(targetRow.message.id);
3287
+ return true;
3288
+ }
3289
+ return true;
3290
+ }
3291
+ async function scrollCurrentSearchMatch(messageId) {
3292
+ if (!viewport)
3293
+ return;
3294
+ if (isVirtualized()) {
3295
+ const targetIndex = findRenderRowIndexByMessageId(renderRows(), messageId);
3296
+ if (targetIndex >= 0) {
3297
+ chatVirtualizer.scrollToIndex(targetIndex, { align: "center", behavior: "auto" });
3298
+ await tick2();
3299
+ }
3300
+ }
3301
+ const messageElement = viewport.querySelector(`#message-${CSS.escape(messageId)}`);
3302
+ if (messageElement) {
3303
+ messageElement.scrollIntoView({ behavior: "auto", block: "nearest" });
3304
+ }
3305
+ }
3306
+ function handleContainerDrop(event) {
3307
+ if (!event.dataTransfer?.types.includes("Files"))
3308
+ return;
3309
+ isContainerDragOver = false;
3310
+ if (!allowAttachments())
3311
+ return;
3312
+ event.preventDefault();
3313
+ const files = event.dataTransfer.files;
3314
+ if (files.length > 0) {
3315
+ inputRef?.addFiles(Array.from(files));
3316
+ }
3317
+ }
3318
+ function handleContainerDragOver(event) {
3319
+ if (!event.dataTransfer?.types.includes("Files"))
3320
+ return;
3321
+ if (!allowAttachments())
3322
+ return;
3323
+ event.preventDefault();
3324
+ event.dataTransfer.dropEffect = "copy";
3325
+ isContainerDragOver = true;
3326
+ }
3327
+ function handleContainerDragLeave(event) {
3328
+ const container = event.currentTarget;
3329
+ if (!container.contains(event.relatedTarget)) {
3330
+ isContainerDragOver = false;
3331
+ }
3332
+ }
3333
+ function scrollToBottom() {
3334
+ if (isVirtualized()) {
3335
+ chatVirtualizer.scrollToOffset(chatVirtualizer.scrollSize, { behavior: scrollState.getScrollBehavior() });
3336
+ } else {
3337
+ scrollState.scrollToBottom(viewport);
3338
+ }
3339
+ }
3340
+ function scrollToTop() {
3341
+ if (isVirtualized()) {
3342
+ chatVirtualizer.scrollToOffset(0, { behavior: scrollState.getScrollBehavior() });
3343
+ } else {
3344
+ scrollState.scrollToTop(viewport);
3345
+ }
3346
+ }
3347
+ function focusInput() {
3348
+ inputRef?.focus();
3349
+ }
3350
+ function beginStreaming(messageId) {
3351
+ if (streamingScrollRaf !== undefined) {
3352
+ cancelAnimationFrame(streamingScrollRaf);
3353
+ streamingScrollRaf = undefined;
3354
+ }
3355
+ streamingMessageId = messageId;
3356
+ streamingContent = "";
3357
+ tokenBuffer = [];
3358
+ }
3359
+ function pushToken(token) {
3360
+ tokenBuffer.push(token);
3361
+ if (streamingScrollRaf === undefined) {
3362
+ streamingScrollRaf = requestAnimationFrame(() => {
3363
+ streamingScrollRaf = undefined;
3364
+ streamingContent = tokenBuffer.join("");
3365
+ if (streamingRowElement) {
3366
+ tick2().then(() => {
3367
+ if (streamingRowElement) {
3368
+ chatVirtualizer.measureElementNode(streamingRowElement);
3369
+ }
3370
+ });
3371
+ }
3372
+ if (scrollState.atBottom && viewport) {
3373
+ if (isVirtualized()) {
3374
+ chatVirtualizer.scrollToOffset(chatVirtualizer.scrollSize, { behavior: "instant" });
3375
+ } else {
3376
+ viewport.scrollTo({ top: viewport.scrollHeight, behavior: "instant" });
3377
+ }
3378
+ }
3379
+ });
3380
+ }
3381
+ }
3382
+ function endStreaming() {
3383
+ if (streamingScrollRaf !== undefined) {
3384
+ cancelAnimationFrame(streamingScrollRaf);
3385
+ streamingScrollRaf = undefined;
3386
+ }
3387
+ streamingMessageId = null;
3388
+ streamingContent = "";
3389
+ tokenBuffer = [];
3390
+ }
3391
+ function virtualizedSpacerStyle() {
3392
+ return `height: ${chatVirtualizer.totalSize}px; position: relative; width: 100%;`;
3393
+ }
3394
+ function virtualizedRowStyle(virtualItem) {
3395
+ return `position: absolute; inset-inline: 0; top: 0; transform: translateY(${virtualItem.start}px);`;
3396
+ }
3397
+ function virtualRowAttachment(row2) {
3398
+ return (node) => {
3399
+ const detachMeasurement = chatVirtualizer.measureElement(node);
3400
+ if (row2.type === "message" && row2.message.id === streamingMessageId) {
3401
+ streamingRowElement = node;
3402
+ }
3403
+ return () => {
3404
+ detachMeasurement?.();
3405
+ if (streamingRowElement === node) {
3406
+ streamingRowElement = null;
3407
+ }
3408
+ };
3409
+ };
3410
+ }
3411
+ function renderTypingIndicator($$renderer3) {
3412
+ $$renderer3.push(`<div class="chat-typing-indicator svelte-932akd" role="status"${$35.attr("aria-label", streamingStatus ?? "Assistant is typing")}>`);
3413
+ if (streamingStatus) {
3414
+ $$renderer3.push("<!--[0-->");
3415
+ $$renderer3.push(`<span class="chat-typing-status svelte-932akd">${$35.escape(streamingStatus)}</span>`);
3416
+ } else {
3417
+ $$renderer3.push("<!--[-1-->");
3418
+ $$renderer3.push(`<span class="chat-typing-dot svelte-932akd" aria-hidden="true"></span> <span class="chat-typing-dot svelte-932akd" aria-hidden="true"></span> <span class="chat-typing-dot svelte-932akd" aria-hidden="true"></span>`);
3419
+ }
3420
+ $$renderer3.push(`<!--]--></div>`);
3421
+ }
3422
+ function renderMessageRow($$renderer3, messageRow) {
3423
+ const message = messageRow.message;
3424
+ const pairs = message.toolCall?.id ? toolCallPairsByCallId().get(message.toolCall.id) ?? [] : [];
3425
+ const isStreamingMessage = streamingMessageId === message.id;
3426
+ const isCurrentSearchMatch = searchState.isOpen && searchState.currentMatch !== null && searchState.currentMatch.message.id === message.id;
3427
+ const derivedReasoning = resolveMessageReasoning(message, messageReasoning);
3428
+ const derivedSteps = resolveMessageSteps(message, messageSteps);
3429
+ const derivedSuggestions = message.id === lastMessageId() ? resolveMessageSuggestions(message, messageSuggestions) : undefined;
3430
+ function renderDefaultRow($$renderer4) {
3431
+ const receipt = message.role === "user" ? readReceiptsState.getReceipt(message.id) : undefined;
3432
+ {
3433
+ let actions = function($$renderer5) {
3434
+ if (messageActions) {
3435
+ $$renderer5.push("<!--[0-->");
3436
+ messageActions($$renderer5, message);
3437
+ $$renderer5.push(`<!---->`);
3438
+ } else {
3439
+ $$renderer5.push("<!--[-1-->");
3440
+ }
3441
+ $$renderer5.push(`<!--]-->`);
3442
+ }, status = function($$renderer5) {
3443
+ if (messageStatus) {
3444
+ $$renderer5.push("<!--[0-->");
3445
+ messageStatus($$renderer5, message);
3446
+ $$renderer5.push(`<!---->`);
3447
+ } else if (receipt) {
3448
+ $$renderer5.push("<!--[1-->");
3449
+ Chat_read_receipt($$renderer5, { receipt });
3450
+ } else {
3451
+ $$renderer5.push("<!--[-1-->");
3452
+ }
3453
+ $$renderer5.push(`<!--]-->`);
3454
+ };
3455
+ Chat_message($$renderer4, {
3456
+ message,
3457
+ toolCallPairs: pairs,
3458
+ messagePart,
3459
+ onretry: allowRetry() && canRetry() ? handleRetry : undefined,
3460
+ onedit: allowEditing() && canEdit() ? handleEdit : undefined,
3461
+ showDefaultActions: allowCopy(),
3462
+ onexpandedchange,
3463
+ streaming: isStreamingMessage,
3464
+ overrideContent: isStreamingMessage ? streamingContent : undefined,
3465
+ searchMatch: isCurrentSearchMatch,
3466
+ tabindex: -1,
3467
+ approvedToolCallIds: approvedToolCallIds.size > 0 ? approvedToolCallIds : undefined,
3468
+ deniedToolCallIds: deniedToolCallIds.size > 0 ? deniedToolCallIds : undefined,
3469
+ onapprove: canApprove() ? handleApprove : undefined,
3470
+ ondeny: canDeny() ? handleDeny : undefined,
3471
+ reasoning: derivedReasoning,
3472
+ steps: derivedSteps,
3473
+ suggestions: derivedSuggestions,
3474
+ reasoningExpanded: reasoningState.isExpanded(message.id),
3475
+ onreasoning: () => reasoningState.toggle(message.id),
3476
+ onsuggestionselect: handleSuggestionSelect,
3477
+ actions,
3478
+ status,
3479
+ $$slots: { actions: true, status: true }
3480
+ });
3481
+ }
3482
+ }
3483
+ if (row) {
3484
+ $$renderer3.push("<!--[0-->");
3485
+ row($$renderer3, message, renderDefaultRow);
3486
+ $$renderer3.push(`<!---->`);
3487
+ } else {
3488
+ $$renderer3.push("<!--[-1-->");
3489
+ renderDefaultRow($$renderer3);
3490
+ }
3491
+ $$renderer3.push(`<!--]-->`);
3492
+ }
3493
+ function renderChatRow($$renderer3, renderRow) {
3494
+ if (renderRow.type === "date") {
3495
+ $$renderer3.push("<!--[0-->");
3496
+ Chat_date_separator($$renderer3, { date: renderRow.date });
3497
+ } else if (renderRow.type === "unread-divider") {
3498
+ $$renderer3.push("<!--[1-->");
3499
+ $$renderer3.push(`<div class="chat-unread-divider svelte-932akd" role="separator" aria-label="New messages below"><span class="chat-unread-divider-line svelte-932akd" aria-hidden="true"></span> <span class="chat-unread-divider-label svelte-932akd">New</span> <span class="chat-unread-divider-line svelte-932akd" aria-hidden="true"></span></div>`);
3500
+ } else if (renderRow.type === "typing") {
3501
+ $$renderer3.push("<!--[2-->");
3502
+ renderTypingIndicator($$renderer3);
3503
+ } else {
3504
+ $$renderer3.push("<!--[-1-->");
3505
+ renderMessageRow($$renderer3, renderRow);
3506
+ }
3507
+ $$renderer3.push(`<!--]-->`);
3508
+ }
3509
+ $$renderer2.push(`<div${$35.attributes({
3510
+ id,
3511
+ class: $35.clsx(classNames("chat-container", className)),
3512
+ "data-surface-mode": surfaceMode,
3513
+ "data-cinder-density": density,
3514
+ "data-cinder-variant": variant,
3515
+ role: "region",
3516
+ "aria-label": "Chat conversation",
3517
+ ...rest
3518
+ }, "svelte-932akd")}>`);
3519
+ if (isContainerDragOver && allowAttachments()) {
3520
+ $$renderer2.push("<!--[0-->");
3521
+ $$renderer2.push(`<div class="chat-drop-overlay svelte-932akd" aria-hidden="true"><span class="chat-drop-label svelte-932akd">Drop files here</span></div>`);
3522
+ } else {
3523
+ $$renderer2.push("<!--[-1-->");
3524
+ }
3525
+ $$renderer2.push(`<!--]--> `);
3526
+ if (header) {
3527
+ $$renderer2.push("<!--[0-->");
3528
+ $$renderer2.push(`<div class="chat-header svelte-932akd">`);
3529
+ header($$renderer2);
3530
+ $$renderer2.push(`<!----></div>`);
3531
+ } else {
3532
+ $$renderer2.push("<!--[-1-->");
3533
+ }
3534
+ $$renderer2.push(`<!--]--> `);
3535
+ if (allowSearch() && searchState.isOpen) {
3536
+ $$renderer2.push("<!--[0-->");
3537
+ Chat_search_bar($$renderer2, {
3538
+ instanceId: id,
3539
+ query: searchState.query,
3540
+ matchCount: searchState.matchCount,
3541
+ currentMatchIndex: searchState.currentMatchIndex,
3542
+ onquerychange: searchState.setQuery,
3543
+ onnext: searchState.nextMatch,
3544
+ onprevious: searchState.previousMatch,
3545
+ onclose: searchState.close
3546
+ });
3547
+ } else {
3548
+ $$renderer2.push("<!--[-1-->");
3549
+ }
3550
+ $$renderer2.push(`<!--]--> <!---->`);
3551
+ {
3552
+ $$renderer2.push(`<div${$35.attr("id", timelineId())} class="chat-timeline svelte-932akd" role="log" aria-label="Messages"${$35.attr("aria-describedby", statusId())}${$35.attr("aria-live", isVirtualized() ? "off" : "polite")}${$35.attr("aria-relevant", isVirtualized() ? undefined : "additions")}${$35.attr("data-cinder-virtualized", isVirtualized() ? "" : undefined)} tabindex="0">`);
3553
+ if (showHistoryTrigger()) {
3554
+ $$renderer2.push("<!--[0-->");
3555
+ Chat_history_trigger($$renderer2, {
3556
+ loading: isLoadingHistory,
3557
+ label: loadEarlierLabel,
3558
+ loadingLabel: loadingEarlierLabel,
3559
+ onload: () => void handleLoadHistory()
3560
+ });
3561
+ } else {
3562
+ $$renderer2.push("<!--[-1-->");
3563
+ }
3564
+ $$renderer2.push(`<!--]--> `);
3565
+ if (messages().length === 0) {
3566
+ $$renderer2.push("<!--[0-->");
3567
+ if (empty) {
3568
+ $$renderer2.push("<!--[0-->");
3569
+ empty($$renderer2);
3570
+ $$renderer2.push(`<!---->`);
3571
+ } else {
3572
+ $$renderer2.push("<!--[-1-->");
3573
+ $$renderer2.push(`<div class="chat-empty svelte-932akd" role="status"><p class="svelte-932akd">No messages yet</p> `);
3574
+ if (emptyPrompts && emptyPrompts.length > 0) {
3575
+ $$renderer2.push("<!--[0-->");
3576
+ $$renderer2.push(`<div class="chat-empty-prompts svelte-932akd" role="group" aria-label="Suggested prompts"><!--[-->`);
3577
+ const each_array = $35.ensure_array_like(emptyPrompts);
3578
+ for (let index = 0, $$length = each_array.length;index < $$length; index++) {
3579
+ let prompt = each_array[index];
3580
+ $$renderer2.push(`<button type="button" class="chat-empty-prompt svelte-932akd">${$35.escape(prompt)}</button>`);
3581
+ }
3582
+ $$renderer2.push(`<!--]--></div>`);
3583
+ } else {
3584
+ $$renderer2.push("<!--[-1-->");
3585
+ }
3586
+ $$renderer2.push(`<!--]--></div>`);
3587
+ }
3588
+ $$renderer2.push(`<!--]-->`);
3589
+ } else if (isVirtualized()) {
3590
+ $$renderer2.push("<!--[1-->");
3591
+ $$renderer2.push(`<div class="chat-virtual-spacer svelte-932akd"${$35.attr_style(virtualizedSpacerStyle())}><!--[-->`);
3592
+ const each_array_1 = $35.ensure_array_like(virtualRows());
3593
+ for (let $$index_1 = 0, $$length = each_array_1.length;$$index_1 < $$length; $$index_1++) {
3594
+ let virtualRow = each_array_1[$$index_1];
3595
+ $$renderer2.push(`<div class="chat-virtual-row svelte-932akd"${$35.attr("data-cinder-virtual-index", virtualRow.virtualItem.index)}${$35.attr_style(virtualizedRowStyle(virtualRow.virtualItem))}>`);
3596
+ renderChatRow($$renderer2, virtualRow.row);
3597
+ $$renderer2.push(`<!----></div>`);
3598
+ }
3599
+ $$renderer2.push(`<!--]--></div>`);
3600
+ } else {
3601
+ $$renderer2.push("<!--[-1-->");
3602
+ $$renderer2.push(`<!---->`);
3603
+ {
3604
+ $$renderer2.push(`<!--[-->`);
3605
+ const each_array_2 = $35.ensure_array_like(renderRows());
3606
+ for (let $$index_2 = 0, $$length = each_array_2.length;$$index_2 < $$length; $$index_2++) {
3607
+ let renderRow = each_array_2[$$index_2];
3608
+ renderChatRow($$renderer2, renderRow);
3609
+ }
3610
+ $$renderer2.push(`<!--]-->`);
3611
+ }
3612
+ $$renderer2.push(`<!---->`);
3613
+ }
3614
+ $$renderer2.push(`<!--]--> `);
3615
+ Chat_participant_typing($$renderer2, {
3616
+ typingLabel: typingIndicatorState.typingLabel,
3617
+ participantCount: typingIndicatorState.participantCount
3618
+ });
3619
+ $$renderer2.push(`<!----> <div class="chat-bottom-sentinel svelte-932akd" aria-hidden="true"></div></div>`);
3620
+ }
3621
+ $$renderer2.push(`<!----> <div class="chat-input-wrapper svelte-932akd">`);
3622
+ Chat_jump_controls($$renderer2, {
3623
+ showJumpButton: scrollState.showJumpButton,
3624
+ hasNewMessageIndicator: unreadState.newMessageIndicatorVisible,
3625
+ unreadCount: unreadState.unreadCount,
3626
+ displayUnreadCount: unreadState.displayUnreadCount,
3627
+ hasLargeCount: unreadState.hasLargeCount,
3628
+ onjumptolatest: handleJumpToLatest
3629
+ });
3630
+ $$renderer2.push(`<!----> <div class="chat-input-area svelte-932akd">`);
3631
+ Chat_input($$renderer2, {
3632
+ id: inputId(),
3633
+ onsubmit: (message, attachments) => handleSubmit(message, attachments),
3634
+ disabled: streaming,
3635
+ sending: streaming,
3636
+ allowAttachments: allowAttachments(),
3637
+ onstop: streaming ? handleStopGenerating : undefined,
3638
+ onattachmentadd,
3639
+ onattachmentremove,
3640
+ onattachmentfailure
3641
+ });
3642
+ $$renderer2.push(`<!----></div></div> `);
3643
+ Chat_status_announcer($$renderer2, {
3644
+ statusId: statusId(),
3645
+ messageCount: messages().length,
3646
+ announcerMessage: historyAnnouncement || unreadState.announcerMessage,
3647
+ assertiveMessage: toolApprovalAssertiveMessage()
3648
+ });
3649
+ $$renderer2.push(`<!----> <div class="cinder-sr-only svelte-932akd" aria-live="polite" aria-atomic="true">${$35.escape(typingIndicatorState.announcedLabel)}</div></div>`);
3650
+ $35.bind_props($$props, {
3651
+ atBottom,
3652
+ unreadCount,
3653
+ newMessageIndicatorVisible,
3654
+ scrollToBottom,
3655
+ scrollToTop,
3656
+ focusInput,
3657
+ beginStreaming,
3658
+ pushToken,
3659
+ endStreaming
3660
+ });
3661
+ });
3662
+ }
3663
+
3664
+ // src/components/chat/chat.svelte
3665
+ function Chat2($$renderer, $$props) {
3666
+ $$renderer.component(($$renderer2) => {
3667
+ let { class: className, $$slots, $$events, ...rest } = $$props;
3668
+ const mergedClassName = $36.derived(() => classNames(className));
3669
+ let impl;
3670
+ function beginStreaming(messageId) {
3671
+ impl?.beginStreaming(messageId);
3672
+ }
3673
+ function pushToken(token) {
3674
+ impl?.pushToken(token);
3675
+ }
3676
+ function endStreaming() {
3677
+ impl?.endStreaming();
3678
+ }
3679
+ function scrollToBottom() {
3680
+ impl?.scrollToBottom();
3681
+ }
3682
+ function scrollToTop() {
3683
+ impl?.scrollToTop();
3684
+ }
3685
+ function focusInput() {
3686
+ impl?.focusInput();
3687
+ }
3688
+ Chat($$renderer2, $36.spread_props([{ class: mergedClassName() }, rest]));
3689
+ $36.bind_props($$props, {
3690
+ beginStreaming,
3691
+ pushToken,
3692
+ endStreaming,
3693
+ scrollToBottom,
3694
+ scrollToTop,
3695
+ focusInput
3696
+ });
3697
+ });
3698
+ }
3699
+
3700
+ // src/components/chat/builders.ts
3701
+ var SCHEMA_VERSION = 4;
3702
+ function nextId(prefix) {
3703
+ return `${prefix}-${crypto.randomUUID()}`;
3704
+ }
3705
+ function createConversation(options) {
3706
+ const now = new Date().toISOString();
3707
+ return {
3708
+ schemaVersion: SCHEMA_VERSION,
3709
+ id: options?.id ?? nextId("conversation"),
3710
+ title: options?.title,
3711
+ status: options?.status ?? "active",
3712
+ metadata: {},
3713
+ ids: [],
3714
+ messages: {},
3715
+ createdAt: now,
3716
+ updatedAt: now
3717
+ };
3718
+ }
3719
+ function materializeMessage(input, position) {
3720
+ const content = typeof input.content === "string" ? input.content : [...input.content];
3721
+ return {
3722
+ id: nextId("message"),
3723
+ role: input.role,
3724
+ content,
3725
+ position,
3726
+ createdAt: new Date().toISOString(),
3727
+ metadata: input.metadata ?? {},
3728
+ hidden: input.hidden ?? false,
3729
+ ...input.toolCall !== undefined ? { toolCall: input.toolCall } : {},
3730
+ ...input.toolResult !== undefined ? { toolResult: input.toolResult } : {},
3731
+ ...input.tokenUsage !== undefined ? { tokenUsage: input.tokenUsage } : {}
3732
+ };
3733
+ }
3734
+ function appendMessages(conversation, ...inputs) {
3735
+ if (inputs.length === 0)
3736
+ return conversation;
3737
+ const ids = [...conversation.ids];
3738
+ const messages = { ...conversation.messages };
3739
+ for (const input of inputs) {
3740
+ const message = materializeMessage(input, ids.length);
3741
+ ids.push(message.id);
3742
+ messages[message.id] = message;
3743
+ }
3744
+ return {
3745
+ ...conversation,
3746
+ ids,
3747
+ messages,
3748
+ updatedAt: new Date().toISOString()
3749
+ };
3750
+ }
3751
+ function appendUserMessage(conversation, content) {
3752
+ return appendMessages(conversation, { role: "user", content });
3753
+ }
3754
+ function appendAssistantMessage(conversation, content) {
3755
+ return appendMessages(conversation, { role: "assistant", content });
3756
+ }
3757
+ // src/components/chat/artifact/artifact-panel.svelte
3758
+ import * as $37 from "svelte/internal/server";
3759
+ function Artifact_panel($$renderer, $$props) {
3760
+ let { instanceId = "artifact", title, onclose, children } = $$props;
3761
+ const titleId = $37.derived(() => `${instanceId}-panel-title`);
3762
+ function focusOnMount(element) {
3763
+ element.focus();
3764
+ }
3765
+ $$renderer.push(`<div class="artifact-panel svelte-o3c2et" role="complementary"${$37.attr("aria-label", title ?? "Artifact panel")}><div class="artifact-panel-header svelte-o3c2et"><span class="artifact-panel-title svelte-o3c2et"${$37.attr("id", titleId())}>${$37.escape(title ?? "Artifact")}</span> <button type="button" class="artifact-panel-close svelte-o3c2et" aria-label="Close artifact panel">`);
3766
+ X($$renderer, { class: "icon-sm" });
3767
+ $$renderer.push(`<!----></button></div> <div class="artifact-panel-content svelte-o3c2et">`);
3768
+ children($$renderer);
3769
+ $$renderer.push(`<!----></div></div>`);
3770
+ }
3771
+ // src/components/chat/artifact/artifact-viewer.svelte
3772
+ import * as $38 from "svelte/internal/server";
3773
+ function wrapSvgInHtml(svg) {
3774
+ return `<!DOCTYPE html><html><body style="margin:0;display:flex;align-items:center;justify-content:center;min-height:100vh;">${svg}</body></html>`;
3775
+ }
3776
+ function Artifact_viewer($$renderer, $$props) {
3777
+ let { type, content, language, title } = $$props;
3778
+ const svgDocument = $38.derived(() => type === "svg" ? wrapSvgInHtml(content) : "");
3779
+ if (type === "html") {
3780
+ $$renderer.push("<!--[0-->");
3781
+ $$renderer.push(`<iframe class="artifact-viewer artifact-viewer-html svelte-c4pced"${$38.attr("srcdoc", content)} sandbox=""${$38.attr("title", title ?? "HTML artifact")}${$38.attr("aria-label", title ?? "HTML artifact")}></iframe>`);
3782
+ } else if (type === "svg") {
3783
+ $$renderer.push("<!--[1-->");
3784
+ $$renderer.push(`<iframe class="artifact-viewer artifact-viewer-svg svelte-c4pced"${$38.attr("srcdoc", svgDocument())} sandbox=""${$38.attr("title", title ?? "SVG artifact")}${$38.attr("aria-label", title ?? "SVG artifact")}></iframe>`);
3785
+ } else if (type === "code") {
3786
+ $$renderer.push("<!--[2-->");
3787
+ $$renderer.push(`<div class="artifact-viewer artifact-viewer-code svelte-c4pced"><pre class="artifact-code-block svelte-c4pced"${$38.attr("data-language", language)}><code class="svelte-c4pced">${$38.escape(content)}</code></pre></div>`);
3788
+ } else if (type === "mermaid") {
3789
+ $$renderer.push("<!--[3-->");
3790
+ $$renderer.push(`<div class="artifact-viewer artifact-viewer-mermaid svelte-c4pced"><pre class="artifact-code-block svelte-c4pced" data-language="mermaid"><code class="svelte-c4pced">${$38.escape(content)}</code></pre> <p class="artifact-mermaid-note svelte-c4pced" aria-live="polite">Mermaid diagram source. Install the Mermaid library to render diagrams.</p></div>`);
3791
+ } else {
3792
+ $$renderer.push("<!--[-1-->");
3793
+ }
3794
+ $$renderer.push(`<!--]-->`);
3795
+ }
3796
+ // src/components/chat/artifact/chat-artifact-layout.svelte
3797
+ import * as $39 from "svelte/internal/server";
3798
+ function Chat_artifact_layout($$renderer, $$props) {
3799
+ $$renderer.component(($$renderer2) => {
3800
+ let {
3801
+ instanceId = "artifact",
3802
+ open = false,
3803
+ children,
3804
+ panel,
3805
+ panelTitle,
3806
+ onclose,
3807
+ class: className
3808
+ } = $$props;
3809
+ $$renderer2.push(`<div${$39.attr_class($39.clsx(classNames("chat-artifact-layout", className)), "svelte-ed4g6")}${$39.attr("data-panel-open", open)}><div class="chat-artifact-main svelte-ed4g6">`);
3810
+ children($$renderer2);
3811
+ $$renderer2.push(`<!----></div> `);
3812
+ if (open && panel) {
3813
+ $$renderer2.push("<!--[0-->");
3814
+ Artifact_panel($$renderer2, {
3815
+ instanceId,
3816
+ title: panelTitle,
3817
+ onclose,
3818
+ children: ($$renderer3) => {
3819
+ panel($$renderer3);
3820
+ $$renderer3.push(`<!---->`);
3821
+ },
3822
+ $$slots: { default: true }
3823
+ });
3824
+ } else {
3825
+ $$renderer2.push("<!--[-1-->");
3826
+ }
3827
+ $$renderer2.push(`<!--]--></div>`);
3828
+ });
3829
+ }
3830
+ // src/components/chat/index.ts
3831
+ var chat_default = Chat2;
3832
+ export { Chat_date_separator, Message_content, Tool_call_group, Message_attachments, Chat_message, deriveAttachmentKind, Chat_attachment_preview, Chat_input, DEFAULT_SCROLL_CONFIGURATION, isAtBottom, shouldShowJumpToLatest, calculateUnreadCount, findUnreadBoundaryIndex, calculateScrollToBottom, extractTimestamp, Chat2 as Chat, createConversation, appendMessages, appendUserMessage, appendAssistantMessage, Artifact_panel, Artifact_viewer, Chat_artifact_layout, chat_default };
3833
+
3834
+ //# debugId=07FB61482B0C83B364756E2164756E21