@schalkneethling/miyagi-core 4.0.2

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 (138) hide show
  1. package/LICENSE.md +21 -0
  2. package/README.md +43 -0
  3. package/api/app.js +39 -0
  4. package/api/index.js +236 -0
  5. package/bin/miyagi.js +2 -0
  6. package/dist/css/iframe.css +31 -0
  7. package/dist/css/main.css +1 -0
  8. package/dist/js/_iframe-links-DdifIr4P.js +1 -0
  9. package/dist/js/_mock-data-Dypo4Bl_.js +1 -0
  10. package/dist/js/_prism-By3NMwUd.js +1 -0
  11. package/dist/js/iframe.build.js +1 -0
  12. package/dist/js/iframe.js +1 -0
  13. package/dist/js/index-BKDKaBC6.js +1 -0
  14. package/dist/js/jsontree.js +1 -0
  15. package/dist/js/main.build.js +1 -0
  16. package/dist/js/main.js +1 -0
  17. package/frontend/assets/css/iframe/accordion-tabs.css +77 -0
  18. package/frontend/assets/css/iframe/jsontree.js.css +325 -0
  19. package/frontend/assets/css/iframe/prism.css +132 -0
  20. package/frontend/assets/css/iframe/styleguide/colors.css +61 -0
  21. package/frontend/assets/css/iframe/styleguide/fonts.css +37 -0
  22. package/frontend/assets/css/iframe/styleguide/index.css +109 -0
  23. package/frontend/assets/css/iframe/styleguide/spacings.css +21 -0
  24. package/frontend/assets/css/iframe.css +410 -0
  25. package/frontend/assets/css/main/menu/config-switcher.css +49 -0
  26. package/frontend/assets/css/main/menu/config-switchers.css +67 -0
  27. package/frontend/assets/css/main/menu/goto.css +24 -0
  28. package/frontend/assets/css/main/menu/nav.css +113 -0
  29. package/frontend/assets/css/main/menu/search.css +64 -0
  30. package/frontend/assets/css/main/menu/title.css +40 -0
  31. package/frontend/assets/css/main/menu.css +114 -0
  32. package/frontend/assets/css/main/reset.css +217 -0
  33. package/frontend/assets/css/main.css +71 -0
  34. package/frontend/assets/css/shared.css +34 -0
  35. package/frontend/assets/css/tokens.css +112 -0
  36. package/frontend/assets/favicon.ico +0 -0
  37. package/frontend/assets/js/_accordion-tabs.js +403 -0
  38. package/frontend/assets/js/_goto.js +63 -0
  39. package/frontend/assets/js/_iframe-links.js +19 -0
  40. package/frontend/assets/js/_is-triggered.js +15 -0
  41. package/frontend/assets/js/_main.js +379 -0
  42. package/frontend/assets/js/_mock-data.js +13 -0
  43. package/frontend/assets/js/_prism.js +1098 -0
  44. package/frontend/assets/js/_search.js +190 -0
  45. package/frontend/assets/js/_socket.js +9 -0
  46. package/frontend/assets/js/config-switcher/development-mode.js +49 -0
  47. package/frontend/assets/js/config-switcher/index.js +63 -0
  48. package/frontend/assets/js/config-switcher/text-direction.js +30 -0
  49. package/frontend/assets/js/config-switcher/theme.js +87 -0
  50. package/frontend/assets/js/iframe.build.js +43 -0
  51. package/frontend/assets/js/iframe.js +52 -0
  52. package/frontend/assets/js/jsontree.js +979 -0
  53. package/frontend/assets/js/main.build.js +40 -0
  54. package/frontend/assets/js/main.js +42 -0
  55. package/frontend/assets/js/styleguide/color-converter.js +741 -0
  56. package/frontend/assets/js/styleguide/index.js +119 -0
  57. package/frontend/views/component_variation.twig.miyagi +57 -0
  58. package/frontend/views/design-tokens/colors.twig.miyagi +43 -0
  59. package/frontend/views/design-tokens/sizes.twig.miyagi +35 -0
  60. package/frontend/views/design-tokens/typography.twig.miyagi +38 -0
  61. package/frontend/views/iframe_component.twig.miyagi +141 -0
  62. package/frontend/views/iframe_component_variation.twig.miyagi +55 -0
  63. package/frontend/views/iframe_index.twig.miyagi +14 -0
  64. package/frontend/views/layouts/iframe_default.twig.miyagi +22 -0
  65. package/frontend/views/main.twig.miyagi +24 -0
  66. package/frontend/views/menu/config-switchers.twig.miyagi +83 -0
  67. package/frontend/views/menu/goto.twig.miyagi +9 -0
  68. package/frontend/views/menu/menu.twig.miyagi +21 -0
  69. package/frontend/views/menu/nav.twig.miyagi +95 -0
  70. package/frontend/views/menu/search.twig.miyagi +13 -0
  71. package/frontend/views/menu/title.twig.miyagi +24 -0
  72. package/index.js +3 -0
  73. package/lib/build/index.js +1020 -0
  74. package/lib/cli/app.js +38 -0
  75. package/lib/cli/component.js +56 -0
  76. package/lib/cli/index.js +5 -0
  77. package/lib/cli/lint.js +180 -0
  78. package/lib/config.js +74 -0
  79. package/lib/default-config.js +105 -0
  80. package/lib/generator/component.js +199 -0
  81. package/lib/generator/mocks.js +201 -0
  82. package/lib/helpers.js +184 -0
  83. package/lib/i18n/en.js +91 -0
  84. package/lib/i18n/index.js +17 -0
  85. package/lib/index.js +166 -0
  86. package/lib/init/args.js +55 -0
  87. package/lib/init/config.js +330 -0
  88. package/lib/init/engines.js +65 -0
  89. package/lib/init/index.js +102 -0
  90. package/lib/init/rendering.js +12 -0
  91. package/lib/init/router.js +249 -0
  92. package/lib/init/static.js +133 -0
  93. package/lib/init/twing/cache.js +34 -0
  94. package/lib/init/twing/functions.js +51 -0
  95. package/lib/init/views.js +19 -0
  96. package/lib/init/watcher.js +402 -0
  97. package/lib/logger.js +94 -0
  98. package/lib/mocks/get.js +111 -0
  99. package/lib/mocks/index.js +9 -0
  100. package/lib/mocks/resolve/ref.js +484 -0
  101. package/lib/mocks/resolve/tpl.js +246 -0
  102. package/lib/mocks/resolve.js +205 -0
  103. package/lib/render/helpers.js +51 -0
  104. package/lib/render/index.js +38 -0
  105. package/lib/render/views/iframe/component.docs.js +77 -0
  106. package/lib/render/views/iframe/component.js +338 -0
  107. package/lib/render/views/iframe/design-tokens/colors.js +52 -0
  108. package/lib/render/views/iframe/design-tokens/index.js +9 -0
  109. package/lib/render/views/iframe/design-tokens/sizes.js +49 -0
  110. package/lib/render/views/iframe/design-tokens/typography.js +52 -0
  111. package/lib/render/views/iframe/docs.js +68 -0
  112. package/lib/render/views/iframe/index.js +44 -0
  113. package/lib/render/views/iframe/variation.js +116 -0
  114. package/lib/render/views/iframe/variation.standalone.js +89 -0
  115. package/lib/render/views/main/component.docs.js +53 -0
  116. package/lib/render/views/main/component.js +74 -0
  117. package/lib/render/views/main/design-tokens.js +53 -0
  118. package/lib/render/views/main/docs.js +47 -0
  119. package/lib/render/views/main/index.js +46 -0
  120. package/lib/state/components.js +132 -0
  121. package/lib/state/css.js +50 -0
  122. package/lib/state/docs.js +111 -0
  123. package/lib/state/file-contents.js +207 -0
  124. package/lib/state/helpers.js +86 -0
  125. package/lib/state/index.js +56 -0
  126. package/lib/state/menu/index.js +275 -0
  127. package/lib/state/menu/structure.js +146 -0
  128. package/lib/state/partials.js +23 -0
  129. package/lib/state/source-tree.js +75 -0
  130. package/lib/styleguide/color-names.js +150 -0
  131. package/lib/styleguide/colors.js +135 -0
  132. package/lib/styleguide/helpers.js +37 -0
  133. package/lib/styleguide/index.js +17 -0
  134. package/lib/styleguide/media-queries.js +26 -0
  135. package/lib/styleguide/spacings.js +35 -0
  136. package/lib/styleguide/typography.js +61 -0
  137. package/lib/validator/mocks.js +105 -0
  138. package/package.json +117 -0
