@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.
- package/CHANGELOG.md +25 -0
- package/README.md +2 -2
- package/components.json +140 -18
- package/dist/components/_internal/command-list-context.d.ts +3 -3
- package/dist/components/_internal/create-command-list-state.svelte.d.ts +11 -11
- package/dist/components/access-gate/index.js +435 -218
- package/dist/components/approval-card/approval-card-actions.svelte.d.ts +16 -0
- package/dist/components/approval-card/approval-card-state.d.ts +65 -0
- package/dist/components/approval-card/approval-card.css +269 -92
- package/dist/components/approval-card/approval-card.schema.js +10 -31
- package/dist/components/approval-card/approval-card.svelte.d.ts +3 -3
- package/dist/components/approval-card/approval-card.types.d.ts +14 -28
- package/dist/components/approval-card/index.d.ts +1 -1
- package/dist/components/approval-card/index.js +4268 -2884
- package/dist/components/card/card.css +5 -0
- package/dist/components/card/card.schema.js +2 -2
- package/dist/components/card/card.types.d.ts +2 -2
- package/dist/components/card/index.js +2 -1
- package/dist/components/chat/builders.d.ts +17 -8
- package/dist/components/chat/chat.schema.js +44 -2
- package/dist/components/chat/chat.svelte.d.ts +4 -2
- package/dist/components/chat/chat.types.d.ts +34 -3
- package/dist/components/chat/container/chat.svelte.d.ts +4 -2
- package/dist/components/chat/conversation-model.d.ts +1 -1
- package/dist/components/chat/index.d.ts +4 -4
- package/dist/components/chat/index.js +2767 -6278
- package/dist/components/chat/input/chat-attachment-serialization.d.ts +9 -0
- package/dist/components/chat/input/chat-input.svelte.d.ts +22 -1
- package/dist/components/chat/input/index.d.ts +1 -0
- package/dist/components/chat/utilities/conversation.d.ts +6 -6
- package/dist/components/chat-composer-popover/chat-composer-popover-filter.d.ts +11 -0
- package/dist/components/chat-composer-popover/chat-composer-popover.css +7 -0
- package/dist/components/chat-composer-popover/chat-composer-popover.css.d.ts +1 -0
- package/dist/components/chat-composer-popover/chat-composer-popover.schema.d.ts +3 -0
- package/dist/components/chat-composer-popover/chat-composer-popover.schema.js +150 -0
- package/dist/components/chat-composer-popover/chat-composer-popover.svelte.d.ts +46 -0
- package/dist/components/chat-composer-popover/chat-composer-popover.types.d.ts +77 -0
- package/dist/components/chat-composer-popover/chat-composer-popover.variables.d.ts +2 -0
- package/dist/components/chat-composer-popover/chat-composer-popover.variables.js +61 -0
- package/dist/components/chat-composer-popover/index.d.ts +6 -0
- package/dist/components/chat-composer-popover/index.js +3285 -0
- package/dist/components/chat-conversation-header/index.js +577 -4537
- package/dist/components/chat-conversation-list/index.js +24 -3984
- package/dist/components/code-block/code-block.schema.js +5 -1
- package/dist/components/code-block/code-block.types.d.ts +6 -0
- package/dist/components/code-block/index.js +4 -4
- package/dist/components/command-item/index.js +7 -6
- package/dist/components/command-menu/command-menu.schema.js +5 -1
- package/dist/components/command-menu/command-menu.types.d.ts +2 -0
- package/dist/components/command-menu/index.js +48 -19
- package/dist/components/command-palette/index.js +40 -14
- package/dist/components/connection-indicator/connection-indicator.css +136 -0
- package/dist/components/connection-indicator/connection-indicator.css.d.ts +1 -0
- package/dist/components/connection-indicator/connection-indicator.schema.d.ts +3 -0
- package/dist/components/connection-indicator/connection-indicator.schema.js +89 -0
- package/dist/components/connection-indicator/connection-indicator.svelte.d.ts +21 -0
- package/dist/components/connection-indicator/connection-indicator.types.d.ts +46 -0
- package/dist/components/connection-indicator/connection-indicator.variables.d.ts +2 -0
- package/dist/components/connection-indicator/connection-indicator.variables.js +61 -0
- package/dist/components/connection-indicator/index.d.ts +5 -0
- package/dist/components/connection-indicator/index.js +409 -0
- package/dist/components/container/container.schema.js +4 -4
- package/dist/components/event-stream-viewer/index.js +44 -44
- package/dist/components/experimental/json-viewer/index.js +44 -44
- package/dist/components/invocation-rule-builder/index.d.ts +1 -1
- package/dist/components/invocation-rule-builder/index.js +305 -150
- package/dist/components/invocation-rule-builder/invocation-rule-builder.css +28 -0
- package/dist/components/invocation-rule-builder/invocation-rule-builder.schema.js +89 -5
- package/dist/components/invocation-rule-builder/invocation-rule-builder.svelte.d.ts +2 -1
- package/dist/components/invocation-rule-builder/invocation-rule-builder.types.d.ts +114 -16
- package/dist/components/json-schema-editor/index.js +5 -2
- package/dist/components/json-viewer/index.js +44 -44
- package/dist/components/json-viewer/json-viewer.css +10 -6
- package/dist/components/payload-inspector/index.d.ts +1 -1
- package/dist/components/payload-inspector/index.js +306 -1422
- package/dist/components/payload-inspector/payload-inspector.css +15 -75
- package/dist/components/payload-inspector/payload-inspector.schema.js +5 -41
- package/dist/components/payload-inspector/payload-inspector.svelte.d.ts +5 -5
- package/dist/components/payload-inspector/payload-inspector.types.d.ts +10 -56
- package/dist/components/run-step-timeline/index.d.ts +1 -1
- package/dist/components/run-step-timeline/index.js +992 -559
- package/dist/components/run-step-timeline/run-step-branch-disclosure.svelte.d.ts +17 -0
- package/dist/components/run-step-timeline/run-step-timeline.css +124 -0
- package/dist/components/run-step-timeline/run-step-timeline.schema.js +873 -350
- package/dist/components/run-step-timeline/run-step-timeline.svelte.d.ts +1 -15
- package/dist/components/run-step-timeline/run-step-timeline.types.d.ts +182 -5
- package/dist/components/run-step-timeline/run-step-timeline.utilities.d.ts +52 -0
- package/dist/components/schedule-builder/index.d.ts +5 -0
- package/dist/components/schedule-builder/index.js +3176 -0
- package/dist/components/schedule-builder/schedule-builder.css +121 -0
- package/dist/components/schedule-builder/schedule-builder.css.d.ts +1 -0
- package/dist/components/schedule-builder/schedule-builder.schema.d.ts +3 -0
- package/dist/components/schedule-builder/schedule-builder.schema.js +141 -0
- package/dist/components/schedule-builder/schedule-builder.svelte.d.ts +22 -0
- package/dist/components/schedule-builder/schedule-builder.types.d.ts +130 -0
- package/dist/components/schedule-builder/schedule-builder.utilities.d.ts +78 -0
- package/dist/components/schedule-builder/schedule-builder.variables.d.ts +2 -0
- package/dist/components/schedule-builder/schedule-builder.variables.js +61 -0
- package/dist/components/tab/index.js +5 -2
- package/dist/components/tab/tab.schema.js +7 -3
- package/dist/components/tab/tab.svelte.d.ts +2 -1
- package/dist/components/tab/tab.types.d.ts +8 -2
- package/dist/components/tabs/index.js +5 -2
- package/dist/components/tag-input/index.js +22 -4
- package/dist/components/tag-input/tag-input.schema.js +5 -1
- package/dist/components/tag-input/tag-input.types.d.ts +4 -0
- package/dist/components/team-section/index.js +2 -1
- package/dist/components/testimonial-section/index.js +2 -1
- package/dist/index.d.ts +10 -4
- package/dist/index.js +28577 -30168
- package/dist/server/components/access-gate/index.js +3 -1
- package/dist/server/components/accordion/index.js +2 -2
- package/dist/server/components/alert-dialog/index.js +2 -2
- package/dist/server/components/approval-card/index.js +15 -19
- package/dist/server/components/autocomplete/index.js +7 -7
- package/dist/server/components/avatar-group/index.js +5 -5
- package/dist/server/components/button-group/index.js +3 -5
- package/dist/server/components/card/index.js +2 -2
- package/dist/server/components/chat/index.js +15 -12
- package/dist/server/components/chat-composer-popover/index.js +26 -0
- package/dist/server/components/chat-conversation-header/index.js +10 -11
- package/dist/server/components/chat-conversation-list/index.js +4 -5
- package/dist/server/components/checkbox/index.js +3 -3
- package/dist/server/components/choice-grid/index.js +2 -2
- package/dist/server/components/code-block/index.js +2 -2
- package/dist/server/components/color-field/index.js +3 -3
- package/dist/server/components/combobox/index.js +6 -6
- package/dist/server/components/command-item/index.js +5 -3
- package/dist/server/components/command-menu/index.js +6 -4
- package/dist/server/components/command-palette/index.js +2 -2
- package/dist/server/components/confirm-dialog/index.js +2 -2
- package/dist/server/components/connection-indicator/index.js +16 -0
- package/dist/server/components/context-menu/index.js +5 -5
- package/dist/server/components/data-table/index.js +5 -5
- package/dist/server/components/date-picker/index.js +6 -6
- package/dist/server/components/date-range-field/index.js +7 -7
- package/dist/server/components/description-list/index.js +3 -5
- package/dist/server/components/diff-viewer/index.js +9 -8
- package/dist/server/components/drawer/index.js +3 -3
- package/dist/server/components/dropdown/index.js +4 -4
- package/dist/server/components/event-stream-viewer/index.js +2 -2
- package/dist/server/components/experimental/json-viewer/index.js +2 -2
- package/dist/server/components/faceted-filter-bar/index.js +1 -1
- package/dist/server/components/hover-card/index.js +1 -1
- package/dist/server/components/input/index.js +3 -3
- package/dist/server/components/invocation-rule-builder/index.js +1 -1
- package/dist/server/components/json-schema-editor/index.js +24 -23
- package/dist/server/components/json-viewer/index.js +2 -2
- package/dist/server/components/markdown-editor/index.js +13 -13
- package/dist/server/components/modal/index.js +1 -1
- package/dist/server/components/multi-select/index.js +1 -1
- package/dist/server/components/newsletter-section/index.js +3 -3
- package/dist/server/components/payload-inspector/index.js +4 -16
- package/dist/server/components/popover/index.js +5 -5
- package/dist/server/components/review-editor/index.js +27 -26
- package/dist/server/components/run-step-timeline/index.js +2 -2
- package/dist/server/components/schedule-builder/index.js +30 -0
- package/dist/server/components/schema-form/index.js +4 -4
- package/dist/server/components/secret-value-field/index.js +3 -5
- package/dist/server/components/segment/index.js +3 -3
- package/dist/server/components/segmented-control/index.js +4 -4
- package/dist/server/components/selection-popover/index.js +4 -4
- package/dist/server/components/sheet/index.js +2 -2
- package/dist/server/components/side-navigation/index.js +2 -2
- package/dist/server/components/sidebar/index.js +3 -3
- package/dist/server/components/tab/index.js +2 -2
- package/dist/server/components/table/index.js +3 -3
- package/dist/server/components/tabs/index.js +4 -4
- package/dist/server/components/tag-input/index.js +3 -3
- package/dist/server/components/team-section/index.js +8 -8
- package/dist/server/components/testimonial-section/index.js +2 -2
- package/dist/server/components/time-field/index.js +5 -3
- package/dist/server/components/toggle/index.js +2 -2
- package/dist/server/components/tooltip/index.js +1 -1
- package/dist/server/index.js +235 -211
- package/dist/server/{index.server-20y4mdhm.js → index.server-0chhpkg7.js} +40 -14
- package/dist/server/index.server-0sx92swg.js +9 -0
- package/dist/server/{index.server-ecm1vs3g.js → index.server-1nq7z1qw.js} +1 -1
- package/dist/server/{index.server-s9khh4ry.js → index.server-2bbwajb2.js} +3 -5
- package/dist/server/index.server-2hqrv7ca.js +9 -0
- package/dist/server/{index.server-69epaape.js → index.server-2qj6s2mh.js} +1 -1
- package/dist/server/{index.server-gxf0d1p5.js → index.server-2s5h1d05.js} +2 -2
- package/dist/server/{index.server-qfa2rxzx.js → index.server-2zdbz3rj.js} +3 -5
- package/dist/server/{index.server-pt8b65mt.js → index.server-38aywdk1.js} +1 -1
- package/dist/server/{index.server-0jhra85x.js → index.server-3w72dxz7.js} +4 -4
- package/dist/server/{index.server-rermas0k.js → index.server-47v2fhp4.js} +4 -4
- package/dist/server/{index.server-v4zabrsx.js → index.server-4x4hgvqe.js} +434 -26
- package/dist/server/{index.server-9j5sym59.js → index.server-4x91gzy1.js} +2 -2
- package/dist/server/{index.server-q48q15g7.js → index.server-4y2jtvv1.js} +4 -2
- package/dist/server/{index.server-j3ddzcaa.js → index.server-5gzyqv78.js} +6 -6
- package/dist/server/index.server-67qgdypc.js +9 -0
- package/dist/server/index.server-6hnfzc7f.js +263 -0
- package/dist/server/{index.server-9jete4xx.js → index.server-6sh11ap6.js} +4 -4
- package/dist/server/{index.server-4ztq565m.js → index.server-85p4ydph.js} +1 -1
- package/dist/server/{index.server-4nk7gy0q.js → index.server-894t97kv.js} +1 -1
- package/dist/server/{index.server-1vscnped.js → index.server-8dt36sdm.js} +2 -1
- package/dist/server/{index.server-bfsbp9dz.js → index.server-8xvc73zh.js} +4 -4
- package/dist/server/{index.server-cvnw3hw9.js → index.server-9kz37z89.js} +1 -1
- package/dist/server/{index.server-kc1k02tk.js → index.server-9ykk1kbg.js} +1 -1
- package/dist/server/{index.server-g789yep6.js → index.server-aqethy0w.js} +2 -2
- package/dist/server/index.server-be9bpqeh.js +93 -0
- package/dist/server/{index.server-wc9aggfz.js → index.server-bmxbsk4y.js} +7 -7
- package/dist/server/{index.server-f3z7tpxr.js → index.server-c42b462p.js} +2 -4
- package/dist/server/{index.server-7vyzen5x.js → index.server-c5qv3p61.js} +171 -63
- package/dist/server/index.server-cch0eed5.js +144 -0
- package/dist/server/{index.server-q89dz8h1.js → index.server-d3pqthtp.js} +4 -3
- package/dist/server/{index.server-jk4rx4aa.js → index.server-dmmvwy6p.js} +1 -1
- package/dist/server/{index.server-hcfnae5y.js → index.server-dwwqssey.js} +4 -4
- package/dist/server/{index.server-e8x1hgw6.js → index.server-dz1r9xw5.js} +4 -4
- package/dist/server/{index.server-wm7mk5kw.js → index.server-ez5hp0ya.js} +1 -1
- package/dist/server/{index.server-wc8dbm5e.js → index.server-g95bk8rc.js} +4 -2
- package/dist/server/index.server-gkazv439.js +576 -0
- package/dist/server/index.server-gmh5ar16.js +2 -0
- package/dist/server/{index.server-dp9j2kkr.js → index.server-h0cvwvhy.js} +1 -1
- package/dist/server/{index.server-cbtg8rq5.js → index.server-h89zk5ev.js} +8 -8
- package/dist/server/{index.server-pacrqvyz.js → index.server-h90pjrez.js} +1 -1
- package/dist/server/{index.server-p8d04em5.js → index.server-hcsd5gdb.js} +6 -2
- package/dist/server/{index.server-n39drzes.js → index.server-hpeavvnq.js} +1 -1
- package/dist/server/{index.server-1p3patnj.js → index.server-hx91ng7z.js} +1 -1
- package/dist/server/{index.server-mehav5vs.js → index.server-jdcq5zza.js} +7 -7
- package/dist/server/{index.server-jync915v.js → index.server-jfrssta6.js} +25 -25
- package/dist/server/{index.server-jtj3r53y.js → index.server-jgb8yh5k.js} +1 -1
- package/dist/server/{index.server-ejyf7e48.js → index.server-jj76374p.js} +1 -1
- package/dist/server/{index.server-w1g5q9j9.js → index.server-jtgw9d23.js} +4 -2
- package/dist/server/{index.server-hd8gpehd.js → index.server-jxseyx33.js} +1 -1
- package/dist/server/{index.server-kg2sepsr.js → index.server-krqvnt6p.js} +14 -15
- package/dist/server/{index.server-0e1m3agz.js → index.server-ks49bprh.js} +1 -1
- package/dist/server/{index.server-f0hma3jp.js → index.server-kt0ncrqs.js} +1 -1
- package/dist/server/index.server-m0ezemav.js +170 -0
- package/dist/server/index.server-m191rm44.js +79 -0
- package/dist/server/{index.server-z721a5gp.js → index.server-n82rcv0m.js} +4 -4
- package/dist/server/{index.server-rhhmdxtz.js → index.server-np3c7kx0.js} +4 -4
- package/dist/server/{index.server-hpcs7tmh.js → index.server-p56xxef1.js} +1 -1
- package/dist/server/{index.server-w83kmcrx.js → index.server-pag862vz.js} +10 -10
- package/dist/server/index.server-qbkxz7r2.js +750 -0
- package/dist/server/{index.server-sh2rxejg.js → index.server-qke3ekjt.js} +1 -1
- package/dist/server/{index.server-73x2d3j3.js → index.server-rbpvcrr3.js} +1 -1
- package/dist/server/{index.server-8cxs4kya.js → index.server-rga8sc7j.js} +41 -44
- package/dist/server/{index.server-e3fnv1g6.js → index.server-sedjxt36.js} +5 -5
- package/dist/server/{index.server-pen9pxt6.js → index.server-sf3nk3j2.js} +2 -2
- package/dist/server/{index.server-f23vtaw4.js → index.server-tcay903b.js} +8 -7
- package/dist/server/{index.server-7fp0epev.js → index.server-veastatv.js} +4 -4
- package/dist/server/{index.server-jeqg2d22.js → index.server-xeqtpv61.js} +1 -1
- package/dist/server/{index.server-9s4na701.js → index.server-xjnge1yw.js} +4 -4
- package/dist/server/index.server-xtjjmsyq.js +315 -0
- package/dist/server/{index.server-hhxjaeen.js → index.server-xz99aed4.js} +4 -4
- package/dist/server/{index.server-vne4rzfa.js → index.server-y4n8vc08.js} +1 -1
- package/dist/server/{index.server-5d01cn4f.js → index.server-y83kqayt.js} +4 -4
- package/dist/server/{index.server-1nh09ck7.js → index.server-yhzydqxe.js} +5 -5
- package/dist/server/index.server-z38bxms8.js +734 -0
- package/dist/server/{index.server-atjc1qcq.js → index.server-z7hxtqs1.js} +1 -1
- package/dist/server/{index.server-w6k62afr.js → index.server-ze1ymmbw.js} +2 -2
- package/dist/server/{index.server-914v805w.js → index.server-zgd1g8mk.js} +1 -1
- package/dist/server/{index.server-aeexcxdp.js → index.server-zh3r8vfd.js} +1 -1
- package/dist/server/{index.server-10jb2jzm.js → index.server-zsjf8enc.js} +4 -4
- package/package.json +102 -5
- package/src/components/_internal/command-list-context.ts +3 -3
- package/src/components/_internal/create-command-list-state.svelte.ts +39 -13
- package/src/components/approval-card/approval-card-actions.svelte +168 -0
- package/src/components/approval-card/approval-card-state.ts +152 -1
- package/src/components/approval-card/approval-card.css +269 -92
- package/src/components/approval-card/approval-card.examples.json +3 -3
- package/src/components/approval-card/approval-card.schema.json +9 -30
- package/src/components/approval-card/approval-card.schema.ts +13 -31
- package/src/components/approval-card/approval-card.svelte +176 -470
- package/src/components/approval-card/approval-card.types.ts +15 -28
- package/src/components/approval-card/index.ts +1 -0
- package/src/components/card/card.css +5 -0
- package/src/components/card/card.schema.json +1 -1
- package/src/components/card/card.schema.ts +1 -1
- package/src/components/card/card.svelte +1 -0
- package/src/components/card/card.types.ts +2 -2
- package/src/components/chat/builders.ts +445 -14
- package/src/components/chat/chat.schema.json +36 -1
- package/src/components/chat/chat.schema.ts +44 -1
- package/src/components/chat/chat.svelte +12 -0
- package/src/components/chat/chat.types.ts +35 -3
- package/src/components/chat/container/chat.svelte +73 -3
- package/src/components/chat/conversation-model.ts +1 -0
- package/src/components/chat/index.ts +16 -3
- package/src/components/chat/input/chat-attachment-serialization.ts +63 -0
- package/src/components/chat/input/chat-input.svelte +22 -5
- package/src/components/chat/input/index.ts +5 -0
- package/src/components/chat/utilities/conversation.ts +33 -15
- package/src/components/chat-composer-popover/chat-composer-popover-filter.ts +68 -0
- package/src/components/chat-composer-popover/chat-composer-popover.css +7 -0
- package/src/components/chat-composer-popover/chat-composer-popover.examples.json +13 -0
- package/src/components/chat-composer-popover/chat-composer-popover.schema.json +90 -0
- package/src/components/chat-composer-popover/chat-composer-popover.schema.ts +95 -0
- package/src/components/chat-composer-popover/chat-composer-popover.svelte +234 -0
- package/src/components/chat-composer-popover/chat-composer-popover.types.ts +88 -0
- package/src/components/chat-composer-popover/chat-composer-popover.variables.json +1 -0
- package/src/components/chat-composer-popover/chat-composer-popover.variables.ts +3 -0
- package/src/components/chat-composer-popover/index.ts +19 -0
- package/src/components/code-block/code-block.schema.json +4 -0
- package/src/components/code-block/code-block.schema.ts +5 -0
- package/src/components/code-block/code-block.svelte +3 -3
- package/src/components/code-block/code-block.types.ts +6 -0
- package/src/components/command-item/command-item.svelte +7 -6
- package/src/components/command-menu/command-menu.schema.json +4 -0
- package/src/components/command-menu/command-menu.schema.ts +4 -0
- package/src/components/command-menu/command-menu.svelte +16 -5
- package/src/components/command-menu/command-menu.types.ts +2 -0
- package/src/components/connection-indicator/connection-indicator.css +136 -0
- package/src/components/connection-indicator/connection-indicator.examples.json +31 -0
- package/src/components/connection-indicator/connection-indicator.schema.json +29 -0
- package/src/components/connection-indicator/connection-indicator.schema.ts +36 -0
- package/src/components/connection-indicator/connection-indicator.svelte +63 -0
- package/src/components/connection-indicator/connection-indicator.types.ts +58 -0
- package/src/components/connection-indicator/connection-indicator.variables.json +1 -0
- package/src/components/connection-indicator/connection-indicator.variables.ts +3 -0
- package/src/components/connection-indicator/index.ts +10 -0
- package/src/components/container/container.schema.json +3 -3
- package/src/components/container/container.schema.ts +3 -3
- package/src/components/invocation-rule-builder/index.ts +4 -0
- package/src/components/invocation-rule-builder/invocation-rule-builder.css +28 -0
- package/src/components/invocation-rule-builder/invocation-rule-builder.examples.json +6 -0
- package/src/components/invocation-rule-builder/invocation-rule-builder.schema.json +76 -3
- package/src/components/invocation-rule-builder/invocation-rule-builder.schema.ts +83 -3
- package/src/components/invocation-rule-builder/invocation-rule-builder.svelte +326 -113
- package/src/components/invocation-rule-builder/invocation-rule-builder.types.ts +157 -43
- package/src/components/json-viewer/_json-viewer-node.svelte +15 -1
- package/src/components/json-viewer/json-viewer.css +10 -6
- package/src/components/payload-inspector/index.ts +0 -2
- package/src/components/payload-inspector/payload-inspector.css +15 -75
- package/src/components/payload-inspector/payload-inspector.examples.json +5 -5
- package/src/components/payload-inspector/payload-inspector.schema.json +3 -31
- package/src/components/payload-inspector/payload-inspector.schema.ts +3 -36
- package/src/components/payload-inspector/payload-inspector.svelte +46 -239
- package/src/components/payload-inspector/payload-inspector.types.ts +10 -58
- package/src/components/run-step-timeline/index.ts +8 -0
- package/src/components/run-step-timeline/run-step-branch-disclosure.svelte +16 -0
- package/src/components/run-step-timeline/run-step-timeline.css +124 -0
- package/src/components/run-step-timeline/run-step-timeline.examples.json +18 -0
- package/src/components/run-step-timeline/run-step-timeline.schema.json +872 -349
- package/src/components/run-step-timeline/run-step-timeline.schema.ts +931 -349
- package/src/components/run-step-timeline/run-step-timeline.svelte +387 -268
- package/src/components/run-step-timeline/run-step-timeline.types.ts +192 -5
- package/src/components/run-step-timeline/run-step-timeline.utilities.ts +242 -0
- package/src/components/schedule-builder/index.ts +14 -0
- package/src/components/schedule-builder/schedule-builder.css +121 -0
- package/src/components/schedule-builder/schedule-builder.examples.json +31 -0
- package/src/components/schedule-builder/schedule-builder.schema.json +78 -0
- package/src/components/schedule-builder/schedule-builder.schema.ts +86 -0
- package/src/components/schedule-builder/schedule-builder.svelte +629 -0
- package/src/components/schedule-builder/schedule-builder.types.ts +137 -0
- package/src/components/schedule-builder/schedule-builder.utilities.ts +344 -0
- package/src/components/schedule-builder/schedule-builder.variables.json +1 -0
- package/src/components/schedule-builder/schedule-builder.variables.ts +3 -0
- package/src/components/tab/tab.schema.json +6 -2
- package/src/components/tab/tab.schema.ts +8 -2
- package/src/components/tab/tab.svelte +9 -5
- package/src/components/tab/tab.types.ts +8 -2
- package/src/components/tag-input/tag-input.schema.json +4 -0
- package/src/components/tag-input/tag-input.schema.ts +4 -0
- package/src/components/tag-input/tag-input.svelte +20 -3
- package/src/components/tag-input/tag-input.types.ts +4 -0
- package/src/index.ts +41 -5
- package/src/styles/components.css +3 -0
- package/dist/server/index-49we2xfs.js +0 -344
- package/dist/server/index-8fhvxk30.js +0 -265
- package/dist/server/index-x2ysg8ds.js +0 -388
- package/dist/server/index.server-20j0jh30.js +0 -9
- package/dist/server/index.server-dc35kh7d.js +0 -1835
- package/dist/server/index.server-kd4b0342.js +0 -607
- package/dist/server/index.server-n5cdmsz4.js +0 -30
- package/dist/server/index.server-pxg74pyp.js +0 -393
- package/dist/server/index.server-rjap4k7y.js +0 -1389
- package/dist/server/index.server-vt6sn9y4.js +0 -447
- package/dist/server/index.server-w63n618v.js +0 -9
- 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,
|
|
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
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
//
|
|
161
|
-
//
|
|
162
|
-
//
|
|
163
|
-
//
|
|
164
|
-
//
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
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
|
|
96
|
+
return '';
|
|
187
97
|
}
|
|
188
98
|
});
|
|
189
|
-
const
|
|
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
|
-
<
|
|
212
|
-
<!-- Header bar: label, size, copy
|
|
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
|
|
115
|
+
{#if canCopy}
|
|
225
116
|
<CopyButton
|
|
226
|
-
value={
|
|
227
|
-
label=
|
|
228
|
-
copiedLabel="
|
|
229
|
-
title=
|
|
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
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
<
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
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
|
-
</
|
|
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
|
|
37
|
-
*
|
|
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).
|
|
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
|
-
*
|
|
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
|
-
*
|
|
83
|
-
*
|
|
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
|
|
98
|
-
*
|
|
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).
|
|
66
|
+
* placeholder. Defaults to 1,048,576 (1 MB).
|
|
104
67
|
*/
|
|
105
68
|
maxBytes?: number;
|
|
106
69
|
/**
|
|
107
|
-
*
|
|
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",
|