@thewhatmatters/wmds 0.4.9 → 0.4.28

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 (406) hide show
  1. package/CHANGELOG.md +303 -0
  2. package/CONSUMING.md +62 -1
  3. package/README.md +1 -1
  4. package/bin/wmds-check.mjs +47 -0
  5. package/dist/colors.css +92 -0
  6. package/dist/components/atoms/Badge/Badge.d.ts +13 -5
  7. package/dist/components/atoms/Badge/Badge.d.ts.map +1 -1
  8. package/dist/components/atoms/Badge/Badge.js +56 -48
  9. package/dist/components/atoms/Badge/badgeStyles.d.ts +15 -0
  10. package/dist/components/atoms/Badge/badgeStyles.d.ts.map +1 -1
  11. package/dist/components/atoms/Badge/badgeStyles.js +42 -20
  12. package/dist/components/atoms/Band/Band.d.ts +27 -0
  13. package/dist/components/atoms/Band/Band.d.ts.map +1 -0
  14. package/dist/components/atoms/Band/Band.js +22 -0
  15. package/dist/components/atoms/Band/bandStyles.d.ts +20 -0
  16. package/dist/components/atoms/Band/bandStyles.d.ts.map +1 -0
  17. package/dist/components/atoms/Band/bandStyles.js +23 -0
  18. package/dist/components/atoms/Button/Button.d.ts +1 -1
  19. package/dist/components/atoms/Button/Button.d.ts.map +1 -1
  20. package/dist/components/atoms/Button/Button.js +67 -48
  21. package/dist/components/atoms/Button/ButtonStatusButton.d.ts.map +1 -1
  22. package/dist/components/atoms/Button/ButtonStatusButton.js +12 -5
  23. package/dist/components/atoms/Button/buttonStatusMotion.d.ts.map +1 -1
  24. package/dist/components/atoms/Button/buttonStatusMotion.js +6 -1
  25. package/dist/components/atoms/Button/buttonStyles.d.ts +2 -2
  26. package/dist/components/atoms/Button/buttonStyles.d.ts.map +1 -1
  27. package/dist/components/atoms/Button/buttonStyles.js +16 -14
  28. package/dist/components/atoms/Checkbox/Checkbox.d.ts.map +1 -1
  29. package/dist/components/atoms/Checkbox/Checkbox.js +69 -68
  30. package/dist/components/atoms/Checkbox/checkboxStyles.d.ts +1 -1
  31. package/dist/components/atoms/Checkbox/checkboxStyles.d.ts.map +1 -1
  32. package/dist/components/atoms/Checkbox/checkboxStyles.js +1 -1
  33. package/dist/components/atoms/IconButton/IconButton.d.ts.map +1 -1
  34. package/dist/components/atoms/IconButton/IconButton.js +13 -12
  35. package/dist/components/atoms/IconButton/iconButtonStyles.d.ts +2 -2
  36. package/dist/components/atoms/IconButton/iconButtonStyles.d.ts.map +1 -1
  37. package/dist/components/atoms/IconButton/iconButtonStyles.js +1 -1
  38. package/dist/components/atoms/InlinePill/InlinePill.d.ts +42 -0
  39. package/dist/components/atoms/InlinePill/InlinePill.d.ts.map +1 -0
  40. package/dist/components/atoms/InlinePill/InlinePill.js +48 -0
  41. package/dist/components/atoms/InlinePill/inlinePillStyles.d.ts +27 -0
  42. package/dist/components/atoms/InlinePill/inlinePillStyles.d.ts.map +1 -0
  43. package/dist/components/atoms/InlinePill/inlinePillStyles.js +19 -0
  44. package/dist/components/atoms/Input/Input.d.ts +9 -4
  45. package/dist/components/atoms/Input/Input.d.ts.map +1 -1
  46. package/dist/components/atoms/Input/Input.js +59 -59
  47. package/dist/components/atoms/Input/inputShellStyles.d.ts +10 -4
  48. package/dist/components/atoms/Input/inputShellStyles.d.ts.map +1 -1
  49. package/dist/components/atoms/Input/inputShellStyles.js +40 -40
  50. package/dist/components/atoms/RiveHand/RiveHand.d.ts.map +1 -1
  51. package/dist/components/atoms/RiveHand/RiveHand.js +83 -81
  52. package/dist/components/atoms/Skeleton/skeletonStyles.js +1 -1
  53. package/dist/components/atoms/Switch/Switch.d.ts.map +1 -1
  54. package/dist/components/atoms/Switch/Switch.js +45 -44
  55. package/dist/components/atoms/Switch/switchStyles.d.ts +1 -1
  56. package/dist/components/atoms/Switch/switchStyles.d.ts.map +1 -1
  57. package/dist/components/atoms/Switch/switchStyles.js +1 -1
  58. package/dist/components/atoms/Table/Table.d.ts +54 -0
  59. package/dist/components/atoms/Table/Table.d.ts.map +1 -0
  60. package/dist/components/atoms/Table/Table.js +66 -0
  61. package/dist/components/atoms/Table/tableStyles.d.ts +18 -0
  62. package/dist/components/atoms/Table/tableStyles.d.ts.map +1 -0
  63. package/dist/components/atoms/Table/tableStyles.js +14 -0
  64. package/dist/components/atoms/TextArea/TextArea.d.ts +6 -0
  65. package/dist/components/atoms/TextArea/TextArea.d.ts.map +1 -1
  66. package/dist/components/atoms/TextArea/TextArea.js +86 -78
  67. package/dist/components/atoms/TextArea/textareaShellStyles.d.ts +2 -2
  68. package/dist/components/atoms/TextArea/textareaShellStyles.d.ts.map +1 -1
  69. package/dist/components/atoms/TextArea/textareaShellStyles.js +5 -5
  70. package/dist/components/molecules/Accordion/accordionStyles.d.ts +1 -1
  71. package/dist/components/molecules/Accordion/accordionStyles.d.ts.map +1 -1
  72. package/dist/components/molecules/Accordion/accordionStyles.js +1 -1
  73. package/dist/components/molecules/Breadcrumb/Breadcrumb.d.ts.map +1 -1
  74. package/dist/components/molecules/Breadcrumb/Breadcrumb.js +80 -122
  75. package/dist/components/molecules/Card/Card.d.ts +28 -6
  76. package/dist/components/molecules/Card/Card.d.ts.map +1 -1
  77. package/dist/components/molecules/Card/Card.js +83 -42
  78. package/dist/components/molecules/Card/cardStyles.d.ts +16 -1
  79. package/dist/components/molecules/Card/cardStyles.d.ts.map +1 -1
  80. package/dist/components/molecules/Card/cardStyles.js +19 -5
  81. package/dist/components/molecules/ChatQa/chatQaStyles.d.ts +1 -1
  82. package/dist/components/molecules/ChatQa/chatQaStyles.d.ts.map +1 -1
  83. package/dist/components/molecules/ChatQa/chatQaStyles.js +1 -1
  84. package/dist/components/molecules/Chip/chipStyles.js +9 -9
  85. package/dist/components/molecules/CopyField/CopyField.d.ts +41 -0
  86. package/dist/components/molecules/CopyField/CopyField.d.ts.map +1 -0
  87. package/dist/components/molecules/CopyField/CopyField.js +120 -0
  88. package/dist/components/molecules/CopyField/copyFieldStyles.d.ts +28 -0
  89. package/dist/components/molecules/CopyField/copyFieldStyles.d.ts.map +1 -0
  90. package/dist/components/molecules/CopyField/copyFieldStyles.js +7 -0
  91. package/dist/components/molecules/DisplayControls/DisplayControls.d.ts +16 -7
  92. package/dist/components/molecules/DisplayControls/DisplayControls.d.ts.map +1 -1
  93. package/dist/components/molecules/DisplayControls/DisplayControls.js +41 -39
  94. package/dist/components/molecules/DisplayControls/displayControlsState.d.ts +21 -0
  95. package/dist/components/molecules/DisplayControls/displayControlsState.d.ts.map +1 -1
  96. package/dist/components/molecules/DisplayControls/displayControlsState.js +46 -4
  97. package/dist/components/molecules/Dropdown/Dropdown.d.ts +1 -1
  98. package/dist/components/molecules/Dropdown/DropdownItem.d.ts +2 -2
  99. package/dist/components/molecules/Dropdown/DropdownItem.d.ts.map +1 -1
  100. package/dist/components/molecules/Dropdown/DropdownItem.js +30 -27
  101. package/dist/components/molecules/Dropdown/dropdownStyles.js +1 -1
  102. package/dist/components/molecules/Dropdown/resolveOverflow.d.ts +14 -0
  103. package/dist/components/molecules/Dropdown/resolveOverflow.d.ts.map +1 -0
  104. package/dist/components/{organisms/Tab/tabOverflow.js → molecules/Dropdown/resolveOverflow.js} +2 -2
  105. package/dist/components/molecules/Dropdown/useDropdownMenu.d.ts +70 -0
  106. package/dist/components/molecules/Dropdown/useDropdownMenu.d.ts.map +1 -0
  107. package/dist/components/molecules/Dropdown/useDropdownMenu.js +155 -0
  108. package/dist/components/molecules/Dropdown/useOverflowMenu.d.ts +71 -0
  109. package/dist/components/molecules/Dropdown/useOverflowMenu.d.ts.map +1 -0
  110. package/dist/components/molecules/Dropdown/useOverflowMenu.js +61 -0
  111. package/dist/components/molecules/Field/Field.d.ts.map +1 -1
  112. package/dist/components/molecules/Field/Field.js +11 -10
  113. package/dist/components/molecules/LogView/LogView.d.ts +31 -0
  114. package/dist/components/molecules/LogView/LogView.d.ts.map +1 -0
  115. package/dist/components/molecules/LogView/LogView.js +109 -0
  116. package/dist/components/molecules/LogView/logViewStyles.d.ts +11 -0
  117. package/dist/components/molecules/LogView/logViewStyles.d.ts.map +1 -0
  118. package/dist/components/molecules/LogView/logViewStyles.js +6 -0
  119. package/dist/components/molecules/NavList/NavList.d.ts +23 -4
  120. package/dist/components/molecules/NavList/NavList.d.ts.map +1 -1
  121. package/dist/components/molecules/NavList/NavList.js +65 -52
  122. package/dist/components/molecules/NavList/navListStyles.d.ts +2 -0
  123. package/dist/components/molecules/NavList/navListStyles.d.ts.map +1 -1
  124. package/dist/components/molecules/NavList/navListStyles.js +3 -3
  125. package/dist/components/molecules/PageHeader/PageHeader.js +3 -3
  126. package/dist/components/molecules/PillGroup/pillGroupStyles.js +1 -1
  127. package/dist/components/molecules/Search/searchStyles.js +1 -1
  128. package/dist/components/molecules/SegmentedControl/segmentedControlStyles.d.ts +1 -1
  129. package/dist/components/molecules/SegmentedControl/segmentedControlStyles.d.ts.map +1 -1
  130. package/dist/components/molecules/SegmentedControl/segmentedControlStyles.js +8 -8
  131. package/dist/components/molecules/Select/Select.d.ts +3 -1
  132. package/dist/components/molecules/Select/Select.d.ts.map +1 -1
  133. package/dist/components/molecules/Select/Select.js +75 -119
  134. package/dist/components/molecules/Select/selectStyles.js +3 -3
  135. package/dist/components/molecules/Stat/Stat.d.ts +31 -5
  136. package/dist/components/molecules/Stat/Stat.d.ts.map +1 -1
  137. package/dist/components/molecules/Stat/Stat.js +83 -49
  138. package/dist/components/molecules/Stat/statStyles.d.ts +24 -4
  139. package/dist/components/molecules/Stat/statStyles.d.ts.map +1 -1
  140. package/dist/components/molecules/Stat/statStyles.js +30 -13
  141. package/dist/components/molecules/TaskRows/TaskRows.d.ts +13 -3
  142. package/dist/components/molecules/TaskRows/TaskRows.d.ts.map +1 -1
  143. package/dist/components/molecules/TaskRows/TaskRows.js +81 -57
  144. package/dist/components/molecules/TaskRows/TaskRowsTable.d.ts +54 -0
  145. package/dist/components/molecules/TaskRows/TaskRowsTable.d.ts.map +1 -0
  146. package/dist/components/molecules/TaskRows/TaskRowsTable.js +200 -0
  147. package/dist/components/molecules/TaskRows/taskRowsStyles.d.ts +19 -1
  148. package/dist/components/molecules/TaskRows/taskRowsStyles.d.ts.map +1 -1
  149. package/dist/components/molecules/TaskRows/taskRowsStyles.js +7 -3
  150. package/dist/components/molecules/TextSequence/TextSequence.d.ts.map +1 -1
  151. package/dist/components/molecules/TextSequence/TextSequence.js +35 -35
  152. package/dist/components/organisms/AppShell/AppShell.d.ts +84 -0
  153. package/dist/components/organisms/AppShell/AppShell.d.ts.map +1 -0
  154. package/dist/components/organisms/AppShell/AppShell.js +231 -0
  155. package/dist/components/organisms/AppShell/appShellStyles.d.ts +20 -0
  156. package/dist/components/organisms/AppShell/appShellStyles.d.ts.map +1 -0
  157. package/dist/components/organisms/AppShell/appShellStyles.js +8 -0
  158. package/dist/components/organisms/Carousel/Carousel.d.ts +9 -1
  159. package/dist/components/organisms/Carousel/Carousel.d.ts.map +1 -1
  160. package/dist/components/organisms/Carousel/Carousel.js +220 -182
  161. package/dist/components/organisms/Carousel/carouselMath.d.ts +5 -0
  162. package/dist/components/organisms/Carousel/carouselMath.d.ts.map +1 -1
  163. package/dist/components/organisms/Carousel/carouselMath.js +9 -1
  164. package/dist/components/organisms/Carousel/carouselStyles.d.ts +2 -0
  165. package/dist/components/organisms/Carousel/carouselStyles.d.ts.map +1 -1
  166. package/dist/components/organisms/Carousel/carouselStyles.js +8 -7
  167. package/dist/components/organisms/Chart/Chart.d.ts +5 -1
  168. package/dist/components/organisms/Chart/Chart.d.ts.map +1 -1
  169. package/dist/components/organisms/Chart/Chart.js +126 -62
  170. package/dist/components/organisms/Chart/ChartLegend.d.ts +8 -1
  171. package/dist/components/organisms/Chart/ChartLegend.d.ts.map +1 -1
  172. package/dist/components/organisms/Chart/ChartLegend.js +43 -13
  173. package/dist/components/organisms/Chart/ChartSegmentedRing.d.ts +52 -0
  174. package/dist/components/organisms/Chart/ChartSegmentedRing.d.ts.map +1 -0
  175. package/dist/components/organisms/Chart/ChartSegmentedRing.js +95 -0
  176. package/dist/components/organisms/Chart/chartStyles.d.ts +32 -0
  177. package/dist/components/organisms/Chart/chartStyles.d.ts.map +1 -1
  178. package/dist/components/organisms/Chart/chartStyles.js +15 -3
  179. package/dist/components/organisms/ChatDock/ChatDock.d.ts.map +1 -1
  180. package/dist/components/organisms/ChatDock/ChatDock.js +29 -25
  181. package/dist/components/organisms/Dialog/AlertDialog.d.ts +7 -1
  182. package/dist/components/organisms/Dialog/AlertDialog.d.ts.map +1 -1
  183. package/dist/components/organisms/Dialog/AlertDialog.js +54 -50
  184. package/dist/components/organisms/Dialog/Dialog.d.ts.map +1 -1
  185. package/dist/components/organisms/Dialog/Dialog.js +52 -71
  186. package/dist/components/organisms/Dialog/OverlayPanelHeader.d.ts.map +1 -1
  187. package/dist/components/organisms/Dialog/OverlayPanelHeader.js +1 -0
  188. package/dist/components/organisms/Dialog/dialogStyles.d.ts +14 -1
  189. package/dist/components/organisms/Dialog/dialogStyles.d.ts.map +1 -1
  190. package/dist/components/organisms/Dialog/dialogStyles.js +3 -3
  191. package/dist/components/organisms/FilterPanel/FilterPanel.d.ts.map +1 -1
  192. package/dist/components/organisms/FilterPanel/FilterPanel.js +52 -42
  193. package/dist/components/organisms/IntakeModal/IntakeModal.d.ts +6 -1
  194. package/dist/components/organisms/IntakeModal/IntakeModal.d.ts.map +1 -1
  195. package/dist/components/organisms/IntakeModal/IntakeModal.js +54 -66
  196. package/dist/components/organisms/MoreMenu/MoreMenu.d.ts.map +1 -1
  197. package/dist/components/organisms/MoreMenu/MoreMenu.js +45 -101
  198. package/dist/components/organisms/Panel/Panel.d.ts.map +1 -1
  199. package/dist/components/organisms/Panel/Panel.js +44 -53
  200. package/dist/components/organisms/Sheet/Sheet.d.ts +3 -1
  201. package/dist/components/organisms/Sheet/Sheet.d.ts.map +1 -1
  202. package/dist/components/organisms/Sheet/Sheet.js +66 -81
  203. package/dist/components/organisms/Sheet/sheetStyles.d.ts +8 -2
  204. package/dist/components/organisms/Sheet/sheetStyles.d.ts.map +1 -1
  205. package/dist/components/organisms/Sheet/sheetStyles.js +16 -11
  206. package/dist/components/organisms/SiteNav/SiteNav.d.ts +0 -9
  207. package/dist/components/organisms/SiteNav/SiteNav.d.ts.map +1 -1
  208. package/dist/components/organisms/SiteNav/SiteNav.js +236 -286
  209. package/dist/components/organisms/SiteNav/siteNavStyles.js +1 -1
  210. package/dist/components/organisms/Tab/Tab.d.ts.map +1 -1
  211. package/dist/components/organisms/Tab/Tab.js +77 -127
  212. package/dist/components/organisms/Tab/tabStyles.d.ts +2 -1
  213. package/dist/components/organisms/Tab/tabStyles.d.ts.map +1 -1
  214. package/dist/components/organisms/Tab/tabStyles.js +7 -7
  215. package/dist/fonts.css +10 -0
  216. package/dist/grid.css +38 -0
  217. package/dist/index.d.ts +16 -8
  218. package/dist/index.d.ts.map +1 -1
  219. package/dist/index.js +152 -139
  220. package/dist/lib/chartTheme.d.ts +11 -0
  221. package/dist/lib/chartTheme.d.ts.map +1 -1
  222. package/dist/lib/compositionAudit.d.ts.map +1 -1
  223. package/dist/lib/contrast.d.ts +11 -0
  224. package/dist/lib/contrast.d.ts.map +1 -0
  225. package/dist/lib/dialogOverlay.d.ts +34 -1
  226. package/dist/lib/dialogOverlay.d.ts.map +1 -1
  227. package/dist/lib/dialogOverlay.js +100 -23
  228. package/dist/lib/sheetParam/index.d.ts +3 -0
  229. package/dist/lib/sheetParam/index.d.ts.map +1 -0
  230. package/dist/lib/sheetParam/sheetParam.d.ts +15 -0
  231. package/dist/lib/sheetParam/sheetParam.d.ts.map +1 -0
  232. package/dist/lib/sheetParam/sheetParam.js +26 -0
  233. package/dist/lib/sheetParam/useSheetParam.d.ts +25 -0
  234. package/dist/lib/sheetParam/useSheetParam.d.ts.map +1 -0
  235. package/dist/lib/sheetParam/useSheetParam.js +29 -0
  236. package/dist/lib/typography.d.ts +1 -1
  237. package/dist/lib/typography.d.ts.map +1 -1
  238. package/dist/shape.css +24 -3
  239. package/dist/styles.css +1 -1
  240. package/dist/typography.css +55 -8
  241. package/docs/README.md +1 -1
  242. package/docs/component-contracts.md +101 -0
  243. package/docs/components.md +19 -12
  244. package/docs/exports.json +142 -15
  245. package/docs/patterns/components-accordion--flush.tsx +1 -1
  246. package/docs/patterns/components-appshell--portal-dashboard-pattern.tsx +176 -0
  247. package/docs/patterns/components-avatar--dropdown-row.tsx +1 -1
  248. package/docs/patterns/components-badge--outline-tags.tsx +1 -1
  249. package/docs/patterns/components-badge--status-pill.tsx +31 -0
  250. package/docs/patterns/components-badge--with-avatar.tsx +1 -1
  251. package/docs/patterns/components-band--page-in-bands.tsx +39 -0
  252. package/docs/patterns/components-breadcrumb--editorial.tsx +1 -1
  253. package/docs/patterns/components-breadcrumb--long-path.tsx +1 -1
  254. package/docs/patterns/components-breadcrumb--path.tsx +1 -1
  255. package/docs/patterns/components-breadcrumb--router-links.tsx +1 -1
  256. package/docs/patterns/components-button-button--copy-button.tsx +1 -1
  257. package/docs/patterns/components-button-button--destructive-action.tsx +1 -1
  258. package/docs/patterns/components-button-button--external-link.tsx +1 -1
  259. package/docs/patterns/components-button-button--ghost-action.tsx +1 -1
  260. package/docs/patterns/components-button-button--inverse-action.tsx +1 -1
  261. package/docs/patterns/components-button-button--link-render.tsx +1 -1
  262. package/docs/patterns/components-button-button--multi-state-badge.tsx +1 -1
  263. package/docs/patterns/components-button-button--outline-mono.tsx +1 -1
  264. package/docs/patterns/components-button-button--primary-action.tsx +1 -1
  265. package/docs/patterns/components-button-button--row-hug.tsx +1 -1
  266. package/docs/patterns/components-button-button--row-layout.tsx +1 -1
  267. package/docs/patterns/components-button-button--secondary-action.tsx +1 -1
  268. package/docs/patterns/components-button-button--suggestion-pills.tsx +1 -1
  269. package/docs/patterns/components-button-button--with-count.tsx +1 -1
  270. package/docs/patterns/components-button-button--with-icon.tsx +1 -1
  271. package/docs/patterns/components-button-floatingactionbutton--vertical-actions.tsx +1 -1
  272. package/docs/patterns/components-calembed--pattern-skip-in-footer.tsx +1 -1
  273. package/docs/patterns/components-card-card--body-slot-occupancy-history.tsx +1 -1
  274. package/docs/patterns/components-card-card--headerless-media.tsx +1 -1
  275. package/docs/patterns/components-card-card--outlined-layout.tsx +1 -1
  276. package/docs/patterns/components-card-card--pinned-height.tsx +1 -1
  277. package/docs/patterns/components-card-card--terminal-frame.tsx +48 -0
  278. package/docs/patterns/components-card-selectablecard--selectable-cards-pattern.tsx +1 -1
  279. package/docs/patterns/components-carousel--image-carousel.tsx +1 -1
  280. package/docs/patterns/components-chart--audience-activity-heatmap.tsx +1 -1
  281. package/docs/patterns/components-chart--cartesian-no-data-gaps.tsx +1 -1
  282. package/docs/patterns/components-chart--occupancy-history-in-card.tsx +1 -1
  283. package/docs/patterns/components-chart--occupancy-in-card.tsx +1 -1
  284. package/docs/patterns/components-chart--post-reach-distribution.tsx +1 -1
  285. package/docs/patterns/components-chart--ranked-audience-breakdown.tsx +1 -1
  286. package/docs/patterns/components-chart--revenue-by-line.tsx +68 -0
  287. package/docs/patterns/components-chart--segmented-ring-pattern.tsx +144 -0
  288. package/docs/patterns/components-chart--unit-grid-composition.tsx +1 -1
  289. package/docs/patterns/components-chatdock--pattern-chat-dock.tsx +1 -1
  290. package/docs/patterns/components-chatdock--pattern-start-project-gate.tsx +1 -1
  291. package/docs/patterns/components-chatqa--pattern-qa-with-reply.tsx +1 -1
  292. package/docs/patterns/components-checkbox-checkbox--default.tsx +1 -1
  293. package/docs/patterns/components-checkbox-checkbox--with-count.tsx +1 -1
  294. package/docs/patterns/components-checkbox-checkbox--with-description.tsx +1 -1
  295. package/docs/patterns/components-checkbox-checkboxgroup--default.tsx +1 -1
  296. package/docs/patterns/components-checkbox-checkboxgroup--option-counts.tsx +1 -1
  297. package/docs/patterns/components-copyfield--clipboard-blocked.tsx +9 -0
  298. package/docs/patterns/components-copyfield--copied.tsx +9 -0
  299. package/docs/patterns/components-copyfield--copy-key.tsx +9 -0
  300. package/docs/patterns/components-copyfield--on-navy.tsx +29 -0
  301. package/docs/patterns/components-descriptionlist--details.tsx +1 -1
  302. package/docs/patterns/components-descriptionlist--post-metadata.tsx +1 -1
  303. package/docs/patterns/components-dialog--alert-dialog-destructive.tsx +1 -1
  304. package/docs/patterns/components-dialog--alert-dialog-typed-confirmation.tsx +54 -0
  305. package/docs/patterns/components-dialog--default-dialog.tsx +1 -1
  306. package/docs/patterns/components-dialog--form-dialog.tsx +1 -1
  307. package/docs/patterns/components-displaycontrols--page-utilities.tsx +1 -1
  308. package/docs/patterns/components-displaycontrols--theme-switch.tsx +35 -0
  309. package/docs/patterns/components-field--horizontal-input.tsx +1 -1
  310. package/docs/patterns/components-field--horizontal-text-area.tsx +1 -1
  311. package/docs/patterns/components-field--multi-control.tsx +1 -1
  312. package/docs/patterns/components-filterpanel--panel.tsx +1 -1
  313. package/docs/patterns/components-footerreveal--marketing-hero-pattern.tsx +1 -1
  314. package/docs/patterns/components-footerreveal--marketing-hero-ruled-pattern.tsx +1 -1
  315. package/docs/patterns/components-footerreveal--marketing-hero-with-gallery-intro.tsx +1 -1
  316. package/docs/patterns/components-footerreveal--marketing-page-pattern.tsx +1 -1
  317. package/docs/patterns/components-footerreveal--ruled-grid-footer-pattern.tsx +1 -1
  318. package/docs/patterns/components-footerreveal--sequenced-marketing-hero.tsx +1 -1
  319. package/docs/patterns/components-herointro--two-line-intro.tsx +1 -1
  320. package/docs/patterns/components-herotilestack--marketing-hero-pattern.tsx +1 -1
  321. package/docs/patterns/components-herotilestack--marketing-hero-text-sequence.tsx +1 -1
  322. package/docs/patterns/components-herotilestack--marketing-hero-with-gallery-intro.tsx +1 -1
  323. package/docs/patterns/components-indexlist--post-index.tsx +1 -1
  324. package/docs/patterns/components-intakeconfirmation--booked-pattern.tsx +1 -1
  325. package/docs/patterns/components-intakeconfirmation--emailed-pattern.tsx +1 -1
  326. package/docs/patterns/components-intakeform--about-you-pattern.tsx +1 -1
  327. package/docs/patterns/components-intakeform--short-form-pattern.tsx +1 -1
  328. package/docs/patterns/components-intakemodal--intake-modal-pattern.tsx +1 -1
  329. package/docs/patterns/components-kbd--command-row.tsx +1 -1
  330. package/docs/patterns/components-kbd--numbered-choices.tsx +1 -1
  331. package/docs/patterns/components-kbd--shortcut.tsx +1 -1
  332. package/docs/patterns/components-linktile--resource-tile.tsx +1 -1
  333. package/docs/patterns/components-linktile--router-link.tsx +1 -1
  334. package/docs/patterns/components-logview--detail-pane.tsx +80 -0
  335. package/docs/patterns/components-logview--log-viewer.tsx +20 -0
  336. package/docs/patterns/components-moremenu--action-menu.tsx +1 -1
  337. package/docs/patterns/components-moremenu--in-card-header.tsx +1 -1
  338. package/docs/patterns/components-navlist--app-sidebar.tsx +118 -0
  339. package/docs/patterns/components-navlist--side-nav-settings.tsx +1 -1
  340. package/docs/patterns/components-pageheader--app-header-pattern.tsx +1 -1
  341. package/docs/patterns/components-pageheader--page-section-header.tsx +1 -1
  342. package/docs/patterns/components-pageheader--toolbar-header.tsx +1 -1
  343. package/docs/patterns/components-panel--end-detail-rail.tsx +1 -1
  344. package/docs/patterns/components-pillgroup--pill-group-pattern.tsx +1 -1
  345. package/docs/patterns/components-promptbar--pattern-prompt-bar.tsx +1 -1
  346. package/docs/patterns/components-prose--article-body.tsx +1 -1
  347. package/docs/patterns/components-radio-radiogroup--default.tsx +1 -1
  348. package/docs/patterns/components-scrollhorizontal--project-gallery-pattern.tsx +1 -1
  349. package/docs/patterns/components-scrollhorizontal--with-intro.tsx +1 -1
  350. package/docs/patterns/components-sectioncaption--column-caption.tsx +1 -1
  351. package/docs/patterns/components-sectioncaption--with-action.tsx +1 -1
  352. package/docs/patterns/components-sheet--bottom-sheet.tsx +1 -1
  353. package/docs/patterns/components-sheet--end-sheet.tsx +1 -1
  354. package/docs/patterns/components-sheet--side-sheet-header-actions.tsx +50 -0
  355. package/docs/patterns/components-sheet--side-sheet-url-deep-link.tsx +51 -0
  356. package/docs/patterns/components-sheet--side-sheet.tsx +38 -0
  357. package/docs/patterns/components-sitenav--brand-and-cta.tsx +1 -1
  358. package/docs/patterns/components-sitenav--centered-links.tsx +1 -1
  359. package/docs/patterns/components-sitenav--compact.tsx +1 -1
  360. package/docs/patterns/components-sitenav--marketing-header.tsx +1 -1
  361. package/docs/patterns/components-sitenav--mega-menu.tsx +1 -1
  362. package/docs/patterns/components-stat--hero-stat.tsx +54 -0
  363. package/docs/patterns/components-stat--insights-row.tsx +1 -1
  364. package/docs/patterns/components-stepprogress--step-progress-pattern.tsx +1 -1
  365. package/docs/patterns/components-switch--default.tsx +1 -1
  366. package/docs/patterns/components-switch--settings-row.tsx +1 -1
  367. package/docs/patterns/components-tab--settings-pages.tsx +1 -1
  368. package/docs/patterns/components-table--approvals-with-sheet.tsx +81 -0
  369. package/docs/patterns/components-table--approvals.tsx +223 -0
  370. package/docs/patterns/components-table--basic.tsx +60 -0
  371. package/docs/patterns/components-taskrows--action-details.tsx +1 -1
  372. package/docs/patterns/components-taskrows--capsules.tsx +1 -1
  373. package/docs/patterns/components-taskrows--card-with-status-rows.tsx +1 -1
  374. package/docs/patterns/components-taskrows--controlled-expand.tsx +1 -1
  375. package/docs/patterns/components-taskrows--custom-slots.tsx +1 -1
  376. package/docs/patterns/components-taskrows--needs-you-table.tsx +62 -0
  377. package/docs/patterns/components-taskrows--status-list.tsx +1 -1
  378. package/docs/patterns/components-taskrows--tag-chips.tsx +1 -1
  379. package/docs/patterns/components-textarea--save-status.tsx +32 -0
  380. package/docs/patterns/components-textlink--external-destination.tsx +1 -1
  381. package/docs/patterns/components-textlink--inline-prose.tsx +1 -1
  382. package/docs/patterns/components-textlink--quiet-title.tsx +1 -1
  383. package/docs/patterns/components-textlink--supporting-copy.tsx +1 -1
  384. package/docs/patterns/components-textsequence--default.tsx +1 -1
  385. package/docs/patterns/components-textsequence--reduced-motion.tsx +1 -1
  386. package/docs/patterns/components-textsequence--shapes.tsx +1 -1
  387. package/docs/patterns/components-tilegrid--masonry.tsx +1 -1
  388. package/docs/patterns/components-toast--stacked-notifications.tsx +1 -1
  389. package/docs/patterns/components-tooltip--controlled.tsx +1 -1
  390. package/docs/patterns/components-tooltip--disabled-control.tsx +1 -1
  391. package/docs/patterns/components-tooltip--icon-action.tsx +1 -1
  392. package/docs/patterns/components-tooltip--keyboard-shortcut.tsx +1 -1
  393. package/docs/patterns/components-tooltip--placement.tsx +1 -1
  394. package/docs/patterns/foundations-scroll-fade--horizontal-rail.tsx +1 -1
  395. package/docs/patterns/foundations-scroll-fade--overflowing-list.tsx +1 -1
  396. package/docs/patterns/guides-chart-explorations--comparison-gallery.tsx +1 -1
  397. package/docs/patterns/guides-filter-panel--filtered-grid.tsx +1 -1
  398. package/docs/patterns/guides-filter-panel--filtered-index.tsx +1 -1
  399. package/docs/patterns/guides-overlay-flows--notification-preferences.tsx +1 -1
  400. package/docs/patterns/guides-post-page--post-page.tsx +1 -1
  401. package/docs/patterns/guides-profile-typography--editorial-profile.tsx +1 -1
  402. package/docs/patterns/guides-resource-detail--detail.tsx +1 -1
  403. package/docs/patterns/index.json +193 -1
  404. package/package.json +1 -1
  405. package/dist/components/organisms/Tab/tabOverflow.d.ts +0 -14
  406. package/dist/components/organisms/Tab/tabOverflow.d.ts.map +0 -1
