@pnx-mixtape/mxds 0.0.19 → 0.0.21

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 (120) hide show
  1. package/README.md +18 -6
  2. package/dist/build/accordion.entry.js +2 -2
  3. package/dist/build/accordion.entry.js.map +1 -1
  4. package/dist/build/base.css +2 -1
  5. package/dist/build/button.css +4 -4
  6. package/dist/build/card.css +6 -5
  7. package/dist/build/chunks/{Accordion-deu4CCT-.js → Accordion-O-huO4At.js} +2 -2
  8. package/dist/build/chunks/{Accordion-deu4CCT-.js.map → Accordion-O-huO4At.js.map} +1 -1
  9. package/dist/build/chunks/{disclosure-widget-WwE5XplD.js → disclosure-widget-DVpnRsTI.js} +2 -2
  10. package/dist/build/chunks/{disclosure-widget-WwE5XplD.js.map → disclosure-widget-DVpnRsTI.js.map} +1 -1
  11. package/dist/build/chunks/{drop-menu.entry-e1iZ4ERw.js → drop-menu.entry-B4TtnC50.js} +2 -2
  12. package/dist/build/chunks/{drop-menu.entry-e1iZ4ERw.js.map → drop-menu.entry-B4TtnC50.js.map} +1 -1
  13. package/dist/build/chunks/{utilities-BeWkujCZ.js → utilities-DXELy_An.js} +91 -1
  14. package/dist/build/chunks/utilities-DXELy_An.js.map +1 -0
  15. package/dist/build/constants.css +6 -4
  16. package/dist/build/dialog.css +1 -9
  17. package/dist/build/dialog.entry.js +1 -1
  18. package/dist/build/drop-menu.entry.js +1 -1
  19. package/dist/build/filters.entry.js +1 -1
  20. package/dist/build/global-alert.entry.js +1 -1
  21. package/dist/build/header.css +49 -63
  22. package/dist/build/header.entry.js +1107 -21
  23. package/dist/build/header.entry.js.map +1 -1
  24. package/dist/build/hero-banner.css +12 -6
  25. package/dist/build/in-page-navigation.entry.js +1 -1
  26. package/dist/build/navigation.entry.js +2 -2
  27. package/dist/build/page.css +2 -2
  28. package/dist/build/pagination.css +15 -21
  29. package/dist/build/steps.css +11 -11
  30. package/dist/build/sticky.entry.js +1 -1
  31. package/dist/build/tabs.entry.js +2 -2
  32. package/dist/build/utilities.css +9 -1
  33. package/package.json +18 -29
  34. package/src/Atom/Button/_buttons-styles.css +3 -3
  35. package/src/Atom/Heading/Heading.tsx +1 -1
  36. package/src/Atom/Icon/Icon.tsx +1 -1
  37. package/src/Atom/Link/Link.stories.tsx +2 -6
  38. package/src/Atom/Link/Link.tsx +9 -4
  39. package/src/Atom/Link/_links.css +1 -0
  40. package/src/Component/Accordion/Accordion.stories.tsx +39 -9
  41. package/src/Component/Accordion/Accordion.tsx +28 -50
  42. package/src/Component/Accordion/Components/AccordionContent.tsx +24 -0
  43. package/src/Component/Accordion/Components/AccordionTitle.tsx +34 -0
  44. package/src/Component/Accordion/Components/AccordionTitleIcon.tsx +22 -0
  45. package/src/Component/Accordion/__snapshots__/Accordion.stories.tsx.snap +26 -0
  46. package/src/Component/Breadcrumb/Breadcrumb.tsx +8 -2
  47. package/src/Component/Breadcrumb/__snapshots__/Breadcrumb.stories.tsx.snap +7 -3
  48. package/src/Component/Card/Card.stories.tsx +22 -19
  49. package/src/Component/Card/Card.tsx +6 -28
  50. package/src/Component/Card/Components/CardContent.tsx +12 -0
  51. package/src/Component/Card/Components/CardMedia.tsx +17 -0
  52. package/src/Component/Card/__snapshots__/Card.stories.tsx.snap +9 -9
  53. package/src/Component/Card/card.css +3 -2
  54. package/src/Component/ContentBlock/Components/ContentBlockContent.tsx +14 -0
  55. package/src/Component/ContentBlock/Components/ContentBlockMedia.tsx +20 -0
  56. package/src/Component/ContentBlock/ContentBlock.stories.tsx +16 -13
  57. package/src/Component/ContentBlock/ContentBlock.tsx +5 -28
  58. package/src/Component/ContentBlock/__snapshots__/ContentBlock.stories.tsx.snap +0 -2
  59. package/src/Component/Dialog/Components/DialogCloseButton.tsx +18 -0
  60. package/src/Component/Dialog/Components/DialogContent.tsx +7 -0
  61. package/src/Component/Dialog/Dialog.stories.tsx +19 -24
  62. package/src/Component/Dialog/Dialog.tsx +31 -25
  63. package/src/Component/Dialog/__snapshots__/Dialog.stories.tsx.snap +14 -21
  64. package/src/Component/Dialog/dialog.css +0 -8
  65. package/src/Component/HeroBanner/HeroBanner.stories.ts +23 -12
  66. package/src/Component/HeroBanner/HeroBanner.stories.tsx +26 -7
  67. package/src/Component/HeroBanner/HeroBanner.tsx +2 -20
  68. package/src/Component/HeroBanner/__snapshots__/HeroBanner.stories.ts.snap +51 -3
  69. package/src/Component/HeroBanner/hero-banner.css +8 -4
  70. package/src/Component/HeroBanner/hero-banner.twig +2 -2
  71. package/src/Component/HeroSearch/HeroSearch.stories.ts +105 -0
  72. package/src/Component/HeroSearch/HeroSearch.stories.tsx +48 -0
  73. package/src/Component/HeroSearch/HeroSearch.tsx +32 -0
  74. package/src/Component/HeroSearch/__snapshots__/HeroSearch.stories.ts.snap +176 -0
  75. package/src/Component/HeroSearch/__snapshots__/HeroSearch.stories.tsx.snap +36 -0
  76. package/src/Component/HeroSearch/hero-search.twig +43 -0
  77. package/src/Component/InPageNavigation/InPageNavigation.stories.tsx +1 -1
  78. package/src/Component/InPageNavigation/InPageNavigation.tsx +1 -0
  79. package/src/Component/InPageNavigation/__snapshots__/InPageNavigation.stories.tsx.snap +1 -1
  80. package/src/Component/LinkList/LinkList.stories.ts +12 -0
  81. package/src/Component/LinkList/LinkList.stories.tsx +0 -6
  82. package/src/Component/LinkList/LinkList.tsx +5 -16
  83. package/src/Component/LinkList/__snapshots__/LinkList.stories.ts.snap +37 -0
  84. package/src/Component/LinkList/__snapshots__/LinkList.stories.tsx.snap +9 -29
  85. package/src/Component/LinkList/link-list.twig +1 -0
  86. package/src/Component/ListItem/Components/ListItemContent.tsx +12 -0
  87. package/src/Component/ListItem/Components/ListItemMedia.tsx +20 -0
  88. package/src/Component/ListItem/ListItem.stories.tsx +22 -19
  89. package/src/Component/ListItem/ListItem.tsx +3 -32
  90. package/src/Component/ListItem/__snapshots__/ListItem.stories.tsx.snap +3 -0
  91. package/src/Component/Pagination/Components/PaginationContext.tsx +10 -4
  92. package/src/Component/Pagination/Components/PaginationItem.tsx +10 -10
  93. package/src/Component/Pagination/Pagination.tsx +6 -2
  94. package/src/Component/Pagination/__snapshots__/Pagination.stories.tsx.snap +10 -4
  95. package/src/Component/Pagination/pagination.css +13 -18
  96. package/src/Component/Steps/__snapshots__/Steps.stories.ts.snap +12 -12
  97. package/src/Component/Steps/step-item.twig +1 -1
  98. package/src/Component/Steps/steps.css +1 -2
  99. package/src/Component/Tabs/Components/TabPanel.tsx +1 -1
  100. package/src/Component/Tabs/__snapshots__/Tabs.stories.tsx.snap +2 -0
  101. package/src/Component/Tile/Tile.stories.tsx +20 -15
  102. package/src/Component/Tile/__snapshots__/Tile.stories.tsx.snap +18 -23
  103. package/src/Layout/Header/Elements/GlobalToggle.ts +55 -21
  104. package/src/Layout/Header/__snapshots__/Header.stories.ts.snap +14 -14
  105. package/src/Layout/Header/__snapshots__/Header.stories.tsx.snap +2 -2
  106. package/src/Layout/Header/_header.css +2 -47
  107. package/src/Layout/Header/_toggles.css +37 -1
  108. package/src/Layout/Header/header.twig +5 -5
  109. package/src/Layout/Page/Page.stories.tsx +13 -4
  110. package/src/Layout/Page/__snapshots__/Page.stories.tsx.snap +2 -2
  111. package/src/Layout/Page/page.css +1 -1
  112. package/src/Layout/Section/__snapshots__/Section.stories.tsx.snap +3 -3
  113. package/src/Layout/Section/__snapshots__/SectionGrid.stories.tsx.snap +2 -2
  114. package/src/Layout/Sidebar/__snapshots__/Sidebar.stories.tsx.snap +3 -3
  115. package/src/Utility/utilities.css +8 -0
  116. package/src/constants.css +5 -3
  117. package/src/react.ts +30 -7
  118. package/src/tokens.js +3 -1
  119. package/dist/build/chunks/utilities-BeWkujCZ.js.map +0 -1
  120. package/src/Component/Tile/Tile.tsx +0 -53
