@luz-ds/docs 0.0.0-stage → 0.1.0

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.
package/dist/docs.css ADDED
@@ -0,0 +1,613 @@
1
+ @layer luz.tokens, luz.themes, luz.settings, luz.generic, luz.elements, luz.objects, luz.components, luz.utilities, luz.site, luz.landing, luz.cms, luz.app, luz.docs, luz.print;
2
+ @layer luz.docs {
3
+ /* ==========================================================================
4
+ LUZ DOCS
5
+ The pieces of a documentation page: the shell (sidebar, content, rail),
6
+ the page head, the rail ("On this page" and the page's actions), the
7
+ example frame, do and don't, Previous / Next and the page foot. Each is a
8
+ class on a native element, on core's objects and components (.o-shell,
9
+ .o-main, .luz-sidebar, .luz-code-block). Docs adds only its layout, its
10
+ skin and its rhythm. No JavaScript.
11
+ Requires: @luz-ds/tokens and @luz-ds/core loaded first; @luz-ds/site
12
+ optional, loaded before this file.
13
+ ========================================================================== */
14
+
15
+ /* ==========================================================================
16
+ LUZ DOCS: shell.
17
+ body.o-shell.luz-docs-shell > header, nav.luz-sidebar.luz-docs-nav,
18
+ aside.luz-docs-rail, main.o-main.luz-docs-main, footer. "On this page"
19
+ comes before the content, in the markup and on screen: three columns
20
+ from 80rem (the sidebar, the content, the rail, which stretches over the
21
+ content's row), two from 60rem (the rail above the content, in its
22
+ column), one below, in the order of the markup: nothing is lost when the
23
+ third column goes (WCAG 1.4.10). The skip link goes to main, past the
24
+ sidebar and the rail. The header and the footer span the shell. The
25
+ content's children keep to the measure, --luz-docs-measure.
26
+ Core gives the grid, the sidebar and its drawer (a popover nav at 768px
27
+ and below); docs gives the tracks and the measure.
28
+ ========================================================================== */
29
+
30
+ .luz-docs-shell {
31
+ --luz-docs-measure: 46rem;
32
+ --luz-docs-nav-w: 16.5rem;
33
+ --luz-docs-rail-w: 14rem;
34
+ --luz-docs-rail-top: var(--luz-space-lg);
35
+
36
+ /* The content takes the free height: on a short page the header keeps
37
+ its own height (core's shell is at least the height of the window) */
38
+ grid-template:
39
+ "head" auto
40
+ "nav" auto
41
+ "rail" auto
42
+ "main" 1fr
43
+ "foot" auto / minmax(0, 1fr);
44
+ }
45
+
46
+ .luz-docs-shell > :where(header) {
47
+ grid-area: head;
48
+ }
49
+
50
+ .luz-docs-nav {
51
+ grid-area: nav;
52
+ }
53
+
54
+ .luz-docs-main {
55
+ grid-area: main;
56
+ display: grid;
57
+ grid-template-columns: minmax(0, 1fr);
58
+ align-content: start;
59
+ gap: var(--luz-space-md);
60
+ min-inline-size: 0;
61
+ /* The footer follows the content: room for one break, not two */
62
+ padding: var(--luz-space-lg) var(--luz-space-md) var(--luz-space-xl);
63
+ }
64
+
65
+ .luz-docs-rail {
66
+ grid-area: rail;
67
+ min-inline-size: 0;
68
+ }
69
+
70
+ .luz-docs-shell > :where(footer) {
71
+ grid-area: foot;
72
+ }
73
+
74
+ /* Every child of the content keeps to the measure: a line of running text,
75
+ an example and its code alike. A section starts with more room above its
76
+ heading than between its blocks. */
77
+ .luz-docs-main > * {
78
+ max-inline-size: var(--luz-docs-measure);
79
+ }
80
+
81
+ .luz-docs-main > :where(h2) {
82
+ margin-block-start: var(--luz-space-xl);
83
+ }
84
+
85
+ /* Between core's drawer (768px and below) and two columns, the sidebar is
86
+ the first block above the content, popover or not */
87
+ @media (769px <= width < 60rem) {
88
+ .luz-docs-nav {
89
+ position: static;
90
+ block-size: auto;
91
+ inline-size: auto;
92
+ min-inline-size: 0;
93
+ }
94
+ }
95
+
96
+ @media (min-width: 60rem) {
97
+ .luz-docs-shell {
98
+ grid-template:
99
+ "head head" auto
100
+ "nav rail" auto
101
+ "nav main" 1fr
102
+ "nav foot" auto / var(--luz-docs-nav-w) minmax(0, 1fr);
103
+ }
104
+
105
+ .luz-docs-nav {
106
+ inline-size: auto;
107
+ min-inline-size: 0;
108
+ }
109
+
110
+ .luz-docs-main {
111
+ padding-inline: var(--luz-space-xl);
112
+ }
113
+ }
114
+
115
+ @media (min-width: 80rem) {
116
+ .luz-docs-shell {
117
+ grid-template:
118
+ "head head head" auto
119
+ "nav main rail" 1fr
120
+ "nav foot foot" auto / var(--luz-docs-nav-w) minmax(0, 1fr) var(--luz-docs-rail-w);
121
+ }
122
+
123
+ .luz-docs-main {
124
+ padding-block-end: var(--luz-space-3xl);
125
+ }
126
+ }
127
+
128
+ @media print {
129
+ .luz-docs-shell {
130
+ display: block;
131
+ }
132
+
133
+ .luz-docs-rail {
134
+ display: none;
135
+ }
136
+ }
137
+
138
+ /* ==========================================================================
139
+ LUZ DOCS: page head.
140
+ header.luz-docs-page-head > p.__eyebrow (the area · the group), h1,
141
+ p.__lead (one sentence), ul.__meta (chips: the files, the script or "No
142
+ JavaScript", the modes, whether it is tested, its known issues). A chip
143
+ is a word in a rounded outline; a link in one is a 28px target. A page
144
+ that is not a component says its files in p.__files instead, one quiet
145
+ line ("Files: <code>…</code>"), without the chips.
146
+ ========================================================================== */
147
+
148
+ .luz-docs-page-head {
149
+ display: grid;
150
+ grid-template-columns: minmax(0, 1fr);
151
+ gap: var(--luz-space-sm);
152
+ }
153
+
154
+ .luz-docs-page-head > :where(h1) {
155
+ margin: 0;
156
+ font-size: var(--luz-text-4xl);
157
+ line-height: 1.1;
158
+ text-wrap: balance;
159
+ }
160
+
161
+ .luz-docs-page-head__eyebrow {
162
+ margin: 0;
163
+ font-family: var(--luz-font-sans);
164
+ font-size: var(--luz-text-xs);
165
+ font-weight: 500;
166
+ letter-spacing: 0.1em;
167
+ text-transform: uppercase;
168
+ color: var(--luz-text-secondary);
169
+ }
170
+
171
+ /* A package name in it keeps its own case: @luz-ds/core */
172
+ .luz-docs-page-head__eyebrow :where(code) {
173
+ letter-spacing: 0;
174
+ text-transform: none;
175
+ }
176
+
177
+ /* Spacing between letters breaks the joins of Arabic script */
178
+ .luz-docs-page-head__eyebrow:lang(ar) {
179
+ letter-spacing: 0;
180
+ }
181
+
182
+ .luz-docs-page-head__lead {
183
+ margin: 0;
184
+ font-size: var(--luz-text-lg);
185
+ color: var(--luz-text-secondary);
186
+ }
187
+
188
+ .luz-docs-page-head__meta {
189
+ display: flex;
190
+ flex-wrap: wrap;
191
+ gap: var(--luz-space-xs);
192
+ margin: 0;
193
+ padding: 0;
194
+ list-style: none;
195
+ font-family: var(--luz-font-sans);
196
+ font-size: var(--luz-text-xs);
197
+ color: var(--luz-text-secondary);
198
+ }
199
+
200
+ .luz-docs-page-head__meta > :where(li) {
201
+ display: inline-flex;
202
+ align-items: center;
203
+ min-block-size: var(--luz-control-sm);
204
+ padding-inline: var(--luz-space-sm);
205
+ border: 1px solid var(--luz-divider);
206
+ border-radius: var(--luz-radius-full);
207
+ overflow-wrap: anywhere;
208
+ }
209
+
210
+ .luz-docs-page-head__meta :where(a) {
211
+ display: inline-flex;
212
+ align-items: center;
213
+ min-block-size: var(--luz-control-sm);
214
+ }
215
+
216
+ .luz-docs-page-head__files {
217
+ margin: 0;
218
+ font-family: var(--luz-font-sans);
219
+ font-size: var(--luz-text-xs);
220
+ color: var(--luz-text-secondary);
221
+ overflow-wrap: anywhere;
222
+ }
223
+
224
+ @media (max-width: 640px) {
225
+ .luz-docs-page-head > :where(h1) {
226
+ font-size: var(--luz-text-2xl);
227
+ }
228
+
229
+ .luz-docs-page-head__lead {
230
+ font-size: var(--luz-text-base);
231
+ }
232
+ }
233
+
234
+ /* ==========================================================================
235
+ LUZ DOCS: rail.
236
+ aside.luz-docs-rail > div.luz-docs-rail__inner > nav.luz-docs-rail__onpage
237
+ ("On this page": a details.__fold, its summary.__title, ul.__list of
238
+ a.__link, an h3 in a nested ul.__sub) + .luz-docs-rail__actions (Copy
239
+ page, Edit, Report). In the shell's third column from 80rem the aside
240
+ stretches over its grid area and its inner box stays in view while the
241
+ page scrolls (native sticky) inside it, so it never covers the footer
242
+ under it (WCAG 2.4.11); the inner box scrolls on its own when it is
243
+ taller than the window, with room at its start for a focus ring. Below
244
+ 80rem the rail is drawn above the content (it comes before main in the
245
+ markup), in its column, and does not stick; a script may fold the list
246
+ there (its details is written open, so without one it reads in full). A link of the list also carries core's .luz-sidebar__link,
247
+ so core's scroll spy marks the section in view (aria-current="true"):
248
+ the mark is the weight and a start border, never the colour alone.
249
+ ========================================================================== */
250
+
251
+ /* Above the content (below 80rem): the content's own top padding is the gap */
252
+ .luz-docs-rail {
253
+ padding: var(--luz-space-lg) var(--luz-space-md) 0;
254
+ font-family: var(--luz-font-sans);
255
+ font-size: var(--luz-text-sm);
256
+ }
257
+
258
+ /* Above the content (below 80rem) it keeps the content's gutters */
259
+ @media (min-width: 60rem) {
260
+ .luz-docs-rail {
261
+ padding-inline: var(--luz-space-xl);
262
+ }
263
+ }
264
+
265
+ @media (min-width: 80rem) {
266
+ .luz-docs-rail {
267
+ padding-block: var(--luz-space-lg);
268
+ padding-inline: 0 var(--luz-space-md);
269
+ }
270
+
271
+ .luz-docs-rail__inner {
272
+ position: sticky;
273
+ inset-block-start: var(--luz-docs-rail-top, 0);
274
+ max-block-size: calc(100dvh - var(--luz-docs-rail-top, 0rem));
275
+ overflow-y: auto;
276
+ /* The box clips: a focus ring (2px, 2px away) keeps its start edge */
277
+ padding-inline-start: var(--luz-space-xs);
278
+ }
279
+ }
280
+
281
+ .luz-docs-rail__title {
282
+ min-block-size: var(--luz-control-sm);
283
+ font-weight: 600;
284
+ color: var(--luz-text-primary);
285
+ }
286
+
287
+ /* In the rail, "On this page" is a list under its title, not core's box */
288
+ .luz-docs-rail .luz-docs-rail__onpage .luz-docs-rail__fold {
289
+ margin: 0;
290
+ padding: 0;
291
+ border: 0;
292
+ border-radius: 0;
293
+ background: none;
294
+ }
295
+
296
+ .luz-docs-rail .luz-docs-rail__onpage .luz-docs-rail__title {
297
+ margin: 0 0 var(--luz-space-xs);
298
+ padding-inline: 0;
299
+ }
300
+
301
+ .luz-docs-rail__list,
302
+ .luz-docs-rail__sub {
303
+ margin: 0;
304
+ padding: 0;
305
+ list-style: none;
306
+ }
307
+
308
+ .luz-docs-rail__list {
309
+ border-inline-start: 1px solid var(--luz-divider);
310
+ }
311
+
312
+ /* Core's sidebar link is drawn for the sidebar's own surface: here it is
313
+ text on the page */
314
+ .luz-docs-rail__link {
315
+ display: flex;
316
+ align-items: center;
317
+ min-block-size: var(--luz-control-sm);
318
+ margin-inline-start: -1px;
319
+ padding: var(--luz-space-2xs) var(--luz-space-sm);
320
+ border-inline-start: 2px solid transparent;
321
+ background: none;
322
+ color: var(--luz-text-secondary);
323
+ font-size: inherit;
324
+ font-weight: 400;
325
+ text-decoration: none;
326
+ /* A heading's long word ("accessibility" at 400 % text, 320 px) breaks
327
+ inside the column instead of widening the page (WCAG 1.4.10) */
328
+ overflow-wrap: anywhere;
329
+ }
330
+
331
+ .luz-docs-rail__sub .luz-docs-rail__link {
332
+ padding-inline-start: var(--luz-space-lg);
333
+ }
334
+
335
+ .luz-docs-rail__link:hover {
336
+ background: var(--luz-surface-muted);
337
+ color: var(--luz-text-primary);
338
+ }
339
+
340
+ .luz-docs-rail__link[aria-current="true"] {
341
+ border-inline-start-color: var(--luz-brand-primary);
342
+ background: none;
343
+ color: var(--luz-text-primary);
344
+ font-weight: 600;
345
+ }
346
+
347
+ .luz-docs-rail__actions {
348
+ display: grid;
349
+ justify-items: start;
350
+ }
351
+
352
+ /* A rule between the list and the actions; without a list, none */
353
+ .luz-docs-rail__onpage + .luz-docs-rail__actions {
354
+ margin-block-start: var(--luz-space-lg);
355
+ padding-block-start: var(--luz-space-md);
356
+ border-block-start: 1px solid var(--luz-divider);
357
+ }
358
+
359
+ .luz-docs-rail__actions > :where(a, button) {
360
+ display: inline-flex;
361
+ align-items: center;
362
+ min-block-size: var(--luz-control-sm);
363
+ overflow-wrap: anywhere;
364
+ }
365
+
366
+ /* An action a script turns into a button (copy, not go) reads as one of
367
+ the list: the same text, colour and underline as its links */
368
+ .luz-docs-rail__actions > :where(button) {
369
+ padding: 0;
370
+ border: 0;
371
+ background: none;
372
+ color: var(--luz-brand-primary);
373
+ font: inherit;
374
+ text-align: start;
375
+ text-decoration: underline;
376
+ text-underline-offset: 0.18em;
377
+ cursor: pointer;
378
+ }
379
+
380
+ /* Forced colours drop the transparent start border to the text colour: the
381
+ current section is the only one with a border of its own */
382
+ @media (forced-colors: active) {
383
+ .luz-docs-rail__link {
384
+ border-inline-start-color: Canvas;
385
+ }
386
+
387
+ .luz-docs-rail__link[aria-current="true"] {
388
+ border-inline-start-color: Highlight;
389
+ }
390
+ }
391
+
392
+ /* ==========================================================================
393
+ LUZ DOCS: example.
394
+ figure.luz-docs-example > div.__preview (the live markup, in a
395
+ div.__frame) + an optional div.__code (core's pre.luz-code-block). One
396
+ frame for both: the code sits under the preview, across its width, and a
397
+ long line scrolls inside its own box. The frame is as wide as the
398
+ preview, or as --luz-docs-example-w says (a width selector sets it:
399
+ 20rem is a phone), never wider; it is a size container, so what is in it
400
+ answers to the frame.
401
+ ========================================================================== */
402
+
403
+ .luz-docs-example {
404
+ display: grid;
405
+ grid-template-columns: minmax(0, 1fr);
406
+ margin: 0;
407
+ padding: 0;
408
+ border: 1px solid var(--luz-divider);
409
+ border-radius: var(--luz-radius-md);
410
+ background: var(--luz-surface);
411
+ }
412
+
413
+ .luz-docs-example__preview {
414
+ padding: var(--luz-space-md);
415
+ }
416
+
417
+ .luz-docs-example__frame {
418
+ inline-size: min(100%, var(--luz-docs-example-w, 100%));
419
+ margin-inline: auto;
420
+ container-type: inline-size;
421
+ }
422
+
423
+ .luz-docs-example__code {
424
+ min-inline-size: 0;
425
+ border-block-start: 1px solid var(--luz-divider);
426
+ }
427
+
428
+ /* The frame draws the edge: the code block keeps only its inner corners */
429
+ .luz-docs-example__code > :where(pre) {
430
+ margin: 0;
431
+ border: 0;
432
+ border-radius: 0 0 calc(var(--luz-radius-md) - 1px) calc(var(--luz-radius-md) - 1px);
433
+ }
434
+
435
+ /* ==========================================================================
436
+ LUZ DOCS: do and don't.
437
+ div.luz-docs-dodont > figure.__item.__item--do, then --dont, each a
438
+ figcaption > strong.__verdict ("Do", "Don't") and its reason, then a
439
+ div.__stage (the example, inert and aria-hidden: the caption says what it
440
+ shows) or a code block. Side by side when there is room, stacked below.
441
+ The verdict is a word; the mark before it (a tick, a cross) and the
442
+ frame (solid, dashed) are extra cues, never the only one, and so is the
443
+ colour (green, red).
444
+ ========================================================================== */
445
+
446
+ .luz-docs-dodont {
447
+ display: grid;
448
+ grid-template-columns: repeat(auto-fit, minmax(min(100%, 17.5rem), 1fr));
449
+ gap: var(--luz-space-md);
450
+ }
451
+
452
+ .luz-docs-dodont__item {
453
+ display: grid;
454
+ grid-template-rows: auto 1fr;
455
+ gap: var(--luz-space-sm);
456
+ min-inline-size: 0;
457
+ margin: 0;
458
+ padding: var(--luz-space-sm);
459
+ border: 2px solid var(--luz-divider);
460
+ border-radius: var(--luz-radius-md);
461
+ background: var(--luz-surface);
462
+ color: var(--luz-text-primary);
463
+ }
464
+
465
+ .luz-docs-dodont__item--do {
466
+ border-color: var(--luz-color-success);
467
+ }
468
+
469
+ .luz-docs-dodont__item--dont {
470
+ border-style: dashed;
471
+ border-color: var(--luz-color-danger);
472
+ }
473
+
474
+ .luz-docs-dodont__item > :where(figcaption) {
475
+ font-style: normal;
476
+ }
477
+
478
+ .luz-docs-dodont__verdict {
479
+ display: block;
480
+ color: var(--luz-color-success);
481
+ font-family: var(--luz-font-sans);
482
+ }
483
+
484
+ .luz-docs-dodont__item--dont .luz-docs-dodont__verdict {
485
+ color: var(--luz-color-danger);
486
+ }
487
+
488
+ /* The mark is decoration: the word says it. A browser without alternative
489
+ text for content reads the first value */
490
+ .luz-docs-dodont__verdict::before {
491
+ content: "\2713 ";
492
+ content: "\2713 " / "";
493
+ }
494
+
495
+ .luz-docs-dodont__item--dont .luz-docs-dodont__verdict::before {
496
+ content: "\2715 ";
497
+ content: "\2715 " / "";
498
+ }
499
+
500
+ .luz-docs-dodont__stage {
501
+ display: grid;
502
+ gap: var(--luz-space-sm);
503
+ align-content: center;
504
+ min-inline-size: 0;
505
+ padding: var(--luz-space-md);
506
+ border: 1px solid var(--luz-divider);
507
+ border-radius: var(--luz-radius-sm);
508
+ background: var(--luz-surface-page);
509
+ color: var(--luz-text-primary);
510
+ overflow-wrap: anywhere;
511
+ }
512
+
513
+ .luz-docs-dodont__stage > :where(*) {
514
+ margin-block: 0;
515
+ }
516
+
517
+ /* ==========================================================================
518
+ LUZ DOCS: pager.
519
+ nav[aria-label] > ul.luz-docs-pager > li.__prev / li.__next >
520
+ a.__link[rel] > span.__label ("Previous", "Next") + span.__title (the
521
+ page). Two link blocks side by side, Next at the end, the whole block the
522
+ link; stacked at 640px and below. Name each link from its visible text
523
+ first ("Previous: Badge").
524
+ ========================================================================== */
525
+
526
+ .luz-docs-pager {
527
+ display: grid;
528
+ grid-template-columns: repeat(2, minmax(0, 1fr));
529
+ gap: var(--luz-space-md);
530
+ margin: 0;
531
+ padding: 0;
532
+ list-style: none;
533
+ }
534
+
535
+ .luz-docs-pager__prev {
536
+ grid-column: 1;
537
+ }
538
+
539
+ .luz-docs-pager__next {
540
+ grid-column: 2;
541
+ text-align: end;
542
+ }
543
+
544
+ .luz-docs-pager__link {
545
+ display: grid;
546
+ grid-template-columns: minmax(0, 1fr);
547
+ gap: var(--luz-space-3xs);
548
+ block-size: 100%;
549
+ padding: var(--luz-space-sm) var(--luz-space-md);
550
+ border: 1px solid var(--luz-divider);
551
+ border-radius: var(--luz-radius-md);
552
+ text-decoration: none;
553
+ }
554
+
555
+ .luz-docs-pager__link:hover {
556
+ border-color: var(--luz-outline);
557
+ background: var(--luz-surface-hover);
558
+ }
559
+
560
+ .luz-docs-pager__link:hover .luz-docs-pager__title {
561
+ text-decoration: underline;
562
+ }
563
+
564
+ .luz-docs-pager__label {
565
+ font-size: var(--luz-text-sm);
566
+ color: var(--luz-text-secondary);
567
+ }
568
+
569
+ .luz-docs-pager__title {
570
+ font-size: var(--luz-text-lg);
571
+ font-weight: 600;
572
+ }
573
+
574
+ @media (max-width: 640px) {
575
+ .luz-docs-pager {
576
+ grid-template-columns: minmax(0, 1fr);
577
+ }
578
+
579
+ .luz-docs-pager__next {
580
+ grid-column: 1;
581
+ }
582
+ }
583
+
584
+ /* ==========================================================================
585
+ LUZ DOCS: page foot.
586
+ p.luz-docs-page-foot: "Last updated" and a <time>, then "Edit this page"
587
+ and "Report a problem", separated by a middle dot in the text. Small
588
+ print under the content, after the pager; it wraps on a narrow screen
589
+ and each link is a 28px target.
590
+ ========================================================================== */
591
+
592
+ .luz-docs-page-foot {
593
+ margin: 0;
594
+ padding-block-start: var(--luz-space-md);
595
+ border-block-start: 1px solid var(--luz-divider);
596
+ font-family: var(--luz-font-sans);
597
+ font-size: var(--luz-text-sm);
598
+ color: var(--luz-text-secondary);
599
+ }
600
+
601
+ .luz-docs-page-foot > :where(a) {
602
+ display: inline-flex;
603
+ align-items: center;
604
+ min-block-size: var(--luz-control-sm);
605
+ }
606
+
607
+ /* The date in the size of the line, not core's smaller <time> */
608
+ .luz-docs-page-foot > :where(time) {
609
+ font-size: inherit;
610
+ }
611
+
612
+
613
+ }
@@ -0,0 +1 @@
1
+ @layer luz.tokens,luz.themes,luz.settings,luz.generic,luz.elements,luz.objects,luz.components,luz.utilities,luz.site,luz.landing,luz.cms,luz.app,luz.docs,luz.print;@layer luz.docs{.luz-docs-shell{--luz-docs-measure: 46rem;--luz-docs-nav-w: 16.5rem;--luz-docs-rail-w: 14rem;--luz-docs-rail-top: var(--luz-space-lg);grid-template:"head" auto "nav" auto "rail" auto "main" 1fr "foot" auto / minmax(0,1fr)}.luz-docs-shell>:where(header){grid-area:head}.luz-docs-nav{grid-area:nav}.luz-docs-main{grid-area:main;display:grid;grid-template-columns:minmax(0,1fr);align-content:start;gap:var(--luz-space-md);min-inline-size:0;padding:var(--luz-space-lg) var(--luz-space-md) var(--luz-space-xl)}.luz-docs-rail{grid-area:rail;min-inline-size:0}.luz-docs-shell>:where(footer){grid-area:foot}.luz-docs-main>*{max-inline-size:var(--luz-docs-measure)}.luz-docs-main>:where(h2){margin-block-start:var(--luz-space-xl)}@media(769px<=width<60rem){.luz-docs-nav{position:static;block-size:auto;inline-size:auto;min-inline-size:0}}@media(min-width:60rem){.luz-docs-shell{grid-template:"head head" auto "nav rail" auto "nav main" 1fr "nav foot" auto / var(--luz-docs-nav-w) minmax(0,1fr)}.luz-docs-nav{inline-size:auto;min-inline-size:0}.luz-docs-main{padding-inline:var(--luz-space-xl)}}@media(min-width:80rem){.luz-docs-shell{grid-template:"head head head" auto "nav main rail" 1fr "nav foot foot" auto / var(--luz-docs-nav-w) minmax(0,1fr) var(--luz-docs-rail-w)}.luz-docs-main{padding-block-end:var(--luz-space-3xl)}}@media print{.luz-docs-shell{display:block}.luz-docs-rail{display:none}}.luz-docs-page-head{display:grid;grid-template-columns:minmax(0,1fr);gap:var(--luz-space-sm)}.luz-docs-page-head>:where(h1){margin:0;font-size:var(--luz-text-4xl);line-height:1.1;text-wrap:balance}.luz-docs-page-head__eyebrow{margin:0;font-family:var(--luz-font-sans);font-size:var(--luz-text-xs);font-weight:500;letter-spacing:.1em;text-transform:uppercase;color:var(--luz-text-secondary)}.luz-docs-page-head__eyebrow :where(code){letter-spacing:0;text-transform:none}.luz-docs-page-head__eyebrow:lang(ar){letter-spacing:0}.luz-docs-page-head__lead{margin:0;font-size:var(--luz-text-lg);color:var(--luz-text-secondary)}.luz-docs-page-head__meta{display:flex;flex-wrap:wrap;gap:var(--luz-space-xs);margin:0;padding:0;list-style:none;font-family:var(--luz-font-sans);font-size:var(--luz-text-xs);color:var(--luz-text-secondary)}.luz-docs-page-head__meta>:where(li){display:inline-flex;align-items:center;min-block-size:var(--luz-control-sm);padding-inline:var(--luz-space-sm);border:1px solid var(--luz-divider);border-radius:var(--luz-radius-full);overflow-wrap:anywhere}.luz-docs-page-head__meta :where(a){display:inline-flex;align-items:center;min-block-size:var(--luz-control-sm)}.luz-docs-page-head__files{margin:0;font-family:var(--luz-font-sans);font-size:var(--luz-text-xs);color:var(--luz-text-secondary);overflow-wrap:anywhere}@media(max-width:640px){.luz-docs-page-head>:where(h1){font-size:var(--luz-text-2xl)}.luz-docs-page-head__lead{font-size:var(--luz-text-base)}}.luz-docs-rail{padding:var(--luz-space-lg) var(--luz-space-md) 0;font-family:var(--luz-font-sans);font-size:var(--luz-text-sm)}@media(min-width:60rem){.luz-docs-rail{padding-inline:var(--luz-space-xl)}}@media(min-width:80rem){.luz-docs-rail{padding-block:var(--luz-space-lg);padding-inline:0 var(--luz-space-md)}.luz-docs-rail__inner{position:sticky;inset-block-start:var(--luz-docs-rail-top, 0);max-block-size:calc(100dvh - var(--luz-docs-rail-top, 0rem));overflow-y:auto;padding-inline-start:var(--luz-space-xs)}}.luz-docs-rail__title{min-block-size:var(--luz-control-sm);font-weight:600;color:var(--luz-text-primary)}.luz-docs-rail .luz-docs-rail__onpage .luz-docs-rail__fold{margin:0;padding:0;border:0;border-radius:0;background:none}.luz-docs-rail .luz-docs-rail__onpage .luz-docs-rail__title{margin:0 0 var(--luz-space-xs);padding-inline:0}.luz-docs-rail__list,.luz-docs-rail__sub{margin:0;padding:0;list-style:none}.luz-docs-rail__list{border-inline-start:1px solid var(--luz-divider)}.luz-docs-rail__link{display:flex;align-items:center;min-block-size:var(--luz-control-sm);margin-inline-start:-1px;padding:var(--luz-space-2xs) var(--luz-space-sm);border-inline-start:2px solid transparent;background:none;color:var(--luz-text-secondary);font-size:inherit;font-weight:400;text-decoration:none;overflow-wrap:anywhere}.luz-docs-rail__sub .luz-docs-rail__link{padding-inline-start:var(--luz-space-lg)}.luz-docs-rail__link:hover{background:var(--luz-surface-muted);color:var(--luz-text-primary)}.luz-docs-rail__link[aria-current=true]{border-inline-start-color:var(--luz-brand-primary);background:none;color:var(--luz-text-primary);font-weight:600}.luz-docs-rail__actions{display:grid;justify-items:start}.luz-docs-rail__onpage+.luz-docs-rail__actions{margin-block-start:var(--luz-space-lg);padding-block-start:var(--luz-space-md);border-block-start:1px solid var(--luz-divider)}.luz-docs-rail__actions>:where(a,button){display:inline-flex;align-items:center;min-block-size:var(--luz-control-sm);overflow-wrap:anywhere}.luz-docs-rail__actions>:where(button){padding:0;border:0;background:none;color:var(--luz-brand-primary);font:inherit;text-align:start;text-decoration:underline;text-underline-offset:.18em;cursor:pointer}@media(forced-colors:active){.luz-docs-rail__link{border-inline-start-color:Canvas}.luz-docs-rail__link[aria-current=true]{border-inline-start-color:Highlight}}.luz-docs-example{display:grid;grid-template-columns:minmax(0,1fr);margin:0;padding:0;border:1px solid var(--luz-divider);border-radius:var(--luz-radius-md);background:var(--luz-surface)}.luz-docs-example__preview{padding:var(--luz-space-md)}.luz-docs-example__frame{inline-size:min(100%,var(--luz-docs-example-w, 100%));margin-inline:auto;container-type:inline-size}.luz-docs-example__code{min-inline-size:0;border-block-start:1px solid var(--luz-divider)}.luz-docs-example__code>:where(pre){margin:0;border:0;border-radius:0 0 calc(var(--luz-radius-md) - 1px) calc(var(--luz-radius-md) - 1px)}.luz-docs-dodont{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,17.5rem),1fr));gap:var(--luz-space-md)}.luz-docs-dodont__item{display:grid;grid-template-rows:auto 1fr;gap:var(--luz-space-sm);min-inline-size:0;margin:0;padding:var(--luz-space-sm);border:2px solid var(--luz-divider);border-radius:var(--luz-radius-md);background:var(--luz-surface);color:var(--luz-text-primary)}.luz-docs-dodont__item--do{border-color:var(--luz-color-success)}.luz-docs-dodont__item--dont{border-style:dashed;border-color:var(--luz-color-danger)}.luz-docs-dodont__item>:where(figcaption){font-style:normal}.luz-docs-dodont__verdict{display:block;color:var(--luz-color-success);font-family:var(--luz-font-sans)}.luz-docs-dodont__item--dont .luz-docs-dodont__verdict{color:var(--luz-color-danger)}.luz-docs-dodont__verdict:before{content:"\2713 ";content:"\2713 " / ""}.luz-docs-dodont__item--dont .luz-docs-dodont__verdict:before{content:"\2715 ";content:"\2715 " / ""}.luz-docs-dodont__stage{display:grid;gap:var(--luz-space-sm);align-content:center;min-inline-size:0;padding:var(--luz-space-md);border:1px solid var(--luz-divider);border-radius:var(--luz-radius-sm);background:var(--luz-surface-page);color:var(--luz-text-primary);overflow-wrap:anywhere}.luz-docs-dodont__stage>:where(*){margin-block:0}.luz-docs-pager{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--luz-space-md);margin:0;padding:0;list-style:none}.luz-docs-pager__prev{grid-column:1}.luz-docs-pager__next{grid-column:2;text-align:end}.luz-docs-pager__link{display:grid;grid-template-columns:minmax(0,1fr);gap:var(--luz-space-3xs);block-size:100%;padding:var(--luz-space-sm) var(--luz-space-md);border:1px solid var(--luz-divider);border-radius:var(--luz-radius-md);text-decoration:none}.luz-docs-pager__link:hover{border-color:var(--luz-outline);background:var(--luz-surface-hover)}.luz-docs-pager__link:hover .luz-docs-pager__title{text-decoration:underline}.luz-docs-pager__label{font-size:var(--luz-text-sm);color:var(--luz-text-secondary)}.luz-docs-pager__title{font-size:var(--luz-text-lg);font-weight:600}@media(max-width:640px){.luz-docs-pager{grid-template-columns:minmax(0,1fr)}.luz-docs-pager__next{grid-column:1}}.luz-docs-page-foot{margin:0;padding-block-start:var(--luz-space-md);border-block-start:1px solid var(--luz-divider);font-family:var(--luz-font-sans);font-size:var(--luz-text-sm);color:var(--luz-text-secondary)}.luz-docs-page-foot>:where(a){display:inline-flex;align-items:center;min-block-size:var(--luz-control-sm)}.luz-docs-page-foot>:where(time){font-size:inherit}}
package/package.json CHANGED
@@ -1,6 +1,56 @@
1
1
  {
2
2
  "name": "@luz-ds/docs",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
3
+ "version": "0.1.0",
4
+ "description": "LUZ Design System — the pieces of a documentation page (the shell, the page head, the rail, the example frame, do and don't, the pager and the page foot), built on @luz-ds/core",
5
+ "license": "MIT",
6
+ "type": "module",
7
+ "exports": {
8
+ "./css": "./dist/docs.css",
9
+ "./css/min": "./dist/docs.min.css",
10
+ "./components/*": "./dist/components/*",
11
+ "./classes.json": "./dist/classes.json",
12
+ "./package.json": "./package.json"
13
+ },
14
+ "files": [
15
+ "dist",
16
+ "LICENSE"
17
+ ],
18
+ "repository": {
19
+ "type": "git",
20
+ "url": "https://github.com/nandovejer/luz.git",
21
+ "directory": "packages/docs"
22
+ },
23
+ "homepage": "https://github.com/nandovejer/luz#readme",
24
+ "bugs": {
25
+ "url": "https://github.com/nandovejer/luz/issues"
26
+ },
27
+ "keywords": [
28
+ "design-system",
29
+ "css",
30
+ "documentation",
31
+ "docs",
32
+ "patterns",
33
+ "vanilla"
34
+ ],
35
+ "sideEffects": [
36
+ "*.css"
37
+ ],
38
+ "publishConfig": {
39
+ "access": "public"
40
+ },
41
+ "peerDependencies": {
42
+ "@luz-ds/core": "^0.1.0",
43
+ "@luz-ds/site": "^0.1.0",
44
+ "@luz-ds/tokens": "^0.1.0"
45
+ },
46
+ "peerDependenciesMeta": {
47
+ "@luz-ds/site": {
48
+ "optional": true
49
+ }
50
+ },
51
+ "devDependencies": {
52
+ "@luz-ds/core": "0.1.0",
53
+ "@luz-ds/site": "0.1.0",
54
+ "@luz-ds/tokens": "0.1.0"
55
+ }
6
56
  }