@pnx-mixtape/mxds 0.0.8 → 0.0.9

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/package.json +1 -1
  2. package/src/Atom/Button/button.twig +1 -1
  3. package/src/Atom/Image/image.twig +3 -3
  4. package/src/Atom/Link/link.twig +1 -1
  5. package/src/Atom/Media/media.twig +2 -2
  6. package/src/Atom/Video/video.twig +1 -1
  7. package/src/Component/Accordion/accordion-item.twig +1 -1
  8. package/src/Component/Accordion/accordion.twig +1 -1
  9. package/src/Component/Card/Card.stories.ts +26 -14
  10. package/src/Component/Card/__snapshots__/Card.stories.ts.snap +18 -12
  11. package/src/Component/Card/card.twig +5 -5
  12. package/src/Component/ContentBlock/__snapshots__/ContentBlock.stories.ts.snap +9 -45
  13. package/src/Component/ContentBlock/content-block.twig +2 -2
  14. package/src/Component/DropMenu/drop-menu.twig +1 -1
  15. package/src/Component/GlobalAlert/__snapshots__/GlobalAlert.stories.ts.snap +1 -3
  16. package/src/Component/GlobalAlert/global-alert.twig +3 -3
  17. package/src/Component/HeroBanner/HeroBanner.stories.ts +25 -11
  18. package/src/Component/HeroBanner/__snapshots__/HeroBanner.stories.ts.snap +18 -12
  19. package/src/Component/HeroBanner/hero-banner.twig +3 -3
  20. package/src/Component/LinkList/LinkList.stories.ts +20 -6
  21. package/src/Component/LinkList/__snapshots__/LinkList.stories.ts.snap +18 -12
  22. package/src/Component/LinkList/link-list.css +7 -35
  23. package/src/Component/LinkList/link-list.twig +1 -5
  24. package/src/Component/ListItem/list-item.twig +4 -4
  25. package/src/Component/Navigation/menu.twig +4 -4
  26. package/src/Component/Navigation/navigation.twig +1 -1
  27. package/src/Component/Pagination/pagination-item.twig +1 -1
  28. package/src/Component/Pagination/pagination.twig +2 -2
  29. package/src/Component/SideNavigation/side-navigation.twig +4 -4
  30. package/src/Component/Tabs/tabs.twig +1 -1
  31. package/src/Component/Tag/tag.css +4 -0
  32. package/src/Form/Checkbox/input-checkbox.twig +1 -1
  33. package/src/Form/Form/form.twig +2 -2
  34. package/src/Form/FormItem/form-item.twig +1 -1
  35. package/src/Form/Select/input-select.twig +1 -1
  36. package/src/Form/TextInput/input-text.twig +1 -1
  37. package/src/Form/Textarea/input-textarea.twig +1 -1
  38. package/src/Layout/Footer/Footer.stories.ts +0 -1
  39. package/src/Layout/Footer/__snapshots__/Footer.stories.ts.snap +20 -40
  40. package/src/Layout/Footer/footer.twig +3 -3
  41. package/src/Layout/Header/Header.stories.ts +0 -1
  42. package/src/Layout/Header/__snapshots__/Header.stories.ts.snap +5 -5
  43. package/src/Layout/Header/header-stacked.twig +13 -11
  44. package/src/Layout/Header/header.twig +12 -10
  45. package/src/Layout/Header/twig/logo.twig +1 -3
  46. package/src/Layout/Masthead/Masthead.stories.ts +10 -0
  47. package/src/Layout/Masthead/__snapshots__/Masthead.stories.ts.snap +51 -3
  48. package/src/Layout/Masthead/masthead.css +23 -0
  49. package/src/Layout/Masthead/masthead.twig +9 -5
  50. package/src/Layout/Section/section.twig +1 -1
  51. package/src/Layout/Sidebar/sidebar.twig +5 -5
  52. package/dist/build/accordion.css +0 -108
  53. package/dist/build/accordion.entry.js +0 -139
  54. package/dist/build/accordion.entry.js.map +0 -1
  55. package/dist/build/base.css +0 -996
  56. package/dist/build/breadcrumb.css +0 -51
  57. package/dist/build/button.css +0 -132
  58. package/dist/build/callout.css +0 -11
  59. package/dist/build/card.css +0 -149
  60. package/dist/build/chunks/disclosure-widget-CQLPJ8Ta.js +0 -124
  61. package/dist/build/chunks/disclosure-widget-CQLPJ8Ta.js.map +0 -1
  62. package/dist/build/chunks/drop-menu.entry-BC6x9vst.js +0 -132
  63. package/dist/build/chunks/drop-menu.entry-BC6x9vst.js.map +0 -1
  64. package/dist/build/chunks/keyboard-C73DHu0c.js +0 -101
  65. package/dist/build/chunks/keyboard-C73DHu0c.js.map +0 -1
  66. package/dist/build/chunks/polyfills-CJ5uTmUJ.js +0 -749
  67. package/dist/build/chunks/polyfills-CJ5uTmUJ.js.map +0 -1
  68. package/dist/build/chunks/popover-wbPSyFRj.js +0 -654
  69. package/dist/build/chunks/popover-wbPSyFRj.js.map +0 -1
  70. package/dist/build/chunks/utilities-B4YZb689.js +0 -243
  71. package/dist/build/chunks/utilities-B4YZb689.js.map +0 -1
  72. package/dist/build/constants.css +0 -120
  73. package/dist/build/container-grid.css +0 -208
  74. package/dist/build/content-block.css +0 -36
  75. package/dist/build/dialog.css +0 -98
  76. package/dist/build/dialog.entry.js +0 -113
  77. package/dist/build/dialog.entry.js.map +0 -1
  78. package/dist/build/drop-menu.css +0 -78
  79. package/dist/build/drop-menu.entry.js +0 -2
  80. package/dist/build/drop-menu.entry.js.map +0 -1
  81. package/dist/build/drupal.css +0 -74
  82. package/dist/build/footer.css +0 -151
  83. package/dist/build/form.css +0 -517
  84. package/dist/build/global-alert.css +0 -60
  85. package/dist/build/global-alert.entry.js +0 -68
  86. package/dist/build/global-alert.entry.js.map +0 -1
  87. package/dist/build/grid.css +0 -200
  88. package/dist/build/header.css +0 -138
  89. package/dist/build/header.entry.js +0 -103
  90. package/dist/build/header.entry.js.map +0 -1
  91. package/dist/build/hero-banner.css +0 -62
  92. package/dist/build/icon.css +0 -399
  93. package/dist/build/in-page-alert.css +0 -94
  94. package/dist/build/in-page-navigation.css +0 -17
  95. package/dist/build/in-page-navigation.entry.js +0 -89
  96. package/dist/build/in-page-navigation.entry.js.map +0 -1
  97. package/dist/build/link-list.css +0 -72
  98. package/dist/build/list-item.css +0 -114
  99. package/dist/build/masthead.css +0 -30
  100. package/dist/build/navigation.css +0 -392
  101. package/dist/build/navigation.entry.js +0 -124
  102. package/dist/build/navigation.entry.js.map +0 -1
  103. package/dist/build/page.css +0 -80
  104. package/dist/build/pagination.css +0 -130
  105. package/dist/build/section.css +0 -163
  106. package/dist/build/side-navigation.css +0 -88
  107. package/dist/build/sidebar.css +0 -105
  108. package/dist/build/social-links.css +0 -20
  109. package/dist/build/steps.css +0 -118
  110. package/dist/build/steps.entry.js +0 -2
  111. package/dist/build/steps.entry.js.map +0 -1
  112. package/dist/build/sticky.css +0 -47
  113. package/dist/build/sticky.entry.js +0 -60
  114. package/dist/build/sticky.entry.js.map +0 -1
  115. package/dist/build/tabs.css +0 -109
  116. package/dist/build/tabs.entry.js +0 -202
  117. package/dist/build/tabs.entry.js.map +0 -1
  118. package/dist/build/tag.css +0 -67
  119. package/dist/build/tiles.css +0 -61
  120. package/dist/build/utilities.css +0 -178
