@pnx-mixtape/mxds 0.0.1

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 (622) hide show
  1. package/README.md +274 -0
  2. package/dist/build/Accordion.js +61 -0
  3. package/dist/build/Accordion.js.map +1 -0
  4. package/dist/build/AccordionDiv.js +62 -0
  5. package/dist/build/AccordionDiv.js.map +1 -0
  6. package/dist/build/AccordionGroup.js +85 -0
  7. package/dist/build/AccordionGroup.js.map +1 -0
  8. package/dist/build/AccordionMobile.js +31 -0
  9. package/dist/build/AccordionMobile.js.map +1 -0
  10. package/dist/build/Dialog.js +116 -0
  11. package/dist/build/Dialog.js.map +1 -0
  12. package/dist/build/DropMenu.js +132 -0
  13. package/dist/build/DropMenu.js.map +1 -0
  14. package/dist/build/GlobalToggle.js +103 -0
  15. package/dist/build/GlobalToggle.js.map +1 -0
  16. package/dist/build/InPageAlert.js +61 -0
  17. package/dist/build/InPageAlert.js.map +1 -0
  18. package/dist/build/InPageNavigation.js +92 -0
  19. package/dist/build/InPageNavigation.js.map +1 -0
  20. package/dist/build/Navigation.js +126 -0
  21. package/dist/build/Navigation.js.map +1 -0
  22. package/dist/build/Sticky.js +63 -0
  23. package/dist/build/Sticky.js.map +1 -0
  24. package/dist/build/Tabs.js +164 -0
  25. package/dist/build/Tabs.js.map +1 -0
  26. package/dist/build/accordion.css +108 -0
  27. package/dist/build/base.css +1000 -0
  28. package/dist/build/breadcrumb.css +47 -0
  29. package/dist/build/breakpoint-loader.js +52 -0
  30. package/dist/build/breakpoint-loader.js.map +1 -0
  31. package/dist/build/button.css +126 -0
  32. package/dist/build/callout.css +11 -0
  33. package/dist/build/card.css +135 -0
  34. package/dist/build/chunks/js.cookie-CiMiGxWx.js +101 -0
  35. package/dist/build/chunks/js.cookie-CiMiGxWx.js.map +1 -0
  36. package/dist/build/chunks/polyfills-CJ5uTmUJ.js +749 -0
  37. package/dist/build/chunks/polyfills-CJ5uTmUJ.js.map +1 -0
  38. package/dist/build/chunks/popover-wbPSyFRj.js +654 -0
  39. package/dist/build/chunks/popover-wbPSyFRj.js.map +1 -0
  40. package/dist/build/chunks/utilities-BIk0P2KX.js +61 -0
  41. package/dist/build/chunks/utilities-BIk0P2KX.js.map +1 -0
  42. package/dist/build/constants.css +120 -0
  43. package/dist/build/container-grid.css +207 -0
  44. package/dist/build/content-block.css +23 -0
  45. package/dist/build/cookie-compliance.js +122 -0
  46. package/dist/build/cookie-compliance.js.map +1 -0
  47. package/dist/build/dialog.css +98 -0
  48. package/dist/build/disclosure-widget.js +124 -0
  49. package/dist/build/disclosure-widget.js.map +1 -0
  50. package/dist/build/drop-menu.css +78 -0
  51. package/dist/build/drupal.css +74 -0
  52. package/dist/build/footer-menu.css +32 -0
  53. package/dist/build/footer.css +61 -0
  54. package/dist/build/form.css +589 -0
  55. package/dist/build/grid.css +200 -0
  56. package/dist/build/header.css +131 -0
  57. package/dist/build/hero-banner.css +62 -0
  58. package/dist/build/icon.css +399 -0
  59. package/dist/build/in-page-alert.css +94 -0
  60. package/dist/build/in-page-navigation.css +17 -0
  61. package/dist/build/index.css +4980 -0
  62. package/dist/build/io-loader.js +44 -0
  63. package/dist/build/io-loader.js.map +1 -0
  64. package/dist/build/keyboard.js +101 -0
  65. package/dist/build/keyboard.js.map +1 -0
  66. package/dist/build/link-list.css +72 -0
  67. package/dist/build/masthead.css +39 -0
  68. package/dist/build/nav-list.css +29 -0
  69. package/dist/build/navigation.css +371 -0
  70. package/dist/build/page.css +184 -0
  71. package/dist/build/pagination.css +123 -0
  72. package/dist/build/section.css +160 -0
  73. package/dist/build/sidebar.css +105 -0
  74. package/dist/build/sticky.css +47 -0
  75. package/dist/build/tabs.css +106 -0
  76. package/dist/build/tag.css +67 -0
  77. package/dist/build/tiles.css +61 -0
  78. package/dist/build/utilities.css +175 -0
  79. package/package.json +130 -0
  80. package/src/Atom/Background/Backgrounds.stories.ts +36 -0
  81. package/src/Atom/Background/__snapshots__/Backgrounds.stories.ts.snap +100 -0
  82. package/src/Atom/Background/_background.css +80 -0
  83. package/src/Atom/Background/backgrounds.twig +10 -0
  84. package/src/Atom/Base.mdx +76 -0
  85. package/src/Atom/Blockquote/_blockquote.css +7 -0
  86. package/src/Atom/Button/Button.stories.ts +71 -0
  87. package/src/Atom/Button/Button.stories.tsx +31 -0
  88. package/src/Atom/Button/Button.tsx +70 -0
  89. package/src/Atom/Button/README.md +30 -0
  90. package/src/Atom/Button/__snapshots__/Button.stories.ts.snap +41 -0
  91. package/src/Atom/Button/__snapshots__/Button.stories.tsx.snap +17 -0
  92. package/src/Atom/Button/_buttons-styles.css +48 -0
  93. package/src/Atom/Button/_buttons.css +71 -0
  94. package/src/Atom/Button/button.css +2 -0
  95. package/src/Atom/Button/button.twig +23 -0
  96. package/src/Atom/DefinitionList/DefinitionList.stories.tsx +25 -0
  97. package/src/Atom/DefinitionList/DefinitionList.tsx +27 -0
  98. package/src/Atom/DefinitionList/__snapshots__/DefinitionList.stories.tsx.snap +30 -0
  99. package/src/Atom/Heading/Heading.stories.ts +25 -0
  100. package/src/Atom/Heading/Heading.stories.tsx +19 -0
  101. package/src/Atom/Heading/Heading.tsx +44 -0
  102. package/src/Atom/Heading/__snapshots__/Heading.stories.ts.snap +7 -0
  103. package/src/Atom/Heading/__snapshots__/Heading.stories.tsx.snap +9 -0
  104. package/src/Atom/Heading/_headings.css +84 -0
  105. package/src/Atom/Heading/heading.twig +8 -0
  106. package/src/Atom/Icon/Icon.mdx +32 -0
  107. package/src/Atom/Icon/Icon.stories.ts +50 -0
  108. package/src/Atom/Icon/Icon.stories.tsx +44 -0
  109. package/src/Atom/Icon/Icon.tsx +30 -0
  110. package/src/Atom/Icon/README.md +7 -0
  111. package/src/Atom/Icon/__snapshots__/Icon.stories.ts.snap +18 -0
  112. package/src/Atom/Icon/__snapshots__/Icon.stories.tsx.snap +18 -0
  113. package/src/Atom/Icon/_extended-set.css +45 -0
  114. package/src/Atom/Icon/_icon.css +151 -0
  115. package/src/Atom/Icon/_mixin-icon.css +5 -0
  116. package/src/Atom/Icon/icon.css +2 -0
  117. package/src/Atom/Icon/icon.twig +12 -0
  118. package/src/Atom/Icon/images/arrow-down.svg +1 -0
  119. package/src/Atom/Icon/images/arrow-left.svg +1 -0
  120. package/src/Atom/Icon/images/arrow-right.svg +1 -0
  121. package/src/Atom/Icon/images/arrow-up.svg +1 -0
  122. package/src/Atom/Icon/images/attachment.svg +1 -0
  123. package/src/Atom/Icon/images/blockquote.svg +1 -0
  124. package/src/Atom/Icon/images/bluesky.svg +1 -0
  125. package/src/Atom/Icon/images/bookmark.svg +1 -0
  126. package/src/Atom/Icon/images/building.svg +1 -0
  127. package/src/Atom/Icon/images/calendar.svg +1 -0
  128. package/src/Atom/Icon/images/chevron-down.svg +1 -0
  129. package/src/Atom/Icon/images/chevron-left.svg +1 -0
  130. package/src/Atom/Icon/images/chevron-right.svg +1 -0
  131. package/src/Atom/Icon/images/chevron-up.svg +1 -0
  132. package/src/Atom/Icon/images/clock.svg +1 -0
  133. package/src/Atom/Icon/images/close.svg +1 -0
  134. package/src/Atom/Icon/images/collapse.svg +1 -0
  135. package/src/Atom/Icon/images/controls.svg +1 -0
  136. package/src/Atom/Icon/images/download.svg +1 -0
  137. package/src/Atom/Icon/images/drupal.svg +3 -0
  138. package/src/Atom/Icon/images/email.svg +1 -0
  139. package/src/Atom/Icon/images/error.svg +1 -0
  140. package/src/Atom/Icon/images/expand.svg +1 -0
  141. package/src/Atom/Icon/images/external-link.svg +1 -0
  142. package/src/Atom/Icon/images/facebook.svg +1 -0
  143. package/src/Atom/Icon/images/file.svg +1 -0
  144. package/src/Atom/Icon/images/globe.svg +1 -0
  145. package/src/Atom/Icon/images/google.svg +1 -0
  146. package/src/Atom/Icon/images/heart-selected.svg +1 -0
  147. package/src/Atom/Icon/images/heart-unselected.svg +1 -0
  148. package/src/Atom/Icon/images/home.svg +1 -0
  149. package/src/Atom/Icon/images/image.svg +1 -0
  150. package/src/Atom/Icon/images/info.svg +1 -0
  151. package/src/Atom/Icon/images/instagram.svg +1 -0
  152. package/src/Atom/Icon/images/link.svg +1 -0
  153. package/src/Atom/Icon/images/linkedin.svg +1 -0
  154. package/src/Atom/Icon/images/list.svg +1 -0
  155. package/src/Atom/Icon/images/lock.svg +1 -0
  156. package/src/Atom/Icon/images/login.svg +1 -0
  157. package/src/Atom/Icon/images/mastodon.svg +3 -0
  158. package/src/Atom/Icon/images/media-next.svg +1 -0
  159. package/src/Atom/Icon/images/media-pause.svg +1 -0
  160. package/src/Atom/Icon/images/media-play.svg +1 -0
  161. package/src/Atom/Icon/images/media-previous.svg +1 -0
  162. package/src/Atom/Icon/images/media-rewind.svg +1 -0
  163. package/src/Atom/Icon/images/media-skip.svg +1 -0
  164. package/src/Atom/Icon/images/media-stop.svg +1 -0
  165. package/src/Atom/Icon/images/menu.svg +1 -0
  166. package/src/Atom/Icon/images/more.svg +1 -0
  167. package/src/Atom/Icon/images/notification.svg +1 -0
  168. package/src/Atom/Icon/images/pencil.svg +1 -0
  169. package/src/Atom/Icon/images/phone.svg +1 -0
  170. package/src/Atom/Icon/images/pin.svg +1 -0
  171. package/src/Atom/Icon/images/print.svg +1 -0
  172. package/src/Atom/Icon/images/question.svg +1 -0
  173. package/src/Atom/Icon/images/restart.svg +1 -0
  174. package/src/Atom/Icon/images/search.svg +1 -0
  175. package/src/Atom/Icon/images/settings.svg +1 -0
  176. package/src/Atom/Icon/images/share.svg +1 -0
  177. package/src/Atom/Icon/images/star-selected.svg +1 -0
  178. package/src/Atom/Icon/images/star-unselected.svg +1 -0
  179. package/src/Atom/Icon/images/success.svg +1 -0
  180. package/src/Atom/Icon/images/tick.svg +1 -0
  181. package/src/Atom/Icon/images/trash.svg +1 -0
  182. package/src/Atom/Icon/images/twitter.svg +1 -0
  183. package/src/Atom/Icon/images/user.svg +1 -0
  184. package/src/Atom/Icon/images/video.svg +1 -0
  185. package/src/Atom/Icon/images/warning.svg +1 -0
  186. package/src/Atom/Icon/images/youtube.svg +1 -0
  187. package/src/Atom/Image/Image.stories.ts +20 -0
  188. package/src/Atom/Image/__snapshots__/Image.stories.ts.snap +9 -0
  189. package/src/Atom/Image/_image.css +29 -0
  190. package/src/Atom/Image/image.twig +13 -0
  191. package/src/Atom/Link/Link.stories.ts +37 -0
  192. package/src/Atom/Link/Link.stories.tsx +30 -0
  193. package/src/Atom/Link/Link.tsx +38 -0
  194. package/src/Atom/Link/__snapshots__/Link.stories.ts.snap +17 -0
  195. package/src/Atom/Link/__snapshots__/Link.stories.tsx.snap +25 -0
  196. package/src/Atom/Link/_links.css +39 -0
  197. package/src/Atom/Link/link.twig +12 -0
  198. package/src/Atom/Media/Media.stories.ts +26 -0
  199. package/src/Atom/Media/Media.stories.tsx +25 -0
  200. package/src/Atom/Media/Media.tsx +42 -0
  201. package/src/Atom/Media/__snapshots__/Media.stories.ts.snap +14 -0
  202. package/src/Atom/Media/__snapshots__/Media.stories.tsx.snap +18 -0
  203. package/src/Atom/Media/_media.css +40 -0
  204. package/src/Atom/Media/media.twig +18 -0
  205. package/src/Atom/NavList/NavList.stories.ts +15 -0
  206. package/src/Atom/NavList/__snapshots__/NavList.stories.ts.snap +43 -0
  207. package/src/Atom/NavList/nav-list.css +29 -0
  208. package/src/Atom/NavList/nav-list.twig +25 -0
  209. package/src/Atom/README.md +5 -0
  210. package/src/Atom/Spacing/Spacing.stories.ts +48 -0
  211. package/src/Atom/Spacing/__snapshots__/Spacing.stories.ts.snap +8 -0
  212. package/src/Atom/Spacing/_spacing.css +36 -0
  213. package/src/Atom/Spacing/spacing.twig +3 -0
  214. package/src/Atom/Table/Table.stories.ts +39 -0
  215. package/src/Atom/Table/TableResponsive.stories.ts +16 -0
  216. package/src/Atom/Table/__snapshots__/Table.stories.ts.snap +261 -0
  217. package/src/Atom/Table/__snapshots__/TableResponsive.stories.ts.snap +68 -0
  218. package/src/Atom/Table/_table.css +72 -0
  219. package/src/Atom/Table/table-responsive.twig +32 -0
  220. package/src/Atom/Table/table.twig +30 -0
  221. package/src/Atom/Text/Text.stories.tsx +20 -0
  222. package/src/Atom/Text/Text.tsx +26 -0
  223. package/src/Atom/Text/TextSizes.stories.ts +25 -0
  224. package/src/Atom/Text/__snapshots__/Text.stories.tsx.snap +7 -0
  225. package/src/Atom/Text/__snapshots__/TextSizes.stories.ts.snap +63 -0
  226. package/src/Atom/Text/_text-align.css +13 -0
  227. package/src/Atom/Text/_text-sizes.css +117 -0
  228. package/src/Atom/Text/text-alignment.twig +5 -0
  229. package/src/Atom/Text/text-style.twig +1 -0
  230. package/src/Atom/Text/text-styles-example.twig +35 -0
  231. package/src/Atom/Video/Video.stories.ts +16 -0
  232. package/src/Atom/Video/Video.tsx +17 -0
  233. package/src/Atom/Video/__snapshots__/Video.stories.ts.snap +21 -0
  234. package/src/Atom/Video/_video.css +10 -0
  235. package/src/Atom/Video/video.twig +5 -0
  236. package/src/Atom/_animated.css +65 -0
  237. package/src/Atom/_base.css +62 -0
  238. package/src/Atom/_flow-legacy.css +48 -0
  239. package/src/Atom/_flow.css +53 -0
  240. package/src/Atom/_generic.css +93 -0
  241. package/src/Atom/_hr.css +10 -0
  242. package/src/Atom/_mixins.css +22 -0
  243. package/src/Atom/_print.css +20 -0
  244. package/src/Atom/base.css +5 -0
  245. package/src/Atom/images/external-link.svg +1 -0
  246. package/src/Component/Accordion/Accordion.stories.ts +51 -0
  247. package/src/Component/Accordion/Accordion.stories.tsx +22 -0
  248. package/src/Component/Accordion/Accordion.tsx +83 -0
  249. package/src/Component/Accordion/Elements/Accordion.ts +82 -0
  250. package/src/Component/Accordion/Elements/AccordionDiv.ts +83 -0
  251. package/src/Component/Accordion/Elements/AccordionGroup.ts +106 -0
  252. package/src/Component/Accordion/Elements/AccordionMobile.ts +47 -0
  253. package/src/Component/Accordion/README.md +45 -0
  254. package/src/Component/Accordion/__snapshots__/Accordion.stories.ts.snap +94 -0
  255. package/src/Component/Accordion/__snapshots__/Accordion.stories.tsx.snap +26 -0
  256. package/src/Component/Accordion/accordion-item.twig +18 -0
  257. package/src/Component/Accordion/accordion.css +107 -0
  258. package/src/Component/Accordion/accordion.twig +19 -0
  259. package/src/Component/Accordion/images/collapse.svg +1 -0
  260. package/src/Component/Accordion/images/expand.svg +1 -0
  261. package/src/Component/Accordion/twig/accordion-div.twig +13 -0
  262. package/src/Component/Accordion/twig/accordion-example.twig +36 -0
  263. package/src/Component/Accordion/twig/accordion-mobile.twig +15 -0
  264. package/src/Component/Accordion/twig/accordion-story.twig +13 -0
  265. package/src/Component/Author/Author.stories.tsx +18 -0
  266. package/src/Component/Author/Author.tsx +30 -0
  267. package/src/Component/Author/__snapshots__/Author.stories.tsx.snap +21 -0
  268. package/src/Component/Breadcrumb/Breadcrumb.stories.ts +15 -0
  269. package/src/Component/Breadcrumb/Breadcrumb.stories.tsx +38 -0
  270. package/src/Component/Breadcrumb/Breadcrumb.tsx +34 -0
  271. package/src/Component/Breadcrumb/__snapshots__/Breadcrumb.stories.ts.snap +26 -0
  272. package/src/Component/Breadcrumb/__snapshots__/Breadcrumb.stories.tsx.snap +60 -0
  273. package/src/Component/Breadcrumb/breadcrumb.css +46 -0
  274. package/src/Component/Breadcrumb/breadcrumb.twig +12 -0
  275. package/src/Component/Callout/Callout.stories.ts +29 -0
  276. package/src/Component/Callout/callout.css +7 -0
  277. package/src/Component/Callout/callout.twig +10 -0
  278. package/src/Component/Callout/twig/callout-story.twig +11 -0
  279. package/src/Component/Card/CHANGELOG.md +187 -0
  280. package/src/Component/Card/Card.stories.ts +106 -0
  281. package/src/Component/Card/Card.stories.tsx +50 -0
  282. package/src/Component/Card/Card.tsx +56 -0
  283. package/src/Component/Card/README.md +21 -0
  284. package/src/Component/Card/__snapshots__/Card.stories.ts.snap +186 -0
  285. package/src/Component/Card/__snapshots__/Card.stories.tsx.snap +88 -0
  286. package/src/Component/Card/__snapshots__/CardGrid.stories.ts.snap +89 -0
  287. package/src/Component/Card/card-grid.twig +10 -0
  288. package/src/Component/Card/card.css +128 -0
  289. package/src/Component/Card/card.twig +45 -0
  290. package/src/Component/Card/twig/old-card.twig +17 -0
  291. package/src/Component/Card/twig/story-card.twig +29 -0
  292. package/src/Component/ContentBlock/ContentBlock.stories.ts +15 -0
  293. package/src/Component/ContentBlock/ContentBlock.stories.tsx +30 -0
  294. package/src/Component/ContentBlock/ContentBlock.tsx +37 -0
  295. package/src/Component/ContentBlock/README.md +21 -0
  296. package/src/Component/ContentBlock/__snapshots__/ContentBlock.stories.ts.snap +26 -0
  297. package/src/Component/ContentBlock/__snapshots__/ContentBlock.stories.tsx.snap +21 -0
  298. package/src/Component/ContentBlock/content-block.css +21 -0
  299. package/src/Component/ContentBlock/content-block.twig +12 -0
  300. package/src/Component/ContentBlock/twig/content-block-example.twig +7 -0
  301. package/src/Component/Dialog/Dialog.stories.ts +28 -0
  302. package/src/Component/Dialog/Dialog.stories.tsx +45 -0
  303. package/src/Component/Dialog/Dialog.tsx +79 -0
  304. package/src/Component/Dialog/Elements/Dialog.ts +145 -0
  305. package/src/Component/Dialog/README.md +63 -0
  306. package/src/Component/Dialog/__snapshots__/Dialog.stories.ts.snap +85 -0
  307. package/src/Component/Dialog/__snapshots__/Dialog.stories.tsx.snap +39 -0
  308. package/src/Component/Dialog/dialog.css +85 -0
  309. package/src/Component/Dialog/dialog.twig +19 -0
  310. package/src/Component/DropMenu/Components/DropMenuContext.tsx +192 -0
  311. package/src/Component/DropMenu/Components/DropMenuItem.tsx +35 -0
  312. package/src/Component/DropMenu/DropMenu.stories.ts +36 -0
  313. package/src/Component/DropMenu/DropMenu.stories.tsx +24 -0
  314. package/src/Component/DropMenu/DropMenu.tsx +81 -0
  315. package/src/Component/DropMenu/Elements/DropMenu.ts +172 -0
  316. package/src/Component/DropMenu/README.md +11 -0
  317. package/src/Component/DropMenu/__snapshots__/DropMenu.stories.ts.snap +32 -0
  318. package/src/Component/DropMenu/__snapshots__/DropMenu.stories.tsx.snap +47 -0
  319. package/src/Component/DropMenu/drop-menu.css +68 -0
  320. package/src/Component/DropMenu/drop-menu.twig +27 -0
  321. package/src/Component/DropMenu/polyfills.js +28 -0
  322. package/src/Component/HeroBanner/HeroBanner.stories.ts +75 -0
  323. package/src/Component/HeroBanner/HeroBanner.stories.tsx +30 -0
  324. package/src/Component/HeroBanner/HeroBanner.tsx +50 -0
  325. package/src/Component/HeroBanner/__snapshots__/PageTitle.stories.ts.snap +31 -0
  326. package/src/Component/HeroBanner/__snapshots__/PageTitle.stories.tsx.snap +36 -0
  327. package/src/Component/HeroBanner/hero-banner.css +51 -0
  328. package/src/Component/HeroBanner/hero-banner.twig +41 -0
  329. package/src/Component/HeroBanner/twig/hero-banner-story.twig +19 -0
  330. package/src/Component/InPageAlert/Elements/InPageAlert.ts +87 -0
  331. package/src/Component/InPageAlert/InPageAlert.stories.ts +35 -0
  332. package/src/Component/InPageAlert/InPageAlert.stories.tsx +43 -0
  333. package/src/Component/InPageAlert/InPageAlert.tsx +50 -0
  334. package/src/Component/InPageAlert/README.md +27 -0
  335. package/src/Component/InPageAlert/__snapshots__/InPageAlert.stories.ts.snap +43 -0
  336. package/src/Component/InPageAlert/__snapshots__/InPageAlert.stories.tsx.snap +69 -0
  337. package/src/Component/InPageAlert/in-page-alert.css +89 -0
  338. package/src/Component/InPageAlert/in-page-alert.twig +18 -0
  339. package/src/Component/InPageNavigation/Elements/InPageNavigation.ts +125 -0
  340. package/src/Component/InPageNavigation/Hooks/useInPageNavigation.ts +45 -0
  341. package/src/Component/InPageNavigation/InPageNavigation.stories.ts +16 -0
  342. package/src/Component/InPageNavigation/InPageNavigation.stories.tsx +86 -0
  343. package/src/Component/InPageNavigation/InPageNavigation.tsx +38 -0
  344. package/src/Component/InPageNavigation/README.md +30 -0
  345. package/src/Component/InPageNavigation/__snapshots__/InPageNavigation.stories.ts.snap +73 -0
  346. package/src/Component/InPageNavigation/__snapshots__/InPageNavigation.stories.tsx.snap +149 -0
  347. package/src/Component/InPageNavigation/in-page-navigation.css +17 -0
  348. package/src/Component/InPageNavigation/in-page-navigation.twig +17 -0
  349. package/src/Component/InPageNavigation/twig/in-page-navigation-content-example.twig +16 -0
  350. package/src/Component/InPageNavigation/twig/in-page-navigation-menu-example.twig +6 -0
  351. package/src/Component/LinkList/LinkList.stories.ts +29 -0
  352. package/src/Component/LinkList/LinkList.stories.tsx +29 -0
  353. package/src/Component/LinkList/LinkList.tsx +43 -0
  354. package/src/Component/LinkList/README.md +19 -0
  355. package/src/Component/LinkList/__snapshots__/LinkList.stories.ts.snap +58 -0
  356. package/src/Component/LinkList/__snapshots__/LinkList.stories.tsx.snap +53 -0
  357. package/src/Component/LinkList/link-list.css +68 -0
  358. package/src/Component/LinkList/link-list.twig +12 -0
  359. package/src/Component/ListItem/Teaser.stories.tsx +34 -0
  360. package/src/Component/ListItem/Teaser.tsx +54 -0
  361. package/src/Component/ListItem/__snapshots__/Teaser.stories.tsx.snap +32 -0
  362. package/src/Component/Navigation/Collapsible.stories.ts +16 -0
  363. package/src/Component/Navigation/Components/DropdownLevel.tsx +107 -0
  364. package/src/Component/Navigation/Dropdown.stories.ts +16 -0
  365. package/src/Component/Navigation/Dropdown.stories.tsx +46 -0
  366. package/src/Component/Navigation/Dropdown.tsx +39 -0
  367. package/src/Component/Navigation/Elements/Navigation.ts +174 -0
  368. package/src/Component/Navigation/MegaNav.stories.ts +16 -0
  369. package/src/Component/Navigation/Navigation.stories.ts +15 -0
  370. package/src/Component/Navigation/Navigation.stories.tsx +40 -0
  371. package/src/Component/Navigation/Navigation.tsx +51 -0
  372. package/src/Component/Navigation/README.md +17 -0
  373. package/src/Component/Navigation/__snapshots__/Collapsible.stories.ts.snap +123 -0
  374. package/src/Component/Navigation/__snapshots__/Dropdown.stories.ts.snap +125 -0
  375. package/src/Component/Navigation/__snapshots__/Dropdown.stories.tsx.snap +39 -0
  376. package/src/Component/Navigation/__snapshots__/Navigation.stories.ts.snap +25 -0
  377. package/src/Component/Navigation/__snapshots__/Navigation.stories.tsx.snap +61 -0
  378. package/src/Component/Navigation/_navigation-collapsible.css +72 -0
  379. package/src/Component/Navigation/_navigation-dropdown.css +152 -0
  380. package/src/Component/Navigation/_navigation-mega.css +51 -0
  381. package/src/Component/Navigation/_navigation.css +55 -0
  382. package/src/Component/Navigation/navigation-collapsible.twig +7 -0
  383. package/src/Component/Navigation/navigation-dropdown.twig +7 -0
  384. package/src/Component/Navigation/navigation-mega-nav.twig +7 -0
  385. package/src/Component/Navigation/navigation.css +4 -0
  386. package/src/Component/Navigation/navigation.twig +9 -0
  387. package/src/Component/Navigation/twig/navigation-subnav-list.twig +108 -0
  388. package/src/Component/Pagination/Components/PaginationContext.tsx +188 -0
  389. package/src/Component/Pagination/Components/PaginationItem.tsx +48 -0
  390. package/src/Component/Pagination/Pagination.stories.ts +15 -0
  391. package/src/Component/Pagination/Pagination.stories.tsx +25 -0
  392. package/src/Component/Pagination/Pagination.tsx +75 -0
  393. package/src/Component/Pagination/README.md +19 -0
  394. package/src/Component/Pagination/__snapshots__/Pagination.stories.ts.snap +58 -0
  395. package/src/Component/Pagination/__snapshots__/Pagination.stories.tsx.snap +57 -0
  396. package/src/Component/Pagination/pagination.css +112 -0
  397. package/src/Component/Pagination/pagination.twig +44 -0
  398. package/src/Component/SocialShare/SocialShare.stories.tsx +26 -0
  399. package/src/Component/SocialShare/SocialShare.tsx +53 -0
  400. package/src/Component/SocialShare/__snapshots__/SocialShare.stories.tsx.snap +25 -0
  401. package/src/Component/Sticky/Elements/Sticky.ts +93 -0
  402. package/src/Component/Sticky/README.md +23 -0
  403. package/src/Component/Sticky/Sticky.stories.ts +16 -0
  404. package/src/Component/Sticky/Sticky.stories.tsx +14 -0
  405. package/src/Component/Sticky/Sticky.tsx +34 -0
  406. package/src/Component/Sticky/__snapshots__/Sticky.stories.ts.snap +86 -0
  407. package/src/Component/Sticky/__snapshots__/Sticky.stories.tsx.snap +11 -0
  408. package/src/Component/Sticky/sticky.css +39 -0
  409. package/src/Component/Sticky/sticky.twig +21 -0
  410. package/src/Component/Sticky/twig/sticky-example.twig +4 -0
  411. package/src/Component/Tabs/Components/Tab.tsx +45 -0
  412. package/src/Component/Tabs/Components/TabDropMenu.tsx +14 -0
  413. package/src/Component/Tabs/Components/TabList.tsx +9 -0
  414. package/src/Component/Tabs/Components/TabPanel.tsx +32 -0
  415. package/src/Component/Tabs/Elements/Tabs.ts +213 -0
  416. package/src/Component/Tabs/README.md +23 -0
  417. package/src/Component/Tabs/Tabs.stories.ts +22 -0
  418. package/src/Component/Tabs/Tabs.stories.tsx +51 -0
  419. package/src/Component/Tabs/Tabs.tsx +100 -0
  420. package/src/Component/Tabs/__snapshots__/Tabs.stories.ts.snap +144 -0
  421. package/src/Component/Tabs/__snapshots__/Tabs.stories.tsx.snap +120 -0
  422. package/src/Component/Tabs/tabs.css +103 -0
  423. package/src/Component/Tabs/tabs.twig +49 -0
  424. package/src/Component/Tabs/twig/panel.twig +5 -0
  425. package/src/Component/Tabs/twig/tab-list.twig +26 -0
  426. package/src/Component/Tag/README.md +19 -0
  427. package/src/Component/Tag/Tag.stories.ts +54 -0
  428. package/src/Component/Tag/Tag.stories.tsx +13 -0
  429. package/src/Component/Tag/Tag.tsx +19 -0
  430. package/src/Component/Tag/__snapshots__/Tag.stories.ts.snap +64 -0
  431. package/src/Component/Tag/__snapshots__/Tag.stories.tsx.snap +7 -0
  432. package/src/Component/Tag/tag.css +57 -0
  433. package/src/Component/Tag/tags.twig +23 -0
  434. package/src/Component/Tile/README.md +3 -0
  435. package/src/Component/Tile/Tile.stories.ts +23 -0
  436. package/src/Component/Tile/Tile.stories.tsx +30 -0
  437. package/src/Component/Tile/Tile.tsx +40 -0
  438. package/src/Component/Tile/__snapshots__/Tile.stories.ts.snap +83 -0
  439. package/src/Component/Tile/__snapshots__/Tile.stories.tsx.snap +38 -0
  440. package/src/Component/Tile/tile.twig +10 -0
  441. package/src/Component/Tile/tiles.css +58 -0
  442. package/src/Component/Tile/twig/tiles.twig +18 -0
  443. package/src/Form/Checkbox/Checkboxes.stories.ts +47 -0
  444. package/src/Form/Checkbox/FormCheckbox.stories.tsx +32 -0
  445. package/src/Form/Checkbox/FormCheckbox.tsx +124 -0
  446. package/src/Form/Checkbox/__snapshots__/Checkboxes.stories.ts.snap +115 -0
  447. package/src/Form/Checkbox/input-checkbox-single.twig +6 -0
  448. package/src/Form/Checkbox/input-checkbox.twig +24 -0
  449. package/src/Form/Description/Description.stories.ts +16 -0
  450. package/src/Form/Description/ErrorMessage.stories.ts +16 -0
  451. package/src/Form/Description/FormDescription.stories.tsx +14 -0
  452. package/src/Form/Description/FormDescription.tsx +28 -0
  453. package/src/Form/Description/__snapshots__/Description.stories.ts.snap +17 -0
  454. package/src/Form/Description/__snapshots__/ErrorMessage.stories.ts.snap +20 -0
  455. package/src/Form/Description/__snapshots__/FormDescription.stories.tsx.snap +10 -0
  456. package/src/Form/Description/form-description.twig +3 -0
  457. package/src/Form/Description/form-error.twig +5 -0
  458. package/src/Form/Fieldset/Fieldset.stories.ts +34 -0
  459. package/src/Form/Fieldset/__snapshots__/Fieldset.stories.ts.snap +23 -0
  460. package/src/Form/Fieldset/fieldset.twig +4 -0
  461. package/src/Form/Form/Form.stories.tsx +10 -0
  462. package/src/Form/Form/Form.tsx +9 -0
  463. package/src/Form/Form/FormTitle.stories.tsx +14 -0
  464. package/src/Form/Form/FormTitle.tsx +12 -0
  465. package/src/Form/Form/__snapshots__/Form.stories.tsx.snap +6 -0
  466. package/src/Form/Form/__snapshots__/FormTitle.stories.tsx.snap +9 -0
  467. package/src/Form/Form/twig/form-example.twig +13 -0
  468. package/src/Form/Item/FormItem.stories.tsx +58 -0
  469. package/src/Form/Item/FormItem.tsx +26 -0
  470. package/src/Form/Item/__snapshots__/FormItem.stories.tsx.snap +102 -0
  471. package/src/Form/Label/FormLabel.stories.tsx +20 -0
  472. package/src/Form/Label/FormLabel.tsx +19 -0
  473. package/src/Form/Label/Label.stories.ts +34 -0
  474. package/src/Form/Label/__snapshots__/FormLabel.stories.tsx.snap +16 -0
  475. package/src/Form/Label/__snapshots__/Label.stories.ts.snap +23 -0
  476. package/src/Form/Label/label.twig +2 -0
  477. package/src/Form/README.md +11 -0
  478. package/src/Form/Radio/FormRadio.stories.tsx +37 -0
  479. package/src/Form/Radio/FormRadio.tsx +80 -0
  480. package/src/Form/Radio/Radios.stories.ts +47 -0
  481. package/src/Form/Radio/__snapshots__/Radios.stories.ts.snap +125 -0
  482. package/src/Form/Radio/input-radio.twig +24 -0
  483. package/src/Form/Search/TextInputWithInlineButton.stories.ts +16 -0
  484. package/src/Form/Search/__snapshots__/TextInputWithInlineButton.stories.ts.snap +26 -0
  485. package/src/Form/Search/input-text-inline-submit.twig +8 -0
  486. package/src/Form/Select/FormSelect.stories.tsx +34 -0
  487. package/src/Form/Select/FormSelect.tsx +67 -0
  488. package/src/Form/Select/Select.stories.ts +40 -0
  489. package/src/Form/Select/__snapshots__/FormSelect.stories.tsx.snap +23 -0
  490. package/src/Form/Select/__snapshots__/Select.stories.ts.snap +148 -0
  491. package/src/Form/Select/select.twig +16 -0
  492. package/src/Form/TextInput/FormText.stories.tsx +15 -0
  493. package/src/Form/TextInput/FormText.tsx +55 -0
  494. package/src/Form/TextInput/InputDivider.stories.ts +16 -0
  495. package/src/Form/TextInput/TextInput.stories.ts +57 -0
  496. package/src/Form/TextInput/TextInputWithIcon.stories.ts +40 -0
  497. package/src/Form/TextInput/__snapshots__/FormText.stories.tsx.snap +13 -0
  498. package/src/Form/TextInput/__snapshots__/InputDivider.stories.ts.snap +32 -0
  499. package/src/Form/TextInput/__snapshots__/TextInput.stories.ts.snap +101 -0
  500. package/src/Form/TextInput/__snapshots__/TextInputWithIcon.stories.ts.snap +67 -0
  501. package/src/Form/TextInput/input-divider.twig +11 -0
  502. package/src/Form/TextInput/input-text-icon.twig +7 -0
  503. package/src/Form/TextInput/input-text.twig +5 -0
  504. package/src/Form/Textarea/FormTextarea.stories.tsx +14 -0
  505. package/src/Form/Textarea/FormTextarea.tsx +53 -0
  506. package/src/Form/Textarea/Textarea.stories.ts +16 -0
  507. package/src/Form/Textarea/__snapshots__/FormTextarea.stories.tsx.snap +12 -0
  508. package/src/Form/Textarea/__snapshots__/Textarea.stories.ts.snap +19 -0
  509. package/src/Form/Textarea/textarea.twig +5 -0
  510. package/src/Form/form.css +479 -0
  511. package/src/Form/images/checkmark.svg +1 -0
  512. package/src/Form/images/form-chevron-down.svg +1 -0
  513. package/src/Form/images/form-error.svg +1 -0
  514. package/src/Form/images/form-success.svg +1 -0
  515. package/src/Layout/Footer/Footer.stories.ts +15 -0
  516. package/src/Layout/Footer/Footer.stories.tsx +42 -0
  517. package/src/Layout/Footer/Footer.tsx +55 -0
  518. package/src/Layout/Footer/FooterMenu/FooterMenu.stories.ts +15 -0
  519. package/src/Layout/Footer/FooterMenu/__snapshots__/FooterMenu.stories.ts.snap +101 -0
  520. package/src/Layout/Footer/FooterMenu/footer-menu.css +29 -0
  521. package/src/Layout/Footer/FooterMenu/footer-menu.twig +5 -0
  522. package/src/Layout/Footer/__snapshots__/Footer.stories.ts.snap +139 -0
  523. package/src/Layout/Footer/__snapshots__/Footer.stories.tsx.snap +70 -0
  524. package/src/Layout/Footer/footer.css +54 -0
  525. package/src/Layout/Footer/footer.twig +25 -0
  526. package/src/Layout/Grid/Grid.stories.ts +68 -0
  527. package/src/Layout/Grid/Grid.stories.tsx +125 -0
  528. package/src/Layout/Grid/Grid.tsx +51 -0
  529. package/src/Layout/Grid/__snapshots__/Grid.stories.ts.snap +103 -0
  530. package/src/Layout/Grid/__snapshots__/Grid.stories.tsx.snap +67 -0
  531. package/src/Layout/Grid/container-grid.css +190 -0
  532. package/src/Layout/Grid/grid-item.twig +16 -0
  533. package/src/Layout/Grid/grid.css +190 -0
  534. package/src/Layout/Grid/grid.twig +10 -0
  535. package/src/Layout/Grid/twig/container-grid-dynamic.twig +47 -0
  536. package/src/Layout/Grid/twig/container-grid.twig +46 -0
  537. package/src/Layout/Grid/twig/grid-story.twig +6 -0
  538. package/src/Layout/Grid/twig/old-grid.twig +46 -0
  539. package/src/Layout/Header/Components/GlobalToggle.tsx +35 -0
  540. package/src/Layout/Header/Components/Logo.tsx +17 -0
  541. package/src/Layout/Header/Elements/GlobalToggle.ts +137 -0
  542. package/src/Layout/Header/Header.stories.ts +18 -0
  543. package/src/Layout/Header/Header.stories.tsx +17 -0
  544. package/src/Layout/Header/Header.tsx +73 -0
  545. package/src/Layout/Header/Stacked/Stacked.stories.ts +16 -0
  546. package/src/Layout/Header/Stacked/__snapshots__/Stacked.stories.ts.snap +353 -0
  547. package/src/Layout/Header/Stacked/header-stacked.twig +33 -0
  548. package/src/Layout/Header/__snapshots__/Header.stories.ts.snap +157 -0
  549. package/src/Layout/Header/__snapshots__/Header.stories.tsx.snap +55 -0
  550. package/src/Layout/Header/_header.css +89 -0
  551. package/src/Layout/Header/_toggles.css +31 -0
  552. package/src/Layout/Header/header.css +2 -0
  553. package/src/Layout/Header/header.twig +24 -0
  554. package/src/Layout/Header/twig/global-header.twig +4 -0
  555. package/src/Layout/Header/twig/logo.twig +3 -0
  556. package/src/Layout/Masthead/Masthead.stories.ts +16 -0
  557. package/src/Layout/Masthead/__snapshots__/Masthead.stories.ts.snap +32 -0
  558. package/src/Layout/Masthead/masthead.css +36 -0
  559. package/src/Layout/Masthead/masthead.twig +10 -0
  560. package/src/Layout/Page/Page.stories.tsx +22 -0
  561. package/src/Layout/Page/Page.tsx +16 -0
  562. package/src/Layout/Page/README.md +19 -0
  563. package/src/Layout/Page/__snapshots__/Page.stories.tsx.snap +80 -0
  564. package/src/Layout/Page/page.css +150 -0
  565. package/src/Layout/Page/page.twig +3 -0
  566. package/src/Layout/README.md +19 -0
  567. package/src/Layout/Section/Background.stories.ts +25 -0
  568. package/src/Layout/Section/Breakouts.stories.ts +16 -0
  569. package/src/Layout/Section/Flow.stories.ts +16 -0
  570. package/src/Layout/Section/Section.stories.ts +63 -0
  571. package/src/Layout/Section/Section.stories.tsx +56 -0
  572. package/src/Layout/Section/Section.tsx +83 -0
  573. package/src/Layout/Section/SectionGrid.stories.tsx +53 -0
  574. package/src/Layout/Section/SectionGrid.tsx +71 -0
  575. package/src/Layout/Section/__snapshots__/Section.stories.ts.snap +19 -0
  576. package/src/Layout/Section/__snapshots__/Section.stories.tsx.snap +37 -0
  577. package/src/Layout/Section/__snapshots__/SectionBackground.stories.ts.snap +55 -0
  578. package/src/Layout/Section/__snapshots__/SectionGrid.stories.tsx.snap +37 -0
  579. package/src/Layout/Section/__snapshots__/SectionsBreakouts.stories.ts.snap +78 -0
  580. package/src/Layout/Section/__snapshots__/SectionsFlowsGroups.stories.ts.snap +89 -0
  581. package/src/Layout/Section/section.css +156 -0
  582. package/src/Layout/Section/section.twig +25 -0
  583. package/src/Layout/Section/twig/section-background.twig +12 -0
  584. package/src/Layout/Section/twig/section-story.twig +14 -0
  585. package/src/Layout/Section/twig/sections-breakout.twig +38 -0
  586. package/src/Layout/Section/twig/sections-flow.twig +51 -0
  587. package/src/Layout/Section/twig/sections-stacked.twig +28 -0
  588. package/src/Layout/Sidebar/Sidebar.stories.ts +35 -0
  589. package/src/Layout/Sidebar/Sidebar.stories.tsx +33 -0
  590. package/src/Layout/Sidebar/Sidebar.tsx +34 -0
  591. package/src/Layout/Sidebar/__snapshots__/Sidebar.stories.ts.snap +40 -0
  592. package/src/Layout/Sidebar/__snapshots__/Sidebar.stories.tsx.snap +47 -0
  593. package/src/Layout/Sidebar/sidebar.css +69 -0
  594. package/src/Layout/Sidebar/sidebar.twig +17 -0
  595. package/src/Layout/images/mixtape-logo.png +0 -0
  596. package/src/Utility/Context/ImageComponent.tsx +49 -0
  597. package/src/Utility/Context/LinkComponent.tsx +57 -0
  598. package/src/Utility/Drupal/README.md +9 -0
  599. package/src/Utility/Drupal/drupal.css +66 -0
  600. package/src/Utility/Drupal/twig/local-tasks.twig +17 -0
  601. package/src/Utility/Drupal/twig/login-form.twig +22 -0
  602. package/src/Utility/Elements/breakpoint-loader.ts +79 -0
  603. package/src/Utility/Elements/cookie-compliance.ts +174 -0
  604. package/src/Utility/Elements/disclosure-widget.ts +173 -0
  605. package/src/Utility/Elements/io-loader.ts +57 -0
  606. package/src/Utility/Elements/keyboard.ts +150 -0
  607. package/src/Utility/Hooks/useLocalStorage.ts +78 -0
  608. package/src/Utility/Hooks/useMediaQuery.ts +31 -0
  609. package/src/Utility/Hooks/useToggle.ts +17 -0
  610. package/src/Utility/Hooks/useUrlParams.ts +24 -0
  611. package/src/Utility/README.md +15 -0
  612. package/src/Utility/_layout-utils.css +78 -0
  613. package/src/Utility/global.d.ts +25 -0
  614. package/src/Utility/utilities.css +88 -0
  615. package/src/Utility/utilities.ts +163 -0
  616. package/src/_custom-media.css +33 -0
  617. package/src/constants.css +118 -0
  618. package/src/elements.ts +13 -0
  619. package/src/enums.ts +260 -0
  620. package/src/index.css +27 -0
  621. package/src/react.ts +68 -0
  622. package/src/tokens.js +119 -0
