@thewhatmatters/wmds 0.4.9 → 0.4.27

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 (302) hide show
  1. package/CHANGELOG.md +253 -0
  2. package/README.md +1 -1
  3. package/dist/components/atoms/Badge/Badge.d.ts +13 -5
  4. package/dist/components/atoms/Badge/Badge.d.ts.map +1 -1
  5. package/dist/components/atoms/Badge/Badge.js +56 -48
  6. package/dist/components/atoms/Badge/badgeStyles.d.ts +15 -0
  7. package/dist/components/atoms/Badge/badgeStyles.d.ts.map +1 -1
  8. package/dist/components/atoms/Badge/badgeStyles.js +38 -16
  9. package/dist/components/atoms/Button/Button.d.ts +1 -1
  10. package/dist/components/atoms/Button/Button.d.ts.map +1 -1
  11. package/dist/components/atoms/Button/Button.js +67 -48
  12. package/dist/components/atoms/Button/buttonStatusMotion.d.ts.map +1 -1
  13. package/dist/components/atoms/Button/buttonStatusMotion.js +6 -1
  14. package/dist/components/atoms/Button/buttonStyles.d.ts +1 -1
  15. package/dist/components/atoms/Button/buttonStyles.d.ts.map +1 -1
  16. package/dist/components/atoms/Button/buttonStyles.js +14 -12
  17. package/dist/components/atoms/Input/Input.d.ts +3 -1
  18. package/dist/components/atoms/Input/Input.d.ts.map +1 -1
  19. package/dist/components/atoms/Input/Input.js +59 -59
  20. package/dist/components/atoms/Input/inputShellStyles.d.ts +9 -3
  21. package/dist/components/atoms/Input/inputShellStyles.d.ts.map +1 -1
  22. package/dist/components/atoms/Input/inputShellStyles.js +38 -38
  23. package/dist/components/atoms/RiveHand/RiveHand.d.ts.map +1 -1
  24. package/dist/components/atoms/RiveHand/RiveHand.js +83 -81
  25. package/dist/components/atoms/Table/Table.d.ts +54 -0
  26. package/dist/components/atoms/Table/Table.d.ts.map +1 -0
  27. package/dist/components/atoms/Table/Table.js +66 -0
  28. package/dist/components/atoms/Table/tableStyles.d.ts +18 -0
  29. package/dist/components/atoms/Table/tableStyles.d.ts.map +1 -0
  30. package/dist/components/atoms/Table/tableStyles.js +14 -0
  31. package/dist/components/atoms/TextArea/TextArea.d.ts +6 -0
  32. package/dist/components/atoms/TextArea/TextArea.d.ts.map +1 -1
  33. package/dist/components/atoms/TextArea/TextArea.js +86 -78
  34. package/dist/components/atoms/TextArea/textareaShellStyles.d.ts +2 -2
  35. package/dist/components/atoms/TextArea/textareaShellStyles.d.ts.map +1 -1
  36. package/dist/components/atoms/TextArea/textareaShellStyles.js +2 -2
  37. package/dist/components/molecules/Card/Card.d.ts +28 -6
  38. package/dist/components/molecules/Card/Card.d.ts.map +1 -1
  39. package/dist/components/molecules/Card/Card.js +83 -42
  40. package/dist/components/molecules/Card/cardStyles.d.ts +16 -1
  41. package/dist/components/molecules/Card/cardStyles.d.ts.map +1 -1
  42. package/dist/components/molecules/Card/cardStyles.js +18 -4
  43. package/dist/components/molecules/Chip/chipStyles.js +9 -9
  44. package/dist/components/molecules/CopyField/CopyField.d.ts +41 -0
  45. package/dist/components/molecules/CopyField/CopyField.d.ts.map +1 -0
  46. package/dist/components/molecules/CopyField/CopyField.js +120 -0
  47. package/dist/components/molecules/CopyField/copyFieldStyles.d.ts +28 -0
  48. package/dist/components/molecules/CopyField/copyFieldStyles.d.ts.map +1 -0
  49. package/dist/components/molecules/CopyField/copyFieldStyles.js +7 -0
  50. package/dist/components/molecules/DisplayControls/DisplayControls.d.ts +16 -7
  51. package/dist/components/molecules/DisplayControls/DisplayControls.d.ts.map +1 -1
  52. package/dist/components/molecules/DisplayControls/DisplayControls.js +41 -39
  53. package/dist/components/molecules/DisplayControls/displayControlsState.d.ts +21 -0
  54. package/dist/components/molecules/DisplayControls/displayControlsState.d.ts.map +1 -1
  55. package/dist/components/molecules/DisplayControls/displayControlsState.js +46 -4
  56. package/dist/components/molecules/LogView/LogView.d.ts +31 -0
  57. package/dist/components/molecules/LogView/LogView.d.ts.map +1 -0
  58. package/dist/components/molecules/LogView/LogView.js +109 -0
  59. package/dist/components/molecules/LogView/logViewStyles.d.ts +11 -0
  60. package/dist/components/molecules/LogView/logViewStyles.d.ts.map +1 -0
  61. package/dist/components/molecules/LogView/logViewStyles.js +6 -0
  62. package/dist/components/molecules/NavList/NavList.d.ts +23 -4
  63. package/dist/components/molecules/NavList/NavList.d.ts.map +1 -1
  64. package/dist/components/molecules/NavList/NavList.js +65 -52
  65. package/dist/components/molecules/NavList/navListStyles.d.ts +2 -0
  66. package/dist/components/molecules/NavList/navListStyles.d.ts.map +1 -1
  67. package/dist/components/molecules/NavList/navListStyles.js +3 -3
  68. package/dist/components/molecules/PageHeader/PageHeader.js +3 -3
  69. package/dist/components/molecules/SegmentedControl/segmentedControlStyles.js +7 -7
  70. package/dist/components/molecules/Stat/Stat.d.ts +31 -5
  71. package/dist/components/molecules/Stat/Stat.d.ts.map +1 -1
  72. package/dist/components/molecules/Stat/Stat.js +83 -49
  73. package/dist/components/molecules/Stat/statStyles.d.ts +23 -3
  74. package/dist/components/molecules/Stat/statStyles.d.ts.map +1 -1
  75. package/dist/components/molecules/Stat/statStyles.js +29 -12
  76. package/dist/components/molecules/TaskRows/TaskRows.d.ts +13 -3
  77. package/dist/components/molecules/TaskRows/TaskRows.d.ts.map +1 -1
  78. package/dist/components/molecules/TaskRows/TaskRows.js +81 -57
  79. package/dist/components/molecules/TaskRows/TaskRowsTable.d.ts +54 -0
  80. package/dist/components/molecules/TaskRows/TaskRowsTable.d.ts.map +1 -0
  81. package/dist/components/molecules/TaskRows/TaskRowsTable.js +200 -0
  82. package/dist/components/molecules/TaskRows/taskRowsStyles.d.ts +19 -1
  83. package/dist/components/molecules/TaskRows/taskRowsStyles.d.ts.map +1 -1
  84. package/dist/components/molecules/TaskRows/taskRowsStyles.js +7 -3
  85. package/dist/components/organisms/AppShell/AppShell.d.ts +82 -0
  86. package/dist/components/organisms/AppShell/AppShell.d.ts.map +1 -0
  87. package/dist/components/organisms/AppShell/AppShell.js +222 -0
  88. package/dist/components/organisms/AppShell/appShellStyles.d.ts +18 -0
  89. package/dist/components/organisms/AppShell/appShellStyles.d.ts.map +1 -0
  90. package/dist/components/organisms/AppShell/appShellStyles.js +8 -0
  91. package/dist/components/organisms/Carousel/Carousel.d.ts +9 -1
  92. package/dist/components/organisms/Carousel/Carousel.d.ts.map +1 -1
  93. package/dist/components/organisms/Carousel/Carousel.js +220 -182
  94. package/dist/components/organisms/Carousel/carouselMath.d.ts +5 -0
  95. package/dist/components/organisms/Carousel/carouselMath.d.ts.map +1 -1
  96. package/dist/components/organisms/Carousel/carouselMath.js +9 -1
  97. package/dist/components/organisms/Carousel/carouselStyles.d.ts +2 -0
  98. package/dist/components/organisms/Carousel/carouselStyles.d.ts.map +1 -1
  99. package/dist/components/organisms/Carousel/carouselStyles.js +8 -7
  100. package/dist/components/organisms/Chart/Chart.d.ts +5 -1
  101. package/dist/components/organisms/Chart/Chart.d.ts.map +1 -1
  102. package/dist/components/organisms/Chart/Chart.js +126 -62
  103. package/dist/components/organisms/Chart/ChartLegend.d.ts +8 -1
  104. package/dist/components/organisms/Chart/ChartLegend.d.ts.map +1 -1
  105. package/dist/components/organisms/Chart/ChartLegend.js +43 -13
  106. package/dist/components/organisms/Chart/ChartSegmentedRing.d.ts +52 -0
  107. package/dist/components/organisms/Chart/ChartSegmentedRing.d.ts.map +1 -0
  108. package/dist/components/organisms/Chart/ChartSegmentedRing.js +95 -0
  109. package/dist/components/organisms/Chart/chartStyles.d.ts +32 -0
  110. package/dist/components/organisms/Chart/chartStyles.d.ts.map +1 -1
  111. package/dist/components/organisms/Chart/chartStyles.js +15 -3
  112. package/dist/components/organisms/ChatDock/ChatDock.d.ts.map +1 -1
  113. package/dist/components/organisms/ChatDock/ChatDock.js +29 -25
  114. package/dist/components/organisms/Dialog/OverlayPanelHeader.d.ts.map +1 -1
  115. package/dist/components/organisms/Dialog/OverlayPanelHeader.js +1 -0
  116. package/dist/components/organisms/Sheet/Sheet.d.ts +3 -1
  117. package/dist/components/organisms/Sheet/Sheet.d.ts.map +1 -1
  118. package/dist/components/organisms/Sheet/Sheet.js +74 -68
  119. package/dist/components/organisms/Sheet/sheetStyles.d.ts +8 -2
  120. package/dist/components/organisms/Sheet/sheetStyles.d.ts.map +1 -1
  121. package/dist/components/organisms/Sheet/sheetStyles.js +16 -11
  122. package/dist/components/organisms/Tab/tabStyles.js +7 -7
  123. package/dist/index.d.ts +14 -8
  124. package/dist/index.d.ts.map +1 -1
  125. package/dist/index.js +148 -139
  126. package/dist/lib/chartTheme.d.ts +11 -0
  127. package/dist/lib/chartTheme.d.ts.map +1 -1
  128. package/dist/lib/compositionAudit.d.ts.map +1 -1
  129. package/dist/lib/dialogOverlay.d.ts +7 -0
  130. package/dist/lib/dialogOverlay.d.ts.map +1 -1
  131. package/dist/lib/dialogOverlay.js +16 -1
  132. package/dist/lib/sheetParam/index.d.ts +3 -0
  133. package/dist/lib/sheetParam/index.d.ts.map +1 -0
  134. package/dist/lib/sheetParam/sheetParam.d.ts +15 -0
  135. package/dist/lib/sheetParam/sheetParam.d.ts.map +1 -0
  136. package/dist/lib/sheetParam/sheetParam.js +26 -0
  137. package/dist/lib/sheetParam/useSheetParam.d.ts +25 -0
  138. package/dist/lib/sheetParam/useSheetParam.d.ts.map +1 -0
  139. package/dist/lib/sheetParam/useSheetParam.js +29 -0
  140. package/dist/styles.css +1 -1
  141. package/docs/README.md +1 -1
  142. package/docs/component-contracts.md +101 -0
  143. package/docs/components.md +16 -11
  144. package/docs/exports.json +88 -15
  145. package/docs/patterns/components-accordion--flush.tsx +1 -1
  146. package/docs/patterns/components-appshell--portal-dashboard-pattern.tsx +176 -0
  147. package/docs/patterns/components-avatar--dropdown-row.tsx +1 -1
  148. package/docs/patterns/components-badge--outline-tags.tsx +1 -1
  149. package/docs/patterns/components-badge--status-pill.tsx +31 -0
  150. package/docs/patterns/components-badge--with-avatar.tsx +1 -1
  151. package/docs/patterns/components-breadcrumb--editorial.tsx +1 -1
  152. package/docs/patterns/components-breadcrumb--long-path.tsx +1 -1
  153. package/docs/patterns/components-breadcrumb--path.tsx +1 -1
  154. package/docs/patterns/components-breadcrumb--router-links.tsx +1 -1
  155. package/docs/patterns/components-button-button--copy-button.tsx +1 -1
  156. package/docs/patterns/components-button-button--destructive-action.tsx +1 -1
  157. package/docs/patterns/components-button-button--external-link.tsx +1 -1
  158. package/docs/patterns/components-button-button--ghost-action.tsx +1 -1
  159. package/docs/patterns/components-button-button--inverse-action.tsx +1 -1
  160. package/docs/patterns/components-button-button--link-render.tsx +1 -1
  161. package/docs/patterns/components-button-button--multi-state-badge.tsx +1 -1
  162. package/docs/patterns/components-button-button--outline-mono.tsx +1 -1
  163. package/docs/patterns/components-button-button--primary-action.tsx +1 -1
  164. package/docs/patterns/components-button-button--row-hug.tsx +1 -1
  165. package/docs/patterns/components-button-button--row-layout.tsx +1 -1
  166. package/docs/patterns/components-button-button--secondary-action.tsx +1 -1
  167. package/docs/patterns/components-button-button--suggestion-pills.tsx +1 -1
  168. package/docs/patterns/components-button-button--with-count.tsx +1 -1
  169. package/docs/patterns/components-button-button--with-icon.tsx +1 -1
  170. package/docs/patterns/components-button-floatingactionbutton--vertical-actions.tsx +1 -1
  171. package/docs/patterns/components-calembed--pattern-skip-in-footer.tsx +1 -1
  172. package/docs/patterns/components-card-card--body-slot-occupancy-history.tsx +1 -1
  173. package/docs/patterns/components-card-card--headerless-media.tsx +1 -1
  174. package/docs/patterns/components-card-card--outlined-layout.tsx +1 -1
  175. package/docs/patterns/components-card-card--pinned-height.tsx +1 -1
  176. package/docs/patterns/components-card-card--terminal-frame.tsx +48 -0
  177. package/docs/patterns/components-card-selectablecard--selectable-cards-pattern.tsx +1 -1
  178. package/docs/patterns/components-carousel--image-carousel.tsx +1 -1
  179. package/docs/patterns/components-chart--audience-activity-heatmap.tsx +1 -1
  180. package/docs/patterns/components-chart--cartesian-no-data-gaps.tsx +1 -1
  181. package/docs/patterns/components-chart--occupancy-history-in-card.tsx +1 -1
  182. package/docs/patterns/components-chart--occupancy-in-card.tsx +1 -1
  183. package/docs/patterns/components-chart--post-reach-distribution.tsx +1 -1
  184. package/docs/patterns/components-chart--ranked-audience-breakdown.tsx +1 -1
  185. package/docs/patterns/components-chart--revenue-by-line.tsx +68 -0
  186. package/docs/patterns/components-chart--segmented-ring-pattern.tsx +144 -0
  187. package/docs/patterns/components-chart--unit-grid-composition.tsx +1 -1
  188. package/docs/patterns/components-chatdock--pattern-chat-dock.tsx +1 -1
  189. package/docs/patterns/components-chatdock--pattern-start-project-gate.tsx +1 -1
  190. package/docs/patterns/components-chatqa--pattern-qa-with-reply.tsx +1 -1
  191. package/docs/patterns/components-checkbox-checkbox--default.tsx +1 -1
  192. package/docs/patterns/components-checkbox-checkbox--with-count.tsx +1 -1
  193. package/docs/patterns/components-checkbox-checkbox--with-description.tsx +1 -1
  194. package/docs/patterns/components-checkbox-checkboxgroup--default.tsx +1 -1
  195. package/docs/patterns/components-checkbox-checkboxgroup--option-counts.tsx +1 -1
  196. package/docs/patterns/components-copyfield--clipboard-blocked.tsx +9 -0
  197. package/docs/patterns/components-copyfield--copied.tsx +9 -0
  198. package/docs/patterns/components-copyfield--copy-key.tsx +9 -0
  199. package/docs/patterns/components-copyfield--on-navy.tsx +29 -0
  200. package/docs/patterns/components-descriptionlist--details.tsx +1 -1
  201. package/docs/patterns/components-descriptionlist--post-metadata.tsx +1 -1
  202. package/docs/patterns/components-dialog--alert-dialog-destructive.tsx +1 -1
  203. package/docs/patterns/components-dialog--default-dialog.tsx +1 -1
  204. package/docs/patterns/components-dialog--form-dialog.tsx +1 -1
  205. package/docs/patterns/components-displaycontrols--page-utilities.tsx +1 -1
  206. package/docs/patterns/components-displaycontrols--theme-switch.tsx +35 -0
  207. package/docs/patterns/components-field--horizontal-input.tsx +1 -1
  208. package/docs/patterns/components-field--horizontal-text-area.tsx +1 -1
  209. package/docs/patterns/components-field--multi-control.tsx +1 -1
  210. package/docs/patterns/components-filterpanel--panel.tsx +1 -1
  211. package/docs/patterns/components-footerreveal--marketing-hero-pattern.tsx +1 -1
  212. package/docs/patterns/components-footerreveal--marketing-hero-ruled-pattern.tsx +1 -1
  213. package/docs/patterns/components-footerreveal--marketing-hero-with-gallery-intro.tsx +1 -1
  214. package/docs/patterns/components-footerreveal--marketing-page-pattern.tsx +1 -1
  215. package/docs/patterns/components-footerreveal--ruled-grid-footer-pattern.tsx +1 -1
  216. package/docs/patterns/components-footerreveal--sequenced-marketing-hero.tsx +1 -1
  217. package/docs/patterns/components-herointro--two-line-intro.tsx +1 -1
  218. package/docs/patterns/components-herotilestack--marketing-hero-pattern.tsx +1 -1
  219. package/docs/patterns/components-herotilestack--marketing-hero-text-sequence.tsx +1 -1
  220. package/docs/patterns/components-herotilestack--marketing-hero-with-gallery-intro.tsx +1 -1
  221. package/docs/patterns/components-indexlist--post-index.tsx +1 -1
  222. package/docs/patterns/components-intakeconfirmation--booked-pattern.tsx +1 -1
  223. package/docs/patterns/components-intakeconfirmation--emailed-pattern.tsx +1 -1
  224. package/docs/patterns/components-intakeform--about-you-pattern.tsx +1 -1
  225. package/docs/patterns/components-intakeform--short-form-pattern.tsx +1 -1
  226. package/docs/patterns/components-intakemodal--intake-modal-pattern.tsx +1 -1
  227. package/docs/patterns/components-kbd--command-row.tsx +1 -1
  228. package/docs/patterns/components-kbd--numbered-choices.tsx +1 -1
  229. package/docs/patterns/components-kbd--shortcut.tsx +1 -1
  230. package/docs/patterns/components-linktile--resource-tile.tsx +1 -1
  231. package/docs/patterns/components-linktile--router-link.tsx +1 -1
  232. package/docs/patterns/components-logview--detail-pane.tsx +80 -0
  233. package/docs/patterns/components-logview--log-viewer.tsx +20 -0
  234. package/docs/patterns/components-moremenu--action-menu.tsx +1 -1
  235. package/docs/patterns/components-moremenu--in-card-header.tsx +1 -1
  236. package/docs/patterns/components-navlist--app-sidebar.tsx +118 -0
  237. package/docs/patterns/components-navlist--side-nav-settings.tsx +1 -1
  238. package/docs/patterns/components-pageheader--app-header-pattern.tsx +1 -1
  239. package/docs/patterns/components-pageheader--page-section-header.tsx +1 -1
  240. package/docs/patterns/components-pageheader--toolbar-header.tsx +1 -1
  241. package/docs/patterns/components-panel--end-detail-rail.tsx +1 -1
  242. package/docs/patterns/components-pillgroup--pill-group-pattern.tsx +1 -1
  243. package/docs/patterns/components-promptbar--pattern-prompt-bar.tsx +1 -1
  244. package/docs/patterns/components-prose--article-body.tsx +1 -1
  245. package/docs/patterns/components-radio-radiogroup--default.tsx +1 -1
  246. package/docs/patterns/components-scrollhorizontal--project-gallery-pattern.tsx +1 -1
  247. package/docs/patterns/components-scrollhorizontal--with-intro.tsx +1 -1
  248. package/docs/patterns/components-sectioncaption--column-caption.tsx +1 -1
  249. package/docs/patterns/components-sectioncaption--with-action.tsx +1 -1
  250. package/docs/patterns/components-sheet--bottom-sheet.tsx +1 -1
  251. package/docs/patterns/components-sheet--end-sheet.tsx +1 -1
  252. package/docs/patterns/components-sheet--side-sheet-header-actions.tsx +50 -0
  253. package/docs/patterns/components-sheet--side-sheet-url-deep-link.tsx +51 -0
  254. package/docs/patterns/components-sheet--side-sheet.tsx +38 -0
  255. package/docs/patterns/components-sitenav--brand-and-cta.tsx +1 -1
  256. package/docs/patterns/components-sitenav--centered-links.tsx +1 -1
  257. package/docs/patterns/components-sitenav--compact.tsx +1 -1
  258. package/docs/patterns/components-sitenav--marketing-header.tsx +1 -1
  259. package/docs/patterns/components-sitenav--mega-menu.tsx +1 -1
  260. package/docs/patterns/components-stat--hero-stat.tsx +54 -0
  261. package/docs/patterns/components-stat--insights-row.tsx +1 -1
  262. package/docs/patterns/components-stepprogress--step-progress-pattern.tsx +1 -1
  263. package/docs/patterns/components-switch--default.tsx +1 -1
  264. package/docs/patterns/components-switch--settings-row.tsx +1 -1
  265. package/docs/patterns/components-tab--settings-pages.tsx +1 -1
  266. package/docs/patterns/components-table--approvals-with-sheet.tsx +81 -0
  267. package/docs/patterns/components-table--approvals.tsx +223 -0
  268. package/docs/patterns/components-table--basic.tsx +60 -0
  269. package/docs/patterns/components-taskrows--action-details.tsx +1 -1
  270. package/docs/patterns/components-taskrows--capsules.tsx +1 -1
  271. package/docs/patterns/components-taskrows--card-with-status-rows.tsx +1 -1
  272. package/docs/patterns/components-taskrows--controlled-expand.tsx +1 -1
  273. package/docs/patterns/components-taskrows--custom-slots.tsx +1 -1
  274. package/docs/patterns/components-taskrows--needs-you-table.tsx +62 -0
  275. package/docs/patterns/components-taskrows--status-list.tsx +1 -1
  276. package/docs/patterns/components-taskrows--tag-chips.tsx +1 -1
  277. package/docs/patterns/components-textarea--save-status.tsx +32 -0
  278. package/docs/patterns/components-textlink--external-destination.tsx +1 -1
  279. package/docs/patterns/components-textlink--inline-prose.tsx +1 -1
  280. package/docs/patterns/components-textlink--quiet-title.tsx +1 -1
  281. package/docs/patterns/components-textlink--supporting-copy.tsx +1 -1
  282. package/docs/patterns/components-textsequence--default.tsx +1 -1
  283. package/docs/patterns/components-textsequence--reduced-motion.tsx +1 -1
  284. package/docs/patterns/components-textsequence--shapes.tsx +1 -1
  285. package/docs/patterns/components-tilegrid--masonry.tsx +1 -1
  286. package/docs/patterns/components-toast--stacked-notifications.tsx +1 -1
  287. package/docs/patterns/components-tooltip--controlled.tsx +1 -1
  288. package/docs/patterns/components-tooltip--disabled-control.tsx +1 -1
  289. package/docs/patterns/components-tooltip--icon-action.tsx +1 -1
  290. package/docs/patterns/components-tooltip--keyboard-shortcut.tsx +1 -1
  291. package/docs/patterns/components-tooltip--placement.tsx +1 -1
  292. package/docs/patterns/foundations-scroll-fade--horizontal-rail.tsx +1 -1
  293. package/docs/patterns/foundations-scroll-fade--overflowing-list.tsx +1 -1
  294. package/docs/patterns/guides-chart-explorations--comparison-gallery.tsx +1 -1
  295. package/docs/patterns/guides-filter-panel--filtered-grid.tsx +1 -1
  296. package/docs/patterns/guides-filter-panel--filtered-index.tsx +1 -1
  297. package/docs/patterns/guides-overlay-flows--notification-preferences.tsx +1 -1
  298. package/docs/patterns/guides-post-page--post-page.tsx +1 -1
  299. package/docs/patterns/guides-profile-typography--editorial-profile.tsx +1 -1
  300. package/docs/patterns/guides-resource-detail--detail.tsx +1 -1
  301. package/docs/patterns/index.json +177 -1
  302. package/package.json +1 -1
