@24vlh/vds 0.1.0 → 0.1.1

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.
@@ -1,170 +1 @@
1
- /************************************************************
2
- * VLAH DESIGN SYSTEM (VDS) - Accordion Component
3
- *
4
- * Responsibilities:
5
- * - Implement a native <details>/<summary>-driven accordion pattern
6
- * - Provide consistent header, title, icon, and body regions
7
- * - Support semantic variants (info/success/warning/danger) and density modes
8
- * - Style open/closed states with clear, theme-aware borders and icons
9
- *
10
- * System Notes:
11
- * - Pure CSS: built on <details> and <summary>, no JavaScript required
12
- * - Theme-driven: colours, spacing, and radii all come from VDS tokens
13
- * - Chevron rotation handled via stateful transforms on [open]
14
- * - Density classes (.density-a / .density-c) adjust padding without changing structure
15
- ************************************************************/
16
-
17
- /* ---------------------------------------------------------
18
- 1. ACCORDION WRAPPER
19
- --------------------------------------------------------- */
20
-
21
- .accordion {
22
- display: flex;
23
- flex-direction: column;
24
- gap: var(--space-3);
25
- }
26
-
27
- /* ---------------------------------------------------------
28
- 2. ACCORDION ITEM (<details>)
29
- --------------------------------------------------------- */
30
-
31
- .accordion-item {
32
- border: var(--border-width) solid var(--color-border-subtle);
33
- border-radius: var(--radius-md);
34
- background: var(--color-surface);
35
- overflow: hidden;
36
- padding: 0;
37
- }
38
-
39
- .accordion-item > summary {
40
- list-style: none;
41
- }
42
-
43
- /* ---------------------------------------------------------
44
- 3. ACCORDION HEADER (<summary>)
45
- --------------------------------------------------------- */
46
-
47
- .accordion-header {
48
- display: flex;
49
- align-items: center;
50
- justify-content: space-between;
51
- width: 100%;
52
-
53
- padding: var(--space-3) var(--space-4);
54
- cursor: pointer;
55
- -webkit-user-select: none;
56
- -moz-user-select: none;
57
- user-select: none;
58
-
59
- font-weight: var(--font-weight-medium);
60
- color: var(--color-text);
61
- }
62
-
63
- .accordion-header:hover {
64
- background: var(--color-surface-hover);
65
- }
66
-
67
- .accordion-header:focus-visible {
68
- outline: var(--focus-ring-width) solid var(--focus-ring-color);
69
- outline-offset: var(--focus-ring-offset);
70
- }
71
-
72
- /* ---------------------------------------------------------
73
- 3A. ACCORDION TITLE
74
- --------------------------------------------------------- */
75
-
76
- .accordion-title {
77
- flex: 1;
78
- display: inline-flex;
79
- align-items: center;
80
-
81
- font-size: var(--text-md);
82
- font-weight: var(--font-weight-medium);
83
- line-height: var(--line-height-normal);
84
- color: var(--color-text);
85
-
86
- min-width: 0;
87
- }
88
-
89
- .accordion-title--truncate {
90
- white-space: nowrap;
91
- overflow: hidden;
92
- text-overflow: ellipsis;
93
- }
94
-
95
- /* ---------------------------------------------------------
96
- 4. ACCORDION ICON
97
- --------------------------------------------------------- */
98
-
99
- .accordion-icon {
100
- display: inline-block;
101
- width: var(--icon-sm);
102
- height: var(--icon-sm);
103
- flex-shrink: 0;
104
- transform: rotate(0deg);
105
- transition: transform var(--transition-normal);
106
- color: var(--color-icon-muted);
107
- }
108
-
109
- .accordion-item[open] .accordion-icon {
110
- transform: rotate(90deg);
111
- }
112
-
113
- /* ---------------------------------------------------------
114
- 5. ACCORDION BODY
115
- --------------------------------------------------------- */
116
-
117
- .accordion-body {
118
- padding: var(--space-1) var(--space-4) var(--space-4);
119
- color: var(--color-text);
120
- }
121
-
122
- /* ---------------------------------------------------------
123
- 6. OPEN STATE - ACCENT BORDER
124
- --------------------------------------------------------- */
125
-
126
- .accordion-item[open] {
127
- border-left: var(--border-width-strong) solid var(--color-accent);
128
- border-top-left-radius: var(--radius-md);
129
- border-bottom-left-radius: var(--radius-md);
130
- }
131
-
132
- /* ---------------------------------------------------------
133
- 7. SEMANTIC VARIANTS
134
- --------------------------------------------------------- */
135
-
136
- .accordion-item--info[open] {
137
- border-left-color: var(--color-info);
138
- }
139
-
140
- .accordion-item--success[open] {
141
- border-left-color: var(--color-success);
142
- }
143
-
144
- .accordion-item--warning[open] {
145
- border-left-color: var(--color-warning);
146
- }
147
-
148
- .accordion-item--danger[open] {
149
- border-left-color: var(--color-danger);
150
- }
151
-
152
- /* ---------------------------------------------------------
153
- 8. DENSITY ADJUSTMENTS
154
- --------------------------------------------------------- */
155
-
156
- .density-a .accordion-header {
157
- padding: var(--space-2) var(--space-3);
158
- }
159
-
160
- .density-a .accordion-body {
161
- padding: var(--space-1) var(--space-3) var(--space-3);
162
- }
163
-
164
- .density-c .accordion-header {
165
- padding: var(--space-4) var(--space-5);
166
- }
167
-
168
- .density-c .accordion-body {
169
- padding: var(--space-2) var(--space-5) var(--space-5);
170
- }
1
+ .accordion{display:flex;flex-direction:column;gap:var(--space-3)}.accordion-item{background:var(--color-surface);border:var(--border-width) solid var(--color-border-subtle);border-radius:var(--radius-md);overflow:hidden;padding:0}.accordion-item>summary{list-style:none}.accordion-header{align-items:center;color:var(--color-text);cursor:pointer;display:flex;font-weight:var(--font-weight-medium);justify-content:space-between;padding:var(--space-3) var(--space-4);-webkit-user-select:none;-moz-user-select:none;user-select:none;width:100%}.accordion-header:hover{background:var(--color-surface-hover)}.accordion-header:focus-visible{outline:var(--focus-ring-width) solid var(--focus-ring-color);outline-offset:var(--focus-ring-offset)}.accordion-title{align-items:center;color:var(--color-text);display:inline-flex;flex:1;font-size:var(--text-md);font-weight:var(--font-weight-medium);line-height:var(--line-height-normal);min-width:0}.accordion-title--truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.accordion-icon{color:var(--color-icon-muted);display:inline-block;flex-shrink:0;height:var(--icon-sm);transform:rotate(0deg);transition:transform var(--transition-normal);width:var(--icon-sm)}.accordion-item[open] .accordion-icon{transform:rotate(90deg)}.accordion-body{color:var(--color-text);padding:var(--space-1) var(--space-4) var(--space-4)}.accordion-item[open]{border-bottom-left-radius:var(--radius-md);border-left:var(--border-width-strong) solid var(--color-accent);border-top-left-radius:var(--radius-md)}.accordion-item--info[open]{border-left-color:var(--color-info)}.accordion-item--success[open]{border-left-color:var(--color-success)}.accordion-item--warning[open]{border-left-color:var(--color-warning)}.accordion-item--danger[open]{border-left-color:var(--color-danger)}.density-a .accordion-header{padding:var(--space-2) var(--space-3)}.density-a .accordion-body{padding:var(--space-1) var(--space-3) var(--space-3)}.density-c .accordion-header{padding:var(--space-4) var(--space-5)}.density-c .accordion-body{padding:var(--space-2) var(--space-5) var(--space-5)}
@@ -1,332 +1 @@
1
- /************************************************************
2
- * VLAH DESIGN SYSTEM (VDS) - Authoring Layer
3
- *
4
- * Responsibilities:
5
- * - Provide the semantic toolbox for documentation: admonitions,
6
- * MDX-style callouts, inline markers, footnotes, anchors, and prose helpers
7
- * - Define consistent spacing, radii, typography, and borders for long-form
8
- * content blocks across all VDS documentation pages
9
- * - Supply robust heading-anchor behaviour and fully tokenised footnote
10
- * structures for accessible technical writing
11
- * - Integrate seamlessly with doc-block containers to unify documentation
12
- * styling and preserve system-wide hierarchy
13
- *
14
- * System Notes:
15
- * - Pure CSS; no JavaScript dependencies or behavioural assumptions
16
- * - Consumes tokens from primitives + active theme (Carbon/Graphite/Navy/Slate/Titanium)
17
- * - Safe to compose inside doc-blocks, MDX content, and VDS specification pages
18
- * - All variants are token-driven: info/success/warning/danger map directly
19
- * to semantic-* tokens defined in the active theme
20
- ************************************************************/
21
-
22
- /* ---------------------------------------------------------
23
- 1. FOUNDATION / RESET
24
- --------------------------------------------------------- */
25
-
26
- [data-vds-authoring],
27
- .vds-authoring {
28
- --highlight-border-width: var(--border-width-strong);
29
-
30
- --admonition-radius: var(--radius-md);
31
- --admonition-border: var(--highlight-border-width);
32
- --admonition-gap: var(--space-3);
33
- --admonition-pad-y: var(--space-3);
34
- --admonition-pad-x: var(--space-4);
35
-
36
- --footnote-size: var(--text-xs);
37
- --footnote-color: var(--footnote-color, var(--color-text-muted));
38
-
39
- --marker-bg: var(--color-muted-bg);
40
- --marker-border: var(--color-muted-border);
41
- }
42
-
43
- /* ---------------------------------------------------------
44
- 2. ADMONITION SYSTEM (GitHub-style)
45
- --------------------------------------------------------- */
46
-
47
- .admonition {
48
- margin-top: var(--space-4);
49
- margin-bottom: var(--space-4);
50
- padding: var(--admonition-pad-y) var(--admonition-pad-x);
51
-
52
- display: flex;
53
- align-items: flex-start;
54
- gap: var(--admonition-gap);
55
-
56
- border-radius: var(--admonition-radius);
57
- border-left: var(--admonition-border) solid var(--color-border-subtle);
58
- background-color: var(--color-surface-subtle);
59
- color: var(--color-text);
60
- }
61
-
62
- .admonition__icon {
63
- flex-shrink: 0;
64
- margin-top: 0.15em;
65
- font-size: var(--text-lg);
66
- opacity: 0.85;
67
- }
68
-
69
- .admonition__content {
70
- flex: 1 1 auto;
71
- min-width: 0;
72
- }
73
-
74
- .admonition__title {
75
- font-size: var(--text-sm);
76
- font-weight: 600;
77
- text-transform: uppercase;
78
- letter-spacing: 0.06em;
79
- margin-bottom: var(--space-1);
80
- }
81
-
82
- .admonition__body {
83
- font-size: var(--text-sm);
84
- line-height: var(--line-height-relaxed);
85
- }
86
-
87
- .admonition--compact {
88
- padding-top: var(--space-2);
89
- padding-bottom: var(--space-2);
90
- padding-left: var(--space-3);
91
- padding-right: var(--space-3);
92
- }
93
-
94
- /* ---------------------------------------------------------
95
- 2.1 ADMONITION VARIANTS
96
- --------------------------------------------------------- */
97
-
98
- .admonition--note,
99
- .admonition--info {
100
- background-color: var(--semantic-info-bg);
101
- border-color: var(--semantic-info-border);
102
- color: var(--semantic-info-text);
103
- }
104
-
105
- .admonition--tip,
106
- .admonition--success {
107
- background-color: var(--semantic-success-bg);
108
- border-color: var(--semantic-success-border);
109
- color: var(--semantic-success-text);
110
- }
111
-
112
- .admonition--warning {
113
- background-color: var(--semantic-warning-bg);
114
- border-color: var(--semantic-warning-border);
115
- color: var(--semantic-warning-text);
116
- }
117
-
118
- .admonition--danger,
119
- .admonition--important {
120
- background-color: var(--semantic-danger-bg);
121
- border-color: var(--semantic-danger-border);
122
- color: var(--semantic-danger-text);
123
- }
124
-
125
- /* ---------------------------------------------------------
126
- 3. MDX / MARKDOWN CALLOUTS
127
- --------------------------------------------------------- */
128
-
129
- .md-note,
130
- .md-info,
131
- .md-tip,
132
- .md-success,
133
- .md-warning,
134
- .md-danger,
135
- .md-important {
136
- margin-top: var(--space-4);
137
- margin-bottom: var(--space-4);
138
- padding: var(--space-3) var(--space-4);
139
- border-radius: var(--radius-md);
140
- border-left: var(--highlight-border-width) solid currentColor;
141
- font-size: var(--text-sm);
142
- line-height: var(--line-height-relaxed);
143
- }
144
-
145
- .md-note,
146
- .md-info {
147
- background-color: var(--semantic-info-bg);
148
- color: var(--semantic-info-text);
149
- }
150
-
151
- .md-tip,
152
- .md-success {
153
- background-color: var(--semantic-success-bg);
154
- color: var(--semantic-success-text);
155
- }
156
-
157
- .md-warning {
158
- background-color: var(--semantic-warning-bg);
159
- color: var(--semantic-warning-text);
160
- }
161
-
162
- .md-danger,
163
- .md-important {
164
- background-color: var(--semantic-danger-bg);
165
- color: var(--semantic-danger-text);
166
- }
167
-
168
- /* ---------------------------------------------------------
169
- 4. HEADING ANCHORS (Robust)
170
- --------------------------------------------------------- */
171
-
172
- .heading-anchor {
173
- margin-left: var(--space-1);
174
- font-size: 0.8em;
175
- -webkit-text-decoration: none;
176
- text-decoration: none;
177
- opacity: 0;
178
- color: var(--color-text-soft);
179
- transition: opacity var(--transition-fast);
180
- }
181
-
182
- .heading-anchor:hover {
183
- color: var(--link-text-hover);
184
- }
185
-
186
- h1:hover .heading-anchor,
187
- h2:hover .heading-anchor,
188
- h3:hover .heading-anchor,
189
- h4:hover .heading-anchor,
190
- h5:hover .heading-anchor,
191
- h6:hover .heading-anchor,
192
- h1:focus-within .heading-anchor,
193
- h2:focus-within .heading-anchor,
194
- h3:focus-within .heading-anchor,
195
- h4:focus-within .heading-anchor,
196
- h5:focus-within .heading-anchor,
197
- h6:focus-within .heading-anchor {
198
- opacity: 1;
199
- }
200
-
201
- /* ---------------------------------------------------------
202
- 5. FOOTNOTES
203
- --------------------------------------------------------- */
204
-
205
- .fn-ref {
206
- font-size: var(--footnote-size);
207
- vertical-align: super;
208
- color: var(--footnote-color);
209
- -webkit-text-decoration: none;
210
- text-decoration: none;
211
- margin-left: 0.15em;
212
- }
213
-
214
- .fn-ref:hover {
215
- color: var(--link-text-hover);
216
- }
217
-
218
- .fn-back {
219
- font-size: var(--footnote-size);
220
- -webkit-text-decoration: none;
221
- text-decoration: none;
222
- color: var(--footnote-color);
223
- }
224
-
225
- .footnotes {
226
- border-top: 1px solid var(--color-border-subtle);
227
- margin-top: var(--space-8);
228
- padding-top: var(--space-6);
229
- font-size: var(--footnote-size);
230
- }
231
-
232
- .footnotes ol {
233
- padding-left: var(--space-6);
234
- }
235
-
236
- .footnotes li {
237
- margin-bottom: var(--space-3);
238
- }
239
-
240
- /* ---------------------------------------------------------
241
- 6. INLINE MARKERS (Highlight, warning, etc.)
242
- --------------------------------------------------------- */
243
-
244
- .inline-marker {
245
- display: inline-block;
246
- padding: 0 var(--space-1_5);
247
- border-radius: var(--radius-sm);
248
- background: var(--marker-bg);
249
- border: 1px solid var(--marker-border);
250
- font-size: var(--text-xs);
251
- line-height: 1.3;
252
- color: var(--color-text);
253
- }
254
-
255
- .inline-marker--info {
256
- background: var(--semantic-info-bg);
257
- border-color: var(--semantic-info-border);
258
- color: var(--semantic-info-text);
259
- }
260
-
261
- .inline-marker--success {
262
- background: var(--semantic-success-bg);
263
- border-color: var(--semantic-success-border);
264
- color: var(--semantic-success-text);
265
- }
266
-
267
- .inline-marker--warning {
268
- background: var(--semantic-warning-bg);
269
- border-color: var(--semantic-warning-border);
270
- color: var(--semantic-warning-text);
271
- }
272
-
273
- .inline-marker--danger {
274
- background: var(--semantic-danger-bg);
275
- border-color: var(--semantic-danger-border);
276
- color: var(--semantic-danger-text);
277
- }
278
-
279
- /* ---------------------------------------------------------
280
- 7. PROSE HELPERS (Authoring convenience)
281
- --------------------------------------------------------- */
282
-
283
- .prose-lead {
284
- font-size: var(--text-md);
285
- line-height: var(--line-height-relaxed);
286
- color: var(--color-text);
287
- }
288
-
289
- .prose-muted {
290
- color: var(--color-text-muted);
291
- }
292
-
293
- .prose-tight > * + * {
294
- margin-top: var(--space-2);
295
- }
296
-
297
- .prose-relaxed > * + * {
298
- margin-top: var(--space-6);
299
- }
300
-
301
- .prose-grid-2 {
302
- display: grid;
303
- grid-template-columns: repeat(2, 1fr);
304
- grid-gap: var(--space-6);
305
- gap: var(--space-6);
306
- }
307
-
308
- @media (max-width: 1024px) {
309
- .prose-grid-2 {
310
- grid-template-columns: 1fr;
311
- }
312
- }
313
-
314
- /* ---------------------------------------------------------
315
- 8. AUTHORING / DOC-BLOCK INTEGRATION
316
- --------------------------------------------------------- */
317
-
318
- .doc-block__body .admonition {
319
- margin-top: var(--space-3);
320
- margin-bottom: var(--space-3);
321
- }
322
-
323
- .doc-block__body .md-note,
324
- .doc-block__body .md-info,
325
- .doc-block__body .md-tip,
326
- .doc-block__body .md-success,
327
- .doc-block__body .md-warning,
328
- .doc-block__body .md-danger,
329
- .doc-block__body .md-important {
330
- margin-top: var(--space-3);
331
- margin-bottom: var(--space-3);
332
- }
1
+ .vds-authoring,[data-vds-authoring]{--highlight-border-width:var(--border-width-strong);--admonition-radius:var(--radius-md);--admonition-border:var(--highlight-border-width);--admonition-gap:var(--space-3);--admonition-pad-y:var(--space-3);--admonition-pad-x:var(--space-4);--footnote-size:var(--text-xs);--footnote-color:var(--footnote-color,var(--color-text-muted));--marker-bg:var(--color-muted-bg);--marker-border:var(--color-muted-border)}.admonition{align-items:flex-start;background-color:var(--color-surface-subtle);border-left:var(--admonition-border) solid var(--color-border-subtle);border-radius:var(--admonition-radius);color:var(--color-text);display:flex;gap:var(--admonition-gap);margin-bottom:var(--space-4);margin-top:var(--space-4);padding:var(--admonition-pad-y) var(--admonition-pad-x)}.admonition__icon{flex-shrink:0;font-size:var(--text-lg);margin-top:.15em;opacity:.85}.admonition__content{flex:1 1 auto;min-width:0}.admonition__title{font-size:var(--text-sm);font-weight:600;letter-spacing:.06em;margin-bottom:var(--space-1);text-transform:uppercase}.admonition__body{font-size:var(--text-sm);line-height:var(--line-height-relaxed)}.admonition--compact{padding:var(--space-2) var(--space-3)}.admonition--info,.admonition--note{background-color:var(--semantic-info-bg);border-color:var(--semantic-info-border);color:var(--semantic-info-text)}.admonition--success,.admonition--tip{background-color:var(--semantic-success-bg);border-color:var(--semantic-success-border);color:var(--semantic-success-text)}.admonition--warning{background-color:var(--semantic-warning-bg);border-color:var(--semantic-warning-border);color:var(--semantic-warning-text)}.admonition--danger,.admonition--important{background-color:var(--semantic-danger-bg);border-color:var(--semantic-danger-border);color:var(--semantic-danger-text)}.md-danger,.md-important,.md-info,.md-note,.md-success,.md-tip,.md-warning{border-left:var(--highlight-border-width) solid;border-radius:var(--radius-md);font-size:var(--text-sm);line-height:var(--line-height-relaxed);margin-bottom:var(--space-4);margin-top:var(--space-4);padding:var(--space-3) var(--space-4)}.md-info,.md-note{background-color:var(--semantic-info-bg);color:var(--semantic-info-text)}.md-success,.md-tip{background-color:var(--semantic-success-bg);color:var(--semantic-success-text)}.md-warning{background-color:var(--semantic-warning-bg);color:var(--semantic-warning-text)}.md-danger,.md-important{background-color:var(--semantic-danger-bg);color:var(--semantic-danger-text)}.heading-anchor{color:var(--color-text-soft);font-size:.8em;margin-left:var(--space-1);opacity:0;-webkit-text-decoration:none;text-decoration:none;transition:opacity var(--transition-fast)}.heading-anchor:hover{color:var(--link-text-hover)}h1:focus-within .heading-anchor,h1:hover .heading-anchor,h2:focus-within .heading-anchor,h2:hover .heading-anchor,h3:focus-within .heading-anchor,h3:hover .heading-anchor,h4:focus-within .heading-anchor,h4:hover .heading-anchor,h5:focus-within .heading-anchor,h5:hover .heading-anchor,h6:focus-within .heading-anchor,h6:hover .heading-anchor{opacity:1}.fn-ref{color:var(--footnote-color);font-size:var(--footnote-size);margin-left:.15em;-webkit-text-decoration:none;text-decoration:none;vertical-align:super}.fn-ref:hover{color:var(--link-text-hover)}.fn-back{color:var(--footnote-color);-webkit-text-decoration:none;text-decoration:none}.fn-back,.footnotes{font-size:var(--footnote-size)}.footnotes{border-top:1px solid var(--color-border-subtle);margin-top:var(--space-8);padding-top:var(--space-6)}.footnotes ol{padding-left:var(--space-6)}.footnotes li{margin-bottom:var(--space-3)}.inline-marker{background:var(--marker-bg);border:1px solid var(--marker-border);border-radius:var(--radius-sm);color:var(--color-text);display:inline-block;font-size:var(--text-xs);line-height:1.3;padding:0 var(--space-1_5)}.inline-marker--info{background:var(--semantic-info-bg);border-color:var(--semantic-info-border);color:var(--semantic-info-text)}.inline-marker--success{background:var(--semantic-success-bg);border-color:var(--semantic-success-border);color:var(--semantic-success-text)}.inline-marker--warning{background:var(--semantic-warning-bg);border-color:var(--semantic-warning-border);color:var(--semantic-warning-text)}.inline-marker--danger{background:var(--semantic-danger-bg);border-color:var(--semantic-danger-border);color:var(--semantic-danger-text)}.prose-lead{color:var(--color-text);font-size:var(--text-md);line-height:var(--line-height-relaxed)}.prose-muted{color:var(--color-text-muted)}.prose-tight>*+*{margin-top:var(--space-2)}.prose-relaxed>*+*{margin-top:var(--space-6)}.prose-grid-2{grid-gap:var(--space-6);display:grid;gap:var(--space-6);grid-template-columns:repeat(2,1fr)}@media (max-width:1024px){.prose-grid-2{grid-template-columns:1fr}}.doc-block__body .admonition,.doc-block__body .md-danger,.doc-block__body .md-important,.doc-block__body .md-info,.doc-block__body .md-note,.doc-block__body .md-success,.doc-block__body .md-tip,.doc-block__body .md-warning{margin-bottom:var(--space-3);margin-top:var(--space-3)}