@@ -0,0 +1,54 @@
1
+ // @thewhatmatters/wmds@0.4.28 · Pattern — alert dialog (typed confirmation delete)
2
+ // Storybook: Components/Dialog → Pattern — alert dialog (typed confirmation delete) (?path=/story/components-dialog--alert-dialog-typed-confirmation)
3
+ // Show code — copy verbatim and keep this header; upgrades find pasted patterns by it.
4
+
5
+ import { useState } from "react";
6
+ import { AlertDialog, Button, Input } from "@thewhatmatters/wmds";
7
+
8
+ function normalizeHandle(value: string): string {
9
+ return value.trim().replace(/^@/, "").toLowerCase();
10
+ }
11
+
12
+ export function DeleteAccountAlert({ handle }: { handle: string }) {
13
+ const [open, setOpen] = useState(false);
14
+ const [typed, setTyped] = useState("");
15
+ const matches = typed.trim() !== "" && normalizeHandle(typed) === normalizeHandle(handle);
16
+
17
+ function handleOpenChange(next: boolean) {
18
+ setOpen(next);
19
+ if (!next) {
20
+ setTyped("");
21
+ }
22
+ }
23
+
24
+ return (
25
+ <>
26
+ <Button role="destructive" onClick={() => setOpen(true)}>
27
+ Delete account
28
+ </Button>
29
+ <AlertDialog
30
+ open={open}
31
+ onOpenChange={handleOpenChange}
32
+ title="Delete this account?"
33
+ description="This removes the account and everything it owns. You cannot undo this action."
34
+ cancelLabel="Keep account"
35
+ confirmLabel="Delete account"
36
+ confirmRole="destructive"
37
+ confirmDisabled={!matches}
38
+ onConfirm={() => handleOpenChange(false)}
39
+ >
40
+ <Input
41
+ label={
42
+ <>
43
+ Type <strong>{handle}</strong> to confirm
44
+ </>
45
+ }
46
+ value={typed}
47
+ onChange={(event) => setTyped(event.target.value)}
48
+ autoComplete="off"
49
+ spellCheck={false}
50
+ />
51
+ </AlertDialog>
52
+ </>
53
+ );
54
+ }
@@ -1,4 +1,4 @@
1
- // @thewhatmatters/wmds@0.4.9 · Pattern — dialog
1
+ // @thewhatmatters/wmds@0.4.28 · 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.4.9 · Pattern — form dialog
1
+ // @thewhatmatters/wmds@0.4.28 · 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.4.9 · Pattern — page display controls
1
+ // @thewhatmatters/wmds@0.4.28 · 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
 