@@ -0,0 +1,144 @@
1
+ // @thewhatmatters/wmds@0.4.27 · Pattern — segmented ring
2
+ // Storybook: Components/Chart → Pattern — segmented ring (?path=/story/components-chart--segmented-ring-pattern)
3
+ // Show code — copy verbatim and keep this header; upgrades find pasted patterns by it.
4
+
5
+ import { Card, Chart, cardLayoutBodyOccupantInsetXClasses, cardLayoutBodyOccupantPadYClasses, cardTitleClasses, chartSeriesColor, type ChartSeriesConfig } from "@thewhatmatters/wmds";
6
+
7
+ const channelLegend: ChartSeriesConfig = {
8
+ widget: {
9
+ label: "Chat widget",
10
+ color: chartSeriesColor(0),
11
+ value: "1,569",
12
+ percent: "46%",
13
+ delta: { label: "+8%", direction: "up" },
14
+ },
15
+ email: {
16
+ label: "Email",
17
+ color: chartSeriesColor(1),
18
+ value: "921",
19
+ percent: "27%",
20
+ delta: { label: "-3%", direction: "down" },
21
+ },
22
+ whatsapp: {
23
+ label: "WhatsApp",
24
+ color: chartSeriesColor(2),
25
+ value: "580",
26
+ percent: "17%",
27
+ delta: { label: "+21%", direction: "up" },
28
+ },
29
+ slack: {
30
+ label: "Slack Connect",
31
+ color: chartSeriesColor(3),
32
+ value: "342",
33
+ percent: "10%",
34
+ delta: { label: "+2%", direction: "up" },
35
+ },
36
+ };
37
+
38
+ const ringWellClasses = [
39
+ "flex w-full flex-col items-center gap-6",
40
+ cardLayoutBodyOccupantPadYClasses,
41
+ cardLayoutBodyOccupantInsetXClasses,
42
+ ].join(" ");
43
+
44
+ export function SegmentedRingExamples() {
45
+ return (
46
+ <div className="grid w-full gap-6 lg:grid-cols-2">
47
+ <section>
48
+ <Card shape="rounded">
49
+ <Card.Header start={<h2 className={cardTitleClasses}>Channels</h2>} />
50
+ <Card.Body>
51
+ <div className={ringWellClasses}>
52
+ <Chart.SegmentedRing
53
+ value={2842}
54
+ max={3412}
55
+ tone="primary"
56
+ size="lg"
57
+ centerValue="3,412"
58
+ centerLabel="conversations"
59
+ label="3,412 conversations"
60
+ animate="none"
61
+ />
62
+ <Chart.Legend variant="tabular" config={channelLegend} className="w-full" />
63
+ </div>
64
+ </Card.Body>
65
+ </Card>
66
+ </section>
67
+ <section>
68
+ <Card shape="rounded">
69
+ <Card.Header start={<h2 className={cardTitleClasses}>Weekly goals</h2>} />
70
+ <Card.Body>
71
+ <div className={ringWellClasses}>
72
+ <Chart.SegmentedRing
73
+ value={38}
74
+ max={100}
75
+ tone="primary"
76
+ size="md"
77
+ centerValue="38%"
78
+ centerLabel="of weekly goals"
79
+ label="Weekly goals 38%"
80
+ animate="none"
81
+ />
82
+ </div>
83
+ </Card.Body>
84
+ </Card>
85
+ </section>
86
+ <section>
87
+ <Card shape="rounded">
88
+ <Card.Header start={<h2 className={cardTitleClasses}>Over capacity</h2>} />
89
+ <Card.Body>
90
+ <div className={ringWellClasses}>
91
+ <Chart.SegmentedRing
92
+ value={128}
93
+ max={100}
94
+ tone="primary"
95
+ size="md"
96
+ centerValue="128%"
97
+ centerLabel="of goal"
98
+ label="Goal 128%"
99
+ animate="none"
100
+ />
101
+ </div>
102
+ </Card.Body>
103
+ </Card>
104
+ </section>
105
+ <section>
106
+ <Card shape="rounded">
107
+ <Card.Header start={<h2 className={cardTitleClasses}>Empty</h2>} />
108
+ <Card.Body>
109
+ <div className={ringWellClasses}>
110
+ <Chart.SegmentedRing
111
+ value={0}
112
+ max={3412}
113
+ tone="primary"
114
+ size="md"
115
+ centerValue="0"
116
+ centerLabel="conversations"
117
+ label="0 conversations"
118
+ animate="none"
119
+ />
120
+ </div>
121
+ </Card.Body>
122
+ </Card>
123
+ </section>
124
+ <section>
125
+ <Card shape="rounded">
126
+ <Card.Header start={<h2 className={cardTitleClasses}>Not connected</h2>} />
127
+ <Card.Body>
128
+ <div className={ringWellClasses}>
129
+ <Chart.SegmentedRing
130
+ value={0}
131
+ max={100}
132
+ tone="primary"
133
+ size="md"
134
+ unavailable={{ reason: "Source is not connected" }}
135
+ label="Conversations"
136
+ animate="none"
137
+ />
138
+ </div>
139
+ </Card.Body>
140
+ </Card>
141
+ </section>
142
+ </div>
143
+ );
144
+ }
@@ -1,4 +1,4 @@
1
- // @thewhatmatters/wmds@0.4.9 · Pattern — 100-unit composition
1
+ // @thewhatmatters/wmds@0.4.27 · 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
 
