@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
@@ -1,392 +0,0 @@
1
- /**
2
- * Navigation
3
- */
4
-
5
- @layer design-system.atoms {
6
- .mx-nav:where(:not(:has(ul))),
7
- .mx-nav ul {
8
- display: flex;
9
- flex-direction: column;
10
- list-style-type: none;
11
- padding-inline-start: 0;
12
- font-size: var(--nav-font-size, var(--font-size));
13
- }
14
-
15
- .mx-nav a[href] {
16
- --link-colour: currentcolor;
17
-
18
- text-decoration-line: none;
19
-
20
- text-decoration-line: var(--nav-underline, none);
21
- }
22
-
23
- .mx-nav a[href]:hover {
24
- text-decoration-line: underline;
25
- text-decoration-line: var(--nav-active-underline, underline);
26
- }
27
- .mx-nav--inline:where(:not(:has(ul))),
28
- .mx-nav--inline > ul {
29
- flex-flow: row wrap;
30
- align-items: center;
31
- gap: var(--nav-gap, var(--spacing-s));
32
- }
33
-
34
- .mx-nav__toggle {
35
- background: transparent none repeat 0 0 / auto auto padding-box border-box scroll;
36
- background: initial;
37
- padding: 0;
38
- border: 0;
39
- -webkit-appearance: none;
40
- -moz-appearance: none;
41
- appearance: none;
42
- position: absolute;
43
- color: var(
44
- --toggle-foreground,
45
- var(--foreground, var(--colour-foreground))
46
- );
47
- inline-size: var(--spacing-l);
48
- block-size: var(--spacing-l);
49
- inset-block-start: 12px;
50
- inset-block-start: var(--toggle-top, 12px);
51
- inset-inline-end: 0;
52
- cursor: pointer;
53
- }
54
- .mx-nav--open > .mx-nav__toggle::before {
55
- transform: rotate(180deg);
56
- }
57
- }
58
-
59
- /**
60
- * Collapsible Navigation
61
- */
62
-
63
- @layer design-system.components {
64
- .mx-nav--collapsible .mx-nav__toggle {
65
- inset-inline: auto var(--spacing-xxs);
66
- }
67
-
68
- @media (min-width: 720px) {
69
- .mx-nav--collapsible .mx-nav__toggle {
70
- display: block;
71
- }
72
- }
73
-
74
- .mx-nav--collapsible ul li {
75
- position: relative;
76
- }
77
-
78
- .mx-nav--collapsible ul li:has([aria-current="page"], .is-active) > a {
79
- font-weight: var(--font-weight-bold);
80
- }
81
-
82
- .mx-nav--collapsible ul li a {
83
- display: block;
84
- color: inherit;
85
- border-block-end: 1px solid
86
- var(--line-colour, var(--colour-border));
87
- border-block-end: var(--line-width, 1px) solid
88
- var(--line-colour, var(--colour-border));
89
- padding-block: var(--item-spacing, var(--spacing-xxs));
90
- padding-inline: var(--indent, var(--spacing-xxs))
91
- var(--item-spacing, var(--spacing-xxs));
92
- }
93
-
94
- .mx-nav--collapsible ul li a:is(:focus, :focus-visible) {
95
- outline-offset: -1px;
96
- }
97
-
98
- .mx-nav--collapsible .mx-nav__level-2 > li > a {
99
- --indent: var(--spacing-s);
100
- }
101
-
102
- @media (min-width: 720px) {
103
-
104
- .mx-nav--collapsible .mx-nav__level-2 > li > a {
105
- --indent: var(--spacing-m);
106
- }
107
- }
108
-
109
- .mx-nav--collapsible .mx-nav__level-3 > li > a {
110
- --indent: var(--spacing-m);
111
- }
112
-
113
- @media (min-width: 720px) {
114
-
115
- .mx-nav--collapsible .mx-nav__level-3 > li > a {
116
- --indent: var(--spacing-l);
117
- }
118
- }
119
-
120
- .mx-nav--collapsible :is([aria-current="page"], .is-active > a) {
121
- background-color: var(
122
- --nav-active-background,
123
- var(--background, var(--colour-background-alt))
124
- );
125
- color: inherit;
126
- color: var(--nav-active-foreground, inherit);
127
- }
128
-
129
- .mx-nav--collapsible li > ul {
130
- transition:
131
- transform 0.2s var(--ease),
132
- opacity 0.8s var(--ease);
133
- transform-origin: top;
134
- will-change: block-size;
135
- }
136
-
137
- .mx-nav--collapsible li > ul[inert] {
138
- block-size: 0;
139
- opacity: 0;
140
- transform: scaleY(0);
141
- transition:
142
- transform 0.8s var(--ease),
143
- opacity 0.2s var(--ease);
144
- }
145
-
146
- .mx-nav--collapsible li:is(.mx-nav__has-subnav, :has(> ul)) > a {
147
- padding-inline-end: var(--spacing-l);
148
- }
149
- }
150
-
151
- /**
152
- * Dropdown Navigation
153
- */
154
-
155
- @layer design-system.components {
156
- .mx-nav--dropdown {
157
- --nav-active-underline: none;
158
-
159
- margin-block: var(--spacing-m);
160
- }
161
-
162
- @media (min-width: 720px) {
163
- .mx-nav--dropdown {
164
- margin-block: 0;
165
- }
166
- }
167
-
168
- .mx-nav--dropdown li {
169
- margin: 0;
170
- }
171
-
172
- .mx-nav--dropdown li:is(.mx-nav__has-subnav, :has(> ul)) {
173
- position: relative;
174
- }
175
-
176
- .mx-nav--dropdown li:is(.mx-nav__has-subnav, :has(> ul)) > a {
177
- --toggle-gap: var(--spacing-l);
178
- }
179
-
180
- .mx-nav--dropdown a {
181
- display: block;
182
- }
183
- @media (min-width: 720px) {
184
-
185
- .mx-nav--dropdown a[aria-expanded="true"] {
186
- background-color: var(
187
- --nav-expanded-background,
188
- var(--background, var(--colour-background-alt))
189
- );
190
- color: inherit;
191
- color: var(--nav-expanded-foreground, inherit);
192
- }
193
-
194
- .mx-nav--dropdown a[aria-expanded="true"] + .nav__toggle {
195
- color: inherit;
196
- color: var(--nav-expanded-foreground, inherit);
197
- }
198
- }
199
-
200
- .mx-nav--dropdown li > ul {
201
- transition:
202
- 0.2s opacity var(--ease),
203
- 0.2s visibility var(--ease);
204
- }
205
-
206
- .mx-nav--dropdown li > ul[inert] {
207
- block-size: 0;
208
- opacity: 0;
209
- visibility: hidden;
210
- transition:
211
- 0.2s opacity var(--ease),
212
- 0.2s visibility var(--ease);
213
- }
214
-
215
- @media (min-width: 720px) {
216
-
217
- .mx-nav--dropdown li > ul[inert] {
218
- block-size: auto;
219
- }
220
- }
221
-
222
- .mx-nav--dropdown .mx-nav__level-1 {
223
- margin: 0;
224
- overflow: hidden;
225
- }
226
-
227
- @media (min-width: 720px) {
228
-
229
- .mx-nav--dropdown .mx-nav__level-1 {
230
- overflow: visible;
231
- flex-flow: row;
232
- align-items: center;
233
- justify-content: flex-start;
234
- }
235
- }
236
-
237
- .mx-nav--dropdown .mx-nav__level-1 > li {
238
- border-block-start: 1px solid
239
- var(--line-colour, var(--colour-border));
240
- border-block-start: var(--line-width, 1px) solid
241
- var(--line-colour, var(--colour-border));
242
- }
243
-
244
- @media (min-width: 720px) {
245
-
246
- .mx-nav--dropdown .mx-nav__level-1 > li {
247
- border-block-start: 0;
248
- }
249
- }
250
-
251
- .mx-nav--dropdown .mx-nav__level-1 > li > a:where(:not(.button)) {
252
- padding-block: var(--item-spacing, var(--spacing-xxs));
253
- padding-inline-end: var(
254
- --toggle-gap,
255
- var(--item-spacing, var(--spacing-xxs))
256
- );
257
- }
258
-
259
- @media (min-width: 720px) {
260
-
261
- .mx-nav--dropdown .mx-nav__level-1 > li > a:where(:not(.button)) {
262
- padding-inline-start: var(--item-spacing, var(--spacing-xxs));
263
- }
264
- }
265
-
266
- .mx-nav--dropdown .mx-nav__level-2 {
267
- display: block;
268
- position: relative;
269
- inset-inline-start: 0;
270
- inline-size: 100%;
271
- margin: 0;
272
- }
273
-
274
- @media (min-width: 720px) {
275
-
276
- .mx-nav--dropdown .mx-nav__level-2 {
277
- position: absolute;
278
- inline-size: 270px;
279
- inline-size: var(--dropdown-width, 270px);
280
- border-radius: var(--border-radius);
281
- background-color: var(
282
- --nav-expanded-background,
283
- var(--background, var(--colour-background-alt))
284
- );
285
- color: inherit;
286
- color: var(--nav-expanded-foreground, inherit);
287
- }
288
-
289
- .mx-nav--dropdown .mx-nav__level-2 .mx-nav__toggle::before {
290
- transform: rotate(-90deg);
291
- }
292
- }
293
- @media (max-width: 719.98px) {
294
-
295
- .mx-nav--dropdown .mx-nav__level-2 > li {
296
- border-block-start: 1px solid
297
- var(--line-colour, var(--colour-border));
298
- border-block-start: var(--line-width, 1px) solid
299
- var(--line-colour, var(--colour-border));
300
- }
301
- }
302
- .mx-nav--dropdown .mx-nav__level-2 > li > a:where(:not(.button)) {
303
- padding: var(--item-spacing, var(--spacing-xxs));
304
- }
305
-
306
- @media (max-width: 719.98px) {
307
- .mx-nav--dropdown .mx-nav__level-2 > li > a:where(:not(.button)) {
308
- padding-inline-start: var(--spacing-l);
309
- }
310
- }
311
- @media (min-width: 720px) {
312
-
313
- .mx-nav--dropdown .mx-nav--reverse .nav__level-2 {
314
- inset-inline: auto 0;
315
- }
316
-
317
- .mx-nav--dropdown .mx-nav--reverse .nav__level-2 .mx-nav__toggle::before {
318
- transform: rotate(90deg);
319
- }
320
- }
321
-
322
- .mx-nav--dropdown .mx-nav__separator {
323
- border-block-start: 1px solid
324
- var(--line-colour, var(--colour-border));
325
- border-block-start: var(--line-width, 1px) solid
326
- var(--line-colour, var(--colour-border));
327
- }
328
- }
329
-
330
- /**
331
- * Dropdown Navigation - Mega Nav
332
- */
333
-
334
- @layer design-system.components {
335
- @media (max-width: 719.98px) {
336
- .mx-nav--mega-nav {
337
- max-block-size: 100%;
338
- overflow: auto;
339
- }
340
- }
341
-
342
- .mx-nav--mega-nav .mx-nav__level-2 ul {
343
- display: block;
344
- position: relative;
345
- padding-inline-start: var(--spacing-l);
346
- border-block-start: 1px solid var(--border-colour);
347
- inline-size: 100%;
348
- }
349
-
350
- @media (min-width: 720px) {
351
-
352
- .mx-nav--mega-nav .mx-nav__level-2 ul {
353
- position: absolute;
354
- inset-inline-start: 270px;
355
- inset-inline-start: var(--dropdown-width, 270px);
356
- inset-block-start: 0;
357
- inline-size: 270px;
358
- inline-size: var(--dropdown-width, 270px);
359
- min-block-size: 100%;
360
- padding-inline-start: 0;
361
- border-block-start: 0;
362
- border-radius: 0 var(--border-radius) var(--border-radius) 0;
363
- background-color: var(
364
- --expanded-background,
365
- var(--colour-background-alt)
366
- );
367
- color: inherit;
368
- color: var(--expanded-foreground, inherit);
369
- }
370
- }
371
-
372
- .mx-nav--mega-nav .mx-nav__level-2 ul > li > a:where(:not(.mx-button)) {
373
- padding: var(--item-spacing, var(--spacing-xxs));
374
- }
375
-
376
- @media (max-width: 719.98px) {
377
-
378
- .mx-nav--mega-nav .mx-nav__level-2 ul > li > a:where(:not(.mx-button)) {
379
- padding-inline-start: var(--spacing-l);
380
- }
381
- }
382
- @media (min-width: 720px) {
383
-
384
- .mx-nav--mega-nav .mx-nav--reverse .mx-nav__level-2 ul {
385
- inset-inline-start: calc(270px * -1);
386
- inset-inline-start: calc(var(--dropdown-width, 270px) * -1);
387
- border-radius: var(--border-radius) 0 0 var(--border-radius);
388
- }
389
- }
390
- }
391
-
392
- /*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIl9uYXZpZ2F0aW9uLmNzcyIsIl9uYXZpZ2F0aW9uLWNvbGxhcHNpYmxlLmNzcyIsIl9uYXZpZ2F0aW9uLWRyb3Bkb3duLmNzcyIsIl9uYXZpZ2F0aW9uLW1lZ2EuY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztFQUVFOztBQUVGO0lBRUk7O01BRUUsYUFBYTtNQUNiLHNCQUFzQjtNQUN0QixxQkFBcUI7TUFDckIsdUJBQXVCO01BQ3ZCLGlEQUFpRDtJQUNuRDs7SUFFQTtNQUNFLDJCQUEyQjs7TUFFM0IsMEJBQWdEOztNQUFoRCxnREFBZ0Q7SUFLbEQ7O01BSEU7UUFDRSwrQkFBNEQ7UUFBNUQsNERBQTREO01BQzlEO0lBS0Y7O01BRUUsbUJBQW1CO01BQ25CLG1CQUFtQjtNQUNuQixxQ0FBcUM7SUFDdkM7O0VBR0Y7SUFDRSxpRkFBaUI7SUFBakIsbUJBQWlCO0lBQ2pCLFVBQVU7SUFDVixTQUFTO0lBQ1Qsd0JBQWdCO09BQWhCLHFCQUFnQjtZQUFoQixnQkFBZ0I7SUFDaEIsa0JBQWtCO0lBQ2xCOzs7S0FHQztJQUNELDZCQUE2QjtJQUM3Qiw0QkFBNEI7SUFDNUIsdUJBQTBDO0lBQTFDLDBDQUEwQztJQUMxQyxtQkFBbUI7SUFDbkIsZUFBZTtFQUNqQjtJQUdFO01BQ0UseUJBQXlCO0lBQzNCO0FBRUo7O0FDekRBOztFQUVFOztBQUVGO0lBRUk7TUFDRSxxQ0FBcUM7SUFLdkM7O01BSEU7SUFIRjtRQUlJLGNBQWM7SUFFbEI7TUFERTs7SUFHRjtNQUNFLGtCQUFrQjtJQW1CcEI7O01BakJFO1FBQ0Usb0NBQW9DO01BQ3RDOztNQUVBO1FBQ0UsY0FBYztRQUNkLGNBQWM7UUFDZDtrREFDMEM7UUFEMUM7a0RBQzBDO1FBQzFDLHNEQUFzRDtRQUN0RDtpREFDeUM7TUFLM0M7O1FBSEU7VUFDRSxvQkFBb0I7UUFDdEI7O0lBSUo7TUFDRSwwQkFBMEI7SUFLNUI7O01BSEU7O0lBSEY7UUFJSSwwQkFBMEI7SUFFOUI7TUFERTs7SUFHRjtNQUNF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IE5hdmlnYXRpb25cbiAqL1xuXG5AbGF5ZXIgZGVzaWduLXN5c3RlbS5hdG9tcyB7XG4gIC5teC1uYXYge1xuICAgICY6d2hlcmUoOm5vdCg6aGFzKHVsKSkpLFxuICAgIHVsIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgbGlzdC1zdHlsZS10eXBlOiBub25lO1xuICAgICAgcGFkZGluZy1pbmxpbmUtc3RhcnQ6IDA7XG4gICAgICBmb250LXNpemU6IHZhcigtLW5hdi1mb250LXNpemUsIHZhcigtLWZvbnQtc2l6ZSkpO1xuICAgIH1cblxuICAgICYgYVtocmVmXSB7XG4gICAgICAtLWxpbmstY29sb3VyOiBjdXJyZW50Y29sb3I7XG5cbiAgICAgIHRleHQtZGVjb3JhdGlvbi1saW5lOiB2YXIoLS1uYXYtdW5kZXJsaW5lLCBub25lKTtcblxuICAgICAgJjpob3ZlciB7XG4gICAgICAgIHRleHQtZGVjb3JhdGlvbi1saW5lOiB2YXIoLS1uYXYtYWN0aXZlLXVuZGVybGluZSwgdW5kZXJsaW5lKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAubXgtbmF2LS1pbmxpbmUge1xuICAgICY6d2hlcmUoOm5vdCg6aGFzKHVsKSkpLFxuICAgID4gdWwge1xuICAgICAgZmxleC1mbG93OiByb3cgd3JhcDtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICBnYXA6IHZhcigtLW5hdi1nYXAsIHZhcigtLXNwYWNpbmctcykpO1xuICAgIH1cbiAgfVxuXG4gIC5teC1uYXZfX3RvZ2dsZSB7XG4gICAgYmFja2dyb3VuZDogdW5zZXQ7XG4gICAgcGFkZGluZzogMDtcbiAgICBib3JkZXI6IDA7XG4gICAgYXBwZWFyYW5jZTogbm9uZTtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgY29sb3I6IHZhcihcbiAgICAgIC0tdG9nZ2xlLWZvcmVncm91bmQsXG4gICAgICB2YXIoLS1mb3JlZ3JvdW5kLCB2YXIoLS1jb2xvdXItZm9yZWdyb3VuZCkpXG4gICAgKTtcbiAgICBpbmxpbmUtc2l6ZTogdmFyKC0tc3BhY2luZy1sKTtcbiAgICBibG9jay1zaXplOiB2YXIoLS1zcGFjaW5nLWwpO1xuICAgIGluc2V0LWJsb2NrLXN0YXJ0OiB2YXIoLS10b2dnbGUtdG9wLCAxMnB4KTtcbiAgICBpbnNldC1pbmxpbmUtZW5kOiAwO1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgfVxuXG4gIC5teC1uYXYtLW9wZW4ge1xuICAgICYgPiAubXgtbmF2X190b2dnbGU6OmJlZm9yZSB7XG4gICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgxODBkZWcpO1xuICAgIH1cbiAgfVxufVxuIiwiLyoqXG4gKiBDb2xsYXBzaWJsZSBOYXZpZ2F0aW9uXG4gKi9cblxuQGxheWVyIGRlc2lnbi1zeXN0ZW0uY29tcG9uZW50cyB7XG4gIC5teC1uYXYtLWNvbGxhcHNpYmxlIHtcbiAgICAmIC5teC1uYXZfX3RvZ2dsZSB7XG4gICAgICBpbnNldC1pbmxpbmU6IGF1dG8gdmFyKC0tc3BhY2luZy14eHMpO1xuXG4gICAgICBAbWVkaWEgKC0tbWVkaXVtLXVwKSB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgfVxuICAgIH1cblxuICAgICYgdWwgbGkge1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuXG4gICAgICAmOmhhcyhbYXJpYS1jdXJyZW50PVwicGFnZVwiXSwgLmlzLWFjdGl2ZSkgPiBhIHtcbiAgICAgICAgZm9udC13ZWlnaHQ6IHZhcigtLWZvbnQtd2VpZ2h0LWJvbGQpO1xuICAgICAgfVxuXG4gICAgICAmIGEge1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgY29sb3I6IGluaGVyaXQ7XG4gICAgICAgIGJvcmRlci1ibG9jay1lbmQ6IHZhcigtLWxpbmUtd2lkdGgsIDFweCkgc29saWRcbiAgICAgICAgICB2YXIoLS1saW5lLWNvbG91ciwgdmFyKC0tY29sb3VyLWJvcmRlcikpO1xuICAgICAgICBwYWRkaW5nLWJsb2NrOiB2YXIoLS1pdGVtLXNwYWNpbmcsIHZhcigtLXNwYWNpbmcteHhzKSk7XG4gICAgICAgIHBhZGRpbmctaW5saW5lOiB2YXIoLS1pbmRlbnQsIHZhcigtLXNwYWNpbmcteHhzKSlcbiAgICAgICAgICB2YXIoLS1pdGVtLXNwYWNpbmcsIHZhcigtLXNwYWNpbmcteHhzKSk7XG5cbiAgICAgICAgJjppcyg6Zm9jdXMsIDpmb2N1cy12aXNpYmxlKSB7XG4gICAgICAgICAgb3V0bGluZS1vZmZzZXQ6IC0xcHg7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAmIC5teC1uYXZfX2xldmVsLTIgPiBsaSA+IGEge1xuICAgICAgLS1pbmRlbnQ6IHZhcigtLXNwYWNpbmctcyk7XG5cbiAgICAgIEBtZWRpYSAoLS1nbG9iYWwtbmF2LXVwKSB7XG4gICAgICAgIC0taW5kZW50OiB2YXIoLS1zcGFjaW5nLW0pO1xuICAgICAgfVxuICAgIH1cblxuICAgICYgLm14LW5hdl9fbGV2ZWwtMyA+IGxpID4gYSB7XG4gICAgICAtLWluZGVudDogdmFyKC0tc3BhY2luZy1tKTtcblxuICAgICAgQG1lZGlhICgtLWdsb2JhbC1uYXYtdXApIHtcbiAgICAgICAgLS1pbmRlbnQ6IHZhcigtLXNwYWNpbmctbCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgJiA6aXMoW2FyaWEtY3VycmVudD1cInBhZ2VcIl0sIC5pcy1hY3RpdmUgPiBhKSB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoXG4gICAgICAgIC0tbmF2LWFjdGl2ZS1iYWNrZ3JvdW5kLFxuICAgICAgICB2YXIoLS1iYWNrZ3JvdW5kLCB2YXIoLS1jb2xvdXItYmFja2dyb3VuZC1hbHQpKVxuICAgICAgKTtcbiAgICAgIGNvbG9yOiB2YXIoLS1uYXYtYWN0aXZlLWZvcmVncm91bmQsIGluaGVyaXQpO1xuICAgIH1cblxuICAgICYgbGkgPiB1bCB7XG4gICAgICB0cmFuc2l0aW9uOlxuICAgICAgICB0cmFuc2Zvcm0gMC4ycyB2YXIoLS1lYXNlKSxcbiAgICAgICAgb3BhY2l0eSAwLjhzIHZhcigtLWVhc2UpO1xuICAgICAgdHJhbnNmb3JtLW9yaWdpbjogdG9wO1xuICAgICAgd2lsbC1jaGFuZ2U6IGJsb2NrLXNpemU7XG5cbiAgICAgICZbaW5lcnRdIHtcbiAgICAgICAgYmxvY2stc2l6ZTogMDtcbiAgICAgICAgb3BhY2l0eTogMDtcbiAgICAgICAgdHJhbnNmb3JtOiBzY2FsZVkoMCk7XG4gICAgICAgIHRyYW5zaXRpb246XG4gICAgICAgICAgdHJhbnNmb3JtIDAuOHMgdmFyKC0tZWFzZSksXG4gICAgICAgICAgb3BhY2l0eSAwLjJzIHZhcigtLWVhc2UpO1xuICAgICAgfVxuICAgIH1cblxuICAgICYgbGk6aXMoLm14LW5hdl9faGFzLXN1Ym5hdiwgOmhhcyg+IHVsKSkgPiBhIHtcbiAgICAgIHBhZGRpbmctaW5saW5lLWVuZDogdmFyKC0tc3BhY2luZy1sKTtcbiAgICB9XG4gIH1cbn1cbiIsIi8qKlxuICogRHJvcGRvd24gTmF2aWdhdGlvblxuICovXG5cbkBsYXllciBkZXNpZ24tc3lzdGVtLmNvbXBvbmVudHMge1xuICAubXgtbmF2LS1kcm9wZG93biB7XG4gICAgLS1uYXYtYWN0aXZlLXVuZGVybGluZTogbm9uZTtcblxuICAgIG1hcmdpbi1ibG9jazogdmFyKC0tc3BhY2luZy1tKTtcblxuICAgIEBtZWRpYSAoLS1nbG9iYWwtbmF2LXVwKSB7XG4gICAgICBtYXJnaW4tYmxvY2s6IDA7XG4gICAgfVxuXG4gICAgJiBsaSB7XG4gICAgICBtYXJnaW46IDA7XG5cbiAgICAgICY6aXMoLm14LW5hdl9faGFzLXN1Ym5hdiwgOmhhcyg+IHVsKSkge1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgICAgICAgJiA+IGEge1xuICAgICAgICAgIC0tdG9nZ2xlLWdhcDogdmFyKC0tc3BhY2luZy1sKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgICYgYSB7XG4gICAgICBkaXNwbGF5OiBibG9jaztcblxuICAgICAgJlthcmlhLWV4cGFuZGVkPVwidHJ1ZVwiXSB7XG4gICAgICAgIEBtZWRpYSAoLS1nbG9iYWwtbmF2LXVwKSB7XG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKFxuICAgICAgICAgICAgLS1uYXYtZXhwYW5kZWQtYmFja2dyb3VuZCxcbiAgICAgICAgICAgIHZhcigtLWJhY2tncm91bmQsIHZhcigtLWNvbG91ci1iYWNrZ3JvdW5kLWFsdCkpXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb2xvcjogdmFyKC0tbmF2LWV4cGFuZGVkLWZvcmVncm91bmQsIGluaGVyaXQpO1xuXG4gICAgICAgICAgJiArIC5uYXZfX3RvZ2dsZSB7XG4gICAgICAgICAgICBjb2xvcjogdmFyKC0tbmF2LWV4cGFuZGVkLWZvcmVncm91bmQsIGluaGVyaXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgICYgbGkgPiB1bCB7XG4gICAgICB0cmFuc2l0aW9uOlxuICAgICAgICAwLjJzIG9wYWNpdHkgdmFyKC0tZWFzZSksXG4gICAgICAgIDAuMnMgdmlzaWJpbGl0eSB2YXIoLS1lYXNlKTtcblxuICAgICAgJltpbmVydF0ge1xuICAgICAgICBibG9jay1zaXplOiAwO1xuICAgICAgICBvcGFjaXR5OiAwO1xuICAgICAgICB2aXNpYmlsaXR5OiBoaWRkZW47XG4gICAgICAgIHRyYW5zaXRpb246XG4gICAgICAgICAgMC4ycyBvcGFjaXR5IHZhcigtLWVhc2UpLFxuICAgICAgICAgIDAuMnMgdmlzaWJpbGl0eSB2YXIoLS1lYXNlKTtcblxuICAgICAgICBAbWVkaWEgKC0tZ2xvYmFsLW5hdi11cCkge1xuICAgICAgICAgIGJsb2NrLXNpemU6IGF1dG87XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAmIC5teC1uYXZfX2xldmVsLTEge1xuICAgICAgbWFyZ2luOiAwO1xuICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcblxuICAgICAgQG1lZGlhICgtLWdsb2JhbC1uYXYtdXApIHtcbiAgICAgICAgb3ZlcmZsb3c6IHZpc2libGU7XG4gICAgICAgIGZsZXgtZmxvdzogcm93O1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG4gICAgICB9XG5cbiAgICAgICYgPiBsaSB7XG4gICAgICAgIGJvcmRlci1ibG9jay1zdGFydDogdmFyKC0tbGluZS13aWR0aCwgMXB4KSBzb2xpZFxuICAgICAgICAgIHZhcigtLWxpbmUtY29sb3VyLCB2YXIoLS1jb2xvdXItYm9yZGVyKSk7XG5cbiAgICAgICAgQG1lZGlhICgtLWdsb2JhbC1uYXYtdXApIHtcbiAgICAgICAgICBib3JkZXItYmxvY2stc3RhcnQ6IDA7XG4gICAgICAgIH1cblxuICAgICAgICAmID4gYTp3aGVyZSg6bm90KC5idXR0b24pKSB7XG4gICAgICAgICAgcGFkZGluZy1ibG9jazogdmFyKC0taXRlbS1zcGFjaW5nLCB2YXIoLS1zcGFjaW5nLXh4cykpO1xuICAgICAgICAgIHBhZGRpbmctaW5saW5lLWVuZDogdmFyKFxuICAgICAgICAgICAgLS10b2dnbGUtZ2FwLFxuICAgICAgICAgICAgdmFyKC0taXRlbS1zcGFjaW5nLCB2YXIoLS1zcGFjaW5nLXh4cykpXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIEBtZWRpYSAoLS1nbG9iYWwtbmF2LXVwKSB7XG4gICAgICAgICAgICBwYWRkaW5nLWlubGluZS1zdGFydDogdmFyKC0taXRlbS1zcGFjaW5nLCB2YXIoLS1zcGFjaW5nLXh4cykpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgICYgLm14LW5hdl9fbGV2ZWwtMiB7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgIGluc2V0LWlubGluZS1zdGFydDogMDtcbiAgICAgIGlubGluZS1zaXplOiAxMDAlO1xuICAgICAgbWFyZ2luOiAwO1xuXG4gICAgICBAbWVkaWEgKC0tZ2xvYmFsLW5hdi11cCkge1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIGlubGluZS1zaXplOiB2YXIoLS1kcm9wZG93bi13aWR0aCwgMjcwcHgpO1xuICAgICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXItcmFkaXVzKTtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKFxuICAgICAgICAgIC0tbmF2LWV4cGFuZGVkLWJhY2tncm91bmQsXG4gICAgICAgICAgdmFyKC0tYmFja2dyb3VuZCwgdmFyKC0tY29sb3VyLWJhY2tncm91bmQtYWx0KSlcbiAgICAgICAgKTtcbiAgICAgICAgY29sb3I6IHZhcigtLW5hdi1leHBhbmRlZC1mb3JlZ3JvdW5kLCBpbmhlcml0KTtcblxuICAgICAgICAmIC5teC1uYXZfX3RvZ2dsZTo6YmVmb3JlIHtcbiAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgtOTBkZWcpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgICYgPiBsaSB7XG4gICAgICAgIEBtZWRpYSAoLS1nbG9iYWwtbmF2LWRvd24pIHtcbiAgICAgICAgICBib3JkZXItYmxvY2stc3RhcnQ6IHZhcigtLWxpbmUtd2lkdGgsIDFweCkgc29saWRcbiAgICAgICAgICAgIHZhcigtLWxpbmUtY29sb3VyLCB2YXIoLS1jb2xvdXItYm9yZGVyKSk7XG4gICAgICAgIH1cblxuICAgICAgICAmID4gYSB7XG4gICAgICAgICAgJjp3aGVyZSg6bm90KC5idXR0b24pKSB7XG4gICAgICAgICAgICBwYWRkaW5nOiB2YXIoLS1pdGVtLXNwYWNpbmcsIHZhcigtLXNwYWNpbmcteHhzKSk7XG5cbiAgICAgICAgICAgIEBtZWRpYSAoLS1nbG9iYWwtbmF2LWRvd24pIHtcbiAgICAgICAgICAgICAgcGFkZGluZy1pbmxpbmUtc3RhcnQ6IHZhcigtLXNwYWNpbmctbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgJiAubXgtbmF2LS1yZXZlcnNlIC5uYXZfX2xldmVsLTIge1xuICAgICAgQG1lZGlhICgtLWdsb2JhbC1uYXYtdXApIHtcbiAgICAgICAgaW5zZXQtaW5saW5lOiBhdXRvIDA7XG5cbiAgICAgICAgJiAubXgtbmF2X190b2dnbGU6OmJlZm9yZSB7XG4gICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoOTBkZWcpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgJiAubXgtbmF2X19zZXBhcmF0b3Ige1xuICAgICAgYm9yZGVyLWJsb2NrLXN0YXJ0OiB2YXIoLS1saW5lLXdpZHRoLCAxcHgpIHNvbGlkXG4gICAgICAgIHZhcigtLWxpbmUtY29sb3VyLCB2YXIoLS1jb2xvdXItYm9yZGVyKSk7XG4gICAgfVxuICB9XG59XG4iLCIvKipcbiAqIERyb3Bkb3duIE5hdmlnYXRpb24gLSBNZWdhIE5hdlxuICovXG5cbkBsYXllciBkZXNpZ24tc3lzdGVtLmNvbXBvbmVudHMge1xuICAubXgtbmF2LS1tZWdhLW5hdiB7XG4gICAgQG1lZGlhICgtLWdsb2JhbC1uYXYtZG93bikge1xuICAgICAgbWF4LWJsb2NrLXNpemU6IDEwMCU7XG4gICAgICBvdmVyZmxvdzogYXV0bztcbiAgICB9XG5cbiAgICAmIC5teC1uYXZfX2xldmVsLTIgdWwge1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICBwYWRkaW5nLWlubGluZS1zdGFydDogdmFyKC0tc3BhY2luZy1sKTtcbiAgICAgIGJvcmRlci1ibG9jay1zdGFydDogMXB4IHNvbGlkIHZhcigtLWJvcmRlci1jb2xvdXIpO1xuICAgICAgaW5saW5lLXNpemU6IDEwMCU7XG5cbiAgICAgIEBtZWRpYSAoLS1nbG9iYWwtbmF2LXVwKSB7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgaW5zZXQtaW5saW5lLXN0YXJ0OiB2YXIoLS1kcm9wZG93bi13aWR0aCwgMjcwcHgpO1xuICAgICAgICBpbnNldC1ibG9jay1zdGFydDogMDtcbiAgICAgICAgaW5saW5lLXNpemU6IHZhcigtLWRyb3Bkb3duLXdpZHRoLCAyNzBweCk7XG4gICAgICAgIG1pbi1ibG9jay1zaXplOiAxMDAlO1xuICAgICAgICBwYWRkaW5nLWlubGluZS1zdGFydDogMDtcbiAgICAgICAgYm9yZGVyLWJsb2NrLXN0YXJ0OiAwO1xuICAgICAgICBib3JkZXItcmFkaXVzOiAwIHZhcigtLWJvcmRlci1yYWRpdXMpIHZhcigtLWJvcmRlci1yYWRpdXMpIDA7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcihcbiAgICAgICAgICAtLWV4cGFuZGVkLWJhY2tncm91bmQsXG4gICAgICAgICAgdmFyKC0tY29sb3VyLWJhY2tncm91bmQtYWx0KVxuICAgICAgICApO1xuICAgICAgICBjb2xvcjogdmFyKC0tZXhwYW5kZWQtZm9yZWdyb3VuZCwgaW5oZXJpdCk7XG4gICAgICB9XG5cbiAgICAgICYgPiBsaSA+IGE6d2hlcmUoOm5vdCgubXgtYnV0dG9uKSkge1xuICAgICAgICBwYWRkaW5nOiB2YXIoLS1pdGVtLXNwYWNpbmcsIHZhcigtLXNwYWNpbmcteHhzKSk7XG5cbiAgICAgICAgQG1lZGlhICgtLWdsb2JhbC1uYXYtZG93bikge1xuICAgICAgICAgIHBhZGRpbmctaW5saW5lLXN0YXJ0OiB2YXIoLS1zcGFjaW5nLWwpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgJiAubXgtbmF2LS1yZXZlcnNlIC5teC1uYXZfX2xldmVsLTIgdWwge1xuICAgICAgQG1lZGlhICgtLWdsb2JhbC1uYXYtdXApIHtcbiAgICAgICAgaW5zZXQtaW5saW5lLXN0YXJ0OiBjYWxjKHZhcigtLWRyb3Bkb3duLXdpZHRoLCAyNzBweCkgKiAtMSk7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlci1yYWRpdXMpIDAgMCB2YXIoLS1ib3JkZXItcmFkaXVzKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiJdfQ== */
@@ -1,124 +0,0 @@
1
- import { m as makeAnchor } from "./chunks/utilities-B4YZb689.js";
2
- import { K as Keyboard } from "./chunks/keyboard-C73DHu0c.js";
3
- import { D as DisclosureWidget } from "./chunks/disclosure-widget-CQLPJ8Ta.js";
4
- class Navigation extends HTMLElement {
5
- constructor() {
6
- super();
7
- this.handleDisclosure = ({ detail }) => {
8
- const { isOpen, id } = detail;
9
- const { item } = this.subNavs.get(id);
10
- item.classList.toggle("mx-nav--open");
11
- if (isOpen) {
12
- this.keyboard.attachPopup(id, this.handleCloseAny);
13
- } else {
14
- this.keyboard.detachPopup(id);
15
- }
16
- };
17
- this.handleCloseAny = () => {
18
- this.subNavs.forEach(({ widget }) => {
19
- if (!widget) return;
20
- if (widget.isOpen) widget.handleToggle();
21
- });
22
- };
23
- this.handleFlyout = (event) => {
24
- const target = event.target;
25
- const parent = target.closest("li");
26
- if (!parent) return;
27
- const subnav = parent.querySelector(":scope > ul");
28
- if (!subnav) return;
29
- this.subNavs.forEach(({ widget, list }) => {
30
- if (!widget) return;
31
- if (widget.isOpen) widget.handleToggle();
32
- if (list.id === subnav.id) widget.handleToggle();
33
- });
34
- };
35
- this.handleBreakpoint = ({
36
- matches
37
- }) => {
38
- const { signal } = this.controller;
39
- if (matches) {
40
- this.addEventListener("mouseover", this.handleFlyout, { signal });
41
- this.addEventListener("mouseleave", this.handleCloseAny, { signal });
42
- if (this.edgeCheck) this.handleEdgeCheck();
43
- } else {
44
- this.removeEventListener("mouseover", this.handleFlyout);
45
- this.removeEventListener("mouseleave", this.handleCloseAny);
46
- }
47
- };
48
- this.internals_ = this.attachInternals();
49
- this.controller = new AbortController();
50
- this.flyout = this.hasAttribute("flyout");
51
- }
52
- connectedCallback() {
53
- const { signal } = this.controller;
54
- this.keyboard = new Keyboard();
55
- this.keyboard.attachEventListeners(signal);
56
- this.addEventListener("focusin", () => {
57
- this.keyboard.attachMenu(this, this.links);
58
- });
59
- this.addEventListener("focusout", () => {
60
- this.keyboard.detachMenu();
61
- });
62
- if (!this.lists.length) return;
63
- this.subNavs = /* @__PURE__ */ new Map();
64
- this.lists.forEach((list, index) => {
65
- const item = list.closest("li");
66
- const link = item.querySelector(":scope > a");
67
- const id = makeAnchor(`subnav-${index}-${link.textContent}`, 30);
68
- const trigger = item.querySelector(
69
- ":scope > button.mx-nav__toggle"
70
- );
71
- if (item && link && trigger) {
72
- const labelId = `list-label-${id}`;
73
- link.setAttribute("id", labelId);
74
- list.setAttribute("id", id);
75
- list.setAttribute("aria-labelledby", labelId);
76
- const widget = new DisclosureWidget(trigger, list);
77
- widget.init();
78
- this.subNavs.set(id, { item, trigger, list, link, widget });
79
- }
80
- });
81
- this.addEventListener("disclosure-toggle", this.handleDisclosure);
82
- if (!this.flyout) return;
83
- this.edgeCheck = this.hasAttribute("edgeCheck");
84
- this.mq = this.getAttribute("mq") || "(min-width: 720px)";
85
- this.handleBreakpoint(this.breakpoint);
86
- this.breakpoint.addEventListener("change", this.handleBreakpoint, {
87
- signal
88
- });
89
- }
90
- disconnectedCallback() {
91
- this.controller.abort();
92
- this.subNavs.forEach((subNav) => subNav.widget.detach());
93
- }
94
- handleEdgeCheck() {
95
- const windowInnerWidth = window.innerWidth;
96
- const edgeCheck = new IntersectionObserver(
97
- ([{ boundingClientRect, target }], obs) => {
98
- if (windowInnerWidth < boundingClientRect.right)
99
- target.classList.add("mx-nav--reverse");
100
- obs.disconnect();
101
- }
102
- );
103
- this.subNavs.forEach(({ list }) => {
104
- edgeCheck.observe(list);
105
- const nestedLists = list.querySelectorAll("ul");
106
- nestedLists.forEach((nestedList) => edgeCheck.observe(nestedList));
107
- });
108
- }
109
- get links() {
110
- const links = this.querySelectorAll("a");
111
- if (!links.length) {
112
- throw new Error(`${this.localName} must links`);
113
- }
114
- return links;
115
- }
116
- get lists() {
117
- return this.querySelectorAll("li > ul");
118
- }
119
- get breakpoint() {
120
- return window.matchMedia(this.mq);
121
- }
122
- }
123
- customElements.define("mx-nav", Navigation);
124
- //# sourceMappingURL=navigation.entry.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"navigation.entry.js","sources":["../../src/Component/Navigation/Elements/Navigation.ts"],"sourcesContent":["/**\n * Main Navigation\n * @file Drop down navigation handler.\n */\n\nimport {\n Keyboard,\n makeAnchor,\n DisclosureWidget,\n DisclosureWidgetEvent,\n} from \"../../../Utility/utilities\"\n\ntype SubNavType = {\n list: HTMLElement\n trigger: HTMLButtonElement\n link: HTMLAnchorElement\n item?: HTMLLIElement\n widget?: DisclosureWidget\n linkWidget?: DisclosureWidget\n}\n\nexport default class Navigation extends HTMLElement {\n internals_: ElementInternals\n controller: AbortController\n keyboard: Keyboard\n subNavs?: Map<string, SubNavType>\n flyout?: boolean\n edgeCheck!: boolean\n mq!: string\n\n constructor() {\n super()\n this.internals_ = this.attachInternals()\n this.controller = new AbortController()\n this.flyout = this.hasAttribute(\"flyout\")\n }\n\n connectedCallback(): void {\n const { signal }: AbortController = this.controller\n\n // Add keyboard navigation events.\n this.keyboard = new Keyboard()\n this.keyboard.attachEventListeners(signal)\n\n // Add keyboard focus handler for menu links.\n this.addEventListener(\"focusin\", () => {\n this.keyboard.attachMenu(this, this.links)\n })\n this.addEventListener(\"focusout\", () => {\n this.keyboard.detachMenu()\n })\n\n if (!this.lists.length) return\n this.subNavs = new Map()\n this.lists.forEach((list: HTMLUListElement, index: number): void => {\n const item: HTMLLIElement = list.closest(\"li\")\n const link: HTMLAnchorElement = item.querySelector(\":scope > a\")\n const id: string = makeAnchor(`subnav-${index}-${link.textContent}`, 30)\n const trigger: HTMLButtonElement = item.querySelector(\n \":scope > button.mx-nav__toggle\",\n )\n if (item && link && trigger) {\n const labelId = `list-label-${id}`\n link.setAttribute(\"id\", labelId)\n list.setAttribute(\"id\", id)\n list.setAttribute(\"aria-labelledby\", labelId)\n const widget = new DisclosureWidget(trigger, list)\n widget.init()\n this.subNavs.set(id, { item, trigger, list, link, widget })\n }\n })\n\n this.addEventListener(\"disclosure-toggle\", this.handleDisclosure)\n\n if (!this.flyout) return\n this.edgeCheck = this.hasAttribute(\"edgeCheck\")\n this.mq = this.getAttribute(\"mq\") || \"(min-width: 720px)\"\n this.handleBreakpoint(this.breakpoint)\n this.breakpoint.addEventListener(\"change\", this.handleBreakpoint, {\n signal,\n })\n }\n\n disconnectedCallback(): void {\n this.controller.abort()\n this.subNavs.forEach((subNav: SubNavType): void => subNav.widget.detach())\n }\n\n handleDisclosure = ({ detail }: CustomEvent<DisclosureWidgetEvent>): void => {\n const { isOpen, id } = detail\n const { item } = this.subNavs.get(id)\n item.classList.toggle(\"mx-nav--open\")\n if (isOpen) {\n this.keyboard.attachPopup(id, this.handleCloseAny)\n } else {\n this.keyboard.detachPopup(id)\n }\n }\n\n handleCloseAny = (): void => {\n this.subNavs.forEach(({ widget }: SubNavType): void => {\n if (!widget) return\n if (widget.isOpen) widget.handleToggle()\n })\n }\n\n handleFlyout = (event: MouseEvent): void => {\n const target = event.target as HTMLElement\n const parent: HTMLLIElement = target.closest(\"li\")\n if (!parent) return\n const subnav: HTMLUListElement = parent.querySelector(\":scope > ul\")\n if (!subnav) return\n this.subNavs.forEach(({ widget, list }: SubNavType): void => {\n if (!widget) return\n if (widget.isOpen) widget.handleToggle()\n if (list.id === subnav.id) widget.handleToggle()\n })\n }\n\n handleBreakpoint = ({\n matches,\n }: MediaQueryList | MediaQueryListEvent): void => {\n const { signal }: AbortController = this.controller\n if (matches) {\n this.addEventListener(\"mouseover\", this.handleFlyout, { signal })\n this.addEventListener(\"mouseleave\", this.handleCloseAny, { signal })\n if (this.edgeCheck) this.handleEdgeCheck()\n } else {\n this.removeEventListener(\"mouseover\", this.handleFlyout)\n this.removeEventListener(\"mouseleave\", this.handleCloseAny)\n }\n }\n\n handleEdgeCheck() {\n const windowInnerWidth: number = window.innerWidth\n const edgeCheck: IntersectionObserver = new IntersectionObserver(\n ([{ boundingClientRect, target }], obs) => {\n if (windowInnerWidth < boundingClientRect.right)\n target.classList.add(\"mx-nav--reverse\")\n obs.disconnect()\n },\n )\n this.subNavs.forEach(({ list }: SubNavType): void => {\n edgeCheck.observe(list)\n const nestedLists: NodeListOf<HTMLUListElement> =\n list.querySelectorAll(\"ul\")\n nestedLists.forEach(nestedList => edgeCheck.observe(nestedList))\n })\n }\n\n get links(): NodeListOf<HTMLAnchorElement> | null {\n const links: NodeListOf<HTMLAnchorElement> | null =\n this.querySelectorAll(\"a\")\n if (!links.length) {\n throw new Error(`${this.localName} must links`)\n }\n return links\n }\n\n get lists(): NodeListOf<HTMLUListElement> | null {\n return this.querySelectorAll(\"li > ul\")\n }\n\n get breakpoint(): MediaQueryList {\n return window.matchMedia(this.mq)\n }\n}\n\ncustomElements.define(\"mx-nav\", Navigation)\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"mx-nav\": Navigation\n }\n}\n"],"names":[],"mappings":"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"}
@@ -1,80 +0,0 @@
1
- /**
2
- * Page
3
- */
4
-
5
- @layer design-system.layouts {
6
- :where(.mx-page) {
7
- --plus: 12rem;
8
- --minus: 8rem;
9
- --diff: calc(var(--plus) - var(--minus));
10
- --gutter: max(var(--spacing-s), min(6vw, var(--spacing-l)));
11
- --full: minmax(var(--gutter), 1fr);
12
- --narrow: min(var(--container-max-width), 100% - (var(--gutter) * 2));
13
- --feature: minmax(0, var(--minus));
14
- --container: minmax(0, var(--diff));
15
-
16
- display: grid;
17
- grid-template-columns:
18
- [full-start] var(--full)
19
- [container-start] minmax(0, calc(12rem - 8rem))
20
- [feature-start] minmax(0, 8rem)
21
- [narrow-start] var(--narrow) [narrow-end]
22
- minmax(0, 8rem) [feature-end]
23
- minmax(0, calc(12rem - 8rem)) [container-end]
24
- var(--full) [full-end];
25
- grid-template-columns:
26
- [full-start] var(--full)
27
- [container-start] var(--container)
28
- [feature-start] var(--feature)
29
- [narrow-start] var(--narrow) [narrow-end]
30
- var(--feature) [feature-end]
31
- var(--container) [container-end]
32
- var(--full) [full-end];
33
- }
34
-
35
- :where(.mx-page)
36
- > *:where(:not(.mx-page):not(.mx-section__full):not(.mx-section__narrow):not(.mx-section__feature):not(.mx-section[class*="mx-background--"])) {
37
- grid-column: container;
38
- }
39
-
40
- /* Immediate nested can be subgrid. */
41
- :where(.mx-page) > :where(.mx-page) {
42
- grid-column: full;
43
- display: grid;
44
- grid-template-columns: subgrid;
45
- }
46
-
47
- /* Deeper nested cannot be subgrid, needs it's children to be full width by default. */
48
- :where(.mx-page)
49
- > *
50
- :where(.mx-page:not(.mx-page--narrow):not(.mx-page--feature))
51
- > *:where(:not(.mx-section__narrow):not(.mx-section__feature)) {
52
- grid-column: full;
53
- }
54
-
55
- /** Adding a background triggers subgrid */
56
- :where(.mx-page) > :where(.mx-section[class*="mx-background--"]) {
57
- grid-column: full;
58
- display: grid;
59
- grid-template-columns: subgrid;
60
- }
61
-
62
- :where(.mx-page) > :where(.mx-section[class*="mx-background--"])
63
- > *:where(:not(.mx-page):not(.mx-section__full):not(.mx-section__narrow):not(.mx-section__feature)) {
64
- grid-column: container;
65
- }
66
-
67
- :where(:is(.mx-page--feature > *, .mx-section__feature)) {
68
- grid-column: feature;
69
- }
70
-
71
- :where(:is(.mx-page--narrow > *, .mx-section__narrow)) {
72
- grid-column: narrow;
73
- }
74
-
75
- :where(:is(.mx-page--full > *, .mx-section__full)) {
76
- grid-column: full;
77
- }
78
- }
79
-
80
- /*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInBhZ2UuY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztFQUVFOztBQUVGO0VBQ0U7SUFDRSxhQUFvQztJQUNwQyxhQUFzQztJQUN0Qyx3Q0FBd0M7SUFDeEMsMkRBQXdEO0lBQ3hELGtDQUFrQztJQUNsQyxxRUFBcUU7SUFDckUsa0NBQWtDO0lBQ2xDLG1DQUFtQzs7SUFFbkMsYUFBYTtJQUNiOzs7Ozs7OzRCQU93QjtJQVB4Qjs7Ozs7Ozs0QkFPd0I7RUFnRDFCOztJQTlDRTs7TUFVRSxzQkFBc0I7SUFDeEI7O0lBRUEscUNBQXFDO0lBQ3JDO01BQ0UsaUJBQWlCO01BQ2pCLGFBQWE7TUFDYiw4QkFBOEI7SUFDaEM7O0lBRUEsc0ZBQXNGO0lBQ3RGOzs7O01BSUUsaUJBQWlCO0lBQ25COztJQUVBLDBDQUEwQztJQUMxQztNQUNFLGlCQUFpQjtNQUNqQixhQUFhO01BQ2IsOEJBQThCO0lBYWhDOztNQVhFOztRQVNFLHNCQUFzQjtNQUN4Qjs7RUFJSjtJQUNFLG9CQUFvQjtFQUN0Qjs7RUFFQTtJQUNFLG1CQUFtQjtFQUNyQjs7RUFFQTtJQUNFLGlCQUFpQjtFQUNuQjtBQUNGIiwiZmlsZSI6InBhZ2UuY3NzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBQYWdlXG4gKi9cblxuQGxheWVyIGRlc2lnbi1zeXN0ZW0ubGF5b3V0cyB7XG4gIDp3aGVyZSgubXgtcGFnZSkge1xuICAgIC0tcGx1czogdG9rZW4oXCJzaXplLmNvbnRhaW5lci5wbHVzXCIpO1xuICAgIC0tbWludXM6IHRva2VuKFwic2l6ZS5jb250YWluZXIubWludXNcIik7XG4gICAgLS1kaWZmOiBjYWxjKHZhcigtLXBsdXMpIC0gdmFyKC0tbWludXMpKTtcbiAgICAtLWd1dHRlcjogY2xhbXAodmFyKC0tc3BhY2luZy1zKSwgNnZ3LCB2YXIoLS1zcGFjaW5nLWwpKTtcbiAgICAtLWZ1bGw6IG1pbm1heCh2YXIoLS1ndXR0ZXIpLCAxZnIpO1xuICAgIC0tbmFycm93OiBtaW4odmFyKC0tY29udGFpbmVyLW1heC13aWR0aCksIDEwMCUgLSAodmFyKC0tZ3V0dGVyKSAqIDIpKTtcbiAgICAtLWZlYXR1cmU6IG1pbm1heCgwLCB2YXIoLS1taW51cykpO1xuICAgIC0tY29udGFpbmVyOiBtaW5tYXgoMCwgdmFyKC0tZGlmZikpO1xuXG4gICAgZGlzcGxheTogZ3JpZDtcbiAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6XG4gICAgICBbZnVsbC1zdGFydF0gdmFyKC0tZnVsbClcbiAgICAgIFtjb250YWluZXItc3RhcnRdIHZhcigtLWNvbnRhaW5lcilcbiAgICAgIFtmZWF0dXJlLXN0YXJ0XSB2YXIoLS1mZWF0dXJlKVxuICAgICAgW25hcnJvdy1zdGFydF0gdmFyKC0tbmFycm93KSBbbmFycm93LWVuZF1cbiAgICAgIHZhcigtLWZlYXR1cmUpIFtmZWF0dXJlLWVuZF1cbiAgICAgIHZhcigtLWNvbnRhaW5lcikgW2NvbnRhaW5lci1lbmRdXG4gICAgICB2YXIoLS1mdWxsKSBbZnVsbC1lbmRdO1xuXG4gICAgJlxuICAgICAgPiAqOndoZXJlKFxuICAgICAgICA6bm90KFxuICAgICAgICAgICAgLm14LXBhZ2UsXG4gICAgICAgICAgICAubXgtc2VjdGlvbl9fZnVsbCxcbiAgICAgICAgICAgIC5teC1zZWN0aW9uX19uYXJyb3csXG4gICAgICAgICAgICAubXgtc2VjdGlvbl9fZmVhdHVyZSxcbiAgICAgICAgICAgIC5teC1zZWN0aW9uW2NsYXNzKj1cIm14LWJhY2tncm91bmQtLVwiXVxuICAgICAgICAgIClcbiAgICAgICkge1xuICAgICAgZ3JpZC1jb2x1bW46IGNvbnRhaW5lcjtcbiAgICB9XG5cbiAgICAvKiBJbW1lZGlhdGUgbmVzdGVkIGNhbiBiZSBzdWJncmlkLiAqL1xuICAgICYgPiA6d2hlcmUoLm14LXBhZ2UpIHtcbiAgICAgIGdyaWQtY29sdW1uOiBmdWxsO1xuICAgICAgZGlzcGxheTogZ3JpZDtcbiAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogc3ViZ3JpZDtcbiAgICB9XG5cbiAgICAvKiBEZWVwZXIgbmVzdGVkIGNhbm5vdCBiZSBzdWJncmlkLCBuZWVkcyBpdCdzIGNoaWxkcmVuIHRvIGJlIGZ1bGwgd2lkdGggYnkgZGVmYXVsdC4gKi9cbiAgICAmXG4gICAgICA+ICpcbiAgICAgIDp3aGVyZSgubXgtcGFnZTpub3QoLm14LXBhZ2UtLW5hcnJvdywgLm14LXBhZ2UtLWZlYXR1cmUpKVxuICAgICAgPiAqOndoZXJlKDpub3QoLm14LXNlY3Rpb25fX25hcnJvdywgLm14LXNlY3Rpb25fX2ZlYXR1cmUpKSB7XG4gICAgICBncmlkLWNvbHVtbjogZnVsbDtcbiAgICB9XG5cbiAgICAvKiogQWRkaW5nIGEgYmFja2dyb3VuZCB0cmlnZ2VycyBzdWJncmlkICovXG4gICAgJiA+IDp3aGVyZSgubXgtc2VjdGlvbltjbGFzcyo9XCJteC1iYWNrZ3JvdW5kLS1cIl0pIHtcbiAgICAgIGdyaWQtY29sdW1uOiBmdWxsO1xuICAgICAgZGlzcGxheTogZ3JpZDtcbiAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogc3ViZ3JpZDtcblxuICAgICAgJlxuICAgICAgICA+ICo6d2hlcmUoXG4gICAgICAgICAgOm5vdChcbiAgICAgICAgICAgICAgLm14LXBhZ2UsXG4gICAgICAgICAgICAgIC5teC1zZWN0aW9uX19mdWxsLFxuICAgICAgICAgICAgICAubXgtc2VjdGlvbl9fbmFycm93LFxuICAgICAgICAgICAgICAubXgtc2VjdGlvbl9fZmVhdHVyZVxuICAgICAgICAgICAgKVxuICAgICAgICApIHtcbiAgICAgICAgZ3JpZC1jb2x1bW46IGNvbnRhaW5lcjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICA6d2hlcmUoOmlzKC5teC1wYWdlLS1mZWF0dXJlID4gKiwgLm14LXNlY3Rpb25fX2ZlYXR1cmUpKSB7XG4gICAgZ3JpZC1jb2x1bW46IGZlYXR1cmU7XG4gIH1cblxuICA6d2hlcmUoOmlzKC5teC1wYWdlLS1uYXJyb3cgPiAqLCAubXgtc2VjdGlvbl9fbmFycm93KSkge1xuICAgIGdyaWQtY29sdW1uOiBuYXJyb3c7XG4gIH1cblxuICA6d2hlcmUoOmlzKC5teC1wYWdlLS1mdWxsID4gKiwgLm14LXNlY3Rpb25fX2Z1bGwpKSB7XG4gICAgZ3JpZC1jb2x1bW46IGZ1bGw7XG4gIH1cbn1cbiJdfQ== */