@@ -0,0 +1,35 @@
1
+ // @thewhatmatters/wmds@0.4.28 · Pattern — theme switch
2
+ // Storybook: Components/DisplayControls → Pattern — theme switch (?path=/story/components-displaycontrols--theme-switch)
3
+ // Show code — copy verbatim and keep this header; upgrades find pasted patterns by it.
4
+
5
+ import { useSyncExternalStore } from "react";
6
+ import {
7
+ commitDisplayTheme,
8
+ DisplayControls,
9
+ displayThemeNoFlashScript,
10
+ readDisplayTheme,
11
+ subscribeDisplayTheme,
12
+ type DisplayControlThemeMode,
13
+ } from "@thewhatmatters/wmds";
14
+
15
+ export { displayThemeNoFlashScript };
16
+
17
+ function themeServerSnapshot(): DisplayControlThemeMode {
18
+ return "auto";
19
+ }
20
+
21
+ export function ThemeSwitch() {
22
+ const theme = useSyncExternalStore(subscribeDisplayTheme, readDisplayTheme, themeServerSnapshot);
23
+
24
+ return (
25
+ <div className="flex w-full max-w-xs items-center justify-between gap-3 rounded-xl border border-border bg-surface p-3">
26
+ <span className="type-label">Appearance</span>
27
+ <DisplayControls
28
+ controls="theme"
29
+ aria-label="Appearance"
30
+ theme={theme}
31
+ onThemeChange={commitDisplayTheme}
32
+ />
33
+ </div>
34
+ );
35
+ }
@@ -1,4 +1,4 @@
1
- // @thewhatmatters/wmds@0.4.9 · Pattern — horizontal input
1
+ // @thewhatmatters/wmds@0.4.28 · 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.4.9 · Pattern — horizontal textarea
1
+ // @thewhatmatters/wmds@0.4.28 · 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.4.9 · Pattern — multi-control
1
+ // @thewhatmatters/wmds@0.4.28 · 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.4.9 · Pattern — filter panel
1
+ // @thewhatmatters/wmds@0.4.28 · Pattern — filter panel
2
2
  // Storybook: Components/FilterPanel → Pattern — filter panel (?path=/story/components-filterpanel--panel)
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.4.9 · Pattern — marketing hero
1
+ // @thewhatmatters/wmds@0.4.28 · 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.4.9 · Pattern — marketing hero ruled grid
1
+ // @thewhatmatters/wmds@0.4.28 · 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.4.9 · Marketing hero with gallery intro
1
+ // @thewhatmatters/wmds@0.4.28 · 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.4.9 · Pattern — marketing page
1
+ // @thewhatmatters/wmds@0.4.28 · 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.4.9 · Pattern — ruled grid footer
1
+ // @thewhatmatters/wmds@0.4.28 · 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.4.9 · Pattern — marketing hero with sequenced gallery
1
+ // @thewhatmatters/wmds@0.4.28 · 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.4.9 · Pattern — two-line intro
1
+ // @thewhatmatters/wmds@0.4.28 · 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.4.9 · Pattern — marketing hero
1
+ // @thewhatmatters/wmds@0.4.28 · 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.4.9 · Pattern — marketing hero text sequence
1
+ // @thewhatmatters/wmds@0.4.28 · 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.4.9 · Marketing hero with gallery intro
1
+ // @thewhatmatters/wmds@0.4.28 · 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.4.9 · Pattern — post index
1
+ // @thewhatmatters/wmds@0.4.28 · Pattern — post index
2
2
  // Storybook: Components/IndexList → Pattern — post index (?path=/story/components-indexlist--post-index)
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.4.9 · Pattern — booked
1
+ // @thewhatmatters/wmds@0.4.28 · 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.4.9 · Pattern — emailed
1
+ // @thewhatmatters/wmds@0.4.28 · 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.4.9 · Pattern — about you
1
+ // @thewhatmatters/wmds@0.4.28 · 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.4.9 · Pattern — short form
1
+ // @thewhatmatters/wmds@0.4.28 · Pattern — short form
2
2
  // Storybook: Components/IntakeForm → Pattern — short form (?path=/story/components-intakeform--short-form-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.4.9 · Pattern — intake modal
