@thewhatmatters/wmds 0.3.0 → 0.4.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.
Files changed (133) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/CONSUMING.md +2 -1
  3. package/dist/components/molecules/PromptBar/PromptBar.d.ts +11 -1
  4. package/dist/components/molecules/PromptBar/PromptBar.d.ts.map +1 -1
  5. package/dist/components/molecules/PromptBar/PromptBar.js +54 -43
  6. package/dist/components/molecules/PromptBar/promptBarStyles.d.ts +15 -0
  7. package/dist/components/molecules/PromptBar/promptBarStyles.d.ts.map +1 -1
  8. package/dist/components/molecules/PromptBar/promptBarStyles.js +5 -2
  9. package/dist/components/organisms/ChatDock/ChatDock.d.ts +93 -0
  10. package/dist/components/organisms/ChatDock/ChatDock.d.ts.map +1 -0
  11. package/dist/components/organisms/ChatDock/ChatDock.js +255 -0
  12. package/dist/components/organisms/ChatDock/chatDockStyles.d.ts +48 -0
  13. package/dist/components/organisms/ChatDock/chatDockStyles.d.ts.map +1 -0
  14. package/dist/components/organisms/ChatDock/chatDockStyles.js +15 -0
  15. package/dist/components/organisms/Dialog/AlertDialog.js +11 -11
  16. package/dist/components/organisms/Dialog/Dialog.js +44 -44
  17. package/dist/components/organisms/Sheet/Sheet.js +38 -38
  18. package/dist/index.d.ts +1 -0
  19. package/dist/index.d.ts.map +1 -1
  20. package/dist/index.js +30 -28
  21. package/dist/styles.css +1 -1
  22. package/docs/component-contracts.md +1 -1
  23. package/docs/components.md +3 -2
  24. package/docs/exports.json +14 -2
  25. package/docs/patterns/components-avatar--dropdown-row.tsx +1 -1
  26. package/docs/patterns/components-badge--with-avatar.tsx +1 -1
  27. package/docs/patterns/components-button-button--destructive-action.tsx +1 -1
  28. package/docs/patterns/components-button-button--ghost-action.tsx +1 -1
  29. package/docs/patterns/components-button-button--inverse-action.tsx +1 -1
  30. package/docs/patterns/components-button-button--link-render.tsx +1 -1
  31. package/docs/patterns/components-button-button--multi-state-badge.tsx +1 -1
  32. package/docs/patterns/components-button-button--outline-mono.tsx +1 -1
  33. package/docs/patterns/components-button-button--primary-action.tsx +1 -1
  34. package/docs/patterns/components-button-button--row-hug.tsx +1 -1
  35. package/docs/patterns/components-button-button--row-layout.tsx +1 -1
  36. package/docs/patterns/components-button-button--secondary-action.tsx +1 -1
  37. package/docs/patterns/components-button-button--suggestion-pills.tsx +1 -1
  38. package/docs/patterns/components-button-button--with-count.tsx +1 -1
  39. package/docs/patterns/components-button-button--with-icon.tsx +1 -1
  40. package/docs/patterns/components-button-floatingactionbutton--vertical-actions.tsx +1 -1
  41. package/docs/patterns/components-calembed--pattern-skip-in-footer.tsx +1 -1
  42. package/docs/patterns/components-card-card--body-slot-occupancy-history.tsx +1 -1
  43. package/docs/patterns/components-card-card--headerless-media.tsx +1 -1
  44. package/docs/patterns/components-card-card--outlined-layout.tsx +1 -1
  45. package/docs/patterns/components-card-card--pinned-height.tsx +1 -1
  46. package/docs/patterns/components-card-selectablecard--selectable-cards-pattern.tsx +1 -1
  47. package/docs/patterns/components-chart--audience-activity-heatmap.tsx +1 -1
  48. package/docs/patterns/components-chart--cartesian-no-data-gaps.tsx +1 -1
  49. package/docs/patterns/components-chart--occupancy-history-in-card.tsx +1 -1
  50. package/docs/patterns/components-chart--occupancy-in-card.tsx +1 -1
  51. package/docs/patterns/components-chart--post-reach-distribution.tsx +1 -1
  52. package/docs/patterns/components-chart--ranked-audience-breakdown.tsx +1 -1
  53. package/docs/patterns/components-chart--unit-grid-composition.tsx +1 -1
  54. package/docs/patterns/components-chatdock--pattern-chat-dock.tsx +68 -0
  55. package/docs/patterns/components-chatqa--pattern-qa-with-reply.tsx +1 -1
  56. package/docs/patterns/components-checkbox-checkbox--default.tsx +1 -1
  57. package/docs/patterns/components-checkbox-checkbox--with-description.tsx +1 -1
  58. package/docs/patterns/components-checkbox-checkboxgroup--default.tsx +1 -1
  59. package/docs/patterns/components-dialog--alert-dialog-destructive.tsx +1 -1
  60. package/docs/patterns/components-dialog--default-dialog.tsx +1 -1
  61. package/docs/patterns/components-dialog--form-dialog.tsx +1 -1
  62. package/docs/patterns/components-displaycontrols--page-utilities.tsx +1 -1
  63. package/docs/patterns/components-field--horizontal-input.tsx +1 -1
  64. package/docs/patterns/components-field--horizontal-text-area.tsx +1 -1
  65. package/docs/patterns/components-field--multi-control.tsx +1 -1
  66. package/docs/patterns/components-footerreveal--marketing-hero-pattern.tsx +1 -1
  67. package/docs/patterns/components-footerreveal--marketing-hero-ruled-pattern.tsx +1 -1
  68. package/docs/patterns/components-footerreveal--marketing-hero-with-gallery-intro.tsx +1 -1
  69. package/docs/patterns/components-footerreveal--marketing-page-pattern.tsx +1 -1
  70. package/docs/patterns/components-footerreveal--ruled-grid-footer-pattern.tsx +1 -1
  71. package/docs/patterns/components-footerreveal--sequenced-marketing-hero.tsx +1 -1
  72. package/docs/patterns/components-herointro--two-line-intro.tsx +1 -1
  73. package/docs/patterns/components-herotilestack--marketing-hero-pattern.tsx +1 -1
  74. package/docs/patterns/components-herotilestack--marketing-hero-text-sequence.tsx +1 -1
  75. package/docs/patterns/components-herotilestack--marketing-hero-with-gallery-intro.tsx +1 -1
  76. package/docs/patterns/components-intakeconfirmation--booked-pattern.tsx +1 -1
  77. package/docs/patterns/components-intakeconfirmation--emailed-pattern.tsx +1 -1
  78. package/docs/patterns/components-intakeform--about-you-pattern.tsx +1 -1
  79. package/docs/patterns/components-intakemodal--intake-modal-pattern.tsx +1 -1
  80. package/docs/patterns/components-kbd--command-row.tsx +1 -1
  81. package/docs/patterns/components-kbd--numbered-choices.tsx +1 -1
  82. package/docs/patterns/components-kbd--shortcut.tsx +1 -1
  83. package/docs/patterns/components-moremenu--action-menu.tsx +1 -1
  84. package/docs/patterns/components-moremenu--in-card-header.tsx +1 -1
  85. package/docs/patterns/components-navlist--side-nav-settings.tsx +1 -1
  86. package/docs/patterns/components-pageheader--app-header-pattern.tsx +1 -1
  87. package/docs/patterns/components-pageheader--page-section-header.tsx +1 -1
  88. package/docs/patterns/components-pageheader--toolbar-header.tsx +1 -1
  89. package/docs/patterns/components-panel--end-detail-rail.tsx +1 -1
  90. package/docs/patterns/components-pillgroup--pill-group-pattern.tsx +1 -1
  91. package/docs/patterns/components-promptbar--pattern-prompt-bar.tsx +1 -1
  92. package/docs/patterns/components-radio-radiogroup--default.tsx +1 -1
  93. package/docs/patterns/components-scrollhorizontal--project-gallery-pattern.tsx +1 -1
  94. package/docs/patterns/components-scrollhorizontal--with-intro.tsx +1 -1
  95. package/docs/patterns/components-sheet--bottom-sheet.tsx +1 -1
  96. package/docs/patterns/components-sheet--end-sheet.tsx +1 -1
  97. package/docs/patterns/components-sitenav--brand-and-cta.tsx +1 -1
  98. package/docs/patterns/components-sitenav--centered-links.tsx +1 -1
  99. package/docs/patterns/components-sitenav--compact.tsx +1 -1
  100. package/docs/patterns/components-sitenav--marketing-header.tsx +1 -1
  101. package/docs/patterns/components-sitenav--mega-menu.tsx +1 -1
  102. package/docs/patterns/components-stat--insights-row.tsx +1 -1
  103. package/docs/patterns/components-stepprogress--step-progress-pattern.tsx +1 -1
  104. package/docs/patterns/components-switch--default.tsx +1 -1
  105. package/docs/patterns/components-switch--settings-row.tsx +1 -1
  106. package/docs/patterns/components-tab--settings-pages.tsx +1 -1
  107. package/docs/patterns/components-taskrows--action-details.tsx +1 -1
  108. package/docs/patterns/components-taskrows--capsules.tsx +1 -1
  109. package/docs/patterns/components-taskrows--card-with-status-rows.tsx +1 -1
  110. package/docs/patterns/components-taskrows--controlled-expand.tsx +1 -1
  111. package/docs/patterns/components-taskrows--custom-slots.tsx +1 -1
  112. package/docs/patterns/components-taskrows--status-list.tsx +1 -1
  113. package/docs/patterns/components-taskrows--tag-chips.tsx +1 -1
  114. package/docs/patterns/components-textlink--external-destination.tsx +1 -1
  115. package/docs/patterns/components-textlink--inline-prose.tsx +1 -1
  116. package/docs/patterns/components-textlink--supporting-copy.tsx +1 -1
  117. package/docs/patterns/components-textsequence--default.tsx +1 -1
  118. package/docs/patterns/components-textsequence--reduced-motion.tsx +1 -1
  119. package/docs/patterns/components-textsequence--shapes.tsx +1 -1
  120. package/docs/patterns/components-toast--stacked-notifications.tsx +1 -1
  121. package/docs/patterns/components-tooltip--controlled.tsx +1 -1
  122. package/docs/patterns/components-tooltip--disabled-control.tsx +1 -1
  123. package/docs/patterns/components-tooltip--icon-action.tsx +1 -1
  124. package/docs/patterns/components-tooltip--keyboard-shortcut.tsx +1 -1
  125. package/docs/patterns/components-tooltip--placement.tsx +1 -1
  126. package/docs/patterns/foundations-scroll-fade--horizontal-rail.tsx +1 -1
  127. package/docs/patterns/foundations-scroll-fade--overflowing-list.tsx +1 -1
  128. package/docs/patterns/guides-chart-explorations--comparison-gallery.tsx +1 -1
  129. package/docs/patterns/guides-overlay-flows--notification-preferences.tsx +1 -1
  130. package/docs/patterns/guides-profile-typography--editorial-profile.tsx +1 -1
  131. package/docs/patterns/index.json +9 -9
  132. package/package.json +1 -1
  133. package/docs/patterns/components-promptbar--pattern-marketing-composer.tsx +0 -37