@@ -3,10 +3,6 @@
3
3
 
4
4
  <ul{{ attributes }}>
5
5
  {% for item in items %}
6
- {% if item.href %}
7
- <li><a href="{{ item.href }}" class="mx-icon mx-icon--chevron-right">{{ item.title }}</a></li>
8
- {% else %}
9
- <li class="mx-icon mx-icon--chevron-right">{{ item.title }}</li>
10
- {% endif %}
6
+ <li>{{ item }}</li>
11
7
  {% endfor %}
12
8
  </ul>
@@ -7,22 +7,22 @@
7
7
 
8
8
  <div class="mx-container">
9
9
  <article{{ attributes }}>
10
- {% if image %}
10
+ {% if image is not empty %}
11
11
  <figure class="mx-list-item__media">
12
12
  {{ image }}
13
13
  </figure>
14
14
  {% endif %}
15
15
  <div class="mx-list-item__content mx-vertical-flow">
16
- {% if label %}
16
+ {% if label is not empty %}
17
17
  <strong class="mx-text--s">{{ label }}</strong>
18
18
  {% endif %}
19
- {% if info and infoBefore %}
19
+ {% if info is not empty and infoBefore %}
20
20
  <div class="mx-text--s">{{ info }}</div>
21
21
  {% endif %}
