@elabs-ai/components-ai 4.2.0 → 5.0.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/README.md +1 -1
- package/dist/{_audio-player-media-chrome-T3XVXWRZ.js → _audio-player-media-chrome.js} +1 -1
- package/dist/_code-block-theme.js +12 -0
- package/dist/_code-block-theme.js.map +1 -0
- package/dist/{_flow-boundary-SHNWLQG5.js → _flow-boundary.js} +1 -1
- package/dist/_flow-boundary.js.map +1 -0
- package/dist/_flow-lazy.js +8 -0
- package/dist/_flow-lazy.js.map +1 -0
- package/dist/_lazy-boundary-conformance.js +2 -0
- package/dist/_lazy-boundary-conformance.js.map +1 -0
- package/dist/_lazy-cjk.js +13 -0
- package/dist/_lazy-cjk.js.map +1 -0
- package/dist/_lazy-engine-boundary.js +9 -0
- package/dist/_lazy-engine-boundary.js.map +1 -0
- package/dist/_lazy-math.js +13 -0
- package/dist/_lazy-math.js.map +1 -0
- package/dist/_lazy-mermaid.js +12 -0
- package/dist/_lazy-mermaid.js.map +1 -0
- package/dist/_mermaid-error-panel.js +9 -0
- package/dist/_mermaid-error-panel.js.map +1 -0
- package/dist/{_persona-rive-JEG44YHX.js → _persona-rive.js} +19 -24
- package/dist/_persona-rive.js.map +1 -0
- package/dist/_streamdown-i18n.js +21 -0
- package/dist/_streamdown-i18n.js.map +1 -0
- package/dist/_streamdown-safety.js +10 -0
- package/dist/_streamdown-safety.js.map +1 -0
- package/dist/_theme-scope-store.js +13 -0
- package/dist/_theme-scope-store.js.map +1 -0
- package/dist/a2ui/a2ui-surface.js +17 -0
- package/dist/a2ui/a2ui-surface.js.map +1 -0
- package/dist/a2ui/core/catalog.generated.js +10 -0
- package/dist/a2ui/core/catalog.generated.js.map +1 -0
- package/dist/a2ui/core/complete-json.js +10 -0
- package/dist/a2ui/core/complete-json.js.map +1 -0
- package/dist/a2ui/core/index.js +37 -0
- package/dist/a2ui/core/index.js.map +1 -0
- package/dist/a2ui/core/schema.js +11 -0
- package/dist/a2ui/core/schema.js.map +1 -0
- package/dist/a2ui/core/spec.js +10 -0
- package/dist/a2ui/core/spec.js.map +1 -0
- package/dist/a2ui/core/validate.js +16 -0
- package/dist/a2ui/core/validate.js.map +1 -0
- package/dist/a2ui/index.js +54 -0
- package/dist/a2ui/index.js.map +1 -0
- package/dist/a2ui/ui-catalog.js +18 -0
- package/dist/a2ui/ui-catalog.js.map +1 -0
- package/dist/agent-event.js +10 -0
- package/dist/agent-event.js.map +1 -0
- package/dist/agent-timeline.js +11 -0
- package/dist/agent-timeline.js.map +1 -0
- package/dist/agent.js +25 -0
- package/dist/agent.js.map +1 -0
- package/dist/artifact.js +23 -0
- package/dist/artifact.js.map +1 -0
- package/dist/asset-preview.js +22 -0
- package/dist/asset-preview.js.map +1 -0
- package/dist/attachments.js +33 -0
- package/dist/attachments.js.map +1 -0
- package/dist/audio-player.js +30 -0
- package/dist/audio-player.js.map +1 -0
- package/dist/audio-visualizer.js +9 -0
- package/dist/audio-visualizer.js.map +1 -0
- package/dist/canvas.js +10 -0
- package/dist/canvas.js.map +1 -0
- package/dist/chain-of-thought.js +22 -0
- package/dist/chain-of-thought.js.map +1 -0
- package/dist/chat-greeting.js +8 -0
- package/dist/chat-greeting.js.map +1 -0
- package/dist/chat-shell.js +9 -0
- package/dist/chat-shell.js.map +1 -0
- package/dist/checkpoint.js +13 -0
- package/dist/checkpoint.js.map +1 -0
- package/dist/chunk-2XOIG5TG.js +72 -0
- package/dist/chunk-2XOIG5TG.js.map +1 -0
- package/dist/chunk-34CQ2VHM.js +172 -0
- package/dist/chunk-34CQ2VHM.js.map +1 -0
- package/dist/chunk-3TDHPXZZ.js +60 -0
- package/dist/chunk-3TDHPXZZ.js.map +1 -0
- package/dist/chunk-3XNPMDZY.js +478 -0
- package/dist/chunk-3XNPMDZY.js.map +1 -0
- package/dist/chunk-3YPT3V7L.js +56 -0
- package/dist/chunk-3YPT3V7L.js.map +1 -0
- package/dist/chunk-475UEU2Q.js +87 -0
- package/dist/chunk-475UEU2Q.js.map +1 -0
- package/dist/chunk-4CBTII2I.js +95 -0
- package/dist/chunk-4CBTII2I.js.map +1 -0
- package/dist/chunk-4XRNIZMG.js +22 -0
- package/dist/chunk-4XRNIZMG.js.map +1 -0
- package/dist/chunk-5NNWUKK5.js +2 -0
- package/dist/chunk-5NNWUKK5.js.map +1 -0
- package/dist/chunk-5UOMU27Z.js +164 -0
- package/dist/chunk-5UOMU27Z.js.map +1 -0
- package/dist/chunk-5VGYZ62I.js +264 -0
- package/dist/chunk-5VGYZ62I.js.map +1 -0
- package/dist/chunk-6IQPH2OS.js +21 -0
- package/dist/chunk-6IQPH2OS.js.map +1 -0
- package/dist/chunk-6PB2MXCI.js +482 -0
- package/dist/chunk-6PB2MXCI.js.map +1 -0
- package/dist/chunk-7FD5CZEU.js +215 -0
- package/dist/chunk-7FD5CZEU.js.map +1 -0
- package/dist/chunk-7RL6KZDF.js +266 -0
- package/dist/chunk-7RL6KZDF.js.map +1 -0
- package/dist/chunk-ADOYAGGK.js +482 -0
- package/dist/chunk-ADOYAGGK.js.map +1 -0
- package/dist/chunk-AXMNJMMH.js +984 -0
- package/dist/chunk-AXMNJMMH.js.map +1 -0
- package/dist/chunk-BA3AEMOU.js +21 -0
- package/dist/chunk-BA3AEMOU.js.map +1 -0
- package/dist/chunk-BBHFOYML.js +336 -0
- package/dist/chunk-BBHFOYML.js.map +1 -0
- package/dist/chunk-BHUVISIY.js +221 -0
- package/dist/chunk-BHUVISIY.js.map +1 -0
- package/dist/chunk-BM2LWERA.js +100 -0
- package/dist/chunk-BM2LWERA.js.map +1 -0
- package/dist/chunk-CMOYXNPJ.js +211 -0
- package/dist/chunk-CMOYXNPJ.js.map +1 -0
- package/dist/chunk-CZP3RHC4.js +74 -0
- package/dist/chunk-CZP3RHC4.js.map +1 -0
- package/dist/chunk-DDG5JHQT.js +112 -0
- package/dist/chunk-DDG5JHQT.js.map +1 -0
- package/dist/chunk-DJODXO7I.js +38 -0
- package/dist/chunk-DJODXO7I.js.map +1 -0
- package/dist/chunk-DWJDJLPU.js +192 -0
- package/dist/chunk-DWJDJLPU.js.map +1 -0
- package/dist/chunk-DZW6LM22.js +45 -0
- package/dist/chunk-DZW6LM22.js.map +1 -0
- package/dist/chunk-ELGCZLZF.js +305 -0
- package/dist/chunk-ELGCZLZF.js.map +1 -0
- package/dist/chunk-EV3U6ZZB.js +209 -0
- package/dist/chunk-EV3U6ZZB.js.map +1 -0
- package/dist/chunk-EY7LVUKQ.js +87 -0
- package/dist/chunk-EY7LVUKQ.js.map +1 -0
- package/dist/chunk-F4C74F7M.js +230 -0
- package/dist/chunk-F4C74F7M.js.map +1 -0
- package/dist/chunk-FERYDFZA.js +108 -0
- package/dist/chunk-FERYDFZA.js.map +1 -0
- package/dist/chunk-FUIYG2DS.js +166 -0
- package/dist/chunk-FUIYG2DS.js.map +1 -0
- package/dist/chunk-GKYZT3LA.js +136 -0
- package/dist/chunk-GKYZT3LA.js.map +1 -0
- package/dist/chunk-H42LRUQ4.js +102 -0
- package/dist/chunk-H42LRUQ4.js.map +1 -0
- package/dist/chunk-HVXM2G5F.js +222 -0
- package/dist/chunk-HVXM2G5F.js.map +1 -0
- package/dist/chunk-I4RDAGVY.js +53 -0
- package/dist/chunk-I4RDAGVY.js.map +1 -0
- package/dist/chunk-IQJG4IDX.js +208 -0
- package/dist/chunk-IQJG4IDX.js.map +1 -0
- package/dist/chunk-IX2PXG4Y.js +144 -0
- package/dist/chunk-IX2PXG4Y.js.map +1 -0
- package/dist/chunk-IXICSOOP.js +287 -0
- package/dist/chunk-IXICSOOP.js.map +1 -0
- package/dist/chunk-JY5HSN4D.js +84 -0
- package/dist/chunk-JY5HSN4D.js.map +1 -0
- package/dist/chunk-LMNSBOBG.js +19 -0
- package/dist/chunk-LMNSBOBG.js.map +1 -0
- package/dist/chunk-MBI7D6IL.js +42 -0
- package/dist/chunk-MBI7D6IL.js.map +1 -0
- package/dist/chunk-MLFMYCPH.js +192 -0
- package/dist/chunk-MLFMYCPH.js.map +1 -0
- package/dist/chunk-MOK66734.js +33 -0
- package/dist/chunk-MOK66734.js.map +1 -0
- package/dist/chunk-MXTAWPYM.js +196 -0
- package/dist/chunk-MXTAWPYM.js.map +1 -0
- package/dist/chunk-NCL2UZKI.js +96 -0
- package/dist/chunk-NCL2UZKI.js.map +1 -0
- package/dist/chunk-NET4YLRY.js +107 -0
- package/dist/chunk-NET4YLRY.js.map +1 -0
- package/dist/chunk-NIG67CFM.js +329 -0
- package/dist/chunk-NIG67CFM.js.map +1 -0
- package/dist/chunk-NMVNNO3L.js +10 -0
- package/dist/chunk-NMVNNO3L.js.map +1 -0
- package/dist/chunk-NP7VID4K.js +2 -0
- package/dist/chunk-NP7VID4K.js.map +1 -0
- package/dist/chunk-NPUCMAG2.js +382 -0
- package/dist/chunk-NPUCMAG2.js.map +1 -0
- package/dist/chunk-NSCLRHES.js +102 -0
- package/dist/chunk-NSCLRHES.js.map +1 -0
- package/dist/chunk-OEUXHVFW.js +86 -0
- package/dist/chunk-OEUXHVFW.js.map +1 -0
- package/dist/chunk-ONBHFIMZ.js +137 -0
- package/dist/chunk-ONBHFIMZ.js.map +1 -0
- package/dist/chunk-OPH2HHL2.js +228 -0
- package/dist/chunk-OPH2HHL2.js.map +1 -0
- package/dist/chunk-OQERHIQP.js +287 -0
- package/dist/chunk-OQERHIQP.js.map +1 -0
- package/dist/chunk-P6YJAZFG.js +103 -0
- package/dist/chunk-P6YJAZFG.js.map +1 -0
- package/dist/chunk-PG7ERDOD.js +65 -0
- package/dist/chunk-PG7ERDOD.js.map +1 -0
- package/dist/chunk-PIB5JBMA.js +90 -0
- package/dist/chunk-PIB5JBMA.js.map +1 -0
- package/dist/chunk-PQ5BPIWQ.js +22 -0
- package/dist/chunk-PQ5BPIWQ.js.map +1 -0
- package/dist/chunk-PQBF6ZIQ.js +55 -0
- package/dist/chunk-PQBF6ZIQ.js.map +1 -0
- package/dist/chunk-PTWCTSZL.js +173 -0
- package/dist/chunk-PTWCTSZL.js.map +1 -0
- package/dist/chunk-QJUNPVOS.js +101 -0
- package/dist/chunk-QJUNPVOS.js.map +1 -0
- package/dist/chunk-QUDZOTRV.js +43 -0
- package/dist/chunk-QUDZOTRV.js.map +1 -0
- package/dist/chunk-RB7G65JC.js +213 -0
- package/dist/chunk-RB7G65JC.js.map +1 -0
- package/dist/chunk-RPHAOR7P.js +45 -0
- package/dist/chunk-RPHAOR7P.js.map +1 -0
- package/dist/chunk-RTCSH2AN.js +331 -0
- package/dist/chunk-RTCSH2AN.js.map +1 -0
- package/dist/chunk-S3ISPW3A.js +28 -0
- package/dist/chunk-S3ISPW3A.js.map +1 -0
- package/dist/chunk-SEVN656N.js +36 -0
- package/dist/chunk-SEVN656N.js.map +1 -0
- package/dist/chunk-SKVG672B.js +64 -0
- package/dist/chunk-SKVG672B.js.map +1 -0
- package/dist/chunk-SPQIU7GA.js +236 -0
- package/dist/chunk-SPQIU7GA.js.map +1 -0
- package/dist/chunk-SSGJ6MEM.js +1076 -0
- package/dist/chunk-SSGJ6MEM.js.map +1 -0
- package/dist/chunk-SSKZ2AED.js +118 -0
- package/dist/chunk-SSKZ2AED.js.map +1 -0
- package/dist/chunk-T56JFGXI.js +561 -0
- package/dist/chunk-T56JFGXI.js.map +1 -0
- package/dist/chunk-TCB6O74A.js +137 -0
- package/dist/chunk-TCB6O74A.js.map +1 -0
- package/dist/chunk-TTEYPO6X.js +57 -0
- package/dist/chunk-TTEYPO6X.js.map +1 -0
- package/dist/chunk-TWPHAJNM.js +462 -0
- package/dist/chunk-TWPHAJNM.js.map +1 -0
- package/dist/chunk-TXJJLP4O.js +336 -0
- package/dist/chunk-TXJJLP4O.js.map +1 -0
- package/dist/chunk-TZ6TB7VM.js +245 -0
- package/dist/chunk-TZ6TB7VM.js.map +1 -0
- package/dist/chunk-UBLKJJ7K.js +278 -0
- package/dist/chunk-UBLKJJ7K.js.map +1 -0
- package/dist/chunk-UCJ6IUFS.js +52 -0
- package/dist/chunk-UCJ6IUFS.js.map +1 -0
- package/dist/chunk-UCKFJ3QF.js +197 -0
- package/dist/chunk-UCKFJ3QF.js.map +1 -0
- package/dist/chunk-UPXSLILN.js +20 -0
- package/dist/chunk-UPXSLILN.js.map +1 -0
- package/dist/chunk-V4DORGWJ.js +92 -0
- package/dist/chunk-V4DORGWJ.js.map +1 -0
- package/dist/chunk-V6E5DYZD.js +80 -0
- package/dist/chunk-V6E5DYZD.js.map +1 -0
- package/dist/chunk-VLLYKF3P.js +96 -0
- package/dist/chunk-VLLYKF3P.js.map +1 -0
- package/dist/chunk-VLNBTOH6.js +43 -0
- package/dist/chunk-VLNBTOH6.js.map +1 -0
- package/dist/chunk-WMDSMSPL.js +303 -0
- package/dist/chunk-WMDSMSPL.js.map +1 -0
- package/dist/chunk-WU5BLGTF.js +149 -0
- package/dist/chunk-WU5BLGTF.js.map +1 -0
- package/dist/chunk-WYTZVSGK.js +245 -0
- package/dist/chunk-WYTZVSGK.js.map +1 -0
- package/dist/chunk-X47QMM6K.js +187 -0
- package/dist/chunk-X47QMM6K.js.map +1 -0
- package/dist/chunk-XNBKO32Y.js +174 -0
- package/dist/chunk-XNBKO32Y.js.map +1 -0
- package/dist/chunk-YHUSW7D2.js +40 -0
- package/dist/chunk-YHUSW7D2.js.map +1 -0
- package/dist/chunk-YSKD7UXX.js +126 -0
- package/dist/chunk-YSKD7UXX.js.map +1 -0
- package/dist/chunk-YYRDGWOU.js +72 -0
- package/dist/chunk-YYRDGWOU.js.map +1 -0
- package/dist/chunk-ZIGZMWM7.js +19 -0
- package/dist/chunk-ZIGZMWM7.js.map +1 -0
- package/dist/chunk-ZKRTUKNP.js +40 -0
- package/dist/chunk-ZKRTUKNP.js.map +1 -0
- package/dist/code-block.js +38 -0
- package/dist/code-block.js.map +1 -0
- package/dist/commit.js +51 -0
- package/dist/commit.js.map +1 -0
- package/dist/composer.js +15 -0
- package/dist/composer.js.map +1 -0
- package/dist/confirmation.js +53 -0
- package/dist/confirmation.js.map +1 -0
- package/dist/connection.js +8 -0
- package/dist/connection.js.map +1 -0
- package/dist/context-panel.js +25 -0
- package/dist/context-panel.js.map +1 -0
- package/dist/controls.js +10 -0
- package/dist/controls.js.map +1 -0
- package/dist/conversation.js +19 -0
- package/dist/conversation.js.map +1 -0
- package/dist/diff-view.js +15 -0
- package/dist/diff-view.js.map +1 -0
- package/dist/edge.js +10 -0
- package/dist/edge.js.map +1 -0
- package/dist/environment-variables.js +29 -0
- package/dist/environment-variables.js.map +1 -0
- package/dist/file-tree.js +23 -0
- package/dist/file-tree.js.map +1 -0
- package/dist/gallery.js +9 -0
- package/dist/gallery.js.map +1 -0
- package/dist/grouped-parts.js +21 -0
- package/dist/grouped-parts.js.map +1 -0
- package/dist/image.js +9 -0
- package/dist/image.js.map +1 -0
- package/dist/index.d.ts +366 -98
- package/dist/index.js +672 -13577
- package/dist/index.js.map +1 -1
- package/dist/inline-citation.js +39 -0
- package/dist/inline-citation.js.map +1 -0
- package/dist/jsx-preview.js +17 -0
- package/dist/jsx-preview.js.map +1 -0
- package/dist/markdown-view.js +17 -0
- package/dist/markdown-view.js.map +1 -0
- package/dist/message-compare.js +12 -0
- package/dist/message-compare.js.map +1 -0
- package/dist/message-edit.js +19 -0
- package/dist/message-edit.js.map +1 -0
- package/dist/message-feedback.js +11 -0
- package/dist/message-feedback.js.map +1 -0
- package/dist/message-form-spec.js +38 -0
- package/dist/message-form-spec.js.map +1 -0
- package/dist/message-form.js +26 -0
- package/dist/message-form.js.map +1 -0
- package/dist/message-table-spec.js +26 -0
- package/dist/message-table-spec.js.map +1 -0
- package/dist/message-table.js +12 -0
- package/dist/message-table.js.map +1 -0
- package/dist/message.js +51 -0
- package/dist/message.js.map +1 -0
- package/dist/mic-selector.js +27 -0
- package/dist/mic-selector.js.map +1 -0
- package/dist/model-provider-logo.js +13 -0
- package/dist/model-provider-logo.js.map +1 -0
- package/dist/motion-config.js +9 -0
- package/dist/motion-config.js.map +1 -0
- package/dist/node.js +22 -0
- package/dist/node.js.map +1 -0
- package/dist/open-in-chat.js +31 -0
- package/dist/open-in-chat.js.map +1 -0
- package/dist/package-info.js +25 -0
- package/dist/package-info.js.map +1 -0
- package/dist/panel.js +10 -0
- package/dist/panel.js.map +1 -0
- package/dist/part-groups.js +18 -0
- package/dist/part-groups.js.map +1 -0
- package/dist/permission-mode-select.js +9 -0
- package/dist/permission-mode-select.js.map +1 -0
- package/dist/persona-sources.js +8 -0
- package/dist/persona-sources.js.map +1 -0
- package/dist/persona.js +14 -0
- package/dist/persona.js.map +1 -0
- package/dist/plan.js +32 -0
- package/dist/plan.js.map +1 -0
- package/dist/prompt-input-effort.js +9 -0
- package/dist/prompt-input-effort.js.map +1 -0
- package/dist/prompt-input-mode.js +10 -0
- package/dist/prompt-input-mode.js.map +1 -0
- package/dist/prompt-input-slash.js +12 -0
- package/dist/prompt-input-slash.js.map +1 -0
- package/dist/prompt-input.js +89 -0
- package/dist/prompt-input.js.map +1 -0
- package/dist/queue.js +37 -0
- package/dist/queue.js.map +1 -0
- package/dist/reasoning.js +23 -0
- package/dist/reasoning.js.map +1 -0
- package/dist/sandbox.js +28 -0
- package/dist/sandbox.js.map +1 -0
- package/dist/schema-display.js +33 -0
- package/dist/schema-display.js.map +1 -0
- package/dist/selection-toolbar.js +11 -0
- package/dist/selection-toolbar.js.map +1 -0
- package/dist/session-header.js +9 -0
- package/dist/session-header.js.map +1 -0
- package/dist/session-status-bar.js +9 -0
- package/dist/session-status-bar.js.map +1 -0
- package/dist/shimmer.js +9 -0
- package/dist/shimmer.js.map +1 -0
- package/dist/snippet.js +17 -0
- package/dist/snippet.js.map +1 -0
- package/dist/sources.js +17 -0
- package/dist/sources.js.map +1 -0
- package/dist/speech-input.js +9 -0
- package/dist/speech-input.js.map +1 -0
- package/dist/stack-trace.js +27 -0
- package/dist/stack-trace.js.map +1 -0
- package/dist/suggestion.js +16 -0
- package/dist/suggestion.js.map +1 -0
- package/dist/task.js +18 -0
- package/dist/task.js.map +1 -0
- package/dist/test-results.js +43 -0
- package/dist/test-results.js.map +1 -0
- package/dist/token-usage.js +27 -0
- package/dist/token-usage.js.map +1 -0
- package/dist/tool-result-card.js +9 -0
- package/dist/tool-result-card.js.map +1 -0
- package/dist/tool.js +27 -0
- package/dist/tool.js.map +1 -0
- package/dist/toolbar.js +10 -0
- package/dist/toolbar.js.map +1 -0
- package/dist/transcription.js +11 -0
- package/dist/transcription.js.map +1 -0
- package/dist/turn-status.js +9 -0
- package/dist/turn-status.js.map +1 -0
- package/dist/use-audio-level.js +9 -0
- package/dist/use-audio-level.js.map +1 -0
- package/dist/voice-selector.js +47 -0
- package/dist/voice-selector.js.map +1 -0
- package/dist/web-preview.js +19 -0
- package/dist/web-preview.js.map +1 -0
- package/package.json +11 -9
- package/schemas/a2ui-surface.v1.schema.json +5425 -0
- package/src/_chat-shell-rail.tsx +3 -1
- package/src/_flow-boundary.tsx +2 -2
- package/src/_persona-rive.tsx +27 -41
- package/src/a2ui/a2ui-surface.stories.tsx +662 -0
- package/src/a2ui/a2ui-surface.test.tsx +201 -0
- package/src/a2ui/a2ui-surface.tsx +354 -0
- package/src/a2ui/catalog.source.json +772 -0
- package/src/a2ui/core/a2ui-core.test.ts +178 -0
- package/src/a2ui/core/catalog.generated.ts +1006 -0
- package/src/a2ui/core/complete-json.ts +81 -0
- package/src/a2ui/core/index.ts +10 -0
- package/src/a2ui/core/schema.ts +111 -0
- package/src/a2ui/core/spec.ts +148 -0
- package/src/a2ui/core/validate.ts +266 -0
- package/src/a2ui/index.ts +7 -0
- package/src/a2ui/ui-catalog.tsx +225 -0
- package/src/a2ui/wave1-chart-spec.test.ts +87 -0
- package/src/a2ui/wave2-chart-spec.test.ts +108 -0
- package/src/agentic-workspace.stories.tsx +6 -45
- package/src/chat-shell.test.tsx +40 -10
- package/src/chat-shell.tsx +90 -44
- package/src/chat.stories.tsx +47 -42
- package/src/composer.stories.tsx +4 -5
- package/src/composer.test.tsx +45 -0
- package/src/composer.tsx +104 -21
- package/src/context-panel.stories.tsx +1 -1
- package/src/context-panel.tsx +1 -1
- package/src/conversation.stories.tsx +1 -0
- package/src/conversation.test.tsx +16 -0
- package/src/conversation.tsx +16 -2
- package/src/diff-view.stories.tsx +79 -0
- package/src/diff-view.tsx +3 -2
- package/src/file-tree.tsx +24 -17
- package/src/gallery.stories.tsx +42 -0
- package/src/gallery.tsx +2 -2
- package/src/grouped-parts.stories.tsx +23 -0
- package/src/grouped-parts.tsx +1 -1
- package/src/index.ts +1 -0
- package/src/message-compare.stories.tsx +40 -0
- package/src/message-compare.tsx +2 -1
- package/src/message-form.tsx +1 -1
- package/src/message-table.stories.tsx +24 -0
- package/src/message-table.tsx +1 -1
- package/src/package-info.tsx +12 -9
- package/src/reasoning.stories.tsx +27 -0
- package/src/reasoning.tsx +1 -1
- package/src/session-header.stories.tsx +35 -1
- package/src/session-header.tsx +1 -1
- package/src/sources.stories.tsx +30 -0
- package/src/sources.tsx +4 -1
- package/src/templates-ai-assistant.stories.tsx +151 -87
- package/src/tool.stories.tsx +39 -0
- package/src/tool.tsx +3 -3
- package/src/toolbar.tsx +0 -10
- package/dist/_flow-boundary-SHNWLQG5.js.map +0 -1
- package/dist/_persona-rive-JEG44YHX.js.map +0 -1
- /package/dist/{_audio-player-media-chrome-T3XVXWRZ.js.map → _audio-player-media-chrome.js.map} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/a2ui/core/catalog.generated.ts"],"sourcesContent":["// GENERATED by packages/cli/scripts/gen-a2ui-catalog.mjs from\n// packages/ai/src/a2ui/catalog.source.json + brand-ui.manifest.json — do not edit;\n// edit the source file (or the component) and run `pnpm gen`.\nimport type { A2uiCatalogSchema } from \"./spec\";\n\nexport const A2UI_CATALOG_VERSION = \"1\";\n\nexport const A2UI_CATALOG_SCHEMA: A2uiCatalogSchema = {\n Accordion: {\n children: true,\n props: {\n collapsible: {\n type: \"boolean\",\n },\n defaultValue: {\n type: \"string\",\n },\n type: {\n enum: [\"single\", \"multiple\"],\n required: true,\n type: \"string\",\n },\n },\n events: {\n change: \"onValueChange\",\n },\n source: \"@elabs-ai/components-ui\",\n },\n AccordionContent: {\n children: true,\n props: {},\n events: {},\n source: \"@elabs-ai/components-ui\",\n },\n AccordionItem: {\n children: true,\n props: {\n value: {\n type: \"string\",\n required: true,\n },\n },\n events: {},\n source: \"@elabs-ai/components-ui\",\n },\n AccordionTrigger: {\n children: true,\n props: {\n headingLevel: {\n type: \"number\",\n enum: [2, 3, 4, 5, 6],\n description:\n \"The heading level Radix's `Accordion.Header` renders. Radix hardcodes `h3`, which skips a level whenever the accordion sits directly under the page `h1` — so…\",\n },\n },\n events: {},\n source: \"@elabs-ai/components-ui\",\n },\n Alert: {\n children: true,\n props: {\n variant: {\n enum: [\"default\", \"destructive\", \"success\", \"warning\", \"info\"],\n type: \"string\",\n },\n },\n events: {},\n source: \"@elabs-ai/components-ui\",\n summary: \"Compose AlertTitle + AlertDescription inside.\",\n },\n AlertDescription: {\n children: true,\n props: {\n measure: {\n type: \"boolean\",\n description:\n \"Cap the line length to a readable prose measure (`max-w-prose`, ~65ch) for genuine paragraph content (#339). Off by default — short, label-style descriptions…\",\n },\n },\n events: {},\n source: \"@elabs-ai/components-ui\",\n },\n AlertTitle: {\n children: true,\n props: {},\n events: {},\n source: \"@elabs-ai/components-ui\",\n },\n Avatar: {\n children: true,\n props: {},\n events: {},\n source: \"@elabs-ai/components-ui\",\n summary: \"Compose AvatarFallback (initials) inside.\",\n },\n AvatarFallback: {\n children: true,\n props: {},\n events: {},\n source: \"@elabs-ai/components-ui\",\n },\n Badge: {\n children: true,\n props: {\n variant: {\n type: \"string\",\n enum: [\"default\", \"secondary\", \"outline\", \"success\", \"warning\", \"destructive\", \"info\"],\n default: \"default\",\n },\n },\n events: {},\n source: \"@elabs-ai/components-ui\",\n summary: \"Compact status/label chip (status, count, category).\",\n },\n BentoGrid: {\n children: true,\n props: {\n spotlight: {\n type: \"boolean\",\n description:\n \"Enable the cursor-following spotlight on every tile in this grid. Individual tiles can still opt out (or in) with their own `spotlight` prop. Disabled entire…\",\n },\n },\n events: {},\n source: \"@elabs-ai/components-ui\",\n summary: \"Feature/bento grid; children are BentoGridItem.\",\n },\n BentoGridItem: {\n children: true,\n props: {\n size: {\n type: \"string\",\n description:\n 'Size preset. Resolves to a col + row span. Overridden by explicit `span`. @default \"sm\"',\n enum: [\"sm\", \"md\", \"lg\", \"hero\"],\n },\n span: {\n type: \"object\",\n description:\n \"Explicit grid span. Wins over `size`. Spans clamp gracefully on narrow layouts — a `col: 4` on a 2-col grid becomes `span min(4, 2)`.\",\n },\n spotlight: {\n type: \"boolean\",\n description:\n \"Enable the cursor-following spotlight gradient on this tile. Omit to inherit the parent `BentoGrid`'s `spotlight` (itself `false` by default) — so the effect…\",\n },\n },\n events: {},\n source: \"@elabs-ai/components-ui\",\n },\n Button: {\n children: true,\n props: {\n disabled: {\n type: \"boolean\",\n },\n size: {\n type: \"string\",\n enum: [\"sm\", \"default\", \"lg\", \"icon\", \"icon-sm\", \"icon-lg\"],\n default: \"default\",\n },\n type: {\n enum: [\"button\", \"submit\"],\n default: \"button\",\n type: \"string\",\n },\n variant: {\n type: \"string\",\n enum: [\"default\", \"secondary\", \"destructive\", \"outline\", \"outline-subtle\", \"ghost\", \"link\"],\n default: \"default\",\n },\n },\n events: {\n click: \"onClick\",\n },\n source: \"@elabs-ai/components-ui\",\n summary: 'An action. Bind `on.click`; one `variant: \"default\"` per group.',\n },\n ButtonGroup: {\n children: true,\n props: {},\n events: {},\n source: \"@elabs-ai/components-ui\",\n },\n Card: {\n children: true,\n props: {\n detail: {\n type: \"node\",\n description:\n \"Optional detail-panel content. **Undefined → a plain card** (today's single `<div>` — no grid, no panel, zero behaviour change).\",\n },\n detailLabel: {\n type: \"string\",\n description: 'Accessible label for the detail region. @default \"Details\"',\n },\n detailPlacement: {\n type: \"string\",\n enum: [\"side\", \"bottom\"],\n description: 'Which edge the detail panel sits on. @default \"side\"',\n },\n interactive: {\n type: \"string\",\n enum: [\"true\", \"false\"],\n default: \"false\",\n },\n stacked: {\n type: \"boolean\",\n description:\n \"Opt-in hairline gesture: the edges of two sheets stacked behind the card's top edge (the `hairline-stack` utility). It draws OUTSIDE the card, so it needs ~1…\",\n },\n },\n events: {},\n source: \"@elabs-ai/components-ui\",\n summary: \"The one generic surface — compose CardHeader / CardContent / CardFooter inside.\",\n },\n CardAction: {\n children: true,\n props: {},\n events: {},\n source: \"@elabs-ai/components-ui\",\n summary: \"The header's trailing action slot (a Button, a Badge).\",\n },\n CardContent: {\n children: true,\n props: {},\n events: {},\n source: \"@elabs-ai/components-ui\",\n },\n CardDescription: {\n children: true,\n props: {\n measure: {\n type: \"boolean\",\n description:\n \"Cap the line length to a readable prose measure (`max-w-prose`, ~65ch) for genuine paragraph content (#339). Off by default — short, subtitle-style descripti…\",\n },\n },\n events: {},\n source: \"@elabs-ai/components-ui\",\n },\n CardFooter: {\n children: true,\n props: {},\n events: {},\n source: \"@elabs-ai/components-ui\",\n },\n CardHeader: {\n children: true,\n props: {},\n events: {},\n source: \"@elabs-ai/components-ui\",\n },\n CardTitle: {\n children: true,\n props: {},\n events: {},\n source: \"@elabs-ai/components-ui\",\n },\n Checkbox: {\n children: false,\n props: {\n \"aria-label\": {\n type: \"string\",\n },\n defaultChecked: {\n type: \"boolean\",\n },\n disabled: {\n type: \"boolean\",\n },\n id: {\n type: \"string\",\n },\n },\n events: {\n change: \"onCheckedChange\",\n },\n source: \"@elabs-ai/components-ui\",\n summary: \"Binary on/off toggle within a form (multi-select within a group).\",\n },\n Collapsible: {\n children: true,\n props: {\n defaultOpen: {\n type: \"boolean\",\n },\n },\n events: {\n change: \"onOpenChange\",\n },\n source: \"@elabs-ai/components-ui\",\n },\n CollapsibleContent: {\n children: true,\n props: {},\n events: {},\n source: \"@elabs-ai/components-ui\",\n },\n CollapsibleTrigger: {\n children: true,\n props: {\n asChild: {\n type: \"boolean\",\n },\n },\n events: {},\n source: \"@elabs-ai/components-ui\",\n },\n Descriptions: {\n children: true,\n props: {\n columns: {\n type: \"number\",\n enum: [1, 2, 3],\n description:\n \"Number of columns at the widest breakpoint. Collapses to a single column on small screens. Default 1.\",\n },\n layout: {\n type: \"string\",\n description:\n \"`horizontal` places the label beside the value; `vertical` stacks the label above the value. Default `horizontal`.\",\n enum: [\"horizontal\", \"vertical\"],\n },\n },\n events: {},\n source: \"@elabs-ai/components-ui\",\n summary: \"Key–value list; children are DescriptionsItem.\",\n },\n DescriptionsItem: {\n children: true,\n props: {\n label: {\n type: \"node\",\n required: true,\n description: \"The term / label for this entry.\",\n },\n numeric: {\n type: \"boolean\",\n description:\n \"When the value is numeric, set this so the value uses `tabular-nums` for aligned digits.\",\n },\n },\n events: {},\n source: \"@elabs-ai/components-ui\",\n },\n EmptyState: {\n children: false,\n props: {\n actions: {\n type: \"node\",\n description: \"Primary/secondary actions.\",\n },\n description: {\n type: \"node\",\n },\n icon: {\n type: \"node\",\n description:\n \"Optional icon shown above the title, clamped to a fixed 40×40 (this wrapper only ever forwards `icon` to `StatePanel`, never `illustration` — for a larger, u…\",\n },\n title: {\n type: \"node\",\n required: true,\n },\n },\n events: {},\n source: \"@elabs-ai/components-ui\",\n summary: \"Nothing here yet — title, description, optional actions.\",\n },\n Grid: {\n builtin: true,\n children: true,\n props: {\n columns: {\n enum: [1, 2, 3, 4],\n default: 2,\n type: \"number\",\n },\n gap: {\n enum: [\"none\", \"xs\", \"sm\", \"md\", \"lg\"],\n default: \"md\",\n type: \"string\",\n },\n },\n events: {},\n source: \"builtin\",\n summary: \"Responsive CSS grid, 1–4 equal columns (collapses to one column on narrow screens).\",\n },\n Heading: {\n children: true,\n props: {\n level: {\n type: \"number\",\n description: \"Semantic heading level — drives the rendered tag AND the default size.\",\n enum: [1, 2, 3, 4, 5, 6],\n default: 2,\n },\n size: {\n type: \"string\",\n enum: [\"display-lg\", \"display\", \"title\", \"subtitle\"],\n default: \"title\",\n },\n },\n events: {},\n source: \"@elabs-ai/components-ui\",\n summary: \"Section heading; `level` sets the HTML rank (1–6), `size` the type role.\",\n },\n Input: {\n children: false,\n props: {\n \"aria-label\": {\n type: \"string\",\n },\n defaultValue: {\n type: \"string\",\n },\n disabled: {\n type: \"boolean\",\n },\n id: {\n type: \"string\",\n },\n placeholder: {\n type: \"string\",\n },\n required: {\n type: \"boolean\",\n },\n type: {\n enum: [\"text\", \"email\", \"number\", \"password\", \"search\", \"tel\", \"url\", \"date\"],\n type: \"string\",\n },\n },\n events: {\n change: \"onChange\",\n },\n source: \"@elabs-ai/components-ui\",\n summary: \"Single-line text field — the base form input.\",\n },\n Kbd: {\n children: true,\n props: {},\n events: {},\n source: \"@elabs-ai/components-ui\",\n },\n Label: {\n children: true,\n props: {\n htmlFor: {\n type: \"string\",\n },\n },\n events: {},\n source: \"@elabs-ai/components-ui\",\n },\n MetricCard: {\n children: false,\n props: {\n currency: {\n type: \"string\",\n description: 'ISO 4217 code for `valueFormat: \"currency\"`. Default: `\"USD\"`.',\n },\n delta: {\n type: \"string\",\n description: 'Signed change, e.g. \"+12.4%\". Direction colors it.',\n },\n deltaDirection: {\n type: \"string\",\n enum: [\"up\", \"down\", \"neutral\"],\n },\n description: {\n type: \"node\",\n description: \"Secondary line under the value — sublabel / context.\",\n },\n evidence: {\n type: \"node\",\n description:\n \"Optional grounding footer (research 11 §B.5 KPI-3) — connects a cited figure to its source (e.g. an `EvidenceChip` from `@elabs-ai/components-ai`). Rendered …\",\n },\n label: {\n type: \"node\",\n required: true,\n },\n loading: {\n type: \"boolean\",\n description:\n \"Loading vs ready — renders a layout-shaped skeleton (matching the real box height) instead of the value/label/delta text. Default: `false`.\",\n },\n positiveIsGood: {\n type: \"boolean\",\n description: 'Whether \"up\" is good (green) — flip for metrics where down is good.',\n },\n sparkline: {\n type: \"node\",\n description:\n 'Trend slot rendered directly under the value (RM-072) — pass a `<Sparkline …/>` from `@elabs-ai/components-charts`. Hidden at `size=\"sm\"`.',\n },\n value: {\n type: \"node\",\n required: true,\n },\n valueFormat: {\n type: \"string\",\n description:\n 'How to render a NUMERIC `value`. Default: `\"compact\"`. Ignored for every other `ReactNode` — a string you already formatted is rendered verbatim.',\n enum: [\"number\", \"compact\", \"currency\", \"percent\"],\n },\n },\n events: {},\n source: \"@elabs-ai/components-ui\",\n summary: \"One KPI: label, value, optional delta. Put several in a Grid.\",\n },\n Progress: {\n children: false,\n props: {\n \"aria-label\": {\n type: \"string\",\n },\n marker: {\n type: \"number\",\n description:\n 'Reference point (0–100, same scale as `value`) — e.g. an \"expected by today\" pace or a target — rendered as a thin vertical tick on the track. Unset (default…',\n },\n markerLabel: {\n type: \"string\",\n description:\n 'What `marker` represents (already localized by the caller — e.g. `\"expected 70% by today\"`). When set, it is appended to the progress bar\\'s accessible value …',\n },\n max: {\n type: \"number\",\n },\n value: {\n type: \"number\",\n required: true,\n },\n variant: {\n type: \"string\",\n enum: [\"default\", \"success\", \"warning\", \"destructive\"],\n default: \"default\",\n },\n },\n events: {},\n source: \"@elabs-ai/components-ui\",\n },\n RadioGroup: {\n children: true,\n props: {\n \"aria-label\": {\n type: \"string\",\n },\n defaultValue: {\n type: \"string\",\n },\n },\n events: {\n change: \"onValueChange\",\n },\n source: \"@elabs-ai/components-ui\",\n summary: \"Mutually-exclusive single choice from a small visible set.\",\n },\n RadioGroupItem: {\n children: false,\n props: {\n \"aria-label\": {\n type: \"string\",\n },\n disabled: {\n type: \"boolean\",\n },\n id: {\n type: \"string\",\n },\n value: {\n type: \"string\",\n required: true,\n },\n },\n events: {},\n source: \"@elabs-ai/components-ui\",\n },\n SectionHeader: {\n children: false,\n props: {\n actions: {\n type: \"node\",\n description: \"Right-aligned actions (buttons, menus).\",\n },\n description: {\n type: \"node\",\n },\n eyebrow: {\n type: \"node\",\n description: \"Optional element rendered above the title (eyebrow / breadcrumbs).\",\n },\n title: {\n type: \"node\",\n required: true,\n },\n },\n events: {},\n source: \"@elabs-ai/components-ui\",\n summary: \"Title + description + optional actions above a region.\",\n },\n Select: {\n children: true,\n props: {\n defaultValue: {\n type: \"string\",\n },\n disabled: {\n type: \"boolean\",\n },\n },\n events: {\n change: \"onValueChange\",\n },\n source: \"@elabs-ai/components-ui\",\n summary: \"Compose SelectTrigger (SelectValue) + SelectContent (SelectItem…).\",\n },\n SelectContent: {\n children: true,\n props: {},\n events: {},\n source: \"@elabs-ai/components-ui\",\n },\n SelectItem: {\n children: true,\n props: {\n disabled: {\n type: \"boolean\",\n },\n value: {\n type: \"string\",\n required: true,\n },\n },\n events: {},\n source: \"@elabs-ai/components-ui\",\n },\n SelectTrigger: {\n children: true,\n props: {\n \"aria-label\": {\n type: \"string\",\n },\n autoTitle: {\n type: \"boolean\",\n description:\n \"Auto-set a native `title` from the trigger's rendered text — but ONLY while that text is actually clipped (default `true`). Set `false` when the trigger is a…\",\n },\n size: {\n type: \"string\",\n enum: [\"sm\", \"default\"],\n },\n },\n events: {},\n source: \"@elabs-ai/components-ui\",\n },\n SelectValue: {\n children: false,\n props: {\n placeholder: {\n type: \"string\",\n },\n },\n events: {},\n source: \"@elabs-ai/components-ui\",\n },\n Separator: {\n children: false,\n props: {\n orientation: {\n enum: [\"horizontal\", \"vertical\"],\n default: \"horizontal\",\n type: \"string\",\n },\n },\n events: {},\n source: \"@elabs-ai/components-ui\",\n },\n Slider: {\n children: false,\n props: {\n \"aria-label\": {\n type: \"string\",\n },\n defaultValue: {\n type: \"array\",\n },\n max: {\n type: \"number\",\n },\n min: {\n type: \"number\",\n },\n step: {\n type: \"number\",\n },\n thumbProps: {\n type: \"array\",\n description:\n \"Escape hatch spread onto the thumb LAST — for `data-*`/`style`/etc, or to deliberately override `aria-label`/`aria-labelledby`/`aria-valuetext` (an explicit …\",\n },\n },\n events: {\n change: \"onValueChange\",\n },\n source: \"@elabs-ai/components-ui\",\n },\n Stack: {\n builtin: true,\n children: true,\n props: {\n align: {\n enum: [\"start\", \"center\", \"end\", \"stretch\"],\n default: \"stretch\",\n type: \"string\",\n },\n direction: {\n enum: [\"column\", \"row\"],\n default: \"column\",\n type: \"string\",\n },\n gap: {\n enum: [\"none\", \"xs\", \"sm\", \"md\", \"lg\"],\n default: \"md\",\n type: \"string\",\n },\n justify: {\n enum: [\"start\", \"center\", \"end\", \"between\"],\n default: \"start\",\n type: \"string\",\n },\n wrap: {\n type: \"boolean\",\n default: false,\n },\n },\n events: {},\n source: \"builtin\",\n summary:\n \"Vertical or horizontal flex group. The default container — put siblings in a Stack, never bare.\",\n },\n StatePanel: {\n children: false,\n props: {\n actions: {\n type: \"node\",\n description: \"Primary / secondary action buttons.\",\n },\n description: {\n type: \"node\",\n description: \"Supporting description below the title.\",\n },\n icon: {\n type: \"node\",\n description:\n 'Icon shown above the title, clamped to a uniform 40×40 so mismatched glyphs stay tidy. For `\"error\"` defaults to a built-in warning triangle. For `\"loading\"`…',\n },\n illustration: {\n type: \"node\",\n description:\n \"A larger illustration (one of `@elabs-ai/components-ui`'s shipped `*Illustration` components, or a consumer's own `ReactNode`) shown above the title instead …\",\n },\n kind: {\n type: \"string\",\n enum: [\"empty\", \"error\", \"loading\"],\n default: \"empty\",\n },\n loadingLabel: {\n type: \"string\",\n description: 'Accessible label for the spinner in loading state. @default \"Loading…\"',\n },\n size: {\n type: \"string\",\n enum: [\"sm\", \"md\", \"lg\"],\n description: 'Spinner size (loading kind only). @default \"md\"',\n },\n title: {\n type: \"node\",\n description: \"Heading text.\",\n },\n titleAs: {\n type: \"string\",\n enum: [\"div\", \"h1\", \"h2\", \"h3\", \"h4\", \"h5\", \"h6\"],\n description:\n \"Heading level for the panel's title (#328 convention). Set this to the level that correctly follows whatever heading precedes this panel in the document outl…\",\n },\n },\n events: {},\n source: \"@elabs-ai/components-ui\",\n summary: \"An empty / error / loading message panel.\",\n },\n StatusBadge: {\n children: false,\n props: {\n hideIcon: {\n type: \"boolean\",\n description: \"Render label-only (no status icon).\",\n },\n size: {\n type: \"string\",\n enum: [\"sm\", \"md\"],\n default: \"md\",\n },\n status: {\n type: \"string\",\n required: true,\n description: \"The canonical execution status, or a mapped out-of-vocabulary one (#363).\",\n enum: [\n \"pending\",\n \"running\",\n \"complete\",\n \"awaiting-approval\",\n \"denied\",\n \"failed\",\n \"skipped\",\n ],\n },\n },\n events: {},\n source: \"@elabs-ai/components-ui\",\n summary: \"A closed status vocabulary with icon + text (never colour alone).\",\n },\n Switch: {\n children: false,\n props: {\n \"aria-label\": {\n type: \"string\",\n },\n defaultChecked: {\n type: \"boolean\",\n },\n disabled: {\n type: \"boolean\",\n },\n id: {\n type: \"string\",\n },\n },\n events: {\n change: \"onCheckedChange\",\n },\n source: \"@elabs-ai/components-ui\",\n summary: \"Immediate on/off setting toggle (applies on change, not on submit).\",\n },\n Table: {\n children: true,\n props: {},\n events: {},\n source: \"@elabs-ai/components-ui\",\n summary: \"Compose TableHeader/TableBody → TableRow → TableHead/TableCell.\",\n },\n TableBody: {\n children: true,\n props: {},\n events: {},\n source: \"@elabs-ai/components-ui\",\n },\n TableCaption: {\n children: true,\n props: {},\n events: {},\n source: \"@elabs-ai/components-ui\",\n },\n TableCell: {\n children: true,\n props: {},\n events: {},\n source: \"@elabs-ai/components-ui\",\n },\n TableFooter: {\n children: true,\n props: {},\n events: {},\n source: \"@elabs-ai/components-ui\",\n },\n TableHead: {\n children: true,\n props: {},\n events: {},\n source: \"@elabs-ai/components-ui\",\n },\n TableHeader: {\n children: true,\n props: {},\n events: {},\n source: \"@elabs-ai/components-ui\",\n },\n TableRow: {\n children: true,\n props: {},\n events: {},\n source: \"@elabs-ai/components-ui\",\n },\n Tabs: {\n children: true,\n props: {\n defaultValue: {\n type: \"string\",\n required: true,\n },\n },\n events: {\n change: \"onValueChange\",\n },\n source: \"@elabs-ai/components-ui\",\n summary: \"Compose TabsList (TabsTrigger…) + TabsContent per value.\",\n },\n TabsContent: {\n children: true,\n props: {\n value: {\n type: \"string\",\n required: true,\n },\n },\n events: {},\n source: \"@elabs-ai/components-ui\",\n },\n TabsList: {\n children: true,\n props: {\n variant: {\n type: \"string\",\n enum: [\"segmented\", \"underline\"],\n default: \"segmented\",\n },\n },\n events: {},\n source: \"@elabs-ai/components-ui\",\n },\n TabsTrigger: {\n children: true,\n props: {\n disabled: {\n type: \"boolean\",\n },\n value: {\n type: \"string\",\n required: true,\n },\n },\n events: {},\n source: \"@elabs-ai/components-ui\",\n },\n Text: {\n children: true,\n props: {\n tone: {\n type: \"string\",\n enum: [\"default\", \"muted\", \"primary\"],\n default: \"default\",\n },\n variant: {\n type: \"string\",\n enum: [\"lead\", \"body\", \"caption\", \"meta\", \"kpi\", \"kpi-sm\", \"eyebrow\", \"code\"],\n default: \"body\",\n },\n },\n events: {},\n source: \"@elabs-ai/components-ui\",\n summary: \"A paragraph or inline run of text with a type role and tone.\",\n },\n Textarea: {\n children: false,\n props: {\n \"aria-label\": {\n type: \"string\",\n },\n defaultValue: {\n type: \"string\",\n },\n disabled: {\n type: \"boolean\",\n },\n id: {\n type: \"string\",\n },\n placeholder: {\n type: \"string\",\n },\n rows: {\n type: \"number\",\n },\n },\n events: {\n change: \"onChange\",\n },\n source: \"@elabs-ai/components-ui\",\n },\n Timeline: {\n children: false,\n props: {\n items: {\n type: \"array\",\n required: true,\n description: '[{ title, description?, status?: \"done\"|\"active\"|\"pending\", timestamp? }]',\n },\n },\n events: {},\n source: \"@elabs-ai/components-ui\",\n summary: \"Ordered status timeline from `items` (title, status, timestamp, description).\",\n },\n};\n"],"mappings":";;;AAKO,IAAM,uBAAuB;AAE7B,IAAM,sBAAyC;AAAA,EACpD,WAAW;AAAA,IACT,UAAU;AAAA,IACV,OAAO;AAAA,MACL,aAAa;AAAA,QACX,MAAM;AAAA,MACR;AAAA,MACA,cAAc;AAAA,QACZ,MAAM;AAAA,MACR;AAAA,MACA,MAAM;AAAA,QACJ,MAAM,CAAC,UAAU,UAAU;AAAA,QAC3B,UAAU;AAAA,QACV,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,QAAQ;AAAA,MACN,QAAQ;AAAA,IACV;AAAA,IACA,QAAQ;AAAA,EACV;AAAA,EACA,kBAAkB;AAAA,IAChB,UAAU;AAAA,IACV,OAAO,CAAC;AAAA,IACR,QAAQ,CAAC;AAAA,IACT,QAAQ;AAAA,EACV;AAAA,EACA,eAAe;AAAA,IACb,UAAU;AAAA,IACV,OAAO;AAAA,MACL,OAAO;AAAA,QACL,MAAM;AAAA,QACN,UAAU;AAAA,MACZ;AAAA,IACF;AAAA,IACA,QAAQ,CAAC;AAAA,IACT,QAAQ;AAAA,EACV;AAAA,EACA,kBAAkB;AAAA,IAChB,UAAU;AAAA,IACV,OAAO;AAAA,MACL,cAAc;AAAA,QACZ,MAAM;AAAA,QACN,MAAM,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA,QACpB,aACE;AAAA,MACJ;AAAA,IACF;AAAA,IACA,QAAQ,CAAC;AAAA,IACT,QAAQ;AAAA,EACV;AAAA,EACA,OAAO;AAAA,IACL,UAAU;AAAA,IACV,OAAO;AAAA,MACL,SAAS;AAAA,QACP,MAAM,CAAC,WAAW,eAAe,WAAW,WAAW,MAAM;AAAA,QAC7D,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,QAAQ,CAAC;AAAA,IACT,QAAQ;AAAA,IACR,SAAS;AAAA,EACX;AAAA,EACA,kBAAkB;AAAA,IAChB,UAAU;AAAA,IACV,OAAO;AAAA,MACL,SAAS;AAAA,QACP,MAAM;AAAA,QACN,aACE;AAAA,MACJ;AAAA,IACF;AAAA,IACA,QAAQ,CAAC;AAAA,IACT,QAAQ;AAAA,EACV;AAAA,EACA,YAAY;AAAA,IACV,UAAU;AAAA,IACV,OAAO,CAAC;AAAA,IACR,QAAQ,CAAC;AAAA,IACT,QAAQ;AAAA,EACV;AAAA,EACA,QAAQ;AAAA,IACN,UAAU;AAAA,IACV,OAAO,CAAC;AAAA,IACR,QAAQ,CAAC;AAAA,IACT,QAAQ;AAAA,IACR,SAAS;AAAA,EACX;AAAA,EACA,gBAAgB;AAAA,IACd,UAAU;AAAA,IACV,OAAO,CAAC;AAAA,IACR,QAAQ,CAAC;AAAA,IACT,QAAQ;AAAA,EACV;AAAA,EACA,OAAO;AAAA,IACL,UAAU;AAAA,IACV,OAAO;AAAA,MACL,SAAS;AAAA,QACP,MAAM;AAAA,QACN,MAAM,CAAC,WAAW,aAAa,WAAW,WAAW,WAAW,eAAe,MAAM;AAAA,QACrF,SAAS;AAAA,MACX;AAAA,IACF;AAAA,IACA,QAAQ,CAAC;AAAA,IACT,QAAQ;AAAA,IACR,SAAS;AAAA,EACX;AAAA,EACA,WAAW;AAAA,IACT,UAAU;AAAA,IACV,OAAO;AAAA,MACL,WAAW;AAAA,QACT,MAAM;AAAA,QACN,aACE;AAAA,MACJ;AAAA,IACF;AAAA,IACA,QAAQ,CAAC;AAAA,IACT,QAAQ;AAAA,IACR,SAAS;AAAA,EACX;AAAA,EACA,eAAe;AAAA,IACb,UAAU;AAAA,IACV,OAAO;AAAA,MACL,MAAM;AAAA,QACJ,MAAM;AAAA,QACN,aACE;AAAA,QACF,MAAM,CAAC,MAAM,MAAM,MAAM,MAAM;AAAA,MACjC;AAAA,MACA,MAAM;AAAA,QACJ,MAAM;AAAA,QACN,aACE;AAAA,MACJ;AAAA,MACA,WAAW;AAAA,QACT,MAAM;AAAA,QACN,aACE;AAAA,MACJ;AAAA,IACF;AAAA,IACA,QAAQ,CAAC;AAAA,IACT,QAAQ;AAAA,EACV;AAAA,EACA,QAAQ;AAAA,IACN,UAAU;AAAA,IACV,OAAO;AAAA,MACL,UAAU;AAAA,QACR,MAAM;AAAA,MACR;AAAA,MACA,MAAM;AAAA,QACJ,MAAM;AAAA,QACN,MAAM,CAAC,MAAM,WAAW,MAAM,QAAQ,WAAW,SAAS;AAAA,QAC1D,SAAS;AAAA,MACX;AAAA,MACA,MAAM;AAAA,QACJ,MAAM,CAAC,UAAU,QAAQ;AAAA,QACzB,SAAS;AAAA,QACT,MAAM;AAAA,MACR;AAAA,MACA,SAAS;AAAA,QACP,MAAM;AAAA,QACN,MAAM,CAAC,WAAW,aAAa,eAAe,WAAW,kBAAkB,SAAS,MAAM;AAAA,QAC1F,SAAS;AAAA,MACX;AAAA,IACF;AAAA,IACA,QAAQ;AAAA,MACN,OAAO;AAAA,IACT;AAAA,IACA,QAAQ;AAAA,IACR,SAAS;AAAA,EACX;AAAA,EACA,aAAa;AAAA,IACX,UAAU;AAAA,IACV,OAAO,CAAC;AAAA,IACR,QAAQ,CAAC;AAAA,IACT,QAAQ;AAAA,EACV;AAAA,EACA,MAAM;AAAA,IACJ,UAAU;AAAA,IACV,OAAO;AAAA,MACL,QAAQ;AAAA,QACN,MAAM;AAAA,QACN,aACE;AAAA,MACJ;AAAA,MACA,aAAa;AAAA,QACX,MAAM;AAAA,QACN,aAAa;AAAA,MACf;AAAA,MACA,iBAAiB;AAAA,QACf,MAAM;AAAA,QACN,MAAM,CAAC,QAAQ,QAAQ;AAAA,QACvB,aAAa;AAAA,MACf;AAAA,MACA,aAAa;AAAA,QACX,MAAM;AAAA,QACN,MAAM,CAAC,QAAQ,OAAO;AAAA,QACtB,SAAS;AAAA,MACX;AAAA,MACA,SAAS;AAAA,QACP,MAAM;AAAA,QACN,aACE;AAAA,MACJ;AAAA,IACF;AAAA,IACA,QAAQ,CAAC;AAAA,IACT,QAAQ;AAAA,IACR,SAAS;AAAA,EACX;AAAA,EACA,YAAY;AAAA,IACV,UAAU;AAAA,IACV,OAAO,CAAC;AAAA,IACR,QAAQ,CAAC;AAAA,IACT,QAAQ;AAAA,IACR,SAAS;AAAA,EACX;AAAA,EACA,aAAa;AAAA,IACX,UAAU;AAAA,IACV,OAAO,CAAC;AAAA,IACR,QAAQ,CAAC;AAAA,IACT,QAAQ;AAAA,EACV;AAAA,EACA,iBAAiB;AAAA,IACf,UAAU;AAAA,IACV,OAAO;AAAA,MACL,SAAS;AAAA,QACP,MAAM;AAAA,QACN,aACE;AAAA,MACJ;AAAA,IACF;AAAA,IACA,QAAQ,CAAC;AAAA,IACT,QAAQ;AAAA,EACV;AAAA,EACA,YAAY;AAAA,IACV,UAAU;AAAA,IACV,OAAO,CAAC;AAAA,IACR,QAAQ,CAAC;AAAA,IACT,QAAQ;AAAA,EACV;AAAA,EACA,YAAY;AAAA,IACV,UAAU;AAAA,IACV,OAAO,CAAC;AAAA,IACR,QAAQ,CAAC;AAAA,IACT,QAAQ;AAAA,EACV;AAAA,EACA,WAAW;AAAA,IACT,UAAU;AAAA,IACV,OAAO,CAAC;AAAA,IACR,QAAQ,CAAC;AAAA,IACT,QAAQ;AAAA,EACV;AAAA,EACA,UAAU;AAAA,IACR,UAAU;AAAA,IACV,OAAO;AAAA,MACL,cAAc;AAAA,QACZ,MAAM;AAAA,MACR;AAAA,MACA,gBAAgB;AAAA,QACd,MAAM;AAAA,MACR;AAAA,MACA,UAAU;AAAA,QACR,MAAM;AAAA,MACR;AAAA,MACA,IAAI;AAAA,QACF,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,QAAQ;AAAA,MACN,QAAQ;AAAA,IACV;AAAA,IACA,QAAQ;AAAA,IACR,SAAS;AAAA,EACX;AAAA,EACA,aAAa;AAAA,IACX,UAAU;AAAA,IACV,OAAO;AAAA,MACL,aAAa;AAAA,QACX,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,QAAQ;AAAA,MACN,QAAQ;AAAA,IACV;AAAA,IACA,QAAQ;AAAA,EACV;AAAA,EACA,oBAAoB;AAAA,IAClB,UAAU;AAAA,IACV,OAAO,CAAC;AAAA,IACR,QAAQ,CAAC;AAAA,IACT,QAAQ;AAAA,EACV;AAAA,EACA,oBAAoB;AAAA,IAClB,UAAU;AAAA,IACV,OAAO;AAAA,MACL,SAAS;AAAA,QACP,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,QAAQ,CAAC;AAAA,IACT,QAAQ;AAAA,EACV;AAAA,EACA,cAAc;AAAA,IACZ,UAAU;AAAA,IACV,OAAO;AAAA,MACL,SAAS;AAAA,QACP,MAAM;AAAA,QACN,MAAM,CAAC,GAAG,GAAG,CAAC;AAAA,QACd,aACE;AAAA,MACJ;AAAA,MACA,QAAQ;AAAA,QACN,MAAM;AAAA,QACN,aACE;AAAA,QACF,MAAM,CAAC,cAAc,UAAU;AAAA,MACjC;AAAA,IACF;AAAA,IACA,QAAQ,CAAC;AAAA,IACT,QAAQ;AAAA,IACR,SAAS;AAAA,EACX;AAAA,EACA,kBAAkB;AAAA,IAChB,UAAU;AAAA,IACV,OAAO;AAAA,MACL,OAAO;AAAA,QACL,MAAM;AAAA,QACN,UAAU;AAAA,QACV,aAAa;AAAA,MACf;AAAA,MACA,SAAS;AAAA,QACP,MAAM;AAAA,QACN,aACE;AAAA,MACJ;AAAA,IACF;AAAA,IACA,QAAQ,CAAC;AAAA,IACT,QAAQ;AAAA,EACV;AAAA,EACA,YAAY;AAAA,IACV,UAAU;AAAA,IACV,OAAO;AAAA,MACL,SAAS;AAAA,QACP,MAAM;AAAA,QACN,aAAa;AAAA,MACf;AAAA,MACA,aAAa;AAAA,QACX,MAAM;AAAA,MACR;AAAA,MACA,MAAM;AAAA,QACJ,MAAM;AAAA,QACN,aACE;AAAA,MACJ;AAAA,MACA,OAAO;AAAA,QACL,MAAM;AAAA,QACN,UAAU;AAAA,MACZ;AAAA,IACF;AAAA,IACA,QAAQ,CAAC;AAAA,IACT,QAAQ;AAAA,IACR,SAAS;AAAA,EACX;AAAA,EACA,MAAM;AAAA,IACJ,SAAS;AAAA,IACT,UAAU;AAAA,IACV,OAAO;AAAA,MACL,SAAS;AAAA,QACP,MAAM,CAAC,GAAG,GAAG,GAAG,CAAC;AAAA,QACjB,SAAS;AAAA,QACT,MAAM;AAAA,MACR;AAAA,MACA,KAAK;AAAA,QACH,MAAM,CAAC,QAAQ,MAAM,MAAM,MAAM,IAAI;AAAA,QACrC,SAAS;AAAA,QACT,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,QAAQ,CAAC;AAAA,IACT,QAAQ;AAAA,IACR,SAAS;AAAA,EACX;AAAA,EACA,SAAS;AAAA,IACP,UAAU;AAAA,IACV,OAAO;AAAA,MACL,OAAO;AAAA,QACL,MAAM;AAAA,QACN,aAAa;AAAA,QACb,MAAM,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA,QACvB,SAAS;AAAA,MACX;AAAA,MACA,MAAM;AAAA,QACJ,MAAM;AAAA,QACN,MAAM,CAAC,cAAc,WAAW,SAAS,UAAU;AAAA,QACnD,SAAS;AAAA,MACX;AAAA,IACF;AAAA,IACA,QAAQ,CAAC;AAAA,IACT,QAAQ;AAAA,IACR,SAAS;AAAA,EACX;AAAA,EACA,OAAO;AAAA,IACL,UAAU;AAAA,IACV,OAAO;AAAA,MACL,cAAc;AAAA,QACZ,MAAM;AAAA,MACR;AAAA,MACA,cAAc;AAAA,QACZ,MAAM;AAAA,MACR;AAAA,MACA,UAAU;AAAA,QACR,MAAM;AAAA,MACR;AAAA,MACA,IAAI;AAAA,QACF,MAAM;AAAA,MACR;AAAA,MACA,aAAa;AAAA,QACX,MAAM;AAAA,MACR;AAAA,MACA,UAAU;AAAA,QACR,MAAM;AAAA,MACR;AAAA,MACA,MAAM;AAAA,QACJ,MAAM,CAAC,QAAQ,SAAS,UAAU,YAAY,UAAU,OAAO,OAAO,MAAM;AAAA,QAC5E,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,QAAQ;AAAA,MACN,QAAQ;AAAA,IACV;AAAA,IACA,QAAQ;AAAA,IACR,SAAS;AAAA,EACX;AAAA,EACA,KAAK;AAAA,IACH,UAAU;AAAA,IACV,OAAO,CAAC;AAAA,IACR,QAAQ,CAAC;AAAA,IACT,QAAQ;AAAA,EACV;AAAA,EACA,OAAO;AAAA,IACL,UAAU;AAAA,IACV,OAAO;AAAA,MACL,SAAS;AAAA,QACP,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,QAAQ,CAAC;AAAA,IACT,QAAQ;AAAA,EACV;AAAA,EACA,YAAY;AAAA,IACV,UAAU;AAAA,IACV,OAAO;AAAA,MACL,UAAU;AAAA,QACR,MAAM;AAAA,QACN,aAAa;AAAA,MACf;AAAA,MACA,OAAO;AAAA,QACL,MAAM;AAAA,QACN,aAAa;AAAA,MACf;AAAA,MACA,gBAAgB;AAAA,QACd,MAAM;AAAA,QACN,MAAM,CAAC,MAAM,QAAQ,SAAS;AAAA,MAChC;AAAA,MACA,aAAa;AAAA,QACX,MAAM;AAAA,QACN,aAAa;AAAA,MACf;AAAA,MACA,UAAU;AAAA,QACR,MAAM;AAAA,QACN,aACE;AAAA,MACJ;AAAA,MACA,OAAO;AAAA,QACL,MAAM;AAAA,QACN,UAAU;AAAA,MACZ;AAAA,MACA,SAAS;AAAA,QACP,MAAM;AAAA,QACN,aACE;AAAA,MACJ;AAAA,MACA,gBAAgB;AAAA,QACd,MAAM;AAAA,QACN,aAAa;AAAA,MACf;AAAA,MACA,WAAW;AAAA,QACT,MAAM;AAAA,QACN,aACE;AAAA,MACJ;AAAA,MACA,OAAO;AAAA,QACL,MAAM;AAAA,QACN,UAAU;AAAA,MACZ;AAAA,MACA,aAAa;AAAA,QACX,MAAM;AAAA,QACN,aACE;AAAA,QACF,MAAM,CAAC,UAAU,WAAW,YAAY,SAAS;AAAA,MACnD;AAAA,IACF;AAAA,IACA,QAAQ,CAAC;AAAA,IACT,QAAQ;AAAA,IACR,SAAS;AAAA,EACX;AAAA,EACA,UAAU;AAAA,IACR,UAAU;AAAA,IACV,OAAO;AAAA,MACL,cAAc;AAAA,QACZ,MAAM;AAAA,MACR;AAAA,MACA,QAAQ;AAAA,QACN,MAAM;AAAA,QACN,aACE;AAAA,MACJ;AAAA,MACA,aAAa;AAAA,QACX,MAAM;AAAA,QACN,aACE;AAAA,MACJ;AAAA,MACA,KAAK;AAAA,QACH,MAAM;AAAA,MACR;AAAA,MACA,OAAO;AAAA,QACL,MAAM;AAAA,QACN,UAAU;AAAA,MACZ;AAAA,MACA,SAAS;AAAA,QACP,MAAM;AAAA,QACN,MAAM,CAAC,WAAW,WAAW,WAAW,aAAa;AAAA,QACrD,SAAS;AAAA,MACX;AAAA,IACF;AAAA,IACA,QAAQ,CAAC;AAAA,IACT,QAAQ;AAAA,EACV;AAAA,EACA,YAAY;AAAA,IACV,UAAU;AAAA,IACV,OAAO;AAAA,MACL,cAAc;AAAA,QACZ,MAAM;AAAA,MACR;AAAA,MACA,cAAc;AAAA,QACZ,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,QAAQ;AAAA,MACN,QAAQ;AAAA,IACV;AAAA,IACA,QAAQ;AAAA,IACR,SAAS;AAAA,EACX;AAAA,EACA,gBAAgB;AAAA,IACd,UAAU;AAAA,IACV,OAAO;AAAA,MACL,cAAc;AAAA,QACZ,MAAM;AAAA,MACR;AAAA,MACA,UAAU;AAAA,QACR,MAAM;AAAA,MACR;AAAA,MACA,IAAI;AAAA,QACF,MAAM;AAAA,MACR;AAAA,MACA,OAAO;AAAA,QACL,MAAM;AAAA,QACN,UAAU;AAAA,MACZ;AAAA,IACF;AAAA,IACA,QAAQ,CAAC;AAAA,IACT,QAAQ;AAAA,EACV;AAAA,EACA,eAAe;AAAA,IACb,UAAU;AAAA,IACV,OAAO;AAAA,MACL,SAAS;AAAA,QACP,MAAM;AAAA,QACN,aAAa;AAAA,MACf;AAAA,MACA,aAAa;AAAA,QACX,MAAM;AAAA,MACR;AAAA,MACA,SAAS;AAAA,QACP,MAAM;AAAA,QACN,aAAa;AAAA,MACf;AAAA,MACA,OAAO;AAAA,QACL,MAAM;AAAA,QACN,UAAU;AAAA,MACZ;AAAA,IACF;AAAA,IACA,QAAQ,CAAC;AAAA,IACT,QAAQ;AAAA,IACR,SAAS;AAAA,EACX;AAAA,EACA,QAAQ;AAAA,IACN,UAAU;AAAA,IACV,OAAO;AAAA,MACL,cAAc;AAAA,QACZ,MAAM;AAAA,MACR;AAAA,MACA,UAAU;AAAA,QACR,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,QAAQ;AAAA,MACN,QAAQ;AAAA,IACV;AAAA,IACA,QAAQ;AAAA,IACR,SAAS;AAAA,EACX;AAAA,EACA,eAAe;AAAA,IACb,UAAU;AAAA,IACV,OAAO,CAAC;AAAA,IACR,QAAQ,CAAC;AAAA,IACT,QAAQ;AAAA,EACV;AAAA,EACA,YAAY;AAAA,IACV,UAAU;AAAA,IACV,OAAO;AAAA,MACL,UAAU;AAAA,QACR,MAAM;AAAA,MACR;AAAA,MACA,OAAO;AAAA,QACL,MAAM;AAAA,QACN,UAAU;AAAA,MACZ;AAAA,IACF;AAAA,IACA,QAAQ,CAAC;AAAA,IACT,QAAQ;AAAA,EACV;AAAA,EACA,eAAe;AAAA,IACb,UAAU;AAAA,IACV,OAAO;AAAA,MACL,cAAc;AAAA,QACZ,MAAM;AAAA,MACR;AAAA,MACA,WAAW;AAAA,QACT,MAAM;AAAA,QACN,aACE;AAAA,MACJ;AAAA,MACA,MAAM;AAAA,QACJ,MAAM;AAAA,QACN,MAAM,CAAC,MAAM,SAAS;AAAA,MACxB;AAAA,IACF;AAAA,IACA,QAAQ,CAAC;AAAA,IACT,QAAQ;AAAA,EACV;AAAA,EACA,aAAa;AAAA,IACX,UAAU;AAAA,IACV,OAAO;AAAA,MACL,aAAa;AAAA,QACX,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,QAAQ,CAAC;AAAA,IACT,QAAQ;AAAA,EACV;AAAA,EACA,WAAW;AAAA,IACT,UAAU;AAAA,IACV,OAAO;AAAA,MACL,aAAa;AAAA,QACX,MAAM,CAAC,cAAc,UAAU;AAAA,QAC/B,SAAS;AAAA,QACT,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,QAAQ,CAAC;AAAA,IACT,QAAQ;AAAA,EACV;AAAA,EACA,QAAQ;AAAA,IACN,UAAU;AAAA,IACV,OAAO;AAAA,MACL,cAAc;AAAA,QACZ,MAAM;AAAA,MACR;AAAA,MACA,cAAc;AAAA,QACZ,MAAM;AAAA,MACR;AAAA,MACA,KAAK;AAAA,QACH,MAAM;AAAA,MACR;AAAA,MACA,KAAK;AAAA,QACH,MAAM;AAAA,MACR;AAAA,MACA,MAAM;AAAA,QACJ,MAAM;AAAA,MACR;AAAA,MACA,YAAY;AAAA,QACV,MAAM;AAAA,QACN,aACE;AAAA,MACJ;AAAA,IACF;AAAA,IACA,QAAQ;AAAA,MACN,QAAQ;AAAA,IACV;AAAA,IACA,QAAQ;AAAA,EACV;AAAA,EACA,OAAO;AAAA,IACL,SAAS;AAAA,IACT,UAAU;AAAA,IACV,OAAO;AAAA,MACL,OAAO;AAAA,QACL,MAAM,CAAC,SAAS,UAAU,OAAO,SAAS;AAAA,QAC1C,SAAS;AAAA,QACT,MAAM;AAAA,MACR;AAAA,MACA,WAAW;AAAA,QACT,MAAM,CAAC,UAAU,KAAK;AAAA,QACtB,SAAS;AAAA,QACT,MAAM;AAAA,MACR;AAAA,MACA,KAAK;AAAA,QACH,MAAM,CAAC,QAAQ,MAAM,MAAM,MAAM,IAAI;AAAA,QACrC,SAAS;AAAA,QACT,MAAM;AAAA,MACR;AAAA,MACA,SAAS;AAAA,QACP,MAAM,CAAC,SAAS,UAAU,OAAO,SAAS;AAAA,QAC1C,SAAS;AAAA,QACT,MAAM;AAAA,MACR;AAAA,MACA,MAAM;AAAA,QACJ,MAAM;AAAA,QACN,SAAS;AAAA,MACX;AAAA,IACF;AAAA,IACA,QAAQ,CAAC;AAAA,IACT,QAAQ;AAAA,IACR,SACE;AAAA,EACJ;AAAA,EACA,YAAY;AAAA,IACV,UAAU;AAAA,IACV,OAAO;AAAA,MACL,SAAS;AAAA,QACP,MAAM;AAAA,QACN,aAAa;AAAA,MACf;AAAA,MACA,aAAa;AAAA,QACX,MAAM;AAAA,QACN,aAAa;AAAA,MACf;AAAA,MACA,MAAM;AAAA,QACJ,MAAM;AAAA,QACN,aACE;AAAA,MACJ;AAAA,MACA,cAAc;AAAA,QACZ,MAAM;AAAA,QACN,aACE;AAAA,MACJ;AAAA,MACA,MAAM;AAAA,QACJ,MAAM;AAAA,QACN,MAAM,CAAC,SAAS,SAAS,SAAS;AAAA,QAClC,SAAS;AAAA,MACX;AAAA,MACA,cAAc;AAAA,QACZ,MAAM;AAAA,QACN,aAAa;AAAA,MACf;AAAA,MACA,MAAM;AAAA,QACJ,MAAM;AAAA,QACN,MAAM,CAAC,MAAM,MAAM,IAAI;AAAA,QACvB,aAAa;AAAA,MACf;AAAA,MACA,OAAO;AAAA,QACL,MAAM;AAAA,QACN,aAAa;AAAA,MACf;AAAA,MACA,SAAS;AAAA,QACP,MAAM;AAAA,QACN,MAAM,CAAC,OAAO,MAAM,MAAM,MAAM,MAAM,MAAM,IAAI;AAAA,QAChD,aACE;AAAA,MACJ;AAAA,IACF;AAAA,IACA,QAAQ,CAAC;AAAA,IACT,QAAQ;AAAA,IACR,SAAS;AAAA,EACX;AAAA,EACA,aAAa;AAAA,IACX,UAAU;AAAA,IACV,OAAO;AAAA,MACL,UAAU;AAAA,QACR,MAAM;AAAA,QACN,aAAa;AAAA,MACf;AAAA,MACA,MAAM;AAAA,QACJ,MAAM;AAAA,QACN,MAAM,CAAC,MAAM,IAAI;AAAA,QACjB,SAAS;AAAA,MACX;AAAA,MACA,QAAQ;AAAA,QACN,MAAM;AAAA,QACN,UAAU;AAAA,QACV,aAAa;AAAA,QACb,MAAM;AAAA,UACJ;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA,QAAQ,CAAC;AAAA,IACT,QAAQ;AAAA,IACR,SAAS;AAAA,EACX;AAAA,EACA,QAAQ;AAAA,IACN,UAAU;AAAA,IACV,OAAO;AAAA,MACL,cAAc;AAAA,QACZ,MAAM;AAAA,MACR;AAAA,MACA,gBAAgB;AAAA,QACd,MAAM;AAAA,MACR;AAAA,MACA,UAAU;AAAA,QACR,MAAM;AAAA,MACR;AAAA,MACA,IAAI;AAAA,QACF,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,QAAQ;AAAA,MACN,QAAQ;AAAA,IACV;AAAA,IACA,QAAQ;AAAA,IACR,SAAS;AAAA,EACX;AAAA,EACA,OAAO;AAAA,IACL,UAAU;AAAA,IACV,OAAO,CAAC;AAAA,IACR,QAAQ,CAAC;AAAA,IACT,QAAQ;AAAA,IACR,SAAS;AAAA,EACX;AAAA,EACA,WAAW;AAAA,IACT,UAAU;AAAA,IACV,OAAO,CAAC;AAAA,IACR,QAAQ,CAAC;AAAA,IACT,QAAQ;AAAA,EACV;AAAA,EACA,cAAc;AAAA,IACZ,UAAU;AAAA,IACV,OAAO,CAAC;AAAA,IACR,QAAQ,CAAC;AAAA,IACT,QAAQ;AAAA,EACV;AAAA,EACA,WAAW;AAAA,IACT,UAAU;AAAA,IACV,OAAO,CAAC;AAAA,IACR,QAAQ,CAAC;AAAA,IACT,QAAQ;AAAA,EACV;AAAA,EACA,aAAa;AAAA,IACX,UAAU;AAAA,IACV,OAAO,CAAC;AAAA,IACR,QAAQ,CAAC;AAAA,IACT,QAAQ;AAAA,EACV;AAAA,EACA,WAAW;AAAA,IACT,UAAU;AAAA,IACV,OAAO,CAAC;AAAA,IACR,QAAQ,CAAC;AAAA,IACT,QAAQ;AAAA,EACV;AAAA,EACA,aAAa;AAAA,IACX,UAAU;AAAA,IACV,OAAO,CAAC;AAAA,IACR,QAAQ,CAAC;AAAA,IACT,QAAQ;AAAA,EACV;AAAA,EACA,UAAU;AAAA,IACR,UAAU;AAAA,IACV,OAAO,CAAC;AAAA,IACR,QAAQ,CAAC;AAAA,IACT,QAAQ;AAAA,EACV;AAAA,EACA,MAAM;AAAA,IACJ,UAAU;AAAA,IACV,OAAO;AAAA,MACL,cAAc;AAAA,QACZ,MAAM;AAAA,QACN,UAAU;AAAA,MACZ;AAAA,IACF;AAAA,IACA,QAAQ;AAAA,MACN,QAAQ;AAAA,IACV;AAAA,IACA,QAAQ;AAAA,IACR,SAAS;AAAA,EACX;AAAA,EACA,aAAa;AAAA,IACX,UAAU;AAAA,IACV,OAAO;AAAA,MACL,OAAO;AAAA,QACL,MAAM;AAAA,QACN,UAAU;AAAA,MACZ;AAAA,IACF;AAAA,IACA,QAAQ,CAAC;AAAA,IACT,QAAQ;AAAA,EACV;AAAA,EACA,UAAU;AAAA,IACR,UAAU;AAAA,IACV,OAAO;AAAA,MACL,SAAS;AAAA,QACP,MAAM;AAAA,QACN,MAAM,CAAC,aAAa,WAAW;AAAA,QAC/B,SAAS;AAAA,MACX;AAAA,IACF;AAAA,IACA,QAAQ,CAAC;AAAA,IACT,QAAQ;AAAA,EACV;AAAA,EACA,aAAa;AAAA,IACX,UAAU;AAAA,IACV,OAAO;AAAA,MACL,UAAU;AAAA,QACR,MAAM;AAAA,MACR;AAAA,MACA,OAAO;AAAA,QACL,MAAM;AAAA,QACN,UAAU;AAAA,MACZ;AAAA,IACF;AAAA,IACA,QAAQ,CAAC;AAAA,IACT,QAAQ;AAAA,EACV;AAAA,EACA,MAAM;AAAA,IACJ,UAAU;AAAA,IACV,OAAO;AAAA,MACL,MAAM;AAAA,QACJ,MAAM;AAAA,QACN,MAAM,CAAC,WAAW,SAAS,SAAS;AAAA,QACpC,SAAS;AAAA,MACX;AAAA,MACA,SAAS;AAAA,QACP,MAAM;AAAA,QACN,MAAM,CAAC,QAAQ,QAAQ,WAAW,QAAQ,OAAO,UAAU,WAAW,MAAM;AAAA,QAC5E,SAAS;AAAA,MACX;AAAA,IACF;AAAA,IACA,QAAQ,CAAC;AAAA,IACT,QAAQ;AAAA,IACR,SAAS;AAAA,EACX;AAAA,EACA,UAAU;AAAA,IACR,UAAU;AAAA,IACV,OAAO;AAAA,MACL,cAAc;AAAA,QACZ,MAAM;AAAA,MACR;AAAA,MACA,cAAc;AAAA,QACZ,MAAM;AAAA,MACR;AAAA,MACA,UAAU;AAAA,QACR,MAAM;AAAA,MACR;AAAA,MACA,IAAI;AAAA,QACF,MAAM;AAAA,MACR;AAAA,MACA,aAAa;AAAA,QACX,MAAM;AAAA,MACR;AAAA,MACA,MAAM;AAAA,QACJ,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,QAAQ;AAAA,MACN,QAAQ;AAAA,IACV;AAAA,IACA,QAAQ;AAAA,EACV;AAAA,EACA,UAAU;AAAA,IACR,UAAU;AAAA,IACV,OAAO;AAAA,MACL,OAAO;AAAA,QACL,MAAM;AAAA,QACN,UAAU;AAAA,QACV,aAAa;AAAA,MACf;AAAA,IACF;AAAA,IACA,QAAQ,CAAC;AAAA,IACT,QAAQ;AAAA,IACR,SAAS;AAAA,EACX;AACF;","names":[]}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import {
|
|
3
|
+
lazyFlowPart
|
|
4
|
+
} from "./chunk-NMVNNO3L.js";
|
|
5
|
+
|
|
6
|
+
// src/canvas.tsx
|
|
7
|
+
import { Skeleton } from "@elabs-ai/components-ui";
|
|
8
|
+
import { cn } from "@elabs-ai/components-ui/lib/cn";
|
|
9
|
+
import { Suspense } from "react";
|
|
10
|
+
import { jsx } from "react/jsx-runtime";
|
|
11
|
+
var CanvasImpl = lazyFlowPart((m) => m.Canvas);
|
|
12
|
+
var Canvas = ({ className, ...props }) => (
|
|
13
|
+
// The canvas fills the box its parent gives it, so the skeleton reserves the
|
|
14
|
+
// same space and the engine chunk arrives without a layout shift.
|
|
15
|
+
/* @__PURE__ */ jsx(Suspense, { fallback: /* @__PURE__ */ jsx(Skeleton, { className: cn("size-full", className) }), children: /* @__PURE__ */ jsx(CanvasImpl, { className, ...props }) })
|
|
16
|
+
);
|
|
17
|
+
|
|
18
|
+
export {
|
|
19
|
+
Canvas
|
|
20
|
+
};
|
|
21
|
+
//# sourceMappingURL=chunk-BA3AEMOU.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/canvas.tsx"],"sourcesContent":["\"use client\";\n\nimport { Skeleton } from \"@elabs-ai/components-ui\";\nimport { cn } from \"@elabs-ai/components-ui/lib/cn\";\nimport type { ReactFlowProps } from \"@xyflow/react\";\nimport type { ReactNode } from \"react\";\nimport { Suspense } from \"react\";\n\nimport { lazyFlowPart } from \"./_flow-lazy\";\n\nexport type CanvasProps = ReactFlowProps & {\n children?: ReactNode;\n};\n\n/**\n * React Flow — and its stylesheet — is reached through a dynamic import: it\n * declares no `sideEffects`, so a static import would put the whole engine in\n * every consumer's entry chunk, a canvas rendered or not. `ReactFlowProps` above\n * is a TYPE import and erases. See ADR 0019 and `pnpm heavy-deps:check`.\n */\nconst CanvasImpl = lazyFlowPart<CanvasProps>((m) => m.Canvas);\n\nexport const Canvas = ({ className, ...props }: CanvasProps) => (\n // The canvas fills the box its parent gives it, so the skeleton reserves the\n // same space and the engine chunk arrives without a layout shift.\n <Suspense fallback={<Skeleton className={cn(\"size-full\", className)} />}>\n <CanvasImpl className={className} {...props} />\n </Suspense>\n);\n"],"mappings":";;;;;;AAEA,SAAS,gBAAgB;AACzB,SAAS,UAAU;AAGnB,SAAS,gBAAgB;AAmBH;AALtB,IAAM,aAAa,aAA0B,CAAC,MAAM,EAAE,MAAM;AAErD,IAAM,SAAS,CAAC,EAAE,WAAW,GAAG,MAAM;AAAA;AAAA;AAAA,EAG3C,oBAAC,YAAS,UAAU,oBAAC,YAAS,WAAW,GAAG,aAAa,SAAS,GAAG,GACnE,8BAAC,cAAW,WAAuB,GAAG,OAAO,GAC/C;AAAA;","names":[]}
|
|
@@ -0,0 +1,336 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
// src/stack-trace.tsx
|
|
4
|
+
import { useControllableState } from "@radix-ui/react-use-controllable-state";
|
|
5
|
+
import { Button } from "@elabs-ai/components-ui";
|
|
6
|
+
import { Collapsible, CollapsibleContent, CollapsibleTrigger } from "@elabs-ai/components-ui";
|
|
7
|
+
import { useCopyToClipboard, useLocale } from "@elabs-ai/components-ui";
|
|
8
|
+
import { cn } from "@elabs-ai/components-ui/lib/cn";
|
|
9
|
+
import { AlertTriangleIcon, CheckIcon, ChevronDownIcon, CopyIcon } from "lucide-react";
|
|
10
|
+
import { createContext, memo, useCallback, useContext, useMemo } from "react";
|
|
11
|
+
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
12
|
+
var STACK_FRAME_WITH_PARENS_REGEX = /^at\s+(.+?)\s+\((.+):(\d+):(\d+)\)$/;
|
|
13
|
+
var STACK_FRAME_WITHOUT_FN_REGEX = /^at\s+(.+):(\d+):(\d+)$/;
|
|
14
|
+
var ERROR_TYPE_REGEX = /^(\w+Error|Error):\s*(.*)$/;
|
|
15
|
+
var AT_PREFIX_REGEX = /^at\s+/;
|
|
16
|
+
var StackTraceContext = createContext(null);
|
|
17
|
+
var useStackTrace = () => {
|
|
18
|
+
const context = useContext(StackTraceContext);
|
|
19
|
+
if (!context) {
|
|
20
|
+
throw new Error("StackTrace components must be used within StackTrace");
|
|
21
|
+
}
|
|
22
|
+
return context;
|
|
23
|
+
};
|
|
24
|
+
var parseStackFrame = (line) => {
|
|
25
|
+
const trimmed = line.trim();
|
|
26
|
+
const withParensMatch = trimmed.match(STACK_FRAME_WITH_PARENS_REGEX);
|
|
27
|
+
if (withParensMatch) {
|
|
28
|
+
const [, functionName, filePath, lineNum, colNum] = withParensMatch;
|
|
29
|
+
const isInternal = (filePath?.includes("node_modules") ?? false) || (filePath?.startsWith("node:") ?? false) || (filePath?.includes("internal/") ?? false);
|
|
30
|
+
return {
|
|
31
|
+
columnNumber: colNum ? Number.parseInt(colNum, 10) : null,
|
|
32
|
+
filePath: filePath ?? null,
|
|
33
|
+
functionName: functionName ?? null,
|
|
34
|
+
isInternal,
|
|
35
|
+
lineNumber: lineNum ? Number.parseInt(lineNum, 10) : null,
|
|
36
|
+
raw: trimmed
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
const withoutFnMatch = trimmed.match(STACK_FRAME_WITHOUT_FN_REGEX);
|
|
40
|
+
if (withoutFnMatch) {
|
|
41
|
+
const [, filePath, lineNum, colNum] = withoutFnMatch;
|
|
42
|
+
const isInternal = (filePath?.includes("node_modules") ?? false) || (filePath?.startsWith("node:") ?? false) || (filePath?.includes("internal/") ?? false);
|
|
43
|
+
return {
|
|
44
|
+
columnNumber: colNum ? Number.parseInt(colNum, 10) : null,
|
|
45
|
+
filePath: filePath ?? null,
|
|
46
|
+
functionName: null,
|
|
47
|
+
isInternal,
|
|
48
|
+
lineNumber: lineNum ? Number.parseInt(lineNum, 10) : null,
|
|
49
|
+
raw: trimmed
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
return {
|
|
53
|
+
columnNumber: null,
|
|
54
|
+
filePath: null,
|
|
55
|
+
functionName: null,
|
|
56
|
+
isInternal: trimmed.includes("node_modules") || trimmed.includes("node:"),
|
|
57
|
+
lineNumber: null,
|
|
58
|
+
raw: trimmed
|
|
59
|
+
};
|
|
60
|
+
};
|
|
61
|
+
var parseStackTrace = (trace) => {
|
|
62
|
+
const lines = trace.split("\n").filter((line) => line.trim());
|
|
63
|
+
if (lines.length === 0) {
|
|
64
|
+
return {
|
|
65
|
+
errorMessage: trace,
|
|
66
|
+
errorType: null,
|
|
67
|
+
frames: [],
|
|
68
|
+
raw: trace
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
const firstLine = lines[0]?.trim() ?? "";
|
|
72
|
+
let errorType = null;
|
|
73
|
+
let errorMessage = firstLine;
|
|
74
|
+
const errorMatch = firstLine.match(ERROR_TYPE_REGEX);
|
|
75
|
+
if (errorMatch) {
|
|
76
|
+
const [, type, msg] = errorMatch;
|
|
77
|
+
errorType = type ?? null;
|
|
78
|
+
errorMessage = msg || "";
|
|
79
|
+
}
|
|
80
|
+
const frames = lines.slice(1).filter((line) => line.trim().startsWith("at ")).map(parseStackFrame);
|
|
81
|
+
return {
|
|
82
|
+
errorMessage,
|
|
83
|
+
errorType,
|
|
84
|
+
frames,
|
|
85
|
+
raw: trace
|
|
86
|
+
};
|
|
87
|
+
};
|
|
88
|
+
var StackTrace = memo(
|
|
89
|
+
({
|
|
90
|
+
trace,
|
|
91
|
+
className,
|
|
92
|
+
open,
|
|
93
|
+
defaultOpen = false,
|
|
94
|
+
onOpenChange,
|
|
95
|
+
onFilePathClick,
|
|
96
|
+
children,
|
|
97
|
+
...props
|
|
98
|
+
}) => {
|
|
99
|
+
const [isOpen, setIsOpen] = useControllableState({
|
|
100
|
+
defaultProp: defaultOpen,
|
|
101
|
+
onChange: onOpenChange,
|
|
102
|
+
prop: open
|
|
103
|
+
});
|
|
104
|
+
const parsedTrace = useMemo(() => parseStackTrace(trace), [trace]);
|
|
105
|
+
const contextValue = useMemo(
|
|
106
|
+
() => ({
|
|
107
|
+
isOpen,
|
|
108
|
+
onFilePathClick,
|
|
109
|
+
raw: trace,
|
|
110
|
+
setIsOpen,
|
|
111
|
+
trace: parsedTrace
|
|
112
|
+
}),
|
|
113
|
+
[parsedTrace, trace, isOpen, setIsOpen, onFilePathClick]
|
|
114
|
+
);
|
|
115
|
+
return /* @__PURE__ */ jsx(StackTraceContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsx(
|
|
116
|
+
"div",
|
|
117
|
+
{
|
|
118
|
+
className: cn(
|
|
119
|
+
"not-prose w-full overflow-hidden rounded-lg border bg-background font-mono text-body",
|
|
120
|
+
className
|
|
121
|
+
),
|
|
122
|
+
...props,
|
|
123
|
+
children
|
|
124
|
+
}
|
|
125
|
+
) });
|
|
126
|
+
}
|
|
127
|
+
);
|
|
128
|
+
var StackTraceHeader = memo(({ className, children, ...props }) => {
|
|
129
|
+
const { isOpen, setIsOpen } = useStackTrace();
|
|
130
|
+
return /* @__PURE__ */ jsx(Collapsible, { onOpenChange: setIsOpen, open: isOpen, children: /* @__PURE__ */ jsx(CollapsibleTrigger, { asChild: true, ...props, children: /* @__PURE__ */ jsx(
|
|
131
|
+
"div",
|
|
132
|
+
{
|
|
133
|
+
className: cn(
|
|
134
|
+
"flex w-full cursor-pointer items-center gap-3 p-3 text-start transition-colors hover:bg-muted/50",
|
|
135
|
+
className
|
|
136
|
+
),
|
|
137
|
+
children
|
|
138
|
+
}
|
|
139
|
+
) }) });
|
|
140
|
+
});
|
|
141
|
+
var StackTraceError = memo(({ className, children, ...props }) => /* @__PURE__ */ jsxs("div", { className: cn("flex flex-1 items-center gap-2 overflow-hidden", className), ...props, children: [
|
|
142
|
+
/* @__PURE__ */ jsx(AlertTriangleIcon, { className: "size-4 shrink-0 text-destructive" }),
|
|
143
|
+
children
|
|
144
|
+
] }));
|
|
145
|
+
var StackTraceErrorType = memo(
|
|
146
|
+
({ className, children, ...props }) => {
|
|
147
|
+
const { trace } = useStackTrace();
|
|
148
|
+
return (
|
|
149
|
+
// #124: the error type NAME is running text (e.g. "TypeError"), not a
|
|
150
|
+
// mark — ink rung, unlike the AlertTriangleIcon mark above.
|
|
151
|
+
/* @__PURE__ */ jsx("span", { className: cn("shrink-0 font-semibold text-destructive-text", className), ...props, children: children ?? trace.errorType })
|
|
152
|
+
);
|
|
153
|
+
}
|
|
154
|
+
);
|
|
155
|
+
var StackTraceErrorMessage = memo(
|
|
156
|
+
({ className, children, ...props }) => {
|
|
157
|
+
const { trace } = useStackTrace();
|
|
158
|
+
return /* @__PURE__ */ jsx("span", { className: cn("truncate text-foreground", className), ...props, children: children ?? trace.errorMessage });
|
|
159
|
+
}
|
|
160
|
+
);
|
|
161
|
+
var handleActionsClick = (e) => e.stopPropagation();
|
|
162
|
+
var handleActionsKeyDown = (e) => {
|
|
163
|
+
if (e.key === "Enter" || e.key === " ") {
|
|
164
|
+
e.stopPropagation();
|
|
165
|
+
}
|
|
166
|
+
};
|
|
167
|
+
var StackTraceActions = memo(
|
|
168
|
+
({ className, children, ...props }) => /* @__PURE__ */ jsx(
|
|
169
|
+
"div",
|
|
170
|
+
{
|
|
171
|
+
className: cn("flex shrink-0 items-center gap-1", className),
|
|
172
|
+
onClick: handleActionsClick,
|
|
173
|
+
onKeyDown: handleActionsKeyDown,
|
|
174
|
+
role: "group",
|
|
175
|
+
...props,
|
|
176
|
+
children
|
|
177
|
+
}
|
|
178
|
+
)
|
|
179
|
+
);
|
|
180
|
+
var StackTraceCopyButton = memo(
|
|
181
|
+
({
|
|
182
|
+
onCopy,
|
|
183
|
+
onError,
|
|
184
|
+
timeout,
|
|
185
|
+
className,
|
|
186
|
+
children,
|
|
187
|
+
"aria-label": ariaLabel,
|
|
188
|
+
...props
|
|
189
|
+
}) => {
|
|
190
|
+
const { t } = useLocale();
|
|
191
|
+
const { raw } = useStackTrace();
|
|
192
|
+
const { copied: isCopied, copy } = useCopyToClipboard(
|
|
193
|
+
timeout === void 0 ? void 0 : { resetAfterMs: timeout }
|
|
194
|
+
);
|
|
195
|
+
const copyToClipboard = useCallback(async () => {
|
|
196
|
+
const ok = await copy(raw);
|
|
197
|
+
if (ok) {
|
|
198
|
+
onCopy?.();
|
|
199
|
+
} else {
|
|
200
|
+
onError?.(new Error("Clipboard API not available"));
|
|
201
|
+
}
|
|
202
|
+
}, [copy, raw, onCopy, onError]);
|
|
203
|
+
const Icon = isCopied ? CheckIcon : CopyIcon;
|
|
204
|
+
return /* @__PURE__ */ jsx(
|
|
205
|
+
Button,
|
|
206
|
+
{
|
|
207
|
+
"aria-label": ariaLabel ?? t("copy"),
|
|
208
|
+
className: cn("size-7", className),
|
|
209
|
+
onClick: copyToClipboard,
|
|
210
|
+
size: "icon",
|
|
211
|
+
variant: "ghost",
|
|
212
|
+
...props,
|
|
213
|
+
children: children ?? /* @__PURE__ */ jsx(Icon, { size: 14 })
|
|
214
|
+
}
|
|
215
|
+
);
|
|
216
|
+
}
|
|
217
|
+
);
|
|
218
|
+
var StackTraceExpandButton = memo(
|
|
219
|
+
({ className, ...props }) => {
|
|
220
|
+
const { isOpen } = useStackTrace();
|
|
221
|
+
return /* @__PURE__ */ jsx("div", { className: cn("flex size-7 items-center justify-center", className), ...props, children: /* @__PURE__ */ jsx(
|
|
222
|
+
ChevronDownIcon,
|
|
223
|
+
{
|
|
224
|
+
className: cn(
|
|
225
|
+
"size-4 text-muted-foreground transition-transform",
|
|
226
|
+
isOpen ? "rotate-180" : "rotate-0"
|
|
227
|
+
)
|
|
228
|
+
}
|
|
229
|
+
) });
|
|
230
|
+
}
|
|
231
|
+
);
|
|
232
|
+
var StackTraceContent = memo(
|
|
233
|
+
({ className, maxHeight = 400, children, ...props }) => {
|
|
234
|
+
const { isOpen } = useStackTrace();
|
|
235
|
+
return /* @__PURE__ */ jsx(Collapsible, { open: isOpen, children: /* @__PURE__ */ jsx(
|
|
236
|
+
CollapsibleContent,
|
|
237
|
+
{
|
|
238
|
+
className: cn(
|
|
239
|
+
"overflow-auto border-t bg-muted/30",
|
|
240
|
+
"data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:animate-out data-[state=open]:animate-in",
|
|
241
|
+
className
|
|
242
|
+
),
|
|
243
|
+
style: { maxHeight },
|
|
244
|
+
...props,
|
|
245
|
+
children
|
|
246
|
+
}
|
|
247
|
+
) });
|
|
248
|
+
}
|
|
249
|
+
);
|
|
250
|
+
var FilePathButton = memo(({ frame, onFilePathClick }) => {
|
|
251
|
+
const handleClick = useCallback(() => {
|
|
252
|
+
if (frame.filePath) {
|
|
253
|
+
onFilePathClick?.(
|
|
254
|
+
frame.filePath,
|
|
255
|
+
frame.lineNumber ?? void 0,
|
|
256
|
+
frame.columnNumber ?? void 0
|
|
257
|
+
);
|
|
258
|
+
}
|
|
259
|
+
}, [frame, onFilePathClick]);
|
|
260
|
+
return /* @__PURE__ */ jsxs(
|
|
261
|
+
"button",
|
|
262
|
+
{
|
|
263
|
+
className: cn(
|
|
264
|
+
// #399 — a frame link is body text; the hover ink takes the `-text` rung.
|
|
265
|
+
"underline decoration-dotted hover:text-primary-text",
|
|
266
|
+
onFilePathClick && "cursor-pointer"
|
|
267
|
+
),
|
|
268
|
+
disabled: !onFilePathClick,
|
|
269
|
+
onClick: handleClick,
|
|
270
|
+
type: "button",
|
|
271
|
+
children: [
|
|
272
|
+
frame.filePath,
|
|
273
|
+
frame.lineNumber !== null && `:${frame.lineNumber}`,
|
|
274
|
+
frame.columnNumber !== null && `:${frame.columnNumber}`
|
|
275
|
+
]
|
|
276
|
+
}
|
|
277
|
+
);
|
|
278
|
+
});
|
|
279
|
+
FilePathButton.displayName = "FilePathButton";
|
|
280
|
+
var StackTraceFrames = memo(
|
|
281
|
+
({ className, showInternalFrames = true, ...props }) => {
|
|
282
|
+
const { trace, onFilePathClick } = useStackTrace();
|
|
283
|
+
const { t } = useLocale();
|
|
284
|
+
const framesToShow = showInternalFrames ? trace.frames : trace.frames.filter((f) => !f.isInternal);
|
|
285
|
+
return /* @__PURE__ */ jsxs("div", { className: cn("space-y-1 p-3", className), ...props, children: [
|
|
286
|
+
framesToShow.map((frame) => /* @__PURE__ */ jsxs(
|
|
287
|
+
"div",
|
|
288
|
+
{
|
|
289
|
+
className: cn(
|
|
290
|
+
"text-meta",
|
|
291
|
+
frame.isInternal ? "text-muted-foreground/50" : "text-foreground/90"
|
|
292
|
+
),
|
|
293
|
+
children: [
|
|
294
|
+
/* @__PURE__ */ jsx("span", { className: "text-muted-foreground", children: "at " }),
|
|
295
|
+
frame.functionName && /* @__PURE__ */ jsxs("span", { className: frame.isInternal ? "" : "text-foreground", children: [
|
|
296
|
+
frame.functionName,
|
|
297
|
+
" "
|
|
298
|
+
] }),
|
|
299
|
+
frame.filePath && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
300
|
+
/* @__PURE__ */ jsx("span", { className: "text-muted-foreground", children: "(" }),
|
|
301
|
+
/* @__PURE__ */ jsx(FilePathButton, { frame, onFilePathClick }),
|
|
302
|
+
/* @__PURE__ */ jsx("span", { className: "text-muted-foreground", children: ")" })
|
|
303
|
+
] }),
|
|
304
|
+
!(frame.filePath || frame.functionName) && /* @__PURE__ */ jsx("span", { children: frame.raw.replace(AT_PREFIX_REGEX, "") })
|
|
305
|
+
]
|
|
306
|
+
},
|
|
307
|
+
frame.raw
|
|
308
|
+
)),
|
|
309
|
+
framesToShow.length === 0 && /* @__PURE__ */ jsx("div", { className: "text-muted-foreground text-meta", children: t("ai.stackTrace.empty") })
|
|
310
|
+
] });
|
|
311
|
+
}
|
|
312
|
+
);
|
|
313
|
+
StackTrace.displayName = "StackTrace";
|
|
314
|
+
StackTraceHeader.displayName = "StackTraceHeader";
|
|
315
|
+
StackTraceError.displayName = "StackTraceError";
|
|
316
|
+
StackTraceErrorType.displayName = "StackTraceErrorType";
|
|
317
|
+
StackTraceErrorMessage.displayName = "StackTraceErrorMessage";
|
|
318
|
+
StackTraceActions.displayName = "StackTraceActions";
|
|
319
|
+
StackTraceCopyButton.displayName = "StackTraceCopyButton";
|
|
320
|
+
StackTraceExpandButton.displayName = "StackTraceExpandButton";
|
|
321
|
+
StackTraceContent.displayName = "StackTraceContent";
|
|
322
|
+
StackTraceFrames.displayName = "StackTraceFrames";
|
|
323
|
+
|
|
324
|
+
export {
|
|
325
|
+
StackTrace,
|
|
326
|
+
StackTraceHeader,
|
|
327
|
+
StackTraceError,
|
|
328
|
+
StackTraceErrorType,
|
|
329
|
+
StackTraceErrorMessage,
|
|
330
|
+
StackTraceActions,
|
|
331
|
+
StackTraceCopyButton,
|
|
332
|
+
StackTraceExpandButton,
|
|
333
|
+
StackTraceContent,
|
|
334
|
+
StackTraceFrames
|
|
335
|
+
};
|
|
336
|
+
//# sourceMappingURL=chunk-BBHFOYML.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/stack-trace.tsx"],"sourcesContent":["\"use client\";\n\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { Button } from \"@elabs-ai/components-ui\";\nimport { Collapsible, CollapsibleContent, CollapsibleTrigger } from \"@elabs-ai/components-ui\";\nimport { useCopyToClipboard, useLocale } from \"@elabs-ai/components-ui\";\nimport { cn } from \"@elabs-ai/components-ui/lib/cn\";\nimport { AlertTriangleIcon, CheckIcon, ChevronDownIcon, CopyIcon } from \"lucide-react\";\nimport type { ComponentProps } from \"react\";\nimport { createContext, memo, useCallback, useContext, useMemo } from \"react\";\n\n// Regex patterns for parsing stack traces\nconst STACK_FRAME_WITH_PARENS_REGEX = /^at\\s+(.+?)\\s+\\((.+):(\\d+):(\\d+)\\)$/;\nconst STACK_FRAME_WITHOUT_FN_REGEX = /^at\\s+(.+):(\\d+):(\\d+)$/;\nconst ERROR_TYPE_REGEX = /^(\\w+Error|Error):\\s*(.*)$/;\nconst AT_PREFIX_REGEX = /^at\\s+/;\n\ninterface StackFrame {\n raw: string;\n functionName: string | null;\n filePath: string | null;\n lineNumber: number | null;\n columnNumber: number | null;\n isInternal: boolean;\n}\n\ninterface ParsedStackTrace {\n errorType: string | null;\n errorMessage: string;\n frames: StackFrame[];\n raw: string;\n}\n\ninterface StackTraceContextValue {\n trace: ParsedStackTrace;\n raw: string;\n isOpen: boolean;\n setIsOpen: (open: boolean) => void;\n onFilePathClick?: (filePath: string, line?: number, column?: number) => void;\n}\n\nconst StackTraceContext = createContext<StackTraceContextValue | null>(null);\n\nconst useStackTrace = () => {\n const context = useContext(StackTraceContext);\n if (!context) {\n throw new Error(\"StackTrace components must be used within StackTrace\");\n }\n return context;\n};\n\nconst parseStackFrame = (line: string): StackFrame => {\n const trimmed = line.trim();\n\n // Pattern: at functionName (filePath:line:column)\n const withParensMatch = trimmed.match(STACK_FRAME_WITH_PARENS_REGEX);\n if (withParensMatch) {\n const [, functionName, filePath, lineNum, colNum] = withParensMatch;\n const isInternal =\n (filePath?.includes(\"node_modules\") ?? false) ||\n (filePath?.startsWith(\"node:\") ?? false) ||\n (filePath?.includes(\"internal/\") ?? false);\n return {\n columnNumber: colNum ? Number.parseInt(colNum, 10) : null,\n filePath: filePath ?? null,\n functionName: functionName ?? null,\n isInternal,\n lineNumber: lineNum ? Number.parseInt(lineNum, 10) : null,\n raw: trimmed,\n };\n }\n\n // Pattern: at filePath:line:column (no function name)\n const withoutFnMatch = trimmed.match(STACK_FRAME_WITHOUT_FN_REGEX);\n if (withoutFnMatch) {\n const [, filePath, lineNum, colNum] = withoutFnMatch;\n const isInternal =\n (filePath?.includes(\"node_modules\") ?? false) ||\n (filePath?.startsWith(\"node:\") ?? false) ||\n (filePath?.includes(\"internal/\") ?? false);\n return {\n columnNumber: colNum ? Number.parseInt(colNum, 10) : null,\n filePath: filePath ?? null,\n functionName: null,\n isInternal,\n lineNumber: lineNum ? Number.parseInt(lineNum, 10) : null,\n raw: trimmed,\n };\n }\n\n // Fallback: unparseable line\n return {\n columnNumber: null,\n filePath: null,\n functionName: null,\n isInternal: trimmed.includes(\"node_modules\") || trimmed.includes(\"node:\"),\n lineNumber: null,\n raw: trimmed,\n };\n};\n\nconst parseStackTrace = (trace: string): ParsedStackTrace => {\n const lines = trace.split(\"\\n\").filter((line) => line.trim());\n\n if (lines.length === 0) {\n return {\n errorMessage: trace,\n errorType: null,\n frames: [],\n raw: trace,\n };\n }\n\n const firstLine = lines[0]?.trim() ?? \"\";\n let errorType: string | null = null;\n let errorMessage = firstLine;\n\n // Try to extract error type from \"ErrorType: message\" format\n const errorMatch = firstLine.match(ERROR_TYPE_REGEX);\n if (errorMatch) {\n const [, type, msg] = errorMatch;\n errorType = type ?? null;\n errorMessage = msg || \"\";\n }\n\n // Parse stack frames (lines starting with \"at\")\n const frames = lines\n .slice(1)\n .filter((line) => line.trim().startsWith(\"at \"))\n .map(parseStackFrame);\n\n return {\n errorMessage,\n errorType,\n frames,\n raw: trace,\n };\n};\n\nexport type StackTraceProps = ComponentProps<\"div\"> & {\n trace: string;\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n onFilePathClick?: (filePath: string, line?: number, column?: number) => void;\n};\n\nexport const StackTrace = memo(\n ({\n trace,\n className,\n open,\n defaultOpen = false,\n onOpenChange,\n onFilePathClick,\n children,\n ...props\n }: StackTraceProps) => {\n const [isOpen, setIsOpen] = useControllableState({\n defaultProp: defaultOpen,\n onChange: onOpenChange,\n prop: open,\n });\n\n const parsedTrace = useMemo(() => parseStackTrace(trace), [trace]);\n\n const contextValue = useMemo(\n () => ({\n isOpen,\n onFilePathClick,\n raw: trace,\n setIsOpen,\n trace: parsedTrace,\n }),\n [parsedTrace, trace, isOpen, setIsOpen, onFilePathClick],\n );\n\n return (\n <StackTraceContext.Provider value={contextValue}>\n <div\n className={cn(\n \"not-prose w-full overflow-hidden rounded-lg border bg-background font-mono text-body\",\n className,\n )}\n {...props}\n >\n {children}\n </div>\n </StackTraceContext.Provider>\n );\n },\n);\n\nexport type StackTraceHeaderProps = ComponentProps<typeof CollapsibleTrigger>;\n\nexport const StackTraceHeader = memo(({ className, children, ...props }: StackTraceHeaderProps) => {\n const { isOpen, setIsOpen } = useStackTrace();\n\n return (\n <Collapsible onOpenChange={setIsOpen} open={isOpen}>\n <CollapsibleTrigger asChild {...props}>\n <div\n className={cn(\n \"flex w-full cursor-pointer items-center gap-3 p-3 text-start transition-colors hover:bg-muted/50\",\n className,\n )}\n >\n {children}\n </div>\n </CollapsibleTrigger>\n </Collapsible>\n );\n});\n\nexport type StackTraceErrorProps = ComponentProps<\"div\">;\n\nexport const StackTraceError = memo(({ className, children, ...props }: StackTraceErrorProps) => (\n <div className={cn(\"flex flex-1 items-center gap-2 overflow-hidden\", className)} {...props}>\n <AlertTriangleIcon className=\"size-4 shrink-0 text-destructive\" />\n {children}\n </div>\n));\n\nexport type StackTraceErrorTypeProps = ComponentProps<\"span\">;\n\nexport const StackTraceErrorType = memo(\n ({ className, children, ...props }: StackTraceErrorTypeProps) => {\n const { trace } = useStackTrace();\n\n return (\n // #124: the error type NAME is running text (e.g. \"TypeError\"), not a\n // mark — ink rung, unlike the AlertTriangleIcon mark above.\n <span className={cn(\"shrink-0 font-semibold text-destructive-text\", className)} {...props}>\n {children ?? trace.errorType}\n </span>\n );\n },\n);\n\nexport type StackTraceErrorMessageProps = ComponentProps<\"span\">;\n\nexport const StackTraceErrorMessage = memo(\n ({ className, children, ...props }: StackTraceErrorMessageProps) => {\n const { trace } = useStackTrace();\n\n return (\n <span className={cn(\"truncate text-foreground\", className)} {...props}>\n {children ?? trace.errorMessage}\n </span>\n );\n },\n);\n\nexport type StackTraceActionsProps = ComponentProps<\"div\">;\n\nconst handleActionsClick = (e: React.MouseEvent) => e.stopPropagation();\nconst handleActionsKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.stopPropagation();\n }\n};\n\nexport const StackTraceActions = memo(\n ({ className, children, ...props }: StackTraceActionsProps) => (\n <div\n className={cn(\"flex shrink-0 items-center gap-1\", className)}\n onClick={handleActionsClick}\n onKeyDown={handleActionsKeyDown}\n role=\"group\"\n {...props}\n >\n {children}\n </div>\n ),\n);\n\nexport type StackTraceCopyButtonProps = ComponentProps<typeof Button> & {\n onCopy?: () => void;\n onError?: (error: Error) => void;\n timeout?: number;\n};\n\nexport const StackTraceCopyButton = memo(\n ({\n onCopy,\n onError,\n timeout,\n className,\n children,\n \"aria-label\": ariaLabel,\n ...props\n }: StackTraceCopyButtonProps) => {\n const { t } = useLocale();\n const { raw } = useStackTrace();\n // Shared implementation (`@elabs-ai/components-ui`) instead of a private\n // copy of the same copy-to-clipboard state machine (issue-workflow.md\n // dedupe finding) — see `CodeBlockCopyButton` for the reference usage.\n const { copied: isCopied, copy } = useCopyToClipboard(\n timeout === undefined ? undefined : { resetAfterMs: timeout },\n );\n\n const copyToClipboard = useCallback(async () => {\n const ok = await copy(raw);\n if (ok) {\n onCopy?.();\n } else {\n onError?.(new Error(\"Clipboard API not available\"));\n }\n }, [copy, raw, onCopy, onError]);\n\n const Icon = isCopied ? CheckIcon : CopyIcon;\n\n return (\n <Button\n aria-label={ariaLabel ?? t(\"copy\")}\n className={cn(\"size-7\", className)}\n onClick={copyToClipboard}\n size=\"icon\"\n variant=\"ghost\"\n {...props}\n >\n {children ?? <Icon size={14} />}\n </Button>\n );\n },\n);\n\nexport type StackTraceExpandButtonProps = ComponentProps<\"div\">;\n\nexport const StackTraceExpandButton = memo(\n ({ className, ...props }: StackTraceExpandButtonProps) => {\n const { isOpen } = useStackTrace();\n\n return (\n <div className={cn(\"flex size-7 items-center justify-center\", className)} {...props}>\n <ChevronDownIcon\n className={cn(\n \"size-4 text-muted-foreground transition-transform\",\n isOpen ? \"rotate-180\" : \"rotate-0\",\n )}\n />\n </div>\n );\n },\n);\n\nexport type StackTraceContentProps = ComponentProps<typeof CollapsibleContent> & {\n maxHeight?: number;\n};\n\nexport const StackTraceContent = memo(\n ({ className, maxHeight = 400, children, ...props }: StackTraceContentProps) => {\n const { isOpen } = useStackTrace();\n\n return (\n <Collapsible open={isOpen}>\n <CollapsibleContent\n className={cn(\n \"overflow-auto border-t bg-muted/30\",\n \"data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:animate-out data-[state=open]:animate-in\",\n className,\n )}\n style={{ maxHeight }}\n {...props}\n >\n {children}\n </CollapsibleContent>\n </Collapsible>\n );\n },\n);\n\nexport type StackTraceFramesProps = ComponentProps<\"div\"> & {\n showInternalFrames?: boolean;\n};\n\ninterface FilePathButtonProps {\n frame: StackFrame;\n onFilePathClick?: (filePath: string, lineNumber?: number, columnNumber?: number) => void;\n}\n\nconst FilePathButton = memo(({ frame, onFilePathClick }: FilePathButtonProps) => {\n const handleClick = useCallback(() => {\n if (frame.filePath) {\n onFilePathClick?.(\n frame.filePath,\n frame.lineNumber ?? undefined,\n frame.columnNumber ?? undefined,\n );\n }\n }, [frame, onFilePathClick]);\n\n return (\n <button\n className={cn(\n // #399 — a frame link is body text; the hover ink takes the `-text` rung.\n \"underline decoration-dotted hover:text-primary-text\",\n onFilePathClick && \"cursor-pointer\",\n )}\n disabled={!onFilePathClick}\n onClick={handleClick}\n type=\"button\"\n >\n {frame.filePath}\n {frame.lineNumber !== null && `:${frame.lineNumber}`}\n {frame.columnNumber !== null && `:${frame.columnNumber}`}\n </button>\n );\n});\n\nFilePathButton.displayName = \"FilePathButton\";\n\nexport const StackTraceFrames = memo(\n ({ className, showInternalFrames = true, ...props }: StackTraceFramesProps) => {\n const { trace, onFilePathClick } = useStackTrace();\n const { t } = useLocale();\n\n const framesToShow = showInternalFrames\n ? trace.frames\n : trace.frames.filter((f) => !f.isInternal);\n\n return (\n <div className={cn(\"space-y-1 p-3\", className)} {...props}>\n {framesToShow.map((frame) => (\n <div\n className={cn(\n \"text-meta\",\n frame.isInternal ? \"text-muted-foreground/50\" : \"text-foreground/90\",\n )}\n key={frame.raw}\n >\n <span className=\"text-muted-foreground\">at </span>\n {frame.functionName && (\n <span className={frame.isInternal ? \"\" : \"text-foreground\"}>\n {frame.functionName}{\" \"}\n </span>\n )}\n {frame.filePath && (\n <>\n <span className=\"text-muted-foreground\">(</span>\n <FilePathButton frame={frame} onFilePathClick={onFilePathClick} />\n <span className=\"text-muted-foreground\">)</span>\n </>\n )}\n {!(frame.filePath || frame.functionName) && (\n <span>{frame.raw.replace(AT_PREFIX_REGEX, \"\")}</span>\n )}\n </div>\n ))}\n {framesToShow.length === 0 && (\n <div className=\"text-muted-foreground text-meta\">{t(\"ai.stackTrace.empty\")}</div>\n )}\n </div>\n );\n },\n);\n\nStackTrace.displayName = \"StackTrace\";\nStackTraceHeader.displayName = \"StackTraceHeader\";\nStackTraceError.displayName = \"StackTraceError\";\nStackTraceErrorType.displayName = \"StackTraceErrorType\";\nStackTraceErrorMessage.displayName = \"StackTraceErrorMessage\";\nStackTraceActions.displayName = \"StackTraceActions\";\nStackTraceCopyButton.displayName = \"StackTraceCopyButton\";\nStackTraceExpandButton.displayName = \"StackTraceExpandButton\";\nStackTraceContent.displayName = \"StackTraceContent\";\nStackTraceFrames.displayName = \"StackTraceFrames\";\n"],"mappings":"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","names":[]}
|