@@ -24,4 +24,4 @@ decorative hand on the marketing hero headline, from `public/rive/interactive-ic
24
24
 
25
25
  ## PromptBar
26
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**. **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 app's ask page — the app routes to `/ask?q=…`, and the ask page opens on that first exchange. The ask page itself is app code. Do not hand-roll the pin, and do not restyle **SiteNav**.
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**. Optional `start` holds the brand mark (**Avatar** `size="md"`, the send circle's size) and `end` holds extra inset **IconButton** `sm` controls before send. On the marketing pages **PromptBar** appears inside **ChatDock** (**Components/ChatDock → Pattern — chat dock**): pinned to the bottom of the page grid (`--grid-max: 40rem`, above the safe area, under **SiteNav**), it opens into a non-modal chat window instead of handing off to a separate ask page. Do not hand-roll the pin, and do not restyle **SiteNav**.
@@ -1,6 +1,6 @@
1
1
  # @thewhatmatters/wmds — component contracts
2
2
 
3
- Version 0.3.0. Generated from the WMDS repository's AGENTS.md (Storybook-first) by `scripts/generate-package-docs.mjs` — do not edit here.
3
+ Version 0.4.0. Generated from the WMDS repository's AGENTS.md (Storybook-first) by `scripts/generate-package-docs.mjs` — do not edit here.
4
4
 
5
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
6
 
@@ -37,7 +37,8 @@ Storybook paths such as **Components/Button/Button → Pattern — …** name a
37
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
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
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**. On the **marketing homepage** it is pinned to the bottom of the viewport on the page grid and hands off to the app's ask page (`/ask?q=…`, which starts the conversation with `q`): copy **Components/PromptBar → Pattern — marketing composer**; do not hand-roll the pin. Do not restyle **SiteNav**. Full contract: **docs/component-contracts.md → PromptBar**.
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. Optional `start` (brand mark — **Avatar** `size="md"`) and `end` (extra inset **IconButton** `sm`) slots. No new Button role. Copy **Components/PromptBar → Pattern — prompt bar**. The site assistant on the marketing pages is **ChatDock**, not a hand-pinned PromptBar. Do not restyle **SiteNav**. Full contract: **docs/component-contracts.md → PromptBar**.
41
+ - **ChatDock:** the site assistant — a **PromptBar** pinned to the bottom of the page grid (`--grid-max: 40rem`, under **SiteNav**) with the brand `mark`; hovering shows `suggestions` that carry a `prompt` as **Button** `secondary` pills above it; focusing, clicking, or typing opens a non-modal chat window that grows up out of the bar (shared overlay header with `title` / `subtitle` / close, `greeting`, `messages`, `thinking` row, suggestion rows — **Button** `layout="row"` — until the first message, composer, `disclaimer`). Escape or close folds it back. Full screen below `md`. The app owns `messages` and `onSend`; suggestions without a `prompt` (for example **Start a project**) only call `onSuggestionSelect`. No full-page chat, no header send/expand arrow, no voice. `placement="inline"` is for previews only. Copy **Components/ChatDock → Pattern — chat dock**. See **ADR-0039**.
41
42
  - **TextArea:** element-radius multiline — same optional `label`, `description`, `status`, `message`, and `loading` as **Input**; default `resize="vertical"`. See **ADR-0006**.
42
43
  - **Field:** label/layout wrapper — `orientation="vertical" | "horizontal"`; never required. Validation stays on **Input** / **TextArea**. See **ADR-0006**.
43
44
  - **Checkbox:** boolean toggle — label row + optional `description`, `indeterminate`, `status` / `message`, and `loading`. See **ADR-0006**.
package/docs/exports.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "package": "@thewhatmatters/wmds",
3
- "version": "0.3.0",
3
+ "version": "0.4.0",
4
4
  "import": "import { Button } from \"@thewhatmatters/wmds\";",
5
5
  "styles": [
6
6
  "@thewhatmatters/wmds/styles.css",
@@ -137,6 +137,19 @@
137
137
  "components-chart--unit-grid-composition"
138
138
  ]
139
139
  },
140
+ {
141
+ "name": "ChatDock",
142
+ "tier": "organism",
143
+ "category": "Chat",
144
+ "summary": "Pinned prompt with suggested questions that opens into a chat window.",
145
+ "storybook": {
146
+ "title": "Components/ChatDock",
147
+ "docs": "?path=/docs/components-chatdock--docs"
148
+ },
149
+ "patterns": [
150
+ "components-chatdock--pattern-chat-dock"
151
+ ]
152
+ },
140
153
  {
141
154
  "name": "ChatQa",
142
155
  "tier": "molecule",
@@ -467,7 +480,6 @@
467
480
  "docs": "?path=/docs/components-promptbar--docs"
468
481
  },
469
482
  "patterns": [
470
- "components-promptbar--pattern-marketing-composer",
471
483
  "components-promptbar--pattern-prompt-bar"
472
484
  ]
473
485
  },
@@ -1,4 +1,4 @@
1
- // @thewhatmatters/wmds@0.3.0 · Pattern — dropdown row
1
+ // @thewhatmatters/wmds@0.4.0 · Pattern — dropdown row
2
2
  // Storybook: Components/Avatar → Pattern — dropdown row (?path=/story/components-avatar--dropdown-row)
3
3
  // Show code — copy verbatim and keep this header; upgrades find pasted patterns by it.
4
4
 
@@ -1,4 +1,4 @@
1
- // @thewhatmatters/wmds@0.3.0 · Pattern — with avatar
1
+ // @thewhatmatters/wmds@0.4.0 · Pattern — with avatar
2
2
  // Storybook: Components/Badge → Pattern — with avatar (?path=/story/components-badge--with-avatar)
3
3
  // Show code — copy verbatim and keep this header; upgrades find pasted patterns by it.
4
4
 
@@ -1,4 +1,4 @@
1
- // @thewhatmatters/wmds@0.3.0 · Pattern — destructive action
1
+ // @thewhatmatters/wmds@0.4.0 · Pattern — destructive action
2
2
  // Storybook: Components/Button/Button → Pattern — destructive action (?path=/story/components-button-button--destructive-action)
3
3
  // Show code — copy verbatim and keep this header; upgrades find pasted patterns by it.
4
4
 
@@ -1,4 +1,4 @@
1
- // @thewhatmatters/wmds@0.3.0 · Pattern — ghost action
1
+ // @thewhatmatters/wmds@0.4.0 · Pattern — ghost action
2
2
  // Storybook: Components/Button/Button → Pattern — ghost action (?path=/story/components-button-button--ghost-action)
3
3
  // Show code — copy verbatim and keep this header; upgrades find pasted patterns by it.
4
4
 
@@ -1,4 +1,4 @@
1
- // @thewhatmatters/wmds@0.3.0 · Pattern — inverse action
1
+ // @thewhatmatters/wmds@0.4.0 · Pattern — inverse action
2
2
  // Storybook: Components/Button/Button → Pattern — inverse action (?path=/story/components-button-button--inverse-action)
3
3
  // Show code — copy verbatim and keep this header; upgrades find pasted patterns by it.
4
4
 
@@ -1,4 +1,4 @@
1
- // @thewhatmatters/wmds@0.3.0 · Pattern — link
1
+ // @thewhatmatters/wmds@0.4.0 · Pattern — link
2
2
  // Storybook: Components/Button/Button → Pattern — link (?path=/story/components-button-button--link-render)
3
3
  // Show code — copy verbatim and keep this header; upgrades find pasted patterns by it.
4
4
 
@@ -1,4 +1,4 @@
1
- // @thewhatmatters/wmds@0.3.0 · Pattern — submit / async
1
+ // @thewhatmatters/wmds@0.4.0 · Pattern — submit / async
2
2
  // Storybook: Components/Button/Button → Pattern — submit / async (?path=/story/components-button-button--multi-state-badge)
3
3
  // Show code — copy verbatim and keep this header; upgrades find pasted patterns by it.
4
4
 
@@ -1,4 +1,4 @@
1
- // @thewhatmatters/wmds@0.3.0 · Pattern — outline mono
1
+ // @thewhatmatters/wmds@0.4.0 · Pattern — outline mono
2
2
  // Storybook: Components/Button/Button → Pattern — outline mono (?path=/story/components-button-button--outline-mono)
3
3
  // Show code — copy verbatim and keep this header; upgrades find pasted patterns by it.
4
4
 
@@ -1,4 +1,4 @@
1
- // @thewhatmatters/wmds@0.3.0 · Pattern — primary action
1
+ // @thewhatmatters/wmds@0.4.0 · Pattern — primary action
2
2
  // Storybook: Components/Button/Button → Pattern — primary action (?path=/story/components-button-button--primary-action)
3
3
  // Show code — copy verbatim and keep this header; upgrades find pasted patterns by it.
4
4
 
@@ -1,4 +1,4 @@
1
- // @thewhatmatters/wmds@0.3.0 · Pattern — row (hug)
1
+ // @thewhatmatters/wmds@0.4.0 · Pattern — row (hug)
2
2
  // Storybook: Components/Button/Button → Pattern — row (hug) (?path=/story/components-button-button--row-hug)
3
3
  // Show code — copy verbatim and keep this header; upgrades find pasted patterns by it.
4
4
 
@@ -1,4 +1,4 @@
1
- // @thewhatmatters/wmds@0.3.0 · Pattern — row
1
+ // @thewhatmatters/wmds@0.4.0 · Pattern — row
2
2
  // Storybook: Components/Button/Button → Pattern — row (?path=/story/components-button-button--row-layout)
3
3
  // Show code — copy verbatim and keep this header; upgrades find pasted patterns by it.
4
4
 
@@ -1,4 +1,4 @@
1
- // @thewhatmatters/wmds@0.3.0 · Pattern — secondary action
1
+ // @thewhatmatters/wmds@0.4.0 · Pattern — secondary action
2
2
  // Storybook: Components/Button/Button → Pattern — secondary action (?path=/story/components-button-button--secondary-action)
3
3
  // Show code — copy verbatim and keep this header; upgrades find pasted patterns by it.
4
4
 
@@ -1,4 +1,4 @@
1
- // @thewhatmatters/wmds@0.3.0 · Pattern — suggestion pills
1
+ // @thewhatmatters/wmds@0.4.0 · Pattern — suggestion pills
2
2
  // Storybook: Components/Button/Button → Pattern — suggestion pills (?path=/story/components-button-button--suggestion-pills)
3
3
  // Show code — copy verbatim and keep this header; upgrades find pasted patterns by it.
4
4
 
@@ -1,4 +1,4 @@
1
- // @thewhatmatters/wmds@0.3.0 · Pattern — with count
1
+ // @thewhatmatters/wmds@0.4.0 · Pattern — with count
2
2
  // Storybook: Components/Button/Button → Pattern — with count (?path=/story/components-button-button--with-count)
3
3
  // Show code — copy verbatim and keep this header; upgrades find pasted patterns by it.
4
4
 
@@ -1,4 +1,4 @@
1
- // @thewhatmatters/wmds@0.3.0 · Pattern — with icon
1
+ // @thewhatmatters/wmds@0.4.0 · Pattern — with icon
2
2
  // Storybook: Components/Button/Button → Pattern — with icon (?path=/story/components-button-button--with-icon)
3
3
  // Show code — copy verbatim and keep this header; upgrades find pasted patterns by it.
4
4
 
@@ -1,4 +1,4 @@
1
- // @thewhatmatters/wmds@0.3.0 · Pattern — vertical actions
1
+ // @thewhatmatters/wmds@0.4.0 · Pattern — vertical actions
2
2
  // Storybook: Components/Button/FloatingActionButton → Pattern — vertical actions (?path=/story/components-button-floatingactionbutton--vertical-actions)
3
3
  // Show code — copy verbatim and keep this header; upgrades find pasted patterns by it.
4
4
 
@@ -1,4 +1,4 @@
1
- // @thewhatmatters/wmds@0.3.0 · Pattern — skip in footer
1
+ // @thewhatmatters/wmds@0.4.0 · Pattern — skip in footer
2
2
  // Storybook: Components/CalEmbed → Pattern — skip in footer (?path=/story/components-calembed--pattern-skip-in-footer)
3
3
  // Show code — copy verbatim and keep this header; upgrades find pasted patterns by it.
4
4
 
@@ -1,4 +1,4 @@
1
- // @thewhatmatters/wmds@0.3.0 · Example — body slot (occupancy history)
1
+ // @thewhatmatters/wmds@0.4.0 · Example — body slot (occupancy history)
2
2
  // Storybook: Components/Card/Card → Example — body slot (occupancy history) (?path=/story/components-card-card--body-slot-occupancy-history)
3
3
  // Show code — copy verbatim and keep this header; upgrades find pasted patterns by it.
4
4
 
@@ -1,4 +1,4 @@
1
- // @thewhatmatters/wmds@0.3.0 · Pattern — headerless media
1
+ // @thewhatmatters/wmds@0.4.0 · Pattern — headerless media
2
2
  // Storybook: Components/Card/Card → Pattern — headerless media (?path=/story/components-card-card--headerless-media)
3
3
  // Show code — copy verbatim and keep this header; upgrades find pasted patterns by it.
4
4
 
@@ -1,4 +1,4 @@
1
- // @thewhatmatters/wmds@0.3.0 · Pattern — outlined layout
1
+ // @thewhatmatters/wmds@0.4.0 · Pattern — outlined layout
2
2
  // Storybook: Components/Card/Card → Pattern — outlined layout (?path=/story/components-card-card--outlined-layout)
3
3
  // Show code — copy verbatim and keep this header; upgrades find pasted patterns by it.
4
4
 
@@ -1,4 +1,4 @@
1
- // @thewhatmatters/wmds@0.3.0 · Pattern — pinned height
1
+ // @thewhatmatters/wmds@0.4.0 · Pattern — pinned height
2
2
  // Storybook: Components/Card/Card → Pattern — pinned height (?path=/story/components-card-card--pinned-height)
3
3
  // Show code — copy verbatim and keep this header; upgrades find pasted patterns by it.
4
4
 
@@ -1,4 +1,4 @@
1
- // @thewhatmatters/wmds@0.3.0 · Pattern — selectable cards
1
+ // @thewhatmatters/wmds@0.4.0 · Pattern — selectable cards
2
2
  // Storybook: Components/Card/SelectableCard → Pattern — selectable cards (?path=/story/components-card-selectablecard--selectable-cards-pattern)
3
3
  // Show code — copy verbatim and keep this header; upgrades find pasted patterns by it.
4
4
 
@@ -1,4 +1,4 @@
1
- // @thewhatmatters/wmds@0.3.0 · Pattern — matrix heatmap
1
+ // @thewhatmatters/wmds@0.4.0 · Pattern — matrix heatmap
2
2
  // Storybook: Components/Chart → Pattern — matrix heatmap (?path=/story/components-chart--audience-activity-heatmap)
3
3
  // Show code — copy verbatim and keep this header; upgrades find pasted patterns by it.
4
4
 
@@ -1,4 +1,4 @@
1
- // @thewhatmatters/wmds@0.3.0 · Pattern — Cartesian no-data gaps
1
+ // @thewhatmatters/wmds@0.4.0 · Pattern — Cartesian no-data gaps
2
2
  // Storybook: Components/Chart → Pattern — Cartesian no-data gaps (?path=/story/components-chart--cartesian-no-data-gaps)
3
3
  // Show code — copy verbatim and keep this header; upgrades find pasted patterns by it.
4
4
 
@@ -1,4 +1,4 @@
1
- // @thewhatmatters/wmds@0.3.0 · Pattern — occupancy history in Card
1
+ // @thewhatmatters/wmds@0.4.0 · Pattern — occupancy history in Card
2
2
  // Storybook: Components/Chart → Pattern — occupancy history in Card (?path=/story/components-chart--occupancy-history-in-card)
3
3
  // Show code — copy verbatim and keep this header; upgrades find pasted patterns by it.
4
4
 
@@ -1,4 +1,4 @@
1
- // @thewhatmatters/wmds@0.3.0 · Pattern — occupancy KPI in Card
1
+ // @thewhatmatters/wmds@0.4.0 · Pattern — occupancy KPI in Card
2
2
  // Storybook: Components/Chart → Pattern — occupancy KPI in Card (?path=/story/components-chart--occupancy-in-card)
3
3
  // Show code — copy verbatim and keep this header; upgrades find pasted patterns by it.
4
4
 
@@ -1,4 +1,4 @@
1
- // @thewhatmatters/wmds@0.3.0 · Pattern — distribution strip
1
+ // @thewhatmatters/wmds@0.4.0 · Pattern — distribution strip
2
2
  // Storybook: Components/Chart → Pattern — distribution strip (?path=/story/components-chart--post-reach-distribution)
3
3
  // Show code — copy verbatim and keep this header; upgrades find pasted patterns by it.
4
4
 
@@ -1,4 +1,4 @@
1
- // @thewhatmatters/wmds@0.3.0 · Pattern — ranked audience breakdown
1
+ // @thewhatmatters/wmds@0.4.0 · Pattern — ranked audience breakdown
2
2
  // Storybook: Components/Chart → Pattern — ranked audience breakdown (?path=/story/components-chart--ranked-audience-breakdown)
3
3
  // Show code — copy verbatim and keep this header; upgrades find pasted patterns by it.
4
4
 
@@ -1,4 +1,4 @@
1
- // @thewhatmatters/wmds@0.3.0 · Pattern — 100-unit composition
1
+ // @thewhatmatters/wmds@0.4.0 · Pattern — 100-unit composition
2
2
  // Storybook: Components/Chart → Pattern — 100-unit composition (?path=/story/components-chart--unit-grid-composition)
3
3
  // Show code — copy verbatim and keep this header; upgrades find pasted patterns by it.
4
4
 
@@ -0,0 +1,68 @@
1
+ // @thewhatmatters/wmds@0.4.0 · Pattern — chat dock
2
+ // Storybook: Components/ChatDock → Pattern — chat dock (?path=/story/components-chatdock--pattern-chat-dock)
3
+ // Show code — copy verbatim and keep this header; upgrades find pasted patterns by it.
4
+
5
+ import { useState } from "react";
6
+ import { ArrowRight, CalendarClock, DollarSign } from "lucide-react";
7
+ import { Avatar, ChatDock, type ChatDockMessage, type ChatDockSuggestion } from "@thewhatmatters/wmds";
8
+
9
+ const suggestions: ChatDockSuggestion[] = [
10
+ {
11
+ id: "cost",
12
+ label: "How much does a project cost?",
13
+ prompt: "How much does a project cost?",
14
+ icon: <DollarSign />,
15
+ },
16
+ {
17
+ id: "timeline",
18
+ label: "How long does a project take?",
19
+ prompt: "How long does a project take?",
20
+ icon: <CalendarClock />,
21
+ },
22
+ { id: "start", label: "Start a project", icon: <ArrowRight /> },
23
+ ];
24
+
25
+ export interface AskWhatMattersProps {
26
+ /** The app's assistant request. Resolves with the reply. */
27
+ ask: (prompt: string, history: ChatDockMessage[]) => Promise<string>;
28
+ /** Opens the Start a project intake. */
29
+ onStartProject: () => void;
30
+ }
31
+
32
+ export function AskWhatMatters({ ask, onStartProject }: AskWhatMattersProps) {
33
+ const [messages, setMessages] = useState<ChatDockMessage[]>([]);
34
+ const [thinking, setThinking] = useState(false);
35
+
36
+ async function handleSend(prompt: string) {
37
+ const question: ChatDockMessage = { id: crypto.randomUUID(), role: "user", content: prompt };
38
+ const history = [...messages, question];
39
+ setMessages(history);
40
+ setThinking(true);
41
+ try {
42
+ const reply = await ask(prompt, history);
43
+ setMessages((current) => [...current, { id: crypto.randomUUID(), role: "assistant", content: reply }]);
44
+ } finally {
45
+ setThinking(false);
46
+ }
47
+ }
48
+
49
+ return (
50
+ <ChatDock
51
+ title="WhatMatters"
52
+ subtitle="Ask anything"
53
+ mark={<Avatar name="WhatMatters" size="md" />}
54
+ greeting="Hi, I'm the WhatMatters assistant. Ask about our work, our process, pricing, or how to start a project."
55
+ messages={messages}
56
+ thinking={thinking}
57
+ suggestions={suggestions}
58
+ onSend={(prompt) => {
59
+ void handleSend(prompt);
60
+ }}
61
+ onSuggestionSelect={(suggestion) => {
62
+ if (suggestion.id === "start") onStartProject();
63
+ }}
64
+ placeholder="Ask anything about WhatMatters"
65
+ disclaimer="Answers may be incomplete · AI assistant by WhatMatters"
66
+ />
67
+ );
68
+ }
@@ -1,4 +1,4 @@
1
- // @thewhatmatters/wmds@0.3.0 · Pattern — Q&A with reply
1
+ // @thewhatmatters/wmds@0.4.0 · Pattern — Q&A with reply
2
2
  // Storybook: Components/ChatQa → Pattern — Q&A with reply (?path=/story/components-chatqa--pattern-qa-with-reply)
3
3
  // Show code — copy verbatim and keep this header; upgrades find pasted patterns by it.
4
4
 
@@ -1,4 +1,4 @@
1
- // @thewhatmatters/wmds@0.3.0 · Pattern — default
1
+ // @thewhatmatters/wmds@0.4.0 · Pattern — default
2
2
  // Storybook: Components/Checkbox/Checkbox → Pattern — default (?path=/story/components-checkbox-checkbox--default)
3
3
  // Show code — copy verbatim and keep this header; upgrades find pasted patterns by it.
4
4
 
@@ -1,4 +1,4 @@
1
- // @thewhatmatters/wmds@0.3.0 · Pattern — with description
1
+ // @thewhatmatters/wmds@0.4.0 · Pattern — with description
2
2
  // Storybook: Components/Checkbox/Checkbox → Pattern — with description (?path=/story/components-checkbox-checkbox--with-description)
3
3
  // Show code — copy verbatim and keep this header; upgrades find pasted patterns by it.
4
4
 
@@ -1,4 +1,4 @@
1
- // @thewhatmatters/wmds@0.3.0 · Pattern — default
1
+ // @thewhatmatters/wmds@0.4.0 · Pattern — default
2
2
  // Storybook: Components/Checkbox/CheckboxGroup → Pattern — default (?path=/story/components-checkbox-checkboxgroup--default)
3
3
  // Show code — copy verbatim and keep this header; upgrades find pasted patterns by it.
4
4
 
@@ -1,4 +1,4 @@
1
- // @thewhatmatters/wmds@0.3.0 · Pattern — alert dialog (destructive)
1
+ // @thewhatmatters/wmds@0.4.0 · Pattern — alert dialog (destructive)
2
2
  // Storybook: Components/Dialog → Pattern — alert dialog (destructive) (?path=/story/components-dialog--alert-dialog-destructive)
3
3
  // Show code — copy verbatim and keep this header; upgrades find pasted patterns by it.
4
4
 
@@ -1,4 +1,4 @@
1
- // @thewhatmatters/wmds@0.3.0 · Pattern — dialog
1
+ // @thewhatmatters/wmds@0.4.0 · Pattern — dialog
2
2
  // Storybook: Components/Dialog → Pattern — dialog (?path=/story/components-dialog--default-dialog)
3
3
  // Show code — copy verbatim and keep this header; upgrades find pasted patterns by it.
4
4
 
@@ -1,4 +1,4 @@
1
- // @thewhatmatters/wmds@0.3.0 · Pattern — form dialog
1
+ // @thewhatmatters/wmds@0.4.0 · Pattern — form dialog
2
2
  // Storybook: Components/Dialog → Pattern — form dialog (?path=/story/components-dialog--form-dialog)
3
3
  // Show code — copy verbatim and keep this header; upgrades find pasted patterns by it.
4
4
 
@@ -1,4 +1,4 @@
1
- // @thewhatmatters/wmds@0.3.0 · Pattern — page display controls
1
+ // @thewhatmatters/wmds@0.4.0 · Pattern — page display controls
2
2
  // Storybook: Components/DisplayControls → Pattern — page display controls (?path=/story/components-displaycontrols--page-utilities)
3
3
  // Show code — copy verbatim and keep this header; upgrades find pasted patterns by it.
4
4
 
@@ -1,4 +1,4 @@
1
- // @thewhatmatters/wmds@0.3.0 · Pattern — horizontal input
1
+ // @thewhatmatters/wmds@0.4.0 · Pattern — horizontal input
2
2
  // Storybook: Components/Field → Pattern — horizontal input (?path=/story/components-field--horizontal-input)
3
3
  // Show code — copy verbatim and keep this header; upgrades find pasted patterns by it.
4
4
 
@@ -1,4 +1,4 @@
1
- // @thewhatmatters/wmds@0.3.0 · Pattern — horizontal textarea
1
+ // @thewhatmatters/wmds@0.4.0 · Pattern — horizontal textarea
2
2
  // Storybook: Components/Field → Pattern — horizontal textarea (?path=/story/components-field--horizontal-text-area)
3
3
  // Show code — copy verbatim and keep this header; upgrades find pasted patterns by it.
4
4
 
@@ -1,4 +1,4 @@
1
- // @thewhatmatters/wmds@0.3.0 · Pattern — multi-control
1
+ // @thewhatmatters/wmds@0.4.0 · Pattern — multi-control
2
2
  // Storybook: Components/Field → Pattern — multi-control (?path=/story/components-field--multi-control)
3
3
  // Show code — copy verbatim and keep this header; upgrades find pasted patterns by it.
4
4
 
@@ -1,4 +1,4 @@
1
- // @thewhatmatters/wmds@0.3.0 · Pattern — marketing hero
1
+ // @thewhatmatters/wmds@0.4.0 · Pattern — marketing hero
2
2
  // Storybook: Components/FooterReveal → Pattern — marketing hero (?path=/story/components-footerreveal--marketing-hero-pattern)
3
3
  // Show code — copy verbatim and keep this header; upgrades find pasted patterns by it.
4
4
 
@@ -1,4 +1,4 @@
1
- // @thewhatmatters/wmds@0.3.0 · Pattern — marketing hero ruled grid
1
+ // @thewhatmatters/wmds@0.4.0 · Pattern — marketing hero ruled grid
2
2
  // Storybook: Components/FooterReveal → Pattern — marketing hero ruled grid (?path=/story/components-footerreveal--marketing-hero-ruled-pattern)
3
3
  // Show code — copy verbatim and keep this header; upgrades find pasted patterns by it.
4
4
 
@@ -1,4 +1,4 @@
1
- // @thewhatmatters/wmds@0.3.0 · Marketing hero with gallery intro
1
+ // @thewhatmatters/wmds@0.4.0 · Marketing hero with gallery intro
2
2
  // Storybook: Components/FooterReveal → Marketing hero with gallery intro (?path=/story/components-footerreveal--marketing-hero-with-gallery-intro)
3
3
  // Show code — copy verbatim and keep this header; upgrades find pasted patterns by it.
4
4
 
@@ -1,4 +1,4 @@
1
- // @thewhatmatters/wmds@0.3.0 · Pattern — marketing page
1
+ // @thewhatmatters/wmds@0.4.0 · Pattern — marketing page
2
2
  // Storybook: Components/FooterReveal → Pattern — marketing page (?path=/story/components-footerreveal--marketing-page-pattern)
3
3
  // Show code — copy verbatim and keep this header; upgrades find pasted patterns by it.
4
4
 
@@ -1,4 +1,4 @@
1
- // @thewhatmatters/wmds@0.3.0 · Pattern — ruled grid footer
1
+ // @thewhatmatters/wmds@0.4.0 · Pattern — ruled grid footer
2
2
  // Storybook: Components/FooterReveal → Pattern — ruled grid footer (?path=/story/components-footerreveal--ruled-grid-footer-pattern)
3
3
  // Show code — copy verbatim and keep this header; upgrades find pasted patterns by it.
4
4
 
@@ -1,4 +1,4 @@
1
- // @thewhatmatters/wmds@0.3.0 · Pattern — marketing hero with sequenced gallery
1
+ // @thewhatmatters/wmds@0.4.0 · Pattern — marketing hero with sequenced gallery
2
2
  // Storybook: Components/FooterReveal → Pattern — marketing hero with sequenced gallery (?path=/story/components-footerreveal--sequenced-marketing-hero)
3
3
  // Show code — copy verbatim and keep this header; upgrades find pasted patterns by it.
4
4
 
@@ -1,4 +1,4 @@
1
- // @thewhatmatters/wmds@0.3.0 · Pattern — two-line intro
1
+ // @thewhatmatters/wmds@0.4.0 · Pattern — two-line intro
2
2
  // Storybook: Components/HeroIntro → Pattern — two-line intro (?path=/story/components-herointro--two-line-intro)
3
3
  // Show code — copy verbatim and keep this header; upgrades find pasted patterns by it.
4
4
 
@@ -1,4 +1,4 @@
1
- // @thewhatmatters/wmds@0.3.0 · Pattern — marketing hero
1
+ // @thewhatmatters/wmds@0.4.0 · Pattern — marketing hero
2
2
  // Storybook: Components/HeroTileStack → Pattern — marketing hero (?path=/story/components-herotilestack--marketing-hero-pattern)
3
3
  // Show code — copy verbatim and keep this header; upgrades find pasted patterns by it.
4
4
 
@@ -1,4 +1,4 @@
1
- // @thewhatmatters/wmds@0.3.0 · Pattern — marketing hero text sequence
1
+ // @thewhatmatters/wmds@0.4.0 · Pattern — marketing hero text sequence
2
2
  // Storybook: Components/HeroTileStack → Pattern — marketing hero text sequence (?path=/story/components-herotilestack--marketing-hero-text-sequence)
3
3
  // Show code — copy verbatim and keep this header; upgrades find pasted patterns by it.
4
4
 
@@ -1,4 +1,4 @@
1
- // @thewhatmatters/wmds@0.3.0 · Marketing hero with gallery intro
1
+ // @thewhatmatters/wmds@0.4.0 · Marketing hero with gallery intro
2
2
  // Storybook: Components/HeroTileStack → Marketing hero with gallery intro (?path=/story/components-herotilestack--marketing-hero-with-gallery-intro)
3
3
  // Show code — copy verbatim and keep this header; upgrades find pasted patterns by it.
4
4
 
@@ -1,4 +1,4 @@
1
- // @thewhatmatters/wmds@0.3.0 · Pattern — booked
1
+ // @thewhatmatters/wmds@0.4.0 · Pattern — booked
2
2
  // Storybook: Components/IntakeConfirmation → Pattern — booked (?path=/story/components-intakeconfirmation--booked-pattern)
3
3
  // Show code — copy verbatim and keep this header; upgrades find pasted patterns by it.
4
4
 
@@ -1,4 +1,4 @@
1
- // @thewhatmatters/wmds@0.3.0 · Pattern — emailed
1
+ // @thewhatmatters/wmds@0.4.0 · Pattern — emailed
2
2
  // Storybook: Components/IntakeConfirmation → Pattern — emailed (?path=/story/components-intakeconfirmation--emailed-pattern)
3
3
  // Show code — copy verbatim and keep this header; upgrades find pasted patterns by it.
4
4
 
@@ -1,4 +1,4 @@
1
- // @thewhatmatters/wmds@0.3.0 · Pattern — about you
1
+ // @thewhatmatters/wmds@0.4.0 · Pattern — about you
2
2
  // Storybook: Components/IntakeForm → Pattern — about you (?path=/story/components-intakeform--about-you-pattern)
3
3
  // Show code — copy verbatim and keep this header; upgrades find pasted patterns by it.
4
4
 
@@ -1,4 +1,4 @@
1
- // @thewhatmatters/wmds@0.3.0 · Pattern — intake modal
1
+ // @thewhatmatters/wmds@0.4.0 · Pattern — intake modal
2
2
  // Storybook: Components/IntakeModal → Pattern — intake modal (?path=/story/components-intakemodal--intake-modal-pattern)
3
3
  // Show code — copy verbatim and keep this header; upgrades find pasted patterns by it.
4
4
 
@@ -1,4 +1,4 @@
1
- // @thewhatmatters/wmds@0.3.0 · Pattern — command row
1
+ // @thewhatmatters/wmds@0.4.0 · Pattern — command row
2
2
  // Storybook: Components/Kbd → Pattern — command row (?path=/story/components-kbd--command-row)
3
3
  // Show code — copy verbatim and keep this header; upgrades find pasted patterns by it.
4
4
 
@@ -1,4 +1,4 @@
1
- // @thewhatmatters/wmds@0.3.0 · Pattern — numbered choice keys
1
+ // @thewhatmatters/wmds@0.4.0 · Pattern — numbered choice keys
2
2
  // Storybook: Components/Kbd → Pattern — numbered choice keys (?path=/story/components-kbd--numbered-choices)
3
3
  // Show code — copy verbatim and keep this header; upgrades find pasted patterns by it.
4
4
 
@@ -1,4 +1,4 @@
1
- // @thewhatmatters/wmds@0.3.0 · Pattern — keyboard shortcut
1
+ // @thewhatmatters/wmds@0.4.0 · Pattern — keyboard shortcut
2
2
  // Storybook: Components/Kbd → Pattern — keyboard shortcut (?path=/story/components-kbd--shortcut)
3
3
  // Show code — copy verbatim and keep this header; upgrades find pasted patterns by it.
4
4
 
@@ -1,4 +1,4 @@
1
- // @thewhatmatters/wmds@0.3.0 · Pattern — action menu
1
+ // @thewhatmatters/wmds@0.4.0 · Pattern — action menu
2
2
  // Storybook: Components/MoreMenu → Pattern — action menu (?path=/story/components-moremenu--action-menu)
3
3
  // Show code — copy verbatim and keep this header; upgrades find pasted patterns by it.
4
4
 
@@ -1,4 +1,4 @@
1
- // @thewhatmatters/wmds@0.3.0 · Pattern — Card header cluster
1
+ // @thewhatmatters/wmds@0.4.0 · Pattern — Card header cluster
2
2
  // Storybook: Components/MoreMenu → Pattern — Card header cluster (?path=/story/components-moremenu--in-card-header)
3
3
  // Show code — copy verbatim and keep this header; upgrades find pasted patterns by it.
4
4
 
@@ -1,4 +1,4 @@
1
- // @thewhatmatters/wmds@0.3.0 · Pattern — side nav (settings)
1
+ // @thewhatmatters/wmds@0.4.0 · Pattern — side nav (settings)
2
2
  // Storybook: Components/NavList → Pattern — side nav (settings) (?path=/story/components-navlist--side-nav-settings)
3
3
  // Show code — copy verbatim and keep this header; upgrades find pasted patterns by it.
4
4
 
@@ -1,4 +1,4 @@
1
- // @thewhatmatters/wmds@0.3.0 · Pattern — app header
1
+ // @thewhatmatters/wmds@0.4.0 · Pattern — app header
2
2
  // Storybook: Components/PageHeader → Pattern — app header (?path=/story/components-pageheader--app-header-pattern)
3
3
  // Show code — copy verbatim and keep this header; upgrades find pasted patterns by it.
4
4