@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,284 @@
|
|
|
1
|
+
Shows where in a request a parameter lives — the method, then each container down to the parameter itself, with the last segment highlighted and carrying a bolt when `attack` marks it as the one that was hit. Copying a path yields a `FilterInput` query rather than the text on screen — `method = "POST" AND parameter = "JSON.nginx_config"` — so a finding can be pasted straight into a search.
|
|
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
|
+
| `method` | `HttpMethodName \| undefined` | no | — | |
|
|
10
|
+
| `segments` | `string[]` | yes | — | |
|
|
11
|
+
| `encoding` | `string \| undefined` | no | — | |
|
|
12
|
+
| `attack` | `boolean \| undefined` | no | `false` | |
|
|
13
|
+
| `expandable` | `boolean \| undefined` | no | `false` | Opt in to click-to-expand. When `true`, a *truncated* path becomes interactive: clicking the `…` collapse indicator (or the path) expands it inline to show every segment, and clicking again collapses it back to `first … last`. No effect when the path already fits without truncation. `expandable` only controls the affordance (whether the user can toggle); the open/closed state is owned by `expanded` / `defaultExpanded`. |
|
|
14
|
+
| `expanded` | `boolean` | no | `false` | Controlled expanded state. When provided, the component does not manage its own state — pair it with {@link onExpandedChange}. |
|
|
15
|
+
| `default-expanded` | `boolean \| undefined` | no | `false` | Initial expanded state for the uncontrolled case. Ignored when `expanded` is provided. Defaults to `false`. |
|
|
16
|
+
| `on-expanded-change` | `((expanded: boolean) => void) \| undefined` | no | — | Called with the next expanded state whenever the user toggles the path. Required for controlled usage; also useful for analytics in the uncontrolled case. |
|
|
17
|
+
| `copy-format` | `((data: CopyFormatData) => string) \| undefined` | no | `formatAsFilter` | |
|
|
18
|
+
| `title` | `string \| undefined` | no | — | |
|
|
19
|
+
| `default-checked` | `boolean \| undefined` | no | — | |
|
|
20
|
+
| `default-value` | `string \| number \| readonly string[] \| undefined` | no | — | |
|
|
21
|
+
| `auto-focus` | `boolean \| undefined` | no | — | |
|
|
22
|
+
| `id` | `string \| undefined` | no | — | |
|
|
23
|
+
| `tab-index` | `number \| undefined` | no | — | |
|
|
24
|
+
| `rel` | `string \| undefined` | no | — | |
|
|
25
|
+
| `on-change` | `ChangeEventHandler<T, Element> \| undefined` | no | — | |
|
|
26
|
+
| `data-testid` | `string \| undefined` | no | — | |
|
|
27
|
+
|
|
28
|
+
## Stories
|
|
29
|
+
|
|
30
|
+
### FullPath
|
|
31
|
+
|
|
32
|
+
Every part at once: a method, two segments, an encoding, and the `attack` bolt on the
|
|
33
|
+
parameter that was hit.
|
|
34
|
+
|
|
35
|
+
Source: ParameterPath/ParameterPath.stories.tsx#FullPath
|
|
36
|
+
|
|
37
|
+
### NoEncoding
|
|
38
|
+
|
|
39
|
+
With no `encoding` the trailing chip simply goes, and the path ends on the parameter.
|
|
40
|
+
|
|
41
|
+
Source: ParameterPath/ParameterPath.stories.tsx#NoEncoding
|
|
42
|
+
|
|
43
|
+
### PathIndexBola
|
|
44
|
+
|
|
45
|
+
A numeric segment: `path › 2` is the second element of the URL path, which is how a BOLA
|
|
46
|
+
finding points at a resource id rather than a named field.
|
|
47
|
+
|
|
48
|
+
Source: ParameterPath/ParameterPath.stories.tsx#PathIndexBola
|
|
49
|
+
|
|
50
|
+
### Header
|
|
51
|
+
|
|
52
|
+
The container need not be a body — here the parameter is a request header, and the first
|
|
53
|
+
segment is what says so.
|
|
54
|
+
|
|
55
|
+
Source: ParameterPath/ParameterPath.stories.tsx#Header
|
|
56
|
+
|
|
57
|
+
### Cookie
|
|
58
|
+
|
|
59
|
+
The same shape for a cookie: first segment names where the value came from, last names
|
|
60
|
+
the value.
|
|
61
|
+
|
|
62
|
+
Source: ParameterPath/ParameterPath.stories.tsx#Cookie
|
|
63
|
+
|
|
64
|
+
### DeepNestedTruncated
|
|
65
|
+
|
|
66
|
+
Seven segments in 280px: the middle collapses to an ellipsis and the full path moves into
|
|
67
|
+
a tooltip. The truncation is measured, not a CSS clip, so it reacts to the real width.
|
|
68
|
+
|
|
69
|
+
Source: ParameterPath/ParameterPath.stories.tsx#DeepNestedTruncated
|
|
70
|
+
|
|
71
|
+
### NoMethod
|
|
72
|
+
|
|
73
|
+
`method` is optional — leave it out where the row around the path already says which
|
|
74
|
+
request this belongs to.
|
|
75
|
+
|
|
76
|
+
Source: ParameterPath/ParameterPath.stories.tsx#NoMethod
|
|
77
|
+
|
|
78
|
+
### ExpandableTruncated
|
|
79
|
+
|
|
80
|
+
`expandable` makes a truncated path clickable and focusable: it opens inline to show every
|
|
81
|
+
segment, and the tooltip stands down while it is open.
|
|
82
|
+
|
|
83
|
+
Source: ParameterPath/ParameterPath.stories.tsx#ExpandableTruncated
|
|
84
|
+
|
|
85
|
+
### ExpandableFitsInline
|
|
86
|
+
|
|
87
|
+
The same path given room to fit. `expandable` leaves no affordance behind when there is
|
|
88
|
+
nothing to expand — no ellipsis, no cursor, no focus stop.
|
|
89
|
+
|
|
90
|
+
Source: ParameterPath/ParameterPath.stories.tsx#ExpandableFitsInline
|
|
91
|
+
|
|
92
|
+
### Playground
|
|
93
|
+
|
|
94
|
+
The props on controls, for trying a segment list or a method the stories above skip.
|
|
95
|
+
|
|
96
|
+
Source: ParameterPath/ParameterPath.stories.tsx#Playground
|
|
97
|
+
|
|
98
|
+
### Gallery
|
|
99
|
+
|
|
100
|
+
The shapes together, as they would read down a column of findings — with a narrow cell at
|
|
101
|
+
the bottom to show what happens when the column is the constraint.
|
|
102
|
+
|
|
103
|
+
Source: ParameterPath/ParameterPath.stories.tsx#Gallery
|
|
104
|
+
|
|
105
|
+
## Story sources
|
|
106
|
+
|
|
107
|
+
### ParameterPath/ParameterPath.stories.tsx
|
|
108
|
+
|
|
109
|
+
```tsx
|
|
110
|
+
import type { Meta, StoryFn } from 'storybook-react-rsbuild';
|
|
111
|
+
import type { HttpMethodName } from '../HttpMethod';
|
|
112
|
+
import { VStack } from '../Stack';
|
|
113
|
+
import { ParameterPath } from './ParameterPath';
|
|
114
|
+
|
|
115
|
+
const DESCRIPTION = [
|
|
116
|
+
'Shows where in a request a parameter lives — the method, then each container down to the parameter itself, with the last segment highlighted and carrying a bolt when `attack` marks it as the one that was hit.',
|
|
117
|
+
'Copying a path yields a `FilterInput` query rather than the text on screen — `method = "POST" AND parameter = "JSON.nginx_config"` — so a finding can be pasted straight into a search.',
|
|
118
|
+
].join(' ');
|
|
119
|
+
|
|
120
|
+
const meta = {
|
|
121
|
+
title: 'Data Display/ParameterPath',
|
|
122
|
+
component: ParameterPath,
|
|
123
|
+
parameters: {
|
|
124
|
+
layout: 'centered',
|
|
125
|
+
docs: { description: { component: DESCRIPTION } },
|
|
126
|
+
},
|
|
127
|
+
argTypes: {
|
|
128
|
+
method: {
|
|
129
|
+
control: 'select',
|
|
130
|
+
options: ['GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'HEAD', 'OPTIONS', undefined],
|
|
131
|
+
},
|
|
132
|
+
attack: { control: 'boolean' },
|
|
133
|
+
expandable: { control: 'boolean' },
|
|
134
|
+
defaultExpanded: { control: 'boolean' },
|
|
135
|
+
},
|
|
136
|
+
} satisfies Meta<typeof ParameterPath>;
|
|
137
|
+
|
|
138
|
+
export default meta;
|
|
139
|
+
|
|
140
|
+
/**
|
|
141
|
+
* Every part at once: a method, two segments, an encoding, and the `attack` bolt on the
|
|
142
|
+
* parameter that was hit.
|
|
143
|
+
*/
|
|
144
|
+
export const FullPath: StoryFn<typeof meta> = () => (
|
|
145
|
+
<ParameterPath
|
|
146
|
+
data-testid='parameter-path'
|
|
147
|
+
method='POST'
|
|
148
|
+
segments={['JSON', 'nginx_config']}
|
|
149
|
+
encoding='BASE64'
|
|
150
|
+
attack
|
|
151
|
+
/>
|
|
152
|
+
);
|
|
153
|
+
|
|
154
|
+
/**
|
|
155
|
+
* With no `encoding` the trailing chip simply goes, and the path ends on the parameter.
|
|
156
|
+
*/
|
|
157
|
+
export const NoEncoding: StoryFn<typeof meta> = () => (
|
|
158
|
+
<ParameterPath method='GET' segments={['query', 'filter']} attack />
|
|
159
|
+
);
|
|
160
|
+
|
|
161
|
+
/**
|
|
162
|
+
* A numeric segment: `path › 2` is the second element of the URL path, which is how a BOLA
|
|
163
|
+
* finding points at a resource id rather than a named field.
|
|
164
|
+
*/
|
|
165
|
+
export const PathIndexBola: StoryFn<typeof meta> = () => (
|
|
166
|
+
<ParameterPath method='GET' segments={['path', '2']} attack />
|
|
167
|
+
);
|
|
168
|
+
|
|
169
|
+
/**
|
|
170
|
+
* The container need not be a body — here the parameter is a request header, and the first
|
|
171
|
+
* segment is what says so.
|
|
172
|
+
*/
|
|
173
|
+
export const Header: StoryFn<typeof meta> = () => (
|
|
174
|
+
<ParameterPath method='GET' segments={['header', 'X-Forwarded-For']} attack />
|
|
175
|
+
);
|
|
176
|
+
|
|
177
|
+
/**
|
|
178
|
+
* The same shape for a cookie: first segment names where the value came from, last names
|
|
179
|
+
* the value.
|
|
180
|
+
*/
|
|
181
|
+
export const Cookie: StoryFn<typeof meta> = () => (
|
|
182
|
+
<ParameterPath method='POST' segments={['cookie', 'session_id']} attack />
|
|
183
|
+
);
|
|
184
|
+
|
|
185
|
+
/**
|
|
186
|
+
* Seven segments in 280px: the middle collapses to an ellipsis and the full path moves into
|
|
187
|
+
* a tooltip. The truncation is measured, not a CSS clip, so it reacts to the real width.
|
|
188
|
+
*/
|
|
189
|
+
export const DeepNestedTruncated: StoryFn<typeof meta> = () => (
|
|
190
|
+
<div style={{ width: 280 }}>
|
|
191
|
+
<ParameterPath
|
|
192
|
+
data-testid='parameter-path'
|
|
193
|
+
method='POST'
|
|
194
|
+
segments={['multipart', 'json_abc', 'json_doc', 'qwerty_doc', 'hash', 'formData', 'get']}
|
|
195
|
+
attack
|
|
196
|
+
/>
|
|
197
|
+
</div>
|
|
198
|
+
);
|
|
199
|
+
|
|
200
|
+
/**
|
|
201
|
+
* `method` is optional — leave it out where the row around the path already says which
|
|
202
|
+
* request this belongs to.
|
|
203
|
+
*/
|
|
204
|
+
export const NoMethod: StoryFn<typeof meta> = () => (
|
|
205
|
+
<ParameterPath segments={['cookie', 'session_id']} attack />
|
|
206
|
+
);
|
|
207
|
+
|
|
208
|
+
// 600px keeps a wide margin below the path's natural width (~720px), so
|
|
209
|
+
// truncation survives font-metric differences between environments.
|
|
210
|
+
/**
|
|
211
|
+
* `expandable` makes a truncated path clickable and focusable: it opens inline to show every
|
|
212
|
+
* segment, and the tooltip stands down while it is open.
|
|
213
|
+
*/
|
|
214
|
+
export const ExpandableTruncated: StoryFn<typeof meta> = () => (
|
|
215
|
+
<div style={{ width: 600 }}>
|
|
216
|
+
{/* The root is w-full (it must span the available space to measure it),
|
|
217
|
+
so centering happens inside the component, not on the container. */}
|
|
218
|
+
<ParameterPath
|
|
219
|
+
data-testid='parameter-path'
|
|
220
|
+
className='justify-center'
|
|
221
|
+
method='POST'
|
|
222
|
+
segments={[
|
|
223
|
+
'multipart',
|
|
224
|
+
'json_abc',
|
|
225
|
+
'json_doc',
|
|
226
|
+
'qwerty_doc',
|
|
227
|
+
'hash',
|
|
228
|
+
'formData',
|
|
229
|
+
'session_token',
|
|
230
|
+
'nested_payload',
|
|
231
|
+
'get',
|
|
232
|
+
]}
|
|
233
|
+
attack
|
|
234
|
+
expandable
|
|
235
|
+
/>
|
|
236
|
+
</div>
|
|
237
|
+
);
|
|
238
|
+
|
|
239
|
+
// The same expandable path in a container the full path fits into — the
|
|
240
|
+
// expand affordance stays inert (no ellipsis, not clickable).
|
|
241
|
+
/**
|
|
242
|
+
* The same path given room to fit. `expandable` leaves no affordance behind when there is
|
|
243
|
+
* nothing to expand — no ellipsis, no cursor, no focus stop.
|
|
244
|
+
*/
|
|
245
|
+
export const ExpandableFitsInline: StoryFn<typeof meta> = () => (
|
|
246
|
+
<div style={{ width: 720, display: 'flex', justifyContent: 'center' }}>
|
|
247
|
+
<ParameterPath
|
|
248
|
+
data-testid='parameter-path'
|
|
249
|
+
method='POST'
|
|
250
|
+
segments={['multipart', 'json_abc', 'json_doc', 'qwerty_doc', 'hash', 'formData', 'get']}
|
|
251
|
+
attack
|
|
252
|
+
expandable
|
|
253
|
+
/>
|
|
254
|
+
</div>
|
|
255
|
+
);
|
|
256
|
+
|
|
257
|
+
/**
|
|
258
|
+
* The props on controls, for trying a segment list or a method the stories above skip.
|
|
259
|
+
*/
|
|
260
|
+
export const Playground: StoryFn<typeof ParameterPath> = args => <ParameterPath {...args} />;
|
|
261
|
+
Playground.args = {
|
|
262
|
+
method: 'POST' satisfies HttpMethodName,
|
|
263
|
+
segments: ['JSON', 'nginx_config'],
|
|
264
|
+
encoding: 'BASE64',
|
|
265
|
+
attack: true,
|
|
266
|
+
};
|
|
267
|
+
|
|
268
|
+
/**
|
|
269
|
+
* The shapes together, as they would read down a column of findings — with a narrow cell at
|
|
270
|
+
* the bottom to show what happens when the column is the constraint.
|
|
271
|
+
*/
|
|
272
|
+
export const Gallery: StoryFn<typeof meta> = () => (
|
|
273
|
+
<VStack gap={16}>
|
|
274
|
+
<ParameterPath method='POST' segments={['JSON', 'nginx_config']} encoding='BASE64' attack />
|
|
275
|
+
<ParameterPath method='GET' segments={['query', 'filter']} attack />
|
|
276
|
+
<ParameterPath method='GET' segments={['path', '2']} attack />
|
|
277
|
+
<ParameterPath method='GET' segments={['header', 'X-Forwarded-For']} attack />
|
|
278
|
+
<ParameterPath method='POST' segments={['cookie', 'session_id']} attack />
|
|
279
|
+
<div style={{ width: 280 }}>
|
|
280
|
+
<ParameterPath method='POST' segments={['multipart', 'a', 'b', 'c', 'd', 'get']} attack />
|
|
281
|
+
</div>
|
|
282
|
+
</VStack>
|
|
283
|
+
);
|
|
284
|
+
```
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
var e={vD(e,t,r){let n,a;/**
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*
|
|
7
|
+
* @lightSyntaxTransform
|
|
8
|
+
* @noflow
|
|
9
|
+
* @nolint
|
|
10
|
+
* @preventMunge
|
|
11
|
+
* @preserve-invariant-messages
|
|
12
|
+
*/var o,l,c=Object.create,i=Object.defineProperty,s=Object.getOwnPropertyDescriptor,u=Object.getOwnPropertyNames,m=Object.getPrototypeOf,f=Object.prototype.hasOwnProperty,d=(e,t,r,n)=>{if(t&&"object"==typeof t||"function"==typeof t)for(let a of u(t))f.call(e,a)||a===r||i(e,a,{get:()=>t[a],enumerable:!(n=s(t,a))||n.enumerable});return e},p={},h={$dispatcherGuard:()=>O,$makeReadOnly:()=>C,$reset:()=>T,$structuralCheck:()=>D,c:()=>R,clearRenderCounterRegistry:()=>M,renderCounterRegistry:()=>P,useRenderCounter:()=>x};for(var y in h)i(p,y,{get:h[y],enumerable:!0});e.exports=d(i({},"__esModule",{value:!0}),p);var _=(a=null!=(n=r("C"))?c(m(n)):{},d(n&&n.__esModule?a:i(a,"default",{value:n,enumerable:!0}),n)),{useRef:g,useEffect:S,isValidElement:b}=_,E=null!=(o=_.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE)?o:_.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,w=Symbol.for("react.memo_cache_sentinel"),R="function"==typeof(null==(l=_.__COMPILER_RUNTIME)?void 0:l.c)?_.__COMPILER_RUNTIME.c:function(e){return _.useMemo(()=>{let t=Array(e);for(let r=0;r<e;r++)t[r]=w;return t[w]=!0,t},[])},v={};["readContext","useCallback","useContext","useEffect","useImperativeHandle","useInsertionEffect","useLayoutEffect","useMemo","useReducer","useRef","useState","useDebugValue","useDeferredValue","useTransition","useMutableSource","useSyncExternalStore","useId","unstable_isNewReconciler","getCacheSignal","getCacheForType","useCacheRefresh"].forEach(e=>{v[e]=()=>{throw Error(`[React] Unexpected React hook call (${e}) from a React compiled function. Check that all hooks are called directly and named according to convention ('use[A-Z]') `)}});var k=null;function $(e){return E.ReactCurrentDispatcher.current=e,E.ReactCurrentDispatcher.current}v.useMemoCache=e=>{if(null!=k)return k.useMemoCache(e);throw Error("React Compiler internal invariant violation: unexpected null dispatcher")};var N=[];function O(e){let t=E.ReactCurrentDispatcher.current;if(0===e){if(N.push(t),1===N.length&&(k=t),t===v)throw Error("[React] Unexpected call to custom hook or component from a React compiled function. Check that (1) all hooks are called directly and named according to convention ('use[A-Z]') and (2) components are returned as JSX instead of being directly invoked.");$(v)}else if(1===e){let e=N.pop();if(null==e)throw Error("React Compiler internal error: unexpected null in guard stack");0===N.length&&(k=null),$(e)}else if(2===e)N.push(t),$(k);else if(3===e){let e=N.pop();if(null==e)throw Error("React Compiler internal error: unexpected null in guard stack");$(e)}else throw Error("React Compiler internal error: unreachable block"+e)}function T(e){for(let t=0;t<e.length;t++)e[t]=w}function C(){throw Error("TODO: implement $makeReadOnly in react-compiler-runtime")}var P=new Map;function M(){for(let e of P.values())e.forEach(e=>{e.count=0})}function x(e){let t=g(null);null!=t.current&&(t.current.count+=1),S(()=>{if(null==t.current){let r,n={count:0};null==(r=P.get(e))&&(r=new Set,P.set(e,r)),r.add(n),t.current=n}return()=>{var r;let n;null!==t.current&&(r=t.current,null!=(n=P.get(e))&&n.delete(r))}})}var j=new Set;function D(e,t,r,n,a,o){function l(e,t,l,c){let i=`${n}:${o} [${a}] ${r}${l} changed from ${e} to ${t} at depth ${c}`;j.has(i)||(j.add(i),console.error(i))}!function e(t,r,n,a){if(!(a>2)){if(t!==r)if(typeof t!=typeof r)l(`type ${typeof t}`,`type ${typeof r}`,n,a);else if("object"==typeof t){let o=Array.isArray(t),c=Array.isArray(r);if(null===t&&null!==r)l("null",`type ${typeof r}`,n,a);else if(null===r)l(`type ${typeof t}`,"null",n,a);else if(t instanceof Map)if(r instanceof Map)if(t.size!==r.size)l(`Map instance with size ${t.size}`,`Map instance with size ${r.size}`,n,a);else for(let[o,c]of t)r.has(o)?e(c,r.get(o),`${n}.get(${o})`,a+1):l(`Map instance with key ${o}`,`Map instance without key ${o}`,n,a);else l("Map instance","other value",n,a);else if(r instanceof Map)l("other value","Map instance",n,a);else if(t instanceof Set)if(r instanceof Set)if(t.size!==r.size)l(`Set instance with size ${t.size}`,`Set instance with size ${r.size}`,n,a);else for(let e of r)t.has(e)||l(`Set instance without element ${e}`,`Set instance with element ${e}`,n,a);else l("Set instance","other value",n,a);else if(r instanceof Set)l("other value","Set instance",n,a);else if(o||c)if(o!==c)l(`type ${o?"array":"object"}`,`type ${c?"array":"object"}`,n,a);else if(t.length!==r.length)l(`array with length ${t.length}`,`array with length ${r.length}`,n,a);else for(let o=0;o<t.length;o++)e(t[o],r[o],`${n}[${o}]`,a+1);else if(b(t)||b(r))b(t)!==b(r)?l(`type ${b(t)?"React element":"object"}`,`type ${b(r)?"React element":"object"}`,n,a):t.type!==r.type?l(`React element of type ${t.type}`,`React element of type ${r.type}`,n,a):e(t.props,r.props,`[props of ${n}]`,a+1);else{for(let e in r)e in t||l(`object without key ${e}`,`object with key ${e}`,n,a);for(let o in t)o in r?e(t[o],r[o],`${n}.${o}`,a+1):l(`object with key ${o}`,`object without key ${o}`,n,a)}}else{if("function"==typeof t)return;isNaN(t)||isNaN(r)?isNaN(t)!==isNaN(r)&&l(`${isNaN(t)?"NaN":"non-NaN value"}`,`${isNaN(r)?"NaN":"non-NaN value"}`,n,a):t!==r&&l(t,r,n,a)}}}(e,t,"",0)}},p(e,t,r){let n=new WeakMap,a=new WeakMap;function o(e,t,r){let o=t,l=r;if("object"==typeof o&&null!==o&&"$$typeof"in o&&o.$$typeof===Symbol.for("react.context")&&"Provider"in o&&(o=o.Provider),"function"==typeof o&&null!=l.ref&&!o.prototype?.isReactComponent){let t=o,r=n.get(e);r||(r=new WeakMap,n.set(e,r));let a=r.get(t);a||((a=e.forwardRef((e,r)=>t({...e,ref:r}))).displayName=t.displayName??t.name,r.set(t,a)),o=a}if("string"==typeof o&&"boolean"==typeof l.inert&&((l={...l}).inert?l.inert="":delete l.inert),"string"==typeof o)for(let[e,t]of[["fill-rule","fillRule"],["clip-rule","clipRule"]])e in l&&(l={...l,[t]:l[e]},delete l[e]);return"string"==typeof o&&null!=l.ref&&(o=function(e,t){let r=a.get(e);r||(r=new Map,a.set(e,r));let n=r.get(t);if(n)return n;let o=e.forwardRef((r,n)=>{let a=e.useRef(null);if(!a.current||a.current.original!==n){let e;a.current={original:n,callback:t=>{if(null==t&&e){let t=e;e=void 0,t();return}if("function"==typeof n){let r=n(t);e="function"==typeof r?r:void 0}else n&&(n.current=t)}}}return e.createElement(t,{...r,ref:a.current.callback})});return o.displayName=`CanvasHost(${t})`,r.set(t,o),o}(e,o)),{type:o,props:l}}function l(e){let t=(t,r,n)=>{let a=o(e,t,r??{});return e.createElement(a.type,void 0===n?a.props:{...a.props,key:n})};return{jsx:t,jsxs:(t,r,n)=>{let a=o(e,t,r??{}),{children:l,...c}=a.props;return e.createElement(a.type,void 0===n?c:{...c,key:n},...Array.isArray(l)?l:[l])},jsxDEV:t,Fragment:e.Fragment}}function c(e){return{...e,createElement:(t,r,...n)=>{let a=o(e,t,r??{});return e.createElement(a.type,a.props,...n)},cloneElement:(t,r,...n)=>{let a=e.cloneElement(t,r??void 0,...n),l=a.ref,c=o(e,a.type,{...a.props,ref:l});return c.type===a.type&&"string"!=typeof a.type?a:e.createElement(c.type,{...c.props,key:a.key})}}}r.d(t,{MA:()=>l,YJ:()=>c})},C(e,t,r){r.r(t);let n=(0,r("p").YJ)(window.React),{Children:a,Component:o,Fragment:l,Profiler:c,PureComponent:i,StrictMode:s,Suspense:u,__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED:m,act:f,cloneElement:d,createContext:p,createElement:h,createFactory:y,createRef:_,forwardRef:g,isValidElement:S,lazy:b,memo:E,startTransition:w,unstable_act:R,useCallback:v,useContext:k,useDebugValue:$,useDeferredValue:N,useEffect:O,useId:T,useImperativeHandle:C,useInsertionEffect:P,useLayoutEffect:M,useMemo:x,useReducer:j,useRef:D,useState:A,useSyncExternalStore:I,useTransition:F,version:z,use:L}=n;r.d(t,{},{Children:a,Component:o,Fragment:l,Profiler:c,PureComponent:i,StrictMode:s,Suspense:u,__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED:m,act:f,cloneElement:d,createContext:p,createElement:h,createFactory:y,createRef:_,default:n,forwardRef:g,isValidElement:S,lazy:b,memo:E,startTransition:w,unstable_act:R,use:L,useCallback:v,useContext:k,useDebugValue:$,useDeferredValue:N,useEffect:O,useId:T,useImperativeHandle:C,useInsertionEffect:P,useLayoutEffect:M,useMemo:x,useReducer:j,useRef:D,useState:A,useSyncExternalStore:I,useTransition:F,version:z})}},t={};function r(n){var a=t[n];if(void 0!==a)return a.exports;var o=t[n]={exports:{}};return e[n](o,o.exports,r),o.exports}r.d=(e,t,n)=>{var a=(t,n)=>{for(var a in t)r.o(t,a)&&!r.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,[n]:t[a]})};a(t,"get"),a(n,"value")},r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r.r=e=>{"u">typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},(()=>{let{jsx:e,jsxs:t,jsxDEV:n,Fragment:a}=(0,r("p").MA)(window.React);var o=r("vD");let l=window.WallarmDS.VStack,c=window.WallarmDS.ParameterPath,i={title:"Data Display/ParameterPath",component:c,parameters:{layout:"centered",docs:{description:{component:'Shows where in a request a parameter lives — the method, then each container down to the parameter itself, with the last segment highlighted and carrying a bolt when `attack` marks it as the one that was hit. Copying a path yields a `FilterInput` query rather than the text on screen — `method = "POST" AND parameter = "JSON.nginx_config"` — so a finding can be pasted straight into a search.'}}},argTypes:{method:{control:"select",options:["GET","POST","PUT","PATCH","DELETE","HEAD","OPTIONS",void 0]},attack:{control:"boolean"},expandable:{control:"boolean"},defaultExpanded:{control:"boolean"}}},s=t=>{let r,n=(0,o.c)(2);return n[0]!==t?(r=e(c,{...t}),n[0]=t,n[1]=r):r=n[1],r};s.args={method:"POST",segments:["JSON","nginx_config"],encoding:"BASE64",attack:!0};var u=r("C");let m=[{name:"FullPath",story:()=>{let t,r=(0,o.c)(1);return r[0]===Symbol.for("react.memo_cache_sentinel")?(t=e(c,{"data-testid":"parameter-path",method:"POST",segments:["JSON","nginx_config"],encoding:"BASE64",attack:!0}),r[0]=t):t=r[0],t},meta:i},{name:"NoEncoding",story:()=>{let t,r=(0,o.c)(1);return r[0]===Symbol.for("react.memo_cache_sentinel")?(t=e(c,{method:"GET",segments:["query","filter"],attack:!0}),r[0]=t):t=r[0],t},meta:i},{name:"PathIndexBola",story:()=>{let t,r=(0,o.c)(1);return r[0]===Symbol.for("react.memo_cache_sentinel")?(t=e(c,{method:"GET",segments:["path","2"],attack:!0}),r[0]=t):t=r[0],t},meta:i},{name:"Header",story:()=>{let t,r=(0,o.c)(1);return r[0]===Symbol.for("react.memo_cache_sentinel")?(t=e(c,{method:"GET",segments:["header","X-Forwarded-For"],attack:!0}),r[0]=t):t=r[0],t},meta:i},{name:"Cookie",story:()=>{let t,r=(0,o.c)(1);return r[0]===Symbol.for("react.memo_cache_sentinel")?(t=e(c,{method:"POST",segments:["cookie","session_id"],attack:!0}),r[0]=t):t=r[0],t},meta:i},{name:"DeepNestedTruncated",story:()=>{let t,r,n=(0,o.c)(2);return n[0]===Symbol.for("react.memo_cache_sentinel")?(t={width:280},n[0]=t):t=n[0],n[1]===Symbol.for("react.memo_cache_sentinel")?(r=e("div",{style:t,children:e(c,{"data-testid":"parameter-path",method:"POST",segments:["multipart","json_abc","json_doc","qwerty_doc","hash","formData","get"],attack:!0})}),n[1]=r):r=n[1],r},meta:i},{name:"NoMethod",story:()=>{let t,r=(0,o.c)(1);return r[0]===Symbol.for("react.memo_cache_sentinel")?(t=e(c,{segments:["cookie","session_id"],attack:!0}),r[0]=t):t=r[0],t},meta:i},{name:"ExpandableTruncated",story:()=>{let t,r,n=(0,o.c)(2);return n[0]===Symbol.for("react.memo_cache_sentinel")?(t={width:600},n[0]=t):t=n[0],n[1]===Symbol.for("react.memo_cache_sentinel")?(r=e("div",{style:t,children:e(c,{"data-testid":"parameter-path",className:"justify-center",method:"POST",segments:["multipart","json_abc","json_doc","qwerty_doc","hash","formData","session_token","nested_payload","get"],attack:!0,expandable:!0})}),n[1]=r):r=n[1],r},meta:i},{name:"ExpandableFitsInline",story:()=>{let t,r,n=(0,o.c)(2);return n[0]===Symbol.for("react.memo_cache_sentinel")?(t={width:720,display:"flex",justifyContent:"center"},n[0]=t):t=n[0],n[1]===Symbol.for("react.memo_cache_sentinel")?(r=e("div",{style:t,children:e(c,{"data-testid":"parameter-path",method:"POST",segments:["multipart","json_abc","json_doc","qwerty_doc","hash","formData","get"],attack:!0,expandable:!0})}),n[1]=r):r=n[1],r},meta:i},{name:"Playground",story:s,meta:i},{name:"Gallery",story:()=>{let r,n,a,i,s,u,m,f=(0,o.c)(7);return f[0]===Symbol.for("react.memo_cache_sentinel")?(r=e(c,{method:"POST",segments:["JSON","nginx_config"],encoding:"BASE64",attack:!0}),f[0]=r):r=f[0],f[1]===Symbol.for("react.memo_cache_sentinel")?(n=e(c,{method:"GET",segments:["query","filter"],attack:!0}),f[1]=n):n=f[1],f[2]===Symbol.for("react.memo_cache_sentinel")?(a=e(c,{method:"GET",segments:["path","2"],attack:!0}),f[2]=a):a=f[2],f[3]===Symbol.for("react.memo_cache_sentinel")?(i=e(c,{method:"GET",segments:["header","X-Forwarded-For"],attack:!0}),f[3]=i):i=f[3],f[4]===Symbol.for("react.memo_cache_sentinel")?(s=e(c,{method:"POST",segments:["cookie","session_id"],attack:!0}),u={width:280},f[4]=s,f[5]=u):(s=f[4],u=f[5]),f[6]===Symbol.for("react.memo_cache_sentinel")?(m=t(l,{gap:16,children:[r,n,a,i,s,e("div",{style:u,children:e(c,{method:"POST",segments:["multipart","a","b","c","d","get"],attack:!0})})]}),f[6]=m):m=f[6],m},meta:i}];function f({entry:e}){let{story:t,meta:r}=e,n={...r.args,...t.args},a="function"==typeof t||t.$$typeof?t:t.render||r.render||r.component,o=()=>u.default.createElement(a,n),l={args:n,globals:{theme:"light"},parameters:{...r.parameters,...t.parameters},viewMode:"story"};for(let e of[...r.decorators||[],...t.decorators||[]].reverse()){let t=o;o=()=>e(t,l)}return u.default.createElement("section",{"data-preview-story":e.name,className:"p-16"},u.default.createElement("h2",{className:"text-sm mb-12"},e.name),u.default.createElement(o))}window.WallarmPreview={mount(e){let t=window.ReactDOM.createRoot(e);return t.render(u.default.createElement(window.WallarmDS.Root,null,m.map((e,t)=>u.default.createElement(f,{key:t,entry:e})))),t}}})();
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
The rules a password has to meet, ticked off as it meets them — show them from the moment the field appears rather than after a failed submit, and keep the same set everywhere a password is created. The component only paints: you compute each rule's `met` and pass it in, with `passwordValidators` shipped alongside for that. A satisfied rule is struck through and steps back, so what is left to do is what stands out.
|
|
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
|
+
| `items` | `PasswordComplexityItem[]` | yes | — | |
|
|
10
|
+
| `title` | `string \| undefined` | no | — | |
|
|
11
|
+
| `default-checked` | `boolean \| undefined` | no | — | |
|
|
12
|
+
| `default-value` | `string \| number \| readonly string[] \| undefined` | no | — | |
|
|
13
|
+
| `auto-focus` | `boolean \| undefined` | no | — | |
|
|
14
|
+
| `id` | `string \| undefined` | no | — | |
|
|
15
|
+
| `tab-index` | `number \| undefined` | no | — | |
|
|
16
|
+
| `rel` | `string \| undefined` | no | — | |
|
|
17
|
+
| `on-change` | `ChangeEventHandler<T, Element> \| undefined` | no | — | |
|
|
18
|
+
| `spacing` | `ListSpacing \| undefined` | no | `4` | |
|
|
19
|
+
| `data-testid` | `string \| undefined` | no | — | |
|
|
20
|
+
|
|
21
|
+
## Stories
|
|
22
|
+
|
|
23
|
+
### AllUnmet
|
|
24
|
+
|
|
25
|
+
The opening state — every rule still outstanding, marked with a muted dot and left in
|
|
26
|
+
full-strength type.
|
|
27
|
+
|
|
28
|
+
Source: PasswordComplexity/PasswordComplexity.stories.tsx#AllUnmet
|
|
29
|
+
|
|
30
|
+
### AllMet
|
|
31
|
+
|
|
32
|
+
Everything satisfied: green checks with the labels struck through, which reads as done
|
|
33
|
+
without needing a success message on top.
|
|
34
|
+
|
|
35
|
+
Source: PasswordComplexity/PasswordComplexity.stories.tsx#AllMet
|
|
36
|
+
|
|
37
|
+
### PartiallyMet
|
|
38
|
+
|
|
39
|
+
The state actually seen most of the time. Three rules are struck through and two are not,
|
|
40
|
+
and the two are what the eye goes to.
|
|
41
|
+
|
|
42
|
+
Source: PasswordComplexity/PasswordComplexity.stories.tsx#PartiallyMet
|
|
43
|
+
|
|
44
|
+
### Interactive
|
|
45
|
+
|
|
46
|
+
Two fields wired to `passwordValidators`, `passwordsMatch` included, recomputed on every
|
|
47
|
+
keystroke — the real-time checking the rules are meant to be shown with.
|
|
48
|
+
|
|
49
|
+
Source: PasswordComplexity/PasswordComplexity.stories.tsx#Interactive
|
|
50
|
+
|
|
51
|
+
## Story sources
|
|
52
|
+
|
|
53
|
+
### PasswordComplexity/PasswordComplexity.stories.tsx
|
|
54
|
+
|
|
55
|
+
```tsx
|
|
56
|
+
import { useState } from 'react';
|
|
57
|
+
import type { Meta, StoryFn } from 'storybook-react-rsbuild';
|
|
58
|
+
import { Input } from '../Input';
|
|
59
|
+
import { PasswordComplexity, type PasswordComplexityItem } from './PasswordComplexity';
|
|
60
|
+
import { passwordValidators } from './validators';
|
|
61
|
+
|
|
62
|
+
const DESCRIPTION = [
|
|
63
|
+
'The rules a password has to meet, ticked off as it meets them — show them from the moment the field appears rather than after a failed submit, and keep the same set everywhere a password is created.',
|
|
64
|
+
"The component only paints: you compute each rule's `met` and pass it in, with `passwordValidators` shipped alongside for that. A satisfied rule is struck through and steps back, so what is left to do is what stands out.",
|
|
65
|
+
].join(' ');
|
|
66
|
+
|
|
67
|
+
const meta = {
|
|
68
|
+
title: 'Data Display/PasswordComplexity',
|
|
69
|
+
component: PasswordComplexity,
|
|
70
|
+
parameters: {
|
|
71
|
+
layout: 'centered',
|
|
72
|
+
docs: { description: { component: DESCRIPTION } },
|
|
73
|
+
},
|
|
74
|
+
} satisfies Meta<typeof PasswordComplexity>;
|
|
75
|
+
|
|
76
|
+
export default meta;
|
|
77
|
+
|
|
78
|
+
const defaultItems: PasswordComplexityItem[] = [
|
|
79
|
+
{ id: 'length', label: 'At least 8 characters', met: false },
|
|
80
|
+
{ id: 'uppercase', label: 'Contains an uppercase letter', met: false },
|
|
81
|
+
{ id: 'lowercase', label: 'Contains a lowercase letter', met: false },
|
|
82
|
+
{ id: 'number', label: 'Contains a number', met: false },
|
|
83
|
+
{ id: 'symbol', label: 'Contains a special character', met: false },
|
|
84
|
+
];
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* The opening state — every rule still outstanding, marked with a muted dot and left in
|
|
88
|
+
* full-strength type.
|
|
89
|
+
*/
|
|
90
|
+
export const AllUnmet: StoryFn<typeof meta> = () => <PasswordComplexity items={defaultItems} />;
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* Everything satisfied: green checks with the labels struck through, which reads as done
|
|
94
|
+
* without needing a success message on top.
|
|
95
|
+
*/
|
|
96
|
+
export const AllMet: StoryFn<typeof meta> = () => (
|
|
97
|
+
<PasswordComplexity items={defaultItems.map(item => ({ ...item, met: true }))} />
|
|
98
|
+
);
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* The state actually seen most of the time. Three rules are struck through and two are not,
|
|
102
|
+
* and the two are what the eye goes to.
|
|
103
|
+
*/
|
|
104
|
+
export const PartiallyMet: StoryFn<typeof meta> = () => (
|
|
105
|
+
<PasswordComplexity
|
|
106
|
+
items={[
|
|
107
|
+
{ id: 'length', label: 'At least 8 characters', met: true },
|
|
108
|
+
{ id: 'uppercase', label: 'Contains an uppercase letter', met: true },
|
|
109
|
+
{ id: 'lowercase', label: 'Contains a lowercase letter', met: true },
|
|
110
|
+
{ id: 'number', label: 'Contains a number', met: false },
|
|
111
|
+
{ id: 'symbol', label: 'Contains a special character', met: false },
|
|
112
|
+
]}
|
|
113
|
+
/>
|
|
114
|
+
);
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* Two fields wired to `passwordValidators`, `passwordsMatch` included, recomputed on every
|
|
118
|
+
* keystroke — the real-time checking the rules are meant to be shown with.
|
|
119
|
+
*/
|
|
120
|
+
export const Interactive: StoryFn<typeof meta> = () => {
|
|
121
|
+
const [password, setPassword] = useState('');
|
|
122
|
+
const [confirmPassword, setConfirmPassword] = useState('');
|
|
123
|
+
|
|
124
|
+
const items: PasswordComplexityItem[] = [
|
|
125
|
+
{
|
|
126
|
+
id: 'length',
|
|
127
|
+
label: 'At least 8 characters',
|
|
128
|
+
met: passwordValidators.minLength(8)(password),
|
|
129
|
+
},
|
|
130
|
+
{
|
|
131
|
+
id: 'uppercase',
|
|
132
|
+
label: 'One uppercase letter (A–Z)',
|
|
133
|
+
met: passwordValidators.hasUppercase(password),
|
|
134
|
+
},
|
|
135
|
+
{
|
|
136
|
+
id: 'lowercase',
|
|
137
|
+
label: 'One lowercase letter (a–z)',
|
|
138
|
+
met: passwordValidators.hasLowercase(password),
|
|
139
|
+
},
|
|
140
|
+
{ id: 'number', label: 'One number (0–9)', met: passwordValidators.hasNumber(password) },
|
|
141
|
+
{
|
|
142
|
+
id: 'symbol',
|
|
143
|
+
label: 'One symbol (e.g. ! ? @ #)',
|
|
144
|
+
met: passwordValidators.hasSymbol(password),
|
|
145
|
+
},
|
|
146
|
+
{
|
|
147
|
+
id: 'match',
|
|
148
|
+
label: 'Both passwords match',
|
|
149
|
+
met: passwordValidators.passwordsMatch(password, confirmPassword),
|
|
150
|
+
},
|
|
151
|
+
];
|
|
152
|
+
|
|
153
|
+
return (
|
|
154
|
+
<div className='flex flex-col gap-16 w-[320px]'>
|
|
155
|
+
<Input
|
|
156
|
+
type='password'
|
|
157
|
+
placeholder='New password...'
|
|
158
|
+
value={password}
|
|
159
|
+
onChange={e => setPassword(e.target.value)}
|
|
160
|
+
/>
|
|
161
|
+
<Input
|
|
162
|
+
type='password'
|
|
163
|
+
placeholder='Confirm password...'
|
|
164
|
+
value={confirmPassword}
|
|
165
|
+
onChange={e => setConfirmPassword(e.target.value)}
|
|
166
|
+
/>
|
|
167
|
+
<PasswordComplexity items={items} />
|
|
168
|
+
</div>
|
|
169
|
+
);
|
|
170
|
+
};
|
|
171
|
+
```
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
var e={vD(e,t,r){let a,n;/**
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*
|
|
7
|
+
* @lightSyntaxTransform
|
|
8
|
+
* @noflow
|
|
9
|
+
* @nolint
|
|
10
|
+
* @preventMunge
|
|
11
|
+
* @preserve-invariant-messages
|
|
12
|
+
*/var l,o,s=Object.create,i=Object.defineProperty,c=Object.getOwnPropertyDescriptor,u=Object.getOwnPropertyNames,p=Object.getPrototypeOf,f=Object.prototype.hasOwnProperty,m=(e,t,r,a)=>{if(t&&"object"==typeof t||"function"==typeof t)for(let n of u(t))f.call(e,n)||n===r||i(e,n,{get:()=>t[n],enumerable:!(a=c(t,n))||a.enumerable});return e},d={},y={$dispatcherGuard:()=>O,$makeReadOnly:()=>k,$reset:()=>M,$structuralCheck:()=>T,c:()=>E,clearRenderCounterRegistry:()=>D,renderCounterRegistry:()=>x,useRenderCounter:()=>A};for(var h in y)i(d,h,{get:y[h],enumerable:!0});e.exports=m(i({},"__esModule",{value:!0}),d);var b=(n=null!=(a=r("C"))?s(p(a)):{},m(a&&a.__esModule?n:i(n,"default",{value:a,enumerable:!0}),a)),{useRef:w,useEffect:g,isValidElement:_}=b,R=null!=(l=b.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE)?l:b.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,v=Symbol.for("react.memo_cache_sentinel"),E="function"==typeof(null==(o=b.__COMPILER_RUNTIME)?void 0:o.c)?b.__COMPILER_RUNTIME.c:function(e){return b.useMemo(()=>{let t=Array(e);for(let r=0;r<e;r++)t[r]=v;return t[v]=!0,t},[])},$={};["readContext","useCallback","useContext","useEffect","useImperativeHandle","useInsertionEffect","useLayoutEffect","useMemo","useReducer","useRef","useState","useDebugValue","useDeferredValue","useTransition","useMutableSource","useSyncExternalStore","useId","unstable_isNewReconciler","getCacheSignal","getCacheForType","useCacheRefresh"].forEach(e=>{$[e]=()=>{throw Error(`[React] Unexpected React hook call (${e}) from a React compiled function. Check that all hooks are called directly and named according to convention ('use[A-Z]') `)}});var C=null;function S(e){return R.ReactCurrentDispatcher.current=e,R.ReactCurrentDispatcher.current}$.useMemoCache=e=>{if(null!=C)return C.useMemoCache(e);throw Error("React Compiler internal invariant violation: unexpected null dispatcher")};var N=[];function O(e){let t=R.ReactCurrentDispatcher.current;if(0===e){if(N.push(t),1===N.length&&(C=t),t===$)throw Error("[React] Unexpected call to custom hook or component from a React compiled function. Check that (1) all hooks are called directly and named according to convention ('use[A-Z]') and (2) components are returned as JSX instead of being directly invoked.");S($)}else if(1===e){let e=N.pop();if(null==e)throw Error("React Compiler internal error: unexpected null in guard stack");0===N.length&&(C=null),S(e)}else if(2===e)N.push(t),S(C);else if(3===e){let e=N.pop();if(null==e)throw Error("React Compiler internal error: unexpected null in guard stack");S(e)}else throw Error("React Compiler internal error: unreachable block"+e)}function M(e){for(let t=0;t<e.length;t++)e[t]=v}function k(){throw Error("TODO: implement $makeReadOnly in react-compiler-runtime")}var x=new Map;function D(){for(let e of x.values())e.forEach(e=>{e.count=0})}function A(e){let t=w(null);null!=t.current&&(t.current.count+=1),g(()=>{if(null==t.current){let r,a={count:0};null==(r=x.get(e))&&(r=new Set,x.set(e,r)),r.add(a),t.current=a}return()=>{var r;let a;null!==t.current&&(r=t.current,null!=(a=x.get(e))&&a.delete(r))}})}var j=new Set;function T(e,t,r,a,n,l){function o(e,t,o,s){let i=`${a}:${l} [${n}] ${r}${o} changed from ${e} to ${t} at depth ${s}`;j.has(i)||(j.add(i),console.error(i))}!function e(t,r,a,n){if(!(n>2)){if(t!==r)if(typeof t!=typeof r)o(`type ${typeof t}`,`type ${typeof r}`,a,n);else if("object"==typeof t){let l=Array.isArray(t),s=Array.isArray(r);if(null===t&&null!==r)o("null",`type ${typeof r}`,a,n);else if(null===r)o(`type ${typeof t}`,"null",a,n);else if(t instanceof Map)if(r instanceof Map)if(t.size!==r.size)o(`Map instance with size ${t.size}`,`Map instance with size ${r.size}`,a,n);else for(let[l,s]of t)r.has(l)?e(s,r.get(l),`${a}.get(${l})`,n+1):o(`Map instance with key ${l}`,`Map instance without key ${l}`,a,n);else o("Map instance","other value",a,n);else if(r instanceof Map)o("other value","Map instance",a,n);else if(t instanceof Set)if(r instanceof Set)if(t.size!==r.size)o(`Set instance with size ${t.size}`,`Set instance with size ${r.size}`,a,n);else for(let e of r)t.has(e)||o(`Set instance without element ${e}`,`Set instance with element ${e}`,a,n);else o("Set instance","other value",a,n);else if(r instanceof Set)o("other value","Set instance",a,n);else if(l||s)if(l!==s)o(`type ${l?"array":"object"}`,`type ${s?"array":"object"}`,a,n);else if(t.length!==r.length)o(`array with length ${t.length}`,`array with length ${r.length}`,a,n);else for(let l=0;l<t.length;l++)e(t[l],r[l],`${a}[${l}]`,n+1);else if(_(t)||_(r))_(t)!==_(r)?o(`type ${_(t)?"React element":"object"}`,`type ${_(r)?"React element":"object"}`,a,n):t.type!==r.type?o(`React element of type ${t.type}`,`React element of type ${r.type}`,a,n):e(t.props,r.props,`[props of ${a}]`,n+1);else{for(let e in r)e in t||o(`object without key ${e}`,`object with key ${e}`,a,n);for(let l in t)l in r?e(t[l],r[l],`${a}.${l}`,n+1):o(`object with key ${l}`,`object without key ${l}`,a,n)}}else{if("function"==typeof t)return;isNaN(t)||isNaN(r)?isNaN(t)!==isNaN(r)&&o(`${isNaN(t)?"NaN":"non-NaN value"}`,`${isNaN(r)?"NaN":"non-NaN value"}`,a,n):t!==r&&o(t,r,a,n)}}}(e,t,"",0)}},p(e,t,r){let a=new WeakMap,n=new WeakMap;function l(e,t,r){let l=t,o=r;if("object"==typeof l&&null!==l&&"$$typeof"in l&&l.$$typeof===Symbol.for("react.context")&&"Provider"in l&&(l=l.Provider),"function"==typeof l&&null!=o.ref&&!l.prototype?.isReactComponent){let t=l,r=a.get(e);r||(r=new WeakMap,a.set(e,r));let n=r.get(t);n||((n=e.forwardRef((e,r)=>t({...e,ref:r}))).displayName=t.displayName??t.name,r.set(t,n)),l=n}if("string"==typeof l&&"boolean"==typeof o.inert&&((o={...o}).inert?o.inert="":delete o.inert),"string"==typeof l)for(let[e,t]of[["fill-rule","fillRule"],["clip-rule","clipRule"]])e in o&&(o={...o,[t]:o[e]},delete o[e]);return"string"==typeof l&&null!=o.ref&&(l=function(e,t){let r=n.get(e);r||(r=new Map,n.set(e,r));let a=r.get(t);if(a)return a;let l=e.forwardRef((r,a)=>{let n=e.useRef(null);if(!n.current||n.current.original!==a){let e;n.current={original:a,callback:t=>{if(null==t&&e){let t=e;e=void 0,t();return}if("function"==typeof a){let r=a(t);e="function"==typeof r?r:void 0}else a&&(a.current=t)}}}return e.createElement(t,{...r,ref:n.current.callback})});return l.displayName=`CanvasHost(${t})`,r.set(t,l),l}(e,l)),{type:l,props:o}}function o(e){let t=(t,r,a)=>{let n=l(e,t,r??{});return e.createElement(n.type,void 0===a?n.props:{...n.props,key:a})};return{jsx:t,jsxs:(t,r,a)=>{let n=l(e,t,r??{}),{children:o,...s}=n.props;return e.createElement(n.type,void 0===a?s:{...s,key:a},...Array.isArray(o)?o:[o])},jsxDEV:t,Fragment:e.Fragment}}function s(e){return{...e,createElement:(t,r,...a)=>{let n=l(e,t,r??{});return e.createElement(n.type,n.props,...a)},cloneElement:(t,r,...a)=>{let n=e.cloneElement(t,r??void 0,...a),o=n.ref,s=l(e,n.type,{...n.props,ref:o});return s.type===n.type&&"string"!=typeof n.type?n:e.createElement(s.type,{...s.props,key:n.key})}}}r.d(t,{MA:()=>o,YJ:()=>s})},C(e,t,r){r.r(t);let a=(0,r("p").YJ)(window.React),{Children:n,Component:l,Fragment:o,Profiler:s,PureComponent:i,StrictMode:c,Suspense:u,__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED:p,act:f,cloneElement:m,createContext:d,createElement:y,createFactory:h,createRef:b,forwardRef:w,isValidElement:g,lazy:_,memo:R,startTransition:v,unstable_act:E,useCallback:$,useContext:C,useDebugValue:S,useDeferredValue:N,useEffect:O,useId:M,useImperativeHandle:k,useInsertionEffect:x,useLayoutEffect:D,useMemo:A,useReducer:j,useRef:T,useState:I,useSyncExternalStore:P,useTransition:z,version:L,use:U}=a;r.d(t,{},{Children:n,Component:l,Fragment:o,Profiler:s,PureComponent:i,StrictMode:c,Suspense:u,__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED:p,act:f,cloneElement:m,createContext:d,createElement:y,createFactory:h,createRef:b,default:a,forwardRef:w,isValidElement:g,lazy:_,memo:R,startTransition:v,unstable_act:E,use:U,useCallback:$,useContext:C,useDebugValue:S,useDeferredValue:N,useEffect:O,useId:M,useImperativeHandle:k,useInsertionEffect:x,useLayoutEffect:D,useMemo:A,useReducer:j,useRef:T,useState:I,useSyncExternalStore:P,useTransition:z,version:L})}},t={};function r(a){var n=t[a];if(void 0!==n)return n.exports;var l=t[a]={exports:{}};return e[a](l,l.exports,r),l.exports}r.d=(e,t,a)=>{var n=(t,a)=>{for(var n in t)r.o(t,n)&&!r.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,[a]:t[n]})};n(t,"get"),n(a,"value")},r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r.r=e=>{"u">typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},(()=>{let{jsx:e,jsxs:t,jsxDEV:a,Fragment:n}=(0,r("p").MA)(window.React);var l=r("vD"),o=r("C");let s=window.WallarmDS.Input,i=window.WallarmDS.PasswordComplexity,c=window.WallarmDS.passwordValidators,u={title:"Data Display/PasswordComplexity",component:i,parameters:{layout:"centered",docs:{description:{component:"The rules a password has to meet, ticked off as it meets them — show them from the moment the field appears rather than after a failed submit, and keep the same set everywhere a password is created. The component only paints: you compute each rule's `met` and pass it in, with `passwordValidators` shipped alongside for that. A satisfied rule is struck through and steps back, so what is left to do is what stands out."}}}},p=[{id:"length",label:"At least 8 characters",met:!1},{id:"uppercase",label:"Contains an uppercase letter",met:!1},{id:"lowercase",label:"Contains a lowercase letter",met:!1},{id:"number",label:"Contains a number",met:!1},{id:"symbol",label:"Contains a special character",met:!1}];function f(e){return{...e,met:!0}}let m=[{name:"AllUnmet",story:()=>{let t,r=(0,l.c)(1);return r[0]===Symbol.for("react.memo_cache_sentinel")?(t=e(i,{items:p}),r[0]=t):t=r[0],t},meta:u},{name:"AllMet",story:()=>{let t,r=(0,l.c)(1);return r[0]===Symbol.for("react.memo_cache_sentinel")?(t=e(i,{items:p.map(f)}),r[0]=t):t=r[0],t},meta:u},{name:"PartiallyMet",story:()=>{let t,r=(0,l.c)(1);return r[0]===Symbol.for("react.memo_cache_sentinel")?(t=e(i,{items:[{id:"length",label:"At least 8 characters",met:!0},{id:"uppercase",label:"Contains an uppercase letter",met:!0},{id:"lowercase",label:"Contains a lowercase letter",met:!0},{id:"number",label:"Contains a number",met:!1},{id:"symbol",label:"Contains a special character",met:!1}]}),r[0]=t):t=r[0],t},meta:u},{name:"Interactive",story:()=>{let r,a,n,u,p,f,m,d,y,h,b,w,g,_,R,v,E,$,C,S=(0,l.c)(44),[N,O]=(0,o.useState)(""),[M,k]=(0,o.useState)("");S[0]!==N?(r=c.minLength(8)(N),S[0]=N,S[1]=r):r=S[1],S[2]!==r?(a={id:"length",label:"At least 8 characters",met:r},S[2]=r,S[3]=a):a=S[3],S[4]!==N?(n=c.hasUppercase(N),S[4]=N,S[5]=n):n=S[5],S[6]!==n?(u={id:"uppercase",label:"One uppercase letter (A–Z)",met:n},S[6]=n,S[7]=u):u=S[7],S[8]!==N?(p=c.hasLowercase(N),S[8]=N,S[9]=p):p=S[9],S[10]!==p?(f={id:"lowercase",label:"One lowercase letter (a–z)",met:p},S[10]=p,S[11]=f):f=S[11],S[12]!==N?(m=c.hasNumber(N),S[12]=N,S[13]=m):m=S[13],S[14]!==m?(d={id:"number",label:"One number (0–9)",met:m},S[14]=m,S[15]=d):d=S[15],S[16]!==N?(y=c.hasSymbol(N),S[16]=N,S[17]=y):y=S[17],S[18]!==y?(h={id:"symbol",label:"One symbol (e.g. ! ? @ #)",met:y},S[18]=y,S[19]=h):h=S[19],S[20]!==M||S[21]!==N?(b=c.passwordsMatch(N,M),S[20]=M,S[21]=N,S[22]=b):b=S[22],S[23]!==b?(w={id:"match",label:"Both passwords match",met:b},S[23]=b,S[24]=w):w=S[24],S[25]!==a||S[26]!==w||S[27]!==u||S[28]!==f||S[29]!==d||S[30]!==h?(g=[a,u,f,d,h,w],S[25]=a,S[26]=w,S[27]=u,S[28]=f,S[29]=d,S[30]=h,S[31]=g):g=S[31];let x=g;return S[32]===Symbol.for("react.memo_cache_sentinel")?(_=e=>O(e.target.value),S[32]=_):_=S[32],S[33]!==N?(R=e(s,{type:"password",placeholder:"New password...",value:N,onChange:_}),S[33]=N,S[34]=R):R=S[34],S[35]===Symbol.for("react.memo_cache_sentinel")?(v=e=>k(e.target.value),S[35]=v):v=S[35],S[36]!==M?(E=e(s,{type:"password",placeholder:"Confirm password...",value:M,onChange:v}),S[36]=M,S[37]=E):E=S[37],S[38]!==x?($=e(i,{items:x}),S[38]=x,S[39]=$):$=S[39],S[40]!==R||S[41]!==E||S[42]!==$?(C=t("div",{className:"flex flex-col gap-16 w-[320px]",children:[R,E,$]}),S[40]=R,S[41]=E,S[42]=$,S[43]=C):C=S[43],C},meta:u}];function d({entry:e}){let{story:t,meta:r}=e,a={...r.args,...t.args},n="function"==typeof t||t.$$typeof?t:t.render||r.render||r.component,l=()=>o.default.createElement(n,a),s={args:a,globals:{theme:"light"},parameters:{...r.parameters,...t.parameters},viewMode:"story"};for(let e of[...r.decorators||[],...t.decorators||[]].reverse()){let t=l;l=()=>e(t,s)}return o.default.createElement("section",{"data-preview-story":e.name,className:"p-16"},o.default.createElement("h2",{className:"text-sm mb-12"},e.name),o.default.createElement(l))}window.WallarmPreview={mount(e){let t=window.ReactDOM.createRoot(e);return t.render(o.default.createElement(window.WallarmDS.Root,null,m.map((e,t)=>o.default.createElement(d,{key:t,entry:e})))),t}}})();
|