@lostgradient/cinder 0.8.0 → 0.11.0

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 (371) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/README.md +2 -2
  3. package/components.json +140 -18
  4. package/dist/components/_internal/command-list-context.d.ts +3 -3
  5. package/dist/components/_internal/create-command-list-state.svelte.d.ts +11 -11
  6. package/dist/components/access-gate/index.js +435 -218
  7. package/dist/components/approval-card/approval-card-actions.svelte.d.ts +16 -0
  8. package/dist/components/approval-card/approval-card-state.d.ts +65 -0
  9. package/dist/components/approval-card/approval-card.css +269 -92
  10. package/dist/components/approval-card/approval-card.schema.js +10 -31
  11. package/dist/components/approval-card/approval-card.svelte.d.ts +3 -3
  12. package/dist/components/approval-card/approval-card.types.d.ts +14 -28
  13. package/dist/components/approval-card/index.d.ts +1 -1
  14. package/dist/components/approval-card/index.js +4268 -2884
  15. package/dist/components/card/card.css +5 -0
  16. package/dist/components/card/card.schema.js +2 -2
  17. package/dist/components/card/card.types.d.ts +2 -2
  18. package/dist/components/card/index.js +2 -1
  19. package/dist/components/chat/builders.d.ts +17 -8
  20. package/dist/components/chat/chat.schema.js +44 -2
  21. package/dist/components/chat/chat.svelte.d.ts +4 -2
  22. package/dist/components/chat/chat.types.d.ts +34 -3
  23. package/dist/components/chat/container/chat.svelte.d.ts +4 -2
  24. package/dist/components/chat/conversation-model.d.ts +1 -1
  25. package/dist/components/chat/index.d.ts +4 -4
  26. package/dist/components/chat/index.js +2767 -6278
  27. package/dist/components/chat/input/chat-attachment-serialization.d.ts +9 -0
  28. package/dist/components/chat/input/chat-input.svelte.d.ts +22 -1
  29. package/dist/components/chat/input/index.d.ts +1 -0
  30. package/dist/components/chat/utilities/conversation.d.ts +6 -6
  31. package/dist/components/chat-composer-popover/chat-composer-popover-filter.d.ts +11 -0
  32. package/dist/components/chat-composer-popover/chat-composer-popover.css +7 -0
  33. package/dist/components/chat-composer-popover/chat-composer-popover.css.d.ts +1 -0
  34. package/dist/components/chat-composer-popover/chat-composer-popover.schema.d.ts +3 -0
  35. package/dist/components/chat-composer-popover/chat-composer-popover.schema.js +150 -0
  36. package/dist/components/chat-composer-popover/chat-composer-popover.svelte.d.ts +46 -0
  37. package/dist/components/chat-composer-popover/chat-composer-popover.types.d.ts +77 -0
  38. package/dist/components/chat-composer-popover/chat-composer-popover.variables.d.ts +2 -0
  39. package/dist/components/chat-composer-popover/chat-composer-popover.variables.js +61 -0
  40. package/dist/components/chat-composer-popover/index.d.ts +6 -0
  41. package/dist/components/chat-composer-popover/index.js +3285 -0
  42. package/dist/components/chat-conversation-header/index.js +577 -4537
  43. package/dist/components/chat-conversation-list/index.js +24 -3984
  44. package/dist/components/code-block/code-block.schema.js +5 -1
  45. package/dist/components/code-block/code-block.types.d.ts +6 -0
  46. package/dist/components/code-block/index.js +4 -4
  47. package/dist/components/command-item/index.js +7 -6
  48. package/dist/components/command-menu/command-menu.schema.js +5 -1
  49. package/dist/components/command-menu/command-menu.types.d.ts +2 -0
  50. package/dist/components/command-menu/index.js +48 -19
  51. package/dist/components/command-palette/index.js +40 -14
  52. package/dist/components/connection-indicator/connection-indicator.css +136 -0
  53. package/dist/components/connection-indicator/connection-indicator.css.d.ts +1 -0
  54. package/dist/components/connection-indicator/connection-indicator.schema.d.ts +3 -0
  55. package/dist/components/connection-indicator/connection-indicator.schema.js +89 -0
  56. package/dist/components/connection-indicator/connection-indicator.svelte.d.ts +21 -0
  57. package/dist/components/connection-indicator/connection-indicator.types.d.ts +46 -0
  58. package/dist/components/connection-indicator/connection-indicator.variables.d.ts +2 -0
  59. package/dist/components/connection-indicator/connection-indicator.variables.js +61 -0
  60. package/dist/components/connection-indicator/index.d.ts +5 -0
  61. package/dist/components/connection-indicator/index.js +409 -0
  62. package/dist/components/container/container.schema.js +4 -4
  63. package/dist/components/event-stream-viewer/index.js +44 -44
  64. package/dist/components/experimental/json-viewer/index.js +44 -44
  65. package/dist/components/invocation-rule-builder/index.d.ts +1 -1
  66. package/dist/components/invocation-rule-builder/index.js +305 -150
  67. package/dist/components/invocation-rule-builder/invocation-rule-builder.css +28 -0
  68. package/dist/components/invocation-rule-builder/invocation-rule-builder.schema.js +89 -5
  69. package/dist/components/invocation-rule-builder/invocation-rule-builder.svelte.d.ts +2 -1
  70. package/dist/components/invocation-rule-builder/invocation-rule-builder.types.d.ts +114 -16
  71. package/dist/components/json-schema-editor/index.js +5 -2
  72. package/dist/components/json-viewer/index.js +44 -44
  73. package/dist/components/json-viewer/json-viewer.css +10 -6
  74. package/dist/components/payload-inspector/index.d.ts +1 -1
  75. package/dist/components/payload-inspector/index.js +306 -1422
  76. package/dist/components/payload-inspector/payload-inspector.css +15 -75
  77. package/dist/components/payload-inspector/payload-inspector.schema.js +5 -41
  78. package/dist/components/payload-inspector/payload-inspector.svelte.d.ts +5 -5
  79. package/dist/components/payload-inspector/payload-inspector.types.d.ts +10 -56
  80. package/dist/components/run-step-timeline/index.d.ts +1 -1
  81. package/dist/components/run-step-timeline/index.js +992 -559
  82. package/dist/components/run-step-timeline/run-step-branch-disclosure.svelte.d.ts +17 -0
  83. package/dist/components/run-step-timeline/run-step-timeline.css +124 -0
  84. package/dist/components/run-step-timeline/run-step-timeline.schema.js +873 -350
  85. package/dist/components/run-step-timeline/run-step-timeline.svelte.d.ts +1 -15
  86. package/dist/components/run-step-timeline/run-step-timeline.types.d.ts +182 -5
  87. package/dist/components/run-step-timeline/run-step-timeline.utilities.d.ts +52 -0
  88. package/dist/components/schedule-builder/index.d.ts +5 -0
  89. package/dist/components/schedule-builder/index.js +3176 -0
  90. package/dist/components/schedule-builder/schedule-builder.css +121 -0
  91. package/dist/components/schedule-builder/schedule-builder.css.d.ts +1 -0
  92. package/dist/components/schedule-builder/schedule-builder.schema.d.ts +3 -0
  93. package/dist/components/schedule-builder/schedule-builder.schema.js +141 -0
  94. package/dist/components/schedule-builder/schedule-builder.svelte.d.ts +22 -0
  95. package/dist/components/schedule-builder/schedule-builder.types.d.ts +130 -0
  96. package/dist/components/schedule-builder/schedule-builder.utilities.d.ts +78 -0
  97. package/dist/components/schedule-builder/schedule-builder.variables.d.ts +2 -0
  98. package/dist/components/schedule-builder/schedule-builder.variables.js +61 -0
  99. package/dist/components/tab/index.js +5 -2
  100. package/dist/components/tab/tab.schema.js +7 -3
  101. package/dist/components/tab/tab.svelte.d.ts +2 -1
  102. package/dist/components/tab/tab.types.d.ts +8 -2
  103. package/dist/components/tabs/index.js +5 -2
  104. package/dist/components/tag-input/index.js +22 -4
  105. package/dist/components/tag-input/tag-input.schema.js +5 -1
  106. package/dist/components/tag-input/tag-input.types.d.ts +4 -0
  107. package/dist/components/team-section/index.js +2 -1
  108. package/dist/components/testimonial-section/index.js +2 -1
  109. package/dist/index.d.ts +10 -4
  110. package/dist/index.js +28577 -30168
  111. package/dist/server/components/access-gate/index.js +3 -1
  112. package/dist/server/components/accordion/index.js +2 -2
  113. package/dist/server/components/alert-dialog/index.js +2 -2
  114. package/dist/server/components/approval-card/index.js +15 -19
  115. package/dist/server/components/autocomplete/index.js +7 -7
  116. package/dist/server/components/avatar-group/index.js +5 -5
  117. package/dist/server/components/button-group/index.js +3 -5
  118. package/dist/server/components/card/index.js +2 -2
  119. package/dist/server/components/chat/index.js +15 -12
  120. package/dist/server/components/chat-composer-popover/index.js +26 -0
  121. package/dist/server/components/chat-conversation-header/index.js +10 -11
  122. package/dist/server/components/chat-conversation-list/index.js +4 -5
  123. package/dist/server/components/checkbox/index.js +3 -3
  124. package/dist/server/components/choice-grid/index.js +2 -2
  125. package/dist/server/components/code-block/index.js +2 -2
  126. package/dist/server/components/color-field/index.js +3 -3
  127. package/dist/server/components/combobox/index.js +6 -6
  128. package/dist/server/components/command-item/index.js +5 -3
  129. package/dist/server/components/command-menu/index.js +6 -4
  130. package/dist/server/components/command-palette/index.js +2 -2
  131. package/dist/server/components/confirm-dialog/index.js +2 -2
  132. package/dist/server/components/connection-indicator/index.js +16 -0
  133. package/dist/server/components/context-menu/index.js +5 -5
  134. package/dist/server/components/data-table/index.js +5 -5
  135. package/dist/server/components/date-picker/index.js +6 -6
  136. package/dist/server/components/date-range-field/index.js +7 -7
  137. package/dist/server/components/description-list/index.js +3 -5
  138. package/dist/server/components/diff-viewer/index.js +9 -8
  139. package/dist/server/components/drawer/index.js +3 -3
  140. package/dist/server/components/dropdown/index.js +4 -4
  141. package/dist/server/components/event-stream-viewer/index.js +2 -2
  142. package/dist/server/components/experimental/json-viewer/index.js +2 -2
  143. package/dist/server/components/faceted-filter-bar/index.js +1 -1
  144. package/dist/server/components/hover-card/index.js +1 -1
  145. package/dist/server/components/input/index.js +3 -3
  146. package/dist/server/components/invocation-rule-builder/index.js +1 -1
  147. package/dist/server/components/json-schema-editor/index.js +24 -23
  148. package/dist/server/components/json-viewer/index.js +2 -2
  149. package/dist/server/components/markdown-editor/index.js +13 -13
  150. package/dist/server/components/modal/index.js +1 -1
  151. package/dist/server/components/multi-select/index.js +1 -1
  152. package/dist/server/components/newsletter-section/index.js +3 -3
  153. package/dist/server/components/payload-inspector/index.js +4 -16
  154. package/dist/server/components/popover/index.js +5 -5
  155. package/dist/server/components/review-editor/index.js +27 -26
  156. package/dist/server/components/run-step-timeline/index.js +2 -2
  157. package/dist/server/components/schedule-builder/index.js +30 -0
  158. package/dist/server/components/schema-form/index.js +4 -4
  159. package/dist/server/components/secret-value-field/index.js +3 -5
  160. package/dist/server/components/segment/index.js +3 -3
  161. package/dist/server/components/segmented-control/index.js +4 -4
  162. package/dist/server/components/selection-popover/index.js +4 -4
  163. package/dist/server/components/sheet/index.js +2 -2
  164. package/dist/server/components/side-navigation/index.js +2 -2
  165. package/dist/server/components/sidebar/index.js +3 -3
  166. package/dist/server/components/tab/index.js +2 -2
  167. package/dist/server/components/table/index.js +3 -3
  168. package/dist/server/components/tabs/index.js +4 -4
  169. package/dist/server/components/tag-input/index.js +3 -3
  170. package/dist/server/components/team-section/index.js +8 -8
  171. package/dist/server/components/testimonial-section/index.js +2 -2
  172. package/dist/server/components/time-field/index.js +5 -3
  173. package/dist/server/components/toggle/index.js +2 -2
  174. package/dist/server/components/tooltip/index.js +1 -1
  175. package/dist/server/index.js +235 -211
  176. package/dist/server/{index.server-20y4mdhm.js → index.server-0chhpkg7.js} +40 -14
  177. package/dist/server/index.server-0sx92swg.js +9 -0
  178. package/dist/server/{index.server-ecm1vs3g.js → index.server-1nq7z1qw.js} +1 -1
  179. package/dist/server/{index.server-s9khh4ry.js → index.server-2bbwajb2.js} +3 -5
  180. package/dist/server/index.server-2hqrv7ca.js +9 -0
  181. package/dist/server/{index.server-69epaape.js → index.server-2qj6s2mh.js} +1 -1
  182. package/dist/server/{index.server-gxf0d1p5.js → index.server-2s5h1d05.js} +2 -2
  183. package/dist/server/{index.server-qfa2rxzx.js → index.server-2zdbz3rj.js} +3 -5
  184. package/dist/server/{index.server-pt8b65mt.js → index.server-38aywdk1.js} +1 -1
  185. package/dist/server/{index.server-0jhra85x.js → index.server-3w72dxz7.js} +4 -4
  186. package/dist/server/{index.server-rermas0k.js → index.server-47v2fhp4.js} +4 -4
  187. package/dist/server/{index.server-v4zabrsx.js → index.server-4x4hgvqe.js} +434 -26
  188. package/dist/server/{index.server-9j5sym59.js → index.server-4x91gzy1.js} +2 -2
  189. package/dist/server/{index.server-q48q15g7.js → index.server-4y2jtvv1.js} +4 -2
  190. package/dist/server/{index.server-j3ddzcaa.js → index.server-5gzyqv78.js} +6 -6
  191. package/dist/server/index.server-67qgdypc.js +9 -0
  192. package/dist/server/index.server-6hnfzc7f.js +263 -0
  193. package/dist/server/{index.server-9jete4xx.js → index.server-6sh11ap6.js} +4 -4
  194. package/dist/server/{index.server-4ztq565m.js → index.server-85p4ydph.js} +1 -1
  195. package/dist/server/{index.server-4nk7gy0q.js → index.server-894t97kv.js} +1 -1
  196. package/dist/server/{index.server-1vscnped.js → index.server-8dt36sdm.js} +2 -1
  197. package/dist/server/{index.server-bfsbp9dz.js → index.server-8xvc73zh.js} +4 -4
  198. package/dist/server/{index.server-cvnw3hw9.js → index.server-9kz37z89.js} +1 -1
  199. package/dist/server/{index.server-kc1k02tk.js → index.server-9ykk1kbg.js} +1 -1
  200. package/dist/server/{index.server-g789yep6.js → index.server-aqethy0w.js} +2 -2
  201. package/dist/server/index.server-be9bpqeh.js +93 -0
  202. package/dist/server/{index.server-wc9aggfz.js → index.server-bmxbsk4y.js} +7 -7
  203. package/dist/server/{index.server-f3z7tpxr.js → index.server-c42b462p.js} +2 -4
  204. package/dist/server/{index.server-7vyzen5x.js → index.server-c5qv3p61.js} +171 -63
  205. package/dist/server/index.server-cch0eed5.js +144 -0
  206. package/dist/server/{index.server-q89dz8h1.js → index.server-d3pqthtp.js} +4 -3
  207. package/dist/server/{index.server-jk4rx4aa.js → index.server-dmmvwy6p.js} +1 -1
  208. package/dist/server/{index.server-hcfnae5y.js → index.server-dwwqssey.js} +4 -4
  209. package/dist/server/{index.server-e8x1hgw6.js → index.server-dz1r9xw5.js} +4 -4
  210. package/dist/server/{index.server-wm7mk5kw.js → index.server-ez5hp0ya.js} +1 -1
  211. package/dist/server/{index.server-wc8dbm5e.js → index.server-g95bk8rc.js} +4 -2
  212. package/dist/server/index.server-gkazv439.js +576 -0
  213. package/dist/server/index.server-gmh5ar16.js +2 -0
  214. package/dist/server/{index.server-dp9j2kkr.js → index.server-h0cvwvhy.js} +1 -1
  215. package/dist/server/{index.server-cbtg8rq5.js → index.server-h89zk5ev.js} +8 -8
  216. package/dist/server/{index.server-pacrqvyz.js → index.server-h90pjrez.js} +1 -1
  217. package/dist/server/{index.server-p8d04em5.js → index.server-hcsd5gdb.js} +6 -2
  218. package/dist/server/{index.server-n39drzes.js → index.server-hpeavvnq.js} +1 -1
  219. package/dist/server/{index.server-1p3patnj.js → index.server-hx91ng7z.js} +1 -1
  220. package/dist/server/{index.server-mehav5vs.js → index.server-jdcq5zza.js} +7 -7
  221. package/dist/server/{index.server-jync915v.js → index.server-jfrssta6.js} +25 -25
  222. package/dist/server/{index.server-jtj3r53y.js → index.server-jgb8yh5k.js} +1 -1
  223. package/dist/server/{index.server-ejyf7e48.js → index.server-jj76374p.js} +1 -1
  224. package/dist/server/{index.server-w1g5q9j9.js → index.server-jtgw9d23.js} +4 -2
  225. package/dist/server/{index.server-hd8gpehd.js → index.server-jxseyx33.js} +1 -1
  226. package/dist/server/{index.server-kg2sepsr.js → index.server-krqvnt6p.js} +14 -15
  227. package/dist/server/{index.server-0e1m3agz.js → index.server-ks49bprh.js} +1 -1
  228. package/dist/server/{index.server-f0hma3jp.js → index.server-kt0ncrqs.js} +1 -1
  229. package/dist/server/index.server-m0ezemav.js +170 -0
  230. package/dist/server/index.server-m191rm44.js +79 -0
  231. package/dist/server/{index.server-z721a5gp.js → index.server-n82rcv0m.js} +4 -4
  232. package/dist/server/{index.server-rhhmdxtz.js → index.server-np3c7kx0.js} +4 -4
  233. package/dist/server/{index.server-hpcs7tmh.js → index.server-p56xxef1.js} +1 -1
  234. package/dist/server/{index.server-w83kmcrx.js → index.server-pag862vz.js} +10 -10
  235. package/dist/server/index.server-qbkxz7r2.js +750 -0
  236. package/dist/server/{index.server-sh2rxejg.js → index.server-qke3ekjt.js} +1 -1
  237. package/dist/server/{index.server-73x2d3j3.js → index.server-rbpvcrr3.js} +1 -1
  238. package/dist/server/{index.server-8cxs4kya.js → index.server-rga8sc7j.js} +41 -44
  239. package/dist/server/{index.server-e3fnv1g6.js → index.server-sedjxt36.js} +5 -5
  240. package/dist/server/{index.server-pen9pxt6.js → index.server-sf3nk3j2.js} +2 -2
  241. package/dist/server/{index.server-f23vtaw4.js → index.server-tcay903b.js} +8 -7
  242. package/dist/server/{index.server-7fp0epev.js → index.server-veastatv.js} +4 -4
  243. package/dist/server/{index.server-jeqg2d22.js → index.server-xeqtpv61.js} +1 -1
  244. package/dist/server/{index.server-9s4na701.js → index.server-xjnge1yw.js} +4 -4
  245. package/dist/server/index.server-xtjjmsyq.js +315 -0
  246. package/dist/server/{index.server-hhxjaeen.js → index.server-xz99aed4.js} +4 -4
  247. package/dist/server/{index.server-vne4rzfa.js → index.server-y4n8vc08.js} +1 -1
  248. package/dist/server/{index.server-5d01cn4f.js → index.server-y83kqayt.js} +4 -4
  249. package/dist/server/{index.server-1nh09ck7.js → index.server-yhzydqxe.js} +5 -5
  250. package/dist/server/index.server-z38bxms8.js +734 -0
  251. package/dist/server/{index.server-atjc1qcq.js → index.server-z7hxtqs1.js} +1 -1
  252. package/dist/server/{index.server-w6k62afr.js → index.server-ze1ymmbw.js} +2 -2
  253. package/dist/server/{index.server-914v805w.js → index.server-zgd1g8mk.js} +1 -1
  254. package/dist/server/{index.server-aeexcxdp.js → index.server-zh3r8vfd.js} +1 -1
  255. package/dist/server/{index.server-10jb2jzm.js → index.server-zsjf8enc.js} +4 -4
  256. package/package.json +102 -5
  257. package/src/components/_internal/command-list-context.ts +3 -3
  258. package/src/components/_internal/create-command-list-state.svelte.ts +39 -13
  259. package/src/components/approval-card/approval-card-actions.svelte +168 -0
  260. package/src/components/approval-card/approval-card-state.ts +152 -1
  261. package/src/components/approval-card/approval-card.css +269 -92
  262. package/src/components/approval-card/approval-card.examples.json +3 -3
  263. package/src/components/approval-card/approval-card.schema.json +9 -30
  264. package/src/components/approval-card/approval-card.schema.ts +13 -31
  265. package/src/components/approval-card/approval-card.svelte +176 -470
  266. package/src/components/approval-card/approval-card.types.ts +15 -28
  267. package/src/components/approval-card/index.ts +1 -0
  268. package/src/components/card/card.css +5 -0
  269. package/src/components/card/card.schema.json +1 -1
  270. package/src/components/card/card.schema.ts +1 -1
  271. package/src/components/card/card.svelte +1 -0
  272. package/src/components/card/card.types.ts +2 -2
  273. package/src/components/chat/builders.ts +445 -14
  274. package/src/components/chat/chat.schema.json +36 -1
  275. package/src/components/chat/chat.schema.ts +44 -1
  276. package/src/components/chat/chat.svelte +12 -0
  277. package/src/components/chat/chat.types.ts +35 -3
  278. package/src/components/chat/container/chat.svelte +73 -3
  279. package/src/components/chat/conversation-model.ts +1 -0
  280. package/src/components/chat/index.ts +16 -3
  281. package/src/components/chat/input/chat-attachment-serialization.ts +63 -0
  282. package/src/components/chat/input/chat-input.svelte +22 -5
  283. package/src/components/chat/input/index.ts +5 -0
  284. package/src/components/chat/utilities/conversation.ts +33 -15
  285. package/src/components/chat-composer-popover/chat-composer-popover-filter.ts +68 -0
  286. package/src/components/chat-composer-popover/chat-composer-popover.css +7 -0
  287. package/src/components/chat-composer-popover/chat-composer-popover.examples.json +13 -0
  288. package/src/components/chat-composer-popover/chat-composer-popover.schema.json +90 -0
  289. package/src/components/chat-composer-popover/chat-composer-popover.schema.ts +95 -0
  290. package/src/components/chat-composer-popover/chat-composer-popover.svelte +234 -0
  291. package/src/components/chat-composer-popover/chat-composer-popover.types.ts +88 -0
  292. package/src/components/chat-composer-popover/chat-composer-popover.variables.json +1 -0
  293. package/src/components/chat-composer-popover/chat-composer-popover.variables.ts +3 -0
  294. package/src/components/chat-composer-popover/index.ts +19 -0
  295. package/src/components/code-block/code-block.schema.json +4 -0
  296. package/src/components/code-block/code-block.schema.ts +5 -0
  297. package/src/components/code-block/code-block.svelte +3 -3
  298. package/src/components/code-block/code-block.types.ts +6 -0
  299. package/src/components/command-item/command-item.svelte +7 -6
  300. package/src/components/command-menu/command-menu.schema.json +4 -0
  301. package/src/components/command-menu/command-menu.schema.ts +4 -0
  302. package/src/components/command-menu/command-menu.svelte +16 -5
  303. package/src/components/command-menu/command-menu.types.ts +2 -0
  304. package/src/components/connection-indicator/connection-indicator.css +136 -0
  305. package/src/components/connection-indicator/connection-indicator.examples.json +31 -0
  306. package/src/components/connection-indicator/connection-indicator.schema.json +29 -0
  307. package/src/components/connection-indicator/connection-indicator.schema.ts +36 -0
  308. package/src/components/connection-indicator/connection-indicator.svelte +63 -0
  309. package/src/components/connection-indicator/connection-indicator.types.ts +58 -0
  310. package/src/components/connection-indicator/connection-indicator.variables.json +1 -0
  311. package/src/components/connection-indicator/connection-indicator.variables.ts +3 -0
  312. package/src/components/connection-indicator/index.ts +10 -0
  313. package/src/components/container/container.schema.json +3 -3
  314. package/src/components/container/container.schema.ts +3 -3
  315. package/src/components/invocation-rule-builder/index.ts +4 -0
  316. package/src/components/invocation-rule-builder/invocation-rule-builder.css +28 -0
  317. package/src/components/invocation-rule-builder/invocation-rule-builder.examples.json +6 -0
  318. package/src/components/invocation-rule-builder/invocation-rule-builder.schema.json +76 -3
  319. package/src/components/invocation-rule-builder/invocation-rule-builder.schema.ts +83 -3
  320. package/src/components/invocation-rule-builder/invocation-rule-builder.svelte +326 -113
  321. package/src/components/invocation-rule-builder/invocation-rule-builder.types.ts +157 -43
  322. package/src/components/json-viewer/_json-viewer-node.svelte +15 -1
  323. package/src/components/json-viewer/json-viewer.css +10 -6
  324. package/src/components/payload-inspector/index.ts +0 -2
  325. package/src/components/payload-inspector/payload-inspector.css +15 -75
  326. package/src/components/payload-inspector/payload-inspector.examples.json +5 -5
  327. package/src/components/payload-inspector/payload-inspector.schema.json +3 -31
  328. package/src/components/payload-inspector/payload-inspector.schema.ts +3 -36
  329. package/src/components/payload-inspector/payload-inspector.svelte +46 -239
  330. package/src/components/payload-inspector/payload-inspector.types.ts +10 -58
  331. package/src/components/run-step-timeline/index.ts +8 -0
  332. package/src/components/run-step-timeline/run-step-branch-disclosure.svelte +16 -0
  333. package/src/components/run-step-timeline/run-step-timeline.css +124 -0
  334. package/src/components/run-step-timeline/run-step-timeline.examples.json +18 -0
  335. package/src/components/run-step-timeline/run-step-timeline.schema.json +872 -349
  336. package/src/components/run-step-timeline/run-step-timeline.schema.ts +931 -349
  337. package/src/components/run-step-timeline/run-step-timeline.svelte +387 -268
  338. package/src/components/run-step-timeline/run-step-timeline.types.ts +192 -5
  339. package/src/components/run-step-timeline/run-step-timeline.utilities.ts +242 -0
  340. package/src/components/schedule-builder/index.ts +14 -0
  341. package/src/components/schedule-builder/schedule-builder.css +121 -0
  342. package/src/components/schedule-builder/schedule-builder.examples.json +31 -0
  343. package/src/components/schedule-builder/schedule-builder.schema.json +78 -0
  344. package/src/components/schedule-builder/schedule-builder.schema.ts +86 -0
  345. package/src/components/schedule-builder/schedule-builder.svelte +629 -0
  346. package/src/components/schedule-builder/schedule-builder.types.ts +137 -0
  347. package/src/components/schedule-builder/schedule-builder.utilities.ts +344 -0
  348. package/src/components/schedule-builder/schedule-builder.variables.json +1 -0
  349. package/src/components/schedule-builder/schedule-builder.variables.ts +3 -0
  350. package/src/components/tab/tab.schema.json +6 -2
  351. package/src/components/tab/tab.schema.ts +8 -2
  352. package/src/components/tab/tab.svelte +9 -5
  353. package/src/components/tab/tab.types.ts +8 -2
  354. package/src/components/tag-input/tag-input.schema.json +4 -0
  355. package/src/components/tag-input/tag-input.schema.ts +4 -0
  356. package/src/components/tag-input/tag-input.svelte +20 -3
  357. package/src/components/tag-input/tag-input.types.ts +4 -0
  358. package/src/index.ts +41 -5
  359. package/src/styles/components.css +3 -0
  360. package/dist/server/index-49we2xfs.js +0 -344
  361. package/dist/server/index-8fhvxk30.js +0 -265
  362. package/dist/server/index-x2ysg8ds.js +0 -388
  363. package/dist/server/index.server-20j0jh30.js +0 -9
  364. package/dist/server/index.server-dc35kh7d.js +0 -1835
  365. package/dist/server/index.server-kd4b0342.js +0 -607
  366. package/dist/server/index.server-n5cdmsz4.js +0 -30
  367. package/dist/server/index.server-pxg74pyp.js +0 -393
  368. package/dist/server/index.server-rjap4k7y.js +0 -1389
  369. package/dist/server/index.server-vt6sn9y4.js +0 -447
  370. package/dist/server/index.server-w63n618v.js +0 -9
  371. package/dist/server/index.server-y2pa1k46.js +0 -9