1
+ // @thewhatmatters/wmds@0.4.28 · 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.4.9 · Pattern — command row
1
+ // @thewhatmatters/wmds@0.4.28 · 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.4.9 · Pattern — numbered choice keys
1
+ // @thewhatmatters/wmds@0.4.28 · 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.4.9 · Pattern — keyboard shortcut
1
+ // @thewhatmatters/wmds@0.4.28 · 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.4.9 · Pattern — resource tile
1
+ // @thewhatmatters/wmds@0.4.28 · Pattern — resource tile
2
2
  // Storybook: Components/LinkTile → Pattern — resource tile (?path=/story/components-linktile--resource-tile)
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.4.9 · Pattern — router link
1
+ // @thewhatmatters/wmds@0.4.28 · Pattern — router link
2
2
  // Storybook: Components/LinkTile → Pattern — router link (?path=/story/components-linktile--router-link)
3
3
  // Show code — copy verbatim and keep this header; upgrades find pasted patterns by it.
4
4
 
@@ -0,0 +1,80 @@
1
+ // @thewhatmatters/wmds@0.4.28 · Pattern — detail pane
2
+ // Storybook: Components/LogView → Pattern — detail pane (?path=/story/components-logview--detail-pane)
3
+ // Show code — copy verbatim and keep this header; upgrades find pasted patterns by it.
4
+
5
+ import { useState } from "react";
6
+ import { ChevronLeft, ChevronRight } from "lucide-react";
7
+ import { Badge, IconButton, LogView, Stat } from "@thewhatmatters/wmds";
8
+
9
+ const scans = [
10
+ {
11
+ title: "Scan 1842",
12
+ tags: ["API", "Nightly"],
13
+ lines: [
14
+ "09:14:02 connected to etheris",
15
+ "09:14:08 walking /api/orders",
16
+ "09:14:21 12 findings",
17
+ "09:14:22 coverage 76%",
18
+ "09:16:14 delta +8 vs last scan",
19
+ "09:18:02 session closed",
20
+ ],
21
+ },
22
+ {
23
+ title: "Scan 1841",
24
+ tags: ["API", "Nightly"],
25
+ lines: ["08:02:11 connected to etheris", "08:06:40 4 findings", "08:07:01 session closed"],
26
+ },
27
+ ];
28
+
29
+ export function DetailPane() {
30
+ const [index, setIndex] = useState(0);
31
+ const [follow, setFollow] = useState(true);
32
+ const scan = scans[index] ?? scans[0];
33
+
34
+ return (
35
+ <section
36
+ data-theme="dark"
37
+ className="flex w-full max-w-3xl flex-col gap-4 bg-body p-4 text-fg"
38
+ aria-label="Scan detail"
39
+ >
40
+ <div className="flex items-center justify-between gap-3">
41
+ <h2 className="type-heading-2">{scan.title}</h2>
42
+ <div className="flex gap-2">
43
+ <IconButton
44
+ aria-label="Previous scan"
45
+ icon={<ChevronLeft />}
46
+ size="sm"
47
+ disabled={index === 0}
48
+ onClick={() => setIndex(index - 1)}
49
+ />
50
+ <IconButton
51
+ aria-label="Next scan"
52
+ icon={<ChevronRight />}
53
+ size="sm"
54
+ disabled={index === scans.length - 1}
55
+ onClick={() => setIndex(index + 1)}
56
+ />
57
+ </div>
58
+ </div>
59
+ <div className="flex flex-wrap gap-2">
60
+ {scan.tags.map((tag) => (
61
+ <Badge key={tag} size="sm" emphasis="outline" mono>
62
+ {tag}
63
+ </Badge>
64
+ ))}
65
+ </div>
66
+ <Stat.Group columns={2} aria-label="Scan metrics">
67
+ <Stat label="Findings" value="12" detail="3 new" />
68
+ <Stat label="Coverage" value="76%" detail="of 1,000 paths" />
69
+ <Stat label="Duration" value="4m 12s" detail="started 09:14" />
70
+ <Stat
71
+ label="Delta"
72
+ value="+8"
73
+ trend={{ value: "+8", direction: "up" }}
74
+ detail="vs last scan"
75
+ />
76
+ </Stat.Group>
77
+ <LogView label="Scan log" lines={scan.lines} follow={follow} onFollowChange={setFollow} />
78
+ </section>
79
+ );
80
+ }
@@ -0,0 +1,20 @@
1
+ // @thewhatmatters/wmds@0.4.28 · Pattern — log viewer
2
+ // Storybook: Components/LogView → Pattern — log viewer (?path=/story/components-logview--log-viewer)
3
+ // Show code — copy verbatim and keep this header; upgrades find pasted patterns by it.
4
+
5
+ import { useState } from "react";
6
+ import { LogView } from "@thewhatmatters/wmds";
7
+
8
+ const lines = [
9
+ "09:14:02 connected to etheris",
10
+ "09:14:08 walking /api/orders",
11
+ "09:14:21 12 findings",
12
+ "09:14:22 coverage 76%",
13
+ "09:16:14 delta +8 vs last scan",
14
+ "09:18:02 session closed",
15
+ ];
16
+
17
+ export function LogViewer() {
18
+ const [follow, setFollow] = useState(true);
19
+ return <LogView label="Scan log" lines={lines} follow={follow} onFollowChange={setFollow} />;
20
+ }
@@ -1,4 +1,4 @@
1
- // @thewhatmatters/wmds@0.4.9 · Pattern — action menu
1
+ // @thewhatmatters/wmds@0.4.28 · 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.4.9 · Pattern — Card header cluster
1
+ // @thewhatmatters/wmds@0.4.28 · 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
 
