@pnx-mixtape/mxds 0.0.7 → 0.0.8

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 (79) hide show
  1. package/dist/build/accordion.css +108 -0
  2. package/dist/build/accordion.entry.js +139 -0
  3. package/dist/build/accordion.entry.js.map +1 -0
  4. package/dist/build/base.css +996 -0
  5. package/dist/build/breadcrumb.css +51 -0
  6. package/dist/build/button.css +132 -0
  7. package/dist/build/callout.css +11 -0
  8. package/dist/build/card.css +149 -0
  9. package/dist/build/chunks/disclosure-widget-CQLPJ8Ta.js +124 -0
  10. package/dist/build/chunks/disclosure-widget-CQLPJ8Ta.js.map +1 -0
  11. package/dist/build/chunks/drop-menu.entry-BC6x9vst.js +132 -0
  12. package/dist/build/chunks/drop-menu.entry-BC6x9vst.js.map +1 -0
  13. package/dist/build/chunks/keyboard-C73DHu0c.js +101 -0
  14. package/dist/build/chunks/keyboard-C73DHu0c.js.map +1 -0
  15. package/dist/build/chunks/polyfills-CJ5uTmUJ.js +749 -0
  16. package/dist/build/chunks/polyfills-CJ5uTmUJ.js.map +1 -0
  17. package/dist/build/chunks/popover-wbPSyFRj.js +654 -0
  18. package/dist/build/chunks/popover-wbPSyFRj.js.map +1 -0
  19. package/dist/build/chunks/utilities-B4YZb689.js +243 -0
  20. package/dist/build/chunks/utilities-B4YZb689.js.map +1 -0
  21. package/dist/build/constants.css +120 -0
  22. package/dist/build/container-grid.css +208 -0
  23. package/dist/build/content-block.css +36 -0
  24. package/dist/build/dialog.css +98 -0
  25. package/dist/build/dialog.entry.js +113 -0
  26. package/dist/build/dialog.entry.js.map +1 -0
  27. package/dist/build/drop-menu.css +78 -0
  28. package/dist/build/drop-menu.entry.js +2 -0
  29. package/dist/build/drop-menu.entry.js.map +1 -0
  30. package/dist/build/drupal.css +74 -0
  31. package/dist/build/footer.css +151 -0
  32. package/dist/build/form.css +517 -0
  33. package/dist/build/global-alert.css +60 -0
  34. package/dist/build/global-alert.entry.js +68 -0
  35. package/dist/build/global-alert.entry.js.map +1 -0
  36. package/dist/build/grid.css +200 -0
  37. package/dist/build/header.css +138 -0
  38. package/dist/build/header.entry.js +103 -0
  39. package/dist/build/header.entry.js.map +1 -0
  40. package/dist/build/hero-banner.css +62 -0
  41. package/dist/build/icon.css +399 -0
  42. package/dist/build/in-page-alert.css +94 -0
  43. package/dist/build/in-page-navigation.css +17 -0
  44. package/dist/build/in-page-navigation.entry.js +89 -0
  45. package/dist/build/in-page-navigation.entry.js.map +1 -0
  46. package/dist/build/link-list.css +72 -0
  47. package/dist/build/list-item.css +114 -0
  48. package/dist/build/masthead.css +30 -0
  49. package/dist/build/navigation.css +392 -0
  50. package/dist/build/navigation.entry.js +124 -0
  51. package/dist/build/navigation.entry.js.map +1 -0
  52. package/dist/build/page.css +80 -0
  53. package/dist/build/pagination.css +130 -0
  54. package/dist/build/section.css +163 -0
  55. package/dist/build/side-navigation.css +88 -0
  56. package/dist/build/sidebar.css +105 -0
  57. package/dist/build/social-links.css +20 -0
  58. package/dist/build/steps.css +118 -0
  59. package/dist/build/steps.entry.js +2 -0
  60. package/dist/build/steps.entry.js.map +1 -0
  61. package/dist/build/sticky.css +47 -0
  62. package/dist/build/sticky.entry.js +60 -0
  63. package/dist/build/sticky.entry.js.map +1 -0
  64. package/dist/build/tabs.css +109 -0
  65. package/dist/build/tabs.entry.js +202 -0
  66. package/dist/build/tabs.entry.js.map +1 -0
  67. package/dist/build/tag.css +67 -0
  68. package/dist/build/tiles.css +61 -0
  69. package/dist/build/utilities.css +178 -0
  70. package/package.json +2 -2
  71. package/src/Component/Card/Card.tsx +7 -7
  72. package/src/Component/Card/__snapshots__/Card.stories.ts.snap +1 -1
  73. package/src/Component/Card/__snapshots__/Card.stories.tsx.snap +5 -5
  74. package/src/Component/Card/card.css +3 -3
  75. package/src/Component/ContentBlock/ContentBlock.tsx +1 -1
  76. package/src/Component/ContentBlock/__snapshots__/ContentBlock.stories.tsx.snap +1 -1
  77. package/src/Component/ListItem/__snapshots__/ListItem.stories.ts.snap +1 -1
  78. package/src/Component/ListItem/list-item.css +1 -1
  79. package/src/Layout/Footer/Footer.stories.ts +1 -1
@@ -0,0 +1,392 @@
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== */
@@ -0,0 +1,124 @@
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
@@ -0,0 +1 @@
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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"}
@@ -0,0 +1,80 @@
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== */