@thewhatmatters/wmds 0.2.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/CHANGELOG.md +53 -0
- package/CONSUMING.md +352 -0
- package/LICENSE +21 -0
- package/README.md +65 -0
- package/bin/wmds-check.mjs +173 -0
- package/dist/cluster.css +14 -0
- package/dist/collapse.css +24 -0
- package/dist/colors.css +282 -0
- package/dist/components/atoms/Avatar/Avatar.d.ts +22 -0
- package/dist/components/atoms/Avatar/Avatar.d.ts.map +1 -0
- package/dist/components/atoms/Avatar/Avatar.js +52 -0
- package/dist/components/atoms/Avatar/avatarStyles.d.ts +23 -0
- package/dist/components/atoms/Avatar/avatarStyles.d.ts.map +1 -0
- package/dist/components/atoms/Avatar/avatarStyles.js +48 -0
- package/dist/components/atoms/Badge/Badge.d.ts +47 -0
- package/dist/components/atoms/Badge/Badge.d.ts.map +1 -0
- package/dist/components/atoms/Badge/Badge.js +68 -0
- package/dist/components/atoms/Badge/BadgeIcon.d.ts +7 -0
- package/dist/components/atoms/Badge/BadgeIcon.d.ts.map +1 -0
- package/dist/components/atoms/Badge/BadgeIcon.js +14 -0
- package/dist/components/atoms/Badge/BadgeSegmentCount.d.ts +6 -0
- package/dist/components/atoms/Badge/BadgeSegmentCount.d.ts.map +1 -0
- package/dist/components/atoms/Badge/BadgeSegmentCount.js +13 -0
- package/dist/components/atoms/Badge/badgeStyles.d.ts +37 -0
- package/dist/components/atoms/Badge/badgeStyles.d.ts.map +1 -0
- package/dist/components/atoms/Badge/badgeStyles.js +46 -0
- package/dist/components/atoms/Button/Button.d.ts +77 -0
- package/dist/components/atoms/Button/Button.d.ts.map +1 -0
- package/dist/components/atoms/Button/Button.js +138 -0
- package/dist/components/atoms/Button/ButtonBadge.d.ts +5 -0
- package/dist/components/atoms/Button/ButtonBadge.d.ts.map +1 -0
- package/dist/components/atoms/Button/ButtonBadge.js +14 -0
- package/dist/components/atoms/Button/ButtonIcon.d.ts +8 -0
- package/dist/components/atoms/Button/ButtonIcon.d.ts.map +1 -0
- package/dist/components/atoms/Button/ButtonIcon.js +14 -0
- package/dist/components/atoms/Button/ButtonSpinner.d.ts +6 -0
- package/dist/components/atoms/Button/ButtonSpinner.d.ts.map +1 -0
- package/dist/components/atoms/Button/ButtonSpinner.js +13 -0
- package/dist/components/atoms/Button/ButtonStatusButton.d.ts +23 -0
- package/dist/components/atoms/Button/ButtonStatusButton.d.ts.map +1 -0
- package/dist/components/atoms/Button/ButtonStatusButton.js +43 -0
- package/dist/components/atoms/Button/ButtonStatusContent.d.ts +10 -0
- package/dist/components/atoms/Button/ButtonStatusContent.d.ts.map +1 -0
- package/dist/components/atoms/Button/ButtonStatusContent.js +92 -0
- package/dist/components/atoms/Button/buttonStatusMotion.d.ts +40 -0
- package/dist/components/atoms/Button/buttonStatusMotion.d.ts.map +1 -0
- package/dist/components/atoms/Button/buttonStatusMotion.js +100 -0
- package/dist/components/atoms/Button/buttonStatusStyles.d.ts +21 -0
- package/dist/components/atoms/Button/buttonStatusStyles.d.ts.map +1 -0
- package/dist/components/atoms/Button/buttonStatusStyles.js +39 -0
- package/dist/components/atoms/Button/buttonStyles.d.ts +47 -0
- package/dist/components/atoms/Button/buttonStyles.d.ts.map +1 -0
- package/dist/components/atoms/Button/buttonStyles.js +54 -0
- package/dist/components/atoms/Checkbox/Checkbox.d.ts +31 -0
- package/dist/components/atoms/Checkbox/Checkbox.d.ts.map +1 -0
- package/dist/components/atoms/Checkbox/Checkbox.js +101 -0
- package/dist/components/atoms/Checkbox/checkboxStyles.d.ts +37 -0
- package/dist/components/atoms/Checkbox/checkboxStyles.d.ts.map +1 -0
- package/dist/components/atoms/Checkbox/checkboxStyles.js +42 -0
- package/dist/components/atoms/IconButton/IconButton.d.ts +49 -0
- package/dist/components/atoms/IconButton/IconButton.d.ts.map +1 -0
- package/dist/components/atoms/IconButton/IconButton.js +84 -0
- package/dist/components/atoms/IconButton/iconButtonStyles.d.ts +17 -0
- package/dist/components/atoms/IconButton/iconButtonStyles.d.ts.map +1 -0
- package/dist/components/atoms/IconButton/iconButtonStyles.js +13 -0
- package/dist/components/atoms/Input/Input.d.ts +37 -0
- package/dist/components/atoms/Input/Input.d.ts.map +1 -0
- package/dist/components/atoms/Input/Input.js +105 -0
- package/dist/components/atoms/Input/inputShellStyles.d.ts +99 -0
- package/dist/components/atoms/Input/inputShellStyles.d.ts.map +1 -0
- package/dist/components/atoms/Input/inputShellStyles.js +119 -0
- package/dist/components/atoms/Kbd/Kbd.d.ts +18 -0
- package/dist/components/atoms/Kbd/Kbd.d.ts.map +1 -0
- package/dist/components/atoms/Kbd/Kbd.js +15 -0
- package/dist/components/atoms/Kbd/kbdStyles.d.ts +5 -0
- package/dist/components/atoms/Kbd/kbdStyles.d.ts.map +1 -0
- package/dist/components/atoms/Kbd/kbdStyles.js +8 -0
- package/dist/components/atoms/Kbd/useKbdChoiceKeys.d.ts +21 -0
- package/dist/components/atoms/Kbd/useKbdChoiceKeys.d.ts.map +1 -0
- package/dist/components/atoms/Kbd/useKbdChoiceKeys.js +18 -0
- package/dist/components/atoms/Radio/Radio.d.ts +26 -0
- package/dist/components/atoms/Radio/Radio.d.ts.map +1 -0
- package/dist/components/atoms/Radio/Radio.js +84 -0
- package/dist/components/atoms/Radio/radioStyles.d.ts +28 -0
- package/dist/components/atoms/Radio/radioStyles.d.ts.map +1 -0
- package/dist/components/atoms/Radio/radioStyles.js +36 -0
- package/dist/components/atoms/RiveHand/RiveHand.d.ts +44 -0
- package/dist/components/atoms/RiveHand/RiveHand.d.ts.map +1 -0
- package/dist/components/atoms/RiveHand/RiveHand.js +254 -0
- package/dist/components/atoms/RiveHand/riveHandUtils.d.ts +168 -0
- package/dist/components/atoms/RiveHand/riveHandUtils.d.ts.map +1 -0
- package/dist/components/atoms/RiveHand/riveHandUtils.js +123 -0
- package/dist/components/atoms/Skeleton/Skeleton.d.ts +28 -0
- package/dist/components/atoms/Skeleton/Skeleton.d.ts.map +1 -0
- package/dist/components/atoms/Skeleton/Skeleton.js +32 -0
- package/dist/components/atoms/Skeleton/skeletonStyles.d.ts +23 -0
- package/dist/components/atoms/Skeleton/skeletonStyles.d.ts.map +1 -0
- package/dist/components/atoms/Skeleton/skeletonStyles.js +30 -0
- package/dist/components/atoms/Status/Status.d.ts +40 -0
- package/dist/components/atoms/Status/Status.d.ts.map +1 -0
- package/dist/components/atoms/Status/Status.js +84 -0
- package/dist/components/atoms/Status/statusDotStyles.d.ts +10 -0
- package/dist/components/atoms/Status/statusDotStyles.d.ts.map +1 -0
- package/dist/components/atoms/Status/statusDotStyles.js +17 -0
- package/dist/components/atoms/Status/statusRingStyles.d.ts +12 -0
- package/dist/components/atoms/Status/statusRingStyles.d.ts.map +1 -0
- package/dist/components/atoms/Status/statusRingStyles.js +6 -0
- package/dist/components/atoms/Switch/Switch.d.ts +27 -0
- package/dist/components/atoms/Switch/Switch.d.ts.map +1 -0
- package/dist/components/atoms/Switch/Switch.js +109 -0
- package/dist/components/atoms/Switch/switchStyles.d.ts +36 -0
- package/dist/components/atoms/Switch/switchStyles.d.ts.map +1 -0
- package/dist/components/atoms/Switch/switchStyles.js +39 -0
- package/dist/components/atoms/TextArea/TextArea.d.ts +37 -0
- package/dist/components/atoms/TextArea/TextArea.d.ts.map +1 -0
- package/dist/components/atoms/TextArea/TextArea.js +115 -0
- package/dist/components/atoms/TextArea/textareaShellStyles.d.ts +41 -0
- package/dist/components/atoms/TextArea/textareaShellStyles.d.ts.map +1 -0
- package/dist/components/atoms/TextArea/textareaShellStyles.js +71 -0
- package/dist/components/atoms/TextLink/TextLink.d.ts +14 -0
- package/dist/components/atoms/TextLink/TextLink.d.ts.map +1 -0
- package/dist/components/atoms/TextLink/TextLink.js +26 -0
- package/dist/components/atoms/TextLink/textLinkStyles.d.ts +3 -0
- package/dist/components/atoms/TextLink/textLinkStyles.d.ts.map +1 -0
- package/dist/components/atoms/TextLink/textLinkStyles.js +6 -0
- package/dist/components/atoms/TextSequenceShape/TextSequenceShape.d.ts +21 -0
- package/dist/components/atoms/TextSequenceShape/TextSequenceShape.d.ts.map +1 -0
- package/dist/components/atoms/TextSequenceShape/TextSequenceShape.js +175 -0
- package/dist/components/atoms/TextSequenceShape/textSequenceShapeStyles.d.ts +28 -0
- package/dist/components/atoms/TextSequenceShape/textSequenceShapeStyles.d.ts.map +1 -0
- package/dist/components/atoms/TextSequenceShape/textSequenceShapeStyles.js +39 -0
- package/dist/components/atoms/Tooltip/Tooltip.d.ts +63 -0
- package/dist/components/atoms/Tooltip/Tooltip.d.ts.map +1 -0
- package/dist/components/atoms/Tooltip/Tooltip.js +82 -0
- package/dist/components/atoms/Tooltip/tooltipStyles.d.ts +4 -0
- package/dist/components/atoms/Tooltip/tooltipStyles.d.ts.map +1 -0
- package/dist/components/atoms/Tooltip/tooltipStyles.js +15 -0
- package/dist/components/atoms/inputShared/InputStatusBanner.d.ts +13 -0
- package/dist/components/atoms/inputShared/InputStatusBanner.d.ts.map +1 -0
- package/dist/components/atoms/inputShared/InputStatusBanner.js +24 -0
- package/dist/components/atoms/inputShared/InputTrailingAffordance.d.ts +8 -0
- package/dist/components/atoms/inputShared/InputTrailingAffordance.d.ts.map +1 -0
- package/dist/components/atoms/inputShared/InputTrailingAffordance.js +26 -0
- package/dist/components/molecules/Accordion/Accordion.d.ts +36 -0
- package/dist/components/molecules/Accordion/Accordion.d.ts.map +1 -0
- package/dist/components/molecules/Accordion/Accordion.js +82 -0
- package/dist/components/molecules/Accordion/accordionStyles.d.ts +45 -0
- package/dist/components/molecules/Accordion/accordionStyles.d.ts.map +1 -0
- package/dist/components/molecules/Accordion/accordionStyles.js +12 -0
- package/dist/components/molecules/CalEmbed/CalEmbed.d.ts +58 -0
- package/dist/components/molecules/CalEmbed/CalEmbed.d.ts.map +1 -0
- package/dist/components/molecules/CalEmbed/CalEmbed.js +50 -0
- package/dist/components/molecules/CalEmbed/calEmbedStyles.d.ts +5 -0
- package/dist/components/molecules/CalEmbed/calEmbedStyles.d.ts.map +1 -0
- package/dist/components/molecules/CalEmbed/calEmbedStyles.js +5 -0
- package/dist/components/molecules/Card/Card.d.ts +53 -0
- package/dist/components/molecules/Card/Card.d.ts.map +1 -0
- package/dist/components/molecules/Card/Card.js +72 -0
- package/dist/components/molecules/Card/cardStyles.d.ts +82 -0
- package/dist/components/molecules/Card/cardStyles.d.ts.map +1 -0
- package/dist/components/molecules/Card/cardStyles.js +60 -0
- package/dist/components/molecules/ChatQa/ChatQa.d.ts +25 -0
- package/dist/components/molecules/ChatQa/ChatQa.d.ts.map +1 -0
- package/dist/components/molecules/ChatQa/ChatQa.js +23 -0
- package/dist/components/molecules/ChatQa/chatQaStyles.d.ts +9 -0
- package/dist/components/molecules/ChatQa/chatQaStyles.d.ts.map +1 -0
- package/dist/components/molecules/ChatQa/chatQaStyles.js +5 -0
- package/dist/components/molecules/CheckboxGroup/CheckboxGroup.d.ts +29 -0
- package/dist/components/molecules/CheckboxGroup/CheckboxGroup.d.ts.map +1 -0
- package/dist/components/molecules/CheckboxGroup/CheckboxGroup.js +76 -0
- package/dist/components/molecules/CheckboxGroup/CheckboxGroupContext.d.ts +14 -0
- package/dist/components/molecules/CheckboxGroup/CheckboxGroupContext.d.ts.map +1 -0
- package/dist/components/molecules/CheckboxGroup/CheckboxGroupContext.js +17 -0
- package/dist/components/molecules/CheckboxGroup/CheckboxGroupItem.d.ts +12 -0
- package/dist/components/molecules/CheckboxGroup/CheckboxGroupItem.d.ts.map +1 -0
- package/dist/components/molecules/CheckboxGroup/CheckboxGroupItem.js +23 -0
- package/dist/components/molecules/CheckboxGroup/checkboxGroupStyles.d.ts +16 -0
- package/dist/components/molecules/CheckboxGroup/checkboxGroupStyles.d.ts.map +1 -0
- package/dist/components/molecules/CheckboxGroup/checkboxGroupStyles.js +15 -0
- package/dist/components/molecules/Chip/Chip.d.ts +32 -0
- package/dist/components/molecules/Chip/Chip.d.ts.map +1 -0
- package/dist/components/molecules/Chip/Chip.js +116 -0
- package/dist/components/molecules/Chip/ChipFilterGroup.d.ts +30 -0
- package/dist/components/molecules/Chip/ChipFilterGroup.d.ts.map +1 -0
- package/dist/components/molecules/Chip/ChipFilterGroup.js +45 -0
- package/dist/components/molecules/Chip/chipStyles.d.ts +12 -0
- package/dist/components/molecules/Chip/chipStyles.d.ts.map +1 -0
- package/dist/components/molecules/Chip/chipStyles.js +23 -0
- package/dist/components/molecules/DisplayControls/DisplayControls.d.ts +27 -0
- package/dist/components/molecules/DisplayControls/DisplayControls.d.ts.map +1 -0
- package/dist/components/molecules/DisplayControls/DisplayControls.js +76 -0
- package/dist/components/molecules/DisplayControls/displayControlsState.d.ts +6 -0
- package/dist/components/molecules/DisplayControls/displayControlsState.d.ts.map +1 -0
- package/dist/components/molecules/DisplayControls/displayControlsState.js +18 -0
- package/dist/components/molecules/DisplayControls/displayControlsStyles.d.ts +4 -0
- package/dist/components/molecules/DisplayControls/displayControlsStyles.d.ts.map +1 -0
- package/dist/components/molecules/DisplayControls/displayControlsStyles.js +5 -0
- package/dist/components/molecules/Dropdown/Dropdown.d.ts +9 -0
- package/dist/components/molecules/Dropdown/Dropdown.d.ts.map +1 -0
- package/dist/components/molecules/Dropdown/Dropdown.js +10 -0
- package/dist/components/molecules/Dropdown/DropdownItem.d.ts +23 -0
- package/dist/components/molecules/Dropdown/DropdownItem.d.ts.map +1 -0
- package/dist/components/molecules/Dropdown/DropdownItem.js +36 -0
- package/dist/components/molecules/Dropdown/DropdownMenu.d.ts +10 -0
- package/dist/components/molecules/Dropdown/DropdownMenu.d.ts.map +1 -0
- package/dist/components/molecules/Dropdown/DropdownMenu.js +14 -0
- package/dist/components/molecules/Dropdown/dropdownMenuPosition.d.ts +25 -0
- package/dist/components/molecules/Dropdown/dropdownMenuPosition.d.ts.map +1 -0
- package/dist/components/molecules/Dropdown/dropdownMenuPosition.js +56 -0
- package/dist/components/molecules/Dropdown/dropdownStyles.d.ts +31 -0
- package/dist/components/molecules/Dropdown/dropdownStyles.d.ts.map +1 -0
- package/dist/components/molecules/Dropdown/dropdownStyles.js +8 -0
- package/dist/components/molecules/Field/Field.d.ts +25 -0
- package/dist/components/molecules/Field/Field.d.ts.map +1 -0
- package/dist/components/molecules/Field/Field.js +80 -0
- package/dist/components/molecules/Field/fieldStyles.d.ts +16 -0
- package/dist/components/molecules/Field/fieldStyles.d.ts.map +1 -0
- package/dist/components/molecules/Field/fieldStyles.js +11 -0
- package/dist/components/molecules/FloatingActionButton/FloatingActionButton.d.ts +22 -0
- package/dist/components/molecules/FloatingActionButton/FloatingActionButton.d.ts.map +1 -0
- package/dist/components/molecules/FloatingActionButton/FloatingActionButton.js +135 -0
- package/dist/components/molecules/FloatingActionButton/floatingActionButtonStyles.d.ts +9 -0
- package/dist/components/molecules/FloatingActionButton/floatingActionButtonStyles.d.ts.map +1 -0
- package/dist/components/molecules/FloatingActionButton/floatingActionButtonStyles.js +7 -0
- package/dist/components/molecules/HeroIntro/HeroIntro.d.ts +32 -0
- package/dist/components/molecules/HeroIntro/HeroIntro.d.ts.map +1 -0
- package/dist/components/molecules/HeroIntro/HeroIntro.js +24 -0
- package/dist/components/molecules/HeroIntro/heroIntroStyles.d.ts +30 -0
- package/dist/components/molecules/HeroIntro/heroIntroStyles.d.ts.map +1 -0
- package/dist/components/molecules/HeroIntro/heroIntroStyles.js +5 -0
- package/dist/components/molecules/IntakeForm/IntakeForm.d.ts +30 -0
- package/dist/components/molecules/IntakeForm/IntakeForm.d.ts.map +1 -0
- package/dist/components/molecules/IntakeForm/IntakeForm.js +137 -0
- package/dist/components/molecules/IntakeForm/intakeFormStyles.d.ts +3 -0
- package/dist/components/molecules/IntakeForm/intakeFormStyles.d.ts.map +1 -0
- package/dist/components/molecules/IntakeForm/intakeFormStyles.js +5 -0
- package/dist/components/molecules/NavList/NavList.d.ts +55 -0
- package/dist/components/molecules/NavList/NavList.d.ts.map +1 -0
- package/dist/components/molecules/NavList/NavList.js +103 -0
- package/dist/components/molecules/NavList/navListStyles.d.ts +15 -0
- package/dist/components/molecules/NavList/navListStyles.d.ts.map +1 -0
- package/dist/components/molecules/NavList/navListStyles.js +11 -0
- package/dist/components/molecules/PageHeader/PageHeader.d.ts +24 -0
- package/dist/components/molecules/PageHeader/PageHeader.d.ts.map +1 -0
- package/dist/components/molecules/PageHeader/PageHeader.js +43 -0
- package/dist/components/molecules/PageHeader/pageHeaderStyles.d.ts +9 -0
- package/dist/components/molecules/PageHeader/pageHeaderStyles.d.ts.map +1 -0
- package/dist/components/molecules/PageHeader/pageHeaderStyles.js +20 -0
- package/dist/components/molecules/PillGroup/PillGroup.d.ts +31 -0
- package/dist/components/molecules/PillGroup/PillGroup.d.ts.map +1 -0
- package/dist/components/molecules/PillGroup/PillGroup.js +53 -0
- package/dist/components/molecules/PillGroup/pillGroupStyles.d.ts +13 -0
- package/dist/components/molecules/PillGroup/pillGroupStyles.d.ts.map +1 -0
- package/dist/components/molecules/PillGroup/pillGroupStyles.js +7 -0
- package/dist/components/molecules/PromptBar/PromptBar.d.ts +33 -0
- package/dist/components/molecules/PromptBar/PromptBar.d.ts.map +1 -0
- package/dist/components/molecules/PromptBar/PromptBar.js +56 -0
- package/dist/components/molecules/PromptBar/promptBarStyles.d.ts +24 -0
- package/dist/components/molecules/PromptBar/promptBarStyles.d.ts.map +1 -0
- package/dist/components/molecules/PromptBar/promptBarStyles.js +6 -0
- package/dist/components/molecules/RadioGroup/RadioGroup.d.ts +34 -0
- package/dist/components/molecules/RadioGroup/RadioGroup.d.ts.map +1 -0
- package/dist/components/molecules/RadioGroup/RadioGroup.js +76 -0
- package/dist/components/molecules/RadioGroup/RadioGroupContext.d.ts +16 -0
- package/dist/components/molecules/RadioGroup/RadioGroupContext.d.ts.map +1 -0
- package/dist/components/molecules/RadioGroup/RadioGroupContext.js +23 -0
- package/dist/components/molecules/RadioGroup/RadioGroupItem.d.ts +12 -0
- package/dist/components/molecules/RadioGroup/RadioGroupItem.d.ts.map +1 -0
- package/dist/components/molecules/RadioGroup/RadioGroupItem.js +21 -0
- package/dist/components/molecules/RadioGroup/radioGroupStyles.d.ts +16 -0
- package/dist/components/molecules/RadioGroup/radioGroupStyles.d.ts.map +1 -0
- package/dist/components/molecules/RadioGroup/radioGroupStyles.js +15 -0
- package/dist/components/molecules/Search/Search.d.ts +24 -0
- package/dist/components/molecules/Search/Search.d.ts.map +1 -0
- package/dist/components/molecules/Search/Search.js +33 -0
- package/dist/components/molecules/Search/searchStyles.d.ts +10 -0
- package/dist/components/molecules/Search/searchStyles.d.ts.map +1 -0
- package/dist/components/molecules/Search/searchStyles.js +15 -0
- package/dist/components/molecules/SegmentedControl/SegmentedControl.d.ts +25 -0
- package/dist/components/molecules/SegmentedControl/SegmentedControl.d.ts.map +1 -0
- package/dist/components/molecules/SegmentedControl/SegmentedControl.js +36 -0
- package/dist/components/molecules/SegmentedControl/SegmentedControlContext.d.ts +16 -0
- package/dist/components/molecules/SegmentedControl/SegmentedControlContext.d.ts.map +1 -0
- package/dist/components/molecules/SegmentedControl/SegmentedControlContext.js +18 -0
- package/dist/components/molecules/SegmentedControl/SegmentedControlItem.d.ts +25 -0
- package/dist/components/molecules/SegmentedControl/SegmentedControlItem.d.ts.map +1 -0
- package/dist/components/molecules/SegmentedControl/SegmentedControlItem.js +55 -0
- package/dist/components/molecules/SegmentedControl/segmentedControlStyles.d.ts +31 -0
- package/dist/components/molecules/SegmentedControl/segmentedControlStyles.d.ts.map +1 -0
- package/dist/components/molecules/SegmentedControl/segmentedControlStyles.js +28 -0
- package/dist/components/molecules/Select/Select.d.ts +34 -0
- package/dist/components/molecules/Select/Select.d.ts.map +1 -0
- package/dist/components/molecules/Select/Select.js +161 -0
- package/dist/components/molecules/Select/selectMenuPosition.d.ts +11 -0
- package/dist/components/molecules/Select/selectMenuPosition.d.ts.map +1 -0
- package/dist/components/molecules/Select/selectMenuPosition.js +14 -0
- package/dist/components/molecules/Select/selectStyles.d.ts +21 -0
- package/dist/components/molecules/Select/selectStyles.d.ts.map +1 -0
- package/dist/components/molecules/Select/selectStyles.js +21 -0
- package/dist/components/molecules/SelectableCard/SelectableCard.d.ts +33 -0
- package/dist/components/molecules/SelectableCard/SelectableCard.d.ts.map +1 -0
- package/dist/components/molecules/SelectableCard/SelectableCard.js +84 -0
- package/dist/components/molecules/SelectableCard/selectableCardStyles.d.ts +14 -0
- package/dist/components/molecules/SelectableCard/selectableCardStyles.d.ts.map +1 -0
- package/dist/components/molecules/SelectableCard/selectableCardStyles.js +7 -0
- package/dist/components/molecules/Stat/Stat.d.ts +47 -0
- package/dist/components/molecules/Stat/Stat.d.ts.map +1 -0
- package/dist/components/molecules/Stat/Stat.js +76 -0
- package/dist/components/molecules/Stat/statStyles.d.ts +23 -0
- package/dist/components/molecules/Stat/statStyles.d.ts.map +1 -0
- package/dist/components/molecules/Stat/statStyles.js +37 -0
- package/dist/components/molecules/StepProgress/StepProgress.d.ts +21 -0
- package/dist/components/molecules/StepProgress/StepProgress.d.ts.map +1 -0
- package/dist/components/molecules/StepProgress/StepProgress.js +44 -0
- package/dist/components/molecules/StepProgress/stepProgressStyles.d.ts +7 -0
- package/dist/components/molecules/StepProgress/stepProgressStyles.d.ts.map +1 -0
- package/dist/components/molecules/StepProgress/stepProgressStyles.js +7 -0
- package/dist/components/molecules/TaskRows/TaskRows.d.ts +67 -0
- package/dist/components/molecules/TaskRows/TaskRows.d.ts.map +1 -0
- package/dist/components/molecules/TaskRows/TaskRows.js +164 -0
- package/dist/components/molecules/TaskRows/taskRowsStyles.d.ts +32 -0
- package/dist/components/molecules/TaskRows/taskRowsStyles.d.ts.map +1 -0
- package/dist/components/molecules/TaskRows/taskRowsStyles.js +16 -0
- package/dist/components/molecules/TextSequence/TextSequence.d.ts +47 -0
- package/dist/components/molecules/TextSequence/TextSequence.d.ts.map +1 -0
- package/dist/components/molecules/TextSequence/TextSequence.js +242 -0
- package/dist/components/molecules/TextSequence/textSequenceStyles.d.ts +10 -0
- package/dist/components/molecules/TextSequence/textSequenceStyles.d.ts.map +1 -0
- package/dist/components/molecules/TextSequence/textSequenceStyles.js +5 -0
- package/dist/components/organisms/Chart/Chart.d.ts +76 -0
- package/dist/components/organisms/Chart/Chart.d.ts.map +1 -0
- package/dist/components/organisms/Chart/Chart.js +152 -0
- package/dist/components/organisms/Chart/ChartCartesian.d.ts +54 -0
- package/dist/components/organisms/Chart/ChartCartesian.d.ts.map +1 -0
- package/dist/components/organisms/Chart/ChartCartesian.js +479 -0
- package/dist/components/organisms/Chart/ChartDistributionStrip.d.ts +24 -0
- package/dist/components/organisms/Chart/ChartDistributionStrip.d.ts.map +1 -0
- package/dist/components/organisms/Chart/ChartDistributionStrip.js +156 -0
- package/dist/components/organisms/Chart/ChartHeatmap.d.ts +24 -0
- package/dist/components/organisms/Chart/ChartHeatmap.d.ts.map +1 -0
- package/dist/components/organisms/Chart/ChartHeatmap.js +163 -0
- package/dist/components/organisms/Chart/ChartHoverTooltip.d.ts +13 -0
- package/dist/components/organisms/Chart/ChartHoverTooltip.d.ts.map +1 -0
- package/dist/components/organisms/Chart/ChartHoverTooltip.js +29 -0
- package/dist/components/organisms/Chart/ChartLegend.d.ts +13 -0
- package/dist/components/organisms/Chart/ChartLegend.d.ts.map +1 -0
- package/dist/components/organisms/Chart/ChartLegend.js +30 -0
- package/dist/components/organisms/Chart/ChartLoading.d.ts +12 -0
- package/dist/components/organisms/Chart/ChartLoading.d.ts.map +1 -0
- package/dist/components/organisms/Chart/ChartLoading.js +24 -0
- package/dist/components/organisms/Chart/ChartRankedBars.d.ts +18 -0
- package/dist/components/organisms/Chart/ChartRankedBars.d.ts.map +1 -0
- package/dist/components/organisms/Chart/ChartRankedBars.js +52 -0
- package/dist/components/organisms/Chart/ChartTooltipContent.d.ts +19 -0
- package/dist/components/organisms/Chart/ChartTooltipContent.d.ts.map +1 -0
- package/dist/components/organisms/Chart/ChartTooltipContent.js +36 -0
- package/dist/components/organisms/Chart/ChartUnitGrid.d.ts +17 -0
- package/dist/components/organisms/Chart/ChartUnitGrid.d.ts.map +1 -0
- package/dist/components/organisms/Chart/ChartUnitGrid.js +95 -0
- package/dist/components/organisms/Chart/chartCartesianContext.d.ts +50 -0
- package/dist/components/organisms/Chart/chartCartesianContext.d.ts.map +1 -0
- package/dist/components/organisms/Chart/chartCartesianContext.js +18 -0
- package/dist/components/organisms/Chart/chartCartesianGaps.d.ts +74 -0
- package/dist/components/organisms/Chart/chartCartesianGaps.d.ts.map +1 -0
- package/dist/components/organisms/Chart/chartCartesianGaps.js +92 -0
- package/dist/components/organisms/Chart/chartCartesianMotion.d.ts +11 -0
- package/dist/components/organisms/Chart/chartCartesianMotion.d.ts.map +1 -0
- package/dist/components/organisms/Chart/chartCartesianMotion.js +15 -0
- package/dist/components/organisms/Chart/chartExploration.d.ts +8 -0
- package/dist/components/organisms/Chart/chartExploration.d.ts.map +1 -0
- package/dist/components/organisms/Chart/chartExploration.js +31 -0
- package/dist/components/organisms/Chart/chartSegmentedBarMotion.d.ts +12 -0
- package/dist/components/organisms/Chart/chartSegmentedBarMotion.d.ts.map +1 -0
- package/dist/components/organisms/Chart/chartSegmentedBarMotion.js +9 -0
- package/dist/components/organisms/Chart/chartStyles.d.ts +93 -0
- package/dist/components/organisms/Chart/chartStyles.d.ts.map +1 -0
- package/dist/components/organisms/Chart/chartStyles.js +11 -0
- package/dist/components/organisms/Confetti/Confetti.d.ts +35 -0
- package/dist/components/organisms/Confetti/Confetti.d.ts.map +1 -0
- package/dist/components/organisms/Confetti/Confetti.js +96 -0
- package/dist/components/organisms/Confetti/confettiPhysics.d.ts +116 -0
- package/dist/components/organisms/Confetti/confettiPhysics.d.ts.map +1 -0
- package/dist/components/organisms/Confetti/confettiPhysics.js +121 -0
- package/dist/components/organisms/Confetti/confettiStyles.d.ts +3 -0
- package/dist/components/organisms/Confetti/confettiStyles.d.ts.map +1 -0
- package/dist/components/organisms/Confetti/confettiStyles.js +5 -0
- package/dist/components/organisms/Dialog/AlertDialog.d.ts +31 -0
- package/dist/components/organisms/Dialog/AlertDialog.d.ts.map +1 -0
- package/dist/components/organisms/Dialog/AlertDialog.js +80 -0
- package/dist/components/organisms/Dialog/Dialog.d.ts +54 -0
- package/dist/components/organisms/Dialog/Dialog.d.ts.map +1 -0
- package/dist/components/organisms/Dialog/Dialog.js +158 -0
- package/dist/components/organisms/Dialog/DialogContext.d.ts +22 -0
- package/dist/components/organisms/Dialog/DialogContext.d.ts.map +1 -0
- package/dist/components/organisms/Dialog/DialogContext.js +25 -0
- package/dist/components/organisms/Dialog/OverlayPanelHeader.d.ts +21 -0
- package/dist/components/organisms/Dialog/OverlayPanelHeader.d.ts.map +1 -0
- package/dist/components/organisms/Dialog/OverlayPanelHeader.js +50 -0
- package/dist/components/organisms/Dialog/dialogStyles.d.ts +66 -0
- package/dist/components/organisms/Dialog/dialogStyles.d.ts.map +1 -0
- package/dist/components/organisms/Dialog/dialogStyles.js +24 -0
- package/dist/components/organisms/FooterReveal/FooterReveal.d.ts +78 -0
- package/dist/components/organisms/FooterReveal/FooterReveal.d.ts.map +1 -0
- package/dist/components/organisms/FooterReveal/FooterReveal.js +208 -0
- package/dist/components/organisms/FooterReveal/FooterRevealRuled.d.ts +40 -0
- package/dist/components/organisms/FooterReveal/FooterRevealRuled.d.ts.map +1 -0
- package/dist/components/organisms/FooterReveal/FooterRevealRuled.js +120 -0
- package/dist/components/organisms/FooterReveal/footerRevealAt.d.ts +8 -0
- package/dist/components/organisms/FooterReveal/footerRevealAt.d.ts.map +1 -0
- package/dist/components/organisms/FooterReveal/footerRevealAt.js +7 -0
- package/dist/components/organisms/FooterReveal/footerRevealStyles.d.ts +142 -0
- package/dist/components/organisms/FooterReveal/footerRevealStyles.d.ts.map +1 -0
- package/dist/components/organisms/FooterReveal/footerRevealStyles.js +12 -0
- package/dist/components/organisms/FooterReveal/footerRevealWordmark.d.ts +37 -0
- package/dist/components/organisms/FooterReveal/footerRevealWordmark.d.ts.map +1 -0
- package/dist/components/organisms/FooterReveal/footerRevealWordmark.js +51 -0
- package/dist/components/organisms/HeroTileStack/HeroTileStack.d.ts +62 -0
- package/dist/components/organisms/HeroTileStack/HeroTileStack.d.ts.map +1 -0
- package/dist/components/organisms/HeroTileStack/HeroTileStack.js +257 -0
- package/dist/components/organisms/HeroTileStack/heroTileScatter.d.ts +120 -0
- package/dist/components/organisms/HeroTileStack/heroTileScatter.d.ts.map +1 -0
- package/dist/components/organisms/HeroTileStack/heroTileScatter.js +83 -0
- package/dist/components/organisms/HeroTileStack/heroTileStackStyles.d.ts +33 -0
- package/dist/components/organisms/HeroTileStack/heroTileStackStyles.d.ts.map +1 -0
- package/dist/components/organisms/HeroTileStack/heroTileStackStyles.js +11 -0
- package/dist/components/organisms/IntakeConfirmation/IntakeConfirmation.d.ts +33 -0
- package/dist/components/organisms/IntakeConfirmation/IntakeConfirmation.d.ts.map +1 -0
- package/dist/components/organisms/IntakeConfirmation/IntakeConfirmation.js +77 -0
- package/dist/components/organisms/IntakeConfirmation/intakeConfirmationStyles.d.ts +22 -0
- package/dist/components/organisms/IntakeConfirmation/intakeConfirmationStyles.d.ts.map +1 -0
- package/dist/components/organisms/IntakeConfirmation/intakeConfirmationStyles.js +25 -0
- package/dist/components/organisms/IntakeModal/IntakeModal.d.ts +33 -0
- package/dist/components/organisms/IntakeModal/IntakeModal.d.ts.map +1 -0
- package/dist/components/organisms/IntakeModal/IntakeModal.js +108 -0
- package/dist/components/organisms/IntakeModal/intakeModalStyles.d.ts +14 -0
- package/dist/components/organisms/IntakeModal/intakeModalStyles.d.ts.map +1 -0
- package/dist/components/organisms/IntakeModal/intakeModalStyles.js +7 -0
- package/dist/components/organisms/MoreMenu/MoreMenu.d.ts +28 -0
- package/dist/components/organisms/MoreMenu/MoreMenu.d.ts.map +1 -0
- package/dist/components/organisms/MoreMenu/MoreMenu.js +133 -0
- package/dist/components/organisms/MoreMenu/moreMenuStyles.d.ts +3 -0
- package/dist/components/organisms/MoreMenu/moreMenuStyles.d.ts.map +1 -0
- package/dist/components/organisms/MoreMenu/moreMenuStyles.js +5 -0
- package/dist/components/organisms/Panel/Panel.d.ts +40 -0
- package/dist/components/organisms/Panel/Panel.d.ts.map +1 -0
- package/dist/components/organisms/Panel/Panel.js +135 -0
- package/dist/components/organisms/Panel/PanelContext.d.ts +19 -0
- package/dist/components/organisms/Panel/PanelContext.d.ts.map +1 -0
- package/dist/components/organisms/Panel/PanelContext.js +25 -0
- package/dist/components/organisms/Panel/panelStyles.d.ts +17 -0
- package/dist/components/organisms/Panel/panelStyles.d.ts.map +1 -0
- package/dist/components/organisms/Panel/panelStyles.js +25 -0
- package/dist/components/organisms/ScrollHorizontal/ScrollHorizontal.d.ts +74 -0
- package/dist/components/organisms/ScrollHorizontal/ScrollHorizontal.d.ts.map +1 -0
- package/dist/components/organisms/ScrollHorizontal/ScrollHorizontal.js +163 -0
- package/dist/components/organisms/ScrollHorizontal/ScrollHorizontalIntro.d.ts +41 -0
- package/dist/components/organisms/ScrollHorizontal/ScrollHorizontalIntro.d.ts.map +1 -0
- package/dist/components/organisms/ScrollHorizontal/ScrollHorizontalIntro.js +40 -0
- package/dist/components/organisms/ScrollHorizontal/scrollHorizontalIntroContext.d.ts +3 -0
- package/dist/components/organisms/ScrollHorizontal/scrollHorizontalIntroContext.d.ts.map +1 -0
- package/dist/components/organisms/ScrollHorizontal/scrollHorizontalIntroContext.js +6 -0
- package/dist/components/organisms/ScrollHorizontal/scrollHorizontalMath.d.ts +167 -0
- package/dist/components/organisms/ScrollHorizontal/scrollHorizontalMath.d.ts.map +1 -0
- package/dist/components/organisms/ScrollHorizontal/scrollHorizontalMath.js +136 -0
- package/dist/components/organisms/ScrollHorizontal/scrollHorizontalStyles.d.ts +84 -0
- package/dist/components/organisms/ScrollHorizontal/scrollHorizontalStyles.d.ts.map +1 -0
- package/dist/components/organisms/ScrollHorizontal/scrollHorizontalStyles.js +79 -0
- package/dist/components/organisms/Sheet/Sheet.d.ts +44 -0
- package/dist/components/organisms/Sheet/Sheet.d.ts.map +1 -0
- package/dist/components/organisms/Sheet/Sheet.js +152 -0
- package/dist/components/organisms/Sheet/SheetContext.d.ts +20 -0
- package/dist/components/organisms/Sheet/SheetContext.d.ts.map +1 -0
- package/dist/components/organisms/Sheet/SheetContext.js +25 -0
- package/dist/components/organisms/Sheet/sheetStyles.d.ts +30 -0
- package/dist/components/organisms/Sheet/sheetStyles.d.ts.map +1 -0
- package/dist/components/organisms/Sheet/sheetStyles.js +72 -0
- package/dist/components/organisms/SiteNav/SiteNav.d.ts +170 -0
- package/dist/components/organisms/SiteNav/SiteNav.d.ts.map +1 -0
- package/dist/components/organisms/SiteNav/SiteNav.js +536 -0
- package/dist/components/organisms/SiteNav/siteNavStyles.d.ts +128 -0
- package/dist/components/organisms/SiteNav/siteNavStyles.d.ts.map +1 -0
- package/dist/components/organisms/SiteNav/siteNavStyles.js +25 -0
- package/dist/components/organisms/SiteNav/useSiteNavCollapse.d.ts +18 -0
- package/dist/components/organisms/SiteNav/useSiteNavCollapse.d.ts.map +1 -0
- package/dist/components/organisms/SiteNav/useSiteNavCollapse.js +34 -0
- package/dist/components/organisms/Tab/Tab.d.ts +27 -0
- package/dist/components/organisms/Tab/Tab.d.ts.map +1 -0
- package/dist/components/organisms/Tab/Tab.js +223 -0
- package/dist/components/organisms/Tab/tabOverflow.d.ts +14 -0
- package/dist/components/organisms/Tab/tabOverflow.d.ts.map +1 -0
- package/dist/components/organisms/Tab/tabOverflow.js +26 -0
- package/dist/components/organisms/Tab/tabStyles.d.ts +16 -0
- package/dist/components/organisms/Tab/tabStyles.d.ts.map +1 -0
- package/dist/components/organisms/Tab/tabStyles.js +17 -0
- package/dist/components/organisms/Toast/Toast.d.ts +17 -0
- package/dist/components/organisms/Toast/Toast.d.ts.map +1 -0
- package/dist/components/organisms/Toast/Toast.js +150 -0
- package/dist/components/organisms/Toast/toastStore.d.ts +41 -0
- package/dist/components/organisms/Toast/toastStore.d.ts.map +1 -0
- package/dist/components/organisms/Toast/toastStore.js +60 -0
- package/dist/components/organisms/Toast/toastStyles.d.ts +11 -0
- package/dist/components/organisms/Toast/toastStyles.d.ts.map +1 -0
- package/dist/components/organisms/Toast/toastStyles.js +21 -0
- package/dist/files/geist-cyrillic-ext-wght-normal.woff2 +0 -0
- package/dist/files/geist-cyrillic-wght-normal.woff2 +0 -0
- package/dist/files/geist-latin-ext-wght-normal.woff2 +0 -0
- package/dist/files/geist-latin-wght-normal.woff2 +0 -0
- package/dist/files/geist-mono-cyrillic-ext-wght-normal.woff2 +0 -0
- package/dist/files/geist-mono-cyrillic-wght-normal.woff2 +0 -0
- package/dist/files/geist-mono-latin-ext-wght-normal.woff2 +0 -0
- package/dist/files/geist-mono-latin-wght-normal.woff2 +0 -0
- package/dist/files/geist-mono-symbols2-wght-normal.woff2 +0 -0
- package/dist/files/geist-mono-vietnamese-wght-normal.woff2 +0 -0
- package/dist/files/geist-vietnamese-wght-normal.woff2 +0 -0
- package/dist/fonts.css +124 -0
- package/dist/grid.css +214 -0
- package/dist/index.d.ts +73 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +122 -0
- package/dist/lib/GridOverlay.d.ts +23 -0
- package/dist/lib/GridOverlay.d.ts.map +1 -0
- package/dist/lib/GridOverlay.js +78 -0
- package/dist/lib/backgroundPatterns.d.ts +27 -0
- package/dist/lib/backgroundPatterns.d.ts.map +1 -0
- package/dist/lib/backgroundPatterns.js +21 -0
- package/dist/lib/chartSampleData.d.ts +20 -0
- package/dist/lib/chartSampleData.d.ts.map +1 -0
- package/dist/lib/chartTheme.d.ts +367 -0
- package/dist/lib/chartTheme.d.ts.map +1 -0
- package/dist/lib/chartTheme.js +329 -0
- package/dist/lib/clusterScale.d.ts +48 -0
- package/dist/lib/clusterScale.d.ts.map +1 -0
- package/dist/lib/clusterScale.js +48 -0
- package/dist/lib/cn.d.ts +3 -0
- package/dist/lib/cn.d.ts.map +1 -0
- package/dist/lib/cn.js +7 -0
- package/dist/lib/compositionAudit.d.ts +59 -0
- package/dist/lib/compositionAudit.d.ts.map +1 -0
- package/dist/lib/dialogOverlay.d.ts +7 -0
- package/dist/lib/dialogOverlay.d.ts.map +1 -0
- package/dist/lib/dialogOverlay.js +41 -0
- package/dist/lib/displayCascade.d.ts +27 -0
- package/dist/lib/displayCascade.d.ts.map +1 -0
- package/dist/lib/gridOverlayUtils.d.ts +34 -0
- package/dist/lib/gridOverlayUtils.d.ts.map +1 -0
- package/dist/lib/gridOverlayUtils.js +43 -0
- package/dist/lib/insetWell.d.ts +19 -0
- package/dist/lib/insetWell.d.ts.map +1 -0
- package/dist/lib/insetWell.js +5 -0
- package/dist/lib/motion.d.ts +81 -0
- package/dist/lib/motion.d.ts.map +1 -0
- package/dist/lib/motion.js +119 -0
- package/dist/lib/segmentedControl.d.ts +9 -0
- package/dist/lib/segmentedControl.d.ts.map +1 -0
- package/dist/lib/segmentedControl.js +6 -0
- package/dist/lib/semanticVariants.d.ts +5 -0
- package/dist/lib/semanticVariants.d.ts.map +1 -0
- package/dist/lib/shadows.d.ts +17 -0
- package/dist/lib/shadows.d.ts.map +1 -0
- package/dist/lib/storyCopySource.d.ts +16 -0
- package/dist/lib/storyCopySource.d.ts.map +1 -0
- package/dist/lib/tableLayout/index.d.ts +4 -0
- package/dist/lib/tableLayout/index.d.ts.map +1 -0
- package/dist/lib/tableLayout/tableLayout.d.ts +24 -0
- package/dist/lib/tableLayout/tableLayout.d.ts.map +1 -0
- package/dist/lib/tableLayout/tableMeasurer.d.ts +21 -0
- package/dist/lib/tableLayout/tableMeasurer.d.ts.map +1 -0
- package/dist/lib/tableLayout/useTableLayout.d.ts +6 -0
- package/dist/lib/tableLayout/useTableLayout.d.ts.map +1 -0
- package/dist/lib/typography.d.ts +93 -0
- package/dist/lib/typography.d.ts.map +1 -0
- package/dist/lib/typography.js +170 -0
- package/dist/lib/useScrollThreshold.d.ts +22 -0
- package/dist/lib/useScrollThreshold.d.ts.map +1 -0
- package/dist/lib/useScrollThreshold.js +29 -0
- package/dist/lib/viewports.d.ts +120 -0
- package/dist/lib/viewports.d.ts.map +1 -0
- package/dist/motion.css +73 -0
- package/dist/patterns.css +37 -0
- package/dist/scrollFade.css +380 -0
- package/dist/shape.css +8 -0
- package/dist/sources.css +70 -0
- package/dist/stateColors.css +73 -0
- package/dist/styles.css +2 -0
- package/dist/theme.css +200 -0
- package/dist/typography.css +224 -0
- package/docs/README.md +27 -0
- package/docs/component-contracts.md +27 -0
- package/docs/components.md +61 -0
- package/docs/consumer-agents.md +34 -0
- package/docs/exports.json +803 -0
- package/docs/patterns/components-avatar--dropdown-row.tsx +20 -0
- package/docs/patterns/components-badge--with-avatar.tsx +28 -0
- package/docs/patterns/components-button-button--destructive-action.tsx +7 -0
- package/docs/patterns/components-button-button--ghost-action.tsx +7 -0
- package/docs/patterns/components-button-button--inverse-action.tsx +7 -0
- package/docs/patterns/components-button-button--link-render.tsx +14 -0
- package/docs/patterns/components-button-button--multi-state-badge.tsx +16 -0
- package/docs/patterns/components-button-button--outline-mono.tsx +10 -0
- package/docs/patterns/components-button-button--primary-action.tsx +7 -0
- package/docs/patterns/components-button-button--row-hug.tsx +15 -0
- package/docs/patterns/components-button-button--row-layout.tsx +14 -0
- package/docs/patterns/components-button-button--secondary-action.tsx +7 -0
- package/docs/patterns/components-button-button--suggestion-pills.tsx +17 -0
- package/docs/patterns/components-button-button--with-count.tsx +9 -0
- package/docs/patterns/components-button-button--with-icon.tsx +22 -0
- package/docs/patterns/components-button-floatingactionbutton--vertical-actions.tsx +22 -0
- package/docs/patterns/components-calembed--pattern-skip-in-footer.tsx +25 -0
- package/docs/patterns/components-card-card--body-slot-occupancy-history.tsx +44 -0
- package/docs/patterns/components-card-card--headerless-media.tsx +23 -0
- package/docs/patterns/components-card-card--outlined-layout.tsx +16 -0
- package/docs/patterns/components-card-card--pinned-height.tsx +39 -0
- package/docs/patterns/components-card-selectablecard--selectable-cards-pattern.tsx +48 -0
- package/docs/patterns/components-chart--audience-activity-heatmap.tsx +26 -0
- package/docs/patterns/components-chart--cartesian-no-data-gaps.tsx +25 -0
- package/docs/patterns/components-chart--occupancy-history-in-card.tsx +44 -0
- package/docs/patterns/components-chart--occupancy-in-card.tsx +49 -0
- package/docs/patterns/components-chart--post-reach-distribution.tsx +21 -0
- package/docs/patterns/components-chart--ranked-audience-breakdown.tsx +16 -0
- package/docs/patterns/components-chart--unit-grid-composition.tsx +22 -0
- package/docs/patterns/components-chatqa--pattern-qa-with-reply.tsx +25 -0
- package/docs/patterns/components-checkbox-checkbox--default.tsx +17 -0
- package/docs/patterns/components-checkbox-checkbox--with-description.tsx +18 -0
- package/docs/patterns/components-checkbox-checkboxgroup--default.tsx +21 -0
- package/docs/patterns/components-dialog--alert-dialog-destructive.tsx +28 -0
- package/docs/patterns/components-dialog--default-dialog.tsx +39 -0
- package/docs/patterns/components-dialog--form-dialog.tsx +41 -0
- package/docs/patterns/components-displaycontrols--page-utilities.tsx +36 -0
- package/docs/patterns/components-field--horizontal-input.tsx +9 -0
- package/docs/patterns/components-field--horizontal-text-area.tsx +9 -0
- package/docs/patterns/components-field--multi-control.tsx +10 -0
- package/docs/patterns/components-footerreveal--marketing-hero-pattern.tsx +94 -0
- package/docs/patterns/components-footerreveal--marketing-hero-ruled-pattern.tsx +121 -0
- package/docs/patterns/components-footerreveal--marketing-hero-with-gallery-intro.tsx +114 -0
- package/docs/patterns/components-footerreveal--marketing-page-pattern.tsx +76 -0
- package/docs/patterns/components-footerreveal--ruled-grid-footer-pattern.tsx +42 -0
- package/docs/patterns/components-footerreveal--sequenced-marketing-hero.tsx +123 -0
- package/docs/patterns/components-herointro--two-line-intro.tsx +15 -0
- package/docs/patterns/components-herotilestack--marketing-hero-pattern.tsx +72 -0
- package/docs/patterns/components-herotilestack--marketing-hero-text-sequence.tsx +84 -0
- package/docs/patterns/components-herotilestack--marketing-hero-with-gallery-intro.tsx +92 -0
- package/docs/patterns/components-intakeconfirmation--booked-pattern.tsx +20 -0
- package/docs/patterns/components-intakeconfirmation--emailed-pattern.tsx +13 -0
- package/docs/patterns/components-intakeform--about-you-pattern.tsx +12 -0
- package/docs/patterns/components-intakemodal--intake-modal-pattern.tsx +32 -0
- package/docs/patterns/components-kbd--command-row.tsx +13 -0
- package/docs/patterns/components-kbd--numbered-choices.tsx +53 -0
- package/docs/patterns/components-kbd--shortcut.tsx +11 -0
- package/docs/patterns/components-moremenu--action-menu.tsx +36 -0
- package/docs/patterns/components-moremenu--in-card-header.tsx +72 -0
- package/docs/patterns/components-navlist--side-nav-settings.tsx +58 -0
- package/docs/patterns/components-pageheader--app-header-pattern.tsx +40 -0
- package/docs/patterns/components-pageheader--page-section-header.tsx +20 -0
- package/docs/patterns/components-pageheader--toolbar-header.tsx +37 -0
- package/docs/patterns/components-panel--end-detail-rail.tsx +65 -0
- package/docs/patterns/components-pillgroup--pill-group-pattern.tsx +22 -0
- package/docs/patterns/components-promptbar--pattern-marketing-composer.tsx +37 -0
- package/docs/patterns/components-promptbar--pattern-prompt-bar.tsx +20 -0
- package/docs/patterns/components-radio-radiogroup--default.tsx +21 -0
- package/docs/patterns/components-scrollhorizontal--project-gallery-pattern.tsx +22 -0
- package/docs/patterns/components-scrollhorizontal--with-intro.tsx +42 -0
- package/docs/patterns/components-sheet--bottom-sheet.tsx +40 -0
- package/docs/patterns/components-sheet--end-sheet.tsx +33 -0
- package/docs/patterns/components-sitenav--brand-and-cta.tsx +17 -0
- package/docs/patterns/components-sitenav--centered-links.tsx +20 -0
- package/docs/patterns/components-sitenav--compact.tsx +24 -0
- package/docs/patterns/components-sitenav--marketing-header.tsx +80 -0
- package/docs/patterns/components-sitenav--mega-menu.tsx +51 -0
- package/docs/patterns/components-stat--insights-row.tsx +28 -0
- package/docs/patterns/components-stepprogress--step-progress-pattern.tsx +9 -0
- package/docs/patterns/components-switch--default.tsx +17 -0
- package/docs/patterns/components-switch--settings-row.tsx +19 -0
- package/docs/patterns/components-tab--settings-pages.tsx +21 -0
- package/docs/patterns/components-taskrows--action-details.tsx +40 -0
- package/docs/patterns/components-taskrows--capsules.tsx +14 -0
- package/docs/patterns/components-taskrows--card-with-status-rows.tsx +30 -0
- package/docs/patterns/components-taskrows--controlled-expand.tsx +31 -0
- package/docs/patterns/components-taskrows--custom-slots.tsx +21 -0
- package/docs/patterns/components-taskrows--status-list.tsx +23 -0
- package/docs/patterns/components-taskrows--tag-chips.tsx +19 -0
- package/docs/patterns/components-textlink--external-destination.tsx +9 -0
- package/docs/patterns/components-textlink--inline-prose.tsx +9 -0
- package/docs/patterns/components-textlink--supporting-copy.tsx +9 -0
- package/docs/patterns/components-textsequence--default.tsx +16 -0
- package/docs/patterns/components-textsequence--reduced-motion.tsx +16 -0
- package/docs/patterns/components-textsequence--shapes.tsx +40 -0
- package/docs/patterns/components-toast--stacked-notifications.tsx +31 -0
- package/docs/patterns/components-tooltip--controlled.tsx +20 -0
- package/docs/patterns/components-tooltip--disabled-control.tsx +20 -0
- package/docs/patterns/components-tooltip--icon-action.tsx +21 -0
- package/docs/patterns/components-tooltip--keyboard-shortcut.tsx +17 -0
- package/docs/patterns/components-tooltip--placement.tsx +12 -0
- package/docs/patterns/foundations-scroll-fade--horizontal-rail.tsx +24 -0
- package/docs/patterns/foundations-scroll-fade--overflowing-list.tsx +25 -0
- package/docs/patterns/guides-chart-explorations--comparison-gallery.tsx +78 -0
- package/docs/patterns/guides-overlay-flows--notification-preferences.tsx +140 -0
- package/docs/patterns/guides-profile-typography--editorial-profile.tsx +81 -0
- package/docs/patterns/index.json +1006 -0
- package/docs/patterns/sites-pitchkit-account-settings--account-settings-owner.tsx +265 -0
- package/docs/patterns/sites-pitchkit-creator-identity--creator-identity-owner-settings.tsx +154 -0
- package/docs/patterns/sites-pitchkit-creator-identity--creator-identity-public.tsx +96 -0
- package/docs/patterns/sites-pitchkit-insights-and-kit--creator-insights-loading.tsx +1006 -0
- package/docs/patterns/sites-pitchkit-insights-and-kit--creator-insights.tsx +1031 -0
- package/docs/patterns/sites-pitchkit-insights-and-kit--insufficient-audience-data.tsx +1015 -0
- package/docs/patterns/sites-pitchkit-insights-and-kit--insufficient-reach-and-audience-data.tsx +1017 -0
- package/docs/patterns/sites-pitchkit-insights-and-kit--insufficient-reach-data.tsx +1033 -0
- package/docs/patterns/sites-pitchkit-insights-and-kit--owner-pitch-kit.tsx +838 -0
- package/docs/patterns/sites-pitchkit-insights-and-kit--shareable-pitch-kit.tsx +608 -0
- package/docs/patterns/sites-pitchkit-intro--intro-owner.tsx +161 -0
- package/docs/patterns/sites-pitchkit-intro--intro-public.tsx +111 -0
- package/docs/patterns/sites-pitchkit-past-brands--past-brands-owner.tsx +611 -0
- package/docs/patterns/sites-pitchkit-past-brands--past-brands-public.tsx +299 -0
- package/docs/patterns/sites-pitchkit-theme-picker--theme-picker-owner.tsx +832 -0
- package/docs/patterns/sites-whatmatters-intake--start-a-project-pattern.tsx +234 -0
- package/docs/patterns/sites-whatmatters-marketing-landing--marketing-landing.tsx +87 -0
- package/docs/patterns/sites-whatmatters-prompt-chat--landing-to-chat.tsx +899 -0
- package/docs/patterns/sites-whatmatters-rfp-submitted--rfp-submitted.tsx +302 -0
- package/package.json +123 -0
- package/public/rive/CREDITS.md +13 -0
- package/public/rive/interactive-icon-set.riv +0 -0
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
Every release of `@thewhatmatters/wmds` is listed here, newest first.
|
|
4
|
+
|
|
5
|
+
- **Versions follow semver.** While the major version is `0`, a minor bump (`0.3.0`) can break an app and a patch bump (`0.2.1`) does not. Apps depend on `^0.2.0`, which accepts patches only.
|
|
6
|
+
- **Every release has a Consumer actions section**: the exact steps an app takes when it moves to that version. It says **None** when there are none. Agents upgrading an app read every Consumer actions section between the old and new version, oldest first.
|
|
7
|
+
- **Pasted patterns:** when a release changes a **Pattern — …** story's Show code, it is named under Consumer actions so apps re-copy it.
|
|
8
|
+
- **How to add an entry** (contributors): add your change to the top entry. If that version is already on npm (`npm view @thewhatmatters/wmds versions`), start a new entry above it and bump `version` in `package.json` to match. `npm run check:changelog` enforces the format.
|
|
9
|
+
|
|
10
|
+
## 0.2.0
|
|
11
|
+
|
|
12
|
+
First release on npm. Earlier builds were installed from git commits and all reported `0.1.0`.
|
|
13
|
+
|
|
14
|
+
### Consumer actions
|
|
15
|
+
|
|
16
|
+
1. **Move from the git pin to npm, under the new name.** The npm package is `@thewhatmatters/wmds`; git installs were named `@whatmatters/wmds`, and that npm scope belongs to another account. Uninstall `@whatmatters/wmds`, replace `@whatmatters/wmds` with `@thewhatmatters/wmds` in every import, CSS `@import`, and config file, then `npm install @thewhatmatters/wmds@^0.2.0`. The exact commands are in **CONSUMING.md → Install → Moving from a git pin**. Commit `package.json` and `package-lock.json` together.
|
|
17
|
+
2. **Delete `scripts/copy-wmds-fonts.mjs`** and the `package.json` script that runs it (usually `postinstall`). The fonts now ship in `dist/files` and both style entries reference them.
|
|
18
|
+
3. **Remove `@fontsource-variable/geist` and `@fontsource-variable/geist-mono`** from the app's dependencies, unless the app imports them for something other than WMDS.
|
|
19
|
+
4. **Serve the Rive runtime from the app** (only if the app renders **RiveHand**, for example the marketing hero): copy `node_modules/@rive-app/canvas/rive.wasm` to `public/rive/rive.wasm`. Copy it again whenever `@rive-app/*` changes version. Until it is there, the runtime falls back to its CDN build and logs a warning.
|
|
20
|
+
5. **Copy the Rive art from the package** (same apps): `node_modules/@thewhatmatters/wmds/public/rive/interactive-icon-set.riv` to `public/rive/interactive-icon-set.riv`. Keep the CC BY 4.0 credit from `public/rive/CREDITS.md`.
|
|
21
|
+
6. **Install `lucide-react`** if the app does not already have it. It is a peer dependency because 24 shipped modules import it.
|
|
22
|
+
7. **Point the app's agents at the shipped docs:** paste the block from `node_modules/@thewhatmatters/wmds/docs/consumer-agents.md` into the app's `AGENTS.md` (or `CLAUDE.md`).
|
|
23
|
+
8. **Install the agent skills** (optional, recommended): `npx skills add 'thewhatmatters/wmds#v0.2.0' -s use-wmds -s upgrade-wmds -s report-wmds-gap -a claude-code -y`, then commit `.claude/skills/` and `skills-lock.json`.
|
|
24
|
+
9. **Re-copy pasted patterns.** Every Pattern's Show code now compiles in a strict Next 16 app: it exports its component, takes app data and callbacks as typed props, has no placeholders or unused code, and imports only real exports. Replace each pasted copy with `node_modules/@thewhatmatters/wmds/docs/patterns/<id>.tsx` and re-apply only content, data, and handlers. Most affected:
|
|
25
|
+
- **Sites/WhatMatters/Prompt chat → Pattern — landing to chat** (the site's `components/ask-what-matters.tsx`): typed throughout, dead constants removed, step 3 validates with `isIntakeAboutValid`.
|
|
26
|
+
- **Sites/WhatMatters/Intake → Pattern — start a project**: apostrophes escaped in JSX text.
|
|
27
|
+
- **Sites/PitchKit/** — all 15 patterns: exported data types (`PitchKitCreatorIdentity`, `PitchKitPastBrand`, `PitchKitPost`, `PitchKitPageData`, …) and typed props.
|
|
28
|
+
- **Guides/Overlay flows → Pattern — notification preferences**, **Components/Panel → Pattern — end detail rail**, **Components/NavList → Pattern — side nav (settings)**, **Components/SiteNav → Pattern — compact (scrolled)**, **Components/PageHeader → Pattern — toolbar header**: were outlines with placeholders; now full mirrors of the canvas.
|
|
29
|
+
10. **FooterReveal: pass the footer content.** **FooterReveal.Ruled** and **FooterReveal.Brand** no longer ship content defaults (the ruled footer defaulted to a real email address). `FooterReveal.Ruled` now requires `wordmark` and renders `links`, `email`, `mark`, `copyright`, and `credit` only when passed; `FooterReveal.Brand` requires `headline`, `ctaLabel`, and `wordmark`, and renders `socialLinks` only when passed. TypeScript flags any call that relied on the defaults; pass the values the footer showed before. `footerRevealRuledDefaultCopy`, `footerRevealRuledDefaultLinks`, and `footerRevealDefaultSocialLinks` are removed. Re-copy **Components/FooterReveal → Pattern — ruled grid footer** and **Pattern — marketing hero ruled grid**.
|
|
30
|
+
11. **Drop Button `!` overrides.** Replace `className="!w-auto !gap-1.5"` on a `layout="row"` Button with `width="hug"`, and `className="… !justify-start !border-border"` on an outline Button with `emphasis="quiet" align="start"` (keep `w-full` as layout). Re-copy **Sites/WhatMatters/Prompt chat → Pattern — landing to chat**.
|
|
31
|
+
12. **Marketing homepage composer.** Replace the hand-rolled pinned prompt with **Components/PromptBar → Pattern — marketing composer**, and pass the ask page's `q` search param to **AskWhatMatters** as `initialPrompt` (re-copy **Pattern — landing to chat**).
|
|
32
|
+
13. **RFP submitted:** the pattern's `RfpSubmitted` now takes `onSubmit(draft): Promise<void>` instead of a simulated delay. Re-copy **Sites/WhatMatters/RFP submitted → Pattern — RFP submitted** and pass your request.
|
|
33
|
+
14. **Add `npx wmds-check` to CI** (optional, recommended). Start with errors only; add `--max-warnings 0` once the warnings are cleared.
|
|
34
|
+
15. **Update Storybook links** in app docs and code comments. Paths changed: **Examples/…** and **Patterns/…** are now **Sites/WhatMatters/…**, **Sites/PitchKit/…**, or **Guides/…**, and components moved from `Components/{Category}/{Name}` to `Components/{Name}` (families: `Components/Button/…`, `Components/Card/…`, `Components/Checkbox/…`, `Components/Radio/…`). Pattern names and their Show code did not change.
|
|
35
|
+
|
|
36
|
+
### Changed
|
|
37
|
+
|
|
38
|
+
- **One module per source file.** An app that imports only `Button` bundles 148 KB minified (48 KB gzip), down from 806 KB. GSAP loads only with **TextSequence**, Rive only with **RiveHand**.
|
|
39
|
+
- **Fonts ship in the package** (`dist/files`), and `./theme.css` is self-contained: every partial it imports is in `dist`.
|
|
40
|
+
- **RiveHand** loads the Rive runtime from `/rive/rive.wasm` (`riveHandWasmSrc`) instead of a public CDN.
|
|
41
|
+
- **`lucide-react`** is a peer dependency.
|
|
42
|
+
- **Storybook** is organized as Getting started → Guides → Foundations → Components → Sites (ADR-0026, amended). Components are A–Z with a categorized **Components → Overview**.
|
|
43
|
+
- **Agent docs ship in the package** under `docs/`: `exports.json` (every export with category, summary, Storybook page, and patterns), `components.md` (component and token contracts), `component-contracts.md`, and `patterns/<id>.tsx` — every Pattern's Show code with a header naming the pattern and version.
|
|
44
|
+
- **Newly exported:** `ButtonIcon`, `BadgeIcon`, `buttonSizeForCluster`, `iconButtonSizeForCluster`, `clusterComponentSizeMap`, `clusterTiers`, and `ClusterTier`. Show code and the docs already told apps to use them.
|
|
45
|
+
- **Show code is checked in a consumer app.** CI pastes every pattern into `fixtures/next-consumer` (Next 16, React 19, strict TypeScript, `eslint-config-next`) and requires zero `tsc` errors and zero eslint warnings.
|
|
46
|
+
- **CalEmbed** shows a visitor-facing empty state (`emptyTitle`, `emptyDescription`) when no calendar is mounted, instead of developer theming notes.
|
|
47
|
+
- **Button** gains `width` (`fill` | `hug`, row layout), `align` (`center` | `start`, pills), and `emphasis` (`strong` | `quiet`, outline role). New patterns: **Pattern — row (hug)**, **Pattern — suggestion pills**.
|
|
48
|
+
- **PromptBar** mounts on the marketing homepage: **Pattern — marketing composer** pins it to the bottom of the viewport and hands off to the ask page.
|
|
49
|
+
- **Motion choreography tokens** `--motion-stagger`, `--motion-beat`, `--motion-blur-reveal`, with `motionStaggerSeconds()`, `motionBeatSeconds()`, `motionBlurReveal()`, and the newly exported `readMotionDurationSeconds()`. Show code no longer hard-codes blur or timing values.
|
|
50
|
+
- **RiveHand** passes `stateMachine` (not the deprecated `stateMachines`) and silences only Rive's `state-machine-inputs` deprecation until the art exposes a view-model boolean.
|
|
51
|
+
- **`wmds-check`** consumer audit (`npx wmds-check`): raw controls, `!` overrides on WMDS components, raw color / type / motion values, and pasted patterns that drift from the installed version. See **CONSUMING.md → Consumer check**.
|
|
52
|
+
- **Agent skills** in `skills/`: `use-wmds`, `upgrade-wmds`, `report-wmds-gap`, installable with the `skills` CLI. The package exports `./docs/*` and `./CHANGELOG.md` so scripts can `require("@thewhatmatters/wmds/docs/exports.json")`.
|
|
53
|
+
- The package is published to npm under the MIT license. `public/rive/interactive-icon-set.riv` and its credits ship in the package.
|
package/CONSUMING.md
ADDED
|
@@ -0,0 +1,352 @@
|
|
|
1
|
+
# Using WMDS in other apps
|
|
2
|
+
|
|
3
|
+
## Philosophy — pattern-first
|
|
4
|
+
|
|
5
|
+
WMDS is **not** utility-class-first. You do **not** build product UI by composing `bg-primary`, `text-sm`, and ad-hoc borders across the app.
|
|
6
|
+
|
|
7
|
+
**Do this:**
|
|
8
|
+
|
|
9
|
+
```tsx
|
|
10
|
+
import { Button, Badge, Chip, ChipFilterGroup, IconButton, Input, Status } from "@thewhatmatters/wmds";
|
|
11
|
+
import "@thewhatmatters/wmds/styles.css";
|
|
12
|
+
|
|
13
|
+
<Button status={status}>Submit</Button>
|
|
14
|
+
<Button role="secondary" count={3}>Inbox</Button>
|
|
15
|
+
<Button role="primary" icon={<Plus strokeWidth={2} />}>New item</Button>
|
|
16
|
+
<Button role="ghost" layout="row" type="button" onClick={…}>
|
|
17
|
+
<span>Due date</span>
|
|
18
|
+
<span>Sep 12</span>
|
|
19
|
+
</Button>
|
|
20
|
+
<IconButton icon={<Settings strokeWidth={2} />} aria-label="Open settings" title="Settings" />
|
|
21
|
+
<Badge variant="success">Online</Badge>
|
|
22
|
+
<span className="inline-flex items-center gap-1.5">
|
|
23
|
+
<Status variant="dot" tone="success" besideLabel />
|
|
24
|
+
Online
|
|
25
|
+
</span>
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
Find a component A–Z under **Components/** (or by category on **Components → Overview**), read **Guides/** for cross-component choices, and use **Sites/** for approved pages and flows (**Sites/WhatMatters/…**, **Sites/PitchKit/…**) — copy the named **Pattern** story JSX and state wiring; do not re-style with utilities. Sites and Guides pages are not exported from the package.
|
|
29
|
+
|
|
30
|
+
**Show code is the product contract.** Pattern story **Show code** (`storyCopySource`) is the drop-in implementation for consuming apps. It must stay a literal mirror of the live canvas — same layout, chrome, spacing, and typography. Copy Show code; do not choose between the Storybook iframe and an older freeze, and do not reconstruct the page from Storybook-only example modules (`*Example.tsx`, `*Styles.ts`). When the canvas changes, Show code is updated to match; apps re-copy the new freeze.
|
|
31
|
+
|
|
32
|
+
Page-level Example canvases include a Storybook-only grid inspector while designs are being tuned. Show code freezes the approved `--grid-max` / `--grid-column-gap` values and omits **ExampleGridControls** and other development chrome, so the copied result contains only `@thewhatmatters/wmds` exports and product layout.
|
|
33
|
+
|
|
34
|
+
**Not this:**
|
|
35
|
+
|
|
36
|
+
```tsx
|
|
37
|
+
// Avoid — re-inventing WMDS patterns
|
|
38
|
+
<button className="rounded-full bg-primary px-5 …">Submit</button>
|
|
39
|
+
<Button startSlot={<img … />} badge="New" variant="success" />
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
Use Tailwind in your app for **page layout** and spacing **between** WMDS components. For a consistent page spine, copy **`grid-page` + `band`** (below) — do not invent a Pitchkit layout atom. Use **`className` on a component** for layout tweaks (width, margin) — not for new variants or colors.
|
|
43
|
+
|
|
44
|
+
New visuals require a WMDS component or Example pattern — see **`docs/adr/0004-pattern-first-not-utility-first.md`**.
|
|
45
|
+
|
|
46
|
+
For a list or rail that overflows its parent, apply **`scroll-fade-y`** or **`scroll-fade-x`** to the scrolling element. Keep the parent surface and border on a wrapper so the mask only dissolves content:
|
|
47
|
+
|
|
48
|
+
```tsx
|
|
49
|
+
<div className="overflow-hidden rounded-lg border border-border bg-card">
|
|
50
|
+
<ul className="scroll-fade-y max-h-64 overflow-y-auto">…</ul>
|
|
51
|
+
</div>
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
The fade tracks the scroll boundary without JavaScript. See **Foundations → Scroll fade** for one-edge, RTL, and size controls.
|
|
55
|
+
|
|
56
|
+
## Requirements
|
|
57
|
+
|
|
58
|
+
- **React** 18 or 19
|
|
59
|
+
- **Tailwind v4** recommended — import WMDS styles or theme
|
|
60
|
+
- **Motion** — `npm install motion` when using animated components
|
|
61
|
+
- **Lucide** — `npm install lucide-react`. Peer dependency: components import their own icons, and apps pass icons into component props
|
|
62
|
+
- **visx** — `npm install @visx/visx` when using **Chart** (peer dep; WMDS composes `@visx/*` primitives — see **ADR-0012**)
|
|
63
|
+
- **Rive** — `npm install @rive-app/react-canvas` when using **RiveHand** or **Pattern — marketing hero**. WMDS lists it as a dependency and does not bundle the runtime. Copy `public/rive/interactive-icon-set.riv` into the app at `public/rive/interactive-icon-set.riv` so it is served at `/rive/interactive-icon-set.riv`. Copy `node_modules/@rive-app/canvas/rive.wasm` to `public/rive/rive.wasm` so the runtime loads from the app at `/rive/rive.wasm` (`riveHandWasmSrc`). Copy it again when the Rive package version changes. When the file is missing the runtime falls back to its CDN build and logs a warning. Paste the pattern into a Next.js App Router file that starts with `"use client"`. The Show code already includes that directive. Hand art is CC BY 4.0, Silvia Sguotti and Gabriele Montinaro. See **ADR-0034**.
|
|
64
|
+
- **GSAP** — `npm install gsap @gsap/react` when using **TextSequence**. WMDS lists both as dependencies and does not bundle the runtime. Only **TextSequence** imports them. Every other component stays on `motion`. See **ADR-0037**.
|
|
65
|
+
|
|
66
|
+
## Install
|
|
67
|
+
|
|
68
|
+
### From npm (default)
|
|
69
|
+
|
|
70
|
+
```bash
|
|
71
|
+
npm install @thewhatmatters/wmds@^0.2.0
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
Install the peers the components you use need (see **Requirements**): `react`, `react-dom`, `motion`, `lucide-react`, and `@visx/visx` for **Chart**.
|
|
75
|
+
|
|
76
|
+
**Upgrade** with one command, then read **`CHANGELOG.md` → Consumer actions** for every version you crossed:
|
|
77
|
+
|
|
78
|
+
```bash
|
|
79
|
+
npm install @thewhatmatters/wmds@latest
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
Versions follow semver. While the major version is `0`, a minor bump (`0.3.0`) can break the app, so `^0.2.0` accepts patches only and a minor upgrade is always a deliberate `npm install @thewhatmatters/wmds@^0.3.0`. The changelog ships in the package: `node_modules/@thewhatmatters/wmds/CHANGELOG.md`.
|
|
83
|
+
|
|
84
|
+
### Moving from a git pin
|
|
85
|
+
|
|
86
|
+
The npm package is **`@thewhatmatters/wmds`**. Git installs were named `@whatmatters/wmds`; that npm scope belongs to another account. Apps that pinned a commit (`"@whatmatters/wmds": "github:thewhatmatters/wmds#<sha>"`) switch with:
|
|
87
|
+
|
|
88
|
+
```bash
|
|
89
|
+
npm uninstall @whatmatters/wmds
|
|
90
|
+
git grep -l '@whatmatters/wmds' | xargs perl -pi -e 's#\@whatmatters/wmds#\@thewhatmatters/wmds#g'
|
|
91
|
+
npm install @thewhatmatters/wmds@^0.2.0
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
The second line renames every import, CSS `@import`, and config reference in tracked files.
|
|
95
|
+
|
|
96
|
+
Then follow **0.2.0 → Consumer actions** in `CHANGELOG.md` and commit `package.json` and `package-lock.json` together.
|
|
97
|
+
|
|
98
|
+
Git installs keep working while apps move — the `prepare` script builds `dist` on install. To change a git pin, run `npm install github:thewhatmatters/wmds#<sha>`. Do not edit the hash in `package.json` by hand: the lockfile keeps the old commit's integrity and `npm install` skips the update.
|
|
99
|
+
|
|
100
|
+
### Local checkout (same-day iteration)
|
|
101
|
+
|
|
102
|
+
To try an unreleased WMDS change in an app before it is published, install a tarball built from the checkout. It is exactly what npm would publish, and the app keeps its own single copy of React:
|
|
103
|
+
|
|
104
|
+
```bash
|
|
105
|
+
# in the WMDS checkout, after each change
|
|
106
|
+
npm install # first time only
|
|
107
|
+
npm pack # builds dist, writes thewhatmatters-wmds-<version>.tgz
|
|
108
|
+
|
|
109
|
+
# in the app
|
|
110
|
+
npm install ../wmds/thewhatmatters-wmds-0.2.0.tgz
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
Repeat both steps after each WMDS change. When done, return to the published version so the `file:` entry is not committed:
|
|
114
|
+
|
|
115
|
+
```bash
|
|
116
|
+
npm install @thewhatmatters/wmds@^0.2.0
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
**Faster loop (symlink).** `npm install ../wmds` links the checkout instead, and the app sees each `npm run build` without reinstalling. The linked package resolves `react` from the checkout's own `node_modules`, which gives the app two copies of React (invalid hook call). Only use it when the bundler dedupes React — Vite: `resolve: { dedupe: ["react", "react-dom"] }`. In Next.js prefer the tarball; if you do link, the checkout must sit inside `turbopack.root`.
|
|
120
|
+
|
|
121
|
+
## Agent skills and docs
|
|
122
|
+
|
|
123
|
+
The package ships docs for coding agents in `node_modules/@thewhatmatters/wmds/docs/` (start at `docs/README.md`). Paste the block from `docs/consumer-agents.md` into the app's `AGENTS.md` or `CLAUDE.md`.
|
|
124
|
+
|
|
125
|
+
Three agent skills live in this repository under `skills/`. Install them with the [`skills` CLI](https://github.com/vercel-labs/skills), pinned to the release tag that matches the installed package:
|
|
126
|
+
|
|
127
|
+
```bash
|
|
128
|
+
npx skills add 'thewhatmatters/wmds#v0.2.0' -s use-wmds -s upgrade-wmds -s report-wmds-gap -a claude-code -y
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
| Skill | When the agent uses it |
|
|
132
|
+
|-------|------------------------|
|
|
133
|
+
| `use-wmds` | Before writing or changing UI: find the component or pattern, props not utilities, `className` for layout only, tokens only, copy Show code verbatim with its version header |
|
|
134
|
+
| `upgrade-wmds` | When bumping `@thewhatmatters/wmds`: install, apply every Consumer actions step, re-sync pasted patterns, refresh the skills, run checks |
|
|
135
|
+
| `report-wmds-gap` | When WMDS is missing something: what to file, where, and how to open a WMDS pull request that follows `AGENTS.md` |
|
|
136
|
+
|
|
137
|
+
The command copies the skills into `.claude/skills/` and records them in `skills-lock.json`; commit both. Add more `-a` agents (for example `-a codex`) to install for them too. The **upgrade-wmds** skill re-runs the command with the new tag.
|
|
138
|
+
|
|
139
|
+
## Consumer check
|
|
140
|
+
|
|
141
|
+
The package ships `wmds-check`, an audit to run in the app's CI:
|
|
142
|
+
|
|
143
|
+
```bash
|
|
144
|
+
npx wmds-check # scans src, app, components, pages
|
|
145
|
+
npx wmds-check app components --max-warnings 0
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
| Rule | Level | Flags |
|
|
149
|
+
|------|-------|-------|
|
|
150
|
+
| `raw-control` | error | `<button>`, `<input>`, `<select>`, `<textarea>` where a WMDS component exists |
|
|
151
|
+
| `important-override` | error | `!` utilities in `className` on a component imported from `@thewhatmatters/wmds` |
|
|
152
|
+
| `raw-color` | error | hex, `rgb()`, `hsl()`, `oklch()` values in `className` or `style` |
|
|
153
|
+
| `raw-type` | warning | `text-sm`-style sizes or `text-[…]` — use `type-*` utilities |
|
|
154
|
+
| `raw-motion` | warning | `duration-[…]`, `ease-[…]`, `delay-[…]`, numeric Motion durations |
|
|
155
|
+
| `pattern-drift` | warning | a pasted pattern differs from `docs/patterns/<id>.tsx` in the installed version |
|
|
156
|
+
| `pattern-stale` | warning | a pasted pattern's header names an older version |
|
|
157
|
+
| `pattern-removed` | error | a pasted pattern's id no longer ships |
|
|
158
|
+
|
|
159
|
+
It is a line-based heuristic, not a parser. Silence a deliberate exception on the line or the line above with `// wmds-check-ignore <rule> <reason>`, and report the gap to WMDS. `--json` prints machine-readable output.
|
|
160
|
+
|
|
161
|
+
## Wire up styles
|
|
162
|
+
|
|
163
|
+
```tsx
|
|
164
|
+
import "@thewhatmatters/wmds/styles.css";
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
Or theme only (if you configure Tailwind yourself):
|
|
168
|
+
|
|
169
|
+
```css
|
|
170
|
+
@import "@thewhatmatters/wmds/theme.css";
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
That entry brings the tokens, the fonts, the collapse utilities, and an `@source` for the package's built modules, so the app's Tailwind generates the utilities the components use.
|
|
174
|
+
|
|
175
|
+
**Fonts ship in the package.** Geist Sans and Geist Mono are in `dist/files`, and both style entries reference them. Do not install `@fontsource-variable/*` or copy font files into `node_modules`.
|
|
176
|
+
|
|
177
|
+
**Imports are per module.** The package builds one module per source file, so an app loads GSAP only when it imports **TextSequence** and Rive only when it imports **RiveHand**.
|
|
178
|
+
|
|
179
|
+
## Dark mode
|
|
180
|
+
|
|
181
|
+
```tsx
|
|
182
|
+
<html data-theme={dark ? "dark" : undefined}>
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
Toggle on any ancestor — same token names, values from `colors.css`.
|
|
186
|
+
|
|
187
|
+
## Grid spine (page layout)
|
|
188
|
+
|
|
189
|
+
WMDS ships a Müller-Brockmann **app** grid (`--profile=app`): column-line + 8px baseline, relaxed rows. Tokens live in **`src/theme/grid.css`** and are included in `@thewhatmatters/wmds/styles.css` (and `theme.css` → `grid.css`).
|
|
190
|
+
|
|
191
|
+
**`--spacing` stays 4px.** Even multiples = 8px baseline. Do not re-scale spacing in the app.
|
|
192
|
+
|
|
193
|
+
### Tokens (already on `:root` after the style import)
|
|
194
|
+
|
|
195
|
+
| Token | Meaning |
|
|
196
|
+
|-------|---------|
|
|
197
|
+
| `--grid-cols` | 4 / 8 (`md`) / 12 (`lg`) |
|
|
198
|
+
| `--grid-gutter` / `--grid-margin` | 16px mobile, 24px from `md` |
|
|
199
|
+
| `--grid-column-gap` | Uniform inter-column gap override; defaults to `--grid-gutter` |
|
|
200
|
+
| `--grid-baseline` | 8px (`calc(var(--spacing) * 2)`) |
|
|
201
|
+
| `--leading-base` | 24px — also `leading-base` |
|
|
202
|
+
| `--grid-max` | 80rem |
|
|
203
|
+
|
|
204
|
+
Override on a wrap if a screen needs a different max width (`style={{ "--grid-max": "100%" }}`) or column gap (`style={{ "--grid-column-gap": "16px" }}`). Responsive Tailwind arbitrary properties are also valid page layout: `[--grid-column-gap:12px] md:[--grid-column-gap:20px]`. Do not fork a second `--grid-*` set in Pitchkit.
|
|
205
|
+
|
|
206
|
+
### Band classes
|
|
207
|
+
|
|
208
|
+
```tsx
|
|
209
|
+
import { GridOverlay } from "@thewhatmatters/wmds";
|
|
210
|
+
|
|
211
|
+
<div className="grid-page">
|
|
212
|
+
<GridOverlay />
|
|
213
|
+
<div className="band">
|
|
214
|
+
<section className="col-span-full lg:col-span-6">…</section>
|
|
215
|
+
<aside className="col-span-full lg:col-span-6">…</aside>
|
|
216
|
+
</div>
|
|
217
|
+
</div>
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
- **`grid-page`** — wrap + column tracks. Mount **GridOverlay** as a child of this box so it inherits that page's `--grid-max`, margin, and gutter. Column guides and margin lines then cover the rest of the document, including sections that sit before the page, on those same tracks. An empty page (no bands, only the overlay) still paints those guides over the hero. Baseline stays in the page box. No extra class on the preceding section.
|
|
221
|
+
- **`band`** — subgrid of those tracks (`@supports` fallback repeats `--grid-cols`).
|
|
222
|
+
- Place by **column line** (`col-span-*` / `col-start-*`). This is layout, not a new atom.
|
|
223
|
+
|
|
224
|
+
CSS-only (no React overlay): add `class="grid-on"` on `<html>` and an empty `<div class="grid-guides"><div class="grid-guides-cols"></div><div class="grid-guides-baseline"></div>…</div>` inside `grid-page`. That paints inside the page box. Prefer `GridOverlay` when React is present — it is what spreads the column guides over preceding sections.
|
|
225
|
+
|
|
226
|
+
### Overlay (`g`)
|
|
227
|
+
|
|
228
|
+
`GridOverlay` composes the **`tailwindcss-react-grid-overlay` contract** (press **g**, React, columns) but stays a child of `grid-page` so the tracks cannot drift from that page. A viewport-sized overlay ignores `--grid-max` and is the misaligned one. WMDS does not depend on the npm package.
|
|
229
|
+
|
|
230
|
+
- Press **g** (ignored in inputs). Optional `visible` / `visibleByDefault` / `onVisibleChange`.
|
|
231
|
+
- Mount in Storybook and local demos. Do **not** lock Pitchkit chrome to the overlay.
|
|
232
|
+
- Storybook: **Foundations → Grid**.
|
|
233
|
+
|
|
234
|
+
Pattern-first: apps **copy this wrap** from WMDS. No Pitchkit `Grid` / `Page` molecule.
|
|
235
|
+
|
|
236
|
+
## Components
|
|
237
|
+
|
|
238
|
+
Import from the package — configure via **props**, not utility strings:
|
|
239
|
+
|
|
240
|
+
```tsx
|
|
241
|
+
import {
|
|
242
|
+
Button,
|
|
243
|
+
IconButton,
|
|
244
|
+
Badge,
|
|
245
|
+
Card,
|
|
246
|
+
Chip,
|
|
247
|
+
ChipFilterGroup,
|
|
248
|
+
Input,
|
|
249
|
+
Search,
|
|
250
|
+
Status,
|
|
251
|
+
Accordion,
|
|
252
|
+
TaskRows,
|
|
253
|
+
buttonRoles,
|
|
254
|
+
getNextButtonStatus,
|
|
255
|
+
type ButtonRole,
|
|
256
|
+
type ButtonStatus,
|
|
257
|
+
} from "@thewhatmatters/wmds";
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
| Component | Key props | Storybook |
|
|
261
|
+
|-----------|-----------|-----------|
|
|
262
|
+
| `Button` | `role` (`primary` \| `secondary` \| `ghost` \| `destructive` \| `inverse` \| `outline`), `layout` (`pill` \| `row` \| `nav`), `size`, `status`, `icon`, `endIcon`, `mono`, `count` | Components/Button/Button — copy a **Pattern** story (`row` for flat detail lines; **Pattern — secondary action** for the gallery intro — `role="secondary"`, label Start a project, no className) |
|
|
263
|
+
| `IconButton` | `icon`, `aria-label`, `role`, `size`, `fab`, `loading`, `title` | Components/Button/IconButton — copy a **Pattern** story |
|
|
264
|
+
| `Chip` | `size`, `value`, `selected`, `onRemove`, `icon`, `count`, `readOnly` | Components/Chip — use `ChipFilterGroup` for multi-select filters |
|
|
265
|
+
| `Input` | `label`, `description`, `status`, `message`, `loading`, `endBadge`, `icon`, `size` | Components/Input — pill shell; Required via `endBadge={<Badge>…</Badge>}` |
|
|
266
|
+
| `Search` | `size`, `placeholder`, `onSubmit` | Components/Search — inline input + button row |
|
|
267
|
+
| `PromptBar` | `value`, `onValueChange`, `onSend`, `placeholder` (default Ask anything…) | Components/PromptBar — **Pattern — prompt bar**. Wide pill, inline field (one line empty, up to 3 lines, then scroll), inset **IconButton** send. Muted until there is text, then `--color-brand` (`#011272`). Enter sends. Page pattern: **Sites/WhatMatters/Prompt chat → Pattern — landing to chat** (motion into a thread that keeps growing on a narrowed page grid, `--grid-max: 40rem`: the page shell is `h-[100svh]` and the thread scrolls inside that column when it is taller than the viewport, and reserves the composer's measured height plus the space under the pill, including while a reply is still growing, so the reply and its follow-ups finish above the composer, follow-ups and **PromptBar** share that column and the bar stays pinned; a follow-up appends in the same thread; a collapsed Thought-for timer (expandable while thinking) as a fleeting supporting muted status that leaves when the reply starts, then a word stream with one **TextLink** and hover-revealed **IconButton** actions; chat reuses **SiteNav**; the brand mark returns home). Voice and attachments are not part of this version. |
|
|
268
|
+
| `Card` | `variant`, `shape`, `padding` | Components/Card/Card — `Card.Header` (`start` | `end`), **`Card.Body` slot** (no default fill), `Card.Footer` |
|
|
269
|
+
| `Accordion` | `variant`, `Accordion.Item` `leading` / `label` / `trailing` / `open` | Components/Accordion — FAQ, settings sections |
|
|
270
|
+
| `TaskRows` | `variant`, `status`, `meta`, `detailsLayout`, `TaskRows.Detail` | Components/TaskRows — **Pattern — status rows**, **capsules**, **action details** (`Detail variant="button"`), **tag chips** (`Chip readOnly size="sm"`), detail lines (`Detail` + `onPress` → `Button layout="row"`) |
|
|
271
|
+
| `Badge` | `variant`, `size`, `emphasis`, `count`, `icon`, `avatar`, `iconOnly` | Components/Badge — copy a **Pattern** story. `avatar={{ src, alt }}` is a leading round **Avatar** sized to the badge (`badgeAvatarSize`: sm → 20px, md → 24px) and is mutually exclusive with `icon`. Pass `alt=""` when the label already speaks the word. |
|
|
272
|
+
| `Status` | `variant`, `tone`, `label`, `besideLabel`, `pulsing`, `active`, `step` | Components/Status — `variant="ring"` or `variant="dot"` |
|
|
273
|
+
| `FooterReveal` | `FooterReveal.Content`, `FooterReveal.Footer`, `FooterReveal.Brand` (`headline`, `ctaLabel`, `onCtaClick`, optional `ctaHref`, `wordmark`, `socialLinks`), `footerRevealFieldClasses` | Components/FooterReveal — **Pattern — marketing page** and **Pattern — marketing hero**. Cover sits on the page background; the brand field sticks underneath and sharpens from 12px of blur. Field is `bg-brand` / `text-on-brand` (`#011272`). The wordmark is `--color-brand-soft`, spans the footer width, and is cropped at the bottom edge. CTA is **Button** `role="inverse"` `type="button"` (`onCtaClick` opens the project modal). Pass `ctaHref` only to render a link. Reduced motion stays sharp, including the server render (the SSR snapshot is sharp, so a Next page does not hydrate a leftover blur). The root does not clip, so **GridOverlay** guides still cover the hero. The marketing hero's guide `grid-page` uses `!py-0` so the expanded gallery tile meets the footer with no page-background strip. |
|
|
274
|
+
| `HeroIntro` | `lead`, `children`, `step` (`large` default \| `display`), `className` (layout only) | Components/HeroIntro — **Pattern — two-line intro**. Also composed by **Components/HeroTileStack → Pattern — marketing hero**. `lead` is the first sentence. Children always start on the next line. Both steps are `type-display-2` at normal weight (`!font-normal`) and `text-balance`, the same font-size as **ScrollHorizontal.Intro**. Keep “Austin, Texas” together with a non-breaking space. `lead` wraps, including from `md`. `large` (default) is columns 4–9 from `lg`. `display` is full width of the page grid — **Pattern — marketing hero text sequence** and **FooterReveal → Pattern — marketing hero with sequenced gallery**. The shell is `grid-page` with the page block pad removed. Do not insert a line break in the copy. |
|
|
275
|
+
| `TextSequence` | `children`, `stagger`, `delay`, `trigger` (`mount` \| `inView`), `idle` (default off), `lines` (default on), `emphasis` (`alternate` \| `none`), `TextSequence.Shape` `variant` + `tone` (`brand` \| `brand-soft` \| `accent` \| `info-muted`), `className` (layout only) | Components/TextSequence — **Default**, **Shapes**, **Reduced motion**. **HeroTileStack → Pattern — marketing hero text sequence** sequences the intro only. **ScrollHorizontal.Intro** runs the gallery statement through **TextSequence** inside the `h2` (`emphasis="none"`, `trigger="inView"`). **FooterReveal → Pattern — marketing hero with sequenced gallery** shows both. Words slide up behind a mask; shapes pop between neighbors. Marks are about 1.15em tall (pills about 2.2em wide) with a 14px floor, centered on the line so the leading does not jump. Softer tones use a two-stop gradient between those tokens. `idle` spins asterisks and stretches pills. `prefers-reduced-motion` stays at rest (same as the server render). Shapes are `aria-hidden`. The plain sentence is the accessible name once split. Parent owns the type step. `npm install gsap @gsap/react`. See **ADR-0037**. |
|
|
276
|
+
| `HeroTileStack` | `tiles`, `tileSize`, `strength`, `velocityFactor`, `maxVertical`, `spring` | Components/HeroTileStack — **Pattern — marketing hero**. Square tiles, `--hero-tile-size`, max `tileSize` (400px), tighter pile below `md`. Scatter distances scale with the painted tile. Place **SiteNav** above the hero; the hero section is `min-h-[calc(100svh-var(--site-nav-height))]`, `shrink-0`, and `justify-center-safe`. It centers when the copy fits. When the copy is taller, the section grows and the content starts below the nav with the section's top padding. **HeroIntro** is the `h1` (`lead` + children) on centered `type-display-2` at normal weight and display-2 leading, the same size and line-height as the gallery statement. The first sentence wraps, including from `md`; the rest always starts on the next line. The sequenced hero h1 is only “An Austin, TX studio specializing in brand and product design.” (“Austin,” and “TX” stay together). A rock **RiveHand** sits `inline` immediately after “TX”, inside that nowrap phrase (drawn hand about 1.15em, centered, `aria-hidden`). That heading has no second sentence and no circle or pill. The gallery statement places the point hand after “is a first impression”. It sits on `grid-page` (same `--grid-max`, margin, gap, and column count as the guides): columns 4–9 from `lg` (`lg:col-start-4 lg:col-end-10`, 6 of 12 columns, centered), full width of that page grid below `lg`. The tile fan is the last element. Pointer over the fan springs tiles left and right away from it; a quick move adds a small vertical nudge that settles when the pointer slows; leave springs them back. Default `strength` (`120`) stays near the stack — raise it for a wider scatter. `velocityFactor` (`0.02`) and `maxVertical` (`24`) tune that nudge. Reduced motion stays on the resting fan. Coarse pointers get one gentle tap scatter, then a spring back. |
|
|
277
|
+
| `ScrollHorizontal` | `items` (`id`, `label`, optional `color`), `heading` (`sr-only` while pinned, visible when motion is reduced; omitted when `intro` is set), `intro` (`ScrollHorizontal.Intro`: `eyebrow`, `statement`, optional `action` — `{ label, onClick }` for a modal button or `{ label, href }` for Button `render={<a href />}`), `expandLast` (default false), `expanded`, `className` (layout only, root) | Components/ScrollHorizontal — **Pattern — project gallery**. Also under the hero in **HeroTileStack** and **FooterReveal** **Pattern — marketing hero** (`expandLast`). Each card is a solid token-color placeholder; `label` is the accessible name (`sr-only`). `heading` names the section and stays `sr-only` on the pinned window. `intro` (**Pattern — gallery intro**, and the marketing-hero-with-gallery-intro stories) is the first panel: **Badge** label pill (neutral, the category pill), `type-display-2` statement through **TextSequence** (normal weight, once when the panel scrolls into view), **Button** `role="secondary"` labeled Start a project (no className, no icon). Pass `action={{ label: "Start a project", onClick }}` to open the project modal, or `href` when the action navigates. **FooterReveal → Pattern — marketing hero ruled grid** is the full page: sequenced hero, this intro, `expandLast`, and **FooterReveal.Ruled**. The statement is “Every screen is a first impression and we make yours the one they remember.” with an asterisk after screen, a point **RiveHand** after impression, and a diamond after yours. The eyebrow names the section. The `h2` keeps the plain sentence. At rest the panel's left edge is the page-grid content start; scroll carries it off with the tiles. Tiles follow to the right. Reduced motion stacks the intro above the row. `expandLast` still parks the last card on center before the grow. `300svh` track (`shrink-0` so a flex parent keeps that height), sticky `h-svh` window, translate from the first card centered to the last. `expandLast` uses a `400svh` track: same horizontal distance, then the last tile grows (`clip-path`) to fill the window edge to edge with radius 0 and scrolls away. `expanded` is the slot on that tile. 400×500 / `gap-8` from `sm`; 280×350 / `gap-4` below `sm`; `rounded-xl`. Reduced motion is a native horizontal scroller (`py-12`), including `MotionConfig` `reducedMotion="always"`; with `expandLast` the last tile follows as a static `h-svh` section. The section ends on that tile. **FooterReveal → Pattern — marketing hero** sets `!py-0` on the guide `grid-page` so the tile meets the footer with no page-background strip. |
|
|
278
|
+
| `RiveHand` | `hand` (`point` \| `rock`), `size`, `active`, `idle` (default true), `entrance` (`slide-up` \| `grow` \| `none`, default `none`), `className`, `aria-hidden` | Components/HeroTileStack — **Pattern — marketing hero**. `point` is artboard `31_Cigarette` (cigarette removed). `rock` is `29_Rock`. `handFill` is `--color-surface` (fallback `--color-background-surface`; white in light mode). `outline` is `--color-brand` (`#011272` in both themes; hardcoded fallback `#011272`). `inline` sizes the canvas past the artboard padding so the drawn hand is about 1.15em, the drawn hand is centered on the line, and the line box does not grow. Inside a TextSequence the slot pops on the beat halfway between the words beside it, with the same scale, rotation, and `back.out(1.8)` ease as the circle and pill. Idle starts after that pop. The sequenced hero places the rock hand immediately after “TX”, inside the same nowrap phrase. The gallery statement places the point hand after “is a first impression”. `entrance="none"`. `idle` holds `Boolean 1` for 1.1s, then waits a random 1–2s before the next pulse, per hand, while the tab is visible and the sized hand box is in view. Reduced motion draws one static frame once that box has size, then pauses. The sequence pop and idle timers stay off. SSR and hydration render that resting pose; the entrance starts after mount only when motion is allowed. `npm install @rive-app/react-canvas`. Serve `public/rive/interactive-icon-set.riv` at `/rive/interactive-icon-set.riv` and `rive.wasm` at `/rive/rive.wasm`. The pattern file starts with `"use client"`. CC BY 4.0, Silvia Sguotti and Gabriele Montinaro. |
|
|
279
|
+
| `ConfettiProvider` | `useConfettiOnMount()`, `useConfetti().fire()`, `origin`, `confettiDefaultColors` | Components/Confetti — playground. **Sites/WhatMatters/RFP submitted → Pattern — RFP submitted**. Fire on the confirmation surface after the async action resolves, not on the submit click. `fire()` does nothing under reduced motion. |
|
|
280
|
+
|
|
281
|
+
Copy flow patterns from **Sites/** in Storybook when they ship. See **`src/package.manifest.ts`** for the export contract.
|
|
282
|
+
|
|
283
|
+
### Cluster scale in detail rails
|
|
284
|
+
|
|
285
|
+
Inside expanded **TaskRows** (and other dense rows), use the **sm / xs** cluster tier so controls sit below row titles — not beside them at default sizes:
|
|
286
|
+
|
|
287
|
+
| Detail content | Compose |
|
|
288
|
+
|----------------|---------|
|
|
289
|
+
| External app / map actions | `TaskRows.Detail variant="button"` → **Button** `size="xs"` |
|
|
290
|
+
| Tags / attributes | `Chip readOnly size="sm"` in `detailsLayout="chips"` |
|
|
291
|
+
| Label / meta line with tap action | `TaskRows.Detail` + `onPress` → **Button** `layout="row"` `role="ghost"` |
|
|
292
|
+
|
|
293
|
+
Card headers and filter rails use **sm / md / lg** cluster pairing — see **Foundations → Cluster** and **ADR-0011**.
|
|
294
|
+
|
|
295
|
+
## Icons
|
|
296
|
+
|
|
297
|
+
**Lucide only** until further notice. Pass icons into component props — do not embed icon styling utilities in app code.
|
|
298
|
+
|
|
299
|
+
```tsx
|
|
300
|
+
import { Plus } from "lucide-react";
|
|
301
|
+
|
|
302
|
+
<Button icon={<Plus strokeWidth={2} />}>New item</Button>
|
|
303
|
+
```
|
|
304
|
+
|
|
305
|
+
Browse [lucide.dev/icons](https://lucide.dev/icons/).
|
|
306
|
+
|
|
307
|
+
## Customization
|
|
308
|
+
|
|
309
|
+
### Brand override (`--color-primary`)
|
|
310
|
+
|
|
311
|
+
The **only** per-app color hook is the primary brand color. The WhatMatters default palette stays in **`src/theme/colors.css`**; an app overrides it by redefining the allowlisted tokens on `:root` (light) and `[data-theme="dark"]` (dark) in a stylesheet imported **after** `@thewhatmatters/wmds/styles.css`.
|
|
312
|
+
|
|
313
|
+
**Allowlist**
|
|
314
|
+
|
|
315
|
+
| Token | Required | Notes |
|
|
316
|
+
|-------|----------|-------|
|
|
317
|
+
| `--color-primary` | Yes | One light value on `:root`, one dark value on `[data-theme="dark"]`. |
|
|
318
|
+
| `--color-on-primary` | No | Ink on primary fills. Default `#fafafa` / `#fafaf8`; set it when your brand primary is light enough to fail contrast against near-white. |
|
|
319
|
+
|
|
320
|
+
Everything else is derived, so you set two values and every primary control follows:
|
|
321
|
+
|
|
322
|
+
- `--color-primary-hover` / `--color-primary-active` — `color-mix` of `--color-primary` (light darkens toward black; dark lifts toward white on hover).
|
|
323
|
+
- `--color-focus-ring` — `--color-primary` at 45% alpha (light); lifted toward white then 40% alpha (dark) so the ring stays visible on dark surfaces.
|
|
324
|
+
|
|
325
|
+
**Snippet — `brand.css`, imported after `styles.css`**
|
|
326
|
+
|
|
327
|
+
```tsx
|
|
328
|
+
// app entry
|
|
329
|
+
import "@thewhatmatters/wmds/styles.css";
|
|
330
|
+
import "./brand.css"; // must come after styles.css
|
|
331
|
+
```
|
|
332
|
+
|
|
333
|
+
```css
|
|
334
|
+
/* brand.css — keep unlayered so it wins the cascade against WMDS defaults */
|
|
335
|
+
:root {
|
|
336
|
+
--color-primary: #7a2e8e;
|
|
337
|
+
/* --color-on-primary: #ffffff; optional */
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
[data-theme="dark"] {
|
|
341
|
+
--color-primary: #c48ad4;
|
|
342
|
+
/* --color-on-primary: #171717; optional */
|
|
343
|
+
}
|
|
344
|
+
```
|
|
345
|
+
|
|
346
|
+
Rules:
|
|
347
|
+
|
|
348
|
+
- Import order matters — the override must load after `styles.css` (or after `@import "@thewhatmatters/wmds/theme.css"` if you configure Tailwind yourself). Do not wrap it in a `@layer`; WMDS defaults are unlayered author styles and a layered override would lose.
|
|
349
|
+
- Set both the light and the dark value. Leaving `[data-theme="dark"]` unset falls back to the WhatMatters dark primary, not to your light value.
|
|
350
|
+
- Check contrast for `--color-on-primary` on your primary and for `--color-primary` on `--color-body` in both themes.
|
|
351
|
+
|
|
352
|
+
**Not overridable per app:** brand navy (`--color-brand` `#011272`, `--color-on-brand`, `--color-brand-outline`, `--color-brand-soft`, `--color-on-brand-hover`), accent (`--color-accent*`, `--color-on-accent`), status (`--color-error*`, `--color-success*`, `--color-warning*`, `--color-info*`), chart series, typography (`--font-*`, `--line-height-*`, `type-*`), and grid (`--grid-*`, `--spacing`). Those roles are the shared WMDS contract — change them in `src/theme/`, rebuild, and bump the package. Do **not** fork component visuals with per-app utility overrides — extend WMDS via new variants/patterns in the design system repo.
|
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 WhatMatters LLC
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
# WMDS — WhatMatters Design System
|
|
2
|
+
|
|
3
|
+
Tailwind v4 theme + **pattern-first** Storybook catalog. **Storybook is canonical** — prescribed components and Sites patterns, not utility-class soup.
|
|
4
|
+
|
|
5
|
+
## Stack
|
|
6
|
+
|
|
7
|
+
| Piece | Role |
|
|
8
|
+
|-------|------|
|
|
9
|
+
| **`src/theme/colors.css`** | Astryx-aligned semantic roles (light `:root` + `[data-theme="dark"]`) — see **ADR-0007** |
|
|
10
|
+
| **`src/theme/theme.css`** | Tailwind `@theme` bridge — import once in apps |
|
|
11
|
+
| **`src/theme/fonts.css`** | Geist Sans + Geist Mono |
|
|
12
|
+
| **`src/theme/stateColors.css`** | Hover/active states (`color-mix` from base roles) |
|
|
13
|
+
| **`src/theme/typography.css`** | Astryx geometric scale + `type-*` semantic utilities — see **ADR-0009** |
|
|
14
|
+
| **`src/theme/grid.css`** | App-profile `--grid-*` + `grid-page` / `band` — see **ADR-0010**, **DESIGN.md → Grid** |
|
|
15
|
+
| **`src/theme/motion.css`** | Astryx-aligned duration/easing tiers — see **ADR-0008** |
|
|
16
|
+
| **`src/lib/motion.ts`** | Motion adapter — CSS vars → Tailwind + Motion |
|
|
17
|
+
| **Storybook** | Token catalog + component specs (start at **Introduction**) |
|
|
18
|
+
|
|
19
|
+
## Dark mode
|
|
20
|
+
|
|
21
|
+
```html
|
|
22
|
+
<html data-theme="dark">
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
Same utility names (`bg-body`, `text-fg`, …) — values swap in `colors.css`. Legacy `bg-bg` aliases `body`.
|
|
26
|
+
|
|
27
|
+
## Commands
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
npm install
|
|
31
|
+
npm run storybook # http://localhost:6006 — read Introduction first
|
|
32
|
+
npm run build # dist/ — modules, types, styles.css, theme partials, fonts — then checks the manifest
|
|
33
|
+
npm run lint # oxlint
|
|
34
|
+
npm run typecheck # tsc -b — src, stories, and tests
|
|
35
|
+
npm run test:unit
|
|
36
|
+
npm run test:interactions # every story in Chromium, accessibility included
|
|
37
|
+
npm run validate:composition # molecules/organisms must compose atoms (CI)
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
**Agents:** read **`AGENTS.md`** and **`.cursor/rules/`** before authoring components — Storybook patterns are the contract; `npm run validate:composition` enforces atomic composition. **AGENTS.md → Guardrails** lists the rules CI enforces, and **`docs/audits/`** records why.
|
|
41
|
+
|
|
42
|
+
## Status
|
|
43
|
+
|
|
44
|
+
**Shipped (exported from `@thewhatmatters/wmds`):**
|
|
45
|
+
|
|
46
|
+
| Tier | Components |
|
|
47
|
+
|------|------------|
|
|
48
|
+
| Atoms | `Avatar`, `Badge`, `Button`, `Checkbox`, `IconButton`, `Input`, `Kbd`, `Radio`, `RiveHand`, `Skeleton`, `Status`, `Switch`, `TextArea`, `TextLink`, `Tooltip` |
|
|
49
|
+
| Molecules | `Accordion`, `CalEmbed`, `Card`, `ChatQa`, `CheckboxGroup`, `Chip`, `DisplayControls`, `Dropdown`, `Field`, `FloatingActionButton`, `HeroIntro`, `IntakeForm`, `NavList`, `PageHeader`, `PillGroup`, `PromptBar`, `RadioGroup`, `Search`, `Select`, `SelectableCard`, `SegmentedControl`, `Stat`, `StepProgress`, `TaskRows`, `TextSequence` |
|
|
50
|
+
| Organisms | `Chart`, `Confetti`, `Dialog`, `FooterReveal`, `HeroTileStack`, `IntakeConfirmation`, `IntakeModal`, `MoreMenu`, `Panel`, `ScrollHorizontal`, `Sheet`, `SiteNav`, `Tab`, `Toast` |
|
|
51
|
+
| Planned, not built | `Carousel`, `Pagination`, `Table` |
|
|
52
|
+
|
|
53
|
+
The list is `src/package.manifest.ts`. `npm run build` fails when it and `src/index.ts` disagree.
|
|
54
|
+
|
|
55
|
+
**Storybook-only:** **Sites/** (pages and flows per product — WhatMatters, PitchKit) and **Guides/** (cross-component guidance) — page-level compositions for copy-paste; not package exports.
|
|
56
|
+
|
|
57
|
+
**Motion:** CSS tokens for simple transitions; [`motion/react`](https://motion.dev/docs/react) for gestures, layout, and enter/exit. Helpers in **`src/lib/motion.ts`** (reads Theme CSS vars).
|
|
58
|
+
|
|
59
|
+
**Architecture:** Theme → lib → Atoms → Molecules → Organisms → Sites / Guides. **Pattern-first** for consumers ([ADR-0004](docs/adr/0004-pattern-first-not-utility-first.md)). **Mobile-first** on all tiers ([ADR-0003](docs/adr/0003-responsive-mobile-first.md)). See ADR-0001, ADR-0002.
|
|
60
|
+
|
|
61
|
+
## Paper
|
|
62
|
+
|
|
63
|
+
Paper may stay installed for mockups — it does **not** own tokens. Design follows Storybook.
|
|
64
|
+
|
|
65
|
+
See **`CONSUMING.md`** for using WMDS in other apps.
|