@@ -0,0 +1,118 @@
1
+ // @thewhatmatters/wmds@0.4.28 · Pattern — app sidebar
2
+ // Storybook: Components/NavList → Pattern — app sidebar (?path=/story/components-navlist--app-sidebar)
3
+ // Show code — copy verbatim and keep this header; upgrades find pasted patterns by it.
4
+
5
+ import { useState } from "react";
6
+ import { Home, ListFilter, Menu, Package, Plane, Rocket, SunMoon, Utensils } from "lucide-react";
7
+ import {
8
+ Button,
9
+ ButtonIcon,
10
+ IconButton,
11
+ NavList,
12
+ PageHeader,
13
+ Search,
14
+ Sheet,
15
+ Status,
16
+ type NavListSectionDef,
17
+ } from "@thewhatmatters/wmds";
18
+
19
+ const sections: NavListSectionDef[] = [
20
+ {
21
+ label: "Pinned",
22
+ labelAlign: "section",
23
+ action: (
24
+ <IconButton role="ghost" size="xs" aria-label="Filter pinned" icon={<ListFilter strokeWidth={2} />} />
25
+ ),
26
+ items: [
27
+ { id: "melbourne", label: "Weekend in Melbourne", href: "/tasks/melbourne", icon: <Plane strokeWidth={1.75} /> },
28
+ {
29
+ id: "apartment",
30
+ label: "Find a new apartment",
31
+ href: "/tasks/apartment",
32
+ icon: <Home strokeWidth={1.75} />,
33
+ trailing: <Status variant="dot" tone="warning" label="Unread" />,
34
+ },
35
+ { id: "dinner", label: "Plan team dinner", href: "/tasks/dinner", icon: <Utensils strokeWidth={1.75} /> },
36
+ ],
37
+ },
38
+ {
39
+ label: "Recent",
40
+ labelAlign: "section",
41
+ items: [
42
+ {
43
+ id: "ikea",
44
+ label: "Track my IKEA order",
45
+ href: "/tasks/ikea",
46
+ icon: <Package strokeWidth={1.75} />,
47
+ trailing: <Status variant="dot" tone="warning" label="Unread" pulsing />,
48
+ },
49
+ ],
50
+ },
51
+ ];
52
+
53
+ function SidebarBody({
54
+ activeId,
55
+ onSelect,
56
+ }: {
57
+ activeId: string;
58
+ onSelect: (id: string) => void;
59
+ }) {
60
+ return (
61
+ <div className="flex h-full min-h-0 w-52 flex-col bg-body">
62
+ <div className="flex items-center gap-2 px-4 py-4">
63
+ <span className="inline-flex size-7 items-center justify-center rounded-lg bg-brand-tint text-brand-outline">
64
+ <ButtonIcon size="xs"><Rocket strokeWidth={2} /></ButtonIcon>
65
+ </span>
66
+ <span className="type-label text-fg">Orbit</span>
67
+ </div>
68
+ <div className="px-3 pb-2">
69
+ <Search size="sm" actionLabel="Search" aria-label="Search tasks" placeholder="Search" />
70
+ </div>
71
+ <div className="min-h-0 flex-1 overflow-y-auto">
72
+ <NavList aria-label="Tasks" sections={sections} activeId={activeId} onSelect={onSelect} />
73
+ </div>
74
+ <div className="mt-auto px-2 py-2">
75
+ <Button role="ghost" size="sm" align="start" className="w-full" icon={<SunMoon strokeWidth={2} />}>
76
+ Appearance
77
+ </Button>
78
+ </div>
79
+ </div>
80
+ );
81
+ }
82
+
83
+ export function AppSidebar() {
84
+ const [open, setOpen] = useState(false);
85
+ const [activeId, setActiveId] = useState("ikea");
86
+
87
+ return (
88
+ <div className="flex h-full min-h-0 w-full flex-col bg-body lg:flex-row">
89
+ <div className="max-lg:hidden h-full lg:block">
90
+ <SidebarBody activeId={activeId} onSelect={setActiveId} />
91
+ </div>
92
+ <div className="flex min-w-0 flex-1 flex-col">
93
+ <PageHeader
94
+ variant="app"
95
+ className="lg:hidden"
96
+ title="Overview"
97
+ start={
98
+ <IconButton
99
+ role="ghost"
100
+ size="sm"
101
+ aria-label="Open menu"
102
+ icon={<Menu strokeWidth={2} />}
103
+ onClick={() => setOpen(true)}
104
+ />
105
+ }
106
+ />
107
+ <div className="max-lg:hidden px-4 py-6 lg:block">
108
+ <PageHeader variant="page" title="Overview" />
109
+ </div>
110
+ </div>
111
+ <Sheet open={open} onOpenChange={setOpen}>
112
+ <Sheet.Content side="start" title="Menu">
113
+ <SidebarBody activeId={activeId} onSelect={setActiveId} />
114
+ </Sheet.Content>
115
+ </Sheet>
116
+ </div>
117
+ );
118
+ }
@@ -1,4 +1,4 @@
1
- // @thewhatmatters/wmds@0.4.9 · Pattern — side nav (settings)
1
+ // @thewhatmatters/wmds@0.4.28 · 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.4.9 · Pattern — app header
1
+ // @thewhatmatters/wmds@0.4.28 · 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
 