@@ -0,0 +1,7 @@
1
+ @layer cinder.tokens, cinder.foundation, cinder.components, cinder.utilities;
2
+ /* ChatComposerPopover renders CommandMenu and CommandItem internally. Pull in
3
+ * the command menu family so the wrapper is styled through its own styles path. */
4
+ @import '../command-menu/command-menu.css';
5
+
6
+ @layer cinder.components {
7
+ }
@@ -0,0 +1,13 @@
1
+ {
2
+ "$schema": "../../schemas/examples.schema.json",
3
+ "component": "chat-composer-popover",
4
+ "import": "@lostgradient/cinder/chat-composer-popover",
5
+ "examples": [
6
+ {
7
+ "id": "slash-commands",
8
+ "title": "Slash commands in ChatInput",
9
+ "description": "Wires ChatComposerPopover to ChatInput with consumer-owned command definitions.",
10
+ "code": "<script lang=\"ts\">\n import ChatComposerPopover, {\n type ChatComposerPopoverSelection,\n } from '@lostgradient/cinder/chat-composer-popover';\n import { ChatInput } from '@lostgradient/cinder/chat';\n\n type SlashCommand = {\n value: string;\n label: string;\n description: string;\n insert: string;\n keywords?: string[];\n };\n\n const commands: SlashCommand[] = [\n {\n value: 'help',\n label: 'Help',\n description: 'Show available assistant commands',\n insert: '/help ',\n keywords: ['docs', 'support'],\n },\n {\n value: 'new',\n label: 'New conversation',\n description: 'Start a fresh thread',\n insert: '/new ',\n keywords: ['reset', 'fresh'],\n },\n {\n value: 'tools',\n label: 'Tools',\n description: 'Open tool controls',\n insert: '/tools ',\n keywords: ['integrations', 'actions'],\n },\n {\n value: 'stop',\n label: 'Stop',\n description: 'Stop the current response',\n insert: '/stop',\n keywords: ['cancel', 'halt'],\n },\n ];\n\n let value = $state('');\n let selectedCommand = $state('None');\n\n function handleSelect(selection: ChatComposerPopoverSelection<SlashCommand>) {\n value = `${value.slice(0, selection.range.start)}${selection.item.insert}${value.slice(\n selection.range.end,\n )}`;\n selectedCommand = selection.item.label;\n }\n</script>\n\n<ChatComposerPopover id=\"slash-command\" bind:value items={commands} onselect={handleSelect}>\n {#snippet composer(composerProps)}\n <ChatInput\n id=\"chat\"\n bind:value\n allowAttachments={false}\n placeholder=\"Type / for commands\"\n composerRole={composerProps.composerRole}\n composerAriaExpanded={composerProps.composerAriaExpanded}\n composerAriaControls={composerProps.composerAriaControls}\n composerAriaActiveDescendant={composerProps.composerAriaActiveDescendant}\n composerAriaAutocomplete={composerProps.composerAriaAutocomplete}\n oncomposerinput={composerProps.oncomposerinput}\n oncomposerkeydown={composerProps.oncomposerkeydown}\n oncomposerselectionchange={composerProps.oncomposerselectionchange}\n oncomposerblur={composerProps.oncomposerblur}\n />\n {/snippet}\n</ChatComposerPopover>\n\n<p>Selected: {selectedCommand}</p>\n"
11
+ }
12
+ ]
13
+ }
@@ -0,0 +1,90 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "type": "object",
4
+ "properties": {
5
+ "id": {
6
+ "type": "string",
7
+ "description": "Unique identifier used for the listbox and item ids."
8
+ },
9
+ "value": {
10
+ "type": "string",
11
+ "description": "Current composer value. Bind this to the same value as ChatInput."
12
+ },
13
+ "triggers": {
14
+ "type": "array",
15
+ "items": {
16
+ "type": "string"
17
+ },
18
+ "description": "Trigger characters that open the popover. Default `['/', '@']`."
19
+ },
20
+ "label": {
21
+ "type": "string",
22
+ "description": "Accessible listbox label. Default `'Composer suggestions'`."
23
+ },
24
+ "placement": {
25
+ "enum": [
26
+ "top",
27
+ "bottom",
28
+ "left",
29
+ "right",
30
+ "top-start",
31
+ "top-end",
32
+ "bottom-start",
33
+ "bottom-end"
34
+ ],
35
+ "description": "Caret-relative placement. Default `'bottom-start'`."
36
+ },
37
+ "offset": {
38
+ "type": "number",
39
+ "description": "Distance in px between the caret and popover. Default `6`."
40
+ }
41
+ },
42
+ "additionalProperties": false,
43
+ "required": ["id"],
44
+ "metadata": {
45
+ "unsupportedProps": [
46
+ {
47
+ "name": "composer",
48
+ "reason": "function-or-snippet",
49
+ "required": true,
50
+ "description": "Render the ChatInput or compatible composer with the provided overlay props."
51
+ },
52
+ {
53
+ "name": "detectTrigger",
54
+ "reason": "function-or-snippet",
55
+ "description": "Override trigger detection."
56
+ },
57
+ {
58
+ "name": "empty",
59
+ "reason": "function-or-snippet",
60
+ "description": "Optional empty state rendered when filtering produces no matching rows."
61
+ },
62
+ {
63
+ "name": "filter",
64
+ "reason": "function-or-snippet",
65
+ "description": "Override filtering."
66
+ },
67
+ {
68
+ "name": "item",
69
+ "reason": "function-or-snippet",
70
+ "description": "Optional custom row contents. Defaults to the item label and description."
71
+ },
72
+ {
73
+ "name": "items",
74
+ "reason": "generic-type-parameter",
75
+ "required": true,
76
+ "description": "Consumer-owned command or mention definitions."
77
+ },
78
+ {
79
+ "name": "ondismiss",
80
+ "reason": "function-or-snippet",
81
+ "description": "Invoked when Escape, trigger loss, or outside pointerdown dismisses the popover."
82
+ },
83
+ {
84
+ "name": "onselect",
85
+ "reason": "function-or-snippet",
86
+ "description": "Invoked when an enabled item is selected by keyboard or pointer."
87
+ }
88
+ ]
89
+ }
90
+ }
@@ -0,0 +1,95 @@
1
+ import type { ComponentSchema } from '../../schema-types';
2
+
3
+ const schema = {
4
+ $schema: 'https://json-schema.org/draft/2020-12/schema',
5
+ type: 'object',
6
+ properties: {
7
+ id: {
8
+ type: 'string',
9
+ description: 'Unique identifier used for the listbox and item ids.',
10
+ },
11
+ value: {
12
+ type: 'string',
13
+ description: 'Current composer value. Bind this to the same value as ChatInput.',
14
+ },
15
+ triggers: {
16
+ type: 'array',
17
+ items: {
18
+ type: 'string',
19
+ },
20
+ description: "Trigger characters that open the popover. Default `['/', '@']`.",
21
+ },
22
+ label: {
23
+ type: 'string',
24
+ description: "Accessible listbox label. Default `'Composer suggestions'`.",
25
+ },
26
+ placement: {
27
+ enum: [
28
+ 'top',
29
+ 'bottom',
30
+ 'left',
31
+ 'right',
32
+ 'top-start',
33
+ 'top-end',
34
+ 'bottom-start',
35
+ 'bottom-end',
36
+ ],
37
+ description: "Caret-relative placement. Default `'bottom-start'`.",
38
+ },
39
+ offset: {
40
+ type: 'number',
41
+ description: 'Distance in px between the caret and popover. Default `6`.',
42
+ },
43
+ },
44
+ additionalProperties: false,
45
+ required: ['id'],
46
+ metadata: {
47
+ unsupportedProps: [
48
+ {
49
+ name: 'composer',
50
+ reason: 'function-or-snippet',
51
+ required: true,
52
+ description: 'Render the ChatInput or compatible composer with the provided overlay props.',
53
+ },
54
+ {
55
+ name: 'detectTrigger',
56
+ reason: 'function-or-snippet',
57
+ description: 'Override trigger detection.',
58
+ },
59
+ {
60
+ name: 'empty',
61
+ reason: 'function-or-snippet',
62
+ description: 'Optional empty state rendered when filtering produces no matching rows.',
63
+ },
64
+ {
65
+ name: 'filter',
66
+ reason: 'function-or-snippet',
67
+ description: 'Override filtering.',
68
+ },
69
+ {
70
+ name: 'item',
71
+ reason: 'function-or-snippet',
72
+ description: 'Optional custom row contents. Defaults to the item label and description.',
73
+ },
74
+ {
75
+ name: 'items',
76
+ reason: 'generic-type-parameter',
77
+ required: true,
78
+ description: 'Consumer-owned command or mention definitions.',
79
+ },
80
+ {
81
+ name: 'ondismiss',
82
+ reason: 'function-or-snippet',
83
+ description:
84
+ 'Invoked when Escape, trigger loss, or outside pointerdown dismisses the popover.',
85
+ },
86
+ {
87
+ name: 'onselect',
88
+ reason: 'function-or-snippet',
89
+ description: 'Invoked when an enabled item is selected by keyboard or pointer.',
90
+ },
91
+ ],
92
+ },
93
+ } satisfies ComponentSchema;
94
+
95
+ export default schema as ComponentSchema;
@@ -0,0 +1,234 @@
1
+ <script lang="ts" module>
2
+ export { filterFuzzySubsequence, fuzzySubsequenceScore, } from './chat-composer-popover-filter.ts';
3
+ </script>
4
+
5
+ <script lang="ts" generics="TItem extends ChatComposerPopoverItem">
6
+ import CommandItem from '../command-item/command-item.svelte';
7
+ import CommandMenu from '../command-menu/command-menu.svelte';
8
+ import { onDestroy } from 'svelte';
9
+ import { detectTrigger as detectCommandTrigger } from '../command-menu/command-menu-trigger.ts';
10
+ import { filterFuzzySubsequence } from './chat-composer-popover-filter.ts';
11
+ let { id, value = $bindable(''), items, triggers = ['/', '@'], label = 'Composer suggestions', placement = 'bottom-start', offset = 6, composer, item, empty, detectTrigger, filter = filterFuzzySubsequence, onselect, ondismiss, } = $props();
12
+ let open = $state(false);
13
+ let anchor = $state(null);
14
+ let caretIndex = $state(0);
15
+ const listboxId = $derived(`${id}-listbox`);
16
+ let activeItemId = $state(null);
17
+ let activeMatch = $state(null);
18
+ let composerSyncTimer = null;
19
+ let lastSyncedValue = $state(value);
20
+ let suppressNextValueSync = false;
21
+ const emptyContent = $derived(empty);
22
+ const query = $derived(activeMatch?.query ?? '');
23
+ const trigger = $derived(activeMatch?.trigger ?? triggers[0] ?? '/');
24
+ const filteredItems = $derived.by(() => {
25
+ if (!activeMatch)
26
+ return [];
27
+ return [...filter(items, activeMatch.query, activeMatch.trigger)];
28
+ });
29
+ const composerProps = $derived({
30
+ composerRole: 'combobox',
31
+ composerAriaExpanded: open,
32
+ composerAriaControls: open ? listboxId : undefined,
33
+ composerAriaActiveDescendant: open ? (activeItemId ?? undefined) : undefined,
34
+ composerAriaAutocomplete: 'list',
35
+ oncomposerinput: handleComposerInput,
36
+ oncomposerkeydown: handleComposerKeydown,
37
+ oncomposerselectionchange: handleComposerSelectionChange,
38
+ oncomposerblur: handleComposerBlur,
39
+ });
40
+ function getComposerElement(event) {
41
+ const target = event.currentTarget ?? event.target;
42
+ if (target instanceof HTMLTextAreaElement || target instanceof HTMLInputElement) {
43
+ return target;
44
+ }
45
+ return null;
46
+ }
47
+ function findTriggerMatch(text, selectionStart, selectionEnd) {
48
+ if (detectTrigger)
49
+ return detectTrigger(text, selectionStart, selectionEnd);
50
+ for (const triggerChar of triggers) {
51
+ const match = detectCommandTrigger({ text, selectionStart, selectionEnd, triggerChar });
52
+ if (match) {
53
+ return { ...match, trigger: triggerChar };
54
+ }
55
+ }
56
+ return null;
57
+ }
58
+ function updateFromComposer(composerElement, nextValue) {
59
+ if (composerElement)
60
+ anchor = composerElement;
61
+ const selectionStart = composerElement?.selectionStart ?? nextValue.length;
62
+ const selectionEnd = composerElement?.selectionEnd ?? selectionStart;
63
+ lastSyncedValue = nextValue;
64
+ value = nextValue;
65
+ caretIndex = selectionEnd;
66
+ activeMatch = findTriggerMatch(nextValue, selectionStart, selectionEnd);
67
+ const wasOpen = open;
68
+ open = activeMatch !== null && anchor !== null;
69
+ if (!open) {
70
+ activeItemId = null;
71
+ if (wasOpen)
72
+ ondismiss?.();
73
+ }
74
+ }
75
+ function dismiss({ restoreFocus = true } = {}) {
76
+ if (!open && !activeMatch && !activeItemId)
77
+ return;
78
+ clearComposerSyncTimer();
79
+ open = false;
80
+ activeItemId = null;
81
+ activeMatch = null;
82
+ if (restoreFocus)
83
+ anchor?.focus();
84
+ ondismiss?.();
85
+ }
86
+ function handleComposerInput(nextValue, event) {
87
+ suppressNextValueSync = false;
88
+ updateFromComposer(event ? getComposerElement(event) : anchor, nextValue);
89
+ }
90
+ function handleComposerSelectionChange(event) {
91
+ suppressNextValueSync = false;
92
+ const composerElement = getComposerElement(event);
93
+ if (!composerElement)
94
+ return;
95
+ syncComposerSelectionAfterNativeNavigation(composerElement);
96
+ }
97
+ function handleComposerBlur(event) {
98
+ if (event.currentTarget === anchor) {
99
+ dismiss({ restoreFocus: false });
100
+ }
101
+ }
102
+ function syncComposerSelectionAfterNativeNavigation(composerElement) {
103
+ clearComposerSyncTimer();
104
+ composerSyncTimer = setTimeout(() => {
105
+ composerSyncTimer = null;
106
+ updateFromComposer(composerElement, composerElement.value);
107
+ }, 0);
108
+ }
109
+ function clearComposerSyncTimer() {
110
+ if (composerSyncTimer === null)
111
+ return;
112
+ clearTimeout(composerSyncTimer);
113
+ composerSyncTimer = null;
114
+ }
115
+ function handleComposerKeydown(event) {
116
+ const composerElement = event.currentTarget instanceof HTMLTextAreaElement ||
117
+ event.currentTarget instanceof HTMLInputElement
118
+ ? event.currentTarget
119
+ : null;
120
+ if (composerElement) {
121
+ anchor = composerElement;
122
+ caretIndex = composerElement.selectionEnd ?? value.length;
123
+ }
124
+ if (!open || event.isComposing || event.keyCode === 229)
125
+ return;
126
+ if (event.key === 'Escape') {
127
+ event.preventDefault();
128
+ event.stopPropagation();
129
+ dismiss();
130
+ return;
131
+ }
132
+ const isNavigationKey = event.key === 'ArrowDown' ||
133
+ event.key === 'ArrowUp' ||
134
+ event.key === 'ArrowLeft' ||
135
+ event.key === 'ArrowRight' ||
136
+ event.key === 'Home' ||
137
+ event.key === 'End';
138
+ const isMenuNavigationKey = event.key === 'ArrowDown' ||
139
+ event.key === 'ArrowUp' ||
140
+ event.key === 'Home' ||
141
+ event.key === 'End';
142
+ const isModifiedNavigation = isNavigationKey && (event.altKey || event.ctrlKey || event.metaKey || event.shiftKey);
143
+ if ((isMenuNavigationKey && !isModifiedNavigation) || (event.key === 'Enter' && activeItemId)) {
144
+ event.preventDefault();
145
+ }
146
+ if (composerElement && isNavigationKey && (isModifiedNavigation || !isMenuNavigationKey)) {
147
+ syncComposerSelectionAfterNativeNavigation(composerElement);
148
+ }
149
+ }
150
+ onDestroy(() => {
151
+ clearComposerSyncTimer();
152
+ });
153
+ $effect(() => {
154
+ if (value === lastSyncedValue)
155
+ return;
156
+ if (suppressNextValueSync) {
157
+ suppressNextValueSync = false;
158
+ lastSyncedValue = value;
159
+ return;
160
+ }
161
+ updateFromComposer(anchor, value);
162
+ });
163
+ function handleStateChange(state) {
164
+ activeItemId = state.activeItemId;
165
+ }
166
+ function handleSelect(selection) {
167
+ const selectedItem = filteredItems.find((candidate) => candidate.value === selection.value);
168
+ if (!selectedItem || !activeMatch)
169
+ return;
170
+ const detail = {
171
+ item: selectedItem,
172
+ value: selection.value,
173
+ query: activeMatch.query,
174
+ trigger: activeMatch.trigger,
175
+ range: {
176
+ start: activeMatch.start,
177
+ end: activeMatch.end,
178
+ },
179
+ };
180
+ open = false;
181
+ activeItemId = null;
182
+ activeMatch = null;
183
+ anchor?.focus();
184
+ suppressNextValueSync = true;
185
+ queueMicrotask(() => {
186
+ suppressNextValueSync = false;
187
+ });
188
+ onselect?.(detail);
189
+ }
190
+ </script>
191
+
192
+ {@render composer(composerProps)}
193
+
194
+ <CommandMenu
195
+ bind:open
196
+ {anchor}
197
+ {caretIndex}
198
+ {query}
199
+ {placement}
200
+ {offset}
201
+ {label}
202
+ {listboxId}
203
+ onselect={handleSelect}
204
+ ondismiss={() => dismiss({ restoreFocus: false })}
205
+ onstatechange={handleStateChange}
206
+ >
207
+ {#snippet items()}
208
+ {#each filteredItems as command (command.value)}
209
+ <CommandItem
210
+ value={command.value}
211
+ disabled={command.disabled === true}
212
+ description={item ? '' : (command.description ?? '')}
213
+ accessibleLabel={command.description
214
+ ? `${command.label}, ${command.description}`
215
+ : command.label}
216
+ selectionMode="parent"
217
+ >
218
+ {#if item}
219
+ {@render item({ item: command, query, trigger })}
220
+ {:else}
221
+ {command.label}
222
+ {/if}
223
+ </CommandItem>
224
+ {/each}
225
+ {/snippet}
226
+
227
+ {#snippet empty()}
228
+ {#if emptyContent}
229
+ {@render emptyContent()}
230
+ {:else}
231
+ No suggestions
232
+ {/if}
233
+ {/snippet}
234
+ </CommandMenu>
@@ -0,0 +1,88 @@
1
+ import type { Snippet } from 'svelte';
2
+
3
+ import type { PopoverPlacement } from '../popover/popover.types.ts';
4
+
5
+ export type ChatComposerPopoverItem = {
6
+ /** Stable submitted value surfaced through onselect. */
7
+ value: string;
8
+ /** Default visible and accessible label for the command row. */
9
+ label: string;
10
+ /** Optional secondary text for the command row. */
11
+ description?: string | undefined;
12
+ /** Optional fuzzy-search aliases. */
13
+ keywords?: readonly string[] | undefined;
14
+ /** Whether this row is skipped by keyboard navigation and activation. */
15
+ disabled?: boolean | undefined;
16
+ };
17
+
18
+ export type ChatComposerPopoverTriggerMatch = {
19
+ active: true;
20
+ trigger: string;
21
+ query: string;
22
+ start: number;
23
+ end: number;
24
+ };
25
+
26
+ export type ChatComposerPopoverSelection<TItem extends ChatComposerPopoverItem> = {
27
+ item: TItem;
28
+ value: string;
29
+ query: string;
30
+ trigger: string;
31
+ range: {
32
+ start: number;
33
+ end: number;
34
+ };
35
+ };
36
+
37
+ export type ChatComposerPopoverComposerProps = {
38
+ composerRole: 'combobox';
39
+ composerAriaExpanded: boolean;
40
+ composerAriaControls: string | undefined;
41
+ composerAriaActiveDescendant: string | undefined;
42
+ composerAriaAutocomplete: 'list';
43
+ oncomposerinput: (value: string, event?: Event) => void;
44
+ oncomposerkeydown: (event: KeyboardEvent) => void;
45
+ oncomposerselectionchange: (event: Event) => void;
46
+ oncomposerblur: (event: FocusEvent) => void;
47
+ };
48
+
49
+ export type ChatComposerPopoverItemSnippetContext<TItem extends ChatComposerPopoverItem> = {
50
+ item: TItem;
51
+ query: string;
52
+ trigger: string;
53
+ };
54
+
55
+ export type ChatComposerPopoverProps<TItem extends ChatComposerPopoverItem> = {
56
+ /** Unique identifier used for the listbox and item ids. */
57
+ id: string;
58
+ /** Current composer value. Bind this to the same value as ChatInput. */
59
+ value?: string;
60
+ /** Consumer-owned command or mention definitions. */
61
+ items: readonly TItem[];
62
+ /** Trigger characters that open the popover. Default `['/', '@']`. */
63
+ triggers?: readonly string[];
64
+ /** Accessible listbox label. Default `'Composer suggestions'`. */
65
+ label?: string;
66
+ /** Caret-relative placement. Default `'bottom-start'`. */
67
+ placement?: PopoverPlacement;
68
+ /** Distance in px between the caret and popover. Default `6`. */
69
+ offset?: number;
70
+ /** Render the ChatInput or compatible composer with the provided overlay props. */
71
+ composer: Snippet<[ChatComposerPopoverComposerProps]>;
72
+ /** Optional custom row contents. Defaults to the item label and description. */
73
+ item?: Snippet<[ChatComposerPopoverItemSnippetContext<TItem>]>;
74
+ /** Optional empty state rendered when filtering produces no matching rows. */
75
+ empty?: Snippet;
76
+ /** Override trigger detection. */
77
+ detectTrigger?: (
78
+ value: string,
79
+ selectionStart: number,
80
+ selectionEnd: number,
81
+ ) => ChatComposerPopoverTriggerMatch | null;
82
+ /** Override filtering. */
83
+ filter?: (items: readonly TItem[], query: string, trigger: string) => readonly TItem[];
84
+ /** Invoked when an enabled item is selected by keyboard or pointer. */
85
+ onselect?: (selection: ChatComposerPopoverSelection<TItem>) => void;
86
+ /** Invoked when Escape, trigger loss, or outside pointerdown dismisses the popover. */
87
+ ondismiss?: () => void;
88
+ };
@@ -0,0 +1,3 @@
1
+ const variables: readonly string[] = [];
2
+
3
+ export default variables;
@@ -0,0 +1,19 @@
1
+ import './chat-composer-popover.css';
2
+ import ChatComposerPopover from './chat-composer-popover.svelte';
3
+
4
+ export default ChatComposerPopover;
5
+ export {
6
+ filterFuzzySubsequence,
7
+ fuzzySubsequenceScore,
8
+ type FuzzyFilterItem,
9
+ type FuzzyFilterResult,
10
+ } from './chat-composer-popover-filter.ts';
11
+ export type {
12
+ ChatComposerPopoverComposerProps,
13
+ ChatComposerPopoverItem,
14
+ ChatComposerPopoverItemSnippetContext,
15
+ ChatComposerPopoverProps,
16
+ ChatComposerPopoverSelection,
17
+ ChatComposerPopoverTriggerMatch,
18
+ } from './chat-composer-popover.types.ts';
19
+ export { ChatComposerPopover };
@@ -18,6 +18,10 @@
18
18
  "type": "boolean",
19
19
  "description": "When true, render a copy button in the header."
20
20
  },
21
+ "showLanguageLabel": {
22
+ "type": "boolean",
23
+ "description": "Whether to render the language label in the header. Default `true`.\nPass `false` to keep `language`-driven highlighting without the visible\nheader chip; with `copyable` also unset, no header renders at all."
24
+ },
21
25
  "class": {
22
26
  "type": "string",
23
27
  "description": "Additional class names merged with `.cinder-code-block`."
@@ -22,6 +22,11 @@ const schema = {
22
22
  type: 'boolean',
23
23
  description: 'When true, render a copy button in the header.',
24
24
  },
25
+ showLanguageLabel: {
26
+ type: 'boolean',
27
+ description:
28
+ 'Whether to render the language label in the header. Default `true`.\nPass `false` to keep `language`-driven highlighting without the visible\nheader chip; with `copyable` also unset, no header renders at all.',
29
+ },
25
30
  class: {
26
31
  type: 'string',
27
32
  description: 'Additional class names merged with `.cinder-code-block`.',
@@ -7,7 +7,7 @@ import { loadDefaultHighlighter } from './code-block-default-highlighter.ts';
7
7
  import { classNames } from '../../utilities/class-names.ts';
8
8
  import { devWarn } from '../../utilities/dev-warn.ts';
9
9
  import CopyButton from '../copy-button/copy-button.svelte';
10
- let { code, language, highlight, highlighter, copyable = false, class: className, } = $props();
10
+ let { code, language, highlight, highlighter, copyable = false, showLanguageLabel = true, class: className, } = $props();
11
11
  let highlighted = $state(null);
12
12
  // Two-phase render contract: the server (and the first client paint) emits
13
13
  // the plain `<pre><code>` fallback because `$effect` never runs during SSR.
@@ -70,9 +70,9 @@ $effect(() => {
70
70
  </script>
71
71
 
72
72
  <div class={classNames('cinder-code-block', className)}>
73
- {#if language || copyable}
73
+ {#if (language && showLanguageLabel) || copyable}
74
74
  <header class="cinder-code-block__header">
75
- {#if language}
75
+ {#if language && showLanguageLabel}
76
76
  <span class="cinder-code-block__language">{language}</span>
77
77
  {/if}
78
78
  {#if copyable}
@@ -49,6 +49,12 @@ export type CodeBlockProps = {
49
49
  highlighter?: Highlighter;
50
50
  /** When true, render a copy button in the header. */
51
51
  copyable?: boolean;
52
+ /**
53
+ * Whether to render the language label in the header. Default `true`.
54
+ * Pass `false` to keep `language`-driven highlighting without the visible
55
+ * header chip; with `copyable` also unset, no header renders at all.
56
+ */
57
+ showLanguageLabel?: boolean;
52
58
  /** Additional class names merged with `.cinder-code-block`. */
53
59
  class?: string;
54
60
  };
@@ -15,8 +15,9 @@ const commandList = getCommandListContext();
15
15
  // CommandMenu items can opt into parent-owned activation. Read untracked
16
16
  // because this is a one-time discard, not a reactive dependency.
17
17
  void untrack(() => selectionMode);
18
- // Stable id assigned by the palette on registration.
19
- let itemId = $state(null);
18
+ // Live id assigned by the parent command list on registration.
19
+ let registrationHandle = $state(null);
20
+ const itemId = $derived(registrationHandle?.id ?? null);
20
21
  // Register with the palette at attach time, unregister on detach. Using an
21
22
  // attachment (rather than onMount) means the DOM node is available at
22
23
  // registration, so the palette can sort items by document order for
@@ -26,15 +27,15 @@ const registerWithPalette = (node) => {
26
27
  // call mutates the palette's $state registrations list, which feeds derived
27
28
  // values the attachment indirectly depends on — producing an update cycle.
28
29
  return untrack(() => {
29
- const { id, unregister } = commandList.register({
30
+ const registeredItem = commandList.register({
30
31
  getValue: () => value,
31
32
  getOnselect: () => onselect,
32
33
  getDisabled: () => disabled,
33
34
  }, node);
34
- itemId = id;
35
+ registrationHandle = registeredItem;
35
36
  return () => {
36
- unregister();
37
- itemId = null;
37
+ registeredItem.unregister();
38
+ registrationHandle = null;
38
39
  };
39
40
  });
40
41
  };
@@ -2,6 +2,10 @@
2
2
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3
3
  "type": "object",
4
4
  "properties": {
5
+ "listboxId": {
6
+ "type": "string",
7
+ "description": "Stable listbox id. Defaults to a generated component id."
8
+ },
5
9
  "open": {
6
10
  "type": "boolean",
7
11
  "description": "Open state. Bindable. Default `false`."
@@ -4,6 +4,10 @@ const schema = {
4
4
  $schema: 'https://json-schema.org/draft/2020-12/schema',
5
5
  type: 'object',
6
6
  properties: {
7
+ listboxId: {
8
+ type: 'string',
9
+ description: 'Stable listbox id. Defaults to a generated component id.',
10
+ },
7
11
  open: {
8
12
  type: 'boolean',
9
13
  description: 'Open state. Bindable. Default `false`.',