@thewhatmatters/wmds 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (720) hide show
  1. package/CHANGELOG.md +53 -0
  2. package/CONSUMING.md +352 -0
  3. package/LICENSE +21 -0
  4. package/README.md +65 -0
  5. package/bin/wmds-check.mjs +173 -0
  6. package/dist/cluster.css +14 -0
  7. package/dist/collapse.css +24 -0
  8. package/dist/colors.css +282 -0
  9. package/dist/components/atoms/Avatar/Avatar.d.ts +22 -0
  10. package/dist/components/atoms/Avatar/Avatar.d.ts.map +1 -0
  11. package/dist/components/atoms/Avatar/Avatar.js +52 -0
  12. package/dist/components/atoms/Avatar/avatarStyles.d.ts +23 -0
  13. package/dist/components/atoms/Avatar/avatarStyles.d.ts.map +1 -0
  14. package/dist/components/atoms/Avatar/avatarStyles.js +48 -0
  15. package/dist/components/atoms/Badge/Badge.d.ts +47 -0
  16. package/dist/components/atoms/Badge/Badge.d.ts.map +1 -0
  17. package/dist/components/atoms/Badge/Badge.js +68 -0
  18. package/dist/components/atoms/Badge/BadgeIcon.d.ts +7 -0
  19. package/dist/components/atoms/Badge/BadgeIcon.d.ts.map +1 -0
  20. package/dist/components/atoms/Badge/BadgeIcon.js +14 -0
  21. package/dist/components/atoms/Badge/BadgeSegmentCount.d.ts +6 -0
  22. package/dist/components/atoms/Badge/BadgeSegmentCount.d.ts.map +1 -0
  23. package/dist/components/atoms/Badge/BadgeSegmentCount.js +13 -0
  24. package/dist/components/atoms/Badge/badgeStyles.d.ts +37 -0
  25. package/dist/components/atoms/Badge/badgeStyles.d.ts.map +1 -0
  26. package/dist/components/atoms/Badge/badgeStyles.js +46 -0
  27. package/dist/components/atoms/Button/Button.d.ts +77 -0
  28. package/dist/components/atoms/Button/Button.d.ts.map +1 -0
  29. package/dist/components/atoms/Button/Button.js +138 -0
  30. package/dist/components/atoms/Button/ButtonBadge.d.ts +5 -0
  31. package/dist/components/atoms/Button/ButtonBadge.d.ts.map +1 -0
  32. package/dist/components/atoms/Button/ButtonBadge.js +14 -0
  33. package/dist/components/atoms/Button/ButtonIcon.d.ts +8 -0
  34. package/dist/components/atoms/Button/ButtonIcon.d.ts.map +1 -0
  35. package/dist/components/atoms/Button/ButtonIcon.js +14 -0
  36. package/dist/components/atoms/Button/ButtonSpinner.d.ts +6 -0
  37. package/dist/components/atoms/Button/ButtonSpinner.d.ts.map +1 -0
  38. package/dist/components/atoms/Button/ButtonSpinner.js +13 -0
  39. package/dist/components/atoms/Button/ButtonStatusButton.d.ts +23 -0
  40. package/dist/components/atoms/Button/ButtonStatusButton.d.ts.map +1 -0
  41. package/dist/components/atoms/Button/ButtonStatusButton.js +43 -0
  42. package/dist/components/atoms/Button/ButtonStatusContent.d.ts +10 -0
  43. package/dist/components/atoms/Button/ButtonStatusContent.d.ts.map +1 -0
  44. package/dist/components/atoms/Button/ButtonStatusContent.js +92 -0
  45. package/dist/components/atoms/Button/buttonStatusMotion.d.ts +40 -0
  46. package/dist/components/atoms/Button/buttonStatusMotion.d.ts.map +1 -0
  47. package/dist/components/atoms/Button/buttonStatusMotion.js +100 -0
  48. package/dist/components/atoms/Button/buttonStatusStyles.d.ts +21 -0
  49. package/dist/components/atoms/Button/buttonStatusStyles.d.ts.map +1 -0
  50. package/dist/components/atoms/Button/buttonStatusStyles.js +39 -0
  51. package/dist/components/atoms/Button/buttonStyles.d.ts +47 -0
  52. package/dist/components/atoms/Button/buttonStyles.d.ts.map +1 -0
  53. package/dist/components/atoms/Button/buttonStyles.js +54 -0
  54. package/dist/components/atoms/Checkbox/Checkbox.d.ts +31 -0
  55. package/dist/components/atoms/Checkbox/Checkbox.d.ts.map +1 -0
  56. package/dist/components/atoms/Checkbox/Checkbox.js +101 -0
  57. package/dist/components/atoms/Checkbox/checkboxStyles.d.ts +37 -0
  58. package/dist/components/atoms/Checkbox/checkboxStyles.d.ts.map +1 -0
  59. package/dist/components/atoms/Checkbox/checkboxStyles.js +42 -0
  60. package/dist/components/atoms/IconButton/IconButton.d.ts +49 -0
  61. package/dist/components/atoms/IconButton/IconButton.d.ts.map +1 -0
  62. package/dist/components/atoms/IconButton/IconButton.js +84 -0
  63. package/dist/components/atoms/IconButton/iconButtonStyles.d.ts +17 -0
  64. package/dist/components/atoms/IconButton/iconButtonStyles.d.ts.map +1 -0
  65. package/dist/components/atoms/IconButton/iconButtonStyles.js +13 -0
  66. package/dist/components/atoms/Input/Input.d.ts +37 -0
  67. package/dist/components/atoms/Input/Input.d.ts.map +1 -0
  68. package/dist/components/atoms/Input/Input.js +105 -0
  69. package/dist/components/atoms/Input/inputShellStyles.d.ts +99 -0
  70. package/dist/components/atoms/Input/inputShellStyles.d.ts.map +1 -0
  71. package/dist/components/atoms/Input/inputShellStyles.js +119 -0
  72. package/dist/components/atoms/Kbd/Kbd.d.ts +18 -0
  73. package/dist/components/atoms/Kbd/Kbd.d.ts.map +1 -0
  74. package/dist/components/atoms/Kbd/Kbd.js +15 -0
  75. package/dist/components/atoms/Kbd/kbdStyles.d.ts +5 -0
  76. package/dist/components/atoms/Kbd/kbdStyles.d.ts.map +1 -0
  77. package/dist/components/atoms/Kbd/kbdStyles.js +8 -0
  78. package/dist/components/atoms/Kbd/useKbdChoiceKeys.d.ts +21 -0
  79. package/dist/components/atoms/Kbd/useKbdChoiceKeys.d.ts.map +1 -0
  80. package/dist/components/atoms/Kbd/useKbdChoiceKeys.js +18 -0
  81. package/dist/components/atoms/Radio/Radio.d.ts +26 -0
  82. package/dist/components/atoms/Radio/Radio.d.ts.map +1 -0
  83. package/dist/components/atoms/Radio/Radio.js +84 -0
  84. package/dist/components/atoms/Radio/radioStyles.d.ts +28 -0
  85. package/dist/components/atoms/Radio/radioStyles.d.ts.map +1 -0
  86. package/dist/components/atoms/Radio/radioStyles.js +36 -0
  87. package/dist/components/atoms/RiveHand/RiveHand.d.ts +44 -0
  88. package/dist/components/atoms/RiveHand/RiveHand.d.ts.map +1 -0
  89. package/dist/components/atoms/RiveHand/RiveHand.js +254 -0
  90. package/dist/components/atoms/RiveHand/riveHandUtils.d.ts +168 -0
  91. package/dist/components/atoms/RiveHand/riveHandUtils.d.ts.map +1 -0
  92. package/dist/components/atoms/RiveHand/riveHandUtils.js +123 -0
  93. package/dist/components/atoms/Skeleton/Skeleton.d.ts +28 -0
  94. package/dist/components/atoms/Skeleton/Skeleton.d.ts.map +1 -0
  95. package/dist/components/atoms/Skeleton/Skeleton.js +32 -0
  96. package/dist/components/atoms/Skeleton/skeletonStyles.d.ts +23 -0
  97. package/dist/components/atoms/Skeleton/skeletonStyles.d.ts.map +1 -0
  98. package/dist/components/atoms/Skeleton/skeletonStyles.js +30 -0
  99. package/dist/components/atoms/Status/Status.d.ts +40 -0
  100. package/dist/components/atoms/Status/Status.d.ts.map +1 -0
  101. package/dist/components/atoms/Status/Status.js +84 -0
  102. package/dist/components/atoms/Status/statusDotStyles.d.ts +10 -0
  103. package/dist/components/atoms/Status/statusDotStyles.d.ts.map +1 -0
  104. package/dist/components/atoms/Status/statusDotStyles.js +17 -0
  105. package/dist/components/atoms/Status/statusRingStyles.d.ts +12 -0
  106. package/dist/components/atoms/Status/statusRingStyles.d.ts.map +1 -0
  107. package/dist/components/atoms/Status/statusRingStyles.js +6 -0
  108. package/dist/components/atoms/Switch/Switch.d.ts +27 -0
  109. package/dist/components/atoms/Switch/Switch.d.ts.map +1 -0
  110. package/dist/components/atoms/Switch/Switch.js +109 -0
  111. package/dist/components/atoms/Switch/switchStyles.d.ts +36 -0
  112. package/dist/components/atoms/Switch/switchStyles.d.ts.map +1 -0
  113. package/dist/components/atoms/Switch/switchStyles.js +39 -0
  114. package/dist/components/atoms/TextArea/TextArea.d.ts +37 -0
  115. package/dist/components/atoms/TextArea/TextArea.d.ts.map +1 -0
  116. package/dist/components/atoms/TextArea/TextArea.js +115 -0
  117. package/dist/components/atoms/TextArea/textareaShellStyles.d.ts +41 -0
  118. package/dist/components/atoms/TextArea/textareaShellStyles.d.ts.map +1 -0
  119. package/dist/components/atoms/TextArea/textareaShellStyles.js +71 -0
  120. package/dist/components/atoms/TextLink/TextLink.d.ts +14 -0
  121. package/dist/components/atoms/TextLink/TextLink.d.ts.map +1 -0
  122. package/dist/components/atoms/TextLink/TextLink.js +26 -0
  123. package/dist/components/atoms/TextLink/textLinkStyles.d.ts +3 -0
  124. package/dist/components/atoms/TextLink/textLinkStyles.d.ts.map +1 -0
  125. package/dist/components/atoms/TextLink/textLinkStyles.js +6 -0
  126. package/dist/components/atoms/TextSequenceShape/TextSequenceShape.d.ts +21 -0
  127. package/dist/components/atoms/TextSequenceShape/TextSequenceShape.d.ts.map +1 -0
  128. package/dist/components/atoms/TextSequenceShape/TextSequenceShape.js +175 -0
  129. package/dist/components/atoms/TextSequenceShape/textSequenceShapeStyles.d.ts +28 -0
  130. package/dist/components/atoms/TextSequenceShape/textSequenceShapeStyles.d.ts.map +1 -0
  131. package/dist/components/atoms/TextSequenceShape/textSequenceShapeStyles.js +39 -0
  132. package/dist/components/atoms/Tooltip/Tooltip.d.ts +63 -0
  133. package/dist/components/atoms/Tooltip/Tooltip.d.ts.map +1 -0
  134. package/dist/components/atoms/Tooltip/Tooltip.js +82 -0
  135. package/dist/components/atoms/Tooltip/tooltipStyles.d.ts +4 -0
  136. package/dist/components/atoms/Tooltip/tooltipStyles.d.ts.map +1 -0
  137. package/dist/components/atoms/Tooltip/tooltipStyles.js +15 -0
  138. package/dist/components/atoms/inputShared/InputStatusBanner.d.ts +13 -0
  139. package/dist/components/atoms/inputShared/InputStatusBanner.d.ts.map +1 -0
  140. package/dist/components/atoms/inputShared/InputStatusBanner.js +24 -0
  141. package/dist/components/atoms/inputShared/InputTrailingAffordance.d.ts +8 -0
  142. package/dist/components/atoms/inputShared/InputTrailingAffordance.d.ts.map +1 -0
  143. package/dist/components/atoms/inputShared/InputTrailingAffordance.js +26 -0
  144. package/dist/components/molecules/Accordion/Accordion.d.ts +36 -0
  145. package/dist/components/molecules/Accordion/Accordion.d.ts.map +1 -0
  146. package/dist/components/molecules/Accordion/Accordion.js +82 -0
  147. package/dist/components/molecules/Accordion/accordionStyles.d.ts +45 -0
  148. package/dist/components/molecules/Accordion/accordionStyles.d.ts.map +1 -0
  149. package/dist/components/molecules/Accordion/accordionStyles.js +12 -0
  150. package/dist/components/molecules/CalEmbed/CalEmbed.d.ts +58 -0
  151. package/dist/components/molecules/CalEmbed/CalEmbed.d.ts.map +1 -0
  152. package/dist/components/molecules/CalEmbed/CalEmbed.js +50 -0
  153. package/dist/components/molecules/CalEmbed/calEmbedStyles.d.ts +5 -0
  154. package/dist/components/molecules/CalEmbed/calEmbedStyles.d.ts.map +1 -0
  155. package/dist/components/molecules/CalEmbed/calEmbedStyles.js +5 -0
  156. package/dist/components/molecules/Card/Card.d.ts +53 -0
  157. package/dist/components/molecules/Card/Card.d.ts.map +1 -0
  158. package/dist/components/molecules/Card/Card.js +72 -0
  159. package/dist/components/molecules/Card/cardStyles.d.ts +82 -0
  160. package/dist/components/molecules/Card/cardStyles.d.ts.map +1 -0
  161. package/dist/components/molecules/Card/cardStyles.js +60 -0
  162. package/dist/components/molecules/ChatQa/ChatQa.d.ts +25 -0
  163. package/dist/components/molecules/ChatQa/ChatQa.d.ts.map +1 -0
  164. package/dist/components/molecules/ChatQa/ChatQa.js +23 -0
  165. package/dist/components/molecules/ChatQa/chatQaStyles.d.ts +9 -0
  166. package/dist/components/molecules/ChatQa/chatQaStyles.d.ts.map +1 -0
  167. package/dist/components/molecules/ChatQa/chatQaStyles.js +5 -0
  168. package/dist/components/molecules/CheckboxGroup/CheckboxGroup.d.ts +29 -0
  169. package/dist/components/molecules/CheckboxGroup/CheckboxGroup.d.ts.map +1 -0
  170. package/dist/components/molecules/CheckboxGroup/CheckboxGroup.js +76 -0
  171. package/dist/components/molecules/CheckboxGroup/CheckboxGroupContext.d.ts +14 -0
  172. package/dist/components/molecules/CheckboxGroup/CheckboxGroupContext.d.ts.map +1 -0
  173. package/dist/components/molecules/CheckboxGroup/CheckboxGroupContext.js +17 -0
  174. package/dist/components/molecules/CheckboxGroup/CheckboxGroupItem.d.ts +12 -0
  175. package/dist/components/molecules/CheckboxGroup/CheckboxGroupItem.d.ts.map +1 -0
  176. package/dist/components/molecules/CheckboxGroup/CheckboxGroupItem.js +23 -0
  177. package/dist/components/molecules/CheckboxGroup/checkboxGroupStyles.d.ts +16 -0
  178. package/dist/components/molecules/CheckboxGroup/checkboxGroupStyles.d.ts.map +1 -0
  179. package/dist/components/molecules/CheckboxGroup/checkboxGroupStyles.js +15 -0
  180. package/dist/components/molecules/Chip/Chip.d.ts +32 -0
  181. package/dist/components/molecules/Chip/Chip.d.ts.map +1 -0
  182. package/dist/components/molecules/Chip/Chip.js +116 -0
  183. package/dist/components/molecules/Chip/ChipFilterGroup.d.ts +30 -0
  184. package/dist/components/molecules/Chip/ChipFilterGroup.d.ts.map +1 -0
  185. package/dist/components/molecules/Chip/ChipFilterGroup.js +45 -0
  186. package/dist/components/molecules/Chip/chipStyles.d.ts +12 -0
  187. package/dist/components/molecules/Chip/chipStyles.d.ts.map +1 -0
  188. package/dist/components/molecules/Chip/chipStyles.js +23 -0
  189. package/dist/components/molecules/DisplayControls/DisplayControls.d.ts +27 -0
  190. package/dist/components/molecules/DisplayControls/DisplayControls.d.ts.map +1 -0
  191. package/dist/components/molecules/DisplayControls/DisplayControls.js +76 -0
  192. package/dist/components/molecules/DisplayControls/displayControlsState.d.ts +6 -0
  193. package/dist/components/molecules/DisplayControls/displayControlsState.d.ts.map +1 -0
  194. package/dist/components/molecules/DisplayControls/displayControlsState.js +18 -0
  195. package/dist/components/molecules/DisplayControls/displayControlsStyles.d.ts +4 -0
  196. package/dist/components/molecules/DisplayControls/displayControlsStyles.d.ts.map +1 -0
  197. package/dist/components/molecules/DisplayControls/displayControlsStyles.js +5 -0
  198. package/dist/components/molecules/Dropdown/Dropdown.d.ts +9 -0
  199. package/dist/components/molecules/Dropdown/Dropdown.d.ts.map +1 -0
  200. package/dist/components/molecules/Dropdown/Dropdown.js +10 -0
  201. package/dist/components/molecules/Dropdown/DropdownItem.d.ts +23 -0
  202. package/dist/components/molecules/Dropdown/DropdownItem.d.ts.map +1 -0
  203. package/dist/components/molecules/Dropdown/DropdownItem.js +36 -0
  204. package/dist/components/molecules/Dropdown/DropdownMenu.d.ts +10 -0
  205. package/dist/components/molecules/Dropdown/DropdownMenu.d.ts.map +1 -0
  206. package/dist/components/molecules/Dropdown/DropdownMenu.js +14 -0
  207. package/dist/components/molecules/Dropdown/dropdownMenuPosition.d.ts +25 -0
  208. package/dist/components/molecules/Dropdown/dropdownMenuPosition.d.ts.map +1 -0
  209. package/dist/components/molecules/Dropdown/dropdownMenuPosition.js +56 -0
  210. package/dist/components/molecules/Dropdown/dropdownStyles.d.ts +31 -0
  211. package/dist/components/molecules/Dropdown/dropdownStyles.d.ts.map +1 -0
  212. package/dist/components/molecules/Dropdown/dropdownStyles.js +8 -0
  213. package/dist/components/molecules/Field/Field.d.ts +25 -0
  214. package/dist/components/molecules/Field/Field.d.ts.map +1 -0
  215. package/dist/components/molecules/Field/Field.js +80 -0
  216. package/dist/components/molecules/Field/fieldStyles.d.ts +16 -0
  217. package/dist/components/molecules/Field/fieldStyles.d.ts.map +1 -0
  218. package/dist/components/molecules/Field/fieldStyles.js +11 -0
  219. package/dist/components/molecules/FloatingActionButton/FloatingActionButton.d.ts +22 -0
  220. package/dist/components/molecules/FloatingActionButton/FloatingActionButton.d.ts.map +1 -0
  221. package/dist/components/molecules/FloatingActionButton/FloatingActionButton.js +135 -0
  222. package/dist/components/molecules/FloatingActionButton/floatingActionButtonStyles.d.ts +9 -0
  223. package/dist/components/molecules/FloatingActionButton/floatingActionButtonStyles.d.ts.map +1 -0
  224. package/dist/components/molecules/FloatingActionButton/floatingActionButtonStyles.js +7 -0
  225. package/dist/components/molecules/HeroIntro/HeroIntro.d.ts +32 -0
  226. package/dist/components/molecules/HeroIntro/HeroIntro.d.ts.map +1 -0
  227. package/dist/components/molecules/HeroIntro/HeroIntro.js +24 -0
  228. package/dist/components/molecules/HeroIntro/heroIntroStyles.d.ts +30 -0
  229. package/dist/components/molecules/HeroIntro/heroIntroStyles.d.ts.map +1 -0
  230. package/dist/components/molecules/HeroIntro/heroIntroStyles.js +5 -0
  231. package/dist/components/molecules/IntakeForm/IntakeForm.d.ts +30 -0
  232. package/dist/components/molecules/IntakeForm/IntakeForm.d.ts.map +1 -0
  233. package/dist/components/molecules/IntakeForm/IntakeForm.js +137 -0
  234. package/dist/components/molecules/IntakeForm/intakeFormStyles.d.ts +3 -0
  235. package/dist/components/molecules/IntakeForm/intakeFormStyles.d.ts.map +1 -0
  236. package/dist/components/molecules/IntakeForm/intakeFormStyles.js +5 -0
  237. package/dist/components/molecules/NavList/NavList.d.ts +55 -0
  238. package/dist/components/molecules/NavList/NavList.d.ts.map +1 -0
  239. package/dist/components/molecules/NavList/NavList.js +103 -0
  240. package/dist/components/molecules/NavList/navListStyles.d.ts +15 -0
  241. package/dist/components/molecules/NavList/navListStyles.d.ts.map +1 -0
  242. package/dist/components/molecules/NavList/navListStyles.js +11 -0
  243. package/dist/components/molecules/PageHeader/PageHeader.d.ts +24 -0
  244. package/dist/components/molecules/PageHeader/PageHeader.d.ts.map +1 -0
  245. package/dist/components/molecules/PageHeader/PageHeader.js +43 -0
  246. package/dist/components/molecules/PageHeader/pageHeaderStyles.d.ts +9 -0
  247. package/dist/components/molecules/PageHeader/pageHeaderStyles.d.ts.map +1 -0
  248. package/dist/components/molecules/PageHeader/pageHeaderStyles.js +20 -0
  249. package/dist/components/molecules/PillGroup/PillGroup.d.ts +31 -0
  250. package/dist/components/molecules/PillGroup/PillGroup.d.ts.map +1 -0
  251. package/dist/components/molecules/PillGroup/PillGroup.js +53 -0
  252. package/dist/components/molecules/PillGroup/pillGroupStyles.d.ts +13 -0
  253. package/dist/components/molecules/PillGroup/pillGroupStyles.d.ts.map +1 -0
  254. package/dist/components/molecules/PillGroup/pillGroupStyles.js +7 -0
  255. package/dist/components/molecules/PromptBar/PromptBar.d.ts +33 -0
  256. package/dist/components/molecules/PromptBar/PromptBar.d.ts.map +1 -0
  257. package/dist/components/molecules/PromptBar/PromptBar.js +56 -0
  258. package/dist/components/molecules/PromptBar/promptBarStyles.d.ts +24 -0
  259. package/dist/components/molecules/PromptBar/promptBarStyles.d.ts.map +1 -0
  260. package/dist/components/molecules/PromptBar/promptBarStyles.js +6 -0
  261. package/dist/components/molecules/RadioGroup/RadioGroup.d.ts +34 -0
  262. package/dist/components/molecules/RadioGroup/RadioGroup.d.ts.map +1 -0
  263. package/dist/components/molecules/RadioGroup/RadioGroup.js +76 -0
  264. package/dist/components/molecules/RadioGroup/RadioGroupContext.d.ts +16 -0
  265. package/dist/components/molecules/RadioGroup/RadioGroupContext.d.ts.map +1 -0
  266. package/dist/components/molecules/RadioGroup/RadioGroupContext.js +23 -0
  267. package/dist/components/molecules/RadioGroup/RadioGroupItem.d.ts +12 -0
  268. package/dist/components/molecules/RadioGroup/RadioGroupItem.d.ts.map +1 -0
  269. package/dist/components/molecules/RadioGroup/RadioGroupItem.js +21 -0
  270. package/dist/components/molecules/RadioGroup/radioGroupStyles.d.ts +16 -0
  271. package/dist/components/molecules/RadioGroup/radioGroupStyles.d.ts.map +1 -0
  272. package/dist/components/molecules/RadioGroup/radioGroupStyles.js +15 -0
  273. package/dist/components/molecules/Search/Search.d.ts +24 -0
  274. package/dist/components/molecules/Search/Search.d.ts.map +1 -0
  275. package/dist/components/molecules/Search/Search.js +33 -0
  276. package/dist/components/molecules/Search/searchStyles.d.ts +10 -0
  277. package/dist/components/molecules/Search/searchStyles.d.ts.map +1 -0
  278. package/dist/components/molecules/Search/searchStyles.js +15 -0
  279. package/dist/components/molecules/SegmentedControl/SegmentedControl.d.ts +25 -0
  280. package/dist/components/molecules/SegmentedControl/SegmentedControl.d.ts.map +1 -0
  281. package/dist/components/molecules/SegmentedControl/SegmentedControl.js +36 -0
  282. package/dist/components/molecules/SegmentedControl/SegmentedControlContext.d.ts +16 -0
  283. package/dist/components/molecules/SegmentedControl/SegmentedControlContext.d.ts.map +1 -0
  284. package/dist/components/molecules/SegmentedControl/SegmentedControlContext.js +18 -0
  285. package/dist/components/molecules/SegmentedControl/SegmentedControlItem.d.ts +25 -0
  286. package/dist/components/molecules/SegmentedControl/SegmentedControlItem.d.ts.map +1 -0
  287. package/dist/components/molecules/SegmentedControl/SegmentedControlItem.js +55 -0
  288. package/dist/components/molecules/SegmentedControl/segmentedControlStyles.d.ts +31 -0
  289. package/dist/components/molecules/SegmentedControl/segmentedControlStyles.d.ts.map +1 -0
  290. package/dist/components/molecules/SegmentedControl/segmentedControlStyles.js +28 -0
  291. package/dist/components/molecules/Select/Select.d.ts +34 -0
  292. package/dist/components/molecules/Select/Select.d.ts.map +1 -0
  293. package/dist/components/molecules/Select/Select.js +161 -0
  294. package/dist/components/molecules/Select/selectMenuPosition.d.ts +11 -0
  295. package/dist/components/molecules/Select/selectMenuPosition.d.ts.map +1 -0
  296. package/dist/components/molecules/Select/selectMenuPosition.js +14 -0
  297. package/dist/components/molecules/Select/selectStyles.d.ts +21 -0
  298. package/dist/components/molecules/Select/selectStyles.d.ts.map +1 -0
  299. package/dist/components/molecules/Select/selectStyles.js +21 -0
  300. package/dist/components/molecules/SelectableCard/SelectableCard.d.ts +33 -0
  301. package/dist/components/molecules/SelectableCard/SelectableCard.d.ts.map +1 -0
  302. package/dist/components/molecules/SelectableCard/SelectableCard.js +84 -0
  303. package/dist/components/molecules/SelectableCard/selectableCardStyles.d.ts +14 -0
  304. package/dist/components/molecules/SelectableCard/selectableCardStyles.d.ts.map +1 -0
  305. package/dist/components/molecules/SelectableCard/selectableCardStyles.js +7 -0
  306. package/dist/components/molecules/Stat/Stat.d.ts +47 -0
  307. package/dist/components/molecules/Stat/Stat.d.ts.map +1 -0
  308. package/dist/components/molecules/Stat/Stat.js +76 -0
  309. package/dist/components/molecules/Stat/statStyles.d.ts +23 -0
  310. package/dist/components/molecules/Stat/statStyles.d.ts.map +1 -0
  311. package/dist/components/molecules/Stat/statStyles.js +37 -0
  312. package/dist/components/molecules/StepProgress/StepProgress.d.ts +21 -0
  313. package/dist/components/molecules/StepProgress/StepProgress.d.ts.map +1 -0
  314. package/dist/components/molecules/StepProgress/StepProgress.js +44 -0
  315. package/dist/components/molecules/StepProgress/stepProgressStyles.d.ts +7 -0
  316. package/dist/components/molecules/StepProgress/stepProgressStyles.d.ts.map +1 -0
  317. package/dist/components/molecules/StepProgress/stepProgressStyles.js +7 -0
  318. package/dist/components/molecules/TaskRows/TaskRows.d.ts +67 -0
  319. package/dist/components/molecules/TaskRows/TaskRows.d.ts.map +1 -0
  320. package/dist/components/molecules/TaskRows/TaskRows.js +164 -0
  321. package/dist/components/molecules/TaskRows/taskRowsStyles.d.ts +32 -0
  322. package/dist/components/molecules/TaskRows/taskRowsStyles.d.ts.map +1 -0
  323. package/dist/components/molecules/TaskRows/taskRowsStyles.js +16 -0
  324. package/dist/components/molecules/TextSequence/TextSequence.d.ts +47 -0
  325. package/dist/components/molecules/TextSequence/TextSequence.d.ts.map +1 -0
  326. package/dist/components/molecules/TextSequence/TextSequence.js +242 -0
  327. package/dist/components/molecules/TextSequence/textSequenceStyles.d.ts +10 -0
  328. package/dist/components/molecules/TextSequence/textSequenceStyles.d.ts.map +1 -0
  329. package/dist/components/molecules/TextSequence/textSequenceStyles.js +5 -0
  330. package/dist/components/organisms/Chart/Chart.d.ts +76 -0
  331. package/dist/components/organisms/Chart/Chart.d.ts.map +1 -0
  332. package/dist/components/organisms/Chart/Chart.js +152 -0
  333. package/dist/components/organisms/Chart/ChartCartesian.d.ts +54 -0
  334. package/dist/components/organisms/Chart/ChartCartesian.d.ts.map +1 -0
  335. package/dist/components/organisms/Chart/ChartCartesian.js +479 -0
  336. package/dist/components/organisms/Chart/ChartDistributionStrip.d.ts +24 -0
  337. package/dist/components/organisms/Chart/ChartDistributionStrip.d.ts.map +1 -0
  338. package/dist/components/organisms/Chart/ChartDistributionStrip.js +156 -0
  339. package/dist/components/organisms/Chart/ChartHeatmap.d.ts +24 -0
  340. package/dist/components/organisms/Chart/ChartHeatmap.d.ts.map +1 -0
  341. package/dist/components/organisms/Chart/ChartHeatmap.js +163 -0
  342. package/dist/components/organisms/Chart/ChartHoverTooltip.d.ts +13 -0
  343. package/dist/components/organisms/Chart/ChartHoverTooltip.d.ts.map +1 -0
  344. package/dist/components/organisms/Chart/ChartHoverTooltip.js +29 -0
  345. package/dist/components/organisms/Chart/ChartLegend.d.ts +13 -0
  346. package/dist/components/organisms/Chart/ChartLegend.d.ts.map +1 -0
  347. package/dist/components/organisms/Chart/ChartLegend.js +30 -0
  348. package/dist/components/organisms/Chart/ChartLoading.d.ts +12 -0
  349. package/dist/components/organisms/Chart/ChartLoading.d.ts.map +1 -0
  350. package/dist/components/organisms/Chart/ChartLoading.js +24 -0
  351. package/dist/components/organisms/Chart/ChartRankedBars.d.ts +18 -0
  352. package/dist/components/organisms/Chart/ChartRankedBars.d.ts.map +1 -0
  353. package/dist/components/organisms/Chart/ChartRankedBars.js +52 -0
  354. package/dist/components/organisms/Chart/ChartTooltipContent.d.ts +19 -0
  355. package/dist/components/organisms/Chart/ChartTooltipContent.d.ts.map +1 -0
  356. package/dist/components/organisms/Chart/ChartTooltipContent.js +36 -0
  357. package/dist/components/organisms/Chart/ChartUnitGrid.d.ts +17 -0
  358. package/dist/components/organisms/Chart/ChartUnitGrid.d.ts.map +1 -0
  359. package/dist/components/organisms/Chart/ChartUnitGrid.js +95 -0
  360. package/dist/components/organisms/Chart/chartCartesianContext.d.ts +50 -0
  361. package/dist/components/organisms/Chart/chartCartesianContext.d.ts.map +1 -0
  362. package/dist/components/organisms/Chart/chartCartesianContext.js +18 -0
  363. package/dist/components/organisms/Chart/chartCartesianGaps.d.ts +74 -0
  364. package/dist/components/organisms/Chart/chartCartesianGaps.d.ts.map +1 -0
  365. package/dist/components/organisms/Chart/chartCartesianGaps.js +92 -0
  366. package/dist/components/organisms/Chart/chartCartesianMotion.d.ts +11 -0
  367. package/dist/components/organisms/Chart/chartCartesianMotion.d.ts.map +1 -0
  368. package/dist/components/organisms/Chart/chartCartesianMotion.js +15 -0
  369. package/dist/components/organisms/Chart/chartExploration.d.ts +8 -0
  370. package/dist/components/organisms/Chart/chartExploration.d.ts.map +1 -0
  371. package/dist/components/organisms/Chart/chartExploration.js +31 -0
  372. package/dist/components/organisms/Chart/chartSegmentedBarMotion.d.ts +12 -0
  373. package/dist/components/organisms/Chart/chartSegmentedBarMotion.d.ts.map +1 -0
  374. package/dist/components/organisms/Chart/chartSegmentedBarMotion.js +9 -0
  375. package/dist/components/organisms/Chart/chartStyles.d.ts +93 -0
  376. package/dist/components/organisms/Chart/chartStyles.d.ts.map +1 -0
  377. package/dist/components/organisms/Chart/chartStyles.js +11 -0
  378. package/dist/components/organisms/Confetti/Confetti.d.ts +35 -0
  379. package/dist/components/organisms/Confetti/Confetti.d.ts.map +1 -0
  380. package/dist/components/organisms/Confetti/Confetti.js +96 -0
  381. package/dist/components/organisms/Confetti/confettiPhysics.d.ts +116 -0
  382. package/dist/components/organisms/Confetti/confettiPhysics.d.ts.map +1 -0
  383. package/dist/components/organisms/Confetti/confettiPhysics.js +121 -0
  384. package/dist/components/organisms/Confetti/confettiStyles.d.ts +3 -0
  385. package/dist/components/organisms/Confetti/confettiStyles.d.ts.map +1 -0
  386. package/dist/components/organisms/Confetti/confettiStyles.js +5 -0
  387. package/dist/components/organisms/Dialog/AlertDialog.d.ts +31 -0
  388. package/dist/components/organisms/Dialog/AlertDialog.d.ts.map +1 -0
  389. package/dist/components/organisms/Dialog/AlertDialog.js +80 -0
  390. package/dist/components/organisms/Dialog/Dialog.d.ts +54 -0
  391. package/dist/components/organisms/Dialog/Dialog.d.ts.map +1 -0
  392. package/dist/components/organisms/Dialog/Dialog.js +158 -0
  393. package/dist/components/organisms/Dialog/DialogContext.d.ts +22 -0
  394. package/dist/components/organisms/Dialog/DialogContext.d.ts.map +1 -0
  395. package/dist/components/organisms/Dialog/DialogContext.js +25 -0
  396. package/dist/components/organisms/Dialog/OverlayPanelHeader.d.ts +21 -0
  397. package/dist/components/organisms/Dialog/OverlayPanelHeader.d.ts.map +1 -0
  398. package/dist/components/organisms/Dialog/OverlayPanelHeader.js +50 -0
  399. package/dist/components/organisms/Dialog/dialogStyles.d.ts +66 -0
  400. package/dist/components/organisms/Dialog/dialogStyles.d.ts.map +1 -0
  401. package/dist/components/organisms/Dialog/dialogStyles.js +24 -0
  402. package/dist/components/organisms/FooterReveal/FooterReveal.d.ts +78 -0
  403. package/dist/components/organisms/FooterReveal/FooterReveal.d.ts.map +1 -0
  404. package/dist/components/organisms/FooterReveal/FooterReveal.js +208 -0
  405. package/dist/components/organisms/FooterReveal/FooterRevealRuled.d.ts +40 -0
  406. package/dist/components/organisms/FooterReveal/FooterRevealRuled.d.ts.map +1 -0
  407. package/dist/components/organisms/FooterReveal/FooterRevealRuled.js +120 -0
  408. package/dist/components/organisms/FooterReveal/footerRevealAt.d.ts +8 -0
  409. package/dist/components/organisms/FooterReveal/footerRevealAt.d.ts.map +1 -0
  410. package/dist/components/organisms/FooterReveal/footerRevealAt.js +7 -0
  411. package/dist/components/organisms/FooterReveal/footerRevealStyles.d.ts +142 -0
  412. package/dist/components/organisms/FooterReveal/footerRevealStyles.d.ts.map +1 -0
  413. package/dist/components/organisms/FooterReveal/footerRevealStyles.js +12 -0
  414. package/dist/components/organisms/FooterReveal/footerRevealWordmark.d.ts +37 -0
  415. package/dist/components/organisms/FooterReveal/footerRevealWordmark.d.ts.map +1 -0
  416. package/dist/components/organisms/FooterReveal/footerRevealWordmark.js +51 -0
  417. package/dist/components/organisms/HeroTileStack/HeroTileStack.d.ts +62 -0
  418. package/dist/components/organisms/HeroTileStack/HeroTileStack.d.ts.map +1 -0
  419. package/dist/components/organisms/HeroTileStack/HeroTileStack.js +257 -0
  420. package/dist/components/organisms/HeroTileStack/heroTileScatter.d.ts +120 -0
  421. package/dist/components/organisms/HeroTileStack/heroTileScatter.d.ts.map +1 -0
  422. package/dist/components/organisms/HeroTileStack/heroTileScatter.js +83 -0
  423. package/dist/components/organisms/HeroTileStack/heroTileStackStyles.d.ts +33 -0
  424. package/dist/components/organisms/HeroTileStack/heroTileStackStyles.d.ts.map +1 -0
  425. package/dist/components/organisms/HeroTileStack/heroTileStackStyles.js +11 -0
  426. package/dist/components/organisms/IntakeConfirmation/IntakeConfirmation.d.ts +33 -0
  427. package/dist/components/organisms/IntakeConfirmation/IntakeConfirmation.d.ts.map +1 -0
  428. package/dist/components/organisms/IntakeConfirmation/IntakeConfirmation.js +77 -0
  429. package/dist/components/organisms/IntakeConfirmation/intakeConfirmationStyles.d.ts +22 -0
  430. package/dist/components/organisms/IntakeConfirmation/intakeConfirmationStyles.d.ts.map +1 -0
  431. package/dist/components/organisms/IntakeConfirmation/intakeConfirmationStyles.js +25 -0
  432. package/dist/components/organisms/IntakeModal/IntakeModal.d.ts +33 -0
  433. package/dist/components/organisms/IntakeModal/IntakeModal.d.ts.map +1 -0
  434. package/dist/components/organisms/IntakeModal/IntakeModal.js +108 -0
  435. package/dist/components/organisms/IntakeModal/intakeModalStyles.d.ts +14 -0
  436. package/dist/components/organisms/IntakeModal/intakeModalStyles.d.ts.map +1 -0
  437. package/dist/components/organisms/IntakeModal/intakeModalStyles.js +7 -0
  438. package/dist/components/organisms/MoreMenu/MoreMenu.d.ts +28 -0
  439. package/dist/components/organisms/MoreMenu/MoreMenu.d.ts.map +1 -0
  440. package/dist/components/organisms/MoreMenu/MoreMenu.js +133 -0
  441. package/dist/components/organisms/MoreMenu/moreMenuStyles.d.ts +3 -0
  442. package/dist/components/organisms/MoreMenu/moreMenuStyles.d.ts.map +1 -0
  443. package/dist/components/organisms/MoreMenu/moreMenuStyles.js +5 -0
  444. package/dist/components/organisms/Panel/Panel.d.ts +40 -0
  445. package/dist/components/organisms/Panel/Panel.d.ts.map +1 -0
  446. package/dist/components/organisms/Panel/Panel.js +135 -0
  447. package/dist/components/organisms/Panel/PanelContext.d.ts +19 -0
  448. package/dist/components/organisms/Panel/PanelContext.d.ts.map +1 -0
  449. package/dist/components/organisms/Panel/PanelContext.js +25 -0
  450. package/dist/components/organisms/Panel/panelStyles.d.ts +17 -0
  451. package/dist/components/organisms/Panel/panelStyles.d.ts.map +1 -0
  452. package/dist/components/organisms/Panel/panelStyles.js +25 -0
  453. package/dist/components/organisms/ScrollHorizontal/ScrollHorizontal.d.ts +74 -0
  454. package/dist/components/organisms/ScrollHorizontal/ScrollHorizontal.d.ts.map +1 -0
  455. package/dist/components/organisms/ScrollHorizontal/ScrollHorizontal.js +163 -0
  456. package/dist/components/organisms/ScrollHorizontal/ScrollHorizontalIntro.d.ts +41 -0
  457. package/dist/components/organisms/ScrollHorizontal/ScrollHorizontalIntro.d.ts.map +1 -0
  458. package/dist/components/organisms/ScrollHorizontal/ScrollHorizontalIntro.js +40 -0
  459. package/dist/components/organisms/ScrollHorizontal/scrollHorizontalIntroContext.d.ts +3 -0
  460. package/dist/components/organisms/ScrollHorizontal/scrollHorizontalIntroContext.d.ts.map +1 -0
  461. package/dist/components/organisms/ScrollHorizontal/scrollHorizontalIntroContext.js +6 -0
  462. package/dist/components/organisms/ScrollHorizontal/scrollHorizontalMath.d.ts +167 -0
  463. package/dist/components/organisms/ScrollHorizontal/scrollHorizontalMath.d.ts.map +1 -0
  464. package/dist/components/organisms/ScrollHorizontal/scrollHorizontalMath.js +136 -0
  465. package/dist/components/organisms/ScrollHorizontal/scrollHorizontalStyles.d.ts +84 -0
  466. package/dist/components/organisms/ScrollHorizontal/scrollHorizontalStyles.d.ts.map +1 -0
  467. package/dist/components/organisms/ScrollHorizontal/scrollHorizontalStyles.js +79 -0
  468. package/dist/components/organisms/Sheet/Sheet.d.ts +44 -0
  469. package/dist/components/organisms/Sheet/Sheet.d.ts.map +1 -0
  470. package/dist/components/organisms/Sheet/Sheet.js +152 -0
  471. package/dist/components/organisms/Sheet/SheetContext.d.ts +20 -0
  472. package/dist/components/organisms/Sheet/SheetContext.d.ts.map +1 -0
  473. package/dist/components/organisms/Sheet/SheetContext.js +25 -0
  474. package/dist/components/organisms/Sheet/sheetStyles.d.ts +30 -0
  475. package/dist/components/organisms/Sheet/sheetStyles.d.ts.map +1 -0
  476. package/dist/components/organisms/Sheet/sheetStyles.js +72 -0
  477. package/dist/components/organisms/SiteNav/SiteNav.d.ts +170 -0
  478. package/dist/components/organisms/SiteNav/SiteNav.d.ts.map +1 -0
  479. package/dist/components/organisms/SiteNav/SiteNav.js +536 -0
  480. package/dist/components/organisms/SiteNav/siteNavStyles.d.ts +128 -0
  481. package/dist/components/organisms/SiteNav/siteNavStyles.d.ts.map +1 -0
  482. package/dist/components/organisms/SiteNav/siteNavStyles.js +25 -0
  483. package/dist/components/organisms/SiteNav/useSiteNavCollapse.d.ts +18 -0
  484. package/dist/components/organisms/SiteNav/useSiteNavCollapse.d.ts.map +1 -0
  485. package/dist/components/organisms/SiteNav/useSiteNavCollapse.js +34 -0
  486. package/dist/components/organisms/Tab/Tab.d.ts +27 -0
  487. package/dist/components/organisms/Tab/Tab.d.ts.map +1 -0
  488. package/dist/components/organisms/Tab/Tab.js +223 -0
  489. package/dist/components/organisms/Tab/tabOverflow.d.ts +14 -0
  490. package/dist/components/organisms/Tab/tabOverflow.d.ts.map +1 -0
  491. package/dist/components/organisms/Tab/tabOverflow.js +26 -0
  492. package/dist/components/organisms/Tab/tabStyles.d.ts +16 -0
  493. package/dist/components/organisms/Tab/tabStyles.d.ts.map +1 -0
  494. package/dist/components/organisms/Tab/tabStyles.js +17 -0
  495. package/dist/components/organisms/Toast/Toast.d.ts +17 -0
  496. package/dist/components/organisms/Toast/Toast.d.ts.map +1 -0
  497. package/dist/components/organisms/Toast/Toast.js +150 -0
  498. package/dist/components/organisms/Toast/toastStore.d.ts +41 -0
  499. package/dist/components/organisms/Toast/toastStore.d.ts.map +1 -0
  500. package/dist/components/organisms/Toast/toastStore.js +60 -0
  501. package/dist/components/organisms/Toast/toastStyles.d.ts +11 -0
  502. package/dist/components/organisms/Toast/toastStyles.d.ts.map +1 -0
  503. package/dist/components/organisms/Toast/toastStyles.js +21 -0
  504. package/dist/files/geist-cyrillic-ext-wght-normal.woff2 +0 -0
  505. package/dist/files/geist-cyrillic-wght-normal.woff2 +0 -0
  506. package/dist/files/geist-latin-ext-wght-normal.woff2 +0 -0
  507. package/dist/files/geist-latin-wght-normal.woff2 +0 -0
  508. package/dist/files/geist-mono-cyrillic-ext-wght-normal.woff2 +0 -0
  509. package/dist/files/geist-mono-cyrillic-wght-normal.woff2 +0 -0
  510. package/dist/files/geist-mono-latin-ext-wght-normal.woff2 +0 -0
  511. package/dist/files/geist-mono-latin-wght-normal.woff2 +0 -0
  512. package/dist/files/geist-mono-symbols2-wght-normal.woff2 +0 -0
  513. package/dist/files/geist-mono-vietnamese-wght-normal.woff2 +0 -0
  514. package/dist/files/geist-vietnamese-wght-normal.woff2 +0 -0
  515. package/dist/fonts.css +124 -0
  516. package/dist/grid.css +214 -0
  517. package/dist/index.d.ts +73 -0
  518. package/dist/index.d.ts.map +1 -0
  519. package/dist/index.js +122 -0
  520. package/dist/lib/GridOverlay.d.ts +23 -0
  521. package/dist/lib/GridOverlay.d.ts.map +1 -0
  522. package/dist/lib/GridOverlay.js +78 -0
  523. package/dist/lib/backgroundPatterns.d.ts +27 -0
  524. package/dist/lib/backgroundPatterns.d.ts.map +1 -0
  525. package/dist/lib/backgroundPatterns.js +21 -0
  526. package/dist/lib/chartSampleData.d.ts +20 -0
  527. package/dist/lib/chartSampleData.d.ts.map +1 -0
  528. package/dist/lib/chartTheme.d.ts +367 -0
  529. package/dist/lib/chartTheme.d.ts.map +1 -0
  530. package/dist/lib/chartTheme.js +329 -0
  531. package/dist/lib/clusterScale.d.ts +48 -0
  532. package/dist/lib/clusterScale.d.ts.map +1 -0
  533. package/dist/lib/clusterScale.js +48 -0
  534. package/dist/lib/cn.d.ts +3 -0
  535. package/dist/lib/cn.d.ts.map +1 -0
  536. package/dist/lib/cn.js +7 -0
  537. package/dist/lib/compositionAudit.d.ts +59 -0
  538. package/dist/lib/compositionAudit.d.ts.map +1 -0
  539. package/dist/lib/dialogOverlay.d.ts +7 -0
  540. package/dist/lib/dialogOverlay.d.ts.map +1 -0
  541. package/dist/lib/dialogOverlay.js +41 -0
  542. package/dist/lib/displayCascade.d.ts +27 -0
  543. package/dist/lib/displayCascade.d.ts.map +1 -0
  544. package/dist/lib/gridOverlayUtils.d.ts +34 -0
  545. package/dist/lib/gridOverlayUtils.d.ts.map +1 -0
  546. package/dist/lib/gridOverlayUtils.js +43 -0
  547. package/dist/lib/insetWell.d.ts +19 -0
  548. package/dist/lib/insetWell.d.ts.map +1 -0
  549. package/dist/lib/insetWell.js +5 -0
  550. package/dist/lib/motion.d.ts +81 -0
  551. package/dist/lib/motion.d.ts.map +1 -0
  552. package/dist/lib/motion.js +119 -0
  553. package/dist/lib/segmentedControl.d.ts +9 -0
  554. package/dist/lib/segmentedControl.d.ts.map +1 -0
  555. package/dist/lib/segmentedControl.js +6 -0
  556. package/dist/lib/semanticVariants.d.ts +5 -0
  557. package/dist/lib/semanticVariants.d.ts.map +1 -0
  558. package/dist/lib/shadows.d.ts +17 -0
  559. package/dist/lib/shadows.d.ts.map +1 -0
  560. package/dist/lib/storyCopySource.d.ts +16 -0
  561. package/dist/lib/storyCopySource.d.ts.map +1 -0
  562. package/dist/lib/tableLayout/index.d.ts +4 -0
  563. package/dist/lib/tableLayout/index.d.ts.map +1 -0
  564. package/dist/lib/tableLayout/tableLayout.d.ts +24 -0
  565. package/dist/lib/tableLayout/tableLayout.d.ts.map +1 -0
  566. package/dist/lib/tableLayout/tableMeasurer.d.ts +21 -0
  567. package/dist/lib/tableLayout/tableMeasurer.d.ts.map +1 -0
  568. package/dist/lib/tableLayout/useTableLayout.d.ts +6 -0
  569. package/dist/lib/tableLayout/useTableLayout.d.ts.map +1 -0
  570. package/dist/lib/typography.d.ts +93 -0
  571. package/dist/lib/typography.d.ts.map +1 -0
  572. package/dist/lib/typography.js +170 -0
  573. package/dist/lib/useScrollThreshold.d.ts +22 -0
  574. package/dist/lib/useScrollThreshold.d.ts.map +1 -0
  575. package/dist/lib/useScrollThreshold.js +29 -0
  576. package/dist/lib/viewports.d.ts +120 -0
  577. package/dist/lib/viewports.d.ts.map +1 -0
  578. package/dist/motion.css +73 -0
  579. package/dist/patterns.css +37 -0
  580. package/dist/scrollFade.css +380 -0
  581. package/dist/shape.css +8 -0
  582. package/dist/sources.css +70 -0
  583. package/dist/stateColors.css +73 -0
  584. package/dist/styles.css +2 -0
  585. package/dist/theme.css +200 -0
  586. package/dist/typography.css +224 -0
  587. package/docs/README.md +27 -0
  588. package/docs/component-contracts.md +27 -0
  589. package/docs/components.md +61 -0
  590. package/docs/consumer-agents.md +34 -0
  591. package/docs/exports.json +803 -0
  592. package/docs/patterns/components-avatar--dropdown-row.tsx +20 -0
  593. package/docs/patterns/components-badge--with-avatar.tsx +28 -0
  594. package/docs/patterns/components-button-button--destructive-action.tsx +7 -0
  595. package/docs/patterns/components-button-button--ghost-action.tsx +7 -0
  596. package/docs/patterns/components-button-button--inverse-action.tsx +7 -0
  597. package/docs/patterns/components-button-button--link-render.tsx +14 -0
  598. package/docs/patterns/components-button-button--multi-state-badge.tsx +16 -0
  599. package/docs/patterns/components-button-button--outline-mono.tsx +10 -0
  600. package/docs/patterns/components-button-button--primary-action.tsx +7 -0
  601. package/docs/patterns/components-button-button--row-hug.tsx +15 -0
  602. package/docs/patterns/components-button-button--row-layout.tsx +14 -0
  603. package/docs/patterns/components-button-button--secondary-action.tsx +7 -0
  604. package/docs/patterns/components-button-button--suggestion-pills.tsx +17 -0
  605. package/docs/patterns/components-button-button--with-count.tsx +9 -0
  606. package/docs/patterns/components-button-button--with-icon.tsx +22 -0
  607. package/docs/patterns/components-button-floatingactionbutton--vertical-actions.tsx +22 -0
  608. package/docs/patterns/components-calembed--pattern-skip-in-footer.tsx +25 -0
  609. package/docs/patterns/components-card-card--body-slot-occupancy-history.tsx +44 -0
  610. package/docs/patterns/components-card-card--headerless-media.tsx +23 -0
  611. package/docs/patterns/components-card-card--outlined-layout.tsx +16 -0
  612. package/docs/patterns/components-card-card--pinned-height.tsx +39 -0
  613. package/docs/patterns/components-card-selectablecard--selectable-cards-pattern.tsx +48 -0
  614. package/docs/patterns/components-chart--audience-activity-heatmap.tsx +26 -0
  615. package/docs/patterns/components-chart--cartesian-no-data-gaps.tsx +25 -0
  616. package/docs/patterns/components-chart--occupancy-history-in-card.tsx +44 -0
  617. package/docs/patterns/components-chart--occupancy-in-card.tsx +49 -0
  618. package/docs/patterns/components-chart--post-reach-distribution.tsx +21 -0
  619. package/docs/patterns/components-chart--ranked-audience-breakdown.tsx +16 -0
  620. package/docs/patterns/components-chart--unit-grid-composition.tsx +22 -0
  621. package/docs/patterns/components-chatqa--pattern-qa-with-reply.tsx +25 -0
  622. package/docs/patterns/components-checkbox-checkbox--default.tsx +17 -0
  623. package/docs/patterns/components-checkbox-checkbox--with-description.tsx +18 -0
  624. package/docs/patterns/components-checkbox-checkboxgroup--default.tsx +21 -0
  625. package/docs/patterns/components-dialog--alert-dialog-destructive.tsx +28 -0
  626. package/docs/patterns/components-dialog--default-dialog.tsx +39 -0
  627. package/docs/patterns/components-dialog--form-dialog.tsx +41 -0
  628. package/docs/patterns/components-displaycontrols--page-utilities.tsx +36 -0
  629. package/docs/patterns/components-field--horizontal-input.tsx +9 -0
  630. package/docs/patterns/components-field--horizontal-text-area.tsx +9 -0
  631. package/docs/patterns/components-field--multi-control.tsx +10 -0
  632. package/docs/patterns/components-footerreveal--marketing-hero-pattern.tsx +94 -0
  633. package/docs/patterns/components-footerreveal--marketing-hero-ruled-pattern.tsx +121 -0
  634. package/docs/patterns/components-footerreveal--marketing-hero-with-gallery-intro.tsx +114 -0
  635. package/docs/patterns/components-footerreveal--marketing-page-pattern.tsx +76 -0
  636. package/docs/patterns/components-footerreveal--ruled-grid-footer-pattern.tsx +42 -0
  637. package/docs/patterns/components-footerreveal--sequenced-marketing-hero.tsx +123 -0
  638. package/docs/patterns/components-herointro--two-line-intro.tsx +15 -0
  639. package/docs/patterns/components-herotilestack--marketing-hero-pattern.tsx +72 -0
  640. package/docs/patterns/components-herotilestack--marketing-hero-text-sequence.tsx +84 -0
  641. package/docs/patterns/components-herotilestack--marketing-hero-with-gallery-intro.tsx +92 -0
  642. package/docs/patterns/components-intakeconfirmation--booked-pattern.tsx +20 -0
  643. package/docs/patterns/components-intakeconfirmation--emailed-pattern.tsx +13 -0
  644. package/docs/patterns/components-intakeform--about-you-pattern.tsx +12 -0
  645. package/docs/patterns/components-intakemodal--intake-modal-pattern.tsx +32 -0
  646. package/docs/patterns/components-kbd--command-row.tsx +13 -0
  647. package/docs/patterns/components-kbd--numbered-choices.tsx +53 -0
  648. package/docs/patterns/components-kbd--shortcut.tsx +11 -0
  649. package/docs/patterns/components-moremenu--action-menu.tsx +36 -0
  650. package/docs/patterns/components-moremenu--in-card-header.tsx +72 -0
  651. package/docs/patterns/components-navlist--side-nav-settings.tsx +58 -0
  652. package/docs/patterns/components-pageheader--app-header-pattern.tsx +40 -0
  653. package/docs/patterns/components-pageheader--page-section-header.tsx +20 -0
  654. package/docs/patterns/components-pageheader--toolbar-header.tsx +37 -0
  655. package/docs/patterns/components-panel--end-detail-rail.tsx +65 -0
  656. package/docs/patterns/components-pillgroup--pill-group-pattern.tsx +22 -0
  657. package/docs/patterns/components-promptbar--pattern-marketing-composer.tsx +37 -0
  658. package/docs/patterns/components-promptbar--pattern-prompt-bar.tsx +20 -0
  659. package/docs/patterns/components-radio-radiogroup--default.tsx +21 -0
  660. package/docs/patterns/components-scrollhorizontal--project-gallery-pattern.tsx +22 -0
  661. package/docs/patterns/components-scrollhorizontal--with-intro.tsx +42 -0
  662. package/docs/patterns/components-sheet--bottom-sheet.tsx +40 -0
  663. package/docs/patterns/components-sheet--end-sheet.tsx +33 -0
  664. package/docs/patterns/components-sitenav--brand-and-cta.tsx +17 -0
  665. package/docs/patterns/components-sitenav--centered-links.tsx +20 -0
  666. package/docs/patterns/components-sitenav--compact.tsx +24 -0
  667. package/docs/patterns/components-sitenav--marketing-header.tsx +80 -0
  668. package/docs/patterns/components-sitenav--mega-menu.tsx +51 -0
  669. package/docs/patterns/components-stat--insights-row.tsx +28 -0
  670. package/docs/patterns/components-stepprogress--step-progress-pattern.tsx +9 -0
  671. package/docs/patterns/components-switch--default.tsx +17 -0
  672. package/docs/patterns/components-switch--settings-row.tsx +19 -0
  673. package/docs/patterns/components-tab--settings-pages.tsx +21 -0
  674. package/docs/patterns/components-taskrows--action-details.tsx +40 -0
  675. package/docs/patterns/components-taskrows--capsules.tsx +14 -0
  676. package/docs/patterns/components-taskrows--card-with-status-rows.tsx +30 -0
  677. package/docs/patterns/components-taskrows--controlled-expand.tsx +31 -0
  678. package/docs/patterns/components-taskrows--custom-slots.tsx +21 -0
  679. package/docs/patterns/components-taskrows--status-list.tsx +23 -0
  680. package/docs/patterns/components-taskrows--tag-chips.tsx +19 -0
  681. package/docs/patterns/components-textlink--external-destination.tsx +9 -0
  682. package/docs/patterns/components-textlink--inline-prose.tsx +9 -0
  683. package/docs/patterns/components-textlink--supporting-copy.tsx +9 -0
  684. package/docs/patterns/components-textsequence--default.tsx +16 -0
  685. package/docs/patterns/components-textsequence--reduced-motion.tsx +16 -0
  686. package/docs/patterns/components-textsequence--shapes.tsx +40 -0
  687. package/docs/patterns/components-toast--stacked-notifications.tsx +31 -0
  688. package/docs/patterns/components-tooltip--controlled.tsx +20 -0
  689. package/docs/patterns/components-tooltip--disabled-control.tsx +20 -0
  690. package/docs/patterns/components-tooltip--icon-action.tsx +21 -0
  691. package/docs/patterns/components-tooltip--keyboard-shortcut.tsx +17 -0
  692. package/docs/patterns/components-tooltip--placement.tsx +12 -0
  693. package/docs/patterns/foundations-scroll-fade--horizontal-rail.tsx +24 -0
  694. package/docs/patterns/foundations-scroll-fade--overflowing-list.tsx +25 -0
  695. package/docs/patterns/guides-chart-explorations--comparison-gallery.tsx +78 -0
  696. package/docs/patterns/guides-overlay-flows--notification-preferences.tsx +140 -0
  697. package/docs/patterns/guides-profile-typography--editorial-profile.tsx +81 -0
  698. package/docs/patterns/index.json +1006 -0
  699. package/docs/patterns/sites-pitchkit-account-settings--account-settings-owner.tsx +265 -0
  700. package/docs/patterns/sites-pitchkit-creator-identity--creator-identity-owner-settings.tsx +154 -0
  701. package/docs/patterns/sites-pitchkit-creator-identity--creator-identity-public.tsx +96 -0
  702. package/docs/patterns/sites-pitchkit-insights-and-kit--creator-insights-loading.tsx +1006 -0
  703. package/docs/patterns/sites-pitchkit-insights-and-kit--creator-insights.tsx +1031 -0
  704. package/docs/patterns/sites-pitchkit-insights-and-kit--insufficient-audience-data.tsx +1015 -0
  705. package/docs/patterns/sites-pitchkit-insights-and-kit--insufficient-reach-and-audience-data.tsx +1017 -0
  706. package/docs/patterns/sites-pitchkit-insights-and-kit--insufficient-reach-data.tsx +1033 -0
  707. package/docs/patterns/sites-pitchkit-insights-and-kit--owner-pitch-kit.tsx +838 -0
  708. package/docs/patterns/sites-pitchkit-insights-and-kit--shareable-pitch-kit.tsx +608 -0
  709. package/docs/patterns/sites-pitchkit-intro--intro-owner.tsx +161 -0
  710. package/docs/patterns/sites-pitchkit-intro--intro-public.tsx +111 -0
  711. package/docs/patterns/sites-pitchkit-past-brands--past-brands-owner.tsx +611 -0
  712. package/docs/patterns/sites-pitchkit-past-brands--past-brands-public.tsx +299 -0
  713. package/docs/patterns/sites-pitchkit-theme-picker--theme-picker-owner.tsx +832 -0
  714. package/docs/patterns/sites-whatmatters-intake--start-a-project-pattern.tsx +234 -0
  715. package/docs/patterns/sites-whatmatters-marketing-landing--marketing-landing.tsx +87 -0
  716. package/docs/patterns/sites-whatmatters-prompt-chat--landing-to-chat.tsx +899 -0
  717. package/docs/patterns/sites-whatmatters-rfp-submitted--rfp-submitted.tsx +302 -0
  718. package/package.json +123 -0
  719. package/public/rive/CREDITS.md +13 -0
  720. package/public/rive/interactive-icon-set.riv +0 -0