22
22
  <div class="mx-heading--m">
23
23
  {{ link }}
24
24
  </div>
25
- {% if info and not infoBefore %}
25
+ {% if info is not empty and not infoBefore %}
26
26
  <div class="mx-text--s">{{ info }}</div>
27
27
  {% endif %}
28
28
  {{ content }}
@@ -10,19 +10,19 @@
10
10
  {% set componentAttributes = (componentAttributes ?? create_attribute()) %}
11
11
  {% set setInert = setInert|default(true) %}
12
12
 
13
- {% macro menutree(items, level, setInert) %}
13
+ {% macro menutree(items, level, setInert, baseClass) %}
14
14
  {% set levelClass = baseClass~'__level-'~(level + 1) %}
15
15
  <ul class="{{ levelClass }}"{% if level > 0 and setInert %} inert{% endif %}>
16
16
  {% for item in items %}
17
- <li{% if item.items %} class="mx-nav__has-subnav"{% endif %}>
18
- {% if item.link.href %}
17
+ <li{% if item.items is not empty %} class="mx-nav__has-subnav"{% endif %}>
18
+ {% if item.link.href is not empty %}
19
19
  <a href="{{ item.link.href }}" {% if item.link.current %} aria-current="page" {% endif %}>
20
20
  {{ item.link.title }}
21
21
  </a>
22
22
  {% else %}
23
23
  {{ item.link.title }}
24
24
  {% endif %}
25
- {% if item.items %}
25
+ {% if item.items is not empty %}
26
26
  <button class="mx-nav__toggle mx-icon mx-icon--chevron-down mx-icon--only">Sub-navigation</button>
27
27
  {{ nav.menutree(item.items, level + 1, setInert, baseClass) }}
28
28
  {% endif %}
@@ -1,4 +1,4 @@
1
- {% extends "./menu.twig" %}
1
+ {% extends "@mixtape/Component/Navigation/menu.twig" %}
2
2
  {% set componentAttributes = (componentAttributes|default(create_attribute())) %}
3
3
  {% if type == "collapsible" %}
4
4
  {# Vertical click to expand menu. Is the default mobile experience for dropdown and mega menus. #}
@@ -1,4 +1,4 @@
1
- {% if link %}
1
+ {% if link is not empty %}
2
2
  <li class="mx-pagination__item">
3
3
  {{ link }}
4
4
  </li>
@@ -2,7 +2,7 @@
2
2
  {% set attributes = (attributes ?? create_attribute()).addClass(classes) %}
3
3
  <nav{{ attributes}} aria-label="Pagination">
4
4
  <ul class="mx-pagination__items">
5
- {% if previous %}
5
+ {% if previous is not empty %}
6
6
  <li class="mx-pagination__previous">
7
7
  {{ previous }}
8
8
  </li>
@@ -10,7 +10,7 @@
10
10
  {% for page in pages %}
11
11
  {{ page }}
12
12
  {% endfor %}
13
- {% if next %}
13
+ {% if next is not empty %}
14
14
  <li class="mx-pagination__next">
15
15
  {{ next }}
16
16
  </li>
@@ -6,19 +6,19 @@
6
6
  ] %}
7
7
  {% set attributes = (attributes ?? create_attribute()).addClass(classes) %}
8
8
 
