@wallarm-org/claude-design 0.0.0-stage → 4.9.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,255 @@
|
|
|
1
|
+
The small row of icon buttons under a chat message — copy, feedback, a more menu and a timestamp. Every `MessageAction` is a ghost icon button whose required `aria-label` doubles as its tooltip, so the row never needs a visible caption. By default the row is transparent until the nearest `group/message` parent is hovered or holds focus, keeping its 30px height so the conversation does not jump; pass `visible` for the latest answer. Copy is composed with `Copyable` and `CopyableIcon`, menus with `DropdownMenuTrigger asChild`, and feedback with `aria-pressed` — the row itself holds no state. Give a menu-trigger action an explicit `data-testid`: the trigger injects its own `--trigger` id, which replaces the cascaded `--action` one.
|
|
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
|
+
| `visible` | `boolean` | no | `false` | Force-show the row (e.g. the latest answer). By default the row is revealed on hover / focus-within of the nearest `group/message` parent, and always shown on `hover: none` devices. Hidden rows keep their 30px height and stay tabbable. |
|
|
10
|
+
| `default-checked` | `boolean \| undefined` | no | — | |
|
|
11
|
+
| `default-value` | `string \| number \| readonly string[] \| undefined` | no | — | |
|
|
12
|
+
| `auto-focus` | `boolean \| undefined` | no | — | |
|
|
13
|
+
| `id` | `string \| undefined` | no | — | |
|
|
14
|
+
| `tab-index` | `number \| undefined` | no | — | |
|
|
15
|
+
| `title` | `string \| undefined` | no | — | |
|
|
16
|
+
| `rel` | `string \| undefined` | no | — | |
|
|
17
|
+
| `on-change` | `ChangeEventHandler<T, Element> \| undefined` | no | — | |
|
|
18
|
+
| `data-testid` | `string \| undefined` | no | — | |
|
|
19
|
+
|
|
20
|
+
## Sub-components
|
|
21
|
+
|
|
22
|
+
- `WallarmDS.MessageAction` — `MessageActionProps` in the declaration bundle.
|
|
23
|
+
- `WallarmDS.MessageTimestamp` — `MessageTimestampProps` in the declaration bundle.
|
|
24
|
+
|
|
25
|
+
## Stories
|
|
26
|
+
|
|
27
|
+
### User
|
|
28
|
+
|
|
29
|
+
Under a user message: the timestamp first, then Copy. In a chat, the parent should align
|
|
30
|
+
the row to the end of the bubble with `items-end`.
|
|
31
|
+
|
|
32
|
+
Source: MessageActions/MessageActions.stories.tsx#User
|
|
33
|
+
|
|
34
|
+
### Wally
|
|
35
|
+
|
|
36
|
+
Under a Wally answer: Copy, thumbs up and down, a more menu, then the timestamp. The
|
|
37
|
+
Ellipsis button is the menu trigger and keeps its own tooltip anchored to it.
|
|
38
|
+
|
|
39
|
+
Source: MessageActions/MessageActions.stories.tsx#Wally
|
|
40
|
+
|
|
41
|
+
### Visible
|
|
42
|
+
|
|
43
|
+
Default versus `visible`. The first row stays transparent (but tabbable) until its message
|
|
44
|
+
is hovered or focused; the second is forced on, as for the latest answer.
|
|
45
|
+
|
|
46
|
+
Source: MessageActions/MessageActions.stories.tsx#Visible
|
|
47
|
+
|
|
48
|
+
### PressedFeedback
|
|
49
|
+
|
|
50
|
+
Thumbs feedback is a plain toggle: pass `aria-pressed` and the button keeps the
|
|
51
|
+
`states-primary-active` background while pressed. Click one to try it.
|
|
52
|
+
|
|
53
|
+
Source: MessageActions/MessageActions.stories.tsx#PressedFeedback
|
|
54
|
+
|
|
55
|
+
### Analytics
|
|
56
|
+
|
|
57
|
+
`data-analytics-id` and `data-analytics-props` go straight onto each `MessageAction` and
|
|
58
|
+
land on its real `<button>` — also through `Copyable` and `DropdownMenuTrigger asChild`.
|
|
59
|
+
|
|
60
|
+
Source: MessageActions/MessageActions.stories.tsx#Analytics
|
|
61
|
+
|
|
62
|
+
## Story sources
|
|
63
|
+
|
|
64
|
+
### MessageActions/MessageActions.stories.tsx
|
|
65
|
+
|
|
66
|
+
```tsx
|
|
67
|
+
import { useState } from 'react';
|
|
68
|
+
import type { Meta, StoryFn } from 'storybook-react-rsbuild';
|
|
69
|
+
import { Ellipsis, ThumbsDown, ThumbsUp } from '../../icons';
|
|
70
|
+
import { Copyable, CopyableIcon } from '../Copyable';
|
|
71
|
+
import {
|
|
72
|
+
DropdownMenu,
|
|
73
|
+
DropdownMenuContent,
|
|
74
|
+
DropdownMenuItem,
|
|
75
|
+
DropdownMenuTrigger,
|
|
76
|
+
} from '../DropdownMenu';
|
|
77
|
+
import { MessageAction, MessageActions, MessageTimestamp } from '.';
|
|
78
|
+
|
|
79
|
+
const DESCRIPTION = [
|
|
80
|
+
'The small row of icon buttons under a chat message — copy, feedback, a more menu and a timestamp.',
|
|
81
|
+
'Every `MessageAction` is a ghost icon button whose required `aria-label` doubles as its tooltip, so the row never needs a visible caption.',
|
|
82
|
+
'By default the row is transparent until the nearest `group/message` parent is hovered or holds focus, keeping its 30px height so the conversation does not jump; pass `visible` for the latest answer.',
|
|
83
|
+
'Copy is composed with `Copyable` and `CopyableIcon`, menus with `DropdownMenuTrigger asChild`, and feedback with `aria-pressed` — the row itself holds no state.',
|
|
84
|
+
'Give a menu-trigger action an explicit `data-testid`: the trigger injects its own `--trigger` id, which replaces the cascaded `--action` one.',
|
|
85
|
+
].join(' ');
|
|
86
|
+
|
|
87
|
+
const meta = {
|
|
88
|
+
title: 'AI/MessageActions',
|
|
89
|
+
component: MessageActions,
|
|
90
|
+
subcomponents: { MessageAction, MessageTimestamp },
|
|
91
|
+
parameters: {
|
|
92
|
+
layout: 'centered',
|
|
93
|
+
docs: { description: { component: DESCRIPTION } },
|
|
94
|
+
},
|
|
95
|
+
} satisfies Meta<typeof MessageActions>;
|
|
96
|
+
|
|
97
|
+
export default meta;
|
|
98
|
+
|
|
99
|
+
const ANSWER = 'Blocked 1,204 SQL injection attempts in the last 24 hours.';
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* Under a user message: the timestamp first, then Copy. In a chat, the parent should align
|
|
103
|
+
* the row to the end of the bubble with `items-end`.
|
|
104
|
+
*/
|
|
105
|
+
export const User: StoryFn<typeof meta> = () => (
|
|
106
|
+
<MessageActions data-testid='user-actions' visible>
|
|
107
|
+
<MessageTimestamp dateTime='2026-10-21T09:41:00Z'>2m ago</MessageTimestamp>
|
|
108
|
+
<Copyable text='Show me blocked attacks'>
|
|
109
|
+
<MessageAction aria-label='Copy' data-testid='user-actions--copy'>
|
|
110
|
+
<CopyableIcon />
|
|
111
|
+
</MessageAction>
|
|
112
|
+
</Copyable>
|
|
113
|
+
</MessageActions>
|
|
114
|
+
);
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* Under a Wally answer: Copy, thumbs up and down, a more menu, then the timestamp. The
|
|
118
|
+
* Ellipsis button is the menu trigger and keeps its own tooltip anchored to it.
|
|
119
|
+
*/
|
|
120
|
+
export const Wally: StoryFn<typeof meta> = () => (
|
|
121
|
+
<MessageActions data-testid='wally-actions' visible>
|
|
122
|
+
<Copyable text={ANSWER}>
|
|
123
|
+
<MessageAction aria-label='Copy' data-testid='wally-actions--copy'>
|
|
124
|
+
<CopyableIcon />
|
|
125
|
+
</MessageAction>
|
|
126
|
+
</Copyable>
|
|
127
|
+
<MessageAction aria-label='Good response' data-testid='wally-actions--up'>
|
|
128
|
+
<ThumbsUp />
|
|
129
|
+
</MessageAction>
|
|
130
|
+
<MessageAction aria-label='Bad response' data-testid='wally-actions--down'>
|
|
131
|
+
<ThumbsDown />
|
|
132
|
+
</MessageAction>
|
|
133
|
+
<DropdownMenu>
|
|
134
|
+
<DropdownMenuTrigger asChild>
|
|
135
|
+
<MessageAction aria-label='More actions' data-testid='wally-actions--more'>
|
|
136
|
+
<Ellipsis />
|
|
137
|
+
</MessageAction>
|
|
138
|
+
</DropdownMenuTrigger>
|
|
139
|
+
<DropdownMenuContent>
|
|
140
|
+
<DropdownMenuItem>Regenerate</DropdownMenuItem>
|
|
141
|
+
<DropdownMenuItem>Report a problem</DropdownMenuItem>
|
|
142
|
+
</DropdownMenuContent>
|
|
143
|
+
</DropdownMenu>
|
|
144
|
+
<MessageTimestamp dateTime='2026-10-21T09:42:00Z'>1m ago</MessageTimestamp>
|
|
145
|
+
</MessageActions>
|
|
146
|
+
);
|
|
147
|
+
|
|
148
|
+
/**
|
|
149
|
+
* Default versus `visible`. The first row stays transparent (but tabbable) until its message
|
|
150
|
+
* is hovered or focused; the second is forced on, as for the latest answer.
|
|
151
|
+
*/
|
|
152
|
+
export const Visible: StoryFn<typeof meta> = () => (
|
|
153
|
+
<div className='flex flex-col gap-16'>
|
|
154
|
+
<div className='group/message flex flex-col items-start gap-4' data-testid='message-default'>
|
|
155
|
+
<p className='text-sm text-text-primary'>Hover to reveal</p>
|
|
156
|
+
<MessageActions data-testid='actions-default'>
|
|
157
|
+
<Copyable text={ANSWER}>
|
|
158
|
+
<MessageAction aria-label='Copy' data-testid='actions-default--copy'>
|
|
159
|
+
<CopyableIcon />
|
|
160
|
+
</MessageAction>
|
|
161
|
+
</Copyable>
|
|
162
|
+
<MessageTimestamp dateTime='2026-10-21T09:42:00Z'>1m ago</MessageTimestamp>
|
|
163
|
+
</MessageActions>
|
|
164
|
+
</div>
|
|
165
|
+
<div className='group/message flex flex-col items-start gap-4' data-testid='message-visible'>
|
|
166
|
+
<p className='text-sm text-text-primary'>visible</p>
|
|
167
|
+
<MessageActions data-testid='actions-visible' visible>
|
|
168
|
+
<Copyable text={ANSWER}>
|
|
169
|
+
<MessageAction aria-label='Copy' data-testid='actions-visible--copy'>
|
|
170
|
+
<CopyableIcon />
|
|
171
|
+
</MessageAction>
|
|
172
|
+
</Copyable>
|
|
173
|
+
<MessageTimestamp dateTime='2026-10-21T09:42:00Z'>1m ago</MessageTimestamp>
|
|
174
|
+
</MessageActions>
|
|
175
|
+
</div>
|
|
176
|
+
</div>
|
|
177
|
+
);
|
|
178
|
+
|
|
179
|
+
/**
|
|
180
|
+
* Thumbs feedback is a plain toggle: pass `aria-pressed` and the button keeps the
|
|
181
|
+
* `states-primary-active` background while pressed. Click one to try it.
|
|
182
|
+
*/
|
|
183
|
+
export const PressedFeedback: StoryFn<typeof meta> = () => {
|
|
184
|
+
const [feedback, setFeedback] = useState<'up' | 'down' | null>('up');
|
|
185
|
+
|
|
186
|
+
const handleGoodClick = () => {
|
|
187
|
+
setFeedback(current => (current === 'up' ? null : 'up'));
|
|
188
|
+
};
|
|
189
|
+
|
|
190
|
+
const handleBadClick = () => {
|
|
191
|
+
setFeedback(current => (current === 'down' ? null : 'down'));
|
|
192
|
+
};
|
|
193
|
+
|
|
194
|
+
return (
|
|
195
|
+
<MessageActions data-testid='feedback-actions' visible>
|
|
196
|
+
<MessageAction
|
|
197
|
+
aria-label='Good response'
|
|
198
|
+
aria-pressed={feedback === 'up'}
|
|
199
|
+
data-testid='feedback-up'
|
|
200
|
+
onClick={handleGoodClick}
|
|
201
|
+
>
|
|
202
|
+
<ThumbsUp />
|
|
203
|
+
</MessageAction>
|
|
204
|
+
<MessageAction
|
|
205
|
+
aria-label='Bad response'
|
|
206
|
+
aria-pressed={feedback === 'down'}
|
|
207
|
+
data-testid='feedback-down'
|
|
208
|
+
onClick={handleBadClick}
|
|
209
|
+
>
|
|
210
|
+
<ThumbsDown />
|
|
211
|
+
</MessageAction>
|
|
212
|
+
</MessageActions>
|
|
213
|
+
);
|
|
214
|
+
};
|
|
215
|
+
|
|
216
|
+
/**
|
|
217
|
+
* `data-analytics-id` and `data-analytics-props` go straight onto each `MessageAction` and
|
|
218
|
+
* land on its real `<button>` — also through `Copyable` and `DropdownMenuTrigger asChild`.
|
|
219
|
+
*/
|
|
220
|
+
export const Analytics: StoryFn<typeof meta> = () => (
|
|
221
|
+
<MessageActions data-testid='analytics-actions' visible>
|
|
222
|
+
<Copyable text={ANSWER}>
|
|
223
|
+
<MessageAction
|
|
224
|
+
aria-label='Copy'
|
|
225
|
+
data-testid='analytics-actions--copy'
|
|
226
|
+
data-analytics-id='WALLY_ANSWER_COPY'
|
|
227
|
+
>
|
|
228
|
+
<CopyableIcon />
|
|
229
|
+
</MessageAction>
|
|
230
|
+
</Copyable>
|
|
231
|
+
<MessageAction
|
|
232
|
+
aria-label='Good response'
|
|
233
|
+
data-testid='analytics-actions--up'
|
|
234
|
+
data-analytics-id='WALLY_ANSWER_FEEDBACK'
|
|
235
|
+
data-analytics-props='{"rating":"up"}'
|
|
236
|
+
>
|
|
237
|
+
<ThumbsUp />
|
|
238
|
+
</MessageAction>
|
|
239
|
+
<DropdownMenu>
|
|
240
|
+
<DropdownMenuTrigger asChild>
|
|
241
|
+
<MessageAction
|
|
242
|
+
aria-label='More actions'
|
|
243
|
+
data-testid='analytics-actions--more'
|
|
244
|
+
data-analytics-id='WALLY_ANSWER_MORE'
|
|
245
|
+
>
|
|
246
|
+
<Ellipsis />
|
|
247
|
+
</MessageAction>
|
|
248
|
+
</DropdownMenuTrigger>
|
|
249
|
+
<DropdownMenuContent>
|
|
250
|
+
<DropdownMenuItem>Regenerate</DropdownMenuItem>
|
|
251
|
+
</DropdownMenuContent>
|
|
252
|
+
</DropdownMenu>
|
|
253
|
+
</MessageActions>
|
|
254
|
+
);
|
|
255
|
+
```
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
var e={vD(e,t,a){let r,n;/**
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*
|
|
7
|
+
* @lightSyntaxTransform
|
|
8
|
+
* @noflow
|
|
9
|
+
* @nolint
|
|
10
|
+
* @preventMunge
|
|
11
|
+
* @preserve-invariant-messages
|
|
12
|
+
*/var o,l,i=Object.create,c=Object.defineProperty,s=Object.getOwnPropertyDescriptor,d=Object.getOwnPropertyNames,u=Object.getPrototypeOf,p=Object.prototype.hasOwnProperty,m=(e,t,a,r)=>{if(t&&"object"==typeof t||"function"==typeof t)for(let n of d(t))p.call(e,n)||n===a||c(e,n,{get:()=>t[n],enumerable:!(r=s(t,n))||r.enumerable});return e},f={},y={$dispatcherGuard:()=>M,$makeReadOnly:()=>x,$reset:()=>k,$structuralCheck:()=>W,c:()=>E,clearRenderCounterRegistry:()=>O,renderCounterRegistry:()=>D,useRenderCounter:()=>T};for(var h in y)c(f,h,{get:y[h],enumerable:!0});e.exports=m(c({},"__esModule",{value:!0}),f);var b=(n=null!=(r=a("C"))?i(u(r)):{},m(r&&r.__esModule?n:c(n,"default",{value:r,enumerable:!0}),r)),{useRef:w,useEffect:_,isValidElement:g}=b,S=null!=(o=b.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE)?o:b.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,v=Symbol.for("react.memo_cache_sentinel"),E="function"==typeof(null==(l=b.__COMPILER_RUNTIME)?void 0:l.c)?b.__COMPILER_RUNTIME.c:function(e){return b.useMemo(()=>{let t=Array(e);for(let a=0;a<e;a++)t[a]=v;return t[v]=!0,t},[])},R={};["readContext","useCallback","useContext","useEffect","useImperativeHandle","useInsertionEffect","useLayoutEffect","useMemo","useReducer","useRef","useState","useDebugValue","useDeferredValue","useTransition","useMutableSource","useSyncExternalStore","useId","unstable_isNewReconciler","getCacheSignal","getCacheForType","useCacheRefresh"].forEach(e=>{R[e]=()=>{throw Error(`[React] Unexpected React hook call (${e}) from a React compiled function. Check that all hooks are called directly and named according to convention ('use[A-Z]') `)}});var C=null;function $(e){return S.ReactCurrentDispatcher.current=e,S.ReactCurrentDispatcher.current}R.useMemoCache=e=>{if(null!=C)return C.useMemoCache(e);throw Error("React Compiler internal invariant violation: unexpected null dispatcher")};var N=[];function M(e){let t=S.ReactCurrentDispatcher.current;if(0===e){if(N.push(t),1===N.length&&(C=t),t===R)throw Error("[React] Unexpected call to custom hook or component from a React compiled function. Check that (1) all hooks are called directly and named according to convention ('use[A-Z]') and (2) components are returned as JSX instead of being directly invoked.");$(R)}else if(1===e){let e=N.pop();if(null==e)throw Error("React Compiler internal error: unexpected null in guard stack");0===N.length&&(C=null),$(e)}else if(2===e)N.push(t),$(C);else if(3===e){let e=N.pop();if(null==e)throw Error("React Compiler internal error: unexpected null in guard stack");$(e)}else throw Error("React Compiler internal error: unreachable block"+e)}function k(e){for(let t=0;t<e.length;t++)e[t]=v}function x(){throw Error("TODO: implement $makeReadOnly in react-compiler-runtime")}var D=new Map;function O(){for(let e of D.values())e.forEach(e=>{e.count=0})}function T(e){let t=w(null);null!=t.current&&(t.current.count+=1),_(()=>{if(null==t.current){let a,r={count:0};null==(a=D.get(e))&&(a=new Set,D.set(e,a)),a.add(r),t.current=r}return()=>{var a;let r;null!==t.current&&(a=t.current,null!=(r=D.get(e))&&r.delete(a))}})}var A=new Set;function W(e,t,a,r,n,o){function l(e,t,l,i){let c=`${r}:${o} [${n}] ${a}${l} changed from ${e} to ${t} at depth ${i}`;A.has(c)||(A.add(c),console.error(c))}!function e(t,a,r,n){if(!(n>2)){if(t!==a)if(typeof t!=typeof a)l(`type ${typeof t}`,`type ${typeof a}`,r,n);else if("object"==typeof t){let o=Array.isArray(t),i=Array.isArray(a);if(null===t&&null!==a)l("null",`type ${typeof a}`,r,n);else if(null===a)l(`type ${typeof t}`,"null",r,n);else if(t instanceof Map)if(a instanceof Map)if(t.size!==a.size)l(`Map instance with size ${t.size}`,`Map instance with size ${a.size}`,r,n);else for(let[o,i]of t)a.has(o)?e(i,a.get(o),`${r}.get(${o})`,n+1):l(`Map instance with key ${o}`,`Map instance without key ${o}`,r,n);else l("Map instance","other value",r,n);else if(a instanceof Map)l("other value","Map instance",r,n);else if(t instanceof Set)if(a instanceof Set)if(t.size!==a.size)l(`Set instance with size ${t.size}`,`Set instance with size ${a.size}`,r,n);else for(let e of a)t.has(e)||l(`Set instance without element ${e}`,`Set instance with element ${e}`,r,n);else l("Set instance","other value",r,n);else if(a instanceof Set)l("other value","Set instance",r,n);else if(o||i)if(o!==i)l(`type ${o?"array":"object"}`,`type ${i?"array":"object"}`,r,n);else if(t.length!==a.length)l(`array with length ${t.length}`,`array with length ${a.length}`,r,n);else for(let o=0;o<t.length;o++)e(t[o],a[o],`${r}[${o}]`,n+1);else if(g(t)||g(a))g(t)!==g(a)?l(`type ${g(t)?"React element":"object"}`,`type ${g(a)?"React element":"object"}`,r,n):t.type!==a.type?l(`React element of type ${t.type}`,`React element of type ${a.type}`,r,n):e(t.props,a.props,`[props of ${r}]`,n+1);else{for(let e in a)e in t||l(`object without key ${e}`,`object with key ${e}`,r,n);for(let o in t)o in a?e(t[o],a[o],`${r}.${o}`,n+1):l(`object with key ${o}`,`object without key ${o}`,r,n)}}else{if("function"==typeof t)return;isNaN(t)||isNaN(a)?isNaN(t)!==isNaN(a)&&l(`${isNaN(t)?"NaN":"non-NaN value"}`,`${isNaN(a)?"NaN":"non-NaN value"}`,r,n):t!==a&&l(t,a,r,n)}}}(e,t,"",0)}},p(e,t,a){let r=new WeakMap,n=new WeakMap;function o(e,t,a){let o=t,l=a;if("object"==typeof o&&null!==o&&"$$typeof"in o&&o.$$typeof===Symbol.for("react.context")&&"Provider"in o&&(o=o.Provider),"function"==typeof o&&null!=l.ref&&!o.prototype?.isReactComponent){let t=o,a=r.get(e);a||(a=new WeakMap,r.set(e,a));let n=a.get(t);n||((n=e.forwardRef((e,a)=>t({...e,ref:a}))).displayName=t.displayName??t.name,a.set(t,n)),o=n}if("string"==typeof o&&"boolean"==typeof l.inert&&((l={...l}).inert?l.inert="":delete l.inert),"string"==typeof o)for(let[e,t]of[["fill-rule","fillRule"],["clip-rule","clipRule"]])e in l&&(l={...l,[t]:l[e]},delete l[e]);return"string"==typeof o&&null!=l.ref&&(o=function(e,t){let a=n.get(e);a||(a=new Map,n.set(e,a));let r=a.get(t);if(r)return r;let o=e.forwardRef((a,r)=>{let n=e.useRef(null);if(!n.current||n.current.original!==r){let e;n.current={original:r,callback:t=>{if(null==t&&e){let t=e;e=void 0,t();return}if("function"==typeof r){let a=r(t);e="function"==typeof a?a:void 0}else r&&(r.current=t)}}}return e.createElement(t,{...a,ref:n.current.callback})});return o.displayName=`CanvasHost(${t})`,a.set(t,o),o}(e,o)),{type:o,props:l}}function l(e){let t=(t,a,r)=>{let n=o(e,t,a??{});return e.createElement(n.type,void 0===r?n.props:{...n.props,key:r})};return{jsx:t,jsxs:(t,a,r)=>{let n=o(e,t,a??{}),{children:l,...i}=n.props;return e.createElement(n.type,void 0===r?i:{...i,key:r},...Array.isArray(l)?l:[l])},jsxDEV:t,Fragment:e.Fragment}}function i(e){return{...e,createElement:(t,a,...r)=>{let n=o(e,t,a??{});return e.createElement(n.type,n.props,...r)},cloneElement:(t,a,...r)=>{let n=e.cloneElement(t,a??void 0,...r),l=n.ref,i=o(e,n.type,{...n.props,ref:l});return i.type===n.type&&"string"!=typeof n.type?n:e.createElement(i.type,{...i.props,key:n.key})}}}a.d(t,{MA:()=>l,YJ:()=>i})},C(e,t,a){a.r(t);let r=(0,a("p").YJ)(window.React),{Children:n,Component:o,Fragment:l,Profiler:i,PureComponent:c,StrictMode:s,Suspense:d,__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED:u,act:p,cloneElement:m,createContext:f,createElement:y,createFactory:h,createRef:b,forwardRef:w,isValidElement:_,lazy:g,memo:S,startTransition:v,unstable_act:E,useCallback:R,useContext:C,useDebugValue:$,useDeferredValue:N,useEffect:M,useId:k,useImperativeHandle:x,useInsertionEffect:D,useLayoutEffect:O,useMemo:T,useReducer:A,useRef:W,useState:j,useSyncExternalStore:I,useTransition:L,version:P,use:z}=r;a.d(t,{},{Children:n,Component:o,Fragment:l,Profiler:i,PureComponent:c,StrictMode:s,Suspense:d,__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED:u,act:p,cloneElement:m,createContext:f,createElement:y,createFactory:h,createRef:b,default:r,forwardRef:w,isValidElement:_,lazy:g,memo:S,startTransition:v,unstable_act:E,use:z,useCallback:R,useContext:C,useDebugValue:$,useDeferredValue:N,useEffect:M,useId:k,useImperativeHandle:x,useInsertionEffect:D,useLayoutEffect:O,useMemo:T,useReducer:A,useRef:W,useState:j,useSyncExternalStore:I,useTransition:L,version:P})}},t={};function a(r){var n=t[r];if(void 0!==n)return n.exports;var o=t[r]={exports:{}};return e[r](o,o.exports,a),o.exports}a.d=(e,t,r)=>{var n=(t,r)=>{for(var n in t)a.o(t,n)&&!a.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,[r]:t[n]})};n(t,"get"),n(r,"value")},a.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),a.r=e=>{"u">typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},(()=>{let{jsx:e,jsxs:t,jsxDEV:r,Fragment:n}=(0,a("p").MA)(window.React);var o=a("vD"),l=a("C");let i=window.WallarmDS.Icons.Ellipsis,c=window.WallarmDS.Icons.ThumbsDown,s=window.WallarmDS.Icons.ThumbsUp,d=window.WallarmDS.Copyable,u=window.WallarmDS.CopyableIcon,p=window.WallarmDS.DropdownMenu,m=window.WallarmDS.DropdownMenuContent,f=window.WallarmDS.DropdownMenuItem,y=window.WallarmDS.DropdownMenuTrigger,h=window.WallarmDS.MessageAction,b=window.WallarmDS.MessageActions,w=window.WallarmDS.MessageTimestamp,_={title:"AI/MessageActions",component:b,subcomponents:{MessageAction:h,MessageTimestamp:w},parameters:{layout:"centered",docs:{description:{component:"The small row of icon buttons under a chat message — copy, feedback, a more menu and a timestamp. Every `MessageAction` is a ghost icon button whose required `aria-label` doubles as its tooltip, so the row never needs a visible caption. By default the row is transparent until the nearest `group/message` parent is hovered or holds focus, keeping its 30px height so the conversation does not jump; pass `visible` for the latest answer. Copy is composed with `Copyable` and `CopyableIcon`, menus with `DropdownMenuTrigger asChild`, and feedback with `aria-pressed` — the row itself holds no state. Give a menu-trigger action an explicit `data-testid`: the trigger injects its own `--trigger` id, which replaces the cascaded `--action` one."}}}},g="Blocked 1,204 SQL injection attempts in the last 24 hours.";function S(e){return"up"===e?null:"up"}function v(e){return"down"===e?null:"down"}let E=[{name:"User",story:()=>{let a,r,n=(0,o.c)(2);return n[0]===Symbol.for("react.memo_cache_sentinel")?(a=e(w,{dateTime:"2026-10-21T09:41:00Z",children:"2m ago"}),n[0]=a):a=n[0],n[1]===Symbol.for("react.memo_cache_sentinel")?(r=t(b,{"data-testid":"user-actions",visible:!0,children:[a,e(d,{text:"Show me blocked attacks",children:e(h,{"aria-label":"Copy","data-testid":"user-actions--copy",children:e(u,{})})})]}),n[1]=r):r=n[1],r},meta:_},{name:"Wally",story:()=>{let a,r,n,l,_,S=(0,o.c)(5);return S[0]===Symbol.for("react.memo_cache_sentinel")?(a=e(d,{text:g,children:e(h,{"aria-label":"Copy","data-testid":"wally-actions--copy",children:e(u,{})})}),S[0]=a):a=S[0],S[1]===Symbol.for("react.memo_cache_sentinel")?(r=e(h,{"aria-label":"Good response","data-testid":"wally-actions--up",children:e(s,{})}),S[1]=r):r=S[1],S[2]===Symbol.for("react.memo_cache_sentinel")?(n=e(h,{"aria-label":"Bad response","data-testid":"wally-actions--down",children:e(c,{})}),S[2]=n):n=S[2],S[3]===Symbol.for("react.memo_cache_sentinel")?(l=e(y,{asChild:!0,children:e(h,{"aria-label":"More actions","data-testid":"wally-actions--more",children:e(i,{})})}),S[3]=l):l=S[3],S[4]===Symbol.for("react.memo_cache_sentinel")?(_=t(b,{"data-testid":"wally-actions",visible:!0,children:[a,r,n,t(p,{children:[l,t(m,{children:[e(f,{children:"Regenerate"}),e(f,{children:"Report a problem"})]})]}),e(w,{dateTime:"2026-10-21T09:42:00Z",children:"1m ago"})]}),S[4]=_):_=S[4],_},meta:_},{name:"Visible",story:()=>{let a,r,n,l,i=(0,o.c)(4);return i[0]===Symbol.for("react.memo_cache_sentinel")?(a=e("p",{className:"text-sm text-text-primary",children:"Hover to reveal"}),i[0]=a):a=i[0],i[1]===Symbol.for("react.memo_cache_sentinel")?(r=t("div",{className:"group/message flex flex-col items-start gap-4","data-testid":"message-default",children:[a,t(b,{"data-testid":"actions-default",children:[e(d,{text:g,children:e(h,{"aria-label":"Copy","data-testid":"actions-default--copy",children:e(u,{})})}),e(w,{dateTime:"2026-10-21T09:42:00Z",children:"1m ago"})]})]}),i[1]=r):r=i[1],i[2]===Symbol.for("react.memo_cache_sentinel")?(n=e("p",{className:"text-sm text-text-primary",children:"visible"}),i[2]=n):n=i[2],i[3]===Symbol.for("react.memo_cache_sentinel")?(l=t("div",{className:"flex flex-col gap-16",children:[r,t("div",{className:"group/message flex flex-col items-start gap-4","data-testid":"message-visible",children:[n,t(b,{"data-testid":"actions-visible",visible:!0,children:[e(d,{text:g,children:e(h,{"aria-label":"Copy","data-testid":"actions-visible--copy",children:e(u,{})})}),e(w,{dateTime:"2026-10-21T09:42:00Z",children:"1m ago"})]})]})]}),i[3]=l):l=i[3],l},meta:_},{name:"PressedFeedback",story:()=>{let a,r,n,i,d,u,p,m=(0,o.c)(11),[f,y]=(0,l.useState)("up");m[0]===Symbol.for("react.memo_cache_sentinel")?(a=()=>{y(S)},m[0]=a):a=m[0];let w=a;m[1]===Symbol.for("react.memo_cache_sentinel")?(r=()=>{y(v)},m[1]=r):r=m[1];let _=r,g="up"===f;m[2]===Symbol.for("react.memo_cache_sentinel")?(n=e(s,{}),m[2]=n):n=m[2],m[3]!==g?(i=e(h,{"aria-label":"Good response","aria-pressed":g,"data-testid":"feedback-up",onClick:w,children:n}),m[3]=g,m[4]=i):i=m[4];let E="down"===f;return m[5]===Symbol.for("react.memo_cache_sentinel")?(d=e(c,{}),m[5]=d):d=m[5],m[6]!==E?(u=e(h,{"aria-label":"Bad response","aria-pressed":E,"data-testid":"feedback-down",onClick:_,children:d}),m[6]=E,m[7]=u):u=m[7],m[8]!==i||m[9]!==u?(p=t(b,{"data-testid":"feedback-actions",visible:!0,children:[i,u]}),m[8]=i,m[9]=u,m[10]=p):p=m[10],p},meta:_},{name:"Analytics",story:()=>{let a,r,n,l,c=(0,o.c)(4);return c[0]===Symbol.for("react.memo_cache_sentinel")?(a=e(d,{text:g,children:e(h,{"aria-label":"Copy","data-testid":"analytics-actions--copy","data-analytics-id":"WALLY_ANSWER_COPY",children:e(u,{})})}),c[0]=a):a=c[0],c[1]===Symbol.for("react.memo_cache_sentinel")?(r=e(h,{"aria-label":"Good response","data-testid":"analytics-actions--up","data-analytics-id":"WALLY_ANSWER_FEEDBACK","data-analytics-props":'{"rating":"up"}',children:e(s,{})}),c[1]=r):r=c[1],c[2]===Symbol.for("react.memo_cache_sentinel")?(n=e(y,{asChild:!0,children:e(h,{"aria-label":"More actions","data-testid":"analytics-actions--more","data-analytics-id":"WALLY_ANSWER_MORE",children:e(i,{})})}),c[2]=n):n=c[2],c[3]===Symbol.for("react.memo_cache_sentinel")?(l=t(b,{"data-testid":"analytics-actions",visible:!0,children:[a,r,t(p,{children:[n,e(m,{children:e(f,{children:"Regenerate"})})]})]}),c[3]=l):l=c[3],l},meta:_}];function R({entry:e}){let{story:t,meta:a}=e,r={...a.args,...t.args},n="function"==typeof t||t.$$typeof?t:t.render||a.render||a.component,o=()=>l.default.createElement(n,r),i={args:r,globals:{theme:"light"},parameters:{...a.parameters,...t.parameters},viewMode:"story"};for(let e of[...a.decorators||[],...t.decorators||[]].reverse()){let t=o;o=()=>e(t,i)}return l.default.createElement("section",{"data-preview-story":e.name,className:"p-16"},l.default.createElement("h2",{className:"text-sm mb-12"},e.name),l.default.createElement(o))}window.WallarmPreview={mount(e){let t=window.ReactDOM.createRoot(e);return t.render(l.default.createElement(window.WallarmDS.Root,null,E.map((e,t)=>l.default.createElement(R,{key:t,entry:e})))),t}}})();
|
|
@@ -0,0 +1,324 @@
|
|
|
1
|
+
The family's compact stat — one number, optionally against a total and a change — for a card with no breakdown to draw; reach for `HorizontalBarStack` once that number splits into named parts. It is a brick set rather than a set of props: `MetricHeader` holds `MetricValue`, `MetricTotal` and `MetricDelta`, with `MetricCaption` beneath. On the delta, `sentiment` picks the colour and `trend` picks the arrow, on purpose independently — a number going up is not always good news. Add `MetricSparkline` after `Metric` to show the trend over the period; hover it for a point's date and value.
|
|
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.MetricCaption` — `MetricCaptionProps` in the declaration bundle.
|
|
22
|
+
- `WallarmDS.MetricDelta` — `MetricDeltaProps` in the declaration bundle.
|
|
23
|
+
- `WallarmDS.MetricHeader` — `MetricHeaderProps` in the declaration bundle.
|
|
24
|
+
- `WallarmDS.MetricSkeleton` — `MetricSkeletonProps` in the declaration bundle.
|
|
25
|
+
- `WallarmDS.MetricSparkline` — `MetricSparklineProps` in the declaration bundle.
|
|
26
|
+
- `WallarmDS.MetricTotal` — `MetricTotalProps` in the declaration bundle.
|
|
27
|
+
- `WallarmDS.MetricValue` — `MetricValueProps` in the declaration bundle.
|
|
28
|
+
|
|
29
|
+
## Stories
|
|
30
|
+
|
|
31
|
+
### Gallery
|
|
32
|
+
|
|
33
|
+
Every brick combination on its own card, mirroring the Figma options board: value alone,
|
|
34
|
+
value with a delta in each sentiment, and the three `MetricTotal` connectors: a slash, the
|
|
35
|
+
word "of", and the word "total" after the number.
|
|
36
|
+
|
|
37
|
+
Source: SimpleCharts/Metric/Metric.stories.tsx#Gallery
|
|
38
|
+
|
|
39
|
+
### Loading
|
|
40
|
+
|
|
41
|
+
`MetricSkeleton` in place of the stat while the card loads, so the number arriving does not
|
|
42
|
+
resize the card.
|
|
43
|
+
|
|
44
|
+
Source: SimpleCharts/Metric/Metric.stories.tsx#Loading
|
|
45
|
+
|
|
46
|
+
### Sparkline
|
|
47
|
+
|
|
48
|
+
`MetricSparkline` after `Metric` draws the trend over the period, edge to edge along the
|
|
49
|
+
card's bottom. Hover it for a ruler on the nearest point and a popover with its date and value.
|
|
50
|
+
|
|
51
|
+
Source: SimpleCharts/Metric/Metric.stories.tsx#Sparkline
|
|
52
|
+
|
|
53
|
+
### SparklineColors
|
|
54
|
+
|
|
55
|
+
The sparkline's `color` is set per chart, on purpose apart from the delta's `sentiment`:
|
|
56
|
+
`brand` (default), `positive`, `negative`, and `neutral`.
|
|
57
|
+
|
|
58
|
+
Source: SimpleCharts/Metric/Metric.stories.tsx#SparklineColors
|
|
59
|
+
|
|
60
|
+
## Story sources
|
|
61
|
+
|
|
62
|
+
### SimpleCharts/Metric/Metric.stories.tsx
|
|
63
|
+
|
|
64
|
+
```tsx
|
|
65
|
+
import type { FC, ReactNode } from 'react';
|
|
66
|
+
import type { Meta, StoryFn } from 'storybook-react-rsbuild';
|
|
67
|
+
import { Chart } from '../Chart/Chart';
|
|
68
|
+
import { ChartHeader } from '../Chart/ChartHeader';
|
|
69
|
+
import { ChartTitle } from '../Chart/ChartTitle';
|
|
70
|
+
import { Metric } from './Metric';
|
|
71
|
+
import { MetricCaption } from './MetricCaption';
|
|
72
|
+
import { MetricDelta } from './MetricDelta';
|
|
73
|
+
import { MetricHeader } from './MetricHeader';
|
|
74
|
+
import { MetricSkeleton } from './MetricSkeleton';
|
|
75
|
+
import { MetricSparkline, type MetricSparklinePoint } from './MetricSparkline';
|
|
76
|
+
import { MetricTotal } from './MetricTotal';
|
|
77
|
+
import { MetricValue } from './MetricValue';
|
|
78
|
+
|
|
79
|
+
const figmaUrl =
|
|
80
|
+
'https://www.figma.com/design/VKb5gW46uSGw0rqrhZsbXT/WADS-Components?node-id=11437-11939';
|
|
81
|
+
|
|
82
|
+
const sparklineFigmaUrl =
|
|
83
|
+
'https://www.figma.com/design/VKb5gW46uSGw0rqrhZsbXT/WADS-Components?node-id=12610-10640';
|
|
84
|
+
|
|
85
|
+
const DESCRIPTION = [
|
|
86
|
+
"The family's compact stat — one number, optionally against a total and a change — for a card with no breakdown to draw; reach for `HorizontalBarStack` once that number splits into named parts.",
|
|
87
|
+
'It is a brick set rather than a set of props: `MetricHeader` holds `MetricValue`, `MetricTotal` and `MetricDelta`, with `MetricCaption` beneath. On the delta, `sentiment` picks the colour and `trend` picks the arrow, on purpose independently — a number going up is not always good news.',
|
|
88
|
+
"Add `MetricSparkline` after `Metric` to show the trend over the period; hover it for a point's date and value.",
|
|
89
|
+
].join(' ');
|
|
90
|
+
|
|
91
|
+
const meta = {
|
|
92
|
+
title: 'Data Display/SimpleCharts/Metric',
|
|
93
|
+
component: Metric,
|
|
94
|
+
parameters: {
|
|
95
|
+
layout: 'padded',
|
|
96
|
+
design: { type: 'figma', url: figmaUrl },
|
|
97
|
+
docs: { description: { component: DESCRIPTION } },
|
|
98
|
+
},
|
|
99
|
+
} satisfies Meta<typeof Metric>;
|
|
100
|
+
|
|
101
|
+
export default meta;
|
|
102
|
+
|
|
103
|
+
/** A single Metric composed on the Chart card, as it ships in product. */
|
|
104
|
+
const Card: FC<{ title: string; children: ReactNode }> = ({ title, children }) => (
|
|
105
|
+
<div className='w-320'>
|
|
106
|
+
<Chart>
|
|
107
|
+
<ChartHeader>
|
|
108
|
+
<ChartTitle>{title}</ChartTitle>
|
|
109
|
+
</ChartHeader>
|
|
110
|
+
{children}
|
|
111
|
+
</Chart>
|
|
112
|
+
</div>
|
|
113
|
+
);
|
|
114
|
+
|
|
115
|
+
/**
|
|
116
|
+
* Every brick combination on its own card, mirroring the Figma options board: value alone,
|
|
117
|
+
* value with a delta in each sentiment, and the three `MetricTotal` connectors: a slash, the
|
|
118
|
+
* word "of", and the word "total" after the number.
|
|
119
|
+
*/
|
|
120
|
+
export const Gallery: StoryFn = () => (
|
|
121
|
+
<div className='flex flex-wrap gap-16'>
|
|
122
|
+
<Card title='Value only'>
|
|
123
|
+
<Metric data-testid='metric'>
|
|
124
|
+
<MetricHeader>
|
|
125
|
+
<MetricValue>91</MetricValue>
|
|
126
|
+
</MetricHeader>
|
|
127
|
+
</Metric>
|
|
128
|
+
</Card>
|
|
129
|
+
|
|
130
|
+
<Card title='Negative — count rose'>
|
|
131
|
+
<Metric>
|
|
132
|
+
<MetricHeader>
|
|
133
|
+
<MetricValue>91</MetricValue>
|
|
134
|
+
<MetricDelta value={10} trend='up' sentiment='negative' />
|
|
135
|
+
</MetricHeader>
|
|
136
|
+
</Metric>
|
|
137
|
+
</Card>
|
|
138
|
+
|
|
139
|
+
<Card title='Positive — count fell'>
|
|
140
|
+
<Metric>
|
|
141
|
+
<MetricHeader>
|
|
142
|
+
<MetricValue>74</MetricValue>
|
|
143
|
+
<MetricDelta value={8} trend='down' sentiment='positive' />
|
|
144
|
+
</MetricHeader>
|
|
145
|
+
</Metric>
|
|
146
|
+
</Card>
|
|
147
|
+
|
|
148
|
+
<Card title='Neutral'>
|
|
149
|
+
<Metric>
|
|
150
|
+
<MetricHeader>
|
|
151
|
+
<MetricValue>91</MetricValue>
|
|
152
|
+
<MetricDelta value={10} trend='up' />
|
|
153
|
+
</MetricHeader>
|
|
154
|
+
</Metric>
|
|
155
|
+
</Card>
|
|
156
|
+
|
|
157
|
+
<Card title='Total — slash'>
|
|
158
|
+
<Metric>
|
|
159
|
+
<MetricHeader>
|
|
160
|
+
<MetricValue>91</MetricValue>
|
|
161
|
+
<MetricTotal connector='slash'>120</MetricTotal>
|
|
162
|
+
<MetricDelta value={10} trend='up' sentiment='negative' />
|
|
163
|
+
</MetricHeader>
|
|
164
|
+
</Metric>
|
|
165
|
+
</Card>
|
|
166
|
+
|
|
167
|
+
<Card title='Total — of'>
|
|
168
|
+
<Metric>
|
|
169
|
+
<MetricHeader>
|
|
170
|
+
<MetricValue>91</MetricValue>
|
|
171
|
+
<MetricTotal connector='of'>120</MetricTotal>
|
|
172
|
+
<MetricDelta value={10} trend='up' sentiment='negative' />
|
|
173
|
+
</MetricHeader>
|
|
174
|
+
</Metric>
|
|
175
|
+
</Card>
|
|
176
|
+
|
|
177
|
+
<Card title='Total — total'>
|
|
178
|
+
<Metric>
|
|
179
|
+
<MetricHeader>
|
|
180
|
+
<MetricValue>91</MetricValue>
|
|
181
|
+
<MetricTotal connector='total'>120</MetricTotal>
|
|
182
|
+
<MetricDelta value={10} trend='up' sentiment='negative' />
|
|
183
|
+
</MetricHeader>
|
|
184
|
+
</Metric>
|
|
185
|
+
</Card>
|
|
186
|
+
|
|
187
|
+
<Card title='With caption'>
|
|
188
|
+
<Metric>
|
|
189
|
+
<MetricHeader>
|
|
190
|
+
<MetricValue>91</MetricValue>
|
|
191
|
+
<MetricDelta value={10} trend='up' sentiment='negative' />
|
|
192
|
+
</MetricHeader>
|
|
193
|
+
<MetricCaption>blocked today</MetricCaption>
|
|
194
|
+
</Metric>
|
|
195
|
+
</Card>
|
|
196
|
+
|
|
197
|
+
<Card title='Everything'>
|
|
198
|
+
<Metric>
|
|
199
|
+
<MetricHeader>
|
|
200
|
+
<MetricValue>91</MetricValue>
|
|
201
|
+
<MetricTotal connector='of'>120</MetricTotal>
|
|
202
|
+
<MetricDelta value={10} trend='up' sentiment='negative' />
|
|
203
|
+
</MetricHeader>
|
|
204
|
+
<MetricCaption>blocked today</MetricCaption>
|
|
205
|
+
</Metric>
|
|
206
|
+
</Card>
|
|
207
|
+
</div>
|
|
208
|
+
);
|
|
209
|
+
|
|
210
|
+
/**
|
|
211
|
+
* `MetricSkeleton` in place of the stat while the card loads, so the number arriving does not
|
|
212
|
+
* resize the card.
|
|
213
|
+
*/
|
|
214
|
+
export const Loading: StoryFn = () => (
|
|
215
|
+
<Card title='Findings'>
|
|
216
|
+
<MetricSkeleton data-testid='metric-skeleton' />
|
|
217
|
+
</Card>
|
|
218
|
+
);
|
|
219
|
+
|
|
220
|
+
const attacks: MetricSparklinePoint[] = [
|
|
221
|
+
{ x: new Date(2026, 0, 1), value: 14 },
|
|
222
|
+
{ x: new Date(2026, 0, 2), value: 11 },
|
|
223
|
+
{ x: new Date(2026, 0, 3), value: 11 },
|
|
224
|
+
{ x: new Date(2026, 0, 4), value: 11 },
|
|
225
|
+
{ x: new Date(2026, 0, 5), value: 16 },
|
|
226
|
+
{ x: new Date(2026, 0, 6), value: 18 },
|
|
227
|
+
{ x: new Date(2026, 0, 7), value: 20 },
|
|
228
|
+
{ x: new Date(2026, 0, 8), value: 19 },
|
|
229
|
+
{ x: new Date(2026, 0, 9), value: 13 },
|
|
230
|
+
];
|
|
231
|
+
|
|
232
|
+
/**
|
|
233
|
+
* `MetricSparkline` after `Metric` draws the trend over the period, edge to edge along the
|
|
234
|
+
* card's bottom. Hover it for a ruler on the nearest point and a popover with its date and value.
|
|
235
|
+
*/
|
|
236
|
+
export const Sparkline: StoryFn = () => (
|
|
237
|
+
<div className='w-400'>
|
|
238
|
+
<Chart>
|
|
239
|
+
<ChartHeader>
|
|
240
|
+
<ChartTitle>Attacks</ChartTitle>
|
|
241
|
+
</ChartHeader>
|
|
242
|
+
<Metric>
|
|
243
|
+
<MetricHeader>
|
|
244
|
+
<MetricValue>91</MetricValue>
|
|
245
|
+
<MetricDelta value={10} trend='up' sentiment='positive' />
|
|
246
|
+
</MetricHeader>
|
|
247
|
+
<MetricCaption>last 9 days</MetricCaption>
|
|
248
|
+
</Metric>
|
|
249
|
+
<MetricSparkline data-testid='sparkline' data={attacks} label='Attacks' />
|
|
250
|
+
</Chart>
|
|
251
|
+
</div>
|
|
252
|
+
);
|
|
253
|
+
Sparkline.parameters = { design: { type: 'figma', url: sparklineFigmaUrl } };
|
|
254
|
+
|
|
255
|
+
/**
|
|
256
|
+
* The sparkline's `color` is set per chart, on purpose apart from the delta's `sentiment`:
|
|
257
|
+
* `brand` (default), `positive`, `negative`, and `neutral`.
|
|
258
|
+
*/
|
|
259
|
+
export const SparklineColors: StoryFn = () => (
|
|
260
|
+
<div className='flex flex-wrap gap-16'>
|
|
261
|
+
<div className='w-256'>
|
|
262
|
+
<Chart>
|
|
263
|
+
<ChartHeader>
|
|
264
|
+
<ChartTitle>Negative</ChartTitle>
|
|
265
|
+
</ChartHeader>
|
|
266
|
+
<Metric>
|
|
267
|
+
<MetricHeader>
|
|
268
|
+
<MetricValue>74</MetricValue>
|
|
269
|
+
<MetricDelta value={5} trend='down' sentiment='negative' />
|
|
270
|
+
</MetricHeader>
|
|
271
|
+
<MetricCaption>last 9 days</MetricCaption>
|
|
272
|
+
</Metric>
|
|
273
|
+
<MetricSparkline data={attacks} color='negative' label='Attacks' />
|
|
274
|
+
</Chart>
|
|
275
|
+
</div>
|
|
276
|
+
<div className='w-256'>
|
|
277
|
+
<Chart>
|
|
278
|
+
<ChartHeader>
|
|
279
|
+
<ChartTitle>Positive</ChartTitle>
|
|
280
|
+
</ChartHeader>
|
|
281
|
+
<Metric>
|
|
282
|
+
<MetricHeader>
|
|
283
|
+
<MetricValue>91</MetricValue>
|
|
284
|
+
<MetricDelta value={10} trend='up' sentiment='positive' />
|
|
285
|
+
</MetricHeader>
|
|
286
|
+
<MetricCaption>last 9 days</MetricCaption>
|
|
287
|
+
</Metric>
|
|
288
|
+
<MetricSparkline data={attacks} color='positive' label='Attacks' />
|
|
289
|
+
</Chart>
|
|
290
|
+
</div>
|
|
291
|
+
<div className='w-256'>
|
|
292
|
+
<Chart>
|
|
293
|
+
<ChartHeader>
|
|
294
|
+
<ChartTitle>Brand</ChartTitle>
|
|
295
|
+
</ChartHeader>
|
|
296
|
+
<Metric>
|
|
297
|
+
<MetricHeader>
|
|
298
|
+
<MetricValue>91</MetricValue>
|
|
299
|
+
<MetricDelta value={10} trend='up' sentiment='positive' />
|
|
300
|
+
</MetricHeader>
|
|
301
|
+
<MetricCaption>last 9 days</MetricCaption>
|
|
302
|
+
</Metric>
|
|
303
|
+
<MetricSparkline data={attacks} label='Attacks' />
|
|
304
|
+
</Chart>
|
|
305
|
+
</div>
|
|
306
|
+
<div className='w-256'>
|
|
307
|
+
<Chart>
|
|
308
|
+
<ChartHeader>
|
|
309
|
+
<ChartTitle>Neutral</ChartTitle>
|
|
310
|
+
</ChartHeader>
|
|
311
|
+
<Metric>
|
|
312
|
+
<MetricHeader>
|
|
313
|
+
<MetricValue>91</MetricValue>
|
|
314
|
+
<MetricDelta value={10} trend='up' sentiment='positive' />
|
|
315
|
+
</MetricHeader>
|
|
316
|
+
<MetricCaption>last 9 days</MetricCaption>
|
|
317
|
+
</Metric>
|
|
318
|
+
<MetricSparkline data={attacks} color='neutral' label='Attacks' />
|
|
319
|
+
</Chart>
|
|
320
|
+
</div>
|
|
321
|
+
</div>
|
|
322
|
+
);
|
|
323
|
+
SparklineColors.parameters = { design: { type: 'figma', url: sparklineFigmaUrl } };
|
|
324
|
+
```
|