@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
@@ -4,16 +4,10 @@ export {};
4
4
 
5
5
  <script lang="ts">
6
6
  import Badge from '../badge/badge.svelte';
7
- import CodeBlock from '../code-block/code-block.svelte';
8
7
  import CopyButton from '../copy-button/copy-button.svelte';
9
- import DescriptionList from '../description-list/description-list.svelte';
10
8
  import JsonViewer from '../json-viewer/json-viewer.svelte';
11
- import Tabs from '../tabs/tabs.svelte';
12
- import TabList from '../tab-list/tab-list.svelte';
13
- import Tab from '../tab/tab.svelte';
14
- import TabPanel from '../tab-panel/tab-panel.svelte';
15
9
  import { classNames } from '../../utilities/class-names.ts';
16
- let { value, truncated = false, maxBytes = 1_048_576, meta, format, parse, activeView = $bindable('summary'), label = 'Payload inspector', class: className, ...rest } = $props();
10
+ let { value, truncated = false, maxBytes = 1_048_576, parse, label = 'Payload inspector', class: className, ...rest } = $props();
17
11
  function shouldParseString(raw) {
18
12
  const trimmed = raw.trim();
19
13
  if (/^[{\["]/.test(trimmed))
@@ -66,27 +60,6 @@ const byteLabel = $derived.by(() => {
66
60
  return `${(bytes / 1024).toFixed(1)} KB`;
67
61
  return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;
68
62
  });
69
- // --------------------------------------------------------------------------
70
- // Formatted raw text for the raw view.
71
- //
72
- // `format` controls how the raw view *displays* the payload — it is a
73
- // serializer (e.g. sorted keys, custom indentation) not a redaction hook.
74
- // Redaction should happen upstream: pass the already-redacted object as
75
- // `value` so every view (Summary, Tree, Raw) sees the redacted form.
76
- // --------------------------------------------------------------------------
77
- const rawText = $derived.by(() => {
78
- if (!parseResult.ok) {
79
- // Show the original string if we have one (so the user can see what failed to parse).
80
- return typeof value === 'string' ? value : '';
81
- }
82
- try {
83
- const formatter = format ?? ((v) => JSON.stringify(v, null, 2));
84
- return formatter(parsedValue) ?? '';
85
- }
86
- catch {
87
- return typeof value === 'string' ? value : '';
88
- }
89
- });
90
63
  // True when the in-memory value cannot be round-tripped through JSON.stringify
91
64
  // (e.g. circular references, BigInt). Only fires for non-string values that
92
65
  // parsed successfully — string parse errors are handled by parseResult.ok.
@@ -101,115 +74,33 @@ const unserializable = $derived.by(() => {
101
74
  return true;
102
75
  }
103
76
  });
104
- // --------------------------------------------------------------------------
105
- // Summary metadata items for DescriptionList.
106
- // --------------------------------------------------------------------------
107
- const summaryItems = $derived.by(() => {
108
- const items = [];
109
- items.push({ term: 'Size', definition: byteLabel });
110
- if (meta?.contentType) {
111
- items.push({ term: 'Content type', definition: meta.contentType });
112
- }
113
- if (meta?.source) {
114
- items.push({ term: 'Source', definition: meta.source });
115
- }
116
- if (meta?.timestamp) {
117
- // Attempt to format as a locale string; fall back to raw string.
118
- let displayTime = meta.timestamp;
119
- try {
120
- displayTime = new Date(meta.timestamp).toLocaleString();
121
- }
122
- catch {
123
- // leave as-is
124
- }
125
- items.push({ term: 'Timestamp', definition: displayTime });
126
- }
127
- return items;
128
- });
129
- const valueKind = $derived.by(() => {
130
- if (!parseResult.ok)
131
- return 'invalid';
132
- const v = parsedValue;
133
- if (v === null)
134
- return 'null';
135
- if (v === undefined)
136
- return 'undefined';
137
- if (typeof v === 'boolean')
138
- return 'boolean';
139
- if (typeof v === 'number')
140
- return 'number';
141
- if (typeof v === 'string')
142
- return 'string';
143
- if (Array.isArray(v))
144
- return 'array';
145
- return 'object';
146
- });
147
- // --------------------------------------------------------------------------
148
- // Whether the value is a primitive (shown inline in the summary).
149
- // --------------------------------------------------------------------------
150
- const isPrimitive = $derived(valueKind === 'null' ||
151
- valueKind === 'undefined' ||
152
- valueKind === 'boolean' ||
153
- valueKind === 'number' ||
154
- valueKind === 'string');
155
77
  const isEmpty = $derived(parsedValue === undefined && value === undefined);
156
- // --------------------------------------------------------------------------
157
- // Copy targets for the header copy buttons.
158
- //
159
- // copy-raw → "payload as received": the original string verbatim if value
160
- // was a string, otherwise compact JSON (one-liner, no spaces).
161
- // This is what you would paste into a message bus or log query.
162
- //
163
- // copy-formatted pretty-printed JSON of the parsed value (2-space indent).
164
- // Ignores the `format` prop so it is always valid JSON.
165
- // This is what you would read or diff in an editor.
166
- // --------------------------------------------------------------------------
167
- const copyRawText = $derived.by(() => {
78
+ const isPrimitive = $derived(parsedValue === null ||
79
+ typeof parsedValue === 'boolean' ||
80
+ typeof parsedValue === 'number' ||
81
+ typeof parsedValue === 'string');
82
+ // Copy target: the original string verbatim whenever the payload itself was
83
+ // a string including a JSON-encoded string primitive like '"hello"',
84
+ // which parses to the bare string `hello` but should still copy as the
85
+ // original input, not the unquoted parsed result. Everything else copies
86
+ // as pretty-printed JSON of the parsed value.
87
+ const copyText = $derived.by(() => {
88
+ if (!parseResult.ok)
89
+ return typeof value === 'string' ? value : '';
168
90
  if (typeof value === 'string')
169
91
  return value;
170
- if (!parseResult.ok)
171
- return '';
172
- try {
173
- return JSON.stringify(parsedValue) ?? '';
174
- }
175
- catch {
176
- return '';
177
- }
178
- });
179
- const copyFormattedText = $derived.by(() => {
180
- if (!parseResult.ok)
181
- return rawText;
182
92
  try {
183
93
  return JSON.stringify(parsedValue, null, 2) ?? '';
184
94
  }
185
95
  catch {
186
- return rawText;
96
+ return '';
187
97
  }
188
98
  });
189
- const canCopyFormatted = $derived(!isEmpty && parseResult.ok && !unserializable);
190
- const canCopyRaw = $derived(!isEmpty && (typeof value === 'string' || canCopyFormatted));
191
- // --------------------------------------------------------------------------
192
- // Helper: badge variant for the type tag.
193
- // --------------------------------------------------------------------------
194
- function kindVariant(kind) {
195
- if (kind === 'invalid')
196
- return 'danger';
197
- if (kind === 'null' || kind === 'undefined')
198
- return 'warning';
199
- if (kind === 'object' || kind === 'array')
200
- return 'info';
201
- return 'neutral';
202
- }
203
- // --------------------------------------------------------------------------
204
- // Computed active view binding — keep activeView in sync with $bindable.
205
- // Because Tabs uses bind:value internally, we forward the $bindable to it
206
- // directly. The Tabs bind creates a two-way link that keeps activeView
207
- // updated when the user switches tabs, and respects external changes too.
208
- // --------------------------------------------------------------------------
99
+ const canCopy = $derived(!isEmpty && copyText !== '');
209
100
  </script>
210
101
 
211
- <section {...rest} class={classNames('cinder-payload-inspector', className)} aria-label={label}>
212
- <!-- Header bar: label, size, copy actions -->
102
+ <div {...rest} class={classNames('cinder-payload-inspector', className)}>
103
+ <!-- Header bar: label, size, copy action -->
213
104
  <div class="cinder-payload-inspector__header">
214
105
  <span class="cinder-payload-inspector__label">{label}</span>
215
106
  <div class="cinder-payload-inspector__header-actions">
@@ -221,124 +112,40 @@ function kindVariant(kind) {
221
112
  {#if truncated}
222
113
  <Badge variant="warning" size="xs">Truncated</Badge>
223
114
  {/if}
224
- {#if canCopyFormatted}
115
+ {#if canCopy}
225
116
  <CopyButton
226
- value={copyFormattedText}
227
- label="Copy formatted"
228
- copiedLabel="Formatted copied"
229
- title="Copy formatted payload"
230
- iconOnly
231
- />
232
- {/if}
233
- {#if canCopyRaw}
234
- <CopyButton
235
- value={copyRawText}
236
- label="Copy raw"
237
- copiedLabel="Raw copied"
238
- title="Copy raw payload"
117
+ value={copyText}
118
+ label={`Copy ${label}`}
119
+ copiedLabel="Copied"
120
+ title={`Copy ${label}`}
239
121
  iconOnly
240
122
  />
241
123
  {/if}
242
124
  </div>
243
125
  </div>
244
126
 
245
- <!-- Tab switcher: Summary / Tree / Raw -->
246
- <div class="cinder-payload-inspector__tabs">
247
- <Tabs bind:value={activeView}>
248
- <TabList label="Inspector views">
249
- <Tab value="summary">Summary</Tab>
250
- <Tab value="tree">Tree</Tab>
251
- <Tab value="raw">Raw</Tab>
252
- </TabList>
253
-
254
- <!-- Summary panel -->
255
- <TabPanel value="summary">
256
- <div class="cinder-payload-inspector__panel">
257
- {#if isEmpty}
258
- <div class="cinder-payload-inspector__empty" role="status">No payload</div>
259
- {/if}
260
- {#if !isEmpty}
261
- <div class="cinder-payload-inspector__summary">
262
- <div class="cinder-payload-inspector__summary-badges">
263
- <Badge variant={kindVariant(valueKind)} size="xs" mono>{valueKind}</Badge>
264
- {#if truncated}
265
- <Badge variant="warning" size="xs">Truncated</Badge>
266
- {/if}
267
- </div>
268
- {#if summaryItems.length > 0}
269
- <DescriptionList items={summaryItems} variant="two-column" />
270
- {/if}
271
- {#if !parseResult.ok}
272
- <div
273
- class="cinder-payload-inspector__notice cinder-payload-inspector__notice--warning"
274
- role="alert"
275
- >
276
- Parse error: {parseResult.error}
277
- </div>
278
- {/if}
279
- {#if parseResult.ok && isPrimitive}
280
- <div class="cinder-payload-inspector__summary-value">
281
- <span class="cinder-payload-inspector__summary-value-label">Value</span>
282
- <span class="cinder-payload-inspector__primitive">{String(parsedValue)}</span>
283
- </div>
284
- {/if}
285
- </div>
286
- {/if}
287
- </div>
288
- </TabPanel>
289
-
290
- <!-- Tree panel -->
291
- <TabPanel value="tree">
292
- <div class="cinder-payload-inspector__panel">
293
- {#if isEmpty}
294
- <div class="cinder-payload-inspector__empty" role="status">No payload</div>
295
- {/if}
296
- {#if !isEmpty && !parseResult.ok}
297
- <div
298
- class="cinder-payload-inspector__notice cinder-payload-inspector__notice--warning"
299
- role="alert"
300
- >
301
- Cannot render tree: {parseResult.error}
302
- </div>
303
- {/if}
304
- {#if !isEmpty && parseResult.ok && unserializable}
305
- <div class="cinder-payload-inspector__notice" role="status">
306
- This value can't be serialized as JSON (it may contain circular references or BigInt
307
- values).
308
- </div>
309
- {/if}
310
- {#if !isEmpty && parseResult.ok && !unserializable}
311
- <JsonViewer value={parsedValue} {maxBytes} />
312
- {/if}
313
- </div>
314
- </TabPanel>
315
-
316
- <!-- Raw panel -->
317
- <TabPanel value="raw">
318
- <div class="cinder-payload-inspector__panel cinder-payload-inspector__panel--code">
319
- {#if isEmpty}
320
- <div class="cinder-payload-inspector__empty" role="status">No payload</div>
321
- {/if}
322
- {#if !isEmpty && truncated}
323
- <div class="cinder-payload-inspector__notice cinder-payload-inspector__notice--warning">
324
- This payload has been truncated by the producer. The raw view shows only the received
325
- portion.
326
- </div>
327
- {/if}
328
- {#if !isEmpty && unserializable}
329
- <div class="cinder-payload-inspector__notice" role="status">
330
- This value can't be serialized as JSON (it may contain circular references or BigInt
331
- values).
332
- </div>
333
- {/if}
334
- {#if !isEmpty && !unserializable}
335
- <!-- highlight={false} is an absolute off-switch: no Shiki import,
336
- guaranteed-escaped plaintext. Consumers who want highlighting can
337
- pass a `format` function and swap in a custom view. -->
338
- <CodeBlock code={rawText} highlight={false} class="cinder-payload-inspector__raw" />
339
- {/if}
340
- </div>
341
- </TabPanel>
342
- </Tabs>
127
+ <div class="cinder-payload-inspector__panel">
128
+ {#if isEmpty}
129
+ <div class="cinder-payload-inspector__empty" role="status">No payload</div>
130
+ {:else if !parseResult.ok}
131
+ <div
132
+ class="cinder-payload-inspector__notice cinder-payload-inspector__notice--warning"
133
+ role="alert"
134
+ >
135
+ Parse error: {parseResult.error}
136
+ </div>
137
+ {#if typeof value === 'string'}
138
+ <pre class="cinder-payload-inspector__primitive">{value}</pre>
139
+ {/if}
140
+ {:else if unserializable}
141
+ <div class="cinder-payload-inspector__notice" role="status">
142
+ This value can't be serialized as JSON (it may contain circular references or BigInt
143
+ values).
144
+ </div>
145
+ {:else if isPrimitive}
146
+ <pre class="cinder-payload-inspector__primitive">{String(parsedValue)}</pre>
147
+ {:else}
148
+ <JsonViewer value={parsedValue} {maxBytes} />
149
+ {/if}
343
150
  </div>
344
- </section>
151
+ </div>
@@ -1,22 +1,5 @@
1
1
  import type { HTMLAttributes } from 'svelte/elements';
2
2
 
3
- /** Active view tab for the inspector. */
4
- export type PayloadInspectorView = 'summary' | 'tree' | 'raw';
5
-
6
- /**
7
- * Structured metadata about the payload shown in the summary view.
8
- *
9
- * @schemaObject
10
- */
11
- export type PayloadInspectorMeta = {
12
- /** Content type or serializer label, e.g. "application/json" or "Protobuf". */
13
- contentType?: string;
14
- /** Optional source label, e.g. a workflow name, activity name, or endpoint path. */
15
- source?: string;
16
- /** Optional ISO 8601 timestamp string rendered in the summary. */
17
- timestamp?: string;
18
- };
19
-
20
3
  /** Schema-facing payload value. Kept permissive to match the runtime `unknown` prop. */
21
4
  export type PayloadInspectorSchemaValue = unknown;
22
5
 
@@ -33,29 +16,15 @@ export type PayloadInspectorProps = Omit<HTMLAttributes<HTMLElement>, 'class' |
33
16
  value?: unknown;
34
17
  /**
35
18
  * When true, the payload has been truncated by the producer (e.g. because it
36
- * exceeded a wire size limit). The inspector renders a truncation badge in the
37
- * summary and a notice above the raw view.
19
+ * exceeded a wire size limit). The inspector renders a truncation badge in
20
+ * the header.
38
21
  */
39
22
  truncated?: boolean;
40
23
  /**
41
24
  * Maximum byte size before the tree view is replaced with an oversize
42
- * placeholder. Defaults to 1,048,576 (1 MB). Does not affect the raw view.
25
+ * placeholder. Defaults to 1,048,576 (1 MB).
43
26
  */
44
27
  maxBytes?: number;
45
- /**
46
- * Structured metadata shown in the summary panel. Pass contentType, source,
47
- * and/or timestamp to populate the description list rows.
48
- */
49
- meta?: PayloadInspectorMeta;
50
- /**
51
- * Custom serializer for the Raw view display text. Receives the parsed value
52
- * and must return a string. Defaults to JSON.stringify with 2-space
53
- * indentation. Use this to customize key ordering, indentation, or
54
- * alternative serialization formats. Does not affect the Summary or Tree
55
- * views, or the copy buttons. For redaction, transform the value upstream and
56
- * pass the already-redacted value as `value`.
57
- */
58
- format?: (value: unknown) => string;
59
28
  /**
60
29
  * Custom parser applied when `value` is a string. Receives the raw string
61
30
  * and must return a parsed value or throw. Defaults to JSON.parse. Use this
@@ -63,13 +32,7 @@ export type PayloadInspectorProps = Omit<HTMLAttributes<HTMLElement>, 'class' |
63
32
  */
64
33
  parse?: (raw: string) => unknown;
65
34
  /**
66
- * Initially active view tab. Defaults to "summary". Bind to control
67
- * the active tab from outside.
68
- */
69
- activeView?: PayloadInspectorView;
70
- /**
71
- * Label for the inspector region, used as the accessible name for the
72
- * containing section. Defaults to "Payload inspector".
35
+ * Visible header label for the inspector. Defaults to "Payload inspector".
73
36
  */
74
37
  label?: string;
75
38
  /** Additional CSS classes applied to the root element. */
@@ -79,8 +42,8 @@ export type PayloadInspectorProps = Omit<HTMLAttributes<HTMLElement>, 'class' |
79
42
  /**
80
43
  * Cinder-specific schema surface for PayloadInspector.
81
44
  *
82
- * Parser and formatter callbacks are documented but marked unsupported because
83
- * functions cannot be represented as JSON Schema controls.
45
+ * The parser callback is documented but marked unsupported because functions
46
+ * cannot be represented as JSON Schema controls.
84
47
  */
85
48
  export type PayloadInspectorSchemaProps = {
86
49
  /**
@@ -94,28 +57,17 @@ export type PayloadInspectorSchemaProps = {
94
57
  value?: PayloadInspectorSchemaValue;
95
58
  /**
96
59
  * When true, the payload has been truncated by the producer (e.g. because it
97
- * exceeded a wire size limit). The inspector renders a truncation badge in the
98
- * summary and a notice above the raw view.
60
+ * exceeded a wire size limit). The inspector renders a truncation badge in
61
+ * the header.
99
62
  */
100
63
  truncated?: boolean;
101
64
  /**
102
65
  * Maximum byte size before the tree view is replaced with an oversize
103
- * placeholder. Defaults to 1,048,576 (1 MB). Does not affect the raw view.
66
+ * placeholder. Defaults to 1,048,576 (1 MB).
104
67
  */
105
68
  maxBytes?: number;
106
69
  /**
107
- * Structured metadata shown in the summary panel. Pass contentType, source,
108
- * and/or timestamp to populate the description list rows.
109
- */
110
- meta?: PayloadInspectorMeta;
111
- /**
112
- * Initially active view tab. Defaults to "summary". Bind to control
113
- * the active tab from outside.
114
- */
115
- activeView?: PayloadInspectorView;
116
- /**
117
- * Label for the inspector region, used as the accessible name for the
118
- * containing section. Defaults to "Payload inspector".
70
+ * Visible header label for the inspector. Defaults to "Payload inspector".
119
71
  */
120
72
  label?: string;
121
73
  /** Additional CSS classes applied to the root element. */
@@ -4,13 +4,21 @@ import RunStepTimeline from './run-step-timeline.svelte';
4
4
  export default RunStepTimeline;
5
5
  export type {
6
6
  RunStep,
7
+ RunStepBranchGroup,
8
+ RunStepBranchLane,
9
+ RunStepBranchLaneOutcome,
7
10
  RunStepDetail,
8
11
  RunStepLink,
9
12
  RunStepStatus,
13
+ RunStepTimelineEntry,
10
14
  RunStepTimelineProps,
15
+ RunStepTimelineSchemaBranchGroup,
16
+ RunStepTimelineSchemaBranchLane,
11
17
  RunStepTimelineSchemaChildStep,
18
+ RunStepTimelineSchemaEntry,
12
19
  RunStepTimelineSchemaGrandchildStep,
13
20
  RunStepTimelineSchemaGreatGrandchildStep,
21
+ RunStepTimelineSchemaLaneStep,
14
22
  RunStepTimelineSchemaProps,
15
23
  RunStepTimelineSchemaStep,
16
24
  } from './run-step-timeline.types.ts';
@@ -0,0 +1,16 @@
1
+ <script lang="ts">
2
+ import Collapsible from '../collapsible/collapsible.svelte';
3
+ let { initialOpen, triggerAriaLabel, class: className, trigger, children, } = $props();
4
+ // Seed the disclosure state exactly once, from the group's initial auto-open
5
+ // decision. Binding `open` directly to a value derived from live step status
6
+ // (the collapsible seeds *and* re-syncs from an un-`bind:`-ed `open` prop) would
7
+ // slam the group shut the moment its active lane finished — overriding the
8
+ // reader's own toggle. Owning the state locally via `bind:open` keeps
9
+ // `collapsed`/`collapseThreshold` as documented *initial* behavior while leaving
10
+ // the group freely user-togglable for the rest of its life.
11
+ let open = $state(initialOpen);
12
+ </script>
13
+
14
+ <Collapsible bind:open {trigger} {triggerAriaLabel} class={className}>
15
+ {@render children()}
16
+ </Collapsible>
@@ -212,6 +212,130 @@
212
212
  color: var(--cinder-text-muted);
213
213
  }
214
214
 
215
+ /* ----------------------------------------
216
+ * Rewound steps: speculatively executed, then unwound. Struck-through and
217
+ * de-emphasized but still inspectable (details/collapsibles keep working).
218
+ * The "Rewound" badge carries the state as text so it is never color-only.
219
+ * ---------------------------------------- */
220
+
221
+ .cinder-run-step-timeline__item[data-cinder-rewound] .cinder-run-step-timeline__label {
222
+ text-decoration: line-through;
223
+ color: var(--cinder-text-muted);
224
+ }
225
+
226
+ .cinder-run-step-timeline__item[data-cinder-rewound] .cinder-run-step-timeline__marker {
227
+ opacity: 0.55;
228
+ }
229
+
230
+ .cinder-run-step-timeline__item[data-cinder-rewound] .cinder-run-step-timeline__meta {
231
+ opacity: 0.7;
232
+ }
233
+
234
+ /* ----------------------------------------
235
+ * Compensation steps: inset beneath their forward step with a dashed
236
+ * reversal connector. The "Compensates <step>" badge names the relationship.
237
+ * ---------------------------------------- */
238
+
239
+ .cinder-run-step-timeline__item[data-cinder-compensation] {
240
+ --_cinder-rst-compensation-inset: var(--cinder-space-5);
241
+
242
+ padding-inline-start: var(--_cinder-rst-compensation-inset);
243
+ }
244
+
245
+ .cinder-run-step-timeline__item[data-cinder-compensation]::after {
246
+ content: '';
247
+ position: absolute;
248
+ inset-inline-start: calc(var(--_cinder-rst-depth-offset) + var(--_cinder-rst-rail-center));
249
+ inset-block-start: -0.5rem;
250
+ inline-size: var(--cinder-space-5);
251
+ block-size: 1.5rem;
252
+ border-inline-start: 1px dashed var(--cinder-border-strong);
253
+ border-block-end: 1px dashed var(--cinder-border-strong);
254
+ border-end-start-radius: var(--cinder-radius-md);
255
+ pointer-events: none;
256
+ }
257
+
258
+ /* ----------------------------------------
259
+ * Branch / coordination groups: N parallel sub-lanes with won/lost/settled
260
+ * outcomes. Winner emphasized, losers muted — driven by tokens.
261
+ * ---------------------------------------- */
262
+
263
+ .cinder-run-step-timeline__branch {
264
+ min-width: 0;
265
+ }
266
+
267
+ .cinder-run-step-timeline__branch-heading {
268
+ display: inline-flex;
269
+ align-items: center;
270
+ gap: var(--cinder-space-2);
271
+ }
272
+
273
+ .cinder-run-step-timeline__lanes {
274
+ list-style: none;
275
+ margin: var(--cinder-space-2) 0 0;
276
+ padding: 0;
277
+ display: grid;
278
+ grid-template-columns: repeat(auto-fit, minmax(14rem, 1fr));
279
+ gap: var(--cinder-space-3);
280
+ }
281
+
282
+ .cinder-run-step-timeline__lane {
283
+ border: 1px solid var(--cinder-border-muted);
284
+ border-radius: var(--cinder-radius-md);
285
+ padding: var(--cinder-space-3);
286
+ background: var(--cinder-surface-inset);
287
+ min-width: 0;
288
+ }
289
+
290
+ .cinder-run-step-timeline__lane-header {
291
+ display: flex;
292
+ align-items: center;
293
+ justify-content: space-between;
294
+ gap: var(--cinder-space-2);
295
+ margin-block-end: var(--cinder-space-2);
296
+ }
297
+
298
+ .cinder-run-step-timeline__lane-label {
299
+ font-size: var(--cinder-text-xs);
300
+ font-weight: var(--cinder-font-semibold);
301
+ color: var(--cinder-text);
302
+ min-width: 0;
303
+ overflow-wrap: anywhere;
304
+ }
305
+
306
+ .cinder-run-step-timeline__lane-steps {
307
+ margin: 0;
308
+ }
309
+
310
+ /* Winner: emphasized border + full-strength text. */
311
+ .cinder-run-step-timeline__lane[data-cinder-outcome='won'] {
312
+ border-color: var(--cinder-success);
313
+ border-inline-start-width: 3px;
314
+ }
315
+
316
+ /* Loser: muted via a muted border and lane label — not a blanket opacity, so
317
+ * step text, links, detail triggers, and focus rings keep full contrast. The
318
+ * "Lost" outcome badge carries the outcome as text. */
319
+ .cinder-run-step-timeline__lane[data-cinder-outcome='lost'] {
320
+ border-color: var(--cinder-border-muted);
321
+ }
322
+
323
+ .cinder-run-step-timeline__lane[data-cinder-outcome='lost']
324
+ .cinder-run-step-timeline__lane-label {
325
+ color: var(--cinder-text-muted);
326
+ }
327
+
328
+ /* Settled: neutral, no competitive emphasis. */
329
+ .cinder-run-step-timeline__lane[data-cinder-outcome='settled'] {
330
+ border-color: var(--cinder-border);
331
+ }
332
+
333
+ /* Still racing: accent edge to signal in-flight. */
334
+ .cinder-run-step-timeline__lane[data-cinder-outcome='racing'] {
335
+ border-color: var(--cinder-accent);
336
+ border-inline-start-width: 3px;
337
+ }
338
+
215
339
  /* ----------------------------------------
216
340
  * Focus ring (not applicable to the root list, but included for
217
341
  * completeness if the component is ever given an interactive element)
@@ -9,12 +9,30 @@
9
9
  "description": "A multi-step async run with pending, running, and succeeded steps.",
10
10
  "code": "<script lang=\"ts\">\n import { RunStepTimeline } from '@lostgradient/cinder/run-step-timeline';\n import type { RunStep } from '@lostgradient/cinder/run-step-timeline';\n\n const steps: RunStep[] = [\n {\n id: 'validate',\n label: 'Validate configuration',\n status: 'succeeded',\n startTime: '2026-06-01T11:00:00Z',\n endTime: '2026-06-01T11:01:30Z',\n duration: '1m 30s',\n },\n {\n id: 'build',\n label: 'Build Docker image',\n status: 'running',\n startTime: '2026-06-01T11:02:00Z',\n progress: 40,\n },\n {\n id: 'deploy',\n label: 'Deploy to staging',\n status: 'pending',\n },\n ];\n</script>\n\n<RunStepTimeline {steps} label=\"Deployment run\" />\n"
11
11
  },
12
+ {
13
+ "id": "branch-group",
14
+ "title": "Branch group with a winning lane",
15
+ "description": "A speculative race across three parallel deploy candidates. The winning lane is emphasized and the losers are muted, with the group outcome summarized as text.",
16
+ "code": "<script lang=\"ts\">\n import { RunStepTimeline } from '@lostgradient/cinder/run-step-timeline';\n import type { RunStepTimelineEntry } from '@lostgradient/cinder/run-step-timeline';\n\n const steps: RunStepTimelineEntry[] = [\n {\n id: 'plan',\n label: 'Plan rollout',\n status: 'succeeded',\n startTime: '2026-06-01T09:00:00Z',\n endTime: '2026-06-01T09:00:04Z',\n duration: '4s',\n },\n {\n kind: 'branch',\n id: 'race',\n label: 'Race deploy candidates',\n lanes: [\n {\n id: 'us-east',\n label: 'us-east-1',\n outcome: 'won',\n steps: [\n {\n id: 'ue-deploy',\n label: 'Deploy to us-east-1',\n status: 'succeeded',\n duration: '38s',\n },\n { id: 'ue-health', label: 'Health check', status: 'succeeded', duration: '3s' },\n ],\n },\n {\n id: 'eu-west',\n label: 'eu-west-1',\n outcome: 'lost',\n steps: [\n {\n id: 'ew-deploy',\n label: 'Deploy to eu-west-1',\n status: 'succeeded',\n duration: '52s',\n },\n { id: 'ew-cancel', label: 'Cancelled after us-east-1 won', status: 'cancelled' },\n ],\n },\n {\n id: 'ap-south',\n label: 'ap-south-1',\n outcome: 'lost',\n steps: [{ id: 'as-deploy', label: 'Deploy to ap-south-1', status: 'cancelled' }],\n },\n ],\n },\n {\n id: 'promote',\n label: 'Promote winning region',\n status: 'running',\n startTime: '2026-06-01T09:01:10Z',\n progress: 45,\n },\n ];\n</script>\n\n<RunStepTimeline {steps} label=\"Speculative deploy run\" />\n"
17
+ },
12
18
  {
13
19
  "id": "failed-run",
14
20
  "title": "Failed run with error details",
15
21
  "description": "A completed run where one step failed after retries, with expandable error output and environment info.",
16
22
  "code": "<script lang=\"ts\">\n import { RunStepTimeline } from '@lostgradient/cinder/run-step-timeline';\n import type { RunStep } from '@lostgradient/cinder/run-step-timeline';\n\n const steps: RunStep[] = [\n {\n id: 'lint',\n label: 'Lint source files',\n status: 'succeeded',\n startTime: '2026-06-01T10:00:00Z',\n endTime: '2026-06-01T10:00:22Z',\n duration: '22s',\n },\n {\n id: 'typecheck',\n label: 'Type-check',\n status: 'succeeded',\n startTime: '2026-06-01T10:00:23Z',\n endTime: '2026-06-01T10:00:51Z',\n duration: '28s',\n },\n {\n id: 'test',\n label: 'Run unit tests',\n status: 'failed',\n startTime: '2026-06-01T10:00:52Z',\n endTime: '2026-06-01T10:05:10Z',\n duration: '4m 18s',\n attemptCount: 2,\n details: [\n {\n id: 'test-error',\n label: 'Error output',\n content:\n 'AssertionError: expected 1 to equal 2\\n at src/math.test.ts:12:5\\n at test (bun:test/runner.ts:88)',\n },\n {\n id: 'test-env',\n label: 'Environment',\n content: 'NODE_ENV=test\\nCI=true\\nBUN_VERSION=1.2.0',\n },\n ],\n },\n {\n id: 'publish',\n label: 'Publish artifacts',\n status: 'cancelled',\n },\n ];\n</script>\n\n<RunStepTimeline {steps} label=\"CI run — failed\" />\n"
17
23
  },
24
+ {
25
+ "id": "rewound-speculation",
26
+ "title": "Rewound speculative step",
27
+ "description": "A step that was speculatively executed and then unwound after a conflict. It renders struck-through and de-emphasized but stays inspectable, and announces its rewound state as text.",
28
+ "code": "<script lang=\"ts\">\n import { RunStepTimeline } from '@lostgradient/cinder/run-step-timeline';\n import type { RunStepTimelineEntry } from '@lostgradient/cinder/run-step-timeline';\n\n const steps: RunStepTimelineEntry[] = [\n {\n id: 'read',\n label: 'Read current inventory',\n status: 'succeeded',\n duration: '2s',\n },\n {\n id: 'reserve',\n label: 'Reserve stock (speculative)',\n status: 'succeeded',\n rewound: true,\n duration: '1s',\n details: [\n {\n id: 'reason',\n label: 'Why it was unwound',\n content:\n 'A concurrent order won the reservation. This speculative branch was rolled back before commit.',\n },\n ],\n },\n {\n id: 'retry',\n label: 'Re-read inventory and reserve',\n status: 'running',\n progress: 30,\n },\n ];\n</script>\n\n<RunStepTimeline {steps} label=\"Speculative reservation\" />\n"
29
+ },
30
+ {
31
+ "id": "saga-compensation",
32
+ "title": "Saga compensation",
33
+ "description": "A saga where a later step compensates (reverses) an earlier forward step by id. The compensating step renders inset beneath its forward step with a dashed reversal connector.",
34
+ "code": "<script lang=\"ts\">\n import { RunStepTimeline } from '@lostgradient/cinder/run-step-timeline';\n import type { RunStepTimelineEntry } from '@lostgradient/cinder/run-step-timeline';\n\n const steps: RunStepTimelineEntry[] = [\n {\n id: 'charge',\n label: 'Charge customer card',\n status: 'succeeded',\n duration: '1s',\n },\n {\n id: 'reserve-seat',\n label: 'Reserve seat',\n status: 'failed',\n duration: '2s',\n details: [\n {\n id: 'err',\n label: 'Error',\n content: 'Seat 14C was taken before the reservation committed.',\n },\n ],\n },\n {\n id: 'refund',\n label: 'Refund customer card',\n status: 'succeeded',\n compensates: 'charge',\n duration: '1s',\n },\n ];\n</script>\n\n<RunStepTimeline {steps} label=\"Booking saga\" />\n"
35
+ },
18
36
  {
19
37
  "id": "workflow-run",
20
38
  "title": "Temporal child workflow with approval wait",