9
- {% macro menutree(items, level, setInert) %}
9
+ {% macro menutree(items, level, setInert, baseClass) %}
10
10
  {% set levelClass = baseClass~'__level-'~(level + 1) %}
11
11
  <ul class="{{ levelClass }}"{% if level > 0 and setInert %} inert{% endif %}>
12
12
  {% for item in items %}
13
- <li{% if item.items %} class="mx-nav__has-subnav"{% endif %}>
14
- {% if item.link.href %}
13
+ <li{% if item.items is not empty %} class="mx-nav__has-subnav"{% endif %}>
14
+ {% if item.link.href is not empty %}
15
15
  <a href="{{ item.link.href }}" {% if item.link.current %} aria-current="page" {% endif %}>
16
16
  {{ item.link.title }}
17
17
  </a>
18
18
  {% else %}
19
19
  {{ item.link.title }}
20
20
  {% endif %}
21
- {% if item.items %}
21
+ {% if item.items is not empty %}
22
22
  <button class="mx-nav__toggle mx-icon mx-icon--chevron-down mx-icon--only">Sub-navigation</button>
23
23
  {{ nav.menutree(item.items, level + 1, setInert, baseClass) }}
24
24
  {% endif %}
@@ -6,7 +6,7 @@
6
6
 
7
7
  {% set attributes = (attributes ?? create_attribute()).addClass(classes) %}
8
8
  {{ title }}
9
- <mx-tabs{{ attributes }}{% if id %} id="{{ id }}"{% endif %}>
9
+ <mx-tabs{{ attributes }}{% if id is not empty %} id="{{ id }}"{% endif %}>
10
10
  {% for item in items %}
11
11
  {{ item }}
12
12
  {% endfor %}
@@ -44,6 +44,10 @@
44
44
  &:is(a:hover, :has(input:checked)) {
45
45
  --tag-foreground: var(--link-colour, var(--colour-primary));
46
46
  }
47
+
48
+ &:empty {
49
+ display: none;
50
+ }
47
51
  }
48
52
 