@@ -0,0 +1,1031 @@
1
+ // @thewhatmatters/wmds@0.2.0 · Pattern — creator Insights
2
+ // Storybook: Sites/PitchKit/Insights and kit → Pattern — creator Insights (?path=/story/sites-pitchkit-insights-and-kit--creator-insights)
3
+ // Show code — copy verbatim and keep this header; upgrades find pasted patterns by it.
4
+
5
+ import { useLayoutEffect, useRef, useState, type CSSProperties } from "react";
6
+ import {
7
+ AlertDialog,
8
+ Avatar,
9
+ Badge,
10
+ Button,
11
+ ButtonIcon,
12
+ Card,
13
+ Chart,
14
+ Chip,
15
+ Dialog,
16
+ Dropdown,
17
+ MoreMenu,
18
+ PageHeader,
19
+ SegmentedControl,
20
+ Stat,
21
+ Tab,
22
+ TextLink,
23
+ Toaster,
24
+ cardSubtitleClasses,
25
+ cardTitleClasses,
26
+ chartSeriesConfigFromKeys,
27
+ toast,
28
+ type ChartCartesianPoint,
29
+ type ChartRankedBarItem,
30
+ } from "@thewhatmatters/wmds";
31
+ import { EyeOff } from "lucide-react";
32
+
33
+ const reachConfig = chartSeriesConfigFromKeys([
34
+ { key: "typical", label: "Typical reach" },
35
+ { key: "reach", label: "Daily reach" },
36
+ ]);
37
+
38
+ const compactNumber = new Intl.NumberFormat("en", {
39
+ notation: "compact",
40
+ maximumFractionDigits: 1,
41
+ });
42
+
43
+ type PitchKitProofMetric = "reach" | "engagement" | "saves";
44
+
45
+ const proofMetricNotices: Record<PitchKitProofMetric, string> = {
46
+ reach: "Ranked by Instagram reach.",
47
+ engagement: "Ranked by likes + comments.",
48
+ saves: "Ranked by Instagram saves.",
49
+ };
50
+
51
+ function proofMetricValue(post: PitchKitPost, metric: PitchKitProofMetric) {
52
+ if (metric === "engagement") return post.likes + post.comments;
53
+ return post[metric];
54
+ }
55
+
56
+
57
+ export interface PitchKitAudience {
58
+ countries: ChartRankedBarItem[];
59
+ cities: ChartRankedBarItem[];
60
+ ages: ChartRankedBarItem[];
61
+ gender: ChartRankedBarItem[];
62
+ }
63
+
64
+ function AudienceSection({ title, items }: { title: string; items: ChartRankedBarItem[] }) {
65
+ return (
66
+ <section className="flex min-w-0 flex-col gap-3">
67
+ <h3 className="type-supporting font-medium uppercase tracking-wider text-muted text-muted">{title}</h3>
68
+ <Chart.RankedBars
69
+ aria-label={`Audience by ${title.toLowerCase()}`}
70
+ items={items}
71
+ animate="initial"
72
+ />
73
+ </section>
74
+ );
75
+ }
76
+
77
+
78
+ function copyShareKitUrl(handle: string) {
79
+ const path = `/k/${handle}`;
80
+ void navigator.clipboard.writeText(path);
81
+ toast.add({
82
+ title: "Kit URL copied",
83
+ description: path,
84
+ tone: "success",
85
+ });
86
+ }
87
+
88
+ function AccountSettingsDialog({
89
+ identity,
90
+ open,
91
+ onOpenChange,
92
+ }: {
93
+ identity: PitchKitCreatorIdentity;
94
+ open: boolean;
95
+ onOpenChange: (open: boolean) => void;
96
+ }) {
97
+ return (
98
+ <Dialog open={open} onOpenChange={onOpenChange}>
99
+ <Dialog.Content size="md" title="Account settings">
100
+ <div className="flex w-full min-w-0 flex-col gap-4">
101
+ <Card variant="outlined" shape="rounded" bodyTerminal className="col-span-full">
102
+ <Card.Header
103
+ start={<h2 className={cardTitleClasses}>Connected Instagram</h2>}
104
+ end={
105
+ identity.connected ? (
106
+ <Badge variant="success" emphasis="muted" size="sm">
107
+ Connected
108
+ </Badge>
109
+ ) : null
110
+ }
111
+ />
112
+ <Card.Body>
113
+ <div className="flex min-w-0 flex-col gap-4 px-3.5 py-[16px]">
114
+ <CreatorIdentityStrip
115
+ identity={identity}
116
+ nameAs="p"
117
+ showProfessionalChip
118
+ />
119
+ {identity.lastSyncedLabel != null ? (
120
+ <p className="type-supporting text-muted text-muted">
121
+ Last synced {identity.lastSyncedLabel}
122
+ </p>
123
+ ) : null}
124
+ </div>
125
+ </Card.Body>
126
+ </Card>
127
+ </div>
128
+ </Dialog.Content>
129
+ </Dialog>
130
+ );
131
+ }
132
+
133
+ function OwnerAccountMenu({ identity }: { identity: PitchKitCreatorIdentity }) {
134
+ const [menuOpen, setMenuOpen] = useState(false);
135
+ const [settingsOpen, setSettingsOpen] = useState(false);
136
+ const [deleteOpen, setDeleteOpen] = useState(false);
137
+
138
+ function handleAction(actionId: string) {
139
+ setMenuOpen(false);
140
+ if (actionId === "settings") {
141
+ setSettingsOpen(true);
142
+ return;
143
+ }
144
+ if (actionId === "share") {
145
+ copyShareKitUrl(identity.handle);
146
+ return;
147
+ }
148
+ if (actionId === "delete") {
149
+ setDeleteOpen(true);
150
+ }
151
+ }
152
+
153
+ return (
154
+ <>
155
+ <div className="relative">
156
+ <Button
157
+ type="button"
158
+ role="ghost"
159
+ size="sm"
160
+ aria-label="My account"
161
+ aria-haspopup="menu"
162
+ aria-expanded={menuOpen}
163
+ className="size-9 min-h-9 gap-0 px-0 py-0 focus-visible:ring-offset-0"
164
+ onClick={() => setMenuOpen((open) => !open)}
165
+ >
166
+ <Avatar
167
+ name={identity.displayName ?? identity.handle}
168
+ src={identity.profilePictureUrl}
169
+ size="md"
170
+ />
171
+ </Button>
172
+ {menuOpen ? (
173
+ <Dropdown.Menu
174
+ role="menu"
175
+ aria-label="My account"
176
+ className="absolute end-0 top-full mt-1 min-w-56"
177
+ >
178
+ <li role="presentation">
179
+ <p className="type-supporting font-medium uppercase tracking-wider text-muted px-3.5 py-2">My account</p>
180
+ </li>
181
+ <li role="presentation">
182
+ <Dropdown.Item role="menuitem" truncate={false} onClick={() => handleAction("settings")}>
183
+ Account settings
184
+ </Dropdown.Item>
185
+ </li>
186
+ <li role="presentation">
187
+ <Dropdown.Item role="menuitem" truncate={false} onClick={() => handleAction("share")}>
188
+ Share kit
189
+ </Dropdown.Item>
190
+ </li>
191
+ <li role="separator" className="mx-1.5 my-0.5 border-0 border-t border-border" />
192
+ <li role="presentation">
193
+ <Dropdown.Item role="menuitem" truncate={false} onClick={() => handleAction("signout")}>
194
+ Sign out
195
+ </Dropdown.Item>
196
+ </li>
197
+ <li role="presentation">
198
+ <Dropdown.Item role="menuitem" truncate={false} onClick={() => handleAction("disconnect")}>
199
+ Disconnect
200
+ </Dropdown.Item>
201
+ </li>
202
+ <li role="presentation">
203
+ <Dropdown.Item role="menuitem" truncate={false} onClick={() => handleAction("delete")}>Delete</Dropdown.Item>
204
+ </li>
205
+ </Dropdown.Menu>
206
+ ) : null}
207
+ </div>
208
+ <AccountSettingsDialog
209
+ identity={identity}
210
+ open={settingsOpen}
211
+ onOpenChange={setSettingsOpen}
212
+ />
213
+ <AlertDialog
214
+ open={deleteOpen}
215
+ onOpenChange={setDeleteOpen}
216
+ title="Delete your Pitchkit account?"
217
+ description="This permanently deletes your kit, stored media copies, and connection. Your Instagram account is not deleted. This cannot be undone."
218
+ cancelLabel="Cancel"
219
+ confirmLabel="Delete account"
220
+ confirmRole="destructive"
221
+ onConfirm={() => setDeleteOpen(false)}
222
+ />
223
+ </>
224
+ );
225
+ }
226
+
227
+ function PitchKitPageFooter() {
228
+ return (
229
+ <div className="band pb-6 pt-10">
230
+ <footer className="col-span-full flex items-center justify-center gap-4">
231
+ <TextLink href="/privacy">Privacy</TextLink>
232
+ <TextLink href="mailto:hello@whatmatters.com">Support</TextLink>
233
+ </footer>
234
+ </div>
235
+ );
236
+ }
237
+
238
+
239
+
240
+ export interface PitchKitCreatorIdentity {
241
+ displayName?: string;
242
+ /** Without the @ — shown as @handle, shared as /k/[handle]. */
243
+ handle: string;
244
+ profilePictureUrl?: string;
245
+ followersCount?: number;
246
+ professionalAccount?: "Business" | "Creator";
247
+ connected?: boolean;
248
+ lastSyncedLabel?: string;
249
+ }
250
+
251
+ function CreatorIdentityStrip({
252
+ identity,
253
+ nameAs = "h1",
254
+ showProfessionalChip = false,
255
+ }: {
256
+ identity: PitchKitCreatorIdentity;
257
+ nameAs?: "h1" | "p";
258
+ showProfessionalChip?: boolean;
259
+ }) {
260
+ const NameTag = nameAs;
261
+ const avatarName = identity.displayName ?? identity.handle;
262
+ const handleLabel = `@${identity.handle}`;
263
+ const followerLabel =
264
+ identity.followersCount == null
265
+ ? null
266
+ : `${compactNumber.format(identity.followersCount)} followers`;
267
+ const meta = [handleLabel, followerLabel].filter(Boolean).join(" · ");
268
+ const showTitleRow =
269
+ identity.displayName != null ||
270
+ (showProfessionalChip && identity.professionalAccount != null);
271
+
272
+ return (
273
+ <div className="flex flex-wrap items-center gap-4">
274
+ <Avatar
275
+ name={avatarName}
276
+ src={identity.profilePictureUrl}
277
+ size="lg"
278
+ />
279
+ <div className="flex min-w-0 flex-col gap-1">
280
+ {showTitleRow ? (
281
+ <div className="flex flex-wrap items-center gap-2">
282
+ {identity.displayName != null ? (
283
+ <NameTag className="type-heading-2 text-fg">
284
+ {identity.displayName}
285
+ </NameTag>
286
+ ) : null}
287
+ {showProfessionalChip && identity.professionalAccount != null ? (
288
+ <Chip readOnly size="sm">
289
+ {identity.professionalAccount}
290
+ </Chip>
291
+ ) : null}
292
+ </div>
293
+ ) : null}
294
+ <p className="type-body text-fg text-muted">{meta}</p>
295
+ </div>
296
+ </div>
297
+ );
298
+ }
299
+
300
+
301
+ export interface PitchKitPost {
302
+ id: string;
303
+ publishedAt: string;
304
+ imageUrl: string;
305
+ imageAlt: string;
306
+ saves: number;
307
+ reach: number;
308
+ likes: number;
309
+ comments: number;
310
+ }
311
+
312
+ export interface PitchKitContact {
313
+ email: string;
314
+ websiteHref: string;
315
+ websiteLabel: string;
316
+ location: string;
317
+ }
318
+
319
+ /** "insufficient" when the 30-day reach series cannot be plotted. */
320
+ export type PitchKitReachState = "resolved" | "insufficient";
321
+
322
+ export interface PitchKitPageData {
323
+ identity: PitchKitCreatorIdentity;
324
+ intro: string;
325
+ posts: PitchKitPost[];
326
+ contact: PitchKitContact;
327
+ brands: PitchKitPastBrand[];
328
+ countries: ChartRankedBarItem[];
329
+ reachData: ChartCartesianPoint[];
330
+ }
331
+
332
+
333
+ export interface PitchKitPastBrand {
334
+ id: string;
335
+ name: string;
336
+ /** Curated mark key — missing or unknown keys use a letter Avatar. */
337
+ logo_key?: string;
338
+ result_label?: string;
339
+ }
340
+
341
+ const PITCHKIT_BRAND_RESULT_MAX = 24;
342
+ const PITCHKIT_BRAND_LOGO_LETTER = "letter";
343
+
344
+ const pitchKitBrandLogoKeys = [
345
+ "nike", "adidas", "apple", "google", "meta", "amazon", "spotify", "netflix",
346
+ "sephora", "glossier", "nordstrom", "target", "walmart", "starbucks",
347
+ "coca-cola", "pepsi", "samsung", "microsoft", "adobe", "shopify",
348
+ "uber", "airbnb", "disney", "lululemon", "reebok", "puma",
349
+ "dior", "chanel", "bmw", "ford", "chase", "visa",
350
+ ];
351
+
352
+ const pastBrandLogoKeySet = new Set(pitchKitBrandLogoKeys);
353
+
354
+ function resolvePastBrandLogoKey(logoKey: string | null | undefined) {
355
+ if (logoKey == null || logoKey === "" || logoKey === PITCHKIT_BRAND_LOGO_LETTER) {
356
+ return undefined;
357
+ }
358
+ return pastBrandLogoKeySet.has(logoKey) ? logoKey : undefined;
359
+ }
360
+
361
+ function pastBrandLogoMonogram(logoKey: string) {
362
+ const parts = logoKey.split("-");
363
+ if (parts.length > 1) {
364
+ return parts.map((part) => part.charAt(0).toUpperCase()).join("").slice(0, 2);
365
+ }
366
+ return logoKey.slice(0, 1).toUpperCase();
367
+ }
368
+
369
+ function normalizePastBrandResult(value: string | null | undefined) {
370
+ const trimmed = value?.trim() ?? "";
371
+ if (trimmed.length === 0) return undefined;
372
+ return trimmed.slice(0, PITCHKIT_BRAND_RESULT_MAX);
373
+ }
374
+
375
+ function BrandMark({ name, logoKey }: { name: string; logoKey?: string }) {
376
+ const resolved = resolvePastBrandLogoKey(logoKey);
377
+ if (resolved == null) {
378
+ return <Avatar name={name} size="sm" />;
379
+ }
380
+
381
+ return (
382
+ <span className="flex size-6 shrink-0 items-center justify-center rounded-full bg-fg type-supporting text-muted font-medium uppercase leading-none text-bg" role="img" aria-label={name}>
383
+ <span aria-hidden>{pastBrandLogoMonogram(resolved)}</span>
384
+ </span>
385
+ );
386
+ }
387
+
388
+ function BrandResultChip({ label }: { label?: string }) {
389
+ const result = normalizePastBrandResult(label);
390
+ if (result == null) return null;
391
+ return <Chip readOnly size="sm">{result}</Chip>;
392
+ }
393
+
394
+ function BrandLockup({ brand }: { brand: PitchKitPastBrand }) {
395
+ return (
396
+ <div className="flex min-w-0 items-center gap-3">
397
+ <BrandMark name={brand.name} logoKey={brand.logo_key} />
398
+ <h3 className="type-label text-fg">{brand.name}</h3>
399
+ <BrandResultChip label={brand.result_label} />
400
+ </div>
401
+ );
402
+ }
403
+
404
+ function PastBrandCard({ brand, className }: { brand: PitchKitPastBrand; className: string }) {
405
+ return (
406
+ <Card variant="outlined" shape="rounded" className={className}>
407
+ <Card.Header start={<BrandLockup brand={brand} />} />
408
+ </Card>
409
+ );
410
+ }
411
+
412
+ function PastBrandsRail({ brands }: { brands: readonly PitchKitPastBrand[] }) {
413
+ const hostRef = useRef<HTMLDivElement>(null);
414
+ const measureRef = useRef<HTMLUListElement>(null);
415
+ const [overflows, setOverflows] = useState(false);
416
+ const [reduceMotion, setReduceMotion] = useState(false);
417
+
418
+ useLayoutEffect(() => {
419
+ const media = window.matchMedia("(prefers-reduced-motion: reduce)");
420
+ const updateMotion = () => setReduceMotion(media.matches);
421
+ updateMotion();
422
+ media.addEventListener("change", updateMotion);
423
+ return () => media.removeEventListener("change", updateMotion);
424
+ }, []);
425
+
426
+ useLayoutEffect(() => {
427
+ const host = hostRef.current;
428
+ const measure = measureRef.current;
429
+ if (host == null || measure == null) return;
430
+
431
+ const update = () => {
432
+ setOverflows(measure.scrollWidth > host.clientWidth + 1);
433
+ };
434
+ update();
435
+ const observer = new ResizeObserver(update);
436
+ observer.observe(host);
437
+ observer.observe(measure);
438
+ return () => observer.disconnect();
439
+ }, [brands]);
440
+
441
+ const duration = Math.max(16, brands.length * 4);
442
+ const showMarquee = overflows && !reduceMotion;
443
+
444
+ return (
445
+ <div
446
+ ref={hostRef}
447
+ className="relative col-span-full min-w-0"
448
+ data-overflow={showMarquee ? "true" : "false"}
449
+ >
450
+ <ul ref={measureRef} className="pointer-events-none invisible absolute flex w-max items-center gap-3" aria-hidden>
451
+ {brands.map((brand) => (
452
+ <li key={`${brand.id}-measure`}>
453
+ <PastBrandCard brand={brand} className="w-max max-w-full shrink-0" />
454
+ </li>
455
+ ))}
456
+ </ul>
457
+ {reduceMotion ? (
458
+ <ul className="flex min-w-0 flex-wrap items-center gap-3" aria-label="Past brands">
459
+ {brands.map((brand) => (
460
+ <li key={brand.id}>
461
+ <PastBrandCard brand={brand} className="w-max max-w-full shrink-0" />
462
+ </li>
463
+ ))}
464
+ </ul>
465
+ ) : showMarquee ? (
466
+ <>
467
+ <ul className="sr-only" aria-label="Past brands">
468
+ {brands.map((brand) => {
469
+ const result = normalizePastBrandResult(brand.result_label);
470
+ return (
471
+ <li key={brand.id}>
472
+ {result == null ? brand.name : `${brand.name}, ${result}`}
473
+ </li>
474
+ );
475
+ })}
476
+ </ul>
477
+ <div className="group overflow-hidden" aria-hidden>
478
+ <div
479
+ className="marquee-track flex w-max items-center"
480
+ style={{ "--marquee-duration": `${duration}s` } as CSSProperties}
481
+ >
482
+ <ul className="flex min-w-0 items-center gap-3">
483
+ {brands.map((brand) => (
484
+ <li key={`${brand.id}-loop-a`}>
485
+ <PastBrandCard brand={brand} className="w-max max-w-full shrink-0" />
486
+ </li>
487
+ ))}
488
+ </ul>
489
+ <ul className="flex min-w-0 items-center gap-3">
490
+ {brands.map((brand) => (
491
+ <li key={`${brand.id}-loop-b`}>
492
+ <PastBrandCard brand={brand} className="w-max max-w-full shrink-0" />
493
+ </li>
494
+ ))}
495
+ </ul>
496
+ </div>
497
+ </div>
498
+ </>
499
+ ) : (
500
+ <ul className="flex min-w-0 items-center gap-3" aria-label="Past brands">
501
+ {brands.map((brand) => (
502
+ <li key={brand.id}>
503
+ <PastBrandCard brand={brand} className="w-max max-w-full shrink-0" />
504
+ </li>
505
+ ))}
506
+ </ul>
507
+ )}
508
+ </div>
509
+ );
510
+ }
511
+
512
+ export function PublicPastBrands({ brands }: { brands: readonly PitchKitPastBrand[] }) {
513
+ if (brands.length === 0) return null;
514
+
515
+ return (
516
+ <section className="band min-w-0 gap-y-4">
517
+ <div className="col-span-full flex flex-wrap items-end justify-between gap-3">
518
+ <h2 className={cardTitleClasses}>Past brands</h2>
519
+ </div>
520
+ <PastBrandsRail brands={brands} />
521
+ </section>
522
+ );
523
+ }
524
+
525
+
526
+ interface OwnerPitchKitProps extends PitchKitPageData {
527
+ reachState?: PitchKitReachState;
528
+ }
529
+
530
+ function pitchKitIntroIsEmpty(intro: string) {
531
+ return intro.trim().length === 0;
532
+ }
533
+
534
+ function PublicIntro({ intro }: { intro: string }) {
535
+ if (pitchKitIntroIsEmpty(intro)) return null;
536
+ return <p className="type-body text-fg text-fg">{intro}</p>;
537
+ }
538
+
539
+ function OwnerReachCard({
540
+ reachState,
541
+ reachData,
542
+ }: {
543
+ reachState: PitchKitReachState;
544
+ reachData: ChartCartesianPoint[];
545
+ }) {
546
+ return (
547
+ <Card
548
+ variant="outlined"
549
+ shape="rounded"
550
+ bodyTerminal
551
+ className="col-span-full min-w-0"
552
+ >
553
+ <Card.Header
554
+ start={
555
+ <>
556
+ <h2 className={cardTitleClasses}>Reach over 30 days</h2>
557
+ <p className={cardSubtitleClasses}>
558
+ Typical performance with unusual spikes left visible.
559
+ </p>
560
+ </>
561
+ }
562
+ end={
563
+ <Badge variant="neutral" emphasis="muted" size="sm">
564
+ Graph data
565
+ </Badge>
566
+ }
567
+ />
568
+ <Card.Body>
569
+ {reachState === "insufficient" ? (
570
+ <div
571
+ className="flex min-w-0 flex-col gap-4 bg-body px-3.5 py-4 rounded-[var(--radius-card-body)] items-center justify-center text-center"
572
+ style={{ minHeight: 220 }}
573
+ >
574
+ <div className="flex max-w-lg flex-col gap-2 items-center text-center">
575
+ <Badge variant="neutral" emphasis="muted">No data</Badge>
576
+ <h3 className="type-heading-2 text-fg">No reach data yet</h3>
577
+ <p className="type-body text-fg text-muted">
578
+ Connect more Instagram activity to plot the last 30 days.
579
+ </p>
580
+ </div>
581
+ </div>
582
+ ) : (
583
+ <div className="flex min-w-0 flex-col gap-4 bg-body px-3.5 py-4 rounded-[var(--radius-card-body)]">
584
+ <Chart.Cartesian
585
+ data={reachData}
586
+ config={reachConfig}
587
+ periodKind="month"
588
+ minHeight={220}
589
+ aria-label="Daily and typical Instagram reach over the last 30 days"
590
+ />
591
+ <Chart.Legend config={reachConfig} />
592
+ </div>
593
+ )}
594
+ </Card.Body>
595
+ </Card>
596
+ );
597
+ }
598
+
599
+ function OwnerCountries({ countries }: { countries: ChartRankedBarItem[] }) {
600
+ const topCountries = countries.slice(0, 3);
601
+ if (topCountries.length === 0) return null;
602
+
603
+ return (
604
+ <Card
605
+ variant="outlined"
606
+ shape="rounded"
607
+ bodyTerminal
608
+ className="col-span-full min-w-0"
609
+ >
610
+ <Card.Header
611
+ start={
612
+ <>
613
+ <h2 className={cardTitleClasses}>Top countries</h2>
614
+ <p className={cardSubtitleClasses}>
615
+ Top 3 from Instagram Insights.
616
+ </p>
617
+ </>
618
+ }
619
+ />
620
+ <Card.Body>
621
+ <div className="flex min-w-0 flex-col gap-4 bg-body px-3.5 py-4 rounded-[var(--radius-card-body)]">
622
+ <Chart.RankedBars
623
+ aria-label="Audience by country"
624
+ items={topCountries}
625
+ animate="initial"
626
+ />
627
+ </div>
628
+ </Card.Body>
629
+ </Card>
630
+ );
631
+ }
632
+
633
+ function OwnerPitchKit({
634
+ identity,
635
+ intro,
636
+ posts,
637
+ contact,
638
+ brands,
639
+ countries,
640
+ reachData,
641
+ reachState = "resolved",
642
+ }: OwnerPitchKitProps) {
643
+ const [visiblePosts, setVisiblePosts] = useState(posts);
644
+ const [postNotice, setPostNotice] = useState<string | null>(null);
645
+ const [pendingHidePostId, setPendingHidePostId] = useState<string | null>(null);
646
+ const engagementRate = reachState === "resolved" ? "5.8%" : null;
647
+ const typicalReach = reachState === "resolved" ? "9.3K" : "—";
648
+
649
+ function handlePostAction(postId: string, actionId: string) {
650
+ if (actionId === "hide") {
651
+ setPendingHidePostId(postId);
652
+ }
653
+ }
654
+
655
+ function hidePendingPost() {
656
+ const hiddenPost = visiblePosts.find((post) => post.id === pendingHidePostId);
657
+ if (!hiddenPost) return;
658
+
659
+ setVisiblePosts((current) =>
660
+ current.filter((post) => post.id !== hiddenPost.id),
661
+ );
662
+ setPostNotice("Post hidden from the shareable kit.");
663
+ setPendingHidePostId(null);
664
+ toast.add({
665
+ title: "Post hidden from kit",
666
+ description: "It no longer appears in the shareable PitchKit.",
667
+ duration: 6000,
668
+ action: {
669
+ label: "Undo",
670
+ onClick: () => {
671
+ setVisiblePosts((current) =>
672
+ current.some((post) => post.id === hiddenPost.id)
673
+ ? current
674
+ : [...current, hiddenPost],
675
+ );
676
+ setPostNotice("Post restored to the shareable kit.");
677
+ },
678
+ },
679
+ });
680
+ }
681
+
682
+ return (
683
+ <>
684
+ <section className="col-span-full">
685
+ <PageHeader variant="page" title="Your Pitchkit" />
686
+ <div className="flex max-w-2xl flex-col gap-1">
687
+ <p className="type-body text-fg text-muted">Edit what brands see</p>
688
+ </div>
689
+ </section>
690
+
691
+ <section className="col-span-full border-b border-border pb-6">
692
+ <div className="flex min-w-0 flex-col gap-3">
693
+ <CreatorIdentityStrip
694
+ identity={identity}
695
+ nameAs="h1"
696
+ showProfessionalChip
697
+ />
698
+ <PublicIntro intro={intro} />
699
+ </div>
700
+ </section>
701
+
702
+ <div
703
+ role="group"
704
+ aria-label="Instagram performance summary"
705
+ className="band gap-y-4"
706
+ >
707
+ <Stat className="col-span-2 md:col-span-4 lg:col-span-3" label="Followers" value="84.2K" />
708
+ {engagementRate != null ? (
709
+ <Stat className="col-span-2 md:col-span-4 lg:col-span-3" label="Engagement rate" value={engagementRate} />
710
+ ) : null}
711
+ <Stat className="col-span-2 md:col-span-4 lg:col-span-3" label="Typical reach" value={typicalReach} />
712
+ <Stat className="col-span-2 md:col-span-4 lg:col-span-3" label="Typical saves" value="6.1K" />
713
+ </div>
714
+
715
+ <div className="band min-w-0 gap-y-6 [align-items:stretch]">
716
+ <OwnerReachCard reachState={reachState} reachData={reachData} />
717
+ <OwnerCountries countries={countries} />
718
+ </div>
719
+
720
+ <section className="band min-w-0 gap-y-4">
721
+ <div className="col-span-full flex flex-wrap items-end justify-between gap-3">
722
+ <div>
723
+ <h2 className={cardTitleClasses}>Selected posts</h2>
724
+ <p className="type-body text-fg text-muted">
725
+ {postNotice ?? "Proof from the current Instagram set."}
726
+ </p>
727
+ </div>
728
+ </div>
729
+ <div className="band col-span-full min-w-0 gap-y-4">
730
+ {visiblePosts.map((post, index) => (
731
+ <Card key={post.id} variant="outlined" shape="rounded" className="col-span-full min-w-0 md:col-span-4 lg:col-span-4">
732
+ <Card.Header
733
+ end={
734
+ <MoreMenu
735
+ aria-label={`Manage selected post ${index + 1}`}
736
+ size="xs"
737
+ items={[
738
+ {
739
+ id: "hide",
740
+ label: "Hide from kit",
741
+ start: (
742
+ <ButtonIcon size="sm">
743
+ <EyeOff />
744
+ </ButtonIcon>
745
+ ),
746
+ },
747
+ ]}
748
+ onAction={(actionId) => handlePostAction(post.id, actionId)}
749
+ />
750
+ }
751
+ />
752
+ <Card.Body>
753
+ <img
754
+ className="aspect-[4/3] w-full bg-body object-cover rounded-[var(--radius-card-body)]"
755
+ src={post.imageUrl}
756
+ alt={post.imageAlt}
757
+ />
758
+ </Card.Body>
759
+ <Card.Footer>
760
+ <div className="grid w-full grid-cols-2 gap-3">
761
+ {[
762
+ ["Likes", post.likes],
763
+ ["Comments", post.comments],
764
+ ].map(([label, value]) => (
765
+ <span key={label} className="flex min-w-0 flex-col gap-1">
766
+ <span className="type-supporting font-medium uppercase tracking-wider text-muted text-muted">{label}</span>
767
+ <span className="font-mono text-sm tabular-nums text-fg">
768
+ {compactNumber.format(value as number)}
769
+ </span>
770
+ </span>
771
+ ))}
772
+ </div>
773
+ </Card.Footer>
774
+ </Card>
775
+ ))}
776
+ </div>
777
+ </section>
778
+
779
+ <section className="band min-w-0 gap-y-4">
780
+ <div className="col-span-full flex flex-wrap items-end justify-between gap-3">
781
+ <div>
782
+ <h2 className={cardTitleClasses}>Contact</h2>
783
+ <p className="type-body text-fg text-muted">
784
+ Creator-entered details for brand outreach.
785
+ </p>
786
+ </div>
787
+ </div>
788
+ <Card variant="outlined" padding="md" shape="rounded" className="col-span-full">
789
+ <div className="flex flex-col gap-3">
790
+ <div className="flex flex-col gap-1 sm:flex-row sm:items-center sm:justify-between sm:gap-3">
791
+ <span className="type-supporting font-medium uppercase tracking-wider text-muted text-muted">Email</span>
792
+ <TextLink href={`mailto:${contact.email}`}>{contact.email}</TextLink>
793
+ </div>
794
+ <div className="flex flex-col gap-1 sm:flex-row sm:items-center sm:justify-between sm:gap-3">
795
+ <span className="type-supporting font-medium uppercase tracking-wider text-muted text-muted">Website</span>
796
+ <TextLink href={contact.websiteHref} external>{contact.websiteLabel}</TextLink>
797
+ </div>
798
+ <div className="flex flex-col gap-1 sm:flex-row sm:items-center sm:justify-between sm:gap-3">
799
+ <span className="type-supporting font-medium uppercase tracking-wider text-muted text-muted">Location</span>
800
+ <span className="type-body text-fg text-muted">{contact.location}</span>
801
+ </div>
802
+ </div>
803
+ </Card>
804
+ </section>
805
+
806
+ <PublicPastBrands brands={brands} />
807
+ <AlertDialog
808
+ open={pendingHidePostId != null}
809
+ onOpenChange={(open) => {
810
+ if (!open) setPendingHidePostId(null);
811
+ }}
812
+ title="Hide this post from PitchKit?"
813
+ description="It will no longer appear in the shareable PitchKit. You can add it back later."
814
+ cancelLabel="Keep post"
815
+ confirmLabel="Hide from kit"
816
+ onConfirm={hidePendingPost}
817
+ />
818
+ </>
819
+ );
820
+ }
821
+
822
+
823
+ interface PitchKitInsightsPageProps extends PitchKitPageData {
824
+ audience: PitchKitAudience;
825
+ /** Selected posts on the PitchKit tab; `posts` is the Recent proof set. */
826
+ kitPosts: PitchKitPost[];
827
+ }
828
+
829
+ export function PitchKitInsightsPage({
830
+ reachData,
831
+ audience,
832
+ posts,
833
+ contact,
834
+ brands,
835
+ identity,
836
+ kitPosts,
837
+ intro,
838
+ countries,
839
+ }: PitchKitInsightsPageProps) {
840
+ const [view, setView] = useState("insights");
841
+ const [proofMetric, setProofMetric] = useState<PitchKitProofMetric>("reach");
842
+ const rankedPosts = [...posts].sort(
843
+ (a, b) =>
844
+ proofMetricValue(b, proofMetric) - proofMetricValue(a, proofMetric),
845
+ );
846
+
847
+ function handleProofMetricChange(value: string) {
848
+ setProofMetric(value as PitchKitProofMetric);
849
+ }
850
+
851
+ return (
852
+ <main className="grid-page min-h-screen bg-body [--grid-column-gap:8px] [--grid-max:1140px] [padding-bottom:44px]">
853
+
854
+ <div className="band pb-4">
855
+ <header className="col-span-full grid grid-cols-[1fr_auto_1fr] items-center gap-3">
856
+ <span className="type-heading-4 text-fg text-fg">PitchKit</span>
857
+ <SegmentedControl
858
+ aria-label="PitchKit primary navigation"
859
+ size="sm"
860
+ value={view}
861
+ onValueChange={setView}
862
+ >
863
+ <SegmentedControl.Item value="insights">Insights</SegmentedControl.Item>
864
+ <SegmentedControl.Item value="pitchkit">PitchKit</SegmentedControl.Item>
865
+ </SegmentedControl>
866
+ <span className="justify-self-end">
867
+ <OwnerAccountMenu identity={identity} />
868
+ </span>
869
+ </header>
870
+ </div>
871
+
872
+ <div className="band pt-6 sm:pt-8">
873
+ <div className="band min-w-0 gap-y-6 sm:gap-y-8">
874
+ {view === "pitchkit" ? (
875
+ <OwnerPitchKit identity={identity} intro={intro} posts={kitPosts} contact={contact} brands={brands} countries={countries} reachData={reachData} />
876
+ ) : (
877
+ <>
878
+
879
+
880
+ <section className="col-span-full">
881
+ <PageHeader variant="page" title="Insights" />
882
+ <div className="flex max-w-2xl flex-col gap-1">
883
+ <p className="type-body text-fg text-muted">
884
+ Verified Instagram performance, refreshed Sep 7 at 12:42 PM.
885
+ </p>
886
+ <p className="type-supporting text-muted text-muted">
887
+ Engagement rate = (likes + comments) ÷ followers.
888
+ </p>
889
+ </div>
890
+ </section>
891
+
892
+ <div className="band gap-y-2">
893
+
894
+ <div
895
+ role="group"
896
+ aria-label="Instagram performance summary"
897
+ className="band gap-y-4"
898
+ >
899
+ <Stat className="col-span-2 md:col-span-4 lg:col-span-3" label="Followers" value="84.2K" trend={{ value: "+2.4%", direction: "up" }} />
900
+ <Stat className="col-span-2 md:col-span-4 lg:col-span-3" label="Engagement rate" value="5.8%" />
901
+ <Stat className="col-span-2 md:col-span-4 lg:col-span-3" label="Typical reach" value="9.3K" />
902
+ <Stat className="col-span-2 md:col-span-4 lg:col-span-3" label="Saves" value="6.1K" trend={{ value: "+8.1%", direction: "up" }} />
903
+ </div>
904
+
905
+ <div className="band min-w-0 gap-y-6 [align-items:stretch]">
906
+ <Card variant="outlined" shape="rounded" bodyTerminal className="col-span-full min-w-0 lg:col-span-6">
907
+ <Card.Header
908
+ start={
909
+ <>
910
+ <h2 className={cardTitleClasses}>Reach over 30 days</h2>
911
+ <p className={cardSubtitleClasses}>
912
+ Typical performance with unusual spikes left visible.
913
+ </p>
914
+ </>
915
+ }
916
+ end={
917
+ <Badge variant="neutral" emphasis="muted" size="sm">
918
+ Graph data
919
+ </Badge>
920
+ }
921
+ />
922
+ <Card.Body>
923
+ <div className="flex min-w-0 flex-col gap-4 bg-body px-3.5 py-4 rounded-[var(--radius-card-body)]">
924
+ <Chart.Cartesian
925
+ data={reachData}
926
+ config={reachConfig}
927
+ periodKind="month"
928
+ minHeight={344}
929
+ aria-label="Daily and typical Instagram reach over the last 30 days"
930
+ />
931
+ <Chart.Legend config={reachConfig} />
932
+ </div>
933
+ </Card.Body>
934
+ </Card>
935
+
936
+ <Card variant="outlined" shape="rounded" bodyTerminal className="col-span-full min-w-0 lg:col-span-6">
937
+ <Card.Header
938
+ start={
939
+ <>
940
+ <h2 className={cardTitleClasses}>Audience fit</h2>
941
+ <p className={cardSubtitleClasses}>Ranked Instagram percentages.</p>
942
+ </>
943
+ }
944
+ />
945
+ <Card.Body>
946
+ <div className="grid min-w-0 gap-y-6 bg-body px-3.5 py-4 [column-gap:var(--grid-column-gap)] sm:grid-cols-2 rounded-[var(--radius-card-body)]">
947
+ <AudienceSection title="Countries" items={audience.countries} />
948
+ <AudienceSection title="Cities" items={audience.cities} />
949
+ <AudienceSection title="Age" items={audience.ages} />
950
+ <AudienceSection title="Gender" items={audience.gender} />
951
+ </div>
952
+ </Card.Body>
953
+ </Card>
954
+ </div>
955
+ </div>
956
+
957
+ <section className="band min-w-0 gap-y-4">
958
+ <div className="col-span-full flex flex-wrap items-end justify-between gap-3">
959
+ <div>
960
+ <h2 className={cardTitleClasses}>Recent proof</h2>
961
+ <p className="type-body text-fg text-muted">
962
+ {proofMetricNotices[proofMetric]}
963
+ </p>
964
+ </div>
965
+ <Badge variant="neutral" emphasis="muted" size="sm">
966
+ {rankedPosts.length} shown
967
+ </Badge>
968
+ </div>
969
+ <Tab.Group
970
+ aria-label="Rank recent proof posts by"
971
+ value={proofMetric}
972
+ onValueChange={handleProofMetricChange}
973
+ className="col-span-full"
974
+ >
975
+ <Tab value="reach" panelId="recent-proof-panel">Reach</Tab>
976
+ <Tab value="engagement" panelId="recent-proof-panel">Engagement</Tab>
977
+ <Tab value="saves" panelId="recent-proof-panel">Saves</Tab>
978
+ </Tab.Group>
979
+ <div
980
+ id="recent-proof-panel"
981
+ role="tabpanel"
982
+ className="band col-span-full min-w-0 gap-y-4"
983
+ >
984
+ {rankedPosts.map((post, index) => (
985
+ <Card key={post.id} variant="outlined" shape="rounded" className="col-span-full min-w-0 md:col-span-4 lg:col-span-4">
986
+ <Card.Header
987
+ start={
988
+ <span className="flex items-center gap-2">
989
+ <Badge size="sm">#{index + 1}</Badge>
990
+ <span className={cardSubtitleClasses}>{post.publishedAt}</span>
991
+ </span>
992
+ }
993
+ />
994
+ <Card.Body>
995
+ <img
996
+ className="aspect-[4/3] w-full bg-body object-cover rounded-[var(--radius-card-body)]"
997
+ src={post.imageUrl}
998
+ alt={post.imageAlt}
999
+ />
1000
+ </Card.Body>
1001
+ <Card.Footer>
1002
+ <div className="grid w-full grid-cols-3 gap-3">
1003
+ {[
1004
+ ["Saves", post.saves],
1005
+ ["Reach", post.reach],
1006
+ ["Likes", post.likes],
1007
+ ].map(([label, value]) => (
1008
+ <span key={label} className="flex min-w-0 flex-col gap-1">
1009
+ <span className="type-supporting font-medium uppercase tracking-wider text-muted text-muted">{label}</span>
1010
+ <span className="font-mono text-sm tabular-nums text-fg">
1011
+ {compactNumber.format(value as number)}
1012
+ </span>
1013
+ </span>
1014
+ ))}
1015
+ </div>
1016
+ </Card.Footer>
1017
+ </Card>
1018
+ ))}
1019
+ </div>
1020
+ </section>
1021
+
1022
+
1023
+ </>
1024
+ )}
1025
+ </div>
1026
+ </div>
1027
+ <PitchKitPageFooter />
1028
+ <Toaster position="bottom-right" />
1029
+ </main>
1030
+ );
1031
+ }