@@ -1,21 +1,31 @@
1
1
  import { Meta, StoryObj } from "@storybook/react-vite"
2
- import Component from "./Tile"
2
+ import Card from "../Card/Card"
3
+ import CardContent from "../Card/Components/CardContent"
3
4
  import "../Card/card.css"
4
- import { AsTags, HeadingLevels, TileSizes } from "../../enums"
5
+ import { AsTags, BackgroundStyles } from "../../enums"
6
+ import Heading from "../../Atom/Heading/Heading"
7
+ import Text from "../../Atom/Text/Text"
8
+ import Link from "../../Atom/Link/Link"
9
+ import { HeadingTypes } from "@pnx-mixtape/ids-shape"
5
10
 
6
- const meta: Meta<typeof Component> = {
11
+ const meta: Meta<typeof Card> = {
7
12
  tags: ["autodocs"],
8
- component: Component,
13
+ component: Card,
9
14
  argTypes: {
10
- size: { options: Object.values(TileSizes), control: "radio" },
11
- headingLevel: { options: Object.values(HeadingLevels), control: "select" },
12
15
  as: { options: Object.values(AsTags), control: "select" },
13
16
  },
14
17
  args: {
15
- title: "Tile title",
16
- to: "http://example.com",
17
- linkText: "Tile link",
18
- size: TileSizes.SMALL,
18
+ block: true,
19
+ background: BackgroundStyles.BOX,
20
+ children: (
21
+ <CardContent>
22
+ <Heading as={HeadingTypes.THREE}>Tile title</Heading>
23
+ <Text>Tiles are just block cards without an image.</Text>
24
+ <Link more to="http://example.com">
25
+ Tile link
26
+ </Link>
27
+ </CardContent>
28
+ ),
19
29
  },
20
30
  }
21
31
 
@@ -23,8 +33,3 @@ export default meta
23
33
  type Story = StoryObj<typeof meta>
24
34
 
25
35
  export const Tile: Story = {}
26
- export const WithContent: Story = {
27
- args: {
28
- children: <p>Tile with some content</p>,
29
- },
30
- }
@@ -1,28 +1,23 @@
1
1
  // Jest Snapshot v1, https://goo.gl/fbAQLP
2
2
 
3
3
  exports[`Component/Tile Tile smoke-test 1`] = `
4
- <div class="mx-card mx-card--block mx-background--box">
5
- <div class="mx-card__content mx-vertical-flow-flex">
6
- <h3 class
7
- id="tile-title"
8
- >
9
- Tile title
10
- </h3>
11
- </div>
12
- </div>
13
- `;
14
-
15
- exports[`Component/Tile WithContent smoke-test 1`] = `
16
- <div class="mx-card mx-card--block mx-background--box">
17
- <div class="mx-card__content mx-vertical-flow-flex">
18
- <h3 class
19
- id="tile-title"
20
- >
21
- Tile title
22
- </h3>
23
- <p>
24
- Tile with some content
25
- </p>
26
- </div>
4
+ <div class="mx-container">
5
+ <article class="mx-card mx-card--block mx-background--box">
6
+ <div class="mx-card__content mx-vertical-flow">
7
+ <h3 class
8
+ id="tile-title"
9
+ >
10
+ Tile title
11
+ </h3>
12
+ <p class>
13
+ Tiles are just block cards without an image.
14
+ </p>
15
+ <a href="http://example.com"
16
+ class="mx-link mx-link--more"
17
+ >
18
+ Tile link
19
+ </a>
20
+ </div>
21
+ </article>
27
22
  </div>
28
23
  `;
@@ -3,6 +3,7 @@
3
3
  * @file Handle accessible trigger of menus on small screens.
4
4
  */
5
5
 
6
+ import { createFocusTrap, FocusTrap } from "focus-trap"
6
7
  import {
7
8
  DisclosureWidget,
8
9
  DisclosureWidgetEvent,
@@ -12,13 +13,19 @@ export default class GlobalToggle extends HTMLElement {
12
13
  internals_: ElementInternals
13
14
  controller: AbortController
14
15
  widget!: DisclosureWidget
16
+ focusTrap!: FocusTrap
15
17
  controls?: string
16
18
  mq: string
17
19
  triggerText: string
18
- closeIconClass: string = "icon--close"
19
- menuIconClass: string = "icon--menu"
20
- searchIconClass: string = "icon--search"
21
- hideMenu: boolean
20
+ isOpen: boolean = false
21
+ closeIconClass: string = "mx-icon--close"
22
+ menuIconClass: string = "mx-icon--menu"
23
+ searchIconClass: string = "mx-icon--search"
24
+ backgroundClass: string = "mx-background--primary"
25
+ scrollLockClass: string = "body--scroll-lock"
26
+ isSearch?: boolean
27
+ hideOther?: boolean = true
28
+ otherTrigger?: HTMLButtonElement | null
22
29
 
23
30
  constructor() {
24
31
  super()
@@ -31,13 +38,39 @@ export default class GlobalToggle extends HTMLElement {
31
38
  if (!this.trigger || !this.target) return
32
39
 
33
40
  this.target?.setAttribute("role", "region")
41
+
42
+ const hideOther = this.trigger.getAttribute("hideOther")
43
+ if (hideOther === "false") this.hideOther = false
44
+ this.isSearch = this.controls.includes("search")
45
+ this.otherTrigger = document.querySelector(
46
+ this.isSearch ? `.${this.menuIconClass}` : `.${this.searchIconClass}`,
47
+ )
48
+
34
49
  this.widget = new DisclosureWidget(this.trigger, this.target)
35
50
  this.widget.init()
51
+ this.focusTrap = createFocusTrap(this.target, {
52
+ escapeDeactivates: false,
53
+ setReturnFocus: this.trigger,
54
+ allowOutsideClick: true,
55
+ onActivate: () => document.body.classList.add(this.scrollLockClass),
56
+ onDeactivate: () => document.body.classList.remove(this.scrollLockClass),
57
+ checkCanFocusTrap: ([trapContainer]) =>
58
+ new Promise<void>(resolve => {
59
+ const interval = setInterval(() => {
60
+ if (getComputedStyle(trapContainer).visibility !== "hidden") {
61
+ resolve()
62
+ clearInterval(interval)
63
+ }
64
+ }, 5)
65
+ }),
66
+ })
67
+
36
68
  const { signal }: AbortController = this.controller
37
69
  this.handleBreakpoint(this.breakpoint)
38
70
  this.breakpoint.addEventListener("change", this.handleBreakpoint, {
39
71
  signal,
40
72
  })
73
+ document.addEventListener("keydown", this.handleKeyDown, { signal })
41
74
  }
42
75
 
43
76
  disconnectedCallback(): void {
@@ -61,10 +94,12 @@ export default class GlobalToggle extends HTMLElement {
61
94
  } else {
62
95
  this.widget.detach()
63
96
  this.target.removeAttribute("inert")
97
+ this.target.classList.remove(this.scrollLockClass)
64
98
  this.trigger.removeEventListener(
65
99
  "disclosure-toggle",
66
100
  this.handleDisclosure,
67
101
  )
102
+ this.focusTrap.deactivate()
68
103
  }
69
104
  }
70
105
 
@@ -75,29 +110,27 @@ export default class GlobalToggle extends HTMLElement {
75
110
  const replaceText = !isOpen ? "Open" : "Close"
76
111
  this.trigger.textContent = this.triggerText.replace(origText, replaceText)
77
112
 
78
- // Search is a little different.
79
- const isSearch = this.controls === "primary-search"
80
- if (isSearch) this.handleSearchDisclosure(isOpen)
113
+ isOpen ? this.focusTrap.activate() : this.focusTrap.deactivate()
114
+
115
+ // Close other trigger if it's open.
116
+ if (isOpen && this.hideOther && this.otherTrigger) {
117
+ if (this.otherTrigger.getAttribute("aria-expanded") === "true") {
118
+ this.otherTrigger.click()
119
+ }
120
+ }
81
121
 
82
122
  // Toggle trigger classes.
83
123
  this.trigger.classList.toggle(
84
- isSearch ? this.searchIconClass : this.menuIconClass,
124
+ this.isSearch ? this.searchIconClass : this.menuIconClass,
85
125
  )
86
126
  this.trigger.classList.toggle(this.closeIconClass)
127
+ this.target.classList.toggle(this.backgroundClass)
128
+ this.trigger.removeAttribute("no-focus")
129
+ this.isOpen = isOpen
87
130
  }
88
131
 
89
- handleSearchDisclosure = (isOpen?: boolean): void => {
90
- if (this.hideMenu) {
91
- // Search trigger should hide the menu trigger.
92
- const menuTrigger = document.querySelector(`.${this.menuIconClass}`)
93
- menuTrigger.toggleAttribute("hidden")
94
- }
95
- // Shift focus between search input and trigger.
96
- if (!isOpen) {
97
- this.trigger.focus()
98
- } else {
99
- this.target.querySelector("input")?.focus()
100
- }
132
+ handleKeyDown = (event: KeyboardEvent): void => {
133
+ if (this.isOpen && event.key === "Escape") this.widget.handleToggle()
101
134
  }
102
135
 
103
136
  get trigger(): HTMLButtonElement {
@@ -133,7 +166,8 @@ export default class GlobalToggle extends HTMLElement {
133
166
  }
134
167
  }
135
168
 
136
- customElements.define("mx-global-toggle", GlobalToggle)
169
+ if (!customElements.get("mx-global-toggle"))
170
+ customElements.define("mx-global-toggle", GlobalToggle)
137
171
 
138
172
  declare global {
139
173
  interface HTMLElementTagNameMap {
@@ -18,7 +18,7 @@ exports[`Layout/Header Controls smoke-test 1`] = `
18
18
  <div class="mx-header__toggles">
19
19
  <mx-global-toggle>
20
20
  <button aria-controls="unique-0"
21
- class="mx-button mx-button--dark mx-button--icon-only mx-icon mx-icon--menu"
21
+ class="mx-button mx-button--icon-only mx-icon mx-icon--menu"
22
22
  >
23
23
  Open Menu
24
24
  </button>
@@ -26,7 +26,7 @@ exports[`Layout/Header Controls smoke-test 1`] = `
26
26
  </div>
27
27
  <div class="mx-header__main">
28
28
  <div id="unique-0"
29
- class="mx-header__nav"
29
+ class="mx-header__nav mx-header__collapse-toggle"
30
30
  aria-label="Primary navigation"
31
31
  role="region"
32
32
  >
@@ -93,7 +93,7 @@ exports[`Layout/Header Header smoke-test 1`] = `
93
93
  <div class="mx-header__toggles">
94
94
  <mx-global-toggle>
95
95
  <button aria-controls="unique-0"
96
- class="mx-button mx-button--dark mx-button--icon-only mx-icon mx-icon--menu"
96
+ class="mx-button mx-button--icon-only mx-icon mx-icon--menu"
97
97
  >
98
98
  Open Menu
99
99
  </button>
@@ -101,7 +101,7 @@ exports[`Layout/Header Header smoke-test 1`] = `
101
101
  </div>
102
102
  <div class="mx-header__main">
103
103
  <div id="unique-0"
104
- class="mx-header__nav"
104
+ class="mx-header__nav mx-header__collapse-toggle"
105
105
  aria-label="Primary navigation"
106
106
  role="region"
107
107
  >
@@ -157,7 +157,7 @@ exports[`Layout/Header Search smoke-test 1`] = `
157
157
  </a>
158
158
  </div>
159
159
  <div class="mx-header__toggles">
160
- <mx-global-toggle hidemenu>
160
+ <mx-global-toggle>
161
161
  <button aria-controls="unique-0"
162
162
  class="mx-button mx-button--icon-only mx-icon mx-icon--search"
163
163
  >
@@ -166,7 +166,7 @@ exports[`Layout/Header Search smoke-test 1`] = `
166
166
  </mx-global-toggle>
167
167
  <mx-global-toggle>
168
168
  <button aria-controls="unique-1"
169
- class="mx-button mx-button--dark mx-button--icon-only mx-icon mx-icon--menu"
169
+ class="mx-button mx-button--icon-only mx-icon mx-icon--menu"
170
170
  >
171
171
  Open Menu
172
172
  </button>
@@ -174,7 +174,7 @@ exports[`Layout/Header Search smoke-test 1`] = `
174
174
  </div>
175
175
  <div class="mx-header__main">
176
176
  <div id="unique-0"
177
- class="mx-header__nav"
177
+ class="mx-header__nav mx-header__collapse-toggle"
178
178
  aria-label="Primary navigation"
179
179
  role="region"
180
180
  >
@@ -209,7 +209,7 @@ exports[`Layout/Header Search smoke-test 1`] = `
209
209
  </mx-nav>
210
210
  </div>
211
211
  <div id="unique-1"
212
- class="mx-header__search"
212
+ class="mx-header__search mx-header__collapse-toggle"
213
213
  aria-label="Search"
214
214
  role="region"
215
215
  >
@@ -258,7 +258,7 @@ exports[`Layout/Header Stacked smoke-test 1`] = `
258
258
  </a>
259
259
  </div>
260
260
  <div class="mx-header__toggles">
261
- <mx-global-toggle hidemenu>
261
+ <mx-global-toggle>
262
262
  <button aria-controls="unique-0"
263
263
  class="mx-button mx-button--icon-only mx-icon mx-icon--search"
264
264
  >
@@ -267,7 +267,7 @@ exports[`Layout/Header Stacked smoke-test 1`] = `
267
267
  </mx-global-toggle>
268
268
  <mx-global-toggle>
269
269
  <button aria-controls="unique-1"
270
- class="mx-button mx-button--dark mx-button--icon-only mx-icon mx-icon--menu"
270
+ class="mx-button mx-button--icon-only mx-icon mx-icon--menu"
271
271
  >
272
272
  Open Menu
273
273
  </button>
@@ -275,7 +275,7 @@ exports[`Layout/Header Stacked smoke-test 1`] = `
275
275
  </div>
276
276
  <div class="mx-header__main">
277
277
  <div id="unique-0"
278
- class="mx-header__search"
278
+ class="mx-header__search mx-header__collapse-toggle"
279
279
  aria-label="Search"
280
280
  role="region"
281
281
  >
@@ -306,7 +306,7 @@ exports[`Layout/Header Stacked smoke-test 1`] = `
306
306
  </div>
307
307
  </header>
308
308
  <div id="unique-1"
309
- class="mx-header__nav mx-page"
309
+ class="mx-header__nav mx-page mx-header__collapse-toggle"
310
310
  aria-label="Primary navigation"
311
311
  role="region"
312
312
  >
@@ -474,7 +474,7 @@ exports[`Layout/Header WithTitle smoke-test 1`] = `
474
474
  <div class="mx-header__toggles">
475
475
  <mx-global-toggle>
476
476
  <button aria-controls="unique-0"
477
- class="mx-button mx-button--dark mx-button--icon-only mx-icon mx-icon--menu"
477
+ class="mx-button mx-button--icon-only mx-icon mx-icon--menu"
478
478
  >
479
479
  Open Menu
480
480
  </button>
@@ -482,7 +482,7 @@ exports[`Layout/Header WithTitle smoke-test 1`] = `
482
482
  </div>
483
483
  <div class="mx-header__main">
484
484
  <div id="unique-0"
485
- class="mx-header__nav"
485
+ class="mx-header__nav mx-header__collapse-toggle"
486
486
  aria-label="Primary navigation"
487
487
  role="region"
488
488
  >
@@ -4,12 +4,12 @@ exports[`Layout/Header PrimaryHeader smoke-test 1`] = `
4
4
  <header class="mx-page mx-header mx-section--s">
5
5
  <div class="mx-header__inner">
6
6
  <div class="mx-header__brand">
7
- <a href="https://mixtape.pnx.io/"
7
+ <a href="https://mxds.pnx.io/"
8
8
  class="mx-logo"
9
9
  >
10
10
  <img alt="Mixtape"
11
11
  loading="eager"
12
- src="https://mixtape.pnx.io/images/mixtape-logo.png"
12
+ src="https://mxds.pnx.io/images/mixtape-logo.png"
13
13
  >
14
14
  </a>
15
15
  </div>
@@ -4,7 +4,6 @@
4
4
 
5
5
  @layer design-system.layouts {
6
6
  .mx-header__inner {
7
- position: relative;
8
7
  display: grid;
9
8
  grid-template-columns: 1fr auto;
10
9
  align-items: center;
@@ -27,53 +26,9 @@
27
26
  align-items: center;
28
27
  }
29
28
 
30
- .mx-header__nav {
31
- inline-size: 100%;
32
- opacity: 1;
33
- display: grid;
34
-
35
- @starting-style {
36
- opacity: 0;
37
- display: grid;
38
- }
39
-
40
- @media (--global-nav-up) {
41
- z-index: 2;
42
- position: relative;
43
- inline-size: auto;
44
- block-size: auto;
45
- }
46
-
47
- &[inert] {
48
- display: none;
49
- opacity: 0;
50
- transition-duration: 0.4s;
51
- }
52
- }
53
-
54
29
  .mx-header__search {
55
- position: absolute;
56
- z-index: 2;
57
- inset-block-start: 2px;
58
- inset-inline-start: 0;
59
- inline-size: 100%;
60
- opacity: 1;
61
- display: flex;
62
-
63
- @starting-style {
64
- opacity: 0;
65
- display: grid;
66
- }
67
-
68
- @media (--global-nav-up) {
69
- position: relative;
70
- inline-size: auto;
71
- }
72
-
73
- &[inert] {
74
- display: none;
75
- opacity: 0;
76
- transition-duration: 0.4s;
30
+ & form {
31
+ margin-block: var(--spacing-m);
77
32
  }
78
33
 
79
34
  & input {
@@ -23,9 +23,45 @@
23
23
  }
24
24
  }
25
25
 
26
- .global-nav-up-only {
26
+ .mx-header__collapse-toggle {
27
+ inline-size: 100%;
28
+ opacity: 1;
29
+ display: grid;
30
+ position: fixed;
31
+ inset: 0;
32
+ align-items: center;
33
+
34
+ @starting-style {
35
+ opacity: 0;
36
+ display: grid;
37
+ }
38
+
27
39
  @media (--global-nav-down) {
40
+ padding-inline: var(--gutter, var(--spacing-l));
41
+ grid-template-columns: inherit;
42
+
43
+ & .mx-header__nav-inner {
44
+ grid-column: full;
45
+ }
46
+ }
47
+
48
+ @media (--global-nav-up) {
49
+ z-index: 2;
50
+ position: relative;
51
+ inline-size: auto;
52
+ block-size: auto;
53
+ }
54
+
55
+ &[inert] {
28
56
  display: none;
57
+ opacity: 0;
58
+ transition-duration: 0.4s;
29
59
  }
30
60
  }
31
61
  }
62
+
63
+ .global-nav-up-only {
64
+ @media (--global-nav-down) {
65
+ display: none;
66
+ }
67
+ }
@@ -21,21 +21,21 @@
21
21
  {% if navigation is not empty or search is not empty %}
22
22
  <div class="mx-header__toggles">
23
23
  {% if search is not empty %}
24
- <mx-global-toggle hideMenu><button aria-controls="primary-search" class="mx-button mx-button--icon-only mx-icon mx-icon--search" disabled>Open Search</button></mx-global-toggle>
24
+ <mx-global-toggle><button aria-controls="primary-search" class="mx-button mx-button--icon-only mx-icon mx-icon--search" disabled>Open Search</button></mx-global-toggle>
25
25
  {% endif %}
26
26
  {% if navigation is not empty %}
27
- <mx-global-toggle><button aria-controls="primary-nav" class="mx-button mx-button--dark mx-button--icon-only mx-icon mx-icon--menu" disabled>Open Menu</button></mx-global-toggle>
27
+ <mx-global-toggle><button aria-controls="primary-nav" class="mx-button mx-button--icon-only mx-icon mx-icon--menu" disabled>Open Menu</button></mx-global-toggle>
28
28
  {% endif %}
29
29
  </div>
30
30
  {% endif %}
31
31
  <div class="mx-header__main">
32
32
  {% if navigation is not empty and not stacked %}
33
- <div id="primary-nav" class="mx-header__nav global-nav-up-only" aria-label="Primary navigation">
33
+ <div id="primary-nav" class="mx-header__nav mx-header__collapse-toggle global-nav-up-only" aria-label="Primary navigation">
34
34
  {{ navigation }}
35
35
  </div>
36
36
  {% endif %}
37
37
  {% if search is not empty %}
38
- <div id="primary-search" class="mx-header__search global-nav-up-only" aria-label="Search">
38
+ <div id="primary-search" class="mx-header__search mx-header__collapse-toggle global-nav-up-only" aria-label="Search">
39
39
  {{ search }}
40
40
  </div>
41
41
  {% endif %}
@@ -48,7 +48,7 @@
48
48
  </div>
49
49
  </header>
50
50
  {% if stacked and (navigation is not empty or controls is not empty) %}
51
- <div id="primary-nav" class="mx-header__nav mx-page global-nav-up-only" aria-label="Primary navigation">
51
+ <div id="primary-nav" class="mx-header__nav mx-page mx-header__collapse-toggle global-nav-up-only" aria-label="Primary navigation">
52
52
  <div class="mx-header__nav-inner">
53
53
  {{ navigation }}
54
54
  {% if controls is not empty %}
@@ -2,6 +2,10 @@ import { Meta, StoryObj } from "@storybook/react-vite"
2
2
  import Component from "./Page"
3
3
  import { mixtapeHeader, mixtapeFooter } from "../../../mockups/constants"
4
4
  import HeroBanner from "../../Component/HeroBanner/HeroBanner"
5
+ import Heading from "../../Atom/Heading/Heading"
6
+ import { HeadingTypes } from "@pnx-mixtape/ids-shape"
7
+ import { HeadingStyles, TextStyles } from "../../enums"
8
+ import Text from "../../Atom/Text/Text"
5
9
 
6
10
  const meta: Meta<typeof Component> = {
7
11
  component: Component,
@@ -9,10 +13,15 @@ const meta: Meta<typeof Component> = {
9
13
  header: mixtapeHeader,
10
14
  footer: mixtapeFooter,
11
15
  children: (
12
- <HeroBanner
13
- title="Always put your best foot forward."
14
- subtitle="Make the most of the opportunity by encouraging an action and keeping your copy clear and concise."
15
- />
16
+ <HeroBanner>
17
+ <Heading as={HeadingTypes.ONE} modifier={HeadingStyles.HEADLINE}>
18
+ Always put your best foot forward.
19
+ </Heading>
20
+ <Text modifier={TextStyles.XL}>
21
+ Make the most of the opportunity by encouraging an action and keeping
22
+ your copy clear and concise.
23
+ </Text>
24
+ </HeroBanner>
16
25
  ),
17
26
  },
18
27
  }
@@ -5,12 +5,12 @@ exports[`Layout/Page Page smoke-test 1`] = `
5
5
  <header class="mx-page mx-header mx-section--s">
6
6
  <div class="mx-header__inner">
7
7
  <div class="mx-header__brand">
8
- <a href="https://mixtape.pnx.io/"
8
+ <a href="https://mxds.pnx.io/"
9
9
  class="mx-logo"
10
10
  >
11
11
  <img alt="Mixtape"
12
12
  loading="eager"
13
- src="https://mixtape.pnx.io/images/mixtape-logo.png"
13
+ src="https://mxds.pnx.io/images/mixtape-logo.png"
14
14
  >
15
15
  </a>
16
16
  </div>
@@ -7,7 +7,7 @@
7
7
  --plus: token("size.container.plus");
8
8
  --minus: token("size.container.minus");
9
9
  --diff: calc(var(--plus) - var(--minus));
10
- --gutter: clamp(var(--spacing-s), 6vw, var(--spacing-l));
10
+ --gutter: clamp(var(--gutter-min), 6vw, var(--gutter-max));
11
11
  --full: minmax(var(--gutter), 1fr);
12
12
  --narrow: min(var(--container-max-width), 100% - (var(--gutter) * 2));
13
13
  --feature: minmax(0, var(--minus));
@@ -1,7 +1,7 @@
1
1
  // Jest Snapshot v1, https://goo.gl/fbAQLP
2
2
 
3
3
  exports[`Layout/Section Default smoke-test 1`] = `
4
- <div class="mx-page">
4
+ <div class="mx-page undefined">
5
5
  <div class="mx-page mx-section--xl mx-page--feature">
6
6
  <p>
7
7
  Some content
@@ -11,7 +11,7 @@ exports[`Layout/Section Default smoke-test 1`] = `
11
11
  `;
12
12
 
13
13
  exports[`Layout/Section List smoke-test 1`] = `
14
- <div class="mx-page">
14
+ <div class="mx-page undefined">
15
15
  <ul class="mx-page mx-section--s">
16
16
  <li>
17
17
  Item 1
@@ -27,7 +27,7 @@ exports[`Layout/Section List smoke-test 1`] = `
27
27
  `;
28
28
 
29
29
  exports[`Layout/Section Varied smoke-test 1`] = `
30
- <div class="mx-page">
30
+ <div class="mx-page undefined">
31
31
  <aside class="mx-page mx-section--top-m mx-section--bottom-xl">
32
32
  <p>
33
33
  Some content
@@ -1,7 +1,7 @@
1
1
  // Jest Snapshot v1, https://goo.gl/fbAQLP
2
2
 
3
3
  exports[`Layout/Section/SectionGrid List smoke-test 1`] = `
4
- <div class="mx-page">
4
+ <div class="mx-page undefined">
5
5
  <div class="mx-section--xl">
6
6
  <ul class="mx-grid mx-container">
7
7
  <li>
@@ -19,7 +19,7 @@ exports[`Layout/Section/SectionGrid List smoke-test 1`] = `
19
19
  `;
20
20
 
21
21
  exports[`Layout/Section/SectionGrid SectionGrid smoke-test 1`] = `
22
- <div class="mx-page">
22
+ <div class="mx-page undefined">
23
23
  <div class="mx-section--xl">
24
24
  <div class="mx-grid">
25
25
  <div>
@@ -1,7 +1,7 @@
1
1
  // Jest Snapshot v1, https://goo.gl/fbAQLP
2
2
 
3
3
  exports[`Layout/Sidebar NoSidebar smoke-test 1`] = `
4
- <div class="mx-page">
4
+ <div class="mx-page undefined">
5
5
  <div class="mx-grid--sidebar">
6
6
  <section>
7
7
  <p>
@@ -13,7 +13,7 @@ exports[`Layout/Sidebar NoSidebar smoke-test 1`] = `
13
13
  `;
14
14
 
15
15
  exports[`Layout/Sidebar Reverse smoke-test 1`] = `
16
- <div class="mx-page">
16
+ <div class="mx-page undefined">
17
17
  <div class="mx-grid--sidebar">
18
18
  <aside>
19
19
  <p>
@@ -30,7 +30,7 @@ exports[`Layout/Sidebar Reverse smoke-test 1`] = `
30
30
  `;
31
31
 
32
32
  exports[`Layout/Sidebar Sidebar smoke-test 1`] = `
33
- <div class="mx-page">
33
+ <div class="mx-page undefined">
34
34
  <div class="mx-grid--sidebar">
35
35
  <section>
36
36
  <p>
@@ -22,6 +22,14 @@
22
22
  [hidden] {
23
23
  display: none;
24
24
  }
25
+
26
+ /* Prevent scrolling on the body. */
27
+ .body--scroll-lock,
28
+ .body-dialog--open {
29
+ overflow: hidden;
30
+ position: fixed;
31
+ inline-size: 100vw;
32
+ }
25
33
  }
26
34
 
27
35
  /**