49
53
  .mx-tags {
@@ -19,7 +19,7 @@
19
19
  name="{{ name }}"
20
20
  value="{{ value }}"
21
21
  {% if checked %} checked="checked"{% endif %}
22
- {% if helpers %} aria-describedby="{{ helpers }}"{% endif %}
22
+ {% if helpers is not empty %} aria-describedby="{{ helpers }}"{% endif %}
23
23
  {% if status == "invalid" %} aria-invalid="true"{% endif %}
24
24
  {% if required %} required{% endif %}
25
25
  >
@@ -4,10 +4,10 @@
4
4
  {% for item in items %}
5
5
  {{ item }}
6
6
  {% endfor %}
7
- {% if actions %}
7
+ {% if actions is not empty %}
8
8
  <div class="mx-form-actions">
9
9
  {% for action in actions %}
10
- {{ actions }}
10
+ {{ action }}
11
11
  {% endfor %}
12
12
  </div>
13
13
  {% endif %}
@@ -10,7 +10,7 @@
10
10
  <{{ as }}{{ attributes }}>
11
11
  {{ label }}
12
12
  {{ descriptionStart }}
13
- {% if fields[0] %}
13
+ {% if fields[0] is not empty %}
14
14
  {% for field in fields %}
15
15
  {{ field }}
16
16
  {% endfor %}
@@ -15,7 +15,7 @@
15
15
  id="{{ id }}"
16
16
  name="{{ name }}"
17
17
  {% if label %} aria-label="{{ label }}"{% endif %}
18
- {% if helpers %} aria-describedby="{{ helpers }}"{% endif %}
18
+ {% if helpers is not empty %} aria-describedby="{{ helpers }}"{% endif %}
19
19
  {% if status == "invalid" %} aria-invalid="true"{% endif %}
20
20
  {% if required %} required{% endif %}
21
21
  >
@@ -22,7 +22,7 @@
22
22
  value="{{ value }}"
23
23
  {% if label %} aria-label="{{ label }}"{% endif %}
24
24
  {% if placeholder %} placeholder="{{ placeholder }}"{% endif %}
25
- {% if helpers %} aria-describedby="{{ helpers }}"{% endif %}
25
+ {% if helpers is not empty %} aria-describedby="{{ helpers }}"{% endif %}
26
26
  {% if status == "invalid" %} aria-invalid="true"{% endif %}
27
27
  {% if required %} required{% endif %}
28
28
  />
@@ -15,7 +15,7 @@
15
15
  id="{{ id }}"
16
16
  name="{{ name }}"
17
17
  {% if label %} aria-label="{{ label }}"{% endif %}
18
- {% if helpers %} aria-describedby="{{ helpers }}"{% endif %}
18
+ {% if helpers is not empty %} aria-describedby="{{ helpers }}"{% endif %}
19
19
  {% if status == "invalid" %} aria-invalid="true"{% endif %}
20
20
  {% if required %} required{% endif %}
21
21
  ></textarea>
@@ -20,7 +20,6 @@ const meta: Meta<FooterType> = {
20
20
  component: Component,
21
21
  args: {
22
22
  logo: Logo({
23
- href: "#",
24
23
  src: "./mixtape-logo.png",
25
24
  alt: "Mixtape",
26
25
  width: "120",
@@ -4,15 +4,11 @@ exports[`Layout/Footer Everything smoke-test 1`] = `
4
4
  <div class="mx-page">
5
5
  <footer class="mx-footer mx-section mx-section--top-l mx-section--bottom-m mx-background--reverse">
6
6
  <div class="mx-footer__inner">
7
- <a class="mx-logo"
8
- href="#"
7
+ <img alt="Mixtape"
8
+ src="./mixtape-logo.png"
9
+ width="120"
10
+ height
9
11
  >
10
- <img alt="Mixtape"
11
- src="./mixtape-logo.png"
12
- width="120"
13
- height
14
- >
15
- </a>
16
12
  <nav class="mx-social-links"
17
13
  aria-label="Social media links"
18
14
  >
@@ -136,15 +132,11 @@ exports[`Layout/Footer Footer smoke-test 1`] = `
136
132
  <div class="mx-page">
137
133
  <footer class="mx-footer mx-section mx-section--top-l mx-section--bottom-m mx-background--reverse">
138
134
  <div class="mx-footer__inner">
139
- <a class="mx-logo"
140
- href="#"
135
+ <img alt="Mixtape"
136
+ src="./mixtape-logo.png"
137
+ width="120"
138
+ height
141
139
  >
142
- <img alt="Mixtape"
143
- src="./mixtape-logo.png"
144
- width="120"
145
- height
146
- >
147
- </a>
148
140
  <nav class="mx-nav mx-nav--footer"
149
141
  aria-label="Footer navigation"
150
142
  id="footer-story"
@@ -198,15 +190,11 @@ exports[`Layout/Footer Light smoke-test 1`] = `
198
190
  <div class="mx-page">
199
191
  <footer class="mx-footer mx-section mx-section--top-l mx-section--bottom-m mx-background--alt">
200
192
  <div class="mx-footer__inner">
201
- <a class="mx-logo"
202
- href="#"
193
+ <img alt="Mixtape"
194
+ src="./mixtape-logo.png"
195
+ width="120"
196
+ height
203
197
  >
204
- <img alt="Mixtape"
205
- src="./mixtape-logo.png"
206
- width="120"
207
- height
208
- >
209
- </a>
210
198
  <nav class="mx-nav mx-nav--footer"
211
199
  aria-label="Footer navigation"
212
200
  id="footer-story"
@@ -260,15 +248,11 @@ exports[`Layout/Footer NoMenu smoke-test 1`] = `
260
248
  <div class="mx-page">
261
249
  <footer class="mx-footer mx-section mx-section--top-l mx-section--bottom-m mx-background--reverse">
262
250
  <div class="mx-footer__inner">
263
- <a class="mx-logo"
264
- href="#"
251
+ <img alt="Mixtape"
252
+ src="./mixtape-logo.png"
253
+ width="120"
254
+ height
265
255
  >
266
- <img alt="Mixtape"
267
- src="./mixtape-logo.png"
268
- width="120"
269
- height
270
- >
271
- </a>
272
256
  <span class="mx-footer__copyright mx-text--s">
273
257
  © 2025 Company Name
274
258
  </span>
@@ -298,15 +282,11 @@ exports[`Layout/Footer WithAcknowledgment smoke-test 1`] = `
298
282
  <div class="mx-footer__aoc mx-text--s">
299
283
  We acknowledge the traditional owners and custodians of country throughout Australia and acknowledges their continuing connection to land, waters and community. We pay our respects to the people, the cultures and the elders past, present and emerging.
300
284
  </div>
301
- <a class="mx-logo"
302
- href="#"
285
+ <img alt="Mixtape"
286
+ src="./mixtape-logo.png"
287
+ width="120"
288
+ height
303
289
  >
304
- <img alt="Mixtape"
305
- src="./mixtape-logo.png"
306
- width="120"
307
- height
308
- >
309
- </a>
310
290
  <nav class="mx-nav mx-nav--footer"
311
291
  aria-label="Footer navigation"
312
292
  id="footer-story"
@@ -9,7 +9,7 @@
9
9
  {% set attributes = (attributes ?? create_attribute()).addClass(classes) %}
10
10
  <footer{{ attributes }}>
11
11
  <div class="mx-footer__inner">
12
- {% if aoc %}
12
+ {% if aoc is not empty %}
13
13
  <div class="mx-footer__aoc mx-text--s">{{ aoc }}</div>
14
14
  {% endif %}
15
15
 
@@ -17,10 +17,10 @@
17
17
  {{ socials }}
18
18
  {{ navigation }}
19
19
 
20
- {% if copyright %}
20
+ {% if copyright is not empty %}
21
21
  <span class="mx-footer__copyright mx-text--s">{{ copyright }}</span>
22
22
  {% endif %}
23
- {% if links %}
23
+ {% if links is not empty %}
24
24
  <nav class="mx-footer__links mx-nav mx-nav--inline mx-text--s" aria-label="Footer subsidiary links">
25
25
  {% for link in links %}
26
26
  {{ link }}
@@ -24,7 +24,6 @@ const meta: Meta<HeaderType> = {
24
24
  component: Component,
25
25
  args: {
26
26
  logo: Logo({
27
- href: "#",
28
27
  src: "./mixtape-logo.png",
29
28
  alt: "Mixtape",
30
29
  width: "120",
@@ -6,7 +6,7 @@ exports[`Layout/Header Controls smoke-test 1`] = `
6
6
  <div class="mx-header__inner">
7
7
  <div class="mx-header__brand">
8
8
  <a class="mx-logo"
9
- href="#"
9
+ href="/"
10
10
  >
11
11
  <img alt="Mixtape"
12
12
  src="./mixtape-logo.png"
@@ -81,7 +81,7 @@ exports[`Layout/Header Header smoke-test 1`] = `
81
81
  <div class="mx-header__inner">
82
82
  <div class="mx-header__brand">
83
83
  <a class="mx-logo"
84
- href="#"
84
+ href="/"
85
85
  >
86
86
  <img alt="Mixtape"
87
87
  src="./mixtape-logo.png"
@@ -147,7 +147,7 @@ exports[`Layout/Header Search smoke-test 1`] = `
147
147
  <div class="mx-header__inner">
148
148
  <div class="mx-header__brand">
149
149
  <a class="mx-logo"
150
- href="#"
150
+ href="/"
151
151
  >
152
152
  <img alt="Mixtape"
153
153
  src="./mixtape-logo.png"
@@ -248,7 +248,7 @@ exports[`Layout/Header Stacked smoke-test 1`] = `
248
248
  <div class="mx-header__inner">
249
249
  <div class="mx-header__brand">
250
250
  <a class="mx-logo"
251
- href="#"
251
+ href="/"
252
252
  >
253
253
  <img alt="Mixtape"
254
254
  src="./mixtape-logo.png"
@@ -454,7 +454,7 @@ exports[`Layout/Header WithTitle smoke-test 1`] = `
454
454
  <div class="mx-header__inner">
455
455
  <div class="mx-header__brand">
456
456
  <a class="mx-logo"
457
- href="#"
457
+ href="/"
458
458
  >
459
459
  <img alt="Mixtape"
460
460
  src="./mixtape-logo.png"
@@ -7,41 +7,43 @@
7
7
  {% set attributes = (attributes ?? create_attribute()).addClass(classes) %}
8
8
  <header{{ attributes }}>
9
9
  <div class="mx-header__inner">
10
- {% if logo or title or description %}
10
+ {% if logo is not empty or title is not empty or description is not empty %}
11
11
  <div class="mx-header__brand">
12
- {{ logo }}
13
- {% if title or description %}
12
+ <a class="mx-logo" href="/">{{ logo }}</a>
13
+ {% if title is not empty or description is not empty %}
14
14
  <div class="mx-header__name">
15
- {% if title %}<strong>{{ title }}</strong>{% endif %}
15
+ {% if title is not empty %}<strong>{{ title }}</strong>{% endif %}
16
16
  {{ description }}
17
17
  </div>
18
18
  {% endif %}
19
19
  </div>
20
20
  {% endif %}
21
- {% if navigation or search %}
21
+ {% if navigation is not empty or search is not empty %}
22
22
  <div class="mx-header__toggles">
23
- {% if search %}
23
+ {% if search is not empty %}
24
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>
25
25
  {% endif %}
26
- {% if navigation %}
26
+ {% if navigation is not empty %}
27
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>
28
28
  {% endif %}
29
29
  </div>
30
30
  {% endif %}
31
- {% if search %}
31
+ {% if search is not empty %}
32
32
  <div id="primary-search" class="mx-header__search global-nav-up-only" aria-label="Search">
33
33
  {{ search }}
34
34
  </div>
35
35
  {% endif %}
36
36
  </div>
37
37
  </header>
38
- {% if navigation or controls %}
38
+ {% if navigation is not empty or controls is not empty %}
39
39
  <div id="primary-nav" class="mx-header__nav mx-section global-nav-up-only" aria-label="Primary navigation">
40
40
  <div class="mx-header__nav-inner">
41
41
  {{ navigation }}
42
- {% if controls %}
42
+ {% if controls is not empty %}
43
43
  <div class="mx-header__nav-right">
44
- {{ controls }}
44
+ {% for control in controls %}
45
+ {{ controls }}
46
+ {% endfor %}
45
47
  </div>
46
48
  {% endif %}
47
49
  </div>
@@ -7,39 +7,41 @@
7
7
  {% set attributes = (attributes ?? create_attribute()).addClass(classes) %}
8
8
  <header{{ attributes }}>
9
9
  <div class="mx-header__inner">
10
- {% if logo or title or description %}
10
+ {% if logo is not empty or title is not empty or description is not empty %}
11
11
  <div class="mx-header__brand">
12
- {{ logo }}
13
- {% if title or description %}
12
+ <a class="mx-logo" href="/">{{ logo }}</a>
13
+ {% if title is not empty or description is not empty %}
14
14
  <div class="mx-header__name">
15
- {% if title %}<strong>{{ title }}</strong>{% endif %}
15
+ {% if title is not empty %}<strong>{{ title }}</strong>{% endif %}
16
16
  {{ description }}
17
17
  </div>
18
18
  {% endif %}
19
19
  </div>
20
20
  {% endif %}
21
- {% if navigation or search %}
21
+ {% if navigation is not empty or search is not empty %}
22
22
  <div class="mx-header__toggles">
23
- {% if search %}
23
+ {% if search is not empty %}
24
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>
25
25
  {% endif %}
26
- {% if navigation %}
26
+ {% if navigation is not empty %}
27
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>
28
28
  {% endif %}
29
29
  </div>
30
30
  {% endif %}
31
31
  <div class="mx-header__main">
32
- {% if navigation %}
32
+ {% if navigation is not empty %}
33
33
  <div id="primary-nav" class="mx-header__nav global-nav-up-only" aria-label="Primary navigation">
34
34
  {{ navigation }}
35
35
  </div>
36
36
  {% endif %}
37
- {% if search %}
37
+ {% if search is not empty %}
38
38
  <div id="primary-search" class="mx-header__search global-nav-up-only" aria-label="Search">
39
39
  {{ search }}
40
40
  </div>
41
41
  {% endif %}
42
- {{ controls }}
42
+ {% for control in controls %}
43
+ {{ controls }}
44
+ {% endfor %}
43
45
  </div>
44
46
  </div>
45
47
  </header>
@@ -1,3 +1 @@
1
- <a class="mx-logo" href="{{ href }}">
2
- <img alt="{{ alt }}" src="{{ src }}" width="{{ width }}" height="{{ height }}" />
3
- </a>
1
+ <img alt="{{ alt }}" src="{{ src }}" width="{{ width }}" height="{{ height }}" />
@@ -15,6 +15,16 @@ const meta: Meta<MastheadType> = {
15
15
  component: Component,
16
16
  args: {
17
17
  content: "A PreviousNext product",
18
+ skipLinks: [
19
+ Link({
20
+ href: "#content",
21
+ title: "Skip to content",
22
+ }),
23
+ Link({
24
+ href: "#nav",
25
+ title: "Skip to navigation",
26
+ }),
27
+ ],
18
28
  },
19
29
  decorators: [Page],
20
30
  }
@@ -2,9 +2,25 @@
2
2
 
3
3
  exports[`Layout/Masthead Light smoke-test 1`] = `
4
4
  <div class="mx-page">
5
+ <nav class="mx-skip-links"
6
+ aria-label="Skip to links"
7
+ >
8
+ <a href="#content">
9
+ <span>
10
+ Skip to content
11
+ </span>
12
+ </a>
13
+ <a href="#nav">
14
+ <span>
15
+ Skip to navigation
16
+ </span>
17
+ </a>
18
+ </nav>
5
19
  <div class="mx-masthead mx-section__full mx-page mx-spacing--top-xxs mx-spacing--bottom-xxs mx-background--alt">
6
20
  <div class="flex">
7
- A PreviousNext product
21
+ <div>
22
+ A PreviousNext product
23
+ </div>
8
24
  </div>
9
25
  </div>
10
26
  </div>
@@ -12,9 +28,25 @@ exports[`Layout/Masthead Light smoke-test 1`] = `
12
28
 
13
29
  exports[`Layout/Masthead Masthead smoke-test 1`] = `
14
30
  <div class="mx-page">
31
+ <nav class="mx-skip-links"
32
+ aria-label="Skip to links"
33
+ >
34
+ <a href="#content">
35
+ <span>
36
+ Skip to content
37
+ </span>
38
+ </a>
39
+ <a href="#nav">
40
+ <span>
41
+ Skip to navigation
42
+ </span>
43
+ </a>
44
+ </nav>
15
45
  <div class="mx-masthead mx-section__full mx-page mx-spacing--top-xxs mx-spacing--bottom-xxs mx-background--reverse">
16
46
  <div class="flex">
17
- A PreviousNext product
47
+ <div>
48
+ A PreviousNext product
49
+ </div>
18
50
  </div>
19
51
  </div>
20
52
  </div>
@@ -22,9 +54,25 @@ exports[`Layout/Masthead Masthead smoke-test 1`] = `
22
54
 
23
55
  exports[`Layout/Masthead WithLinks smoke-test 1`] = `
24
56
  <div class="mx-page">
57
+ <nav class="mx-skip-links"
58
+ aria-label="Skip to links"
59
+ >
60
+ <a href="#content">
61
+ <span>
62
+ Skip to content
63
+ </span>
64
+ </a>
65
+ <a href="#nav">
66
+ <span>
67
+ Skip to navigation
68
+ </span>
69
+ </a>
70
+ </nav>
25
71
  <div class="mx-masthead mx-section__full mx-page mx-spacing--top-xxs mx-spacing--bottom-xxs mx-background--reverse">
26
72
  <div class="flex">
27
- A PreviousNext product
73
+ <div>
74
+ A PreviousNext product
75
+ </div>
28
76
  <nav class="mx-masthead__nav"
29
77
  aria-label="Additional links"
30
78
  >
@@ -18,6 +18,29 @@
18
18
  gap: var(--gap);
19
19
  }
20
20
  }
21
+
22
+ .mx-skip-links {
23
+ background-color: var(--colour-background-alt);
24
+ position: fixed;
25
+ inset-block-start: 0;
26
+ inset-inline-start: 0;
27
+ inline-size: 100%;
28
+ display: flex;
29
+ z-index: 200;
30
+ transform: translateY(-100%);
31
+ visibility: hidden;
32
+
33
+ &:has(a:focus) {
34
+ transform: translateY(0);
35
+ visibility: visible;
36
+ }
37
+
38
+ & a {
39
+ display: inline-block;
40
+ padding-block: 2px;
41
+ padding-inline: 4px;
42
+ }
43
+ }
21
44
  }
22
45
 
23
46
  @media print {