@@ -1,4 +1,4 @@
1
- // @thewhatmatters/wmds@0.4.9 · Pattern — page header
1
+ // @thewhatmatters/wmds@0.4.28 · Pattern — page header
2
2
  // Storybook: Components/PageHeader → Pattern — page header (?path=/story/components-pageheader--page-section-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.4.9 · Pattern — toolbar header
1
+ // @thewhatmatters/wmds@0.4.28 · Pattern — toolbar header
2
2
  // Storybook: Components/PageHeader → Pattern — toolbar header (?path=/story/components-pageheader--toolbar-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.4.9 · Pattern — end detail rail
1
+ // @thewhatmatters/wmds@0.4.28 · Pattern — end detail rail
2
2
  // Storybook: Components/Panel → Pattern — end detail rail (?path=/story/components-panel--end-detail-rail)
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.4.9 · Pattern — pill group
1
+ // @thewhatmatters/wmds@0.4.28 · Pattern — pill group
2
2
  // Storybook: Components/PillGroup → Pattern — pill group (?path=/story/components-pillgroup--pill-group-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.4.9 · Pattern — prompt bar
1
+ // @thewhatmatters/wmds@0.4.28 · Pattern — prompt bar
2
2
  // Storybook: Components/PromptBar → Pattern — prompt bar (?path=/story/components-promptbar--pattern-prompt-bar)
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.4.9 · Pattern — article body
1
+ // @thewhatmatters/wmds@0.4.28 · Pattern — article body
2
2
  // Storybook: Components/Prose → Pattern — article body (?path=/story/components-prose--article-body)
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.4.9 · Pattern — vertical
1
+ // @thewhatmatters/wmds@0.4.28 · Pattern — vertical
2
2
  // Storybook: Components/Radio/RadioGroup → Pattern — vertical (?path=/story/components-radio-radiogroup--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.4.9 · Pattern — project gallery
1
+ // @thewhatmatters/wmds@0.4.28 · Pattern — project gallery
2
2
  // Storybook: Components/ScrollHorizontal → Pattern — project gallery (?path=/story/components-scrollhorizontal--project-gallery-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.4.9 · Pattern — gallery intro
1
+ // @thewhatmatters/wmds@0.4.28 · Pattern — gallery intro
2
2
  // Storybook: Components/ScrollHorizontal → Pattern — gallery intro (?path=/story/components-scrollhorizontal--with-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.4.9 · Pattern — column caption
1
+ // @thewhatmatters/wmds@0.4.28 · Pattern — column caption
2
2
  // Storybook: Components/SectionCaption → Pattern — column caption (?path=/story/components-sectioncaption--column-caption)
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.4.9 · Pattern — caption with an action
1
+ // @thewhatmatters/wmds@0.4.28 · Pattern — caption with an action
2
2
  // Storybook: Components/SectionCaption → Pattern — caption with an action (?path=/story/components-sectioncaption--with-action)
3
3
  // Show code — copy verbatim and keep this header; upgrades find pasted patterns by it.
4
4