@wallarm-org/claude-design 0.0.0-stage → 4.8.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 +114 -2
- package/bin/claude-design.js +347 -0
- package/dist/SETUP.md +130 -0
- package/dist/UPDATE.md +84 -0
- package/dist/assets/Icons/activity.svg +1 -0
- package/dist/assets/Icons/alt.svg +1 -0
- package/dist/assets/Icons/android-neutral.svg +1 -0
- package/dist/assets/Icons/android.svg +1 -0
- package/dist/assets/Icons/api.svg +1 -0
- package/dist/assets/Icons/apple-music-neutral.svg +1 -0
- package/dist/assets/Icons/apple-music.svg +1 -0
- package/dist/assets/Icons/apple-neutral.svg +1 -0
- package/dist/assets/Icons/apple-podcasts-neutral.svg +1 -0
- package/dist/assets/Icons/apple-podcasts.svg +1 -0
- package/dist/assets/Icons/apple.svg +1 -0
- package/dist/assets/Icons/archive.svg +1 -0
- package/dist/assets/Icons/arrow-big-up-dash.svg +1 -0
- package/dist/assets/Icons/arrow-big-up.svg +1 -0
- package/dist/assets/Icons/arrow-down-left.svg +1 -0
- package/dist/assets/Icons/arrow-down-right.svg +1 -0
- package/dist/assets/Icons/arrow-down.svg +1 -0
- package/dist/assets/Icons/arrow-left.svg +1 -0
- package/dist/assets/Icons/arrow-right-alt.svg +1 -0
- package/dist/assets/Icons/arrow-right.svg +1 -0
- package/dist/assets/Icons/arrow-up-down.svg +1 -0
- package/dist/assets/Icons/arrow-up-left.svg +1 -0
- package/dist/assets/Icons/arrow-up-right.svg +1 -0
- package/dist/assets/Icons/arrow-up.svg +1 -0
- package/dist/assets/Icons/artstation-neutral.svg +1 -0
- package/dist/assets/Icons/artstation.svg +1 -0
- package/dist/assets/Icons/asterisk.svg +1 -0
- package/dist/assets/Icons/audio-waveform.svg +1 -0
- package/dist/assets/Icons/aws-neutral.svg +1 -0
- package/dist/assets/Icons/aws.svg +1 -0
- package/dist/assets/Icons/badge-check.svg +1 -0
- package/dist/assets/Icons/baidu-neutral.svg +1 -0
- package/dist/assets/Icons/baidu.svg +1 -0
- package/dist/assets/Icons/bandage.svg +1 -0
- package/dist/assets/Icons/behance-neutral.svg +1 -0
- package/dist/assets/Icons/behance.svg +1 -0
- package/dist/assets/Icons/bell-cog.svg +1 -0
- package/dist/assets/Icons/bell.svg +1 -0
- package/dist/assets/Icons/binary.svg +1 -0
- package/dist/assets/Icons/book-open.svg +1 -0
- package/dist/assets/Icons/book.svg +1 -0
- package/dist/assets/Icons/boosty-neutral.svg +1 -0
- package/dist/assets/Icons/boosty.svg +1 -0
- package/dist/assets/Icons/bot.svg +1 -0
- package/dist/assets/Icons/brain.svg +1 -0
- package/dist/assets/Icons/braze-neutral.svg +1 -0
- package/dist/assets/Icons/braze.svg +1 -0
- package/dist/assets/Icons/brevo-neutral.svg +1 -0
- package/dist/assets/Icons/brevo.svg +1 -0
- package/dist/assets/Icons/bug-off.svg +1 -0
- package/dist/assets/Icons/bug-play.svg +1 -0
- package/dist/assets/Icons/bug.svg +1 -0
- package/dist/assets/Icons/building.svg +1 -0
- package/dist/assets/Icons/building2.svg +1 -0
- package/dist/assets/Icons/calendar-check.svg +1 -0
- package/dist/assets/Icons/calendar-check2.svg +1 -0
- package/dist/assets/Icons/calendar-clock.svg +1 -0
- package/dist/assets/Icons/calendar-cog.svg +1 -0
- package/dist/assets/Icons/calendar-days.svg +1 -0
- package/dist/assets/Icons/calendar-fold.svg +1 -0
- package/dist/assets/Icons/calendar-heart.svg +1 -0
- package/dist/assets/Icons/calendar-minus.svg +1 -0
- package/dist/assets/Icons/calendar-minus2.svg +1 -0
- package/dist/assets/Icons/calendar-off.svg +1 -0
- package/dist/assets/Icons/calendar-plus.svg +1 -0
- package/dist/assets/Icons/calendar-plus2.svg +1 -0
- package/dist/assets/Icons/calendar-range.svg +1 -0
- package/dist/assets/Icons/calendar-search.svg +1 -0
- package/dist/assets/Icons/calendar-x.svg +1 -0
- package/dist/assets/Icons/calendar-x2.svg +1 -0
- package/dist/assets/Icons/calendar.svg +1 -0
- package/dist/assets/Icons/chart-area.svg +1 -0
- package/dist/assets/Icons/chart-bar.svg +1 -0
- package/dist/assets/Icons/chart-column.svg +1 -0
- package/dist/assets/Icons/chart-no-axes-column.svg +1 -0
- package/dist/assets/Icons/check-check.svg +1 -0
- package/dist/assets/Icons/check.svg +1 -0
- package/dist/assets/Icons/checkbox-indeterminate.svg +1 -0
- package/dist/assets/Icons/chevron-down.svg +1 -0
- package/dist/assets/Icons/chevron-first.svg +1 -0
- package/dist/assets/Icons/chevron-last.svg +1 -0
- package/dist/assets/Icons/chevron-left.svg +1 -0
- package/dist/assets/Icons/chevron-right.svg +1 -0
- package/dist/assets/Icons/chevron-up-down.svg +1 -0
- package/dist/assets/Icons/chevron-up.svg +1 -0
- package/dist/assets/Icons/chevrons-down-up.svg +1 -0
- package/dist/assets/Icons/chevrons-down.svg +1 -0
- package/dist/assets/Icons/chevrons-left-right.svg +1 -0
- package/dist/assets/Icons/chevrons-left.svg +1 -0
- package/dist/assets/Icons/chevrons-right-left.svg +1 -0
- package/dist/assets/Icons/chevrons-right.svg +1 -0
- package/dist/assets/Icons/chevrons-up-down.svg +1 -0
- package/dist/assets/Icons/chevrons-up.svg +1 -0
- package/dist/assets/Icons/circle-arrow-down.svg +1 -0
- package/dist/assets/Icons/circle-arrow-left.svg +1 -0
- package/dist/assets/Icons/circle-arrow-out-down-left.svg +1 -0
- package/dist/assets/Icons/circle-arrow-out-down-right.svg +1 -0
- package/dist/assets/Icons/circle-arrow-out-up-left.svg +1 -0
- package/dist/assets/Icons/circle-arrow-out-up-right.svg +1 -0
- package/dist/assets/Icons/circle-arrow-right.svg +1 -0
- package/dist/assets/Icons/circle-arrow-up.svg +1 -0
- package/dist/assets/Icons/circle-check-big.svg +1 -0
- package/dist/assets/Icons/circle-check.svg +1 -0
- package/dist/assets/Icons/circle-chevron-down.svg +1 -0
- package/dist/assets/Icons/circle-chevron-left.svg +1 -0
- package/dist/assets/Icons/circle-chevron-right.svg +1 -0
- package/dist/assets/Icons/circle-chevron-up.svg +1 -0
- package/dist/assets/Icons/circle-dashed.svg +1 -0
- package/dist/assets/Icons/circle-dot-dashed.svg +1 -0
- package/dist/assets/Icons/circle-ellipsis.svg +1 -0
- package/dist/assets/Icons/circle-gauge.svg +1 -0
- package/dist/assets/Icons/circle-help.svg +1 -0
- package/dist/assets/Icons/circle-minus.svg +1 -0
- package/dist/assets/Icons/circle-plus.svg +1 -0
- package/dist/assets/Icons/circle-slash.svg +1 -0
- package/dist/assets/Icons/circle-slash2.svg +1 -0
- package/dist/assets/Icons/circle-stop.svg +1 -0
- package/dist/assets/Icons/circle.svg +1 -0
- package/dist/assets/Icons/clipboard-check.svg +1 -0
- package/dist/assets/Icons/clipboard-x.svg +1 -0
- package/dist/assets/Icons/clipboard.svg +1 -0
- package/dist/assets/Icons/clock-fading.svg +1 -0
- package/dist/assets/Icons/clock.svg +1 -0
- package/dist/assets/Icons/cloud-off.svg +1 -0
- package/dist/assets/Icons/cloud-sync.svg +1 -0
- package/dist/assets/Icons/cloud.svg +1 -0
- package/dist/assets/Icons/code.svg +1 -0
- package/dist/assets/Icons/collapse.svg +1 -0
- package/dist/assets/Icons/columns3-cog.svg +1 -0
- package/dist/assets/Icons/command.svg +1 -0
- package/dist/assets/Icons/compass.svg +1 -0
- package/dist/assets/Icons/copy-slash.svg +1 -0
- package/dist/assets/Icons/copy.svg +1 -0
- package/dist/assets/Icons/corner-down-left.svg +1 -0
- package/dist/assets/Icons/corner-down-right.svg +1 -0
- package/dist/assets/Icons/corner-left-down.svg +1 -0
- package/dist/assets/Icons/corner-left-up.svg +1 -0
- package/dist/assets/Icons/corner-right-down.svg +1 -0
- package/dist/assets/Icons/corner-right-up.svg +1 -0
- package/dist/assets/Icons/corner-up-left.svg +1 -0
- package/dist/assets/Icons/corner-up-right.svg +1 -0
- package/dist/assets/Icons/cpu.svg +1 -0
- package/dist/assets/Icons/credit-card.svg +1 -0
- package/dist/assets/Icons/crosshair.svg +1 -0
- package/dist/assets/Icons/ctrl.svg +1 -0
- package/dist/assets/Icons/database.svg +1 -0
- package/dist/assets/Icons/devianart-neutral.svg +1 -0
- package/dist/assets/Icons/devianart.svg +1 -0
- package/dist/assets/Icons/discord-neutral.svg +1 -0
- package/dist/assets/Icons/discord.svg +1 -0
- package/dist/assets/Icons/dollar-sign.svg +1 -0
- package/dist/assets/Icons/dot.svg +1 -0
- package/dist/assets/Icons/download.svg +1 -0
- package/dist/assets/Icons/dprofile-neutral.svg +1 -0
- package/dist/assets/Icons/dprofile.svg +1 -0
- package/dist/assets/Icons/dribbble-neutral.svg +1 -0
- package/dist/assets/Icons/dribbble.svg +1 -0
- package/dist/assets/Icons/droplet.svg +1 -0
- package/dist/assets/Icons/duplicate.svg +1 -0
- package/dist/assets/Icons/dzen-neutral.svg +1 -0
- package/dist/assets/Icons/dzen.svg +1 -0
- package/dist/assets/Icons/earth-lock.svg +1 -0
- package/dist/assets/Icons/earth.svg +1 -0
- package/dist/assets/Icons/ellipsis.svg +1 -0
- package/dist/assets/Icons/expand.svg +1 -0
- package/dist/assets/Icons/external-link.svg +1 -0
- package/dist/assets/Icons/eye-off.svg +1 -0
- package/dist/assets/Icons/eye.svg +1 -0
- package/dist/assets/Icons/facebook-neutral.svg +1 -0
- package/dist/assets/Icons/facebook.svg +1 -0
- package/dist/assets/Icons/fast-forward.svg +1 -0
- package/dist/assets/Icons/figma-neutral.svg +1 -0
- package/dist/assets/Icons/figma.svg +1 -0
- package/dist/assets/Icons/file-down.svg +1 -0
- package/dist/assets/Icons/file-plus.svg +1 -0
- package/dist/assets/Icons/file-text.svg +1 -0
- package/dist/assets/Icons/file.svg +1 -0
- package/dist/assets/Icons/film.svg +1 -0
- package/dist/assets/Icons/filter-x.svg +1 -0
- package/dist/assets/Icons/filter.svg +1 -0
- package/dist/assets/Icons/fingerprint-pattern.svg +1 -0
- package/dist/assets/Icons/flag.svg +1 -0
- package/dist/assets/Icons/flask-conical.svg +1 -0
- package/dist/assets/Icons/folder.svg +1 -0
- package/dist/assets/Icons/funnel-plus.svg +1 -0
- package/dist/assets/Icons/ghost.svg +1 -0
- package/dist/assets/Icons/git-branch.svg +1 -0
- package/dist/assets/Icons/git-commit-horizontal.svg +1 -0
- package/dist/assets/Icons/git-commit-vertical.svg +1 -0
- package/dist/assets/Icons/git-compare-arrows-alt.svg +1 -0
- package/dist/assets/Icons/git-compare-arrows.svg +1 -0
- package/dist/assets/Icons/git-compare.svg +1 -0
- package/dist/assets/Icons/git-fork.svg +1 -0
- package/dist/assets/Icons/git-graph.svg +1 -0
- package/dist/assets/Icons/git-merge.svg +1 -0
- package/dist/assets/Icons/git-pull-request-arrow.svg +1 -0
- package/dist/assets/Icons/git-pull-request-closed.svg +1 -0
- package/dist/assets/Icons/git-pull-request-create-arrow.svg +1 -0
- package/dist/assets/Icons/git-pull-request-create.svg +1 -0
- package/dist/assets/Icons/git-pull-request-draft.svg +1 -0
- package/dist/assets/Icons/git-pull-request.svg +1 -0
- package/dist/assets/Icons/github-neutral.svg +1 -0
- package/dist/assets/Icons/github.svg +1 -0
- package/dist/assets/Icons/globe-lock.svg +1 -0
- package/dist/assets/Icons/globe.svg +1 -0
- package/dist/assets/Icons/gmail-neutral.svg +1 -0
- package/dist/assets/Icons/gmail.svg +1 -0
- package/dist/assets/Icons/google-meet-neutral.svg +1 -0
- package/dist/assets/Icons/google-meet.svg +1 -0
- package/dist/assets/Icons/google-neutral.svg +1 -0
- package/dist/assets/Icons/google-play-neutral.svg +1 -0
- package/dist/assets/Icons/google-play.svg +1 -0
- package/dist/assets/Icons/google-podcast-neutral.svg +1 -0
- package/dist/assets/Icons/google-podcast.svg +1 -0
- package/dist/assets/Icons/google.svg +1 -0
- package/dist/assets/Icons/grip-horizontal.svg +1 -0
- package/dist/assets/Icons/grip-vertical.svg +1 -0
- package/dist/assets/Icons/hammer.svg +1 -0
- package/dist/assets/Icons/heart-pulse.svg +1 -0
- package/dist/assets/Icons/history.svg +1 -0
- package/dist/assets/Icons/home.svg +1 -0
- package/dist/assets/Icons/imo-neutral.svg +1 -0
- package/dist/assets/Icons/imo.svg +1 -0
- package/dist/assets/Icons/infinity.svg +1 -0
- package/dist/assets/Icons/info.svg +1 -0
- package/dist/assets/Icons/infobip-neutral.svg +1 -0
- package/dist/assets/Icons/infobip.svg +1 -0
- package/dist/assets/Icons/instagram-neutral.svg +1 -0
- package/dist/assets/Icons/instagram.svg +1 -0
- package/dist/assets/Icons/key-round.svg +1 -0
- package/dist/assets/Icons/key-square.svg +1 -0
- package/dist/assets/Icons/keyboard.svg +1 -0
- package/dist/assets/Icons/kickstarter-neutral.svg +1 -0
- package/dist/assets/Icons/kickstarter.svg +1 -0
- package/dist/assets/Icons/laptop.svg +1 -0
- package/dist/assets/Icons/layers.svg +1 -0
- package/dist/assets/Icons/layers2.svg +1 -0
- package/dist/assets/Icons/layers3.svg +1 -0
- package/dist/assets/Icons/layout-dashboard.svg +1 -0
- package/dist/assets/Icons/layout-grid.svg +1 -0
- package/dist/assets/Icons/layout-list.svg +1 -0
- package/dist/assets/Icons/layout-panel-left.svg +1 -0
- package/dist/assets/Icons/layout-panel-top.svg +1 -0
- package/dist/assets/Icons/layout-template.svg +1 -0
- package/dist/assets/Icons/library-big.svg +1 -0
- package/dist/assets/Icons/life-buoy.svg +1 -0
- package/dist/assets/Icons/lightbulb-off.svg +1 -0
- package/dist/assets/Icons/lightbulb.svg +1 -0
- package/dist/assets/Icons/line-neutral.svg +1 -0
- package/dist/assets/Icons/line.svg +1 -0
- package/dist/assets/Icons/link.svg +1 -0
- package/dist/assets/Icons/link2-off.svg +1 -0
- package/dist/assets/Icons/link2.svg +1 -0
- package/dist/assets/Icons/linkedin-neutral.svg +1 -0
- package/dist/assets/Icons/linkedin.svg +1 -0
- package/dist/assets/Icons/list-checks.svg +1 -0
- package/dist/assets/Icons/list-collapse.svg +1 -0
- package/dist/assets/Icons/list-filter.svg +1 -0
- package/dist/assets/Icons/list-minus.svg +1 -0
- package/dist/assets/Icons/list-ordered.svg +1 -0
- package/dist/assets/Icons/list-plus.svg +1 -0
- package/dist/assets/Icons/list-restart.svg +1 -0
- package/dist/assets/Icons/list-start.svg +1 -0
- package/dist/assets/Icons/list-todo.svg +1 -0
- package/dist/assets/Icons/list-tree.svg +1 -0
- package/dist/assets/Icons/list-video.svg +1 -0
- package/dist/assets/Icons/list-x.svg +1 -0
- package/dist/assets/Icons/list.svg +1 -0
- package/dist/assets/Icons/loader-circle.svg +1 -0
- package/dist/assets/Icons/loader.svg +1 -0
- package/dist/assets/Icons/lock-open.svg +1 -0
- package/dist/assets/Icons/lock.svg +1 -0
- package/dist/assets/Icons/log-in.svg +1 -0
- package/dist/assets/Icons/log-out.svg +1 -0
- package/dist/assets/Icons/mail-check.svg +1 -0
- package/dist/assets/Icons/mail-minus.svg +1 -0
- package/dist/assets/Icons/mail-open.svg +1 -0
- package/dist/assets/Icons/mail-plus.svg +1 -0
- package/dist/assets/Icons/mail-question.svg +1 -0
- package/dist/assets/Icons/mail-search.svg +1 -0
- package/dist/assets/Icons/mail-warning.svg +1 -0
- package/dist/assets/Icons/mail-x.svg +1 -0
- package/dist/assets/Icons/mail.svg +1 -0
- package/dist/assets/Icons/mailbox.svg +1 -0
- package/dist/assets/Icons/mailersend-neutral.svg +1 -0
- package/dist/assets/Icons/mailersend.svg +1 -0
- package/dist/assets/Icons/mailgun-neutral.svg +1 -0
- package/dist/assets/Icons/mailgun.svg +1 -0
- package/dist/assets/Icons/mailjet-neutral.svg +1 -0
- package/dist/assets/Icons/mailjet.svg +1 -0
- package/dist/assets/Icons/mails.svg +1 -0
- package/dist/assets/Icons/mailtrap-neutral.svg +1 -0
- package/dist/assets/Icons/mailtrap.svg +1 -0
- package/dist/assets/Icons/mandrill-neutral.svg +1 -0
- package/dist/assets/Icons/mandrill.svg +1 -0
- package/dist/assets/Icons/map-pin.svg +1 -0
- package/dist/assets/Icons/maqsam-neutral.svg +1 -0
- package/dist/assets/Icons/maqsam.svg +1 -0
- package/dist/assets/Icons/mattermost-neutral.svg +1 -0
- package/dist/assets/Icons/mattermost.svg +1 -0
- package/dist/assets/Icons/maximize.svg +1 -0
- package/dist/assets/Icons/maximize2.svg +1 -0
- package/dist/assets/Icons/medium-neutral.svg +1 -0
- package/dist/assets/Icons/medium.svg +1 -0
- package/dist/assets/Icons/megaphone-off.svg +1 -0
- package/dist/assets/Icons/megaphone.svg +1 -0
- package/dist/assets/Icons/menu.svg +1 -0
- package/dist/assets/Icons/merge.svg +1 -0
- package/dist/assets/Icons/message-square-code.svg +1 -0
- package/dist/assets/Icons/message-square-dashed.svg +1 -0
- package/dist/assets/Icons/message-square-diff.svg +1 -0
- package/dist/assets/Icons/message-square-dot.svg +1 -0
- package/dist/assets/Icons/message-square-heart.svg +1 -0
- package/dist/assets/Icons/message-square-off.svg +1 -0
- package/dist/assets/Icons/message-square-plus.svg +1 -0
- package/dist/assets/Icons/message-square-quote.svg +1 -0
- package/dist/assets/Icons/message-square-reply.svg +1 -0
- package/dist/assets/Icons/message-square-share.svg +1 -0
- package/dist/assets/Icons/message-square-text.svg +1 -0
- package/dist/assets/Icons/message-square-warning.svg +1 -0
- package/dist/assets/Icons/message-square-x.svg +1 -0
- package/dist/assets/Icons/message-square.svg +1 -0
- package/dist/assets/Icons/messages-square.svg +1 -0
- package/dist/assets/Icons/messenger-neutral.svg +1 -0
- package/dist/assets/Icons/messenger.svg +1 -0
- package/dist/assets/Icons/microsoft-neutral.svg +1 -0
- package/dist/assets/Icons/microsoft-teams-neutral.svg +1 -0
- package/dist/assets/Icons/microsoft-teams.svg +1 -0
- package/dist/assets/Icons/microsoft.svg +1 -0
- package/dist/assets/Icons/minimize.svg +1 -0
- package/dist/assets/Icons/minimize2.svg +1 -0
- package/dist/assets/Icons/minus.svg +1 -0
- package/dist/assets/Icons/moon.svg +1 -0
- package/dist/assets/Icons/mouse-pointer-ban.svg +1 -0
- package/dist/assets/Icons/mouse-pointer-click.svg +1 -0
- package/dist/assets/Icons/mouse-pointer.svg +1 -0
- package/dist/assets/Icons/mouse-pointer2.svg +1 -0
- package/dist/assets/Icons/mouse.svg +1 -0
- package/dist/assets/Icons/move-diagonal.svg +1 -0
- package/dist/assets/Icons/move-diagonal2.svg +1 -0
- package/dist/assets/Icons/move-down-left.svg +1 -0
- package/dist/assets/Icons/move-down-right.svg +1 -0
- package/dist/assets/Icons/move-down.svg +1 -0
- package/dist/assets/Icons/move-horizontal.svg +1 -0
- package/dist/assets/Icons/move-left.svg +1 -0
- package/dist/assets/Icons/move-right.svg +1 -0
- package/dist/assets/Icons/move-up-left.svg +1 -0
- package/dist/assets/Icons/move-up-right.svg +1 -0
- package/dist/assets/Icons/move-up.svg +1 -0
- package/dist/assets/Icons/move-vertical.svg +1 -0
- package/dist/assets/Icons/move3-d.svg +1 -0
- package/dist/assets/Icons/netcore-neutral.svg +1 -0
- package/dist/assets/Icons/netcore.svg +1 -0
- package/dist/assets/Icons/notebook-pen.svg +1 -0
- package/dist/assets/Icons/notebook-tabs.svg +1 -0
- package/dist/assets/Icons/notebook-text.svg +1 -0
- package/dist/assets/Icons/notebook.svg +1 -0
- package/dist/assets/Icons/notepad-text-dashed.svg +1 -0
- package/dist/assets/Icons/notepad-text.svg +1 -0
- package/dist/assets/Icons/notion-neutral.svg +1 -0
- package/dist/assets/Icons/notion.svg +1 -0
- package/dist/assets/Icons/octagon-alert.svg +1 -0
- package/dist/assets/Icons/octagon-pause.svg +1 -0
- package/dist/assets/Icons/octagon-x.svg +1 -0
- package/dist/assets/Icons/octagon.svg +1 -0
- package/dist/assets/Icons/ok-neutral.svg +1 -0
- package/dist/assets/Icons/ok-only-sign-neutral.svg +1 -0
- package/dist/assets/Icons/ok-only-sign.svg +1 -0
- package/dist/assets/Icons/ok.svg +1 -0
- package/dist/assets/Icons/onlyfans-neutral.svg +1 -0
- package/dist/assets/Icons/onlyfans.svg +1 -0
- package/dist/assets/Icons/option.svg +1 -0
- package/dist/assets/Icons/outlook365-neutral.svg +1 -0
- package/dist/assets/Icons/outlook365.svg +1 -0
- package/dist/assets/Icons/paintbrush.svg +1 -0
- package/dist/assets/Icons/panel-bottom-open.svg +1 -0
- package/dist/assets/Icons/panel-bottom.svg +1 -0
- package/dist/assets/Icons/panel-left-close.svg +1 -0
- package/dist/assets/Icons/panel-left-dashed.svg +1 -0
- package/dist/assets/Icons/panel-left-open.svg +1 -0
- package/dist/assets/Icons/panel-left.svg +1 -0
- package/dist/assets/Icons/panel-right-animated.svg +1 -0
- package/dist/assets/Icons/panel-right-close.svg +1 -0
- package/dist/assets/Icons/panel-right-dashed.svg +1 -0
- package/dist/assets/Icons/panel-right-open.svg +1 -0
- package/dist/assets/Icons/panel-right.svg +1 -0
- package/dist/assets/Icons/panel-top-bottom-dashed.svg +1 -0
- package/dist/assets/Icons/panel-top-close.svg +1 -0
- package/dist/assets/Icons/panel-top-open.svg +1 -0
- package/dist/assets/Icons/panel-top.svg +1 -0
- package/dist/assets/Icons/panels-left-bottom.svg +1 -0
- package/dist/assets/Icons/panels-right-bottom.svg +1 -0
- package/dist/assets/Icons/panels-top-left.svg +1 -0
- package/dist/assets/Icons/paperclip.svg +1 -0
- package/dist/assets/Icons/patreon-neutral.svg +1 -0
- package/dist/assets/Icons/patreon.svg +1 -0
- package/dist/assets/Icons/paypal-neutral.svg +1 -0
- package/dist/assets/Icons/paypal.svg +1 -0
- package/dist/assets/Icons/pen-line.svg +1 -0
- package/dist/assets/Icons/pen-off.svg +1 -0
- package/dist/assets/Icons/pen-tool.svg +1 -0
- package/dist/assets/Icons/pen.svg +1 -0
- package/dist/assets/Icons/pencil-line.svg +1 -0
- package/dist/assets/Icons/pencil-off.svg +1 -0
- package/dist/assets/Icons/pencil-ruler.svg +1 -0
- package/dist/assets/Icons/pencil.svg +1 -0
- package/dist/assets/Icons/pentagon.svg +1 -0
- package/dist/assets/Icons/percentage.svg +1 -0
- package/dist/assets/Icons/phone.svg +1 -0
- package/dist/assets/Icons/pin-off.svg +1 -0
- package/dist/assets/Icons/pin.svg +1 -0
- package/dist/assets/Icons/pinterest-neutral.svg +1 -0
- package/dist/assets/Icons/pinterest.svg +1 -0
- package/dist/assets/Icons/play.svg +1 -0
- package/dist/assets/Icons/plug.svg +1 -0
- package/dist/assets/Icons/plunk-neutral.svg +1 -0
- package/dist/assets/Icons/plunk.svg +1 -0
- package/dist/assets/Icons/plus.svg +1 -0
- package/dist/assets/Icons/postmark-neutral.svg +1 -0
- package/dist/assets/Icons/postmark.svg +1 -0
- package/dist/assets/Icons/product-hunt-neutral.svg +1 -0
- package/dist/assets/Icons/product-hunt.svg +1 -0
- package/dist/assets/Icons/quora-neutral.svg +1 -0
- package/dist/assets/Icons/quora.svg +1 -0
- package/dist/assets/Icons/quote.svg +1 -0
- package/dist/assets/Icons/radar.svg +1 -0
- package/dist/assets/Icons/reddit-neutral.svg +1 -0
- package/dist/assets/Icons/reddit.svg +1 -0
- package/dist/assets/Icons/redo-dot.svg +1 -0
- package/dist/assets/Icons/redo.svg +1 -0
- package/dist/assets/Icons/redo2.svg +1 -0
- package/dist/assets/Icons/refresh-ccw.svg +1 -0
- package/dist/assets/Icons/refresh-cw-off.svg +1 -0
- package/dist/assets/Icons/resend-neutral.svg +1 -0
- package/dist/assets/Icons/resend.svg +1 -0
- package/dist/assets/Icons/rss.svg +1 -0
- package/dist/assets/Icons/rules.svg +1 -0
- package/dist/assets/Icons/scan-line.svg +1 -0
- package/dist/assets/Icons/scroll-text.svg +1 -0
- package/dist/assets/Icons/search-hint.svg +1 -0
- package/dist/assets/Icons/search-x.svg +1 -0
- package/dist/assets/Icons/search.svg +1 -0
- package/dist/assets/Icons/sendgrid-neutral.svg +1 -0
- package/dist/assets/Icons/sendgrid.svg +1 -0
- package/dist/assets/Icons/server.svg +1 -0
- package/dist/assets/Icons/ses-neutral.svg +1 -0
- package/dist/assets/Icons/ses.svg +1 -0
- package/dist/assets/Icons/settings.svg +1 -0
- package/dist/assets/Icons/settings2.svg +1 -0
- package/dist/assets/Icons/shapes.svg +1 -0
- package/dist/assets/Icons/share.svg +1 -0
- package/dist/assets/Icons/sheet.svg +1 -0
- package/dist/assets/Icons/shield-alert.svg +1 -0
- package/dist/assets/Icons/shield-ban.svg +1 -0
- package/dist/assets/Icons/shield-check.svg +1 -0
- package/dist/assets/Icons/shield-ellipsis.svg +1 -0
- package/dist/assets/Icons/shield-half.svg +1 -0
- package/dist/assets/Icons/shield-minus.svg +1 -0
- package/dist/assets/Icons/shield-off.svg +1 -0
- package/dist/assets/Icons/shield-plus.svg +1 -0
- package/dist/assets/Icons/shield-question.svg +1 -0
- package/dist/assets/Icons/shield-user.svg +1 -0
- package/dist/assets/Icons/shield-x.svg +1 -0
- package/dist/assets/Icons/shield.svg +1 -0
- package/dist/assets/Icons/shift.svg +1 -0
- package/dist/assets/Icons/signal-neutral.svg +1 -0
- package/dist/assets/Icons/signal.svg +1 -0
- package/dist/assets/Icons/signpost.svg +1 -0
- package/dist/assets/Icons/sina-weibo-neutral.svg +1 -0
- package/dist/assets/Icons/sina-weibo.svg +1 -0
- package/dist/assets/Icons/skull.svg +1 -0
- package/dist/assets/Icons/skype-neutral.svg +1 -0
- package/dist/assets/Icons/skype.svg +1 -0
- package/dist/assets/Icons/slack-neutral.svg +1 -0
- package/dist/assets/Icons/slack.svg +1 -0
- package/dist/assets/Icons/sliders-horizontal.svg +1 -0
- package/dist/assets/Icons/sliders-vertical.svg +1 -0
- package/dist/assets/Icons/smtp-neutral.svg +1 -0
- package/dist/assets/Icons/smtp.svg +1 -0
- package/dist/assets/Icons/snapchat-neutral.svg +1 -0
- package/dist/assets/Icons/snapchat.svg +1 -0
- package/dist/assets/Icons/soundcloud-neutral.svg +1 -0
- package/dist/assets/Icons/soundcloud.svg +1 -0
- package/dist/assets/Icons/space.svg +1 -0
- package/dist/assets/Icons/sparkpost-neutral.svg +1 -0
- package/dist/assets/Icons/sparkpost.svg +1 -0
- package/dist/assets/Icons/speed.svg +1 -0
- package/dist/assets/Icons/split.svg +1 -0
- package/dist/assets/Icons/spotify-neutral.svg +1 -0
- package/dist/assets/Icons/spotify.svg +1 -0
- package/dist/assets/Icons/square-arrow-out-up-right.svg +1 -0
- package/dist/assets/Icons/square-minus.svg +1 -0
- package/dist/assets/Icons/square-pen.svg +1 -0
- package/dist/assets/Icons/square-plus.svg +1 -0
- package/dist/assets/Icons/square-user-round.svg +1 -0
- package/dist/assets/Icons/stack-overflow-neutral.svg +1 -0
- package/dist/assets/Icons/stack-overflow.svg +1 -0
- package/dist/assets/Icons/star.svg +1 -0
- package/dist/assets/Icons/sun.svg +1 -0
- package/dist/assets/Icons/syringe.svg +1 -0
- package/dist/assets/Icons/tag.svg +1 -0
- package/dist/assets/Icons/target.svg +1 -0
- package/dist/assets/Icons/teams-neutral.svg +1 -0
- package/dist/assets/Icons/teams.svg +1 -0
- package/dist/assets/Icons/telegram-neutral.svg +1 -0
- package/dist/assets/Icons/telegram-only-sign-neutral.svg +1 -0
- package/dist/assets/Icons/telegram-only-sign.svg +1 -0
- package/dist/assets/Icons/telegram.svg +1 -0
- package/dist/assets/Icons/terminal.svg +1 -0
- package/dist/assets/Icons/test-policies.svg +1 -0
- package/dist/assets/Icons/threads-neutral.svg +1 -0
- package/dist/assets/Icons/threads.svg +1 -0
- package/dist/assets/Icons/thumbs-down.svg +1 -0
- package/dist/assets/Icons/thumbs-up.svg +1 -0
- package/dist/assets/Icons/tiktok-neutral.svg +1 -0
- package/dist/assets/Icons/tiktok.svg +1 -0
- package/dist/assets/Icons/tinder-neutral.svg +1 -0
- package/dist/assets/Icons/tinder.svg +1 -0
- package/dist/assets/Icons/trash.svg +1 -0
- package/dist/assets/Icons/trash2.svg +1 -0
- package/dist/assets/Icons/triangle-alert.svg +1 -0
- package/dist/assets/Icons/tumblr-neutral.svg +1 -0
- package/dist/assets/Icons/tumblr.svg +1 -0
- package/dist/assets/Icons/twitch-neutral.svg +1 -0
- package/dist/assets/Icons/twitch.svg +1 -0
- package/dist/assets/Icons/undo-dot.svg +1 -0
- package/dist/assets/Icons/undo.svg +1 -0
- package/dist/assets/Icons/undo2.svg +1 -0
- package/dist/assets/Icons/unplug.svg +1 -0
- package/dist/assets/Icons/user-check.svg +1 -0
- package/dist/assets/Icons/user-minus.svg +1 -0
- package/dist/assets/Icons/user-plus.svg +1 -0
- package/dist/assets/Icons/user-round-x.svg +1 -0
- package/dist/assets/Icons/user-round.svg +1 -0
- package/dist/assets/Icons/user.svg +1 -0
- package/dist/assets/Icons/username.svg +1 -0
- package/dist/assets/Icons/users-round.svg +1 -0
- package/dist/assets/Icons/users.svg +1 -0
- package/dist/assets/Icons/viber-neutral.svg +1 -0
- package/dist/assets/Icons/viber.svg +1 -0
- package/dist/assets/Icons/video.svg +1 -0
- package/dist/assets/Icons/vimeo-neutral.svg +1 -0
- package/dist/assets/Icons/vimeo.svg +1 -0
- package/dist/assets/Icons/vk-music-neutral.svg +1 -0
- package/dist/assets/Icons/vk-music.svg +1 -0
- package/dist/assets/Icons/vk-neutral.svg +1 -0
- package/dist/assets/Icons/vk-only-sign-neutral.svg +1 -0
- package/dist/assets/Icons/vk-only-sign.svg +1 -0
- package/dist/assets/Icons/vk.svg +1 -0
- package/dist/assets/Icons/webhook-neutral.svg +1 -0
- package/dist/assets/Icons/webhook.svg +1 -0
- package/dist/assets/Icons/wechat-neutral.svg +1 -0
- package/dist/assets/Icons/wechat.svg +1 -0
- package/dist/assets/Icons/whatsapp-badge-neutral.svg +1 -0
- package/dist/assets/Icons/whatsapp-badge.svg +1 -0
- package/dist/assets/Icons/whatsapp-neutral.svg +1 -0
- package/dist/assets/Icons/whatsapp.svg +1 -0
- package/dist/assets/Icons/workflow.svg +1 -0
- package/dist/assets/Icons/wrap-text.svg +1 -0
- package/dist/assets/Icons/wrench.svg +1 -0
- package/dist/assets/Icons/x-ex-twitter-neutral.svg +1 -0
- package/dist/assets/Icons/x-ex-twitter.svg +1 -0
- package/dist/assets/Icons/x.svg +1 -0
- package/dist/assets/Icons/xing-neutral.svg +1 -0
- package/dist/assets/Icons/xing.svg +1 -0
- package/dist/assets/Icons/yandex-music-neutral.svg +1 -0
- package/dist/assets/Icons/yandex-music.svg +1 -0
- package/dist/assets/Icons/yelp-neutral.svg +1 -0
- package/dist/assets/Icons/yelp.svg +1 -0
- package/dist/assets/Icons/youtube-music-neutral.svg +1 -0
- package/dist/assets/Icons/youtube-music.svg +1 -0
- package/dist/assets/Icons/youtube-neutral.svg +1 -0
- package/dist/assets/Icons/youtube-shorts-neutral.svg +1 -0
- package/dist/assets/Icons/youtube-shorts.svg +1 -0
- package/dist/assets/Icons/youtube.svg +1 -0
- package/dist/assets/Icons/zap.svg +1 -0
- package/dist/assets/Icons/zoom-in.svg +1 -0
- package/dist/assets/Icons/zoom-neutral.svg +1 -0
- package/dist/assets/Icons/zoom-out.svg +1 -0
- package/dist/assets/Icons/zoom.svg +1 -0
- package/dist/assets/Icons/zulip-neutral.svg +1 -0
- package/dist/assets/Icons/zulip.svg +1 -0
- package/dist/assets/Logos/wallarm.svg +1 -0
- package/dist/assets.json +4666 -0
- package/dist/project/README.md +265 -0
- package/dist/project/components/Accordion/README.md +354 -0
- package/dist/project/components/Accordion/preview.html +2 -0
- package/dist/project/components/Accordion/stories.js +12 -0
- package/dist/project/components/AgentAvatar/README.md +127 -0
- package/dist/project/components/AgentAvatar/preview.html +2 -0
- package/dist/project/components/AgentAvatar/stories.js +12 -0
- package/dist/project/components/AgentAvatar/stories.md +1805 -0
- package/dist/project/components/AgentGlyph/README.md +1182 -0
- package/dist/project/components/AgentGlyph/preview.html +2 -0
- package/dist/project/components/AgentGlyph/stories.js +12 -0
- package/dist/project/components/AgentLookBuilder/README.md +269 -0
- package/dist/project/components/AgentLookBuilder/preview.html +2 -0
- package/dist/project/components/AgentLookBuilder/stories.js +12 -0
- package/dist/project/components/Alert/README.md +492 -0
- package/dist/project/components/Alert/preview.html +2 -0
- package/dist/project/components/Alert/stories.js +12 -0
- package/dist/project/components/AnimatedBackground/README.md +124 -0
- package/dist/project/components/AnimatedBackground/preview.html +2 -0
- package/dist/project/components/AnimatedBackground/stories.js +12 -0
- package/dist/project/components/AppShell/README.md +75 -0
- package/dist/project/components/AppShell/preview.html +2 -0
- package/dist/project/components/AppShell/stories.js +28 -0
- package/dist/project/components/AppShell/stories.md +2878 -0
- package/dist/project/components/ApprovalCard/README.md +353 -0
- package/dist/project/components/ApprovalCard/preview.html +2 -0
- package/dist/project/components/ApprovalCard/stories.js +12 -0
- package/dist/project/components/AreaChart/README.md +673 -0
- package/dist/project/components/AreaChart/preview.html +2 -0
- package/dist/project/components/AreaChart/stories.js +12 -0
- package/dist/project/components/AssistantMessage/README.md +724 -0
- package/dist/project/components/AssistantMessage/preview.html +2 -0
- package/dist/project/components/AssistantMessage/stories.js +55 -0
- package/dist/project/components/Attribute/README.md +1174 -0
- package/dist/project/components/Attribute/preview.html +2 -0
- package/dist/project/components/Attribute/stories.js +12 -0
- package/dist/project/components/Avatar/README.md +416 -0
- package/dist/project/components/Avatar/preview.html +2 -0
- package/dist/project/components/Avatar/stories.js +12 -0
- package/dist/project/components/Badge/README.md +853 -0
- package/dist/project/components/Badge/preview.html +2 -0
- package/dist/project/components/Badge/stories.js +12 -0
- package/dist/project/components/Banner/README.md +341 -0
- package/dist/project/components/Banner/preview.html +2 -0
- package/dist/project/components/Banner/stories.js +12 -0
- package/dist/project/components/BarList/README.md +757 -0
- package/dist/project/components/BarList/preview.html +2 -0
- package/dist/project/components/BarList/stories.js +12 -0
- package/dist/project/components/Breadcrumbs/README.md +274 -0
- package/dist/project/components/Breadcrumbs/preview.html +2 -0
- package/dist/project/components/Breadcrumbs/stories.js +12 -0
- package/dist/project/components/BulkBar/README.md +19 -0
- package/dist/project/components/Button/README.md +467 -0
- package/dist/project/components/Button/preview.html +2 -0
- package/dist/project/components/Button/stories.js +12 -0
- package/dist/project/components/Calendar/README.md +654 -0
- package/dist/project/components/Calendar/preview.html +2 -0
- package/dist/project/components/Calendar/stories.js +12 -0
- package/dist/project/components/Card/README.md +367 -0
- package/dist/project/components/Card/preview.html +2 -0
- package/dist/project/components/Card/stories.js +12 -0
- package/dist/project/components/ChainOfThought/README.md +412 -0
- package/dist/project/components/ChainOfThought/preview.html +2 -0
- package/dist/project/components/ChainOfThought/stories.js +12 -0
- package/dist/project/components/Chart/README.md +224 -0
- package/dist/project/components/Chart/preview.html +2 -0
- package/dist/project/components/Chart/stories.js +12 -0
- package/dist/project/components/Chat/README.md +1244 -0
- package/dist/project/components/Chat/preview.html +2 -0
- package/dist/project/components/Chat/stories.js +12 -0
- package/dist/project/components/ChatInput/README.md +378 -0
- package/dist/project/components/ChatInput/preview.html +2 -0
- package/dist/project/components/ChatInput/stories.js +12 -0
- package/dist/project/components/ChatPermissions/README.md +218 -0
- package/dist/project/components/ChatPermissions/preview.html +2 -0
- package/dist/project/components/ChatPermissions/stories.js +12 -0
- package/dist/project/components/Checkbox/README.md +367 -0
- package/dist/project/components/Checkbox/preview.html +2 -0
- package/dist/project/components/Checkbox/stories.js +12 -0
- package/dist/project/components/Code/README.md +243 -0
- package/dist/project/components/Code/preview.html +2 -0
- package/dist/project/components/Code/stories.js +12 -0
- package/dist/project/components/CodeEditor/README.md +280 -0
- package/dist/project/components/CodeEditor/preview.html +2 -0
- package/dist/project/components/CodeEditor/stories.js +162 -0
- package/dist/project/components/CodeEditor/stories.md +1533 -0
- package/dist/project/components/CodeSnippet/README.md +1352 -0
- package/dist/project/components/CodeSnippet/preview.html +2 -0
- package/dist/project/components/CodeSnippet/stories.js +156 -0
- package/dist/project/components/ColumnChart/README.md +521 -0
- package/dist/project/components/ColumnChart/preview.html +2 -0
- package/dist/project/components/ColumnChart/stories.js +12 -0
- package/dist/project/components/Conversation/README.md +314 -0
- package/dist/project/components/Conversation/preview.html +2 -0
- package/dist/project/components/Conversation/stories.js +12 -0
- package/dist/project/components/Copyable/README.md +406 -0
- package/dist/project/components/Copyable/preview.html +2 -0
- package/dist/project/components/Copyable/stories.js +12 -0
- package/dist/project/components/Country/README.md +226 -0
- package/dist/project/components/Country/preview.html +2 -0
- package/dist/project/components/Country/stories.js +12 -0
- package/dist/project/components/Cover/preview.html +43 -0
- package/dist/project/components/DateInput/README.md +458 -0
- package/dist/project/components/DateInput/preview.html +2 -0
- package/dist/project/components/DateInput/stories.js +12 -0
- package/dist/project/components/DateRangeInput/README.md +412 -0
- package/dist/project/components/DateRangeInput/preview.html +2 -0
- package/dist/project/components/DateRangeInput/stories.js +12 -0
- package/dist/project/components/Dialog/README.md +1140 -0
- package/dist/project/components/Dialog/preview.html +2 -0
- package/dist/project/components/Dialog/stories.js +12 -0
- package/dist/project/components/Drawer/README.md +1163 -0
- package/dist/project/components/Drawer/preview.html +2 -0
- package/dist/project/components/Drawer/stories.js +12 -0
- package/dist/project/components/DropdownMenu/README.md +678 -0
- package/dist/project/components/DropdownMenu/preview.html +2 -0
- package/dist/project/components/DropdownMenu/stories.js +12 -0
- package/dist/project/components/EmptyState/README.md +276 -0
- package/dist/project/components/EmptyState/preview.html +2 -0
- package/dist/project/components/EmptyState/stories.js +12 -0
- package/dist/project/components/FeedbackPulse/README.md +125 -0
- package/dist/project/components/FeedbackPulse/preview.html +2 -0
- package/dist/project/components/FeedbackPulse/stories.js +12 -0
- package/dist/project/components/Field/README.md +676 -0
- package/dist/project/components/Field/preview.html +2 -0
- package/dist/project/components/Field/stories.js +12 -0
- package/dist/project/components/FileUpload/README.md +544 -0
- package/dist/project/components/FileUpload/preview.html +2 -0
- package/dist/project/components/FileUpload/stories.js +12 -0
- package/dist/project/components/FilterCascade/README.md +348 -0
- package/dist/project/components/FilterCascade/preview.html +2 -0
- package/dist/project/components/FilterCascade/stories.js +12 -0
- package/dist/project/components/FilterDropdown/README.md +542 -0
- package/dist/project/components/FilterDropdown/preview.html +2 -0
- package/dist/project/components/FilterDropdown/stories.js +12 -0
- package/dist/project/components/FilterInput/README.md +416 -0
- package/dist/project/components/FilterInput/preview.html +2 -0
- package/dist/project/components/FilterInput/stories.js +12 -0
- package/dist/project/components/FilterInput/stories.md +6682 -0
- package/dist/project/components/Flex/README.md +225 -0
- package/dist/project/components/Flex/preview.html +2 -0
- package/dist/project/components/Flex/stories.js +12 -0
- package/dist/project/components/FormatDateTime/README.md +315 -0
- package/dist/project/components/FormatDateTime/preview.html +2 -0
- package/dist/project/components/FormatDateTime/stories.js +12 -0
- package/dist/project/components/FormatNumber/README.md +317 -0
- package/dist/project/components/FormatNumber/preview.html +2 -0
- package/dist/project/components/FormatNumber/stories.js +12 -0
- package/dist/project/components/Heading/README.md +240 -0
- package/dist/project/components/Heading/preview.html +2 -0
- package/dist/project/components/Heading/stories.js +12 -0
- package/dist/project/components/HorizontalBarStack/README.md +281 -0
- package/dist/project/components/HorizontalBarStack/preview.html +2 -0
- package/dist/project/components/HorizontalBarStack/stories.js +12 -0
- package/dist/project/components/HttpMethod/README.md +137 -0
- package/dist/project/components/HttpMethod/preview.html +2 -0
- package/dist/project/components/HttpMethod/stories.js +12 -0
- package/dist/project/components/ImageCropper/README.md +332 -0
- package/dist/project/components/ImageCropper/preview.html +2 -0
- package/dist/project/components/ImageCropper/stories.js +33 -0
- package/dist/project/components/Indicator/README.md +110 -0
- package/dist/project/components/Indicator/preview.html +2 -0
- package/dist/project/components/Indicator/stories.js +12 -0
- package/dist/project/components/InlineEdit/README.md +977 -0
- package/dist/project/components/InlineEdit/preview.html +2 -0
- package/dist/project/components/InlineEdit/stories.js +12 -0
- package/dist/project/components/Input/README.md +187 -0
- package/dist/project/components/Input/preview.html +2 -0
- package/dist/project/components/Input/stories.js +12 -0
- package/dist/project/components/InputGroup/README.md +423 -0
- package/dist/project/components/InputGroup/preview.html +2 -0
- package/dist/project/components/InputGroup/stories.js +12 -0
- package/dist/project/components/InputOTP/README.md +201 -0
- package/dist/project/components/InputOTP/preview.html +2 -0
- package/dist/project/components/InputOTP/stories.js +12 -0
- package/dist/project/components/Ip/README.md +226 -0
- package/dist/project/components/Ip/preview.html +2 -0
- package/dist/project/components/Ip/stories.js +12 -0
- package/dist/project/components/Kbd/README.md +126 -0
- package/dist/project/components/Kbd/preview.html +2 -0
- package/dist/project/components/Kbd/stories.js +12 -0
- package/dist/project/components/LineChart/README.md +1479 -0
- package/dist/project/components/LineChart/preview.html +2 -0
- package/dist/project/components/LineChart/stories.js +12 -0
- package/dist/project/components/Link/README.md +160 -0
- package/dist/project/components/Link/preview.html +2 -0
- package/dist/project/components/Link/stories.js +12 -0
- package/dist/project/components/List/README.md +181 -0
- package/dist/project/components/List/preview.html +2 -0
- package/dist/project/components/List/stories.js +12 -0
- package/dist/project/components/Loader/README.md +145 -0
- package/dist/project/components/Loader/preview.html +2 -0
- package/dist/project/components/Loader/stories.js +12 -0
- package/dist/project/components/Logo/README.md +183 -0
- package/dist/project/components/Logo/preview.html +2 -0
- package/dist/project/components/Logo/stories.js +12 -0
- package/dist/project/components/MessageActions/README.md +255 -0
- package/dist/project/components/MessageActions/preview.html +2 -0
- package/dist/project/components/MessageActions/stories.js +12 -0
- package/dist/project/components/Metric/README.md +324 -0
- package/dist/project/components/Metric/preview.html +2 -0
- package/dist/project/components/Metric/stories.js +12 -0
- package/dist/project/components/NavRail/README.md +25 -0
- package/dist/project/components/NotificationCenter/README.md +91 -0
- package/dist/project/components/NotificationCenter/preview.html +2 -0
- package/dist/project/components/NotificationCenter/stories.js +12 -0
- package/dist/project/components/NotificationCenter/stories.md +2170 -0
- package/dist/project/components/NumberInput/README.md +177 -0
- package/dist/project/components/NumberInput/preview.html +2 -0
- package/dist/project/components/NumberInput/stories.js +12 -0
- package/dist/project/components/NumericBadge/README.md +252 -0
- package/dist/project/components/NumericBadge/preview.html +2 -0
- package/dist/project/components/NumericBadge/stories.js +12 -0
- package/dist/project/components/OverflowList/README.md +324 -0
- package/dist/project/components/OverflowList/preview.html +2 -0
- package/dist/project/components/OverflowList/stories.js +12 -0
- package/dist/project/components/OverflowTooltip/README.md +421 -0
- package/dist/project/components/OverflowTooltip/preview.html +2 -0
- package/dist/project/components/OverflowTooltip/stories.js +12 -0
- package/dist/project/components/Overlay/README.md +95 -0
- package/dist/project/components/Overlay/preview.html +2 -0
- package/dist/project/components/Overlay/stories.js +12 -0
- package/dist/project/components/Overview/README.md +445 -0
- package/dist/project/components/Overview/preview.html +2 -0
- package/dist/project/components/Overview/stories.js +12 -0
- package/dist/project/components/Page/README.md +215 -0
- package/dist/project/components/Page/preview.html +2 -0
- package/dist/project/components/Page/stories.js +12 -0
- package/dist/project/components/Pagination/README.md +302 -0
- package/dist/project/components/Pagination/preview.html +2 -0
- package/dist/project/components/Pagination/stories.js +12 -0
- package/dist/project/components/ParameterPath/README.md +284 -0
- package/dist/project/components/ParameterPath/preview.html +2 -0
- package/dist/project/components/ParameterPath/stories.js +12 -0
- package/dist/project/components/PasswordComplexity/README.md +171 -0
- package/dist/project/components/PasswordComplexity/preview.html +2 -0
- package/dist/project/components/PasswordComplexity/stories.js +12 -0
- package/dist/project/components/PasswordInput/README.md +254 -0
- package/dist/project/components/PasswordInput/preview.html +2 -0
- package/dist/project/components/PasswordInput/stories.js +12 -0
- package/dist/project/components/PieChart/README.md +895 -0
- package/dist/project/components/PieChart/preview.html +2 -0
- package/dist/project/components/PieChart/stories.js +12 -0
- package/dist/project/components/Popover/README.md +282 -0
- package/dist/project/components/Popover/preview.html +2 -0
- package/dist/project/components/Popover/stories.js +12 -0
- package/dist/project/components/Progress/README.md +174 -0
- package/dist/project/components/Progress/preview.html +2 -0
- package/dist/project/components/Progress/stories.js +12 -0
- package/dist/project/components/Radio/README.md +264 -0
- package/dist/project/components/Radio/preview.html +2 -0
- package/dist/project/components/Radio/stories.js +12 -0
- package/dist/project/components/RemoteShell/README.md +1758 -0
- package/dist/project/components/RemoteShell/preview.html +2 -0
- package/dist/project/components/RemoteShell/stories.js +28 -0
- package/dist/project/components/Resizable/README.md +290 -0
- package/dist/project/components/Resizable/preview.html +2 -0
- package/dist/project/components/Resizable/stories.js +12 -0
- package/dist/project/components/ResponseCode/README.md +205 -0
- package/dist/project/components/ResponseCode/preview.html +2 -0
- package/dist/project/components/ResponseCode/stories.js +12 -0
- package/dist/project/components/ScrollArea/README.md +234 -0
- package/dist/project/components/ScrollArea/preview.html +2 -0
- package/dist/project/components/ScrollArea/stories.js +12 -0
- package/dist/project/components/SearchInput/README.md +158 -0
- package/dist/project/components/SearchInput/preview.html +2 -0
- package/dist/project/components/SearchInput/stories.js +12 -0
- package/dist/project/components/SearchModal/README.md +836 -0
- package/dist/project/components/SearchModal/preview.html +2 -0
- package/dist/project/components/SearchModal/stories.js +12 -0
- package/dist/project/components/SegmentedControl/README.md +382 -0
- package/dist/project/components/SegmentedControl/preview.html +2 -0
- package/dist/project/components/SegmentedControl/stories.js +12 -0
- package/dist/project/components/SegmentedTabs/README.md +390 -0
- package/dist/project/components/SegmentedTabs/preview.html +2 -0
- package/dist/project/components/SegmentedTabs/stories.js +12 -0
- package/dist/project/components/Select/README.md +1311 -0
- package/dist/project/components/Select/preview.html +2 -0
- package/dist/project/components/Select/stories.js +12 -0
- package/dist/project/components/Selection/README.md +648 -0
- package/dist/project/components/Selection/preview.html +2 -0
- package/dist/project/components/Selection/stories.js +12 -0
- package/dist/project/components/Separator/README.md +77 -0
- package/dist/project/components/Separator/preview.html +2 -0
- package/dist/project/components/Separator/stories.js +12 -0
- package/dist/project/components/Skeleton/README.md +358 -0
- package/dist/project/components/Skeleton/preview.html +2 -0
- package/dist/project/components/Skeleton/stories.js +12 -0
- package/dist/project/components/Slider/README.md +433 -0
- package/dist/project/components/Slider/preview.html +2 -0
- package/dist/project/components/Slider/stories.js +12 -0
- package/dist/project/components/SplashScreen/README.md +192 -0
- package/dist/project/components/SplashScreen/preview.html +2 -0
- package/dist/project/components/SplashScreen/stories.js +12 -0
- package/dist/project/components/SplitButton/README.md +402 -0
- package/dist/project/components/SplitButton/preview.html +2 -0
- package/dist/project/components/SplitButton/stories.js +12 -0
- package/dist/project/components/Stack/README.md +269 -0
- package/dist/project/components/Stack/preview.html +2 -0
- package/dist/project/components/Stack/stories.js +12 -0
- package/dist/project/components/Stepper/README.md +682 -0
- package/dist/project/components/Stepper/preview.html +2 -0
- package/dist/project/components/Stepper/stories.js +12 -0
- package/dist/project/components/Switch/README.md +236 -0
- package/dist/project/components/Switch/preview.html +2 -0
- package/dist/project/components/Switch/stories.js +12 -0
- package/dist/project/components/Table/README.md +471 -0
- package/dist/project/components/Table/preview.html +2 -0
- package/dist/project/components/Table/stories.js +12 -0
- package/dist/project/components/Table/stories.md +3697 -0
- package/dist/project/components/Tabs/README.md +443 -0
- package/dist/project/components/Tabs/preview.html +2 -0
- package/dist/project/components/Tabs/stories.js +12 -0
- package/dist/project/components/Tag/README.md +324 -0
- package/dist/project/components/Tag/preview.html +2 -0
- package/dist/project/components/Tag/stories.js +12 -0
- package/dist/project/components/Text/README.md +200 -0
- package/dist/project/components/Text/preview.html +2 -0
- package/dist/project/components/Text/stories.js +12 -0
- package/dist/project/components/Textarea/README.md +273 -0
- package/dist/project/components/Textarea/preview.html +2 -0
- package/dist/project/components/Textarea/stories.js +12 -0
- package/dist/project/components/TimeInput/README.md +359 -0
- package/dist/project/components/TimeInput/preview.html +2 -0
- package/dist/project/components/TimeInput/stories.js +12 -0
- package/dist/project/components/Timeline/README.md +204 -0
- package/dist/project/components/Timeline/preview.html +2 -0
- package/dist/project/components/Timeline/stories.js +12 -0
- package/dist/project/components/Toast/README.md +718 -0
- package/dist/project/components/Toast/preview.html +2 -0
- package/dist/project/components/Toast/stories.js +12 -0
- package/dist/project/components/ToggleButton/README.md +292 -0
- package/dist/project/components/ToggleButton/preview.html +2 -0
- package/dist/project/components/ToggleButton/stories.js +12 -0
- package/dist/project/components/Tooltip/README.md +199 -0
- package/dist/project/components/Tooltip/preview.html +2 -0
- package/dist/project/components/Tooltip/stories.js +12 -0
- package/dist/project/components/TopHeader/README.md +21 -0
- package/dist/project/components/Tour/README.md +532 -0
- package/dist/project/components/Tour/preview.html +2 -0
- package/dist/project/components/Tour/stories.js +12 -0
- package/dist/project/components/Tree/README.md +450 -0
- package/dist/project/components/Tree/preview.html +2 -0
- package/dist/project/components/Tree/stories.js +12 -0
- package/dist/project/components/TreeView/README.md +531 -0
- package/dist/project/components/TreeView/preview.html +2 -0
- package/dist/project/components/TreeView/stories.js +12 -0
- package/dist/project/components/UTILITIES.md +647 -0
- package/dist/project/components/UserMessage/README.md +166 -0
- package/dist/project/components/UserMessage/preview.html +2 -0
- package/dist/project/components/UserMessage/stories.js +12 -0
- package/dist/project/components/UtilityPage/README.md +147 -0
- package/dist/project/components/UtilityPage/preview.html +2 -0
- package/dist/project/components/UtilityPage/stories.js +12 -0
- package/dist/project/components/WallyAssistant/README.md +1380 -0
- package/dist/project/components/WallyAssistant/preview.html +2 -0
- package/dist/project/components/WallyAssistant/stories.js +12 -0
- package/dist/project/components/WallyIcon/README.md +130 -0
- package/dist/project/components/WallyIcon/preview.html +2 -0
- package/dist/project/components/WallyIcon/stories.js +12 -0
- package/dist/project/components/WallySkeleton/README.md +96 -0
- package/dist/project/components/WallySkeleton/preview.html +2 -0
- package/dist/project/components/WallySkeleton/stories.js +12 -0
- package/dist/project/components/bundle.css +18734 -0
- package/dist/project/components/bundle.js +167 -0
- package/dist/project/components/index.d.ts +27226 -0
- package/dist/project/design-system.json +35 -0
- package/dist/project/fonts/Geist-Variable.woff2 +0 -0
- package/dist/project/fonts/GeistMono-Variable.woff2 +0 -0
- package/dist/project/fonts/GeistPixel-Square.woff2 +0 -0
- package/dist/project/sampler.dc.html +238 -0
- package/dist/project/tokens.css +1395 -0
- package/dist/project/tokens.json +5235 -0
- package/dist/wallarm-sampler.dc.html +239 -0
- package/package.json +67 -3
|
@@ -0,0 +1,724 @@
|
|
|
1
|
+
A message from Wally: an `<article>` named "Wally" that left-aligns the answer and whatever led up to it. Stack its parts in this order — an optional `ChainOfThought` with the reasoning and tool calls, an optional `ApprovalCard`, the `AssistantMessageContent`, then a `MessageActions` row; the message spaces them 12px and 4px apart and lines the action icons up with the text. `AssistantMessageContent` spaces and styles markdown blocks; put `AssistantMessageMarkdown` inside it (WallyAssistant's default) or your own renderer's output. `AssistantMessageMarkdown` renders untrusted GFM as DS elements — no raw HTML, http/https/mailto/relative links only, images as alt text — and is streaming-safe: pass the whole text so far with `streaming` and it repairs only the unfinished tail. Set `aria-busy` on the message while the answer streams; before the first output, show only an `AssistantMessageLoader` "Working..." row, and if the answer fails, an `AssistantMessageError` after the content with your own Retry button in `action`.
|
|
2
|
+
|
|
3
|
+
## Props as canvas attributes
|
|
4
|
+
|
|
5
|
+
Use kebab-case attribute names. Pass non-string values through renderVals holes, including booleans. The full emitted API is in `components/index.d.ts`.
|
|
6
|
+
|
|
7
|
+
| Attribute | Type | Required | Default | Description |
|
|
8
|
+
| --- | --- | --- | --- | --- |
|
|
9
|
+
| `default-checked` | `boolean \| undefined` | no | — | |
|
|
10
|
+
| `default-value` | `string \| number \| readonly string[] \| undefined` | no | — | |
|
|
11
|
+
| `auto-focus` | `boolean \| undefined` | no | — | |
|
|
12
|
+
| `id` | `string \| undefined` | no | — | |
|
|
13
|
+
| `tab-index` | `number \| undefined` | no | — | |
|
|
14
|
+
| `title` | `string \| undefined` | no | — | |
|
|
15
|
+
| `rel` | `string \| undefined` | no | — | |
|
|
16
|
+
| `on-change` | `ChangeEventHandler<T, Element> \| undefined` | no | — | |
|
|
17
|
+
| `data-testid` | `string \| undefined` | no | — | |
|
|
18
|
+
|
|
19
|
+
## Sub-components
|
|
20
|
+
|
|
21
|
+
- `WallarmDS.AssistantMessageContent` — `AssistantMessageContentProps` in the declaration bundle.
|
|
22
|
+
- `WallarmDS.AssistantMessageError` — `AssistantMessageErrorProps` in the declaration bundle.
|
|
23
|
+
- `WallarmDS.AssistantMessageLoader` — `AssistantMessageLoaderProps` in the declaration bundle.
|
|
24
|
+
- `WallarmDS.AssistantMessageMarkdown` — `AssistantMessageMarkdownProps` in the declaration bundle.
|
|
25
|
+
- `WallarmDS.AssistantMessageMarkdownCodeBlock` — `AssistantMessageMarkdownCodeBlockProps` in the declaration bundle.
|
|
26
|
+
- `WallarmDS.AssistantMessageMarkdownInlineCode` — `AssistantMessageMarkdownInlineCodeProps` in the declaration bundle.
|
|
27
|
+
- `WallarmDS.AssistantMessageMarkdownLink` — `AssistantMessageMarkdownLinkProps` in the declaration bundle.
|
|
28
|
+
- `WallarmDS.AssistantMessageMarkdownTable` — `AssistantMessageMarkdownTableProps` in the declaration bundle.
|
|
29
|
+
|
|
30
|
+
## Stories
|
|
31
|
+
|
|
32
|
+
### AnswerProse
|
|
33
|
+
|
|
34
|
+
A rendered markdown answer: a heading, paragraphs and a list with inline code.
|
|
35
|
+
|
|
36
|
+
Source: AssistantMessage/AssistantMessage.stories.tsx#AnswerProse
|
|
37
|
+
|
|
38
|
+
### WithReasoning
|
|
39
|
+
|
|
40
|
+
The reasoning sits above the answer as a `ChainOfThought`, 12px away. The first message
|
|
41
|
+
keeps it collapsed; the second opens the "Thought for 5s" step.
|
|
42
|
+
|
|
43
|
+
Source: AssistantMessage/AssistantMessage.stories.tsx#WithReasoning
|
|
44
|
+
|
|
45
|
+
### WithActionsVisible
|
|
46
|
+
|
|
47
|
+
The latest answer forces its actions on with `visible`: Copy, thumbs up and down, a more
|
|
48
|
+
menu and the timestamp, with the first icon lined up with the text.
|
|
49
|
+
|
|
50
|
+
Source: AssistantMessage/AssistantMessage.stories.tsx#WithActionsVisible
|
|
51
|
+
|
|
52
|
+
### WithApproval
|
|
53
|
+
|
|
54
|
+
The full composition: reasoning, an `ApprovalCard` stretched to the message width, the
|
|
55
|
+
answer and its actions. The card sits 12px from the parts around it, like the reasoning.
|
|
56
|
+
|
|
57
|
+
Source: AssistantMessage/AssistantMessage.stories.tsx#WithApproval
|
|
58
|
+
|
|
59
|
+
### WithActionsOnHover
|
|
60
|
+
|
|
61
|
+
Older answers keep their actions row transparent until the message is hovered or holds
|
|
62
|
+
focus; the 30px row stays reserved so nothing jumps.
|
|
63
|
+
|
|
64
|
+
Source: AssistantMessage/AssistantMessage.stories.tsx#WithActionsOnHover
|
|
65
|
+
|
|
66
|
+
### Streaming
|
|
67
|
+
|
|
68
|
+
While the answer streams, set `aria-busy` on the message and show the running step with a
|
|
69
|
+
shimmering label; the actions come once it finishes.
|
|
70
|
+
|
|
71
|
+
Source: AssistantMessage/AssistantMessage.stories.tsx#Streaming
|
|
72
|
+
|
|
73
|
+
### Loading
|
|
74
|
+
|
|
75
|
+
Before the first output, the message holds only an `AssistantMessageLoader`: the Figma
|
|
76
|
+
"Working..." row with a shimmering label, announced as `role='status'`. Pass children to
|
|
77
|
+
change the text.
|
|
78
|
+
|
|
79
|
+
Source: AssistantMessage/AssistantMessage.stories.tsx#Loading
|
|
80
|
+
|
|
81
|
+
### ErrorState
|
|
82
|
+
|
|
83
|
+
A failed answer: `AssistantMessageError` comes after whatever content streamed, announced
|
|
84
|
+
as `role='alert'`. Put your own Retry `Button` in `action`, so its click and analytics are
|
|
85
|
+
yours. The action renders inside the error's test-id cascade, but `Button` doesn't read it:
|
|
86
|
+
either give it the full id yourself (here `error--error--retry`, i.e. the error's id `error--error`
|
|
87
|
+
plus `--retry`), or read `useTestId('retry')` (exported from the package) inside your own
|
|
88
|
+
Retry component to derive it. Not in Figma yet; pending design review.
|
|
89
|
+
|
|
90
|
+
Source: AssistantMessage/AssistantMessage.stories.tsx#ErrorState
|
|
91
|
+
|
|
92
|
+
### Analytics
|
|
93
|
+
|
|
94
|
+
The message and its content are not interactive, but `data-analytics-*` still lands on
|
|
95
|
+
their real nodes; put click analytics on each `MessageAction` instead.
|
|
96
|
+
|
|
97
|
+
Source: AssistantMessage/AssistantMessage.stories.tsx#Analytics
|
|
98
|
+
|
|
99
|
+
### Markdown
|
|
100
|
+
|
|
101
|
+
`AssistantMessageMarkdown` inside `AssistantMessageContent`: every GFM element in the DS look —
|
|
102
|
+
heading, bold/italic/strike, inline code (click to copy), an aligned table, nested lists, a task
|
|
103
|
+
list, a fenced block with a copy button, a quote, a rule and links. Highlighting follows the
|
|
104
|
+
app's `CodeSnippetAdapterProvider` (WallyAssistant mounts the lazy Prism one itself).
|
|
105
|
+
|
|
106
|
+
Source: AssistantMessage/AssistantMessage.stories.tsx#Markdown
|
|
107
|
+
|
|
108
|
+
### MarkdownStreaming
|
|
109
|
+
|
|
110
|
+
Pass the whole text so far (a snapshot, never a delta) with `streaming`: only the unfinished
|
|
111
|
+
tail is repaired, a dangling `**`, a half-typed table header and an empty fence wait a frame,
|
|
112
|
+
and an open fence stays plain without a copy button until it closes. Finished blocks never
|
|
113
|
+
re-render. Here a timer grows the string; press Replay to stream it again.
|
|
114
|
+
|
|
115
|
+
Source: AssistantMessage/AssistantMessage.stories.tsx#MarkdownStreaming
|
|
116
|
+
|
|
117
|
+
### MarkdownInChainOfThought
|
|
118
|
+
|
|
119
|
+
`variant='chain-of-thought'` for reasoning inside a `ChainOfThoughtStep` (Figma 494:4292): the
|
|
120
|
+
step body sets the 12/16 muted text, inline code is muted and not copyable, links are 12px.
|
|
121
|
+
|
|
122
|
+
Source: AssistantMessage/AssistantMessage.stories.tsx#MarkdownInChainOfThought
|
|
123
|
+
|
|
124
|
+
### MarkdownUnsafeContent
|
|
125
|
+
|
|
126
|
+
Assistant text is untrusted (prompt injection). Raw HTML shows as typed (only `<br>` breaks a
|
|
127
|
+
line), `javascript:`/`data:`/`vbscript:`/`file:` links render as plain text, and images show
|
|
128
|
+
only their alt text, so no tracking pixel loads.
|
|
129
|
+
|
|
130
|
+
Source: AssistantMessage/AssistantMessage.stories.tsx#MarkdownUnsafeContent
|
|
131
|
+
|
|
132
|
+
### MarkdownCustomElements
|
|
133
|
+
|
|
134
|
+
`components` overrides any element at module scope; wrap the exported parts
|
|
135
|
+
(`AssistantMessageMarkdownLink`, `…InlineCode`, `…CodeBlock`, `…Table`) to add analytics
|
|
136
|
+
attributes to the real nodes. Here every link gets a `data-analytics-id`, and images render
|
|
137
|
+
only from the app's own origin — the app owns that decision.
|
|
138
|
+
|
|
139
|
+
Source: AssistantMessage/AssistantMessage.stories.tsx#MarkdownCustomElements
|
|
140
|
+
|
|
141
|
+
## Story sources
|
|
142
|
+
|
|
143
|
+
### AssistantMessage/AssistantMessage.stories.tsx
|
|
144
|
+
|
|
145
|
+
```tsx
|
|
146
|
+
import { useEffect, useState } from 'react';
|
|
147
|
+
import type { Meta, StoryFn } from 'storybook-react-rsbuild';
|
|
148
|
+
import { Brain, Database, Ellipsis, RefreshCcw, Search, ThumbsDown, ThumbsUp } from '../../icons';
|
|
149
|
+
import { ApprovalCard, ApprovalCardActions, ApprovalCardContent } from '../ApprovalCard';
|
|
150
|
+
import { Button } from '../Button';
|
|
151
|
+
import { ChainOfThought, ChainOfThoughtStep } from '../ChainOfThought';
|
|
152
|
+
import { CodeSnippetAdapterProvider, InlineCodeSnippet, loadPrismAdapter } from '../CodeSnippet';
|
|
153
|
+
import { Copyable, CopyableIcon } from '../Copyable';
|
|
154
|
+
import {
|
|
155
|
+
DropdownMenu,
|
|
156
|
+
DropdownMenuContent,
|
|
157
|
+
DropdownMenuItem,
|
|
158
|
+
DropdownMenuTrigger,
|
|
159
|
+
} from '../DropdownMenu';
|
|
160
|
+
import { MessageAction, MessageActions, MessageTimestamp } from '../MessageActions';
|
|
161
|
+
import {
|
|
162
|
+
AssistantMessage,
|
|
163
|
+
AssistantMessageContent,
|
|
164
|
+
AssistantMessageError,
|
|
165
|
+
AssistantMessageLoader,
|
|
166
|
+
AssistantMessageMarkdown,
|
|
167
|
+
type AssistantMessageMarkdownComponents,
|
|
168
|
+
AssistantMessageMarkdownLink,
|
|
169
|
+
} from '.';
|
|
170
|
+
import { COT_TEXT, HOSTILE, WALLY_ANSWER } from './mocks';
|
|
171
|
+
|
|
172
|
+
const DESCRIPTION = [
|
|
173
|
+
'A message from Wally: an `<article>` named "Wally" that left-aligns the answer and whatever led up to it.',
|
|
174
|
+
'Stack its parts in this order — an optional `ChainOfThought` with the reasoning and tool calls, an optional `ApprovalCard`, the `AssistantMessageContent`, then a `MessageActions` row; the message spaces them 12px and 4px apart and lines the action icons up with the text.',
|
|
175
|
+
"`AssistantMessageContent` spaces and styles markdown blocks; put `AssistantMessageMarkdown` inside it (WallyAssistant's default) or your own renderer's output.",
|
|
176
|
+
'`AssistantMessageMarkdown` renders untrusted GFM as DS elements — no raw HTML, http/https/mailto/relative links only, images as alt text — and is streaming-safe: pass the whole text so far with `streaming` and it repairs only the unfinished tail.',
|
|
177
|
+
'Set `aria-busy` on the message while the answer streams; before the first output, show only an `AssistantMessageLoader` "Working..." row, and if the answer fails, an `AssistantMessageError` after the content with your own Retry button in `action`.',
|
|
178
|
+
].join(' ');
|
|
179
|
+
|
|
180
|
+
const meta = {
|
|
181
|
+
title: 'AI/AssistantMessage',
|
|
182
|
+
component: AssistantMessage,
|
|
183
|
+
subcomponents: {
|
|
184
|
+
AssistantMessageContent,
|
|
185
|
+
AssistantMessageLoader,
|
|
186
|
+
AssistantMessageError,
|
|
187
|
+
AssistantMessageMarkdown,
|
|
188
|
+
},
|
|
189
|
+
parameters: {
|
|
190
|
+
layout: 'centered',
|
|
191
|
+
docs: { description: { component: DESCRIPTION } },
|
|
192
|
+
},
|
|
193
|
+
decorators: [
|
|
194
|
+
Story => (
|
|
195
|
+
<div className='w-420'>
|
|
196
|
+
<Story />
|
|
197
|
+
</div>
|
|
198
|
+
),
|
|
199
|
+
],
|
|
200
|
+
} satisfies Meta<typeof AssistantMessage>;
|
|
201
|
+
|
|
202
|
+
export default meta;
|
|
203
|
+
|
|
204
|
+
const ANSWER_TEXT = 'Blocked 1,204 SQL injection attempts on /api/login in the last 24 hours.';
|
|
205
|
+
|
|
206
|
+
/** A rendered markdown answer: a heading, paragraphs and a list with inline code. */
|
|
207
|
+
export const AnswerProse: StoryFn<typeof meta> = () => (
|
|
208
|
+
<AssistantMessage data-testid='prose'>
|
|
209
|
+
<AssistantMessageContent>
|
|
210
|
+
<h3>Blocked attacks, last 24 hours</h3>
|
|
211
|
+
<p>
|
|
212
|
+
Wallarm blocked 1,204 SQL injection attempts, almost all against{' '}
|
|
213
|
+
<InlineCodeSnippet code='/api/login' size='sm' />.
|
|
214
|
+
</p>
|
|
215
|
+
<ul>
|
|
216
|
+
<li>
|
|
217
|
+
Most came from <InlineCodeSnippet code='203.0.113.0/24' size='sm' />.
|
|
218
|
+
</li>
|
|
219
|
+
<li>The peak was at 03:00 UTC.</li>
|
|
220
|
+
<li>No request reached the application.</li>
|
|
221
|
+
</ul>
|
|
222
|
+
<p>Want me to add a rule that denies the whole subnet?</p>
|
|
223
|
+
</AssistantMessageContent>
|
|
224
|
+
</AssistantMessage>
|
|
225
|
+
);
|
|
226
|
+
|
|
227
|
+
/**
|
|
228
|
+
* The reasoning sits above the answer as a `ChainOfThought`, 12px away. The first message
|
|
229
|
+
* keeps it collapsed; the second opens the "Thought for 5s" step.
|
|
230
|
+
*/
|
|
231
|
+
export const WithReasoning: StoryFn<typeof meta> = () => (
|
|
232
|
+
<div className='flex flex-col gap-24'>
|
|
233
|
+
<AssistantMessage data-testid='collapsed'>
|
|
234
|
+
<ChainOfThought>
|
|
235
|
+
<ChainOfThoughtStep icon={<Brain />} label='Thought for 5s'>
|
|
236
|
+
<p>
|
|
237
|
+
The user wants blocked attacks for a day. Query the events, then group them by path.
|
|
238
|
+
</p>
|
|
239
|
+
</ChainOfThoughtStep>
|
|
240
|
+
<ChainOfThoughtStep icon={<Search />} label='Searched for blocked requests' />
|
|
241
|
+
<ChainOfThoughtStep icon={<Database />} label='Queried attack events' />
|
|
242
|
+
</ChainOfThought>
|
|
243
|
+
<AssistantMessageContent>
|
|
244
|
+
<h3>Blocked attacks, last 24 hours</h3>
|
|
245
|
+
<p>
|
|
246
|
+
Wallarm blocked 1,204 SQL injection attempts, almost all against{' '}
|
|
247
|
+
<InlineCodeSnippet code='/api/login' size='sm' />.
|
|
248
|
+
</p>
|
|
249
|
+
<ul>
|
|
250
|
+
<li>
|
|
251
|
+
Most came from <InlineCodeSnippet code='203.0.113.0/24' size='sm' />.
|
|
252
|
+
</li>
|
|
253
|
+
<li>The peak was at 03:00 UTC.</li>
|
|
254
|
+
<li>No request reached the application.</li>
|
|
255
|
+
</ul>
|
|
256
|
+
<p>Want me to add a rule that denies the whole subnet?</p>
|
|
257
|
+
</AssistantMessageContent>
|
|
258
|
+
</AssistantMessage>
|
|
259
|
+
<AssistantMessage data-testid='expanded'>
|
|
260
|
+
<ChainOfThought>
|
|
261
|
+
<ChainOfThoughtStep icon={<Brain />} label='Thought for 5s' defaultOpen>
|
|
262
|
+
<p>
|
|
263
|
+
The user wants blocked attacks for a day. Query the events, then group them by path.
|
|
264
|
+
</p>
|
|
265
|
+
</ChainOfThoughtStep>
|
|
266
|
+
<ChainOfThoughtStep icon={<Search />} label='Searched for blocked requests' />
|
|
267
|
+
<ChainOfThoughtStep icon={<Database />} label='Queried attack events' />
|
|
268
|
+
</ChainOfThought>
|
|
269
|
+
<AssistantMessageContent>
|
|
270
|
+
<h3>Blocked attacks, last 24 hours</h3>
|
|
271
|
+
<p>
|
|
272
|
+
Wallarm blocked 1,204 SQL injection attempts, almost all against{' '}
|
|
273
|
+
<InlineCodeSnippet code='/api/login' size='sm' />.
|
|
274
|
+
</p>
|
|
275
|
+
<ul>
|
|
276
|
+
<li>
|
|
277
|
+
Most came from <InlineCodeSnippet code='203.0.113.0/24' size='sm' />.
|
|
278
|
+
</li>
|
|
279
|
+
<li>The peak was at 03:00 UTC.</li>
|
|
280
|
+
<li>No request reached the application.</li>
|
|
281
|
+
</ul>
|
|
282
|
+
<p>Want me to add a rule that denies the whole subnet?</p>
|
|
283
|
+
</AssistantMessageContent>
|
|
284
|
+
</AssistantMessage>
|
|
285
|
+
</div>
|
|
286
|
+
);
|
|
287
|
+
|
|
288
|
+
/**
|
|
289
|
+
* The latest answer forces its actions on with `visible`: Copy, thumbs up and down, a more
|
|
290
|
+
* menu and the timestamp, with the first icon lined up with the text.
|
|
291
|
+
*/
|
|
292
|
+
export const WithActionsVisible: StoryFn<typeof meta> = () => (
|
|
293
|
+
<AssistantMessage data-testid='with-actions'>
|
|
294
|
+
<ChainOfThought>
|
|
295
|
+
<ChainOfThoughtStep icon={<Brain />} label='Thought for 5s'>
|
|
296
|
+
<p>The user wants blocked attacks for a day. Query the events, then group them by path.</p>
|
|
297
|
+
</ChainOfThoughtStep>
|
|
298
|
+
<ChainOfThoughtStep icon={<Search />} label='Searched for blocked requests' />
|
|
299
|
+
<ChainOfThoughtStep icon={<Database />} label='Queried attack events' />
|
|
300
|
+
</ChainOfThought>
|
|
301
|
+
<AssistantMessageContent>
|
|
302
|
+
<h3>Blocked attacks, last 24 hours</h3>
|
|
303
|
+
<p>
|
|
304
|
+
Wallarm blocked 1,204 SQL injection attempts, almost all against{' '}
|
|
305
|
+
<InlineCodeSnippet code='/api/login' size='sm' />.
|
|
306
|
+
</p>
|
|
307
|
+
<ul>
|
|
308
|
+
<li>
|
|
309
|
+
Most came from <InlineCodeSnippet code='203.0.113.0/24' size='sm' />.
|
|
310
|
+
</li>
|
|
311
|
+
<li>The peak was at 03:00 UTC.</li>
|
|
312
|
+
<li>No request reached the application.</li>
|
|
313
|
+
</ul>
|
|
314
|
+
<p>Want me to add a rule that denies the whole subnet?</p>
|
|
315
|
+
</AssistantMessageContent>
|
|
316
|
+
<MessageActions visible>
|
|
317
|
+
<Copyable text={ANSWER_TEXT}>
|
|
318
|
+
<MessageAction aria-label='Copy'>
|
|
319
|
+
<CopyableIcon />
|
|
320
|
+
</MessageAction>
|
|
321
|
+
</Copyable>
|
|
322
|
+
<MessageAction aria-label='Good response'>
|
|
323
|
+
<ThumbsUp />
|
|
324
|
+
</MessageAction>
|
|
325
|
+
<MessageAction aria-label='Bad response'>
|
|
326
|
+
<ThumbsDown />
|
|
327
|
+
</MessageAction>
|
|
328
|
+
<DropdownMenu>
|
|
329
|
+
<DropdownMenuTrigger asChild>
|
|
330
|
+
<MessageAction aria-label='More actions'>
|
|
331
|
+
<Ellipsis />
|
|
332
|
+
</MessageAction>
|
|
333
|
+
</DropdownMenuTrigger>
|
|
334
|
+
<DropdownMenuContent>
|
|
335
|
+
<DropdownMenuItem>Regenerate</DropdownMenuItem>
|
|
336
|
+
<DropdownMenuItem>Report a problem</DropdownMenuItem>
|
|
337
|
+
</DropdownMenuContent>
|
|
338
|
+
</DropdownMenu>
|
|
339
|
+
<MessageTimestamp dateTime='2026-10-21T09:42:00Z'>1m ago</MessageTimestamp>
|
|
340
|
+
</MessageActions>
|
|
341
|
+
</AssistantMessage>
|
|
342
|
+
);
|
|
343
|
+
|
|
344
|
+
/**
|
|
345
|
+
* The full composition: reasoning, an `ApprovalCard` stretched to the message width, the
|
|
346
|
+
* answer and its actions. The card sits 12px from the parts around it, like the reasoning.
|
|
347
|
+
*/
|
|
348
|
+
export const WithApproval: StoryFn<typeof meta> = () => (
|
|
349
|
+
<AssistantMessage data-testid='with-approval'>
|
|
350
|
+
<ChainOfThought>
|
|
351
|
+
<ChainOfThoughtStep icon={<Brain />} label='Thought for 5s'>
|
|
352
|
+
<p>The user wants blocked attacks for a day. Query the events, then group them by path.</p>
|
|
353
|
+
</ChainOfThoughtStep>
|
|
354
|
+
<ChainOfThoughtStep icon={<Search />} label='Searched for blocked requests' />
|
|
355
|
+
<ChainOfThoughtStep icon={<Database />} label='Queried attack events' />
|
|
356
|
+
</ChainOfThought>
|
|
357
|
+
<ApprovalCard>
|
|
358
|
+
<ApprovalCardContent>
|
|
359
|
+
Add 203.0.113.0/24 to the denylist on all applications
|
|
360
|
+
</ApprovalCardContent>
|
|
361
|
+
<ApprovalCardActions>
|
|
362
|
+
<Button>Allow</Button>
|
|
363
|
+
<Button variant='secondary' color='neutral'>
|
|
364
|
+
Reject
|
|
365
|
+
</Button>
|
|
366
|
+
</ApprovalCardActions>
|
|
367
|
+
</ApprovalCard>
|
|
368
|
+
<AssistantMessageContent>
|
|
369
|
+
<h3>Blocked attacks, last 24 hours</h3>
|
|
370
|
+
<p>
|
|
371
|
+
Wallarm blocked 1,204 SQL injection attempts, almost all against{' '}
|
|
372
|
+
<InlineCodeSnippet code='/api/login' size='sm' />.
|
|
373
|
+
</p>
|
|
374
|
+
<ul>
|
|
375
|
+
<li>
|
|
376
|
+
Most came from <InlineCodeSnippet code='203.0.113.0/24' size='sm' />.
|
|
377
|
+
</li>
|
|
378
|
+
<li>The peak was at 03:00 UTC.</li>
|
|
379
|
+
<li>No request reached the application.</li>
|
|
380
|
+
</ul>
|
|
381
|
+
<p>Want me to add a rule that denies the whole subnet?</p>
|
|
382
|
+
</AssistantMessageContent>
|
|
383
|
+
<MessageActions visible>
|
|
384
|
+
<Copyable text={ANSWER_TEXT}>
|
|
385
|
+
<MessageAction aria-label='Copy'>
|
|
386
|
+
<CopyableIcon />
|
|
387
|
+
</MessageAction>
|
|
388
|
+
</Copyable>
|
|
389
|
+
<MessageAction aria-label='Good response'>
|
|
390
|
+
<ThumbsUp />
|
|
391
|
+
</MessageAction>
|
|
392
|
+
<MessageAction aria-label='Bad response'>
|
|
393
|
+
<ThumbsDown />
|
|
394
|
+
</MessageAction>
|
|
395
|
+
<DropdownMenu>
|
|
396
|
+
<DropdownMenuTrigger asChild>
|
|
397
|
+
<MessageAction aria-label='More actions'>
|
|
398
|
+
<Ellipsis />
|
|
399
|
+
</MessageAction>
|
|
400
|
+
</DropdownMenuTrigger>
|
|
401
|
+
<DropdownMenuContent>
|
|
402
|
+
<DropdownMenuItem>Regenerate</DropdownMenuItem>
|
|
403
|
+
<DropdownMenuItem>Report a problem</DropdownMenuItem>
|
|
404
|
+
</DropdownMenuContent>
|
|
405
|
+
</DropdownMenu>
|
|
406
|
+
<MessageTimestamp dateTime='2026-10-21T09:42:00Z'>1m ago</MessageTimestamp>
|
|
407
|
+
</MessageActions>
|
|
408
|
+
</AssistantMessage>
|
|
409
|
+
);
|
|
410
|
+
|
|
411
|
+
/**
|
|
412
|
+
* Older answers keep their actions row transparent until the message is hovered or holds
|
|
413
|
+
* focus; the 30px row stays reserved so nothing jumps.
|
|
414
|
+
*/
|
|
415
|
+
export const WithActionsOnHover: StoryFn<typeof meta> = () => (
|
|
416
|
+
<AssistantMessage data-testid='hover-actions'>
|
|
417
|
+
<AssistantMessageContent>
|
|
418
|
+
<h3>Blocked attacks, last 24 hours</h3>
|
|
419
|
+
<p>
|
|
420
|
+
Wallarm blocked 1,204 SQL injection attempts, almost all against{' '}
|
|
421
|
+
<InlineCodeSnippet code='/api/login' size='sm' />.
|
|
422
|
+
</p>
|
|
423
|
+
<ul>
|
|
424
|
+
<li>
|
|
425
|
+
Most came from <InlineCodeSnippet code='203.0.113.0/24' size='sm' />.
|
|
426
|
+
</li>
|
|
427
|
+
<li>The peak was at 03:00 UTC.</li>
|
|
428
|
+
<li>No request reached the application.</li>
|
|
429
|
+
</ul>
|
|
430
|
+
<p>Want me to add a rule that denies the whole subnet?</p>
|
|
431
|
+
</AssistantMessageContent>
|
|
432
|
+
<MessageActions>
|
|
433
|
+
<Copyable text={ANSWER_TEXT}>
|
|
434
|
+
<MessageAction aria-label='Copy'>
|
|
435
|
+
<CopyableIcon />
|
|
436
|
+
</MessageAction>
|
|
437
|
+
</Copyable>
|
|
438
|
+
<MessageAction aria-label='Good response'>
|
|
439
|
+
<ThumbsUp />
|
|
440
|
+
</MessageAction>
|
|
441
|
+
<MessageAction aria-label='Bad response'>
|
|
442
|
+
<ThumbsDown />
|
|
443
|
+
</MessageAction>
|
|
444
|
+
<DropdownMenu>
|
|
445
|
+
<DropdownMenuTrigger asChild>
|
|
446
|
+
<MessageAction aria-label='More actions'>
|
|
447
|
+
<Ellipsis />
|
|
448
|
+
</MessageAction>
|
|
449
|
+
</DropdownMenuTrigger>
|
|
450
|
+
<DropdownMenuContent>
|
|
451
|
+
<DropdownMenuItem>Regenerate</DropdownMenuItem>
|
|
452
|
+
<DropdownMenuItem>Report a problem</DropdownMenuItem>
|
|
453
|
+
</DropdownMenuContent>
|
|
454
|
+
</DropdownMenu>
|
|
455
|
+
<MessageTimestamp dateTime='2026-10-21T09:42:00Z'>1m ago</MessageTimestamp>
|
|
456
|
+
</MessageActions>
|
|
457
|
+
</AssistantMessage>
|
|
458
|
+
);
|
|
459
|
+
|
|
460
|
+
/**
|
|
461
|
+
* While the answer streams, set `aria-busy` on the message and show the running step with a
|
|
462
|
+
* shimmering label; the actions come once it finishes.
|
|
463
|
+
*/
|
|
464
|
+
export const Streaming: StoryFn<typeof meta> = () => (
|
|
465
|
+
<AssistantMessage data-testid='streaming' aria-busy>
|
|
466
|
+
<ChainOfThought>
|
|
467
|
+
<ChainOfThoughtStep icon={<Search />} label='Searched for blocked requests' />
|
|
468
|
+
<ChainOfThoughtStep icon={<Database />} label='Querying attack events...' status='running' />
|
|
469
|
+
</ChainOfThought>
|
|
470
|
+
<AssistantMessageContent>
|
|
471
|
+
<p>Wallarm blocked 1,204 SQL injection attempts, almost all against</p>
|
|
472
|
+
</AssistantMessageContent>
|
|
473
|
+
</AssistantMessage>
|
|
474
|
+
);
|
|
475
|
+
|
|
476
|
+
/**
|
|
477
|
+
* Before the first output, the message holds only an `AssistantMessageLoader`: the Figma
|
|
478
|
+
* "Working..." row with a shimmering label, announced as `role='status'`. Pass children to
|
|
479
|
+
* change the text.
|
|
480
|
+
*/
|
|
481
|
+
export const Loading: StoryFn<typeof meta> = () => (
|
|
482
|
+
<AssistantMessage data-testid='loading' aria-busy>
|
|
483
|
+
<AssistantMessageLoader />
|
|
484
|
+
</AssistantMessage>
|
|
485
|
+
);
|
|
486
|
+
|
|
487
|
+
/**
|
|
488
|
+
* A failed answer: `AssistantMessageError` comes after whatever content streamed, announced
|
|
489
|
+
* as `role='alert'`. Put your own Retry `Button` in `action`, so its click and analytics are
|
|
490
|
+
* yours. The action renders inside the error's test-id cascade, but `Button` doesn't read it:
|
|
491
|
+
* either give it the full id yourself (here `error--error--retry`, i.e. the error's id `error--error`
|
|
492
|
+
* plus `--retry`), or read `useTestId('retry')` (exported from the package) inside your own
|
|
493
|
+
* Retry component to derive it. Not in Figma yet; pending design review.
|
|
494
|
+
*/
|
|
495
|
+
export const ErrorState: StoryFn<typeof meta> = () => (
|
|
496
|
+
<AssistantMessage data-testid='error'>
|
|
497
|
+
<AssistantMessageContent>
|
|
498
|
+
<p>Wallarm blocked 1,204 SQL injection attempts, almost all against</p>
|
|
499
|
+
</AssistantMessageContent>
|
|
500
|
+
<AssistantMessageError
|
|
501
|
+
action={
|
|
502
|
+
<Button
|
|
503
|
+
variant='ghost'
|
|
504
|
+
color='neutral'
|
|
505
|
+
size='small'
|
|
506
|
+
data-testid='error--error--retry'
|
|
507
|
+
data-analytics-id='WALLY_ANSWER_RETRY'
|
|
508
|
+
>
|
|
509
|
+
<RefreshCcw />
|
|
510
|
+
Retry
|
|
511
|
+
</Button>
|
|
512
|
+
}
|
|
513
|
+
>
|
|
514
|
+
The connection was lost before the answer finished.
|
|
515
|
+
</AssistantMessageError>
|
|
516
|
+
</AssistantMessage>
|
|
517
|
+
);
|
|
518
|
+
|
|
519
|
+
/**
|
|
520
|
+
* The message and its content are not interactive, but `data-analytics-*` still lands on
|
|
521
|
+
* their real nodes; put click analytics on each `MessageAction` instead.
|
|
522
|
+
*/
|
|
523
|
+
export const Analytics: StoryFn<typeof meta> = () => (
|
|
524
|
+
<AssistantMessage data-testid='analytics' data-analytics-id='WALLY_ANSWER'>
|
|
525
|
+
<AssistantMessageContent data-analytics-id='WALLY_ANSWER_CONTENT'>
|
|
526
|
+
<p>{ANSWER_TEXT}</p>
|
|
527
|
+
</AssistantMessageContent>
|
|
528
|
+
<MessageActions visible>
|
|
529
|
+
<Copyable text={ANSWER_TEXT}>
|
|
530
|
+
<MessageAction aria-label='Copy' data-analytics-id='WALLY_ANSWER_COPY'>
|
|
531
|
+
<CopyableIcon />
|
|
532
|
+
</MessageAction>
|
|
533
|
+
</Copyable>
|
|
534
|
+
</MessageActions>
|
|
535
|
+
</AssistantMessage>
|
|
536
|
+
);
|
|
537
|
+
|
|
538
|
+
/**
|
|
539
|
+
* `AssistantMessageMarkdown` inside `AssistantMessageContent`: every GFM element in the DS look —
|
|
540
|
+
* heading, bold/italic/strike, inline code (click to copy), an aligned table, nested lists, a task
|
|
541
|
+
* list, a fenced block with a copy button, a quote, a rule and links. Highlighting follows the
|
|
542
|
+
* app's `CodeSnippetAdapterProvider` (WallyAssistant mounts the lazy Prism one itself).
|
|
543
|
+
*/
|
|
544
|
+
export const Markdown: StoryFn<typeof meta> = () => (
|
|
545
|
+
<CodeSnippetAdapterProvider adapter={loadPrismAdapter}>
|
|
546
|
+
<AssistantMessage data-testid='markdown'>
|
|
547
|
+
<AssistantMessageContent>
|
|
548
|
+
<AssistantMessageMarkdown text={WALLY_ANSWER} />
|
|
549
|
+
</AssistantMessageContent>
|
|
550
|
+
</AssistantMessage>
|
|
551
|
+
</CodeSnippetAdapterProvider>
|
|
552
|
+
);
|
|
553
|
+
|
|
554
|
+
/**
|
|
555
|
+
* Pass the whole text so far (a snapshot, never a delta) with `streaming`: only the unfinished
|
|
556
|
+
* tail is repaired, a dangling `**`, a half-typed table header and an empty fence wait a frame,
|
|
557
|
+
* and an open fence stays plain without a copy button until it closes. Finished blocks never
|
|
558
|
+
* re-render. Here a timer grows the string; press Replay to stream it again.
|
|
559
|
+
*/
|
|
560
|
+
export const MarkdownStreaming: StoryFn<typeof meta> = () => {
|
|
561
|
+
const [length, setLength] = useState(0);
|
|
562
|
+
const streaming = length < WALLY_ANSWER.length;
|
|
563
|
+
|
|
564
|
+
useEffect(() => {
|
|
565
|
+
if (length >= WALLY_ANSWER.length) return;
|
|
566
|
+
const id = setTimeout(() => setLength(Math.min(length + 6, WALLY_ANSWER.length)), 40);
|
|
567
|
+
return () => clearTimeout(id);
|
|
568
|
+
}, [length]);
|
|
569
|
+
|
|
570
|
+
const handleClick = () => {
|
|
571
|
+
setLength(0);
|
|
572
|
+
};
|
|
573
|
+
|
|
574
|
+
return (
|
|
575
|
+
<div className='flex flex-col items-start gap-16'>
|
|
576
|
+
<CodeSnippetAdapterProvider adapter={loadPrismAdapter}>
|
|
577
|
+
<AssistantMessage data-testid='markdown-streaming' aria-busy={streaming}>
|
|
578
|
+
<AssistantMessageContent>
|
|
579
|
+
<AssistantMessageMarkdown text={WALLY_ANSWER.slice(0, length)} streaming={streaming} />
|
|
580
|
+
</AssistantMessageContent>
|
|
581
|
+
</AssistantMessage>
|
|
582
|
+
</CodeSnippetAdapterProvider>
|
|
583
|
+
<Button
|
|
584
|
+
variant='outline'
|
|
585
|
+
color='neutral'
|
|
586
|
+
size='small'
|
|
587
|
+
disabled={streaming}
|
|
588
|
+
data-testid='markdown-streaming--replay'
|
|
589
|
+
onClick={handleClick}
|
|
590
|
+
>
|
|
591
|
+
<RefreshCcw />
|
|
592
|
+
Replay
|
|
593
|
+
</Button>
|
|
594
|
+
</div>
|
|
595
|
+
);
|
|
596
|
+
};
|
|
597
|
+
|
|
598
|
+
/**
|
|
599
|
+
* `variant='chain-of-thought'` for reasoning inside a `ChainOfThoughtStep` (Figma 494:4292): the
|
|
600
|
+
* step body sets the 12/16 muted text, inline code is muted and not copyable, links are 12px.
|
|
601
|
+
*/
|
|
602
|
+
export const MarkdownInChainOfThought: StoryFn<typeof meta> = () => (
|
|
603
|
+
<AssistantMessage data-testid='cot-markdown'>
|
|
604
|
+
<ChainOfThought>
|
|
605
|
+
<ChainOfThoughtStep label='Thought for 5s' icon={<Brain />} defaultOpen>
|
|
606
|
+
<AssistantMessageMarkdown variant='chain-of-thought' text={COT_TEXT} />
|
|
607
|
+
</ChainOfThoughtStep>
|
|
608
|
+
</ChainOfThought>
|
|
609
|
+
</AssistantMessage>
|
|
610
|
+
);
|
|
611
|
+
|
|
612
|
+
/**
|
|
613
|
+
* Assistant text is untrusted (prompt injection). Raw HTML shows as typed (only `<br>` breaks a
|
|
614
|
+
* line), `javascript:`/`data:`/`vbscript:`/`file:` links render as plain text, and images show
|
|
615
|
+
* only their alt text, so no tracking pixel loads.
|
|
616
|
+
*/
|
|
617
|
+
export const MarkdownUnsafeContent: StoryFn<typeof meta> = () => (
|
|
618
|
+
<AssistantMessage data-testid='unsafe-markdown'>
|
|
619
|
+
<AssistantMessageContent>
|
|
620
|
+
<AssistantMessageMarkdown text={HOSTILE} />
|
|
621
|
+
</AssistantMessageContent>
|
|
622
|
+
</AssistantMessage>
|
|
623
|
+
);
|
|
624
|
+
|
|
625
|
+
/** Module scope: a new map on every render would re-render every block. */
|
|
626
|
+
const MARKDOWN_COMPONENTS: Partial<AssistantMessageMarkdownComponents> = {
|
|
627
|
+
a: props => <AssistantMessageMarkdownLink {...props} data-analytics-id='wally.answer.link' />,
|
|
628
|
+
img: ({ src, alt }) =>
|
|
629
|
+
new URL(src, window.location.href).origin === window.location.origin ? (
|
|
630
|
+
<img src={src} alt={alt} className='size-32' />
|
|
631
|
+
) : (
|
|
632
|
+
alt
|
|
633
|
+
),
|
|
634
|
+
};
|
|
635
|
+
|
|
636
|
+
/**
|
|
637
|
+
* `components` overrides any element at module scope; wrap the exported parts
|
|
638
|
+
* (`AssistantMessageMarkdownLink`, `…InlineCode`, `…CodeBlock`, `…Table`) to add analytics
|
|
639
|
+
* attributes to the real nodes. Here every link gets a `data-analytics-id`, and images render
|
|
640
|
+
* only from the app's own origin — the app owns that decision.
|
|
641
|
+
*/
|
|
642
|
+
export const MarkdownCustomElements: StoryFn<typeof meta> = () => (
|
|
643
|
+
<AssistantMessage data-testid='custom-markdown'>
|
|
644
|
+
<AssistantMessageContent>
|
|
645
|
+
<AssistantMessageMarkdown
|
|
646
|
+
components={MARKDOWN_COMPONENTS}
|
|
647
|
+
text={
|
|
648
|
+
'Read the [rule guide](https://docs.wallarm.com/user-guides/rules/) first.\n\n\n\n'
|
|
649
|
+
}
|
|
650
|
+
/>
|
|
651
|
+
</AssistantMessageContent>
|
|
652
|
+
</AssistantMessage>
|
|
653
|
+
);
|
|
654
|
+
```
|
|
655
|
+
|
|
656
|
+
### AssistantMessage/mocks.ts
|
|
657
|
+
|
|
658
|
+
````tsx
|
|
659
|
+
/** Story and test data for `AssistantMessageMarkdown` (not published). */
|
|
660
|
+
|
|
661
|
+
/** A full Wally answer that touches every default element. */
|
|
662
|
+
export const WALLY_ANSWER = `## Attacks on \`/api/login\`
|
|
663
|
+
|
|
664
|
+
Found **3 attacks** in the last 24 hours, all *blocked*. The top source is \`203.0.113.7\` & friends.
|
|
665
|
+
|
|
666
|
+
| IP | Type | Hits |
|
|
667
|
+
|:---|:----:|-----:|
|
|
668
|
+
| 203.0.113.7 | sqli | 120 |
|
|
669
|
+
| 198.51.100.4 | xss | 9 |
|
|
670
|
+
| 192.0.2.10 | brute | 5 |
|
|
671
|
+
|
|
672
|
+
1. Check the rule:
|
|
673
|
+
- \`rule_id: 1042\`
|
|
674
|
+
- mode ~~monitoring~~ blocking
|
|
675
|
+
2. Add a rule:
|
|
676
|
+
|
|
677
|
+
\`\`\`json
|
|
678
|
+
{
|
|
679
|
+
"action": "block",
|
|
680
|
+
"ip": "203.0.113.7",
|
|
681
|
+
"ttl": 3600
|
|
682
|
+
}
|
|
683
|
+
\`\`\`
|
|
684
|
+
|
|
685
|
+
> Rules apply within 1 minute.
|
|
686
|
+
|
|
687
|
+
- [x] Denylisted
|
|
688
|
+
- [ ] Notified
|
|
689
|
+
|
|
690
|
+
---
|
|
691
|
+
|
|
692
|
+
See [Wallarm docs](https://docs.wallarm.com/admin-en/configure-parameters-en/) or <https://console.wallarm.com>.`;
|
|
693
|
+
|
|
694
|
+
/** Reasoning text for the chain-of-thought variant (Figma 494:4292). */
|
|
695
|
+
export const COT_TEXT = `The user asks why \`/api/login\` gets so many hits.
|
|
696
|
+
|
|
697
|
+
#### Plan
|
|
698
|
+
|
|
699
|
+
- Group the blocked requests by source IP.
|
|
700
|
+
- Check whether \`203.0.113.0/24\` is already denylisted.
|
|
701
|
+
|
|
702
|
+
The rule \`rule_id: 1042\` is in monitoring mode, so nothing is blocked yet. See [the rule](https://my.wallarm.com/rules/1042).`;
|
|
703
|
+
|
|
704
|
+
/** Prompt-injected answer: every line must render inert. */
|
|
705
|
+
export const HOSTILE = `Click [here](javascript:alert(1)) or [there](JaVaScRiPt:alert(1)) or [data](data:text/html,<script>alert(1)</script>).
|
|
706
|
+
|
|
707
|
+
<script>alert(1)</script>
|
|
708
|
+
|
|
709
|
+
Inline <img src=x onerror=alert(1)> and a pixel .
|
|
710
|
+
|
|
711
|
+
[entity](javascript:alert(1)) <javascript:alert(1)> [file](file:///etc/passwd) <a href="javascript:alert(1)">raw</a>`;
|
|
712
|
+
|
|
713
|
+
/** Mid-stream snapshots (addendum §1), rendered with `streaming` on. */
|
|
714
|
+
export const STREAMING_SNAPSHOTS = {
|
|
715
|
+
t1: 'Looking at hits for `/api/lo',
|
|
716
|
+
t4: 'Found **3 att',
|
|
717
|
+
t4b: 'Found **',
|
|
718
|
+
t5: 'Found:\n\n| IP | Type | Hits |\n|---|',
|
|
719
|
+
t5c: 'Found:\n\n| IP | Type | Hits |\n|---|---|---|\n| 1.2.3.4 | sq',
|
|
720
|
+
t6: '2. Add a rule:\n\n```yaml\nrule: block\nip: 1',
|
|
721
|
+
t6b: '2. Add a rule:\n\n```ya',
|
|
722
|
+
t7: 'See [docs](https',
|
|
723
|
+
} as const;
|
|
724
|
+
````
|