@@ -1,4 +1,4 @@
1
- // @thewhatmatters/wmds@0.4.9 · Pattern — chat dock
1
+ // @thewhatmatters/wmds@0.4.27 · Pattern — chat dock
2
2
  // Storybook: Components/ChatDock → Pattern — chat dock (?path=/story/components-chatdock--pattern-chat-dock)
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 — start a project gate
1
+ // @thewhatmatters/wmds@0.4.27 · Pattern — start a project gate
2
2
  // Storybook: Components/ChatDock → Pattern — start a project gate (?path=/story/components-chatdock--pattern-start-project-gate)
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 — Q&A with reply
1
+ // @thewhatmatters/wmds@0.4.27 · 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.4.9 · Pattern — default
1
+ // @thewhatmatters/wmds@0.4.27 · 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.4.9 · Pattern — with count
1
+ // @thewhatmatters/wmds@0.4.27 · Pattern — with count
2
2
  // Storybook: Components/Checkbox/Checkbox → Pattern — with count (?path=/story/components-checkbox-checkbox--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.4.9 · Pattern — with description
1
+ // @thewhatmatters/wmds@0.4.27 · 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.4.9 · Pattern — default
1
+ // @thewhatmatters/wmds@0.4.27 · 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.4.9 · Pattern — option counts
1
+ // @thewhatmatters/wmds@0.4.27 · Pattern — option counts
2
2
  // Storybook: Components/Checkbox/CheckboxGroup → Pattern — option counts (?path=/story/components-checkbox-checkboxgroup--option-counts)
