@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,1174 @@
|
|
|
1
|
+
Pairs one field's label with its value on a detail page — reach for `Table` when the same fields repeat across many objects, and `Field` when the value is being collected rather than read. The value slot takes whichever display component fits the data and hosts `InlineEdit` when the field is editable in place, while `AttributeActions` hangs a per-value menu off it.
|
|
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
|
+
| `loading` | `boolean \| undefined` | no | `false` | Show skeleton placeholders instead of children |
|
|
10
|
+
| `is-empty` | `boolean \| undefined` | no | `false` | When true, `AttributeValue` renders the em-dash placeholder instead of its children, and any `AttributeEmptyDescription` inside the tree renders (it returns `null` otherwise). Ignored while `loading` is true (skeleton wins). |
|
|
11
|
+
| `orientation` | `AttributeOrientation \| undefined` | no | `vertical` | Layout direction of the label and value. - `vertical` (default): label above value - `horizontal`: label on the left, value on the right |
|
|
12
|
+
| `default-checked` | `boolean \| undefined` | no | — | |
|
|
13
|
+
| `default-value` | `string \| number \| readonly string[] \| undefined` | no | — | |
|
|
14
|
+
| `auto-focus` | `boolean \| undefined` | no | — | |
|
|
15
|
+
| `id` | `string \| undefined` | no | — | |
|
|
16
|
+
| `tab-index` | `number \| undefined` | no | — | |
|
|
17
|
+
| `title` | `string \| undefined` | no | — | |
|
|
18
|
+
| `rel` | `string \| undefined` | no | — | |
|
|
19
|
+
| `on-change` | `ChangeEventHandler<T, Element> \| undefined` | no | — | |
|
|
20
|
+
| `data-testid` | `string \| undefined` | no | — | |
|
|
21
|
+
|
|
22
|
+
## Sub-components
|
|
23
|
+
|
|
24
|
+
- `WallarmDS.AttributeActions` — `AttributeActionsProps` in the declaration bundle.
|
|
25
|
+
- `WallarmDS.AttributeActionsContent` — `AttributeActionsContentProps` in the declaration bundle.
|
|
26
|
+
- `WallarmDS.AttributeActionsItem` — `AttributeActionsItemProps` in the declaration bundle.
|
|
27
|
+
- `WallarmDS.AttributeActionsTarget` — `AttributeActionsTargetProps` in the declaration bundle.
|
|
28
|
+
- `WallarmDS.AttributeEmptyDescription` — `AttributeEmptyDescriptionProps` in the declaration bundle.
|
|
29
|
+
- `WallarmDS.AttributeLabel` — `AttributeLabelProps` in the declaration bundle.
|
|
30
|
+
- `WallarmDS.AttributeLabelDescription` — `AttributeLabelDescriptionProps` in the declaration bundle.
|
|
31
|
+
- `WallarmDS.AttributeLabelInfo` — `AttributeLabelInfoProps` in the declaration bundle.
|
|
32
|
+
- `WallarmDS.AttributeValue` — `AttributeValueProps` in the declaration bundle.
|
|
33
|
+
|
|
34
|
+
## Stories
|
|
35
|
+
|
|
36
|
+
### Default
|
|
37
|
+
|
|
38
|
+
The smallest pair — `AttributeLabel` over `AttributeValue` — with the label in
|
|
39
|
+
sentence case and the value left to whichever component formats that data.
|
|
40
|
+
|
|
41
|
+
Source: Attribute/Attribute.stories.tsx#Default
|
|
42
|
+
|
|
43
|
+
### WithDescription
|
|
44
|
+
|
|
45
|
+
`AttributeLabelDescription` adds a line that stays under the label, for a field
|
|
46
|
+
whose name does not explain itself.
|
|
47
|
+
|
|
48
|
+
Source: Attribute/Attribute.stories.tsx#WithDescription
|
|
49
|
+
|
|
50
|
+
### WithInfo
|
|
51
|
+
|
|
52
|
+
`AttributeLabelInfo` puts the same explanation behind a hover tooltip instead,
|
|
53
|
+
and reads correctly on either side of the label text.
|
|
54
|
+
|
|
55
|
+
Source: Attribute/Attribute.stories.tsx#WithInfo
|
|
56
|
+
|
|
57
|
+
### WithLink
|
|
58
|
+
|
|
59
|
+
The label row takes inline content of its own, here a `Link` out to whatever
|
|
60
|
+
explains the field — the value slot stays reserved for the data.
|
|
61
|
+
|
|
62
|
+
Source: Attribute/Attribute.stories.tsx#WithLink
|
|
63
|
+
|
|
64
|
+
### Empty
|
|
65
|
+
|
|
66
|
+
Four ways a missing value can read: composed by hand, `isEmpty` on its own —
|
|
67
|
+
which swaps the value for an em dash and ignores whatever children it had — and
|
|
68
|
+
`isEmpty` alongside an `AttributeEmptyDescription`, which appears only in that
|
|
69
|
+
state and can carry the link out to the fix.
|
|
70
|
+
|
|
71
|
+
Source: Attribute/Attribute.stories.tsx#Empty
|
|
72
|
+
|
|
73
|
+
### Loading
|
|
74
|
+
|
|
75
|
+
`loading` skeletons both slots and ignores the children, so a panel can be laid
|
|
76
|
+
out before its data lands; it wins over `isEmpty`.
|
|
77
|
+
|
|
78
|
+
Source: Attribute/Attribute.stories.tsx#Loading
|
|
79
|
+
|
|
80
|
+
### Composition
|
|
81
|
+
|
|
82
|
+
The display components sanctioned inside a value — `Badge`, `FormatDateTime`,
|
|
83
|
+
`OverflowList` of `Tag`s, `Ip` and `IpList`, `Link`, `InlineCodeSnippet`, `Code` —
|
|
84
|
+
each formatting the data itself rather than receiving a pre-built string.
|
|
85
|
+
|
|
86
|
+
Source: Attribute/Attribute.stories.tsx#Composition
|
|
87
|
+
|
|
88
|
+
### WithActions
|
|
89
|
+
|
|
90
|
+
`AttributeActions` turns the value into a `DropdownMenu` trigger: the row picks up
|
|
91
|
+
a hover surface and the menu carries the actions that belong to that one value.
|
|
92
|
+
|
|
93
|
+
Source: Attribute/Attribute.stories.tsx#WithActions
|
|
94
|
+
|
|
95
|
+
### Horizontal
|
|
96
|
+
|
|
97
|
+
`orientation='horizontal'` sets the label beside the value in a cell clamped
|
|
98
|
+
between 100 and 256px, so values line up down a panel.
|
|
99
|
+
|
|
100
|
+
Source: Attribute/Attribute.stories.tsx#Horizontal
|
|
101
|
+
|
|
102
|
+
### HorizontalTruncation
|
|
103
|
+
|
|
104
|
+
Horizontal cells clip with an ellipsis rather than wrapping — the label at its set
|
|
105
|
+
width, 100px unless you widen it, and the value once its own content overruns.
|
|
106
|
+
|
|
107
|
+
Source: Attribute/Attribute.stories.tsx#HorizontalTruncation
|
|
108
|
+
|
|
109
|
+
### HorizontalComposition
|
|
110
|
+
|
|
111
|
+
The same value components in the horizontal layout, where a wide one such as
|
|
112
|
+
`IpList type='horizontal'` needs its row to span both columns.
|
|
113
|
+
|
|
114
|
+
Source: Attribute/Attribute.stories.tsx#HorizontalComposition
|
|
115
|
+
|
|
116
|
+
### HorizontalLoading
|
|
117
|
+
|
|
118
|
+
The horizontal skeleton is a 16px line against the vertical 24px, matching the
|
|
119
|
+
single-line row it stands in for.
|
|
120
|
+
|
|
121
|
+
Source: Attribute/Attribute.stories.tsx#HorizontalLoading
|
|
122
|
+
|
|
123
|
+
### HorizontalEmpty
|
|
124
|
+
|
|
125
|
+
The same four cases side by side, with `width={160}` on the label so the
|
|
126
|
+
descriptions have somewhere to sit.
|
|
127
|
+
|
|
128
|
+
Source: Attribute/Attribute.stories.tsx#HorizontalEmpty
|
|
129
|
+
|
|
130
|
+
### HorizontalWithActions
|
|
131
|
+
|
|
132
|
+
By default the value keeps its own interactivity: a link, or a snippet's copy
|
|
133
|
+
button, still does its own job, and the menu opens from the space around it.
|
|
134
|
+
|
|
135
|
+
Source: Attribute/Attribute.stories.tsx#HorizontalWithActions
|
|
136
|
+
|
|
137
|
+
### HorizontalWithActionsMenuOnly
|
|
138
|
+
|
|
139
|
+
`disableNestedInteractive` renders the value inert, so a click anywhere on the row
|
|
140
|
+
opens the menu — for values with nothing worth clicking of their own.
|
|
141
|
+
|
|
142
|
+
Source: Attribute/Attribute.stories.tsx#HorizontalWithActionsMenuOnly
|
|
143
|
+
|
|
144
|
+
### WithInlineEdit
|
|
145
|
+
|
|
146
|
+
`Attribute` > `AttributeValue` > `InlineEdit` is the sanctioned nesting for an
|
|
147
|
+
editable field — the value slot supplies the overflow room the editor needs, so
|
|
148
|
+
never add your own.
|
|
149
|
+
|
|
150
|
+
Source: Attribute/Attribute.stories.tsx#WithInlineEdit
|
|
151
|
+
|
|
152
|
+
### HorizontalWithInlineEdit
|
|
153
|
+
|
|
154
|
+
The same editor in a horizontal row, where it takes the width of the value cell
|
|
155
|
+
rather than the panel.
|
|
156
|
+
|
|
157
|
+
Source: Attribute/Attribute.stories.tsx#HorizontalWithInlineEdit
|
|
158
|
+
|
|
159
|
+
### Mixed
|
|
160
|
+
|
|
161
|
+
A plain value, an actions target and an inline editor stacked in one column: the
|
|
162
|
+
text has to start at the same place in all three, which is what the value slot's
|
|
163
|
+
7px pull is for — it moves the hover box left, not the text.
|
|
164
|
+
|
|
165
|
+
Source: Attribute/Attribute.stories.tsx#Mixed
|
|
166
|
+
|
|
167
|
+
### HorizontalMixed
|
|
168
|
+
|
|
169
|
+
The same three hosts horizontally, where the label cell fixes the start of every
|
|
170
|
+
value and the pull has to fit inside the 12px gap between the two cells.
|
|
171
|
+
|
|
172
|
+
Source: Attribute/Attribute.stories.tsx#HorizontalMixed
|
|
173
|
+
|
|
174
|
+
## Story sources
|
|
175
|
+
|
|
176
|
+
### Attribute/Attribute.stories.tsx
|
|
177
|
+
|
|
178
|
+
```tsx
|
|
179
|
+
import { useState } from 'react';
|
|
180
|
+
import type { Meta, StoryFn } from 'storybook-react-rsbuild';
|
|
181
|
+
import { Copy, Filter } from '../../icons';
|
|
182
|
+
import { Badge } from '../Badge';
|
|
183
|
+
import { Code } from '../Code';
|
|
184
|
+
import { InlineCodeSnippet } from '../CodeSnippet';
|
|
185
|
+
import { FormatDateTime } from '../FormatDateTime';
|
|
186
|
+
import {
|
|
187
|
+
InlineEditControl,
|
|
188
|
+
InlineEditError,
|
|
189
|
+
InlineEditInput,
|
|
190
|
+
InlineEditPreview,
|
|
191
|
+
InlineEdit as InlineEditRoot,
|
|
192
|
+
} from '../InlineEdit';
|
|
193
|
+
import { Ip, IpAddress, IpCountry, IpList, IpProvider } from '../Ip';
|
|
194
|
+
import { Link } from '../Link';
|
|
195
|
+
import { OverflowList } from '../OverflowList';
|
|
196
|
+
import { Tag } from '../Tag';
|
|
197
|
+
import { Text } from '../Text';
|
|
198
|
+
import { Attribute, type AttributeProps } from './Attribute';
|
|
199
|
+
import { AttributeActions } from './AttributeActions';
|
|
200
|
+
import { AttributeActionsContent } from './AttributeActionsContent';
|
|
201
|
+
import { AttributeActionsItem } from './AttributeActionsItem';
|
|
202
|
+
import { AttributeActionsTarget } from './AttributeActionsTarget';
|
|
203
|
+
import { AttributeEmptyDescription } from './AttributeEmptyDescription';
|
|
204
|
+
import { AttributeLabel } from './AttributeLabel';
|
|
205
|
+
import { AttributeLabelDescription } from './AttributeLabelDescription';
|
|
206
|
+
import { AttributeLabelInfo } from './AttributeLabelInfo';
|
|
207
|
+
import { AttributeValue } from './AttributeValue';
|
|
208
|
+
|
|
209
|
+
const DESCRIPTION = [
|
|
210
|
+
"Pairs one field's label with its value on a detail page — reach for `Table` when the same fields repeat across many objects, and `Field` when the value is being collected rather than read.",
|
|
211
|
+
'The value slot takes whichever display component fits the data and hosts `InlineEdit` when the field is editable in place, while `AttributeActions` hangs a per-value menu off it.',
|
|
212
|
+
].join(' ');
|
|
213
|
+
|
|
214
|
+
const meta = {
|
|
215
|
+
title: 'Data Display/Attribute',
|
|
216
|
+
component: Attribute,
|
|
217
|
+
subcomponents: {
|
|
218
|
+
AttributeLabel,
|
|
219
|
+
AttributeLabelDescription,
|
|
220
|
+
AttributeLabelInfo,
|
|
221
|
+
AttributeValue,
|
|
222
|
+
AttributeEmptyDescription,
|
|
223
|
+
AttributeActions,
|
|
224
|
+
AttributeActionsTarget,
|
|
225
|
+
AttributeActionsContent,
|
|
226
|
+
AttributeActionsItem,
|
|
227
|
+
InlineEditPreview,
|
|
228
|
+
InlineEditControl,
|
|
229
|
+
InlineEditInput,
|
|
230
|
+
InlineEditError,
|
|
231
|
+
},
|
|
232
|
+
parameters: {
|
|
233
|
+
layout: 'centered',
|
|
234
|
+
docs: { description: { component: DESCRIPTION } },
|
|
235
|
+
},
|
|
236
|
+
} satisfies Meta<typeof Attribute>;
|
|
237
|
+
|
|
238
|
+
export default meta;
|
|
239
|
+
|
|
240
|
+
const renderActionsItems = () => (
|
|
241
|
+
<AttributeActionsContent>
|
|
242
|
+
<AttributeActionsItem
|
|
243
|
+
onSelect={() => {
|
|
244
|
+
/* story mock */
|
|
245
|
+
}}
|
|
246
|
+
>
|
|
247
|
+
<Filter />
|
|
248
|
+
Investigate by this value
|
|
249
|
+
</AttributeActionsItem>
|
|
250
|
+
<AttributeActionsItem
|
|
251
|
+
onSelect={() => {
|
|
252
|
+
/* story mock */
|
|
253
|
+
}}
|
|
254
|
+
>
|
|
255
|
+
<Copy />
|
|
256
|
+
Copy value
|
|
257
|
+
</AttributeActionsItem>
|
|
258
|
+
</AttributeActionsContent>
|
|
259
|
+
);
|
|
260
|
+
|
|
261
|
+
/**
|
|
262
|
+
* The smallest pair — `AttributeLabel` over `AttributeValue` — with the label in
|
|
263
|
+
* sentence case and the value left to whichever component formats that data.
|
|
264
|
+
*/
|
|
265
|
+
export const Default: StoryFn<AttributeProps> = () => (
|
|
266
|
+
<div className='w-[400px]'>
|
|
267
|
+
<Attribute>
|
|
268
|
+
<AttributeLabel>Request ID</AttributeLabel>
|
|
269
|
+
<AttributeValue>
|
|
270
|
+
<Text size='sm'>abc-123-def-456</Text>
|
|
271
|
+
</AttributeValue>
|
|
272
|
+
</Attribute>
|
|
273
|
+
</div>
|
|
274
|
+
);
|
|
275
|
+
|
|
276
|
+
/**
|
|
277
|
+
* `AttributeLabelDescription` adds a line that stays under the label, for a field
|
|
278
|
+
* whose name does not explain itself.
|
|
279
|
+
*/
|
|
280
|
+
export const WithDescription: StoryFn<AttributeProps> = () => (
|
|
281
|
+
<div className='w-[400px]'>
|
|
282
|
+
<Attribute>
|
|
283
|
+
<AttributeLabel>
|
|
284
|
+
Created at
|
|
285
|
+
<AttributeLabelDescription>
|
|
286
|
+
The time when the request was first received
|
|
287
|
+
</AttributeLabelDescription>
|
|
288
|
+
</AttributeLabel>
|
|
289
|
+
<AttributeValue>
|
|
290
|
+
<Text size='sm'>April 9, 2026, 14:32</Text>
|
|
291
|
+
</AttributeValue>
|
|
292
|
+
</Attribute>
|
|
293
|
+
</div>
|
|
294
|
+
);
|
|
295
|
+
|
|
296
|
+
/**
|
|
297
|
+
* `AttributeLabelInfo` puts the same explanation behind a hover tooltip instead,
|
|
298
|
+
* and reads correctly on either side of the label text.
|
|
299
|
+
*/
|
|
300
|
+
export const WithInfo: StoryFn<AttributeProps> = () => (
|
|
301
|
+
<div className='w-[400px] flex flex-col gap-16'>
|
|
302
|
+
<Attribute>
|
|
303
|
+
<AttributeLabel>
|
|
304
|
+
Request ID
|
|
305
|
+
<AttributeLabelInfo>Unique identifier assigned to each incoming request</AttributeLabelInfo>
|
|
306
|
+
</AttributeLabel>
|
|
307
|
+
<AttributeValue>
|
|
308
|
+
<Text size='sm'>abc-123-def-456</Text>
|
|
309
|
+
</AttributeValue>
|
|
310
|
+
</Attribute>
|
|
311
|
+
|
|
312
|
+
<Attribute>
|
|
313
|
+
<AttributeLabel>
|
|
314
|
+
<AttributeLabelInfo>Unique identifier assigned to each incoming request</AttributeLabelInfo>
|
|
315
|
+
Request ID
|
|
316
|
+
</AttributeLabel>
|
|
317
|
+
<AttributeValue>
|
|
318
|
+
<Text size='sm'>abc-123-def-456</Text>
|
|
319
|
+
</AttributeValue>
|
|
320
|
+
</Attribute>
|
|
321
|
+
</div>
|
|
322
|
+
);
|
|
323
|
+
|
|
324
|
+
/**
|
|
325
|
+
* The label row takes inline content of its own, here a `Link` out to whatever
|
|
326
|
+
* explains the field — the value slot stays reserved for the data.
|
|
327
|
+
*/
|
|
328
|
+
export const WithLink: StoryFn<AttributeProps> = () => (
|
|
329
|
+
<div className='w-[400px]'>
|
|
330
|
+
<Attribute>
|
|
331
|
+
<AttributeLabel>
|
|
332
|
+
Source
|
|
333
|
+
<Link href='#' size='md'>
|
|
334
|
+
View docs
|
|
335
|
+
</Link>
|
|
336
|
+
</AttributeLabel>
|
|
337
|
+
<AttributeValue>
|
|
338
|
+
<Text size='sm'>API Gateway</Text>
|
|
339
|
+
</AttributeValue>
|
|
340
|
+
</Attribute>
|
|
341
|
+
</div>
|
|
342
|
+
);
|
|
343
|
+
|
|
344
|
+
/**
|
|
345
|
+
* Four ways a missing value can read: composed by hand, `isEmpty` on its own —
|
|
346
|
+
* which swaps the value for an em dash and ignores whatever children it had — and
|
|
347
|
+
* `isEmpty` alongside an `AttributeEmptyDescription`, which appears only in that
|
|
348
|
+
* state and can carry the link out to the fix.
|
|
349
|
+
*/
|
|
350
|
+
export const Empty: StoryFn<AttributeProps> = () => (
|
|
351
|
+
<div className='w-[400px] flex flex-col gap-16'>
|
|
352
|
+
<Attribute>
|
|
353
|
+
<AttributeLabel>
|
|
354
|
+
Region
|
|
355
|
+
<AttributeLabelDescription>Manual composition</AttributeLabelDescription>
|
|
356
|
+
</AttributeLabel>
|
|
357
|
+
<AttributeValue />
|
|
358
|
+
</Attribute>
|
|
359
|
+
|
|
360
|
+
<Attribute isEmpty>
|
|
361
|
+
<AttributeLabel>Region</AttributeLabel>
|
|
362
|
+
<AttributeValue>
|
|
363
|
+
<Text size='sm'>This text is replaced by the em-dash placeholder</Text>
|
|
364
|
+
</AttributeValue>
|
|
365
|
+
</Attribute>
|
|
366
|
+
|
|
367
|
+
<Attribute isEmpty>
|
|
368
|
+
<AttributeLabel>
|
|
369
|
+
Owner
|
|
370
|
+
<AttributeEmptyDescription>Not yet assigned</AttributeEmptyDescription>
|
|
371
|
+
</AttributeLabel>
|
|
372
|
+
<AttributeValue />
|
|
373
|
+
</Attribute>
|
|
374
|
+
|
|
375
|
+
<Attribute isEmpty>
|
|
376
|
+
<AttributeLabel>
|
|
377
|
+
SSO provider
|
|
378
|
+
<AttributeEmptyDescription>
|
|
379
|
+
Not connected —{' '}
|
|
380
|
+
<Link href='#' size='md'>
|
|
381
|
+
set up integration
|
|
382
|
+
</Link>
|
|
383
|
+
</AttributeEmptyDescription>
|
|
384
|
+
</AttributeLabel>
|
|
385
|
+
<AttributeValue />
|
|
386
|
+
</Attribute>
|
|
387
|
+
</div>
|
|
388
|
+
);
|
|
389
|
+
|
|
390
|
+
/**
|
|
391
|
+
* `loading` skeletons both slots and ignores the children, so a panel can be laid
|
|
392
|
+
* out before its data lands; it wins over `isEmpty`.
|
|
393
|
+
*/
|
|
394
|
+
export const Loading: StoryFn<AttributeProps> = () => (
|
|
395
|
+
<div className='w-[400px] flex flex-col gap-16'>
|
|
396
|
+
<Attribute loading>
|
|
397
|
+
<AttributeLabel>Created at</AttributeLabel>
|
|
398
|
+
<AttributeValue />
|
|
399
|
+
</Attribute>
|
|
400
|
+
<Attribute loading>
|
|
401
|
+
<AttributeLabel>Status</AttributeLabel>
|
|
402
|
+
<AttributeValue />
|
|
403
|
+
</Attribute>
|
|
404
|
+
</div>
|
|
405
|
+
);
|
|
406
|
+
|
|
407
|
+
/**
|
|
408
|
+
* The display components sanctioned inside a value — `Badge`, `FormatDateTime`,
|
|
409
|
+
* `OverflowList` of `Tag`s, `Ip` and `IpList`, `Link`, `InlineCodeSnippet`, `Code` —
|
|
410
|
+
* each formatting the data itself rather than receiving a pre-built string.
|
|
411
|
+
*/
|
|
412
|
+
export const Composition: StoryFn<AttributeProps> = () => (
|
|
413
|
+
<div className='grid grid-cols-2 gap-x-8 gap-y-16 w-[874px]'>
|
|
414
|
+
<Attribute>
|
|
415
|
+
<AttributeLabel>Status</AttributeLabel>
|
|
416
|
+
<AttributeValue>
|
|
417
|
+
<Badge color='red' variant='dotted'>
|
|
418
|
+
Blocked
|
|
419
|
+
</Badge>
|
|
420
|
+
</AttributeValue>
|
|
421
|
+
</Attribute>
|
|
422
|
+
|
|
423
|
+
<Attribute>
|
|
424
|
+
<AttributeLabel>First seen</AttributeLabel>
|
|
425
|
+
<AttributeValue>
|
|
426
|
+
<FormatDateTime value='2026-04-03T10:15:00Z' format='relative' />
|
|
427
|
+
</AttributeValue>
|
|
428
|
+
</Attribute>
|
|
429
|
+
|
|
430
|
+
<Attribute>
|
|
431
|
+
<AttributeLabel>Attack type</AttributeLabel>
|
|
432
|
+
<AttributeValue>
|
|
433
|
+
<OverflowList
|
|
434
|
+
className='gap-4'
|
|
435
|
+
items={['XSS', 'BOLA', 'SQL Injection', 'Scanner', 'CSRF', 'XXE', 'RCE', 'LFI', 'IDOR']}
|
|
436
|
+
itemRenderer={item => <Tag key={item}>{item}</Tag>}
|
|
437
|
+
/>
|
|
438
|
+
</AttributeValue>
|
|
439
|
+
</Attribute>
|
|
440
|
+
|
|
441
|
+
<Attribute>
|
|
442
|
+
<AttributeLabel>Sessions</AttributeLabel>
|
|
443
|
+
<AttributeValue>
|
|
444
|
+
<Text size='sm'>3 sessions</Text>
|
|
445
|
+
</AttributeValue>
|
|
446
|
+
</Attribute>
|
|
447
|
+
|
|
448
|
+
<Attribute>
|
|
449
|
+
<AttributeLabel>Users</AttributeLabel>
|
|
450
|
+
<AttributeValue>
|
|
451
|
+
<OverflowList
|
|
452
|
+
className='gap-4'
|
|
453
|
+
items={[
|
|
454
|
+
'artem@acme.com',
|
|
455
|
+
'uxd@acme.com',
|
|
456
|
+
'ops@acme.com',
|
|
457
|
+
'security@acme.com',
|
|
458
|
+
'admin@acme.com',
|
|
459
|
+
]}
|
|
460
|
+
itemRenderer={item => <Tag key={item}>{item}</Tag>}
|
|
461
|
+
/>
|
|
462
|
+
</AttributeValue>
|
|
463
|
+
</Attribute>
|
|
464
|
+
|
|
465
|
+
<Attribute>
|
|
466
|
+
<AttributeLabel>IPs</AttributeLabel>
|
|
467
|
+
<AttributeValue>
|
|
468
|
+
<IpList>
|
|
469
|
+
<Ip>
|
|
470
|
+
<IpCountry code='US' />
|
|
471
|
+
<IpAddress>142.198.167.52</IpAddress>
|
|
472
|
+
<IpProvider>Azure</IpProvider>
|
|
473
|
+
</Ip>
|
|
474
|
+
<Ip>
|
|
475
|
+
<IpCountry code='US' />
|
|
476
|
+
<IpAddress>34.74.73.20</IpAddress>
|
|
477
|
+
<IpProvider>AWS</IpProvider>
|
|
478
|
+
</Ip>
|
|
479
|
+
<Ip>
|
|
480
|
+
<IpCountry code='DE' />
|
|
481
|
+
<IpAddress>34.74.73.20</IpAddress>
|
|
482
|
+
<IpProvider>GCP</IpProvider>
|
|
483
|
+
</Ip>
|
|
484
|
+
<Ip>
|
|
485
|
+
<IpCountry code='NL' />
|
|
486
|
+
<IpAddress>10.0.0.1</IpAddress>
|
|
487
|
+
</Ip>
|
|
488
|
+
<Ip>
|
|
489
|
+
<IpCountry code='JP' />
|
|
490
|
+
<IpAddress>192.168.1.1</IpAddress>
|
|
491
|
+
</Ip>
|
|
492
|
+
</IpList>
|
|
493
|
+
</AttributeValue>
|
|
494
|
+
</Attribute>
|
|
495
|
+
|
|
496
|
+
<Attribute>
|
|
497
|
+
<AttributeLabel>Source IP</AttributeLabel>
|
|
498
|
+
<AttributeValue>
|
|
499
|
+
<Ip>
|
|
500
|
+
<IpCountry code='US' />
|
|
501
|
+
<IpAddress>142.198.167.52</IpAddress>
|
|
502
|
+
<IpProvider>Azure</IpProvider>
|
|
503
|
+
</Ip>
|
|
504
|
+
</AttributeValue>
|
|
505
|
+
</Attribute>
|
|
506
|
+
|
|
507
|
+
<Attribute>
|
|
508
|
+
<AttributeLabel>Created at</AttributeLabel>
|
|
509
|
+
<AttributeValue>
|
|
510
|
+
<FormatDateTime value='2026-04-02T14:03:00Z' format='datetime' />
|
|
511
|
+
</AttributeValue>
|
|
512
|
+
</Attribute>
|
|
513
|
+
|
|
514
|
+
<Attribute>
|
|
515
|
+
<AttributeLabel>Documentation</AttributeLabel>
|
|
516
|
+
<AttributeValue>
|
|
517
|
+
<Link href='#' size='md'>
|
|
518
|
+
View full report
|
|
519
|
+
</Link>
|
|
520
|
+
</AttributeValue>
|
|
521
|
+
</Attribute>
|
|
522
|
+
|
|
523
|
+
<Attribute>
|
|
524
|
+
<AttributeLabel>Payload (inline)</AttributeLabel>
|
|
525
|
+
<AttributeValue>
|
|
526
|
+
<InlineCodeSnippet code='{ "action": "login", "user_id": 42 }' size='sm' />
|
|
527
|
+
</AttributeValue>
|
|
528
|
+
</Attribute>
|
|
529
|
+
|
|
530
|
+
<Attribute>
|
|
531
|
+
<AttributeLabel>Payload (code)</AttributeLabel>
|
|
532
|
+
<AttributeValue>
|
|
533
|
+
<Code size='s'>{'{ "action": "login", "user_id": 42 }'}</Code>
|
|
534
|
+
</AttributeValue>
|
|
535
|
+
</Attribute>
|
|
536
|
+
</div>
|
|
537
|
+
);
|
|
538
|
+
|
|
539
|
+
/**
|
|
540
|
+
* `AttributeActions` turns the value into a `DropdownMenu` trigger: the row picks up
|
|
541
|
+
* a hover surface and the menu carries the actions that belong to that one value.
|
|
542
|
+
*/
|
|
543
|
+
export const WithActions: StoryFn<AttributeProps> = () => (
|
|
544
|
+
<div className='grid grid-cols-2 gap-x-8 gap-y-16 w-[874px]'>
|
|
545
|
+
<Attribute>
|
|
546
|
+
<AttributeLabel>Status</AttributeLabel>
|
|
547
|
+
<AttributeValue>
|
|
548
|
+
<AttributeActions data-testid='attribute-with-actions'>
|
|
549
|
+
<AttributeActionsTarget>
|
|
550
|
+
<Badge color='red' variant='dotted'>
|
|
551
|
+
Blocked
|
|
552
|
+
</Badge>
|
|
553
|
+
</AttributeActionsTarget>
|
|
554
|
+
{renderActionsItems()}
|
|
555
|
+
</AttributeActions>
|
|
556
|
+
</AttributeValue>
|
|
557
|
+
</Attribute>
|
|
558
|
+
|
|
559
|
+
<Attribute>
|
|
560
|
+
<AttributeLabel>First seen</AttributeLabel>
|
|
561
|
+
<AttributeValue>
|
|
562
|
+
<AttributeActions>
|
|
563
|
+
<AttributeActionsTarget>
|
|
564
|
+
<FormatDateTime value='2026-04-03T10:15:00Z' format='relative' />
|
|
565
|
+
</AttributeActionsTarget>
|
|
566
|
+
{renderActionsItems()}
|
|
567
|
+
</AttributeActions>
|
|
568
|
+
</AttributeValue>
|
|
569
|
+
</Attribute>
|
|
570
|
+
|
|
571
|
+
<Attribute>
|
|
572
|
+
<AttributeLabel>Attack type</AttributeLabel>
|
|
573
|
+
<AttributeValue>
|
|
574
|
+
<AttributeActions>
|
|
575
|
+
<AttributeActionsTarget>
|
|
576
|
+
<OverflowList
|
|
577
|
+
className='gap-4'
|
|
578
|
+
items={[
|
|
579
|
+
'XSS',
|
|
580
|
+
'BOLA',
|
|
581
|
+
'SQL Injection',
|
|
582
|
+
'Scanner',
|
|
583
|
+
'CSRF',
|
|
584
|
+
'XXE',
|
|
585
|
+
'RCE',
|
|
586
|
+
'LFI',
|
|
587
|
+
'IDOR',
|
|
588
|
+
]}
|
|
589
|
+
itemRenderer={item => <Tag key={item}>{item}</Tag>}
|
|
590
|
+
/>
|
|
591
|
+
</AttributeActionsTarget>
|
|
592
|
+
{renderActionsItems()}
|
|
593
|
+
</AttributeActions>
|
|
594
|
+
</AttributeValue>
|
|
595
|
+
</Attribute>
|
|
596
|
+
|
|
597
|
+
<Attribute>
|
|
598
|
+
<AttributeLabel>Sessions</AttributeLabel>
|
|
599
|
+
<AttributeValue>
|
|
600
|
+
<AttributeActions>
|
|
601
|
+
<AttributeActionsTarget>
|
|
602
|
+
<Text size='sm'>3 sessions</Text>
|
|
603
|
+
</AttributeActionsTarget>
|
|
604
|
+
{renderActionsItems()}
|
|
605
|
+
</AttributeActions>
|
|
606
|
+
</AttributeValue>
|
|
607
|
+
</Attribute>
|
|
608
|
+
|
|
609
|
+
<Attribute>
|
|
610
|
+
<AttributeLabel>Users</AttributeLabel>
|
|
611
|
+
<AttributeValue>
|
|
612
|
+
<AttributeActions>
|
|
613
|
+
<AttributeActionsTarget>
|
|
614
|
+
<OverflowList
|
|
615
|
+
className='gap-4'
|
|
616
|
+
items={[
|
|
617
|
+
'artem@acme.com',
|
|
618
|
+
'uxd@acme.com',
|
|
619
|
+
'ops@acme.com',
|
|
620
|
+
'security@acme.com',
|
|
621
|
+
'admin@acme.com',
|
|
622
|
+
]}
|
|
623
|
+
itemRenderer={item => <Tag key={item}>{item}</Tag>}
|
|
624
|
+
/>
|
|
625
|
+
</AttributeActionsTarget>
|
|
626
|
+
{renderActionsItems()}
|
|
627
|
+
</AttributeActions>
|
|
628
|
+
</AttributeValue>
|
|
629
|
+
</Attribute>
|
|
630
|
+
|
|
631
|
+
<Attribute>
|
|
632
|
+
<AttributeLabel>IPs</AttributeLabel>
|
|
633
|
+
<AttributeValue>
|
|
634
|
+
<AttributeActions>
|
|
635
|
+
<AttributeActionsTarget>
|
|
636
|
+
<IpList>
|
|
637
|
+
<Ip>
|
|
638
|
+
<IpCountry code='US' />
|
|
639
|
+
<IpAddress>142.198.167.52</IpAddress>
|
|
640
|
+
<IpProvider>Azure</IpProvider>
|
|
641
|
+
</Ip>
|
|
642
|
+
<Ip>
|
|
643
|
+
<IpCountry code='US' />
|
|
644
|
+
<IpAddress>34.74.73.20</IpAddress>
|
|
645
|
+
<IpProvider>AWS</IpProvider>
|
|
646
|
+
</Ip>
|
|
647
|
+
<Ip>
|
|
648
|
+
<IpCountry code='DE' />
|
|
649
|
+
<IpAddress>34.74.73.20</IpAddress>
|
|
650
|
+
<IpProvider>GCP</IpProvider>
|
|
651
|
+
</Ip>
|
|
652
|
+
<Ip>
|
|
653
|
+
<IpCountry code='NL' />
|
|
654
|
+
<IpAddress>10.0.0.1</IpAddress>
|
|
655
|
+
</Ip>
|
|
656
|
+
<Ip>
|
|
657
|
+
<IpCountry code='JP' />
|
|
658
|
+
<IpAddress>192.168.1.1</IpAddress>
|
|
659
|
+
</Ip>
|
|
660
|
+
</IpList>
|
|
661
|
+
</AttributeActionsTarget>
|
|
662
|
+
{renderActionsItems()}
|
|
663
|
+
</AttributeActions>
|
|
664
|
+
</AttributeValue>
|
|
665
|
+
</Attribute>
|
|
666
|
+
|
|
667
|
+
<Attribute>
|
|
668
|
+
<AttributeLabel>Source IP</AttributeLabel>
|
|
669
|
+
<AttributeValue>
|
|
670
|
+
<AttributeActions>
|
|
671
|
+
<AttributeActionsTarget>
|
|
672
|
+
<Ip>
|
|
673
|
+
<IpCountry code='US' />
|
|
674
|
+
<IpAddress>142.198.167.52</IpAddress>
|
|
675
|
+
<IpProvider>Azure</IpProvider>
|
|
676
|
+
</Ip>
|
|
677
|
+
</AttributeActionsTarget>
|
|
678
|
+
{renderActionsItems()}
|
|
679
|
+
</AttributeActions>
|
|
680
|
+
</AttributeValue>
|
|
681
|
+
</Attribute>
|
|
682
|
+
|
|
683
|
+
<Attribute>
|
|
684
|
+
<AttributeLabel>Created at</AttributeLabel>
|
|
685
|
+
<AttributeValue>
|
|
686
|
+
<AttributeActions>
|
|
687
|
+
<AttributeActionsTarget>
|
|
688
|
+
<FormatDateTime value='2026-04-02T14:03:00Z' format='datetime' />
|
|
689
|
+
</AttributeActionsTarget>
|
|
690
|
+
{renderActionsItems()}
|
|
691
|
+
</AttributeActions>
|
|
692
|
+
</AttributeValue>
|
|
693
|
+
</Attribute>
|
|
694
|
+
|
|
695
|
+
<Attribute>
|
|
696
|
+
<AttributeLabel>Documentation</AttributeLabel>
|
|
697
|
+
<AttributeValue>
|
|
698
|
+
<AttributeActions>
|
|
699
|
+
<AttributeActionsTarget>
|
|
700
|
+
<Link href='#' size='md'>
|
|
701
|
+
View full report
|
|
702
|
+
</Link>
|
|
703
|
+
</AttributeActionsTarget>
|
|
704
|
+
{renderActionsItems()}
|
|
705
|
+
</AttributeActions>
|
|
706
|
+
</AttributeValue>
|
|
707
|
+
</Attribute>
|
|
708
|
+
|
|
709
|
+
<Attribute>
|
|
710
|
+
<AttributeLabel>Payload (inline)</AttributeLabel>
|
|
711
|
+
<AttributeValue>
|
|
712
|
+
<AttributeActions>
|
|
713
|
+
<AttributeActionsTarget>
|
|
714
|
+
<InlineCodeSnippet code='{ "action": "login", "user_id": 42 }' size='sm' />
|
|
715
|
+
</AttributeActionsTarget>
|
|
716
|
+
{renderActionsItems()}
|
|
717
|
+
</AttributeActions>
|
|
718
|
+
</AttributeValue>
|
|
719
|
+
</Attribute>
|
|
720
|
+
|
|
721
|
+
<Attribute>
|
|
722
|
+
<AttributeLabel>Payload (code)</AttributeLabel>
|
|
723
|
+
<AttributeValue>
|
|
724
|
+
<AttributeActions>
|
|
725
|
+
<AttributeActionsTarget>
|
|
726
|
+
<Code size='s'>{'{ "action": "login", "user_id": 42 }'}</Code>
|
|
727
|
+
</AttributeActionsTarget>
|
|
728
|
+
{renderActionsItems()}
|
|
729
|
+
</AttributeActions>
|
|
730
|
+
</AttributeValue>
|
|
731
|
+
</Attribute>
|
|
732
|
+
</div>
|
|
733
|
+
);
|
|
734
|
+
|
|
735
|
+
/**
|
|
736
|
+
* `orientation='horizontal'` sets the label beside the value in a cell clamped
|
|
737
|
+
* between 100 and 256px, so values line up down a panel.
|
|
738
|
+
*/
|
|
739
|
+
export const Horizontal: StoryFn<AttributeProps> = () => (
|
|
740
|
+
<div className='w-[400px]'>
|
|
741
|
+
<Attribute orientation='horizontal'>
|
|
742
|
+
<AttributeLabel>Status</AttributeLabel>
|
|
743
|
+
<AttributeValue>
|
|
744
|
+
<Badge color='red' variant='dotted'>
|
|
745
|
+
Blocked
|
|
746
|
+
</Badge>
|
|
747
|
+
</AttributeValue>
|
|
748
|
+
</Attribute>
|
|
749
|
+
</div>
|
|
750
|
+
);
|
|
751
|
+
|
|
752
|
+
/**
|
|
753
|
+
* Horizontal cells clip with an ellipsis rather than wrapping — the label at its set
|
|
754
|
+
* width, 100px unless you widen it, and the value once its own content overruns.
|
|
755
|
+
*/
|
|
756
|
+
export const HorizontalTruncation: StoryFn<AttributeProps> = () => (
|
|
757
|
+
<div className='w-[500px] flex flex-col gap-8'>
|
|
758
|
+
<Attribute orientation='horizontal'>
|
|
759
|
+
<AttributeLabel width={256}>Short</AttributeLabel>
|
|
760
|
+
<AttributeValue>
|
|
761
|
+
<Text size='sm'>Fits in 256px label cell</Text>
|
|
762
|
+
</AttributeValue>
|
|
763
|
+
</Attribute>
|
|
764
|
+
<Attribute orientation='horizontal'>
|
|
765
|
+
<AttributeLabel width={256}>
|
|
766
|
+
This label text is much longer than 256 pixels and must be truncated
|
|
767
|
+
</AttributeLabel>
|
|
768
|
+
<AttributeValue>
|
|
769
|
+
<Text size='sm'>Value</Text>
|
|
770
|
+
</AttributeValue>
|
|
771
|
+
</Attribute>
|
|
772
|
+
<Attribute orientation='horizontal'>
|
|
773
|
+
<AttributeLabel>Users</AttributeLabel>
|
|
774
|
+
<AttributeValue>
|
|
775
|
+
<Text size='sm' truncate>
|
|
776
|
+
artem@acme.com, uxd@acme.com, ops@acme.com, security@acme.com, admin@acme.com
|
|
777
|
+
</Text>
|
|
778
|
+
</AttributeValue>
|
|
779
|
+
</Attribute>
|
|
780
|
+
</div>
|
|
781
|
+
);
|
|
782
|
+
|
|
783
|
+
/**
|
|
784
|
+
* The same value components in the horizontal layout, where a wide one such as
|
|
785
|
+
* `IpList type='horizontal'` needs its row to span both columns.
|
|
786
|
+
*/
|
|
787
|
+
export const HorizontalComposition: StoryFn<AttributeProps> = () => (
|
|
788
|
+
<div className='grid grid-cols-2 gap-x-8 gap-y-6 w-[874px]'>
|
|
789
|
+
<Attribute orientation='horizontal'>
|
|
790
|
+
<AttributeLabel>Status</AttributeLabel>
|
|
791
|
+
<AttributeValue>
|
|
792
|
+
<Badge color='red' variant='dotted'>
|
|
793
|
+
Blocked
|
|
794
|
+
</Badge>
|
|
795
|
+
</AttributeValue>
|
|
796
|
+
</Attribute>
|
|
797
|
+
|
|
798
|
+
<Attribute orientation='horizontal'>
|
|
799
|
+
<AttributeLabel>First seen</AttributeLabel>
|
|
800
|
+
<AttributeValue>
|
|
801
|
+
<FormatDateTime value='2026-04-03T10:15:00Z' format='relative' />
|
|
802
|
+
</AttributeValue>
|
|
803
|
+
</Attribute>
|
|
804
|
+
|
|
805
|
+
<Attribute orientation='horizontal'>
|
|
806
|
+
<AttributeLabel>Attack type</AttributeLabel>
|
|
807
|
+
<AttributeValue>
|
|
808
|
+
<OverflowList
|
|
809
|
+
className='gap-4'
|
|
810
|
+
items={['XSS', 'BOLA', 'SQL Injection', 'Scanner', 'CSRF', 'XXE', 'RCE', 'LFI', 'IDOR']}
|
|
811
|
+
itemRenderer={item => <Tag key={item}>{item}</Tag>}
|
|
812
|
+
/>
|
|
813
|
+
</AttributeValue>
|
|
814
|
+
</Attribute>
|
|
815
|
+
|
|
816
|
+
<Attribute orientation='horizontal'>
|
|
817
|
+
<AttributeLabel>Last seen</AttributeLabel>
|
|
818
|
+
<AttributeValue>
|
|
819
|
+
<FormatDateTime value='2025-04-02T14:03:00Z' format='date' />
|
|
820
|
+
</AttributeValue>
|
|
821
|
+
</Attribute>
|
|
822
|
+
|
|
823
|
+
<Attribute orientation='horizontal'>
|
|
824
|
+
<AttributeLabel>Sessions</AttributeLabel>
|
|
825
|
+
<AttributeValue>
|
|
826
|
+
<Text size='sm'>3 sessions</Text>
|
|
827
|
+
</AttributeValue>
|
|
828
|
+
</Attribute>
|
|
829
|
+
|
|
830
|
+
<Attribute orientation='horizontal'>
|
|
831
|
+
<AttributeLabel>Users</AttributeLabel>
|
|
832
|
+
<AttributeValue>
|
|
833
|
+
<OverflowList
|
|
834
|
+
className='gap-4'
|
|
835
|
+
items={[
|
|
836
|
+
'artem@acme.com',
|
|
837
|
+
'uxd@acme.com',
|
|
838
|
+
'ops@acme.com',
|
|
839
|
+
'security@acme.com',
|
|
840
|
+
'admin@acme.com',
|
|
841
|
+
]}
|
|
842
|
+
itemRenderer={item => <Tag key={item}>{item}</Tag>}
|
|
843
|
+
/>
|
|
844
|
+
</AttributeValue>
|
|
845
|
+
</Attribute>
|
|
846
|
+
|
|
847
|
+
<div className='col-span-2'>
|
|
848
|
+
<Attribute orientation='horizontal'>
|
|
849
|
+
<AttributeLabel>IPs</AttributeLabel>
|
|
850
|
+
<AttributeValue>
|
|
851
|
+
<IpList type='horizontal'>
|
|
852
|
+
<Ip>
|
|
853
|
+
<IpCountry code='US' />
|
|
854
|
+
<IpAddress>142.198.167.52</IpAddress>
|
|
855
|
+
<IpProvider>Azure</IpProvider>
|
|
856
|
+
</Ip>
|
|
857
|
+
<Ip>
|
|
858
|
+
<IpCountry code='US' />
|
|
859
|
+
<IpAddress>34.74.73.20</IpAddress>
|
|
860
|
+
<IpProvider>AWS</IpProvider>
|
|
861
|
+
</Ip>
|
|
862
|
+
<Ip>
|
|
863
|
+
<IpCountry code='DE' />
|
|
864
|
+
<IpAddress>34.74.73.20</IpAddress>
|
|
865
|
+
<IpProvider>GCP</IpProvider>
|
|
866
|
+
</Ip>
|
|
867
|
+
</IpList>
|
|
868
|
+
</AttributeValue>
|
|
869
|
+
</Attribute>
|
|
870
|
+
</div>
|
|
871
|
+
</div>
|
|
872
|
+
);
|
|
873
|
+
|
|
874
|
+
/**
|
|
875
|
+
* The horizontal skeleton is a 16px line against the vertical 24px, matching the
|
|
876
|
+
* single-line row it stands in for.
|
|
877
|
+
*/
|
|
878
|
+
export const HorizontalLoading: StoryFn<AttributeProps> = () => (
|
|
879
|
+
<div className='w-[400px] flex flex-col gap-8'>
|
|
880
|
+
<Attribute orientation='horizontal' loading>
|
|
881
|
+
<AttributeLabel>Created at</AttributeLabel>
|
|
882
|
+
<AttributeValue />
|
|
883
|
+
</Attribute>
|
|
884
|
+
<Attribute orientation='horizontal' loading>
|
|
885
|
+
<AttributeLabel>Status</AttributeLabel>
|
|
886
|
+
<AttributeValue />
|
|
887
|
+
</Attribute>
|
|
888
|
+
</div>
|
|
889
|
+
);
|
|
890
|
+
|
|
891
|
+
/**
|
|
892
|
+
* The same four cases side by side, with `width={160}` on the label so the
|
|
893
|
+
* descriptions have somewhere to sit.
|
|
894
|
+
*/
|
|
895
|
+
export const HorizontalEmpty: StoryFn<AttributeProps> = () => (
|
|
896
|
+
<div className='w-[400px] flex flex-col gap-8'>
|
|
897
|
+
<Attribute orientation='horizontal'>
|
|
898
|
+
<AttributeLabel width={160}>
|
|
899
|
+
Region
|
|
900
|
+
<AttributeLabelDescription>Manual composition</AttributeLabelDescription>
|
|
901
|
+
</AttributeLabel>
|
|
902
|
+
<AttributeValue />
|
|
903
|
+
</Attribute>
|
|
904
|
+
|
|
905
|
+
<Attribute orientation='horizontal' isEmpty>
|
|
906
|
+
<AttributeLabel width={160}>Region</AttributeLabel>
|
|
907
|
+
<AttributeValue>
|
|
908
|
+
<Text size='sm'>This text is replaced by the em-dash placeholder</Text>
|
|
909
|
+
</AttributeValue>
|
|
910
|
+
</Attribute>
|
|
911
|
+
|
|
912
|
+
<Attribute orientation='horizontal' isEmpty>
|
|
913
|
+
<AttributeLabel width={160}>
|
|
914
|
+
Owner
|
|
915
|
+
<AttributeEmptyDescription>Not yet assigned</AttributeEmptyDescription>
|
|
916
|
+
</AttributeLabel>
|
|
917
|
+
<AttributeValue />
|
|
918
|
+
</Attribute>
|
|
919
|
+
|
|
920
|
+
<Attribute orientation='horizontal' isEmpty>
|
|
921
|
+
<AttributeLabel width={160}>
|
|
922
|
+
SSO provider
|
|
923
|
+
<AttributeEmptyDescription>
|
|
924
|
+
Not connected —{' '}
|
|
925
|
+
<Link href='#' size='md'>
|
|
926
|
+
set up integration
|
|
927
|
+
</Link>
|
|
928
|
+
</AttributeEmptyDescription>
|
|
929
|
+
</AttributeLabel>
|
|
930
|
+
<AttributeValue />
|
|
931
|
+
</Attribute>
|
|
932
|
+
</div>
|
|
933
|
+
);
|
|
934
|
+
|
|
935
|
+
const renderActionsAttributes = (disableNestedInteractive: boolean) => (
|
|
936
|
+
<>
|
|
937
|
+
<Attribute orientation='horizontal'>
|
|
938
|
+
<AttributeLabel>Source IP</AttributeLabel>
|
|
939
|
+
<AttributeValue>
|
|
940
|
+
<AttributeActions data-testid='attr-source-ip'>
|
|
941
|
+
<AttributeActionsTarget disableNestedInteractive={disableNestedInteractive}>
|
|
942
|
+
<Text size='sm'>142.198.167.52</Text>
|
|
943
|
+
</AttributeActionsTarget>
|
|
944
|
+
{renderActionsItems()}
|
|
945
|
+
</AttributeActions>
|
|
946
|
+
</AttributeValue>
|
|
947
|
+
</Attribute>
|
|
948
|
+
|
|
949
|
+
<Attribute orientation='horizontal'>
|
|
950
|
+
<AttributeLabel>Status</AttributeLabel>
|
|
951
|
+
<AttributeValue>
|
|
952
|
+
<AttributeActions data-testid='attr-badge'>
|
|
953
|
+
<AttributeActionsTarget disableNestedInteractive={disableNestedInteractive}>
|
|
954
|
+
<Badge data-testid='attr-badge-value' color='red' variant='dotted'>
|
|
955
|
+
Blocked
|
|
956
|
+
</Badge>
|
|
957
|
+
</AttributeActionsTarget>
|
|
958
|
+
{renderActionsItems()}
|
|
959
|
+
</AttributeActions>
|
|
960
|
+
</AttributeValue>
|
|
961
|
+
</Attribute>
|
|
962
|
+
|
|
963
|
+
<Attribute orientation='horizontal'>
|
|
964
|
+
<AttributeLabel>IPs</AttributeLabel>
|
|
965
|
+
<AttributeValue>
|
|
966
|
+
<AttributeActions data-testid='attr-ip-overflow'>
|
|
967
|
+
<AttributeActionsTarget disableNestedInteractive={disableNestedInteractive}>
|
|
968
|
+
<IpList type='horizontal'>
|
|
969
|
+
<Ip>
|
|
970
|
+
<IpCountry code='US' />
|
|
971
|
+
<IpAddress>142.198.167.52</IpAddress>
|
|
972
|
+
<IpProvider>Azure</IpProvider>
|
|
973
|
+
</Ip>
|
|
974
|
+
<Ip>
|
|
975
|
+
<IpCountry code='US' />
|
|
976
|
+
<IpAddress>34.74.73.20</IpAddress>
|
|
977
|
+
<IpProvider>AWS</IpProvider>
|
|
978
|
+
</Ip>
|
|
979
|
+
<Ip>
|
|
980
|
+
<IpCountry code='DE' />
|
|
981
|
+
<IpAddress>34.74.73.20</IpAddress>
|
|
982
|
+
<IpProvider>GCP</IpProvider>
|
|
983
|
+
</Ip>
|
|
984
|
+
<Ip>
|
|
985
|
+
<IpCountry code='NL' />
|
|
986
|
+
<IpAddress>10.0.0.1</IpAddress>
|
|
987
|
+
</Ip>
|
|
988
|
+
<Ip>
|
|
989
|
+
<IpCountry code='JP' />
|
|
990
|
+
<IpAddress>192.168.1.1</IpAddress>
|
|
991
|
+
</Ip>
|
|
992
|
+
</IpList>
|
|
993
|
+
</AttributeActionsTarget>
|
|
994
|
+
{renderActionsItems()}
|
|
995
|
+
</AttributeActions>
|
|
996
|
+
</AttributeValue>
|
|
997
|
+
</Attribute>
|
|
998
|
+
|
|
999
|
+
<Attribute orientation='horizontal'>
|
|
1000
|
+
<AttributeLabel>Payload</AttributeLabel>
|
|
1001
|
+
<AttributeValue>
|
|
1002
|
+
<AttributeActions data-testid='attr-code-snippet'>
|
|
1003
|
+
<AttributeActionsTarget disableNestedInteractive={disableNestedInteractive}>
|
|
1004
|
+
<InlineCodeSnippet code='{ "action": "login", "user_id": 42 }' size='sm' />
|
|
1005
|
+
</AttributeActionsTarget>
|
|
1006
|
+
{renderActionsItems()}
|
|
1007
|
+
</AttributeActions>
|
|
1008
|
+
</AttributeValue>
|
|
1009
|
+
</Attribute>
|
|
1010
|
+
|
|
1011
|
+
<Attribute orientation='horizontal'>
|
|
1012
|
+
<AttributeLabel>Documentation</AttributeLabel>
|
|
1013
|
+
<AttributeValue>
|
|
1014
|
+
<AttributeActions data-testid='attr-link'>
|
|
1015
|
+
<AttributeActionsTarget disableNestedInteractive={disableNestedInteractive}>
|
|
1016
|
+
<Link href='#' size='md'>
|
|
1017
|
+
View full report
|
|
1018
|
+
</Link>
|
|
1019
|
+
</AttributeActionsTarget>
|
|
1020
|
+
{renderActionsItems()}
|
|
1021
|
+
</AttributeActions>
|
|
1022
|
+
</AttributeValue>
|
|
1023
|
+
</Attribute>
|
|
1024
|
+
|
|
1025
|
+
<Attribute orientation='horizontal'>
|
|
1026
|
+
<AttributeLabel>Tags</AttributeLabel>
|
|
1027
|
+
<AttributeValue>
|
|
1028
|
+
<AttributeActions data-testid='attr-tags'>
|
|
1029
|
+
<AttributeActionsTarget disableNestedInteractive={disableNestedInteractive}>
|
|
1030
|
+
<OverflowList
|
|
1031
|
+
className='gap-4'
|
|
1032
|
+
items={['production', 'us-east-1', 'critical', 'tier-1', 'public', 'monitored']}
|
|
1033
|
+
itemRenderer={item => (
|
|
1034
|
+
<Tag key={item} data-testid='attr-tag'>
|
|
1035
|
+
{item}
|
|
1036
|
+
</Tag>
|
|
1037
|
+
)}
|
|
1038
|
+
/>
|
|
1039
|
+
</AttributeActionsTarget>
|
|
1040
|
+
{renderActionsItems()}
|
|
1041
|
+
</AttributeActions>
|
|
1042
|
+
</AttributeValue>
|
|
1043
|
+
</Attribute>
|
|
1044
|
+
</>
|
|
1045
|
+
);
|
|
1046
|
+
|
|
1047
|
+
/**
|
|
1048
|
+
* By default the value keeps its own interactivity: a link, or a snippet's copy
|
|
1049
|
+
* button, still does its own job, and the menu opens from the space around it.
|
|
1050
|
+
*/
|
|
1051
|
+
export const HorizontalWithActions: StoryFn<AttributeProps> = () => (
|
|
1052
|
+
<div className='w-[400px] flex flex-col gap-8'>{renderActionsAttributes(false)}</div>
|
|
1053
|
+
);
|
|
1054
|
+
HorizontalWithActions.storyName = 'Horizontal With Actions (default — copy on text, menu outside)';
|
|
1055
|
+
|
|
1056
|
+
/**
|
|
1057
|
+
* `disableNestedInteractive` renders the value inert, so a click anywhere on the row
|
|
1058
|
+
* opens the menu — for values with nothing worth clicking of their own.
|
|
1059
|
+
*/
|
|
1060
|
+
export const HorizontalWithActionsMenuOnly: StoryFn<AttributeProps> = () => (
|
|
1061
|
+
<div className='w-[400px] flex flex-col gap-8'>{renderActionsAttributes(true)}</div>
|
|
1062
|
+
);
|
|
1063
|
+
HorizontalWithActionsMenuOnly.storyName =
|
|
1064
|
+
'Horizontal With Actions (disableNestedInteractive — menu only)';
|
|
1065
|
+
|
|
1066
|
+
// ─── InlineEdit Integration ─────────────────────────────────────────────────
|
|
1067
|
+
// Canonical nesting: Attribute > AttributeValue > InlineEdit. No manual
|
|
1068
|
+
// overflow-visible — AttributeValue's :has() seam supplies it.
|
|
1069
|
+
|
|
1070
|
+
function AttributeInlineEditExample({
|
|
1071
|
+
orientation,
|
|
1072
|
+
}: {
|
|
1073
|
+
orientation?: AttributeProps['orientation'];
|
|
1074
|
+
}) {
|
|
1075
|
+
const [name, setName] = useState('Checkout API');
|
|
1076
|
+
return (
|
|
1077
|
+
<div className='w-[420px]'>
|
|
1078
|
+
<Attribute orientation={orientation} data-testid='attr'>
|
|
1079
|
+
<AttributeLabel>Name</AttributeLabel>
|
|
1080
|
+
<AttributeValue>
|
|
1081
|
+
<InlineEditRoot value={name} onValueCommit={v => setName(v as string)}>
|
|
1082
|
+
<InlineEditPreview>{name}</InlineEditPreview>
|
|
1083
|
+
<InlineEditControl>
|
|
1084
|
+
<InlineEditInput />
|
|
1085
|
+
</InlineEditControl>
|
|
1086
|
+
<InlineEditError />
|
|
1087
|
+
</InlineEditRoot>
|
|
1088
|
+
</AttributeValue>
|
|
1089
|
+
</Attribute>
|
|
1090
|
+
</div>
|
|
1091
|
+
);
|
|
1092
|
+
}
|
|
1093
|
+
|
|
1094
|
+
/**
|
|
1095
|
+
* `Attribute` > `AttributeValue` > `InlineEdit` is the sanctioned nesting for an
|
|
1096
|
+
* editable field — the value slot supplies the overflow room the editor needs, so
|
|
1097
|
+
* never add your own.
|
|
1098
|
+
*/
|
|
1099
|
+
export const WithInlineEdit: StoryFn = () => <AttributeInlineEditExample />;
|
|
1100
|
+
|
|
1101
|
+
/**
|
|
1102
|
+
* The same editor in a horizontal row, where it takes the width of the value cell
|
|
1103
|
+
* rather than the panel.
|
|
1104
|
+
*/
|
|
1105
|
+
export const HorizontalWithInlineEdit: StoryFn = () => (
|
|
1106
|
+
<AttributeInlineEditExample orientation='horizontal' />
|
|
1107
|
+
);
|
|
1108
|
+
|
|
1109
|
+
// ─── Mixed hosts ─────────────────────────────────────────────────────────────
|
|
1110
|
+
// Plain value, AttributeActions target, and InlineEdit host stacked in one
|
|
1111
|
+
// column — the value's left text edge must line up across all three rows in
|
|
1112
|
+
// both orientations (AttributeValue's -ml-7 seam pulls the hover boxes left,
|
|
1113
|
+
// not the text).
|
|
1114
|
+
|
|
1115
|
+
function AttributeMixedExample({ orientation }: { orientation?: AttributeProps['orientation'] }) {
|
|
1116
|
+
const [name, setName] = useState('Checkout API');
|
|
1117
|
+
return (
|
|
1118
|
+
<div
|
|
1119
|
+
className={
|
|
1120
|
+
orientation === 'horizontal'
|
|
1121
|
+
? 'w-[420px] flex flex-col gap-8'
|
|
1122
|
+
: 'w-[420px] flex flex-col gap-16'
|
|
1123
|
+
}
|
|
1124
|
+
>
|
|
1125
|
+
<Attribute orientation={orientation} data-testid='attr-plain'>
|
|
1126
|
+
<AttributeLabel>Request ID</AttributeLabel>
|
|
1127
|
+
<AttributeValue>
|
|
1128
|
+
<Text size='sm'>abc-123-def-456</Text>
|
|
1129
|
+
</AttributeValue>
|
|
1130
|
+
</Attribute>
|
|
1131
|
+
|
|
1132
|
+
<Attribute orientation={orientation} data-testid='attr-actions'>
|
|
1133
|
+
<AttributeLabel>Source IP</AttributeLabel>
|
|
1134
|
+
<AttributeValue>
|
|
1135
|
+
<AttributeActions>
|
|
1136
|
+
<AttributeActionsTarget>
|
|
1137
|
+
<Text size='sm'>142.198.167.52</Text>
|
|
1138
|
+
</AttributeActionsTarget>
|
|
1139
|
+
{renderActionsItems()}
|
|
1140
|
+
</AttributeActions>
|
|
1141
|
+
</AttributeValue>
|
|
1142
|
+
</Attribute>
|
|
1143
|
+
|
|
1144
|
+
<Attribute orientation={orientation} data-testid='attr-inline-edit'>
|
|
1145
|
+
<AttributeLabel>Name</AttributeLabel>
|
|
1146
|
+
<AttributeValue>
|
|
1147
|
+
<InlineEditRoot value={name} onValueCommit={v => setName(v as string)}>
|
|
1148
|
+
<InlineEditPreview>{name}</InlineEditPreview>
|
|
1149
|
+
<InlineEditControl>
|
|
1150
|
+
<InlineEditInput />
|
|
1151
|
+
</InlineEditControl>
|
|
1152
|
+
<InlineEditError />
|
|
1153
|
+
</InlineEditRoot>
|
|
1154
|
+
</AttributeValue>
|
|
1155
|
+
</Attribute>
|
|
1156
|
+
</div>
|
|
1157
|
+
);
|
|
1158
|
+
}
|
|
1159
|
+
|
|
1160
|
+
/**
|
|
1161
|
+
* A plain value, an actions target and an inline editor stacked in one column: the
|
|
1162
|
+
* text has to start at the same place in all three, which is what the value slot's
|
|
1163
|
+
* 7px pull is for — it moves the hover box left, not the text.
|
|
1164
|
+
*/
|
|
1165
|
+
export const Mixed: StoryFn = () => <AttributeMixedExample />;
|
|
1166
|
+
Mixed.storyName = 'Mixed (plain + Actions + InlineEdit)';
|
|
1167
|
+
|
|
1168
|
+
/**
|
|
1169
|
+
* The same three hosts horizontally, where the label cell fixes the start of every
|
|
1170
|
+
* value and the pull has to fit inside the 12px gap between the two cells.
|
|
1171
|
+
*/
|
|
1172
|
+
export const HorizontalMixed: StoryFn = () => <AttributeMixedExample orientation='horizontal' />;
|
|
1173
|
+
HorizontalMixed.storyName = 'Horizontal Mixed (plain + Actions + InlineEdit)';
|
|
1174
|
+
```
|