@@ -0,0 +1,125 @@
1
+ /**
2
+ * DialogBase
3
+ * @file Support opening/closing, and adding a scroll lock to the body.
4
+ */
5
+
6
+ import { makeAnchor, createElement } from "../../../Utility/utilities"
7
+
8
+ export default class InPageNavigation extends HTMLElement {
9
+ internals_: ElementInternals
10
+ controller: AbortController
11
+ headingLevels: string
12
+ items: { link: HTMLAnchorElement; heading: HTMLHeadingElement }[]
13
+ active: { link: HTMLAnchorElement; heading: HTMLHeadingElement } | undefined
14
+
15
+ constructor() {
16
+ super()
17
+ this.internals_ = this.attachInternals()
18
+ this.controller = new AbortController()
19
+ this.headingLevels = this.dataset?.headings || "h2"
20
+ this.items = []
21
+ }
22
+
23
+ connectedCallback(): void {
24
+ if (!this.menu || !this.headings) return
25
+
26
+ this.headings.forEach((heading: HTMLHeadingElement) => {
27
+ const listItem: HTMLLIElement = this.generateListItem(heading)
28
+ const link: HTMLAnchorElement = this.generateAnchor(heading)
29
+ this.items.push({ link, heading })
30
+ listItem.appendChild(link)
31
+ this.menu?.appendChild(listItem)
32
+ })
33
+
34
+ const { signal }: AbortController = this.controller
35
+
36
+ // Open on toggle click.
37
+ this.menu.addEventListener(
38
+ "click",
39
+ (e: MouseEvent): void => {
40
+ const { target } = e
41
+ if (!(target instanceof HTMLAnchorElement)) return
42
+ this.handleClick(target)
43
+ },
44
+ {
45
+ signal,
46
+ },
47
+ )
48
+ }
49
+
50
+ disconnectedCallback(): void {
51
+ if (!this.menu || !this.headings) return
52
+ this.menu.textContent = ""
53
+ this.items = []
54
+ this.controller.abort()
55
+ }
56
+
57
+ handleClick = (target: EventTarget | null): void => {
58
+ this.active = this.items.find(item => item.link === target)
59
+ if (!this.links || !this.active) return
60
+ this.links.forEach(link => link.classList.remove("is-active"))
61
+ this.active.link.classList.add("is-active")
62
+ }
63
+
64
+ get menu(): HTMLUListElement | HTMLOListElement | null {
65
+ const menu: HTMLUListElement | HTMLOListElement | null =
66
+ this.querySelector("ul, ol")
67
+ if (!menu) {
68
+ throw new Error(`${this.localName} must contain a <ul> or <ol> element.`)
69
+ }
70
+ return menu
71
+ }
72
+
73
+ get container(): HTMLElement | null {
74
+ const selector: string | null = this.getAttribute("data-content")
75
+ if (!selector) {
76
+ throw new Error(
77
+ `${this.localName} must have a [data-content] attribute that contains the content selector.`,
78
+ )
79
+ }
80
+ return this.closest(selector) || this.parentElement.querySelector(selector)
81
+ }
82
+
83
+ get headings(): NodeListOf<HTMLHeadingElement> | undefined {
84
+ return this.container?.querySelectorAll(this.headingLevels)
85
+ }
86
+
87
+ get links(): NodeListOf<HTMLAnchorElement> | undefined {
88
+ return this.menu?.querySelectorAll("a")
89
+ }
90
+
91
+ generatedId(heading: HTMLHeadingElement): string {
92
+ const string: string | undefined = heading?.textContent?.trim()
93
+ return !string ? "" : makeAnchor(string)
94
+ }
95
+
96
+ generateAnchor(heading: HTMLHeadingElement): HTMLAnchorElement {
97
+ const { textContent, id } = heading
98
+ const linkText: string | null =
99
+ heading.getAttribute("data-in-page-navigation-title") || textContent
100
+ const targetID: string = id || this.generatedId(heading)
101
+ if (!id) heading.id = targetID
102
+ const item: Element = createElement(
103
+ `<a href="#${targetID}" class="icon icon--chevron-right">${linkText}</a>`,
104
+ )
105
+
106
+ return item as HTMLAnchorElement
107
+ }
108
+
109
+ generateListItem(heading: HTMLHeadingElement): HTMLLIElement {
110
+ const { tagName } = heading
111
+ const item: Element = createElement(
112
+ `<li class="in-page-navigation__level--${tagName.toLowerCase()}"></li>`,
113
+ )
114
+
115
+ return item as HTMLLIElement
116
+ }
117
+ }
118
+
119
+ customElements.define("mx-in-page-navigation", InPageNavigation)
120
+
121
+ declare global {
122
+ interface HTMLElementTagNameMap {
123
+ "mx-in-page-navigation": InPageNavigation
124
+ }
125
+ }
@@ -0,0 +1,45 @@
1
+ import { RefObject, useState, useEffect } from "react"
2
+ import { makeAnchor } from "../../../Utility/utilities"
3
+
4
+ type HeadingType = {
5
+ text: string
6
+ id: string
7
+ level: string
8
+ }
9
+
10
+ type UseInPageNavigationProps = {
11
+ ref?: RefObject<HTMLElement>
12
+ levels?: string
13
+ }
14
+
15
+ const useInPageNavigation = ({
16
+ ref = null,
17
+ levels = "h2, h3",
18
+ }: UseInPageNavigationProps): { headings: HeadingType[] } => {
19
+ const [headings, setHeadings] = useState<HeadingType[]>([])
20
+
21
+ useEffect(() => {
22
+ if (typeof window === "undefined") return
23
+ const context = ref?.current || document.querySelector("section")
24
+ const headingElements: Element[] = [...context.querySelectorAll(levels)]
25
+
26
+ const values: HeadingType[] = headingElements.map(
27
+ ({ textContent: text, id, localName }: Element) =>
28
+ ({
29
+ id: id || makeAnchor(text),
30
+ text: text,
31
+ level: localName,
32
+ }) as HeadingType,
33
+ )
34
+ setHeadings([...new Set(values)])
35
+ headingElements.forEach(
36
+ (heading: HTMLHeadingElement, index: number): void => {
37
+ if (!heading.id) heading.id = values[index].id
38
+ },
39
+ )
40
+ }, [ref, levels])
41
+
42
+ return { headings }
43
+ }
44
+
45
+ export default useInPageNavigation
@@ -0,0 +1,16 @@
1
+ import { Meta, StoryObj } from "@storybook/html"
2
+ import Component from "./in-page-navigation.twig"
3
+ import "./in-page-navigation.css"
4
+ import "./Elements/InPageNavigation"
5
+
6
+ const meta: Meta<typeof Component> = {
7
+ tags: ["autodocs"],
8
+ component: Component,
9
+ }
10
+
11
+ export default meta
12
+ type Story = StoryObj<typeof meta>
13
+
14
+ export const InPageNavigation: Story = {
15
+ args: {},
16
+ }
@@ -0,0 +1,86 @@
1
+ import { Meta, StoryObj } from "@storybook/react"
2
+ import Heading from "../../Atom/Heading/Heading"
3
+ import Text from "../../Atom/Text/Text"
4
+ import Component from "./InPageNavigation"
5
+ import Sidebar from "../../Layout/Sidebar/Sidebar"
6
+ import "./in-page-navigation.css"
7
+ import { HeadingLevels } from "../../enums"
8
+
9
+ const meta: Meta<typeof Component> = {
10
+ tags: ["autodocs"],
11
+ component: Component,
12
+ render: () => (
13
+ <Sidebar before sidebar={<Component />}>
14
+ <div className="vertical-flow">
15
+ <Heading level={HeadingLevels.TWO}>Section 1</Heading>
16
+ <Text>
17
+ In publishing and graphic design, lorem ipsum is a placeholder text
18
+ commonly used to demonstrate the visual form of a document without
19
+ relying on meaningful content. Replacing the actual content with
20
+ placeholder text allows designers to design the form of the content
21
+ before the content itself has been produced.
22
+ </Text>
23
+ <Heading level={HeadingLevels.TWO} id="anchor-test">
24
+ Section 2
25
+ </Heading>
26
+ <Text>
27
+ In publishing and graphic design, lorem ipsum is a placeholder text
28
+ commonly used to demonstrate the visual form of a document without
29
+ relying on meaningful content. Replacing the actual content with
30
+ placeholder text allows designers to design the form of the content
31
+ before the content itself has been produced.
32
+ </Text>
33
+ <Heading level={HeadingLevels.THREE}>Test level 3</Heading>
34
+ <Text>
35
+ In publishing and graphic design, lorem ipsum is a placeholder text
36
+ commonly used to demonstrate the visual form of a document without
37
+ relying on meaningful content. Replacing the actual content with
38
+ placeholder text allows designers to design the form of the content
39
+ before the content itself has been produced.
40
+ </Text>
41
+ <Heading level={HeadingLevels.TWO}>Section 3</Heading>
42
+ <Text>
43
+ In publishing and graphic design, lorem ipsum is a placeholder text
44
+ commonly used to demonstrate the visual form of a document without
45
+ relying on meaningful content. Replacing the actual content with
46
+ placeholder text allows designers to design the form of the content
47
+ before the content itself has been produced.
48
+ </Text>
49
+ <Heading level={HeadingLevels.TWO}>Section 4</Heading>
50
+ <Text>
51
+ In publishing and graphic design, lorem ipsum is a placeholder text
52
+ commonly used to demonstrate the visual form of a document without
53
+ relying on meaningful content. Replacing the actual content with
54
+ placeholder text allows designers to design the form of the content
55
+ before the content itself has been produced.
56
+ </Text>
57
+ <Heading level={HeadingLevels.TWO}>Section 5</Heading>
58
+ <Text>
59
+ In publishing and graphic design, lorem ipsum is a placeholder text
60
+ commonly used to demonstrate the visual form of a document without
61
+ relying on meaningful content. Replacing the actual content with
62
+ placeholder text allows designers to design the form of the content
63
+ before the content itself has been produced.
64
+ </Text>
65
+ <Heading level={HeadingLevels.THREE}>Test level 6</Heading>
66
+ <Text>
67
+ In publishing and graphic design, lorem ipsum is a placeholder text
68
+ commonly used to demonstrate the visual form of a document without
69
+ relying on meaningful content. Replacing the actual content with
70
+ placeholder text allows designers to design the form of the content
71
+ before the content itself has been produced.
72
+ </Text>
73
+ <Heading level={HeadingLevels.TWO}>Section 7</Heading>
74
+ <Text>
75
+ In publishing and graphic design, lorem ipsum is a placeholder text
76
+ commonly used to demonstrate the visual form of a document without
77
+ relying on meaningful content. Replacing the actual content with
78
+ placeholder text allows designers to design the form of the content
79
+ before the content itself has been produced.
80
+ </Text>
81
+ </div>
82
+ </Sidebar>
83
+ ),
84
+ }
85
+ export default meta
86
+ export const InPageNavigation: StoryObj<typeof Component> = {}
@@ -0,0 +1,38 @@
1
+ import { JSX, RefObject } from "react"
2
+ import Link from "../../Atom/Link/Link"
3
+ import Heading from "../../Atom/Heading/Heading"
4
+ import useInPageNavigation from "./Hooks/useInPageNavigation"
5
+ import { HeadingStyles } from "../../enums"
6
+ import { HeadingTypes } from "@pnx-mixtape/ids-shape"
7
+
8
+ type InPageNavigationProps = {
9
+ title?: string
10
+ containerRef?: RefObject<HTMLElement>
11
+ levels?: string
12
+ }
13
+
14
+ const InPageNavigation = ({
15
+ title = "Jump to content",
16
+ containerRef,
17
+ levels,
18
+ }: InPageNavigationProps): JSX.Element => {
19
+ const { headings } = useInPageNavigation({ ref: containerRef, levels })
20
+ return (
21
+ <nav className={"in-page-navigation nav nav--list"}>
22
+ <Heading as={HeadingTypes.TWO} modifier={HeadingStyles.EMBELLISHED}>
23
+ {title}
24
+ </Heading>
25
+ <ul>
26
+ {headings.map(({ level, id, text }) => (
27
+ <li className={`in-page-navigation__level--${level}`} key={id}>
28
+ <Link to={`#${id}`} className="icon icon--chevron-right">
29
+ {text}
30
+ </Link>
31
+ </li>
32
+ ))}
33
+ </ul>
34
+ </nav>
35
+ )
36
+ }
37
+
38
+ export default InPageNavigation
@@ -0,0 +1,30 @@
1
+ # In Page Navigation
2
+
3
+ ### How to use
4
+
5
+ **CSS**
6
+
7
+ `@import '@pnx-mixtape/mxds/in-page-navigation.css';`
8
+
9
+ **Web Components**
10
+
11
+ Web Components are self defined, simply import the desired feature. These do not use the Shadow DOM. External CSS applies.
12
+
13
+ - InPageNavigationBase import: `import '@pnx-mixtape/mxds/Components/InPageNavigation/Element';` and be sure to include `<mx-in-page-navigation>` around the `<nav />` tag.
14
+ - Use the `[data-content]` attribute to specify where to look for headings (required).
15
+ - Use the `[data-headings]` attribute to customise the heading levels. Default is h2.
16
+
17
+ ```html
18
+ <mx-in-page-navigation data-content=".page__sections" data-headings="h2, h3">
19
+ <nav class="in-page-navigation nav nav--jump">
20
+ <h4>Jump to Section</h4>
21
+ <ul></ul>
22
+ </nav>
23
+ </mx-in-page-navigation>
24
+
25
+ <div class="page__sections">
26
+ <h2 id="section">Section title</h2>
27
+ </div>
28
+ ```
29
+
30
+ See twig files for all HTML examples.
@@ -0,0 +1,73 @@
1
+ // Jest Snapshot v1, https://goo.gl/fbAQLP
2
+
3
+ exports[`Navigation/InPageNavigation InPageNavigation smoke-test 1`] = `
4
+ <section class="section section--l">
5
+ <div class="page">
6
+ <div class="grid--sidebar">
7
+ <aside>
8
+ <mx-in-page-navigation data-content=".js-content"
9
+ data-headings="h2, h3"
10
+ >
11
+ <nav class="in-page-navigation nav nav--list">
12
+ <h4 class="text--embellished-headline">
13
+ Jump To Section
14
+ </h4>
15
+ <ul>
16
+ </ul>
17
+ </nav>
18
+ </mx-in-page-navigation>
19
+ </aside>
20
+ <section class="js-content rich-text vertical-flow">
21
+ <h2>
22
+ Section 1
23
+ </h2>
24
+ <p>
25
+ In publishing and graphic design, lorem ipsum is a placeholder text commonly used to demonstrate the visual form of a document without relying on meaningful content. Replacing the actual content with placeholder text allows designers to design the form of the content before the content itself has been produced.
26
+ </p>
27
+ <h2 id="anchor-test">
28
+ Section 2
29
+ </h2>
30
+ <p>
31
+ In publishing and graphic design, lorem ipsum is a placeholder text commonly used to demonstrate the visual form of a document without relying on meaningful content. Replacing the actual content with placeholder text allows designers to design the form of the content before the content itself has been produced.
32
+ </p>
33
+ <h3>
34
+ Test level 3
35
+ </h3>
36
+ <p>
37
+ In publishing and graphic design, lorem ipsum is a placeholder text commonly used to demonstrate the visual form of a document without relying on meaningful content. Replacing the actual content with placeholder text allows designers to design the form of the content before the content itself has been produced.
38
+ </p>
39
+ <h2>
40
+ Section 3
41
+ </h2>
42
+ <p>
43
+ In publishing and graphic design, lorem ipsum is a placeholder text commonly used to demonstrate the visual form of a document without relying on meaningful content. Replacing the actual content with placeholder text allows designers to design the form of the content before the content itself has been produced.
44
+ </p>
45
+ <h2>
46
+ Section 4
47
+ </h2>
48
+ <p>
49
+ In publishing and graphic design, lorem ipsum is a placeholder text commonly used to demonstrate the visual form of a document without relying on meaningful content. Replacing the actual content with placeholder text allows designers to design the form of the content before the content itself has been produced.
50
+ </p>
51
+ <h2>
52
+ Section 5
53
+ </h2>
54
+ <p>
55
+ In publishing and graphic design, lorem ipsum is a placeholder text commonly used to demonstrate the visual form of a document without relying on meaningful content. Replacing the actual content with placeholder text allows designers to design the form of the content before the content itself has been produced.
56
+ </p>
57
+ <h3>
58
+ Test level 6
59
+ </h3>
60
+ <p>
61
+ In publishing and graphic design, lorem ipsum is a placeholder text commonly used to demonstrate the visual form of a document without relying on meaningful content. Replacing the actual content with placeholder text allows designers to design the form of the content before the content itself has been produced.
62
+ </p>
63
+ <h2>
64
+ Section 7
65
+ </h2>
66
+ <p>
67
+ In publishing and graphic design, lorem ipsum is a placeholder text commonly used to demonstrate the visual form of a document without relying on meaningful content. Replacing the actual content with placeholder text allows designers to design the form of the content before the content itself has been produced.
68
+ </p>
69
+ </section>
70
+ </div>
71
+ </div>
72
+ </section>
73
+ `;
@@ -0,0 +1,149 @@
1
+ // Jest Snapshot v1, https://goo.gl/fbAQLP
2
+
3
+ exports[`Navigation/InPageNavigation InPageNavigation smoke-test 1`] = `
4
+ <div class="grid--sidebar">
5
+ <aside>
6
+ <nav class="in-page-navigation nav nav--list">
7
+ <h2 class="text--embellished-headline"
8
+ id="jump-to-content"
9
+ >
10
+ Jump to content
11
+ </h2>
12
+ <ul>
13
+ <li class="in-page-navigation__level--h2">
14
+ <a href="#section-1"
15
+ class="icon icon--chevron-right"
16
+ >
17
+ Section 1
18
+ </a>
19
+ </li>
20
+ <li class="in-page-navigation__level--h2">
21
+ <a href="#anchor-test"
22
+ class="icon icon--chevron-right"
23
+ >
24
+ Section 2
25
+ </a>
26
+ </li>
27
+ <li class="in-page-navigation__level--h2">
28
+ <a href="#test-level-3"
29
+ class="icon icon--chevron-right"
30
+ >
31
+ Test level 3
32
+ </a>
33
+ </li>
34
+ <li class="in-page-navigation__level--h2">
35
+ <a href="#section-3"
36
+ class="icon icon--chevron-right"
37
+ >
38
+ Section 3
39
+ </a>
40
+ </li>
41
+ <li class="in-page-navigation__level--h2">
42
+ <a href="#section-4"
43
+ class="icon icon--chevron-right"
44
+ >
45
+ Section 4
46
+ </a>
47
+ </li>
48
+ <li class="in-page-navigation__level--h2">
49
+ <a href="#section-5"
50
+ class="icon icon--chevron-right"
51
+ >
52
+ Section 5
53
+ </a>
54
+ </li>
55
+ <li class="in-page-navigation__level--h2">
56
+ <a href="#test-level-6"
57
+ class="icon icon--chevron-right"
58
+ >
59
+ Test level 6
60
+ </a>
61
+ </li>
62
+ <li class="in-page-navigation__level--h2">
63
+ <a href="#section-7"
64
+ class="icon icon--chevron-right"
65
+ >
66
+ Section 7
67
+ </a>
68
+ </li>
69
+ </ul>
70
+ </nav>
71
+ </aside>
72
+ <section>
73
+ <div class="vertical-flow">
74
+ <h2 class
75
+ level="h2"
76
+ id="section-1"
77
+ >
78
+ Section 1
79
+ </h2>
80
+ <p class>
81
+ In publishing and graphic design, lorem ipsum is a placeholder text commonly used to demonstrate the visual form of a document without relying on meaningful content. Replacing the actual content with placeholder text allows designers to design the form of the content before the content itself has been produced.
82
+ </p>
83
+ <h2 class
84
+ id="anchor-test"
85
+ level="h2"
86
+ >
87
+ Section 2
88
+ </h2>
89
+ <p class>
90
+ In publishing and graphic design, lorem ipsum is a placeholder text commonly used to demonstrate the visual form of a document without relying on meaningful content. Replacing the actual content with placeholder text allows designers to design the form of the content before the content itself has been produced.
91
+ </p>
92
+ <h2 class
93
+ level="h3"
94
+ id="test-level-3"
95
+ >
96
+ Test level 3
97
+ </h2>
98
+ <p class>
99
+ In publishing and graphic design, lorem ipsum is a placeholder text commonly used to demonstrate the visual form of a document without relying on meaningful content. Replacing the actual content with placeholder text allows designers to design the form of the content before the content itself has been produced.
100
+ </p>
101
+ <h2 class
102
+ level="h2"
103
+ id="section-3"
104
+ >
105
+ Section 3
106
+ </h2>
107
+ <p class>
108
+ In publishing and graphic design, lorem ipsum is a placeholder text commonly used to demonstrate the visual form of a document without relying on meaningful content. Replacing the actual content with placeholder text allows designers to design the form of the content before the content itself has been produced.
109
+ </p>
110
+ <h2 class
111
+ level="h2"
112
+ id="section-4"
113
+ >
114
+ Section 4
115
+ </h2>
116
+ <p class>
117
+ In publishing and graphic design, lorem ipsum is a placeholder text commonly used to demonstrate the visual form of a document without relying on meaningful content. Replacing the actual content with placeholder text allows designers to design the form of the content before the content itself has been produced.
118
+ </p>
119
+ <h2 class
120
+ level="h2"
121
+ id="section-5"
122
+ >
123
+ Section 5
124
+ </h2>
125
+ <p class>
126
+ In publishing and graphic design, lorem ipsum is a placeholder text commonly used to demonstrate the visual form of a document without relying on meaningful content. Replacing the actual content with placeholder text allows designers to design the form of the content before the content itself has been produced.
127
+ </p>
128
+ <h2 class
129
+ level="h3"
130
+ id="test-level-6"
131
+ >
132
+ Test level 6
133
+ </h2>
134
+ <p class>
135
+ In publishing and graphic design, lorem ipsum is a placeholder text commonly used to demonstrate the visual form of a document without relying on meaningful content. Replacing the actual content with placeholder text allows designers to design the form of the content before the content itself has been produced.
136
+ </p>
137
+ <h2 class
138
+ level="h2"
139
+ id="section-7"
140
+ >
141
+ Section 7
142
+ </h2>
143
+ <p class>
144
+ In publishing and graphic design, lorem ipsum is a placeholder text commonly used to demonstrate the visual form of a document without relying on meaningful content. Replacing the actual content with placeholder text allows designers to design the form of the content before the content itself has been produced.
145
+ </p>
146
+ </div>
147
+ </section>
148
+ </div>
149
+ `;
@@ -0,0 +1,17 @@
1
+ /**
2
+ * InPageNavigation
3
+ */
4
+
5
+ @layer defaults {
6
+ mx-in-page-navigation {
7
+ display: block;
8
+ }
9
+ }
10
+
11
+ @layer components {
12
+ .in-page-navigation {
13
+ & .in-page-navigation__level--h3 {
14
+ padding-inline-start: var(--spacing-s);
15
+ }
16
+ }
17
+ }
@@ -0,0 +1,17 @@
1
+ {% embed '@mixtape/Layout/Section/section.twig' with {
2
+ modifier_class: 'section--l'
3
+ } %}
4
+ {% block content %}
5
+ {% embed '@mixtape/Layout/Sidebar/sidebar.twig' with {
6
+ content_class: 'js-content rich-text vertical-flow',
7
+ reverse_markup: TRUE
8
+ }%}
9
+ {% block content %}
10
+ {% include '@mixtape/Component/InPageNavigation/twig/in-page-navigation-content-example.twig' %}
11
+ {% endblock %}
12
+ {% block sidebar %}
13
+ {% include '@mixtape/Component/InPageNavigation/twig/in-page-navigation-menu-example.twig' %}
14
+ {% endblock %}
15
+ {% endembed %}
16
+ {% endblock %}
17
+ {% endembed %}
@@ -0,0 +1,16 @@
1
+ <h2>Section 1</h2>
2
+ <p>In publishing and graphic design, lorem ipsum is a placeholder text commonly used to demonstrate the visual form of a document without relying on meaningful content. Replacing the actual content with placeholder text allows designers to design the form of the content before the content itself has been produced.</p>
3
+ <h2 id="anchor-test">Section 2</h2>
4
+ <p>In publishing and graphic design, lorem ipsum is a placeholder text commonly used to demonstrate the visual form of a document without relying on meaningful content. Replacing the actual content with placeholder text allows designers to design the form of the content before the content itself has been produced.</p>
5
+ <h3>Test level 3</h3>
6
+ <p>In publishing and graphic design, lorem ipsum is a placeholder text commonly used to demonstrate the visual form of a document without relying on meaningful content. Replacing the actual content with placeholder text allows designers to design the form of the content before the content itself has been produced.</p>
7
+ <h2>Section 3</h2>
8
+ <p>In publishing and graphic design, lorem ipsum is a placeholder text commonly used to demonstrate the visual form of a document without relying on meaningful content. Replacing the actual content with placeholder text allows designers to design the form of the content before the content itself has been produced.</p>
9
+ <h2>Section 4</h2>
10
+ <p>In publishing and graphic design, lorem ipsum is a placeholder text commonly used to demonstrate the visual form of a document without relying on meaningful content. Replacing the actual content with placeholder text allows designers to design the form of the content before the content itself has been produced.</p>
11
+ <h2>Section 5</h2>
12
+ <p>In publishing and graphic design, lorem ipsum is a placeholder text commonly used to demonstrate the visual form of a document without relying on meaningful content. Replacing the actual content with placeholder text allows designers to design the form of the content before the content itself has been produced.</p>
13
+ <h3>Test level 6</h3>
14
+ <p>In publishing and graphic design, lorem ipsum is a placeholder text commonly used to demonstrate the visual form of a document without relying on meaningful content. Replacing the actual content with placeholder text allows designers to design the form of the content before the content itself has been produced.</p>
15
+ <h2>Section 7</h2>
16
+ <p>In publishing and graphic design, lorem ipsum is a placeholder text commonly used to demonstrate the visual form of a document without relying on meaningful content. Replacing the actual content with placeholder text allows designers to design the form of the content before the content itself has been produced.</p>
@@ -0,0 +1,6 @@
1
+ <mx-in-page-navigation data-content=".js-content" data-headings="h2, h3">
2
+ <nav class="in-page-navigation nav nav--list">
3
+ <h4 class="text--embellished-headline">{{ title|default('Jump To Section') }}</h4>
4
+ <ul></ul>
5
+ </nav>
6
+ </mx-in-page-navigation>
@@ -0,0 +1,29 @@
1
+ import { Meta, StoryObj } from "@storybook/html"
2
+ import Component from "./link-list.twig"
3
+ import "./link-list.css"
4
+
5
+ const meta: Meta<typeof Component> = {
6
+ tags: ["autodocs", "ids-mvp"],
7
+ component: Component,
8
+ args: {
9
+ items: [
10
+ {
11
+ title: "Music",
12
+ href: "#",
13
+ },
14
+ {
15
+ title: "Performances",
16
+ href: "#",
17
+ },
18
+ {
19
+ title: "Get involved",
20
+ href: "#",
21
+ },
22
+ ],
23
+ },
24
+ }
25
+
26
+ export default meta
27
+ type Story = StoryObj<typeof meta>
28
+
29
+ export const LinkList: Story = {}