3
3
  // Show code — copy verbatim and keep this header; upgrades find pasted patterns by it.
4
4
 
@@ -0,0 +1,9 @@
1
+ // @thewhatmatters/wmds@0.4.27 · Pattern — clipboard blocked
2
+ // Storybook: Components/CopyField → Pattern — clipboard blocked (?path=/story/components-copyfield--clipboard-blocked)
3
+ // Show code — copy verbatim and keep this header; upgrades find pasted patterns by it.
4
+
5
+ import { CopyField } from "@thewhatmatters/wmds";
6
+
7
+ export function UnlockKeyBlocked({ apiKey }: { apiKey: string }) {
8
+ return <CopyField label="API key" value={apiKey} state="fallback" />;
9
+ }
@@ -0,0 +1,9 @@
1
+ // @thewhatmatters/wmds@0.4.27 · Pattern — copied
2
+ // Storybook: Components/CopyField → Pattern — copied (?path=/story/components-copyfield--copied)
3
+ // Show code — copy verbatim and keep this header; upgrades find pasted patterns by it.
4
+
5
+ import { CopyField } from "@thewhatmatters/wmds";
6
+
7
+ export function UnlockKeyCopied({ apiKey }: { apiKey: string }) {
8
+ return <CopyField label="API key" value={apiKey} state="copied" />;
9
+ }
@@ -0,0 +1,9 @@
1
+ // @thewhatmatters/wmds@0.4.27 · Pattern — copy key
2
+ // Storybook: Components/CopyField → Pattern — copy key (?path=/story/components-copyfield--copy-key)
3
+ // Show code — copy verbatim and keep this header; upgrades find pasted patterns by it.
4
+
5
+ import { CopyField } from "@thewhatmatters/wmds";
6
+
7
+ export function UnlockKey({ apiKey }: { apiKey: string }) {
8
+ return <CopyField label="API key" value={apiKey} />;
9
+ }
@@ -0,0 +1,29 @@
1
+ // @thewhatmatters/wmds@0.4.27 · Pattern — on a navy field
2
+ // Storybook: Components/CopyField → Pattern — on a navy field (?path=/story/components-copyfield--on-navy)
3
+ // Show code — copy verbatim and keep this header; upgrades find pasted patterns by it.
4
+
5
+ import { Button, CopyField } from "@thewhatmatters/wmds";
6
+
7
+ export function UnlockOnBrand({
8
+ apiKey,
9
+ onContinue,
10
+ onSecondary,
11
+ }: {
12
+ apiKey: string;
13
+ onContinue: () => void;
14
+ onSecondary: () => void;
15
+ }) {
16
+ return (
17
+ <section className="flex w-full flex-col gap-4 bg-brand px-6 py-8 text-on-brand">
18
+ <CopyField label="API key" value={apiKey} />
19
+ <div className="flex flex-wrap gap-2">
20
+ <Button role="inverse" type="button" onClick={onContinue}>
21
+ Continue
22
+ </Button>
23
+ <Button role="inverse-outline" type="button" onClick={onSecondary}>
24
+ Back
25
+ </Button>
26
+ </div>
27
+ </section>
28
+ );
29
+ }
@@ -1,4 +1,4 @@
1
- // @thewhatmatters/wmds@0.4.9 · Pattern — details
1
+ // @thewhatmatters/wmds@0.4.27 · Pattern — details
2
2
  // Storybook: Components/DescriptionList → Pattern — details (?path=/story/components-descriptionlist--details)
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 metadata
1
+ // @thewhatmatters/wmds@0.4.27 · Pattern — post metadata
2
2
  // Storybook: Components/DescriptionList → Pattern — post metadata (?path=/story/components-descriptionlist--post-metadata)
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 — alert dialog (destructive)
1
+ // @thewhatmatters/wmds@0.4.27 · 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.4.9 · Pattern — dialog
1
+ // @thewhatmatters/wmds@0.4.27 · 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.27 · 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.27 · 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.27 · 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.27 · 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.27 · 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.27 · 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.27 · 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.27 · 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.27 · 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.27 · 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.27 · 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.27 · 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.27 · 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.27 · 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.27 · 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.27 · 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.27 · 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.27 · 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.27 · 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.27 · 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.27 · 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.27 · 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.27 · 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.27 · 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.27 · 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.27 · 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.27 · 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.27 · 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.27 · 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
+ }