@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
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WMDS typography sheet — Astryx-aligned geometric scale + semantic type tokens.
|
|
3
|
+
* Reference: https://astryx.atmeta.com/docs/typography
|
|
4
|
+
*
|
|
5
|
+
* Layer 1: --font-size-* geometric ramp (14px base × 1.2 ratio).
|
|
6
|
+
* Layer 2: --text-*-{size,weight,leading} semantic triplets.
|
|
7
|
+
* Layer 3: @utility type-* composites for components (via typographyClass).
|
|
8
|
+
*/
|
|
9
|
+
:root {
|
|
10
|
+
/* Scale parameters */
|
|
11
|
+
--type-scale-base: 0.875rem;
|
|
12
|
+
--type-scale-ratio: 1.2;
|
|
13
|
+
|
|
14
|
+
/* Geometric size ramp */
|
|
15
|
+
--font-size-4xs: 0.375rem;
|
|
16
|
+
--font-size-3xs: 0.4375rem;
|
|
17
|
+
--font-size-2xs: 0.5rem;
|
|
18
|
+
--font-size-xs: 0.625rem;
|
|
19
|
+
--font-size-sm: 0.75rem;
|
|
20
|
+
--font-size-base: 0.875rem;
|
|
21
|
+
--font-size-lg: 1.0625rem;
|
|
22
|
+
--font-size-xl: 1.25rem;
|
|
23
|
+
--font-size-2xl: 1.5rem;
|
|
24
|
+
--font-size-3xl: 1.8125rem;
|
|
25
|
+
--font-size-4xl: 2.1875rem;
|
|
26
|
+
--font-size-5xl: 2.625rem;
|
|
27
|
+
--font-size-6xl: 3.15rem;
|
|
28
|
+
|
|
29
|
+
/* Semantic weights */
|
|
30
|
+
--font-weight-normal: 400;
|
|
31
|
+
--font-weight-medium: 500;
|
|
32
|
+
--font-weight-semibold: 600;
|
|
33
|
+
--font-weight-bold: 700;
|
|
34
|
+
|
|
35
|
+
/* Headings */
|
|
36
|
+
--text-heading-1-size: var(--font-size-2xl);
|
|
37
|
+
--text-heading-1-weight: var(--font-weight-semibold);
|
|
38
|
+
--text-heading-1-leading: 1.3333;
|
|
39
|
+
|
|
40
|
+
--text-heading-2-size: var(--font-size-xl);
|
|
41
|
+
--text-heading-2-weight: var(--font-weight-semibold);
|
|
42
|
+
--text-heading-2-leading: 1.4;
|
|
43
|
+
|
|
44
|
+
--text-heading-3-size: var(--font-size-lg);
|
|
45
|
+
--text-heading-3-weight: var(--font-weight-semibold);
|
|
46
|
+
--text-heading-3-leading: 1.4118;
|
|
47
|
+
|
|
48
|
+
--text-heading-4-size: var(--font-size-base);
|
|
49
|
+
--text-heading-4-weight: var(--font-weight-semibold);
|
|
50
|
+
--text-heading-4-leading: 1.4286;
|
|
51
|
+
|
|
52
|
+
--text-heading-5-size: var(--font-size-sm);
|
|
53
|
+
--text-heading-5-weight: var(--font-weight-semibold);
|
|
54
|
+
--text-heading-5-leading: 1.6667;
|
|
55
|
+
|
|
56
|
+
--text-heading-6-size: var(--font-size-xs);
|
|
57
|
+
--text-heading-6-weight: var(--font-weight-semibold);
|
|
58
|
+
--text-heading-6-leading: 1.6;
|
|
59
|
+
|
|
60
|
+
/* Display — fluid size: mobile floor → desktop ceiling (review at 390 / 768 / 1280). */
|
|
61
|
+
--text-display-1-size-min: 2.5rem; /* 40px — mobile */
|
|
62
|
+
--text-display-1-size-max: 5rem; /* 80px — desktop */
|
|
63
|
+
--text-display-1-size: clamp(
|
|
64
|
+
var(--text-display-1-size-min),
|
|
65
|
+
calc(1.4rem + 4.5vw),
|
|
66
|
+
var(--text-display-1-size-max)
|
|
67
|
+
);
|
|
68
|
+
--text-display-1-weight: var(--font-weight-bold);
|
|
69
|
+
--text-display-1-leading: 1.15;
|
|
70
|
+
--text-display-1-tracking: -0.04em;
|
|
71
|
+
|
|
72
|
+
--text-display-2-size-min: 2rem;
|
|
73
|
+
--text-display-2-size-max: 3.15rem;
|
|
74
|
+
--text-display-2-size: clamp(
|
|
75
|
+
var(--text-display-2-size-min),
|
|
76
|
+
calc(1.25rem + 2.4vw),
|
|
77
|
+
var(--text-display-2-size-max)
|
|
78
|
+
);
|
|
79
|
+
--text-display-2-weight: var(--font-weight-semibold);
|
|
80
|
+
--text-display-2-leading: 1.2;
|
|
81
|
+
|
|
82
|
+
--text-display-3-size-min: 1.5rem;
|
|
83
|
+
--text-display-3-size-max: 2.1875rem;
|
|
84
|
+
--text-display-3-size: clamp(
|
|
85
|
+
var(--text-display-3-size-min),
|
|
86
|
+
calc(1.1rem + 1.4vw),
|
|
87
|
+
var(--text-display-3-size-max)
|
|
88
|
+
);
|
|
89
|
+
--text-display-3-weight: var(--font-weight-semibold);
|
|
90
|
+
--text-display-3-leading: 1.24;
|
|
91
|
+
|
|
92
|
+
/* Body & UI */
|
|
93
|
+
--text-large-size: var(--font-size-lg);
|
|
94
|
+
--text-large-weight: var(--font-weight-semibold);
|
|
95
|
+
--text-large-leading: 1.4118;
|
|
96
|
+
|
|
97
|
+
--text-body-size: var(--font-size-base);
|
|
98
|
+
--text-body-weight: var(--font-weight-normal);
|
|
99
|
+
--text-body-leading: 1.4286;
|
|
100
|
+
|
|
101
|
+
--text-label-size: var(--font-size-base);
|
|
102
|
+
--text-label-weight: var(--font-weight-medium);
|
|
103
|
+
--text-label-leading: 1.4286;
|
|
104
|
+
|
|
105
|
+
--text-supporting-size: var(--font-size-sm);
|
|
106
|
+
--text-supporting-weight: var(--font-weight-normal);
|
|
107
|
+
--text-supporting-leading: 1.6667;
|
|
108
|
+
|
|
109
|
+
--text-code-size: var(--font-size-base);
|
|
110
|
+
--text-code-weight: var(--font-weight-normal);
|
|
111
|
+
--text-code-leading: 1.4286;
|
|
112
|
+
|
|
113
|
+
/** WMDS extension — fixed-height control shells (Button, Chip, Input). Phase 4 migrates atoms here. */
|
|
114
|
+
--text-control-size: var(--font-size-base);
|
|
115
|
+
--text-control-weight: var(--font-weight-medium);
|
|
116
|
+
--text-control-leading: 1;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
/* Semantic type utilities — size + weight + leading from tokens; color via text-fg / text-muted. */
|
|
120
|
+
@utility type-display-1 {
|
|
121
|
+
font-family: var(--font-family-heading);
|
|
122
|
+
font-size: var(--text-display-1-size);
|
|
123
|
+
font-weight: var(--text-display-1-weight);
|
|
124
|
+
line-height: var(--text-display-1-leading);
|
|
125
|
+
letter-spacing: var(--text-display-1-tracking);
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
@utility type-display-2 {
|
|
129
|
+
font-family: var(--font-family-heading);
|
|
130
|
+
font-size: var(--text-display-2-size);
|
|
131
|
+
font-weight: var(--text-display-2-weight);
|
|
132
|
+
line-height: var(--text-display-2-leading);
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
@utility type-display-3 {
|
|
136
|
+
font-family: var(--font-family-heading);
|
|
137
|
+
font-size: var(--text-display-3-size);
|
|
138
|
+
font-weight: var(--text-display-3-weight);
|
|
139
|
+
line-height: var(--text-display-3-leading);
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
@utility type-heading-1 {
|
|
143
|
+
font-family: var(--font-family-heading);
|
|
144
|
+
font-size: var(--text-heading-1-size);
|
|
145
|
+
font-weight: var(--text-heading-1-weight);
|
|
146
|
+
line-height: var(--text-heading-1-leading);
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
@utility type-heading-2 {
|
|
150
|
+
font-family: var(--font-family-heading);
|
|
151
|
+
font-size: var(--text-heading-2-size);
|
|
152
|
+
font-weight: var(--text-heading-2-weight);
|
|
153
|
+
line-height: var(--text-heading-2-leading);
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
@utility type-heading-3 {
|
|
157
|
+
font-family: var(--font-family-heading);
|
|
158
|
+
font-size: var(--text-heading-3-size);
|
|
159
|
+
font-weight: var(--text-heading-3-weight);
|
|
160
|
+
line-height: var(--text-heading-3-leading);
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
@utility type-heading-4 {
|
|
164
|
+
font-family: var(--font-family-heading);
|
|
165
|
+
font-size: var(--text-heading-4-size);
|
|
166
|
+
font-weight: var(--text-heading-4-weight);
|
|
167
|
+
line-height: var(--text-heading-4-leading);
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
@utility type-heading-5 {
|
|
171
|
+
font-family: var(--font-family-heading);
|
|
172
|
+
font-size: var(--text-heading-5-size);
|
|
173
|
+
font-weight: var(--text-heading-5-weight);
|
|
174
|
+
line-height: var(--text-heading-5-leading);
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
@utility type-heading-6 {
|
|
178
|
+
font-family: var(--font-family-heading);
|
|
179
|
+
font-size: var(--text-heading-6-size);
|
|
180
|
+
font-weight: var(--text-heading-6-weight);
|
|
181
|
+
line-height: var(--text-heading-6-leading);
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
@utility type-large {
|
|
185
|
+
font-family: var(--font-family-body);
|
|
186
|
+
font-size: var(--text-large-size);
|
|
187
|
+
font-weight: var(--text-large-weight);
|
|
188
|
+
line-height: var(--text-large-leading);
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
@utility type-body {
|
|
192
|
+
font-family: var(--font-family-body);
|
|
193
|
+
font-size: var(--text-body-size);
|
|
194
|
+
font-weight: var(--text-body-weight);
|
|
195
|
+
line-height: var(--text-body-leading);
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
@utility type-label {
|
|
199
|
+
font-family: var(--font-family-body);
|
|
200
|
+
font-size: var(--text-label-size);
|
|
201
|
+
font-weight: var(--text-label-weight);
|
|
202
|
+
line-height: var(--text-label-leading);
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
@utility type-supporting {
|
|
206
|
+
font-family: var(--font-family-body);
|
|
207
|
+
font-size: var(--text-supporting-size);
|
|
208
|
+
font-weight: var(--text-supporting-weight);
|
|
209
|
+
line-height: var(--text-supporting-leading);
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
@utility type-code {
|
|
213
|
+
font-family: var(--font-family-code);
|
|
214
|
+
font-size: var(--text-code-size);
|
|
215
|
+
font-weight: var(--text-code-weight);
|
|
216
|
+
line-height: var(--text-code-leading);
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
@utility type-control {
|
|
220
|
+
font-family: var(--font-family-body);
|
|
221
|
+
font-size: var(--text-control-size);
|
|
222
|
+
font-weight: var(--text-control-weight);
|
|
223
|
+
line-height: var(--text-control-leading);
|
|
224
|
+
}
|
package/docs/README.md
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# WMDS docs for apps and agents
|
|
2
|
+
|
|
3
|
+
These files ship in the npm package at `node_modules/@thewhatmatters/wmds/docs/`. They match the installed version, so an agent in a consuming app reads them instead of guessing from memory or from a newer Storybook.
|
|
4
|
+
|
|
5
|
+
| File | What it is |
|
|
6
|
+
|------|------------|
|
|
7
|
+
| `exports.json` | Every export with its tier, category, one-line summary, Storybook page, and the ids of its patterns. Also the CSS entries, peer dependencies, planned components, and lib helpers. |
|
|
8
|
+
| `components.md` | The component and token contracts: props, patterns, composition rules, and what not to do. |
|
|
9
|
+
| `component-contracts.md` | Long-form contracts for FooterReveal, HeroTileStack, TextSequence, ScrollHorizontal, RiveHand, and PromptBar. |
|
|
10
|
+
| `patterns/index.json` | One row per pattern: id, Storybook title, pattern name, file. |
|
|
11
|
+
| `patterns/<id>.tsx` | A pattern's Show code, exactly as Storybook shows it, with a header naming the pattern and the package version. |
|
|
12
|
+
| `consumer-agents.md` | A block to paste into a consuming repo's `AGENTS.md` / `CLAUDE.md`. |
|
|
13
|
+
| `../CHANGELOG.md` | Every release, with the **Consumer actions** an app takes to move to it. |
|
|
14
|
+
| `../CONSUMING.md` | Install, styles, dark mode, grid, and per-component setup. |
|
|
15
|
+
|
|
16
|
+
## How to use them
|
|
17
|
+
|
|
18
|
+
1. **Find the component.** Search `exports.json` by name, category, or summary. Planned components are listed under `planned` — they do not exist yet.
|
|
19
|
+
2. **Read its contract** in `components.md` (and `component-contracts.md` for the six long ones).
|
|
20
|
+
3. **Use a pattern when one matches.** Look up the component's `patterns` ids, open `patterns/<id>.tsx`, and copy the file verbatim, header included. The header lets an upgrade find every pasted pattern (`grep -r "@thewhatmatters/wmds@" src`).
|
|
21
|
+
4. **Missing something?** Do not hand-roll it in the app. Report the gap to WMDS (see `consumer-agents.md`).
|
|
22
|
+
|
|
23
|
+
Storybook ids in these files (`?path=/story/<id>`, `?path=/docs/<id>--docs`) append to the WMDS Storybook URL.
|
|
24
|
+
|
|
25
|
+
## In the WMDS repository
|
|
26
|
+
|
|
27
|
+
`exports.json`, `components.md`, and `patterns/` are generated by `npm run docs:generate` from `src/package.manifest.ts`, `src/storybook/componentCatalog.ts`, `AGENTS.md`, and each story's Show code. CI runs `npm run check:docs` and fails when a committed file differs from Storybook. The rest of this folder — `adr/`, `audits/`, `releasing.md` — is for WMDS contributors and does not ship.
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# Component contracts — long form
|
|
2
|
+
|
|
3
|
+
The full contracts for the marketing and prompt components. `AGENTS.md` carries a short summary of each and points here. Read the section before changing the component, its stories, or a page that composes it. Storybook **Pattern** stories stay the copy source; this file records the details behind them.
|
|
4
|
+
|
|
5
|
+
## FooterReveal
|
|
6
|
+
|
|
7
|
+
marketing page root — **FooterReveal.Content** (cover, at least `100dvh`, page background, z-index 1) then **FooterReveal.Footer** (sticky bottom, z-index -1). Scrubs opacity, scale (origin `50% 100%`), and blur (12px → 0) across one footer-height of scroll via `useScroll` / `useTransform`. `will-change` only while that scrub is in progress. Reduced motion: fully visible, no scale or blur, including SSR (`useSyncExternalStore` server snapshot is sharp). The root does not clip, so **GridOverlay** guides still cover the hero and stop at the footer. The marketing hero's guide host is `grid-page bg-body !py-0`, so the expanded **ScrollHorizontal** tile meets the footer with no page-background strip. On the navy field, footer guides use the same tracks and sit under the headline and CTA (`z-0` under `z-[1]`). The wordmark spans the footer width and is cropped at the bottom of the brand panel. Field: **`footerRevealFieldClasses`** (`bg-brand` / `text-on-brand`, `#011272`). The wordmark uses **`--color-brand-soft`**. **FooterReveal.Brand** — headline, **Button** `role="inverse"` `type="button"` (`onCtaClick` opens the project modal; optional `ctaHref` renders an anchor only when a link is passed), `socialLinks` (label + href; `https` opens in a new tab with `rel="noopener"`), and an `aria-hidden` wordmark that spans the footer width (`100cqi` divided by the measured advance width in em) and is cropped at the bottom edge. Links on that field: **`footerRevealFieldLinkClasses`**. Scrollbar stays visible (`scrollbar-gutter: stable` in the grid). Paste **Components/FooterReveal → Pattern — marketing page** or **Pattern — marketing hero**. **FooterReveal.Ruled** is the cream marketing footer on **`footerRevealRuledFieldClasses`** (`bg-body` / `text-brand`, `#011272`). The field and the ruled shell are at least `100vh` and grow when the content is taller. The nav, wordmark, and quiet row are one block, vertically centered in the field when that block fits. Top padding still clears the pinned site nav. A centered stack — Services, Resources, About — is **TextLink**. The list sets Geist sans (the heading and body face) so the links inherit it: `--font-size-4xl` below `sm`, `4rem` from `sm` (no type token is 4rem). Those three links set `!text-brand` (`#011272`) so **TextLink**'s `text-fg` does not paint them near black. **TextLink** keeps its solid underline, medium weight, and focus ring. The WhatMatters wordmark is fitted to the footer width (`100cqi` / measured em) and stays fully visible at 390, 1440, and 2560. The quiet row is the WM mark with WhatMatters © 2026, randy@whatmatters.so, and Created by WhatMatters 2024–2026. Below `md` that row stacks and stays centered. There is no cropped wordmark, no two-column nav, and no social row. Dark theme keeps the field on `--color-on-brand`. **No content defaults:** **FooterReveal.Ruled** requires `wordmark`; `links`, `email` (+ `emailHref`), `mark`, `copyright`, and `credit` render only when passed. **FooterReveal.Brand** requires `headline`, `ctaLabel`, and `wordmark`; `socialLinks` renders only when passed. The app owns every string and address. Paste **Pattern — ruled grid footer**. **Pattern — marketing hero ruled grid** uses it under the existing hero. **FooterReveal.Brand** stays the navy field and still crops its own wordmark. See **ADR-0030**.
|
|
8
|
+
|
|
9
|
+
## HeroTileStack
|
|
10
|
+
|
|
11
|
+
marketing hero image fan — `tiles` (`src`, `alt`, optional resting `offsetX` / `offsetY` / `rotate` / `zIndex`). A fine pointer over the stack pushes each card left or right away from the pointer's x (closer = stronger) through `useSpring` on x and rotate. Default `strength` (`120`) is a gentle shift that stays near the stack; raise it for a wider scatter. Vertical offset comes from pointer velocity (`useVelocity`): `velocityFactor` (default `0.02`) and `maxVertical` (default `24`) set a small clamped y nudge that springs back to 0 when the pointer slows. Tiles are square, at most **400px** (`tileSize` / `--hero-tile-size`), and scale with the stack; below `md` they form a tighter pile. Scatter distances scale with the painted tile. The root clips the inline axis (`overflow-x-clip`); the row does not clip. Reduced motion: resting fan, no scatter. Coarse pointers: a tap scatters once from the tap point (same gentle horizontal push, no velocity nudge), holds, then springs back. The marketing hero pattern places **SiteNav** above the fan and sizes the hero with `min-h-[calc(100svh-var(--site-nav-height))]`, `shrink-0`, and `justify-center-safe` (`--site-nav-height` is the expanded band). When the copy is taller than that minimum, the section grows and the content starts below the nav with the section's top padding. Hero lines use `text-wrap: balance`. “Austin,” and “Texas” stay together on the default lead (non-breaking space). The sequenced hero keeps “Austin,” and “TX” together the same way (`whitespace-nowrap`). Paste **Components/HeroTileStack → Pattern — marketing hero**. **HeroIntro** is the page `h1` on **`type-display-2`** at normal weight and display-2 leading, the same size and line-height as the gallery statement. There is no display-1 We Are WhatMatters headline. The sequenced hero h1 is only “An Austin, TX studio specializing in brand and product design.” A rock **RiveHand** sits inline immediately after “TX”, inside the same nowrap phrase (`inline`, about 1.15em drawn, centered on the line, `aria-hidden`). That heading has no second sentence and no circle or pill. The default hero still passes “We're a design and product studio based in Austin, Texas.” as `lead` without a sequence. The point hand sits inline in the gallery statement after “is a first impression”, in place of the pill. `lead` is the first sentence (it wraps, including from `md`) and children always start on the next line, centered. **HeroIntro** 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`), full width of that page grid below `lg`. The tile fan is last in the hero. See **ADR-0032**, **ADR-0034**, **ADR-0035**.
|
|
12
|
+
|
|
13
|
+
## TextSequence
|
|
14
|
+
|
|
15
|
+
masked word reveal — children mix text and **`TextSequence.Shape`** (`variant` `asterisk` \| `pill` \| `diamond` \| `dots` \| `double-pill` \| `circle` \| `smiley`, `tone` `brand` \| `brand-soft` \| `accent` \| `info-muted`). Words slide up behind a mask; shapes pop (scale/rotate) halfway between neighbors. `stagger`, `delay`, `trigger` (`mount` \| `inView`), `idle` (default off: asterisk spin, pill stretch), `lines` (default on, so wrap re-splits), `emphasis` (`alternate` default \| `none`). Parent owns the type step. `className` is layout only. Shapes are inline SVG about 1.15em tall (pills about 2.2em wide) with a 14px floor, centered on the line without growing the leading. Fills are `brand`, `brand-soft`, `accent`, and `info-muted` (softer tones are two-stop token gradients). `aria-hidden`. `prefers-reduced-motion` skips the split and the idle loop; server and no-JS render that rest state. GSAP + SplitText + `useGSAP` are imported only here (ADR-0037); the rest of WMDS stays on `motion/react`. **HeroTileStack → Pattern — marketing hero text sequence** sequences the intro only. That copy is **HeroIntro** `step="display"` as the page `h1` (`type-display-2`, normal weight, display-2 leading, the same size and line-height as the gallery statement). A rock **RiveHand** sits inline immediately after “TX”. The sequenced hero heading is only that Austin sentence. **ScrollHorizontal.Intro** runs the gallery statement through it inside the real `h2` (`emphasis="none"`, `trigger="inView"`, once when that panel scrolls into view). The heading keeps the plain sentence. **FooterReveal → Pattern — marketing hero with sequenced gallery** shows the hero subtext sequence and that statement together. Copy **Components/TextSequence**.
|
|
16
|
+
|
|
17
|
+
## ScrollHorizontal
|
|
18
|
+
|
|
19
|
+
marketing gallery directly under the hero — `items` (`id`, `label`, optional `color`), optional `heading` (`sr-only` while the window is pinned, visible above the row when motion is reduced; omitted when `intro` is set), optional `intro` (**`ScrollHorizontal.Intro`** — **Badge** label pill (neutral, the category pill), `type-display-2` statement at normal weight through **TextSequence** (`emphasis="none"`, once when the panel scrolls into view; shapes about 1.15em: asterisk after screen, point **RiveHand** after impression, diamond after yours; plain accessible name “Every screen is a first impression and we make yours the one they remember.”), **Button** `role="secondary"` labeled Start a project (no className, no icon); first panel of the track, left edge on the page-grid content start (`--grid-margin` inside centered `--grid-max`), then translates off with the tiles; clears `--site-nav-height`; the badge names the section; reduced motion stacks it above the native row and keeps that inset), `expandLast` (default false), optional `expanded`, `className` on the root only. A `300svh` track (`shrink-0`, so a flex parent keeps that height) and a sticky `h-svh` window (one card wide, centered) translate the row from the first card centered to the last: `(items.length - 1) * (item width + gap)`, measured from the DOM. From `sm`: **400×500**, `gap-8` (32px). Below `sm`: **280×350**, `gap-4` (16px). Radius `rounded-xl` (`--radius-xl`, 12px). Each card is a solid token fill. The label is `sr-only` (the accessible name). Omitted colors cycle `--color-brand` (`#011272`), `--color-brand-soft`, `--color-primary`, `--color-info-muted`, and `--color-accent`. `prefers-reduced-motion` and `MotionConfig` `reducedMotion="always"`: no transform, height auto, not sticky, native horizontal overflow, `py-12`. SSR stays on the motion shell; the OS query is applied in `useLayoutEffect` before paint, and `motion-reduce:` covers that paint. **`expandLast`** (default false) lengthens the track to **`400svh`** (`shrink-0`) so the horizontal travel keeps the same scroll distance and one extra viewport grows the last tile. The grow is a `clip-path` inset on a full-viewport layer: the centered card expands to the `h-svh` window edge to edge and the radius reaches 0. Earlier tiles fade. The window then releases and that full-bleed tile scrolls away. **`expanded`** is an optional slot on that section (mounted for the motion layer and the reduced-motion section; one is hidden). Reduced motion keeps the native scroller and follows it with the last tile as a static `h-svh` section. Paste **Components/ScrollHorizontal → Pattern — project gallery**. The marketing hero patterns place it under the hero and pass `expandLast`. The section ends on that tile. **FooterReveal → Pattern — marketing hero** sets `!py-0` on the guide `grid-page` after the gallery so the tile meets the footer with no page-background strip. Reduced motion's static `h-svh` section meets it the same way. See **ADR-0036**.
|
|
20
|
+
|
|
21
|
+
## RiveHand
|
|
22
|
+
|
|
23
|
+
decorative hand on the marketing hero headline, from `public/rive/interactive-icon-set.riv` (`@rive-app/react-canvas`). `hand` `'point'` (`31_Cigarette`, cigarette removed) or `'rock'` (`29_Rock`). `size` is the box (`em` tracks the headline). `active` sets `Boolean 1`. `idle` (default true) holds that input 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. `entrance` is `slide-up` (rock, clipped at the baseline), `grow` (point, 200ms later, origin at the grip), or `none`. `aria-hidden` defaults to true. `handFill` reads `--color-surface` (fallback `--color-background-surface`; white in light mode); `outline` reads `--color-brand` (`#011272` in both themes; hardcoded fallback `#011272`). `inline` places the hand in a text line. The canvas is larger than the artboard padding so the drawn hand is about 1.15em, the drawn hand is centered on the line, and a zero-height slot keeps the line box. Inside a TextSequence that 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 inline immediately after “TX”, inside the same nowrap phrase. It pops on the beat after TX. The gallery statement places the point hand inline after “is a first impression”, in place of the pill. `entrance="none"`. `aria-hidden` stays true. Outline stays `--color-brand` (`#011272`). Reduced motion draws one static frame once the canvas box has size, then pauses. The sequence pop and idle timers stay off. The server and the hydration render both use that resting pose (no `translateY(100%)` or `scale(0)`); the entrance starts after mount only when motion is allowed. CC BY 4.0, Silvia Sguotti and Gabriele Montinaro (`public/rive/CREDITS.md`). Consumers install `@rive-app/react-canvas`, serve the file at `/rive/interactive-icon-set.riv`, serve the runtime at `/rive/rive.wasm` (`riveHandWasmSrc` — copy `node_modules/@rive-app/canvas/rive.wasm`; when it is missing the runtime falls back to its CDN build and logs a warning), and paste a `"use client"` module. Paste **Components/HeroTileStack → Pattern — marketing hero**. See **ADR-0034**.
|
|
24
|
+
|
|
25
|
+
## PromptBar
|
|
26
|
+
|
|
27
|
+
wide prompt pill — inline **TextArea** (`rows={1}`, one line when empty, grows through **3 lines**, then scrolls) and an **IconButton** `sm` send control (Lucide **ArrowRight**) inset with even padding. The pill owns focus; the send control does not draw a second ring. Placeholder **Ask anything…**. Enter sends; Shift+Enter inserts a newline. Send stays disabled and muted until the draft has text, then uses **`--color-brand`** (`#011272` / `bg-brand`). No new Button role. Voice and attachments are not part of this version. Copy **Components/PromptBar → Pattern — prompt bar**. The ask page is **Sites/WhatMatters/Prompt chat → Pattern — landing to chat**: a centered display headline, then a thread that keeps growing on a narrowed page grid (`--grid-max: 40rem`; the page shell is `h-[100svh]` so the thread scrolls inside that column when it is taller than the viewport, without a height-constrained parent, 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; the trailing pill, plain reply, follow-ups, and **PromptBar** share that column and the bar stays pinned). A follow-up or another send appends the next user line in the same thread. Previous messages stay. Send uses **motion** (`motionTransitionProp`). The headline fades, and the sent line fades in where it rests. Before the reply, a collapsed sparkle row shows a live Thought-for timer (`type-supporting` and `text-muted`, not brand navy). The user can expand it while thinking to read the steps; on this pattern the whole row leaves when the reply starts (Reasoning, Search, and Coding keep the settled disclosure). The reply then streams word by word out of a blur, with one inline **TextLink**. Copy / thumbs **IconButton** actions sit under that reply and stay hidden until hover (or a touch open on that reply only), then full-width **Button** `role="outline"` `emphasis="quiet"` `align="start"` follow-up pills (the quiet `--color-border` hairline). Expanded steps show a Lucide circle spinner that becomes a check, beside a left rule. The chat keeps **SiteNav** as it exists; the brand mark returns to the landing. **Start Project** in the nav end slot opens a gated starter **Card** that replaces **PromptBar** in place (thread stays); Cancel restores the composer. `prefers-reduced-motion` skips the fade and the trace play, and shows the finished reply. **PromptBar** also mounts on the **marketing homepage**: **Components/PromptBar → Pattern — marketing composer** pins it to the bottom of the viewport on the page grid (`--grid-max: 40rem`, above the safe area, under **SiteNav**), and sending hands off to the ask page — the app routes to `/ask?q=…` and passes `q` to **AskWhatMatters** as `initialPrompt`, which opens on that first exchange instead of the landing headline. Do not hand-roll the pin, and do not restyle **SiteNav**.
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# @thewhatmatters/wmds — component contracts
|
|
2
|
+
|
|
3
|
+
Version 0.2.0. Generated from the WMDS repository's AGENTS.md (Storybook-first) by `scripts/generate-package-docs.mjs` — do not edit here.
|
|
4
|
+
|
|
5
|
+
Storybook paths such as **Components/Button/Button → Pattern — …** name a story; its Show code is in `patterns/` (see `patterns/index.json`). Longer contracts for FooterReveal, HeroTileStack, TextSequence, ScrollHorizontal, RiveHand, and PromptBar are in `component-contracts.md`. ADR numbers refer to decision records in the WMDS repository.
|
|
6
|
+
|
|
7
|
+
- **Theme** lives in `src/theme/` — `colors.css` (semantic roles) + `theme.css` (Tailwind `@theme` bridge). Storybook is the source of truth, not Paper.
|
|
8
|
+
- **Dark mode:** `[data-theme="dark"]` on `<html>` or any ancestor — same token names, swapped values in `colors.css`.
|
|
9
|
+
- **Consuming apps:** use exported components and typed props; `className` for layout only — not re-theming. Page layout utilities (`gap`, `grid`, `max-w`) are fine between components.
|
|
10
|
+
- **Theme tokens:** Semantic roles in **`src/theme/colors.css`**; typography in **`src/theme/typography.css`** (`type-*` utilities, geometric scale; **display-1/2/3** are fluid via `clamp` — display-1 hits **5rem** on desktop and scales down to **2.5rem** on mobile); motion in **`src/theme/motion.css`**; page spine in **`src/theme/grid.css`** (`--grid-*`, `grid-page` / `band`, `--leading-base`). **`--spacing` stays 4px** — do not re-scale; baseline is 8px. See **ADR-0007**, **ADR-0008**, **ADR-0009**, **ADR-0010**, **DESIGN.md → Grid**. Use **`typographyClass()`** — not raw `text-sm` in document copy.
|
|
11
|
+
- **Page layout:** Every Storybook **Sites** / **Guides** page and consuming product page starts on **`grid-page`**; use **`band`** + responsive column spans for content alignment. Constrain a specific experience by overriding **`--grid-max`** on that wrapper (for example, `960px`) rather than replacing the grid with an arbitrary centered container.
|
|
12
|
+
- **Scroll fade:** use **`scroll-fade-y`** / **`scroll-fade-x`** on the element that owns overflow to hint at clipped list or rail content. The mask is scroll-aware, disappears when no overflow exists in supporting browsers, and follows inline direction for RTL. Keep the surface fill/border on a wrapper; customize with `--scroll-fade-size` only when the default 12% / 40px cap does not fit. Copy **Foundations → Scroll fade → Pattern — …**.
|
|
13
|
+
- **Motion:** Duration tiers in **`src/theme/motion.css`** — **fast** (hover/focus), **medium** (panels/layout), **slow** (rare). Single **`--ease-standard`**. CSS via `motionTransition()`; Motion via `motionTransitionProp()`. Choreography tokens `--motion-stagger`, `--motion-beat`, `--motion-blur-reveal` through `motionStaggerSeconds()`, `motionBeatSeconds(n)`, `motionBlurReveal(reduce)`, and `readMotionDurationSeconds(tier)` — Show code never hard-codes a blur, stagger, or duration. See **ADR-0008**. Storybook wraps `<MotionConfig reducedMotion="user">`.
|
|
14
|
+
- **Icons:** **[Lucide](https://lucide.dev/icons/) only** until further notice — import from **`lucide-react`** in components, stories, and examples. Peer dependency, not bundled; use `stroke-current` / `ButtonIcon` for sizing. See **Foundations → Icons**.
|
|
15
|
+
- **Button:** pill by default; **`layout="row"`** for flat full-width detail/settings lines (**`width="hug"`** sizes a row to its content with a tight gap — inline disclosure triggers); **`align="start"`** left-aligns a pill label and **`emphasis="quiet"`** puts `role="outline"` on the `border-border` hairline (full-width suggestion pills — **Pattern — suggestion pills**); **`layout="nav"`** for **NavList** rows (`selected`). Six **roles** (`primary`, `secondary`, `ghost`, `destructive`, **`inverse`** — surface fill and brand text, for a brand-blue field, **`outline`** — hairline border and transparent fill). Patterns: action, **`row`**, **`nav`**, `icon`, `count`, `status` morph, **`mono`** + **`endIcon`** (accent arrow square) — mutually exclusive where documented. No slots. [Motion reference](https://motion.dev/examples/react-multi-state-badge).
|
|
16
|
+
- **Avatar:** circular identity — required `name`, optional `src`, initials → **User** fallback; sizes `xsm` / `sm` / `md` (default) / `lg` / `xl` (20–128px). Optional `presence={{ tone, label, pulsing? }}` — rim dot via **Status** dot tokens (not the **Status** component). **`avatarSizeForCluster()`** for header rows; **`size="sm"`** in **Dropdown.Item** `start`. Not clickable — wrap at call site. Agents: copy **Components/Avatar → Pattern — …**; see **ADR-0017**.
|
|
17
|
+
- **IconButton:** circular icon-only control. Patterns: toolbar (ghost), `fab`, `loading`, native `title`, **`inset`** (compact dismiss inside Chip), **`render={<a/>}`** (circular brand / icon links). Compose **Tooltip** for tokenized hover/focus labels and pass `title=""` to avoid duplicate native UI. **`aria-label` required** — use `Button` when text is needed.
|
|
18
|
+
- **Kbd:** semantic keyboard keycap — one physical key per **Kbd**; compose multiple keycaps for shortcuts. Sizes `sm` | `md`; add `aria-label` when symbolic labels need spoken expansion. Display-only — never interactive on the keycap itself. Numbered choice rows pair trailing **Kbd** digits with **`useKbdChoiceKeys`** so `1`–`4` select the same way a click does while focus is not in a text field (see **Pattern — numbered choice keys** and the AskWhatMatters Start Project gate). Copy **Components/Kbd → Pattern — keyboard shortcut**.
|
|
19
|
+
- **TextLink:** inline anchor for navigation inside prose — canonical solid underline, stronger hover decoration, and focus ring. `external` opens a new tab and appends Lucide **SquareArrowOutUpRight** with spoken context. Inherits surrounding type size; `className` is layout only. Use **Button** for actions. Copy **Components/TextLink → Pattern — inline prose link**.
|
|
20
|
+
- **Tooltip:** short supplemental label — **`Tooltip.Provider`** shares hover delay; **`Tooltip.Trigger render={...}`** composes a ref/DOM-prop-forwarding control; **`Tooltip.Content`** portals with collision-aware physical or logical placement. Opens on hover/focus, closes with Escape, and does not open on touch. No essential or interactive content. Disabled native controls need the documented focusable wrapper. Copy **Components/Tooltip → Pattern — …**.
|
|
21
|
+
- **Badge:** solid and **muted** semantic fills. Patterns: label, **`emphasis="muted"`**, `count`, `icon`, **`avatar`**, **`iconOnly`** — mutually exclusive where documented. **`avatar={{ src, alt }}`** renders **Avatar** at the badge size (`badgeAvatarSize`: sm → 20px, md → 24px). **`BadgeSegmentCount`** for filter/tab segment totals (Chip trailing count). No **Status** dot inside Badge. See **ADR-0033**.
|
|
22
|
+
- **Chip:** filter/toggle molecule — composes **`BadgeIcon`** / **`ButtonIcon`**, **`IconButton inset`** (remove), **`BadgeSegmentCount`** (count). Patterns: **multi-select filter** (`ChipFilterGroup` + `value`), single-select group, standalone `selected`, **removable** (`onRemove`), **read-only**. Sizes `sm` | `md` | `lg`. Optional `icon`, `count` — not with `onRemove`. No slots.
|
|
23
|
+
- **SegmentedControl:** connected **segmented control** — one track, Motion sliding thumb, mutually exclusive **`SegmentedControl.Item`** segments (`role="radiogroup"`). Patterns: **shape/settings toggle** (`layout="hug"`), **view switcher** (`layout="stretch"`). Sizes **`sm` | `md` | `lg`** — cluster tiers (28 / 36 / 44px), **1:1 with Chip**; pair **Button** via `buttonSizeForCluster()` and **IconButton** via `iconButtonSizeForCluster()`. Not multi-select — use **ChipFilterGroup**; not many options — use **Select**. **Badge** `sm`/`md` is inline label scale, not cluster header pairing.
|
|
24
|
+
- **DisplayControls:** compact page-utility molecule — controlled grid visibility + theme mode (`auto` | `light` | `dark`); composes **Button** + **Kbd**. Global **G** toggles grid and **T** cycles theme. When paired with **GridOverlay**, set `keyboardShortcut={false}` on the overlay. `className` is placement only. Copy **Components/DisplayControls → Pattern — page display controls**.
|
|
25
|
+
- **PageHeader:** horizontal page chrome — `start` | `title` | `end`; **`variant="app"`** (56px page band + hairline), **`page`** (section `h2`), **`toolbar`** (`role="toolbar"`, cluster row). Pair **SegmentedControl** / **Button** / **Avatar** at one cluster tier. Not **Card.Header**. See **ADR-0018**.
|
|
26
|
+
- **FooterReveal:** marketing page root — **FooterReveal.Content** covers a sticky **FooterReveal.Footer**, which sharpens from blur as the cover scrolls away. **FooterReveal.Brand** is the navy field (`footerRevealFieldClasses`); **FooterReveal.Ruled** is the cream ruled footer (`footerRevealRuledFieldClasses`). Neither ships content defaults: pass the wordmark, headline, CTA label, links, and email. Reduced motion renders it sharp, including SSR. Paste **Components/FooterReveal → Pattern — marketing page**, **Pattern — marketing hero**, or **Pattern — ruled grid footer**. See **ADR-0030**. Full contract: **docs/component-contracts.md → FooterReveal**.
|
|
27
|
+
- **HeroTileStack:** marketing hero image fan — `tiles`; a fine pointer pushes cards away from the pointer, a coarse pointer scatters once on tap, reduced motion keeps the resting fan. **HeroIntro** is the page `h1` on `type-display-2` and sits on `grid-page`. Paste **Components/HeroTileStack → Pattern — marketing hero**. See **ADR-0032**, **ADR-0034**, **ADR-0035**. Full contract: **docs/component-contracts.md → HeroTileStack**.
|
|
28
|
+
- **TextSequence:** masked word reveal — children mix text and **`TextSequence.Shape`**; `trigger` (`mount` \| `inView`), `emphasis`, `idle`, `lines`, `stagger`, `delay`. Parent owns the type step; `className` is layout only. The only component that imports GSAP (**ADR-0037**) — the rest of WMDS stays on `motion/react`. Reduced motion and the server render the rest state. Copy **Components/TextSequence**. Full contract: **docs/component-contracts.md → TextSequence**.
|
|
29
|
+
- **ScrollHorizontal:** marketing gallery directly under the hero — `items`, optional `heading`, `intro` (**`ScrollHorizontal.Intro`**), `expandLast`, `expanded`; `className` on the root only. A sticky window translates the row from the first card to the last; `expandLast` then grows the last tile to full bleed. Reduced motion is a native horizontal scroller. Paste **Components/ScrollHorizontal → Pattern — project gallery**. See **ADR-0036**. Full contract: **docs/component-contracts.md → ScrollHorizontal**.
|
|
30
|
+
- **RiveHand:** decorative hand on the marketing headline (`@rive-app/react-canvas`) — `hand` (`point` \| `rock`), `size`, `inline`, `active`, `idle`, `entrance`; `aria-hidden` by default. Apps serve two files beside each other: `/rive/interactive-icon-set.riv` and `/rive/rive.wasm` (`riveHandWasmSrc`, copied from `node_modules/@rive-app/canvas/rive.wasm`). Reduced motion draws one static frame. Paste **Components/HeroTileStack → Pattern — marketing hero**. See **ADR-0034**. Full contract: **docs/component-contracts.md → RiveHand**.
|
|
31
|
+
- **SiteNav:** marketing site header — `start` | `middle` | `end` slots; **page chrome** (`placement="fixed"`, optional `scrollContainer`) vs **specimen** (`placement="inline"`); expanded is **in flow** (scrolls away); after scroll past `collapseAt` (default **50% of scrollport**) a **narrower hug pill pins 1rem from the top** (`compactLayout="grid"` optional); mega panel stays **grid-wide** above a light dim; mega body: **SiteNav.Featured** / **ReadRow** / **MenuMedia** / **MenuLinkGrid** (paste **Pattern — mega menu**); below `md` mega sections stack; **SiteNav.Links** / **Link** / **Menu** / **MenuSection** / **MenuLink** (Base UI NavigationMenu) with Tab-style **More** overflow when the middle track is tight; `mobile` → **Sheet** `side="end"`. Compose **Button** `render={<a/>}` for anchors. Brand: circular **IconButton** via `icon` + `aria-label` (or wordmark **Button**). Not app chrome. See **ADR-0028**.
|
|
32
|
+
- **NavList:** sectioned secondary nav — **`sections`** + **`activeId`** / **`onSelect`**, or **NavList.Section** + **NavList.Item**. Inset pills via **Button** `layout="nav"` + **ButtonIcon**; optional counts; **`labelAlign="brand"`** reserves a 56px first-section band. Not primary navigation. See **ADR-0019**.
|
|
33
|
+
- **FloatingActionButton:** compact vertical action menu — `items` (2–4) + `onAction`; optional trigger/open icons, labels, and backdrop. Composes **IconButton** for trigger/actions; Motion `offsetPath` opens straight above the trigger; visible labels stay beside every icon. `className` is placement only. See **ADR-0024**.
|
|
34
|
+
- **Tab:** responsive peer-page/view navigation — **Tab.Group** + **Tab** (`tablist` / `tab`); inactive labels are regular-weight `text-muted`, active labels are medium-weight `text-fg` with the shared Motion bottom rule, and the muted pill fill is hover-only; optional `count`. Width overflow reserves a **More** Dropdown; selecting a hidden tab promotes it into the final visible slot before More. Not **SegmentedControl** (settings choice) or **Chip** (filter). See **ADR-0022**.
|
|
35
|
+
- **Stat:** at-a-glance metric tile — required `label`, `value`; optional `trend` (muted **Badge**), `start` / `end`, `loading`. **`Stat.Group`** — responsive grid (`columns` 2–4, 2-up mobile). **`size="sm"`** for insights rows; **`size="md"`** for hero KPI above charts. Inline mono trend (`chartKpiTrend*`) stays on **Chart**-paired KPIs — not **Badge**. Section heading + actions → **PageHeader** `variant="page"`.
|
|
36
|
+
- **TaskRows:** expandable task rows — composes **Accordion** for disclosure; adds status (**Badge**, **Status**), **meta**, detail rails, and **TaskRows.Detail**. Patterns: **status rows**; **capsules**; **action details** (`detailsLayout="actions"` + `TaskRows.Detail variant="button"` → **Button** `size="xs"`); **tag chips** (`detailsLayout="chips"` + read-only **Chip** `size="sm"`); **detail lines** (`TaskRows.Detail` + `onPress` → **Button** `layout="row"`). Optional **Card.Body**.
|
|
37
|
+
- **Accordion:** generic expand/collapse — **leading**, **label**, **trailing**, built-in chevron, `motion-collapse` panel. Variants: `list`, `capsule`, `plain`. **TaskRows** is the task-status pattern on top.
|
|
38
|
+
- **Card:** `Card.Header`, `Card.Body`, `Card.Footer`. Layout cards (`padding="none"`): header/footer on the shell; **`Card.Header`** is two horizontal slots (`start` | `end`) at **16px** (`px-4`). **`end` is always trailing** (`ml-auto`) — overflow / **MoreMenu** stays on the right even when `start` is omitted. **`Card.Body` is a square composition slot** with a **2px** horizontal gutter — no inner pad, no radius, **no default fill**. The **occupant** dictates how the body region looks; use **`cardLayoutBodyOccupantInsetXClasses`** (`px-3.5` / 14px) + **`cardLayoutBodyOccupantPadYClasses`** (`py-[16px]` / literal 16px vertical) when body content should align with header/footer (2px + 14px = 16px horizontal). Shape config lives in **`src/theme/shape.css`**: shell **`--radius-card-shell: 16px`**, body occupant **`--radius-card-body: 14px`**. Radius-only media → **`cardLayoutBodyOccupantRadiusClasses`**; inset gray/chart wells → **`cardLayoutBodyOccupantWellClasses`** or **`cardLayoutBodyOccupantDotGridWellClasses`**. A headerless layout **Card.Body** densifies the shell top to 2px (`pt-[2px]`) — same density as footerless / `bodyTerminal` bottom; **`headerless`** is only an override for wrapped slot composition. A direct terminal **`Card.Body`** automatically fills stretched cards and gets the 2px bottom shell inset; **`bodyTerminal`** is only an override for wrapped slot composition. Pin a layout height on the root (`className`) with Header + Body + Footer — Header/Footer stay put; **Card.Body** scrolls (2px gutter unchanged; no new variant). See **Components/Card/Card → Pattern — pinned height**. `variant="surface"` is elevated; **`variant="outlined"`** uses **`shadow-soft-card`** with no stroke (same elevation as layout `surface`). Radius stays **`--radius-card-shell`**. Default **`shape="rounded"`**. **`shape="flush"`** only when a parent owns outer chrome. Simple cards: `padding="md"`.
|
|
39
|
+
- **Input:** pill-only. Optional leading `icon`; trailing `endBadge` or status / `loading`. Hero search with inset button → **Search** molecule. See **ADR-0006**.
|
|
40
|
+
- **PromptBar:** wide prompt pill — inline **TextArea** (one line when empty, grows through 3 lines, then scrolls) and an inset **IconButton** `sm` send control. Enter sends; Shift+Enter inserts a newline; send stays disabled until the draft has text. No new Button role. Copy **Components/PromptBar → Pattern — prompt bar**; the ask page is **Sites/WhatMatters/Prompt chat → Pattern — landing to chat**. On the **marketing homepage** it is pinned to the bottom of the viewport on the page grid and hands off to the ask page (`/ask?q=…` → **AskWhatMatters** `initialPrompt`): copy **Components/PromptBar → Pattern — marketing composer**; do not hand-roll the pin. Do not restyle **SiteNav**. Full contract: **docs/component-contracts.md → PromptBar**.
|
|
41
|
+
- **TextArea:** element-radius multiline — same optional `label`, `description`, `status`, `message`, and `loading` as **Input**; default `resize="vertical"`. See **ADR-0006**.
|
|
42
|
+
- **Field:** label/layout wrapper — `orientation="vertical" | "horizontal"`; never required. Validation stays on **Input** / **TextArea**. See **ADR-0006**.
|
|
43
|
+
- **Checkbox:** boolean toggle — label row + optional `description`, `indeterminate`, `status` / `message`, and `loading`. See **ADR-0006**.
|
|
44
|
+
- **Radio:** single option circle — same label row rhythm as **Checkbox**; compose in **RadioGroup**. See **ADR-0006**.
|
|
45
|
+
- **RadioGroup:** mutually exclusive options — `value` / `onValueChange`, vertical or horizontal layout, group validation band.
|
|
46
|
+
- **Switch:** instant on/off — pill track + sliding thumb; `layout="settings"` for label-left rows. See **ADR-0006**.
|
|
47
|
+
- **CheckboxGroup:** multi-select options — `values` / `onValuesChange`, vertical or horizontal layout, group validation band.
|
|
48
|
+
- **Select:** pill trigger matched to **Input** shell + floating listbox (**Dropdown.Menu** / **Dropdown.Item**). **`size="sm"`** in Card headers beside **Chip sm**. Options support **`start`** / **`end`** slots for icons and shortcuts. See **Components/Select**, **Components/Dropdown**.
|
|
49
|
+
- **Dropdown:** shared menu panel (`p-0.5` inset) + three-slot rows (`start` | label | `end`) — composed by **Select**; action menus via **MoreMenu**.
|
|
50
|
+
- **MoreMenu:** kebab **IconButton** + floating **Dropdown** action menu — **Card.Header** `end` (right) only; never left-align overflow. Menu right-aligns to trigger; expanded trigger retains the ghost hover surface; **`items`** + **`onAction`**. Sizes **`xs` | `sm` | `md` | `lg`** (**IconButton** scale). Not for single-select — **Select** / **SegmentedControl**.
|
|
51
|
+
- **Toast:** temporary notification organism — mount one **`Toaster`** at the app root and call **`toast.add()`** / `update()` / `dismiss()`. Six `position` values (top/bottom × left/center/right), default five-item layered deck (newest interactive in front, older surfaces offset behind), semantic tones, optional action (**Button**) and dismiss (**IconButton**). Errors announce as `alert`; other tones as `status`. `duration: null` persists. Blocking decisions use **AlertDialog**. See **ADR-0025**.
|
|
52
|
+
- **Confetti:** celebratory burst — mount one **`ConfettiProvider`**. After an async success, render the confirmation surface and call **`useConfettiOnMount(options?)`** there (once per mount; a ref skips StrictMode and re-renders). **`useConfetti().fire(options?)`** is the same burst when the moment is not a mount. `origin` is an element, a ref (center of the box), or a viewport `{ x, y }` point; default is the viewport center. Confirmation pages pass the top-center of the viewport and a wide `spread`. Overlapping bursts are kept. Removed `duration + 0.5s` after start. Reduced motion: `fire()` does nothing. Colors default to chart categorical 1–7 (`confettiDefaultColors`). There is no trigger component. Paste **Sites/WhatMatters/RFP submitted → Pattern — RFP submitted**. See **ADR-0031**.
|
|
53
|
+
- **Dialog:** modal overlay — portal scrim, focus trap, scroll lock, **medium** enter/exit; composes **Card** shell + **IconButton** close. **`Dialog.Content`** — `title`, `description`, `footer`, `size` (`sm` | `md` | `lg`); header/footer pinned, body scrolls; **no section hairlines** — brief/direct copy + `gap-4` section rhythm. **`AlertDialog`** — blocking confirm with cancel + confirm **Button** roles; `confirmRole="destructive"` for irreversible actions; scrim dismiss off by default.
|
|
54
|
+
- **IntakeModal:** full-screen Start a project shell — typographic **WM** + **WhatMatters** wordmark (no separate logo asset), **IconButton** close (Lucide **X**, name **Close**), **StepProgress** (navy segments, pill label **Step N of 4**), pinned **Back** / **Continue** footer. Focus trap, Escape, scroll lock, `aria-modal`. **SelectableCard** is the multi-select grid (2 columns mobile, 3 from `lg`) with a `toggle` slot for hugged **SegmentedControl** and a **Badge** `iconOnly` check. **PillGroup** is the wrapping radio pills; **Not sure yet** uses existing **Badge** neutral `emphasis="muted"` — no new Badge emphasis. **IntakeForm** is **Field** + **Input** / **TextArea** (optional Link URL); required fields show `status` + `message` on blur; company and link stay optional; the details counter is the field description. **CalEmbed** is the calendar frame plus **TextLink** skip; with no embed mounted it shows a visitor-facing empty state (`emptyTitle`, `emptyDescription`), never developer notes. **CalEmbed.Skip** is that same skip; in a **Card** gate put it in **Card.Footer** and pass `skip={false}` so the in-body link is omitted. **IntakeConfirmation** (`booked` | `emailed`) calls **`useConfettiOnMount`** with `intakeConfettiColors` (includes `--color-brand`); optional `bookingTime` / `videoHref` / `googleCalendarHref` / `icsHref` reuse **TextLink** and **Button**. Paste **Sites/WhatMatters/Intake → Pattern — start a project**. See **ADR-0038**.
|
|
55
|
+
- **Sheet:** dismissible edge overlay — `side="bottom" | "end" | "start"` only (**no `top`** — not a product pattern); same scrim/focus/scroll lock as **Dialog**; bottom drawer or side detail rail; header/footer pinned, body scrolls; **hairline borders** on scroll regions. Mobile **16px inset on trailing edge only** (e.g. `end` → left gap for scrim; entry/top/bottom flush); tablet+ side sheets fully edge-flush. **`Sheet.Content`** — Card header rhythm, scrollable body, optional footer.
|
|
56
|
+
- **Panel:** persistent edge flyover — `side="end" | "start"` only; **non-blocking visual scrim** (clicks pass through), **no scroll lock**, **no focus trap**; `aria-modal="false"`; page stays interactive. Same width tokens and hairline scroll chrome as **Sheet** side panels. Use for peek/detail rails; use **Sheet** when the canvas should block.
|
|
57
|
+
- **Status:** fixed-scale indicators — **`variant="ring"`** (24px task progress: `active`, `step`) or **`variant="dot"`** (8px semantic: `tone`, `pulsing`). `besideLabel` / `label` for a11y. Not inside Badge.
|
|
58
|
+
- **Skeleton:** layout placeholder blocks — Motion horizontal shimmer ([Motion skeleton shimmer](https://motion.dev/examples/react-skeleton-shimmer)); **`index`** staggers sweep. Compose to mirror resolved chrome (title, **Select**, well, footer). **`aria-busy`** on **Card** / page region; shapes **`aria-hidden`**. Not chart-mark state — swap region for **Chart.Loading** or live marks. See **Components/Skeleton**, **Components/Chart** Card pattern stories.
|
|
59
|
+
- **Chart:** composes **[@visx/visx](https://airbnb.io/visx/)** primitives — peer dep, not bundled. WMDS owns shell, tooltip, legend, and **`chartTheme.ts`** token maps. Chart-type selection: **`.cursor/skills/wmds-visx-charts/lieflat-mapping.md`** (Lieflat catalog → WMDS patterns + example data; Lieflat HTML is reference-only). **`Chart.SegmentedBar`** — capacity meter; **`Chart.RankedBars`** — ordered percentage comparisons; **`Chart.UnitGrid`** — exact part-to-whole composition; **`Chart.DistributionStrip`** — one measure across peers; **`Chart.Heatmap`** — categorical row × column intensity; **`Chart.Cartesian`** + **`Chart.Cartesian.Area`** — time series with crosshair tooltip + optional **`Chart.Legend`**. Pass **`null`** (not `0`) for missing points — in-series hatch + muted **Badge** (**Pattern — Cartesian no-data gaps**, ADR-0027); default gap when every plotted series key is null. Entirely missing / all-zero series → product Card.Body empty (not a full-plot hatch). Initial mark animation is opt-in via **`animate="initial"`**. **`Chart.Loading`** — spinner + copy for in-flight fetch (**Card.Body**; header stays mounted). Loading model: **Skeleton** (initial layout) → **Chart.Loading** (fetch) → live marks with enter animation. Series colors: semantic **`chartSeriesConfigFromTone`** or categorical **`chartSeriesConfigFromKeys`** / **`chartSeriesColor(index)`** (ADR-0013). Tooltip portal: visx **`unstyled`** — styling only on **`Chart.Tooltip.Content`**. Responsive chart hosts measure the full parent width and use explicit **`minHeight`**; give adjacent plots the same value so chart areas align. See **ADR-0012**, **ADR-0014**, **ADR-0015**, **ADR-0027**.
|
|
60
|
+
- **Responsive:** **Mobile-first** — unprefixed utilities = mobile; `sm:` / `md:` / `lg:` scale up. Review at Mobile (390px), Tablet (768px), Desktop (1280px). Grid columns step on that same scale (4 / 8 / 12). Atoms: min **44×44px** touch targets. No hover-only core actions. See **ADR-0003** and **Foundations → Grid**.
|
|
61
|
+
- **Cluster scale:** shared heights for controls in one row (Card headers, filter rails) — **sm / md / lg** → 28 / 36 / 44px. **Chip** `sm|md|lg` pairs with **IconButton** `xs|sm|md` and compact **Button** `xs|sm|md`. See **Foundations → Cluster** and **ADR-0011**. Use `iconButtonSizeForCluster()` when composing headers.
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# Block for a consuming repo's AGENTS.md
|
|
2
|
+
|
|
3
|
+
Paste everything between the lines into the app's `AGENTS.md` (or `CLAUDE.md`). It is short on purpose: the details live in the installed package, so they always match the version the app uses.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## UI: WhatMatters Design System (WMDS)
|
|
8
|
+
|
|
9
|
+
This app's UI is built on `@thewhatmatters/wmds`. Before writing or changing UI, read the docs that ship with the installed version:
|
|
10
|
+
|
|
11
|
+
- `node_modules/@thewhatmatters/wmds/docs/README.md` — where to look
|
|
12
|
+
- `node_modules/@thewhatmatters/wmds/docs/exports.json` — every component, its category, and its patterns
|
|
13
|
+
- `node_modules/@thewhatmatters/wmds/docs/components.md` — component and token contracts
|
|
14
|
+
- `node_modules/@thewhatmatters/wmds/docs/patterns/` — Show code for every Storybook pattern
|
|
15
|
+
- `node_modules/@thewhatmatters/wmds/CHANGELOG.md` — what changed, and **Consumer actions** for each upgrade
|
|
16
|
+
|
|
17
|
+
Skills (installed with `npx skills add 'thewhatmatters/wmds#v<version>' -s use-wmds -s upgrade-wmds -s report-wmds-gap -a claude-code -y`):
|
|
18
|
+
|
|
19
|
+
- **use-wmds** — before writing or changing UI
|
|
20
|
+
- **upgrade-wmds** — when bumping `@thewhatmatters/wmds`
|
|
21
|
+
- **report-wmds-gap** — when WMDS is missing something the app needs
|
|
22
|
+
|
|
23
|
+
Rules:
|
|
24
|
+
|
|
25
|
+
1. **Use WMDS components and their props.** Do not rebuild a button, input, card, dialog, or menu from raw elements and utilities.
|
|
26
|
+
2. **`className` is for layout only** (margin, grid placement, width between components). Never re-style a WMDS component with color, type, radius, or `!important` overrides.
|
|
27
|
+
3. **Tokens only.** Colors, type, spacing, radius, shadows, and motion come from WMDS tokens and helpers — no raw hex, px font sizes, or hand-written durations.
|
|
28
|
+
4. **Patterns are copied verbatim.** When a pattern matches, copy `docs/patterns/<id>.tsx` whole, keeping its header line that names the pattern and version. Change content and data, not structure or styling.
|
|
29
|
+
5. **Pages start on `grid-page`** and place content with `band` and column spans.
|
|
30
|
+
6. **Gaps go to WMDS, not into the app.** If a component, prop, variant, or token is missing, stop and report it to the WMDS repository (**report-wmds-gap**) instead of adding a one-off in the app.
|
|
31
|
+
7. **Check before you finish:** `npx wmds-check` flags raw controls, `!` overrides on WMDS components, raw color, type, and motion values, and pasted patterns that drifted from the installed version. Add it to CI.
|
|
32
|
+
8. **Upgrading:** `npm install @thewhatmatters/wmds@<version>`, then do every **Consumer actions** step between the old and new version and re-copy the patterns it names (**upgrade-wmds**).
|
|
33
|
+
|
|
34
|
+
---
|