@@ -0,0 +1,410 @@
1
+ @import url("./tokens.css") layer(miyagi);
2
+ @import url("./shared.css") layer(miyagi);
3
+ @import url("./iframe/prism.css") layer(miyagi);
4
+ @import url("./iframe/accordion-tabs.css") layer(miyagi);
5
+ @import url("./iframe/jsontree.js.css") layer(miyagi);
6
+ @import url("./iframe/styleguide/index.css") layer(miyagi);
7
+
8
+ html {
9
+ --iframe-spacing: clamp(0.75rem, 4vi, 2.5rem);
10
+
11
+ height: 100%;
12
+ }
13
+
14
+ body {
15
+ background: var(--color-Iframe-background);
16
+ margin: 0;
17
+ min-height: 100%;
18
+ font-family: var(--font-family);
19
+ color: var(--color-Iframe-text);
20
+ }
21
+
22
+ .Wrapper {
23
+ box-sizing: border-box;
24
+ padding: var(--iframe-spacing);
25
+ width: 100%;
26
+ }
27
+
28
+ a {
29
+ color: var(--color-Iframe-link);
30
+ text-decoration: underline;
31
+ }
32
+
33
+ a:focus-visible,
34
+ summary:focus-visible,
35
+ button:focus-visible {
36
+ outline: 3px solid currentcolor;
37
+ outline-offset: 2px;
38
+ border-radius: 0.25em;
39
+ }
40
+
41
+ code[class*="language-"],
42
+ pre[class*="language-"] {
43
+ text-shadow: none;
44
+ box-shadow: none;
45
+ border-radius: 0;
46
+ }
47
+
48
+ .Documentation code,
49
+ .Code code,
50
+ :not(pre) > code[class*="language-"] {
51
+ font-size-adjust: 0.525;
52
+ text-shadow: none;
53
+ }
54
+
55
+ .Documentation,
56
+ .Information,
57
+ .Code code,
58
+ :not(pre) > code[class*="language-"],
59
+ .ErrorMessage {
60
+ line-height: calc(1ex / 0.32);
61
+ }
62
+
63
+ .Information code,
64
+ .Documentation code,
65
+ .Code code,
66
+ :not(pre) > code[class*="language-"] {
67
+ font-family: Menlo, Monaco, monospace;
68
+ }
69
+
70
+ .Documentation h1 {
71
+ font-size: 2.4em;
72
+ font-weight: bold;
73
+ line-height: 1;
74
+ text-transform: capitalize;
75
+ }
76
+
77
+ .Documentation > * + * {
78
+ margin-top: calc(1ex / 0.32);
79
+ }
80
+
81
+ .Documentation i {
82
+ font-style: italic;
83
+ }
84
+
85
+ .Documentation table {
86
+ border-spacing: 0;
87
+ }
88
+
89
+ .Documentation th {
90
+ text-align: left;
91
+ border-block-end: 0.0625rem solid currentcolor;
92
+ }
93
+
94
+ .Documentation :is(th, td) {
95
+ padding: 0.25em 0.5em;
96
+ }
97
+
98
+ .Documentation tr:not(:last-child) td {
99
+ border-block-end: 0.0625rem solid var(--color-Outline);
100
+ }
101
+
102
+ .Information-val {
103
+ margin-inline-start: 0;
104
+ }
105
+
106
+ .Component-variationHeader {
107
+ display: flex;
108
+ gap: 16px;
109
+ position: absolute;
110
+ inset-inline-end: 40px;
111
+ top: 13px;
112
+ font-size: 14px;
113
+ line-height: 1;
114
+ }
115
+
116
+ .Documentation > *:first-child {
117
+ margin-top: 0;
118
+ }
119
+
120
+ .Documentation p {
121
+ max-width: 64ch;
122
+ }
123
+
124
+ .SectionTitle {
125
+ align-items: center;
126
+ display: flex;
127
+ font-size: 1.6em;
128
+ margin: 2em 0 1em;
129
+ scroll-margin-top: 1.5em;
130
+ }
131
+
132
+ .SectionTitle::after {
133
+ background: var(--color-Outline);
134
+ content: "";
135
+ flex: 1;
136
+ height: 0.0625rem;
137
+ margin-inline-start: 20px;
138
+ }
139
+
140
+ .Information-wrapper + .Information-wrapper {
141
+ margin-top: 30px;
142
+ }
143
+
144
+ .Information-attr {
145
+ color: var(--color-Iframe-text-secondary);
146
+ font-family: var(--font-family);
147
+ font-size: 0.875em;
148
+ letter-spacing: 0.0375em;
149
+ text-decoration: none;
150
+ text-transform: uppercase;
151
+ }
152
+
153
+ .Information-attr:not(:first-child) {
154
+ margin-top: 1em;
155
+ }
156
+
157
+ .Information code,
158
+ .Documentation code {
159
+ font-weight: 600;
160
+ }
161
+
162
+ .Status::before {
163
+ display: inline-block;
164
+ margin-inline-end: 0.5em;
165
+ }
166
+
167
+ .Status--valid {
168
+ color: var(--color-Positive);
169
+ }
170
+
171
+ .Status--valid::before {
172
+ content: "✓";
173
+ }
174
+
175
+ .Status--invalid {
176
+ color: var(--color-Negative);
177
+ }
178
+
179
+ .Status--invalid::before {
180
+ content: "✗";
181
+ }
182
+
183
+ .Error {
184
+ align-items: center;
185
+ color: var(--color-Negative);
186
+ display: flex;
187
+ height: 100%;
188
+ justify-content: center;
189
+ margin: 0;
190
+ }
191
+
192
+ .ErrorMessage {
193
+ color: var(--color-Negative);
194
+ margin: 1.5em 0;
195
+ }
196
+
197
+ .Iframe-newTabLink {
198
+ align-items: center;
199
+ display: flex;
200
+ font-weight: normal;
201
+ }
202
+
203
+ .Iframe-newTabLink::before {
204
+ content: "";
205
+ display: block;
206
+ width: 1em;
207
+ height: 1em;
208
+ margin-inline-end: 0.5em;
209
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' focusable='false' aria-hidden='true'%3E%3Cpath d='M18 13v6a2 2 0 01-2 2H5a2 2 0 01-2-2V8a2 2 0 012-2h6M15 3h6v6M10 14L21 3'%3E%3C/path%3E%3C/svg%3E");
210
+ }
211
+
212
+ pre[class*="language-"],
213
+ .Code,
214
+ :not(pre) > code[class*="language-"] {
215
+ background: var(--color-Code-background);
216
+ }
217
+
218
+ :not(pre) > code[class*="language-"],
219
+ pre[class*="language-"] {
220
+ border-color: var(--color-Outline);
221
+ }
222
+
223
+ .Code,
224
+ :not(pre) > code[class*="language-"] {
225
+ border: 0.0625rem solid var(--color-Outline);
226
+ padding: calc(var(--iframe-spacing) / 2);
227
+ }
228
+
229
+ .Code,
230
+ pre[class*="language-"] {
231
+ font-size: 0.875em;
232
+ }
233
+
234
+ .Tabs-tab summary {
235
+ cursor: default;
236
+ list-style-type: none;
237
+ padding-block: 10px;
238
+ padding-inline-start: 16px;
239
+ position: relative;
240
+ }
241
+
242
+ .Tabs-tab summary::before {
243
+ border: var(--toggle-border);
244
+ border-color: currentcolor;
245
+ border-top-width: 0.25em;
246
+ border-inline-end-width: 0.25em;
247
+ content: "";
248
+ display: block;
249
+ font-size: 0.4em;
250
+ height: var(--toggle-height);
251
+ inset-inline-start: 0.25rem;
252
+ position: absolute;
253
+ top: 50%;
254
+ transition: var(--toggle-transition);
255
+ width: var(--toggle-width);
256
+ }
257
+
258
+ .Tabs-tab summary::-webkit-details-marker {
259
+ display: none;
260
+ }
261
+
262
+ .Tabs-tab:not([open]) summary::before {
263
+ transform: var(--toggle-transition-closed);
264
+ }
265
+
266
+ .Tabs-tab[open] summary::before {
267
+ transform: var(--toggle-transition-opened);
268
+ }
269
+
270
+ .Component:not(:last-child) {
271
+ margin-bottom: calc(2 * var(--iframe-spacing));
272
+ }
273
+
274
+ .Component-iframeWrapper {
275
+ height: calc(100vh - 2.5 * var(--iframe-spacing));
276
+ width: 100%;
277
+ }
278
+
279
+ .Component-iframeWrapper:not(.has-fixedHeight) {
280
+ outline: 0.0625rem solid var(--color-Outline);
281
+ resize: both;
282
+ }
283
+
284
+ .Component-iframe {
285
+ height: 100%;
286
+ width: 100%;
287
+ }
288
+
289
+ .Component-head {
290
+ display: flex;
291
+ justify-content: space-between;
292
+ flex-wrap: wrap;
293
+ gap: 10px;
294
+ padding: 0 0 20px;
295
+ }
296
+
297
+ .Component-headMeta {
298
+ display: flex;
299
+ align-items: center;
300
+ gap: 16px;
301
+ }
302
+
303
+ .Component-mockValidation {
304
+ appearance: none;
305
+ border: none;
306
+ background: none;
307
+ color: var(--color-Iframe-link);
308
+ cursor: pointer;
309
+ margin: 0;
310
+ padding: 0;
311
+ font-size: inherit;
312
+ font-family: var(--font-family);
313
+ line-height: 1;
314
+ text-decoration: underline;
315
+ }
316
+
317
+ .Component-mockData {
318
+ background: light-dark(hsl(0deg 0% 95%), hsl(0deg 0% 12%));
319
+ border: none;
320
+ padding: var(--iframe-spacing);
321
+ width: calc(100vi - 2 * var(--iframe-spacing));
322
+ height: calc(100vb - 2 * var(--iframe-spacing));
323
+ max-width: 70ch;
324
+ box-sizing: border-box;
325
+ overscroll-behavior: contain;
326
+ }
327
+
328
+ .Component-mockData::backdrop {
329
+ background: light-dark(rgb(255 255 255 / 80%), rgb(0 0 0 / 80%));
330
+ }
331
+
332
+ .Component-mockData:not([open]) {
333
+ display: none;
334
+ }
335
+
336
+ .Component-mockDataHeading {
337
+ margin-block: 0 1em;
338
+ }
339
+
340
+ .Component-closeMockData {
341
+ appearance: none;
342
+ background: none;
343
+ padding: 0;
344
+ margin: 0;
345
+ border: 0;
346
+ color: var(--color-Iframe-link);
347
+ text-decoration: underline;
348
+ cursor: pointer;
349
+ line-height: 1;
350
+ font-family: var(--font-family);
351
+ font-size: 0.875em;
352
+ position: absolute;
353
+ inset-block-start: 1rem;
354
+ inset-inline-end: 1rem;
355
+ }
356
+
357
+ .Component-file {
358
+ align-items: center;
359
+ color: var(--color-Iframe-text-secondary);
360
+ display: inline-flex;
361
+ flex-wrap: wrap;
362
+ font-family: var(--font-family);
363
+ font-size: 0.875em;
364
+ letter-spacing: 0.0375em;
365
+ text-decoration: none;
366
+ text-transform: uppercase;
367
+ }
368
+
369
+ .Component-file:hover,
370
+ .Component-file:focus,
371
+ .Component-file:active {
372
+ text-decoration: underline;
373
+ }
374
+
375
+ .Component-fileFolders {
376
+ color: var(--color-Iframe-text-tertiary);
377
+ }
378
+
379
+ .ComponentView {
380
+ border: 0.0625rem solid var(--color-Outline);
381
+ box-sizing: border-box;
382
+ height: calc(100vh - 2 * var(--iframe-spacing));
383
+ overflow: hidden;
384
+ resize: both;
385
+ width: 100%;
386
+ }
387
+
388
+ .ComponentView-iframe {
389
+ height: 100%;
390
+ width: 100%;
391
+ }
392
+
393
+ [data-mode="presentation"] .DeveloperInformation {
394
+ display: none;
395
+ }
396
+
397
+ @media screen and (prefers-reduced-motion) {
398
+ *,
399
+ *::after,
400
+ *::before {
401
+ animation: none !important;
402
+ transition: none !important;
403
+ }
404
+ }
405
+
406
+ @media (prefers-color-scheme: dark) {
407
+ .Iframe-newTabLink::before {
408
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23fff' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' focusable='false' aria-hidden='true'%3E%3Cpath d='M18 13v6a2 2 0 01-2 2H5a2 2 0 01-2-2V8a2 2 0 012-2h6M15 3h6v6M10 14L21 3'%3E%3C/path%3E%3C/svg%3E");
409
+ }
410
+ }
@@ -0,0 +1,49 @@
1
+ /** @define ConfigSwitcher; */
2
+
3
+ .ConfigSwitcher-options {
4
+ display: flex;
5
+ gap: 0.5rem;
6
+ margin-block-start: 0.25rem;
7
+ }
8
+
9
+ .ConfigSwitcher-option {
10
+ position: relative;
11
+ }
12
+
13
+ .ConfigSwitcher [type="radio"] {
14
+ position: absolute;
15
+ inset-block-start: 0;
16
+ inset-inline-start: 0;
17
+ opacity: 0.01;
18
+ }
19
+
20
+ .ConfigSwitcher label {
21
+ display: flex;
22
+ padding: 0.25em;
23
+ cursor: pointer;
24
+ }
25
+
26
+ .ConfigSwitcher :checked + label {
27
+ outline: 0.0625em solid currentcolor;
28
+ }
29
+
30
+ .ConfigSwitcher input:focus-visible + label {
31
+ outline: var(--outline);
32
+ outline-offset: var(--outline-offset);
33
+ }
34
+
35
+ .ConfigSwitcher svg {
36
+ block-size: 1em;
37
+ inline-size: 1em;
38
+ fill: var(--color-Link);
39
+ }
40
+
41
+ .ConfigSwitcher :checked + label svg {
42
+ fill: var(--color-Link-active, var(--color-Link));
43
+ }
44
+
45
+ @media (width <= 40rem) {
46
+ .ConfigSwitchers {
47
+ margin-block-start: 1rem;
48
+ }
49
+ }
@@ -0,0 +1,67 @@
1
+ @import url("./config-switcher.css");
2
+
3
+ .ConfigSwitchers {
4
+ display: flex;
5
+ background: var(--bar-background);
6
+ }
7
+
8
+ .ConfigSwitchers-toggle {
9
+ --size: var(--bar-size);
10
+
11
+ align-items: center;
12
+ color: var(--color-Icon);
13
+ display: flex;
14
+ flex-shrink: 0;
15
+ gap: 0.5em;
16
+ cursor: pointer;
17
+ border-block-start: var(--divider);
18
+ inline-size: 100%;
19
+
20
+ svg {
21
+ display: block;
22
+ inline-size: var(--size);
23
+ block-size: var(--size);
24
+ padding: 0.45em;
25
+ }
26
+ }
27
+
28
+ .ConfigSwitchers-toggle:focus-visible {
29
+ outline-offset: calc(-1 * var(--outline-offset));
30
+ }
31
+
32
+ .ConfigSwitchers-toggleClose {
33
+ fill: currentcolor;
34
+ block-size: 75%;
35
+ inline-size: 75%;
36
+ }
37
+
38
+ .ConfigSwitchers-toggle[aria-expanded="false"] .ConfigSwitchers-toggleClose {
39
+ display: none;
40
+ }
41
+
42
+ .ConfigSwitchers-toggle[aria-expanded="true"] .ConfigSwitchers-toggleOpen {
43
+ display: none;
44
+ }
45
+
46
+ .ConfigSwitchers-container {
47
+ padding: var(--bar-size);
48
+ padding-inline-start: calc(2 * var(--bar-size));
49
+ flex: 1;
50
+ position: absolute;
51
+ z-index: 2;
52
+ inset-block: 0 calc(var(--bar-size) + 0.0625rem);
53
+ inset-inline: 0;
54
+ background: var(--bar-background);
55
+ }
56
+
57
+ .ConfigSwitchers-container > * + * {
58
+ margin-block-start: var(--menu-spacing);
59
+ }
60
+
61
+ .ConfigSwitchers-toggle[aria-expanded="false"] ~ .ConfigSwitchers-container {
62
+ display: none;
63
+ }
64
+
65
+ .ConfigSwitchers-toggle[aria-expanded="true"] ~ .ConfigSwitchers-container {
66
+ display: block;
67
+ }
@@ -0,0 +1,24 @@
1
+ .GoTo {
2
+ box-shadow: 0 0 1rem rgb(0 0 0 / 50%);
3
+ position: fixed;
4
+ inset-block-start: 50%;
5
+ inset-inline-start: 50%;
6
+ transform: translate(-50%, -50%);
7
+ background: var(--color-Menu-background);
8
+ padding: 0.25em 0.5em 0.5em;
9
+ inline-size: calc(100% - 1rem);
10
+ max-inline-size: 20em;
11
+ }
12
+
13
+ .GoTo-label {
14
+ display: block;
15
+ }
16
+
17
+ .GoTo-input {
18
+ outline: var(--divider);
19
+ box-shadow: 0.1em 0.1em 0.3em rgb(0 0 0 / 20%) inset;
20
+ background: var(--color-Menu-background);
21
+ padding: 0.35em 0.5em;
22
+ margin-block-start: 0.25em;
23
+ inline-size: 100%;
24
+ }
@@ -0,0 +1,113 @@
1
+ /** @define Nav; */
2
+
3
+ .Nav-entry {
4
+ position: relative;
5
+ }
6
+
7
+ .Nav-entry:not(.Nav-entry--lvl0)::before {
8
+ content: "";
9
+ display: block;
10
+ inline-size: var(--bar-size);
11
+ position: absolute;
12
+ inset-block: 0;
13
+ inset-inline-start: 0;
14
+ background: var(--color-MenuBar-background);
15
+ }
16
+
17
+ .Nav-entry--directory {
18
+ border-block-start: var(--divider);
19
+ }
20
+
21
+ .Nav-entry--lvl0:last-child {
22
+ border-block-end: var(--divider);
23
+ }
24
+
25
+ .Nav-wrapper {
26
+ position: relative;
27
+ }
28
+
29
+ .Nav-toggle {
30
+ display: block;
31
+ position: absolute;
32
+ z-index: 1;
33
+ inset-block: 0;
34
+ inset-inline-end: 0;
35
+ inline-size: var(--bar-size);
36
+ }
37
+
38
+ .Nav-toggle::after {
39
+ border: var(--toggle-border);
40
+ border-block-start-width: var(--toggle-borderWidth);
41
+ border-inline-end-width: var(--toggle-borderWidth);
42
+ content: "";
43
+ display: block;
44
+ font-size: var(--toggle-fontSize);
45
+ block-size: var(--toggle-height);
46
+ position: absolute;
47
+ inset-block-start: 50%;
48
+ inset-inline-start: 50%;
49
+ transition: var(--toggle-transition);
50
+ inline-size: var(--toggle-width);
51
+ }
52
+
53
+ .Nav-toggle[aria-expanded="false"]::after {
54
+ transform: var(--toggle-transition-closed);
55
+ }
56
+
57
+ .Nav-toggle[aria-expanded="true"]::after {
58
+ transform: var(--toggle-transition-opened);
59
+ border-color: var(--color-Text);
60
+ }
61
+
62
+ .Nav-item,
63
+ .Nav-variant {
64
+ display: block;
65
+ padding-block: var(--menu-spacing);
66
+ padding-inline-start: calc(var(--level, 1) * 1em + var(--menu-spacing));
67
+ margin-inline-start: var(--bar-size);
68
+ }
69
+
70
+ :where(.Nav-item, .Nav-variant):not(:has(mark)),
71
+ :where(.Nav-item, .Nav-variant) mark {
72
+ text-transform: capitalize;
73
+ }
74
+
75
+ :where(.Nav-item, .Nav-variant)[aria-current="page"] {
76
+ background: var(--color-Link-active-background);
77
+ color: var(--color-Link-active, var(--color-Link));
78
+ }
79
+
80
+ .is-no-match:not(:has(.is-match)) {
81
+ display: none;
82
+ }
83
+
84
+ .Nav-entry--directory.has-match > .Nav-toggle,
85
+ .Nav-entry--directory.is-match * {
86
+ opacity: 1 !important;
87
+ }
88
+
89
+ .Nav-item--directory {
90
+ color: var(--color-Link);
91
+ cursor: default;
92
+ opacity: 0.75;
93
+ }
94
+
95
+ .Nav-item--link {
96
+ font-weight: 600;
97
+ }
98
+
99
+ .Nav-item--link,
100
+ .Nav-variant {
101
+ color: var(--color-Link);
102
+ text-decoration: none;
103
+ }
104
+
105
+ .Nav-item--link:where(:hover, :focus),
106
+ .Nav-variant:where(:hover, :focus) {
107
+ text-decoration: underline;
108
+ }
109
+
110
+ .Nav-toggle:focus-visible,
111
+ .Nav-item:focus-visible {
112
+ outline-offset: calc(-1 * var(--outline-offset));
113
+ }
@@ -0,0 +1,64 @@
1
+ /** @define Search; */
2
+
3
+ .Search {
4
+ border-block: var(--divider);
5
+ display: flex;
6
+ margin-block-end: var(--spacing-x);
7
+ position: relative;
8
+ }
9
+
10
+ .Search-label {
11
+ --size: var(--bar-size);
12
+
13
+ align-items: center;
14
+ display: flex;
15
+ flex-shrink: 0;
16
+ block-size: var(--size);
17
+ justify-content: center;
18
+ inline-size: var(--size);
19
+ }
20
+
21
+ .Search-clear:not([hidden]) {
22
+ --size: var(--bar-size);
23
+
24
+ align-items: center;
25
+ display: flex;
26
+ justify-content: center;
27
+ inline-size: var(--size);
28
+ block-size: var(--size);
29
+ border-radius: 50%;
30
+ position: absolute;
31
+ inset-inline-end: 0;
32
+ inset-block-start: 0;
33
+ }
34
+
35
+ .Search-icon {
36
+ color: var(--color-Icon);
37
+ display: block;
38
+ inline-size: 50%;
39
+ block-size: 50%;
40
+ }
41
+
42
+ .Search-icon path {
43
+ fill: currentcolor;
44
+ }
45
+
46
+ .Search-icon circle {
47
+ fill: none;
48
+ stroke: currentcolor;
49
+ }
50
+
51
+ .Search-input {
52
+ padding: 0.35em var(--menu-spacing);
53
+ padding-inline-end: 2.5em;
54
+ inline-size: calc(100% - var(--bar-size));
55
+ }
56
+
57
+ .Search-input:focus {
58
+ outline: none;
59
+ background: var(--color-Link-active-background);
60
+ }
61
+
62
+ .Search-clear:focus-visible {
63
+ outline-offset: calc(-1 * var(--outline-offset));
64
+ }