@teseor/css 1.3.0 → 1.5.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.
Files changed (74) hide show
  1. package/dist/compiled.css +1 -1
  2. package/dist/index.css +28 -9
  3. package/package.json +1 -1
  4. package/src/03-layout/app-shell/app-shell.api.json +18 -0
  5. package/src/03-layout/app-shell/app-shell.docs.json +18 -0
  6. package/src/03-layout/content/content-visual.png +0 -0
  7. package/src/03-layout/content/content.api.json +26 -0
  8. package/src/03-layout/content/content.docs.json +82 -0
  9. package/src/03-layout/content/content.visual.spec.ts +14 -0
  10. package/src/03-layout/content/index.scss +25 -0
  11. package/src/03-layout/footer/footer-visual.png +0 -0
  12. package/src/03-layout/footer/footer.api.json +45 -0
  13. package/src/03-layout/footer/footer.docs.json +110 -0
  14. package/src/03-layout/footer/footer.visual.spec.ts +14 -0
  15. package/src/03-layout/footer/index.scss +62 -0
  16. package/src/03-layout/index.scss +11 -6
  17. package/src/03-layout/main/index.scss +1 -0
  18. package/src/03-layout/nav-rail/index.scss +50 -0
  19. package/src/03-layout/nav-rail/nav-rail-visual.png +0 -0
  20. package/src/03-layout/nav-rail/nav-rail.api.json +35 -0
  21. package/src/03-layout/nav-rail/nav-rail.docs.json +76 -0
  22. package/src/03-layout/nav-rail/nav-rail.visual.spec.ts +14 -0
  23. package/src/03-layout/page-header/index.scss +52 -0
  24. package/src/03-layout/page-header/page-header-visual.png +0 -0
  25. package/src/03-layout/page-header/page-header.api.json +35 -0
  26. package/src/03-layout/page-header/page-header.docs.json +124 -0
  27. package/src/03-layout/page-header/page-header.visual.spec.ts +14 -0
  28. package/src/03-layout/sidebar/index.scss +2 -2
  29. package/src/03-layout/topbar/index.scss +62 -0
  30. package/src/03-layout/topbar/topbar-visual.png +0 -0
  31. package/src/03-layout/topbar/topbar.api.json +45 -0
  32. package/src/03-layout/topbar/topbar.docs.json +110 -0
  33. package/src/03-layout/topbar/topbar.visual.spec.ts +14 -0
  34. package/src/04-components/actions/close-button/close-button-visual.png +0 -0
  35. package/src/04-components/actions/close-button/close-button.api.json +71 -0
  36. package/src/04-components/actions/close-button/close-button.docs.json +264 -0
  37. package/src/04-components/actions/close-button/close-button.visual.spec.ts +14 -0
  38. package/src/04-components/actions/close-button/index.scss +101 -0
  39. package/src/04-components/data-display/avatar/avatar-visual.png +0 -0
  40. package/src/04-components/data-display/image/image-visual.png +0 -0
  41. package/src/04-components/data-display/image/image.api.json +76 -0
  42. package/src/04-components/data-display/image/image.docs.json +337 -0
  43. package/src/04-components/data-display/image/image.visual.spec.ts +14 -0
  44. package/src/04-components/data-display/image/index.scss +103 -0
  45. package/src/04-components/disclosure/accordion/accordion-visual.png +0 -0
  46. package/src/04-components/disclosure/disclosure/disclosure-visual.png +0 -0
  47. package/src/04-components/feedback/progress-circle/index.scss +92 -0
  48. package/src/04-components/feedback/progress-circle/progress-circle-visual.png +0 -0
  49. package/src/04-components/feedback/progress-circle/progress-circle.api.json +53 -0
  50. package/src/04-components/feedback/progress-circle/progress-circle.docs.json +377 -0
  51. package/src/04-components/feedback/progress-circle/progress-circle.visual.spec.ts +14 -0
  52. package/src/04-components/forms/field/field-visual.png +0 -0
  53. package/src/04-components/forms/fieldset/fieldset-visual.png +0 -0
  54. package/src/04-components/forms/fieldset/fieldset.api.json +49 -0
  55. package/src/04-components/forms/fieldset/fieldset.docs.json +520 -0
  56. package/src/04-components/forms/fieldset/fieldset.visual.spec.ts +14 -0
  57. package/src/04-components/forms/fieldset/index.scss +69 -0
  58. package/src/04-components/forms/form/form-visual.png +0 -0
  59. package/src/04-components/forms/form/form.api.json +38 -0
  60. package/src/04-components/forms/form/form.docs.json +482 -0
  61. package/src/04-components/forms/form/form.visual.spec.ts +14 -0
  62. package/src/04-components/forms/form/index.scss +62 -0
  63. package/src/04-components/forms/input/input-visual.png +0 -0
  64. package/src/04-components/index.scss +8 -1
  65. package/src/04-components/typography/code-block/code-block-visual.png +0 -0
  66. package/src/04-components/typography/code-block/code-block.api.json +56 -0
  67. package/src/04-components/typography/code-block/code-block.docs.json +289 -0
  68. package/src/04-components/typography/code-block/code-block.visual.spec.ts +14 -0
  69. package/src/04-components/typography/code-block/index.scss +87 -0
  70. package/src/04-components/typography/list/index.scss +65 -0
  71. package/src/04-components/typography/list/list-visual.png +0 -0
  72. package/src/04-components/typography/list/list.api.json +33 -0
  73. package/src/04-components/typography/list/list.docs.json +293 -0
  74. package/src/04-components/typography/list/list.visual.spec.ts +14 -0
@@ -0,0 +1,289 @@
1
+ {
2
+ "id": "code-block",
3
+ "type": "component",
4
+ "title": "Code Block",
5
+ "description": "Multi-line code display with monospace font, horizontal scroll, and optional line numbers.",
6
+ "api": "./code-block.api.json",
7
+ "sections": [
8
+ {
9
+ "title": "Default",
10
+ "examples": [
11
+ {
12
+ "items": [
13
+ {
14
+ "tag": "pre",
15
+ "class": "ui-code-block",
16
+ "children": [
17
+ {
18
+ "tag": "code",
19
+ "class": "ui-code-block__code",
20
+ "text": ".button {\n display: inline-flex;\n align-items: center;\n gap: var(--ui-space-1);\n}"
21
+ }
22
+ ]
23
+ }
24
+ ]
25
+ }
26
+ ]
27
+ },
28
+ {
29
+ "title": "Horizontal overflow",
30
+ "examples": [
31
+ {
32
+ "items": [
33
+ {
34
+ "tag": "pre",
35
+ "class": "ui-code-block",
36
+ "children": [
37
+ {
38
+ "tag": "code",
39
+ "class": "ui-code-block__code",
40
+ "text": "export function calculateGridRhythm(element: HTMLElement, unit: number): { violations: string[]; totalHeight: number } {\n const computed = getComputedStyle(element);\n return { violations: [], totalHeight: parseFloat(computed.height) };\n}"
41
+ }
42
+ ]
43
+ }
44
+ ]
45
+ }
46
+ ]
47
+ },
48
+ {
49
+ "title": "Compact",
50
+ "examples": [
51
+ {
52
+ "items": [
53
+ {
54
+ "tag": "pre",
55
+ "class": "ui-code-block ui-code-block--compact",
56
+ "children": [
57
+ {
58
+ "tag": "code",
59
+ "class": "ui-code-block__code",
60
+ "text": "npm install @teseor/css\nimport \"@teseor/css/dist/index.css\";"
61
+ }
62
+ ]
63
+ }
64
+ ]
65
+ }
66
+ ]
67
+ },
68
+ {
69
+ "title": "Line numbers",
70
+ "examples": [
71
+ {
72
+ "items": [
73
+ {
74
+ "tag": "pre",
75
+ "class": "ui-code-block ui-code-block--line-numbers",
76
+ "children": [
77
+ {
78
+ "tag": "code",
79
+ "class": "ui-code-block__code",
80
+ "children": [
81
+ {
82
+ "tag": "span",
83
+ "class": "ui-code-block__line",
84
+ "children": [
85
+ {
86
+ "tag": "span",
87
+ "class": "ui-code-block__line-number"
88
+ },
89
+ {
90
+ "tag": "span",
91
+ "text": "@layer components {"
92
+ }
93
+ ]
94
+ },
95
+ {
96
+ "tag": "span",
97
+ "class": "ui-code-block__line",
98
+ "children": [
99
+ {
100
+ "tag": "span",
101
+ "class": "ui-code-block__line-number"
102
+ },
103
+ {
104
+ "tag": "span",
105
+ "text": " .card {"
106
+ }
107
+ ]
108
+ },
109
+ {
110
+ "tag": "span",
111
+ "class": "ui-code-block__line",
112
+ "children": [
113
+ {
114
+ "tag": "span",
115
+ "class": "ui-code-block__line-number"
116
+ },
117
+ {
118
+ "tag": "span",
119
+ "text": " padding: var(--_padding);"
120
+ }
121
+ ]
122
+ },
123
+ {
124
+ "tag": "span",
125
+ "class": "ui-code-block__line",
126
+ "children": [
127
+ {
128
+ "tag": "span",
129
+ "class": "ui-code-block__line-number"
130
+ },
131
+ {
132
+ "tag": "span",
133
+ "text": " background: var(--_bg);"
134
+ }
135
+ ]
136
+ },
137
+ {
138
+ "tag": "span",
139
+ "class": "ui-code-block__line",
140
+ "children": [
141
+ {
142
+ "tag": "span",
143
+ "class": "ui-code-block__line-number"
144
+ },
145
+ {
146
+ "tag": "span",
147
+ "text": " border-radius: var(--_radius);"
148
+ }
149
+ ]
150
+ },
151
+ {
152
+ "tag": "span",
153
+ "class": "ui-code-block__line",
154
+ "children": [
155
+ {
156
+ "tag": "span",
157
+ "class": "ui-code-block__line-number"
158
+ },
159
+ {
160
+ "tag": "span",
161
+ "text": " }"
162
+ }
163
+ ]
164
+ },
165
+ {
166
+ "tag": "span",
167
+ "class": "ui-code-block__line",
168
+ "children": [
169
+ {
170
+ "tag": "span",
171
+ "class": "ui-code-block__line-number"
172
+ },
173
+ {
174
+ "tag": "span",
175
+ "text": "}"
176
+ }
177
+ ]
178
+ }
179
+ ]
180
+ }
181
+ ]
182
+ }
183
+ ]
184
+ }
185
+ ]
186
+ },
187
+ {
188
+ "title": "Compact with line numbers",
189
+ "examples": [
190
+ {
191
+ "items": [
192
+ {
193
+ "tag": "pre",
194
+ "class": "ui-code-block ui-code-block--compact ui-code-block--line-numbers",
195
+ "children": [
196
+ {
197
+ "tag": "code",
198
+ "class": "ui-code-block__code",
199
+ "children": [
200
+ {
201
+ "tag": "span",
202
+ "class": "ui-code-block__line",
203
+ "children": [
204
+ {
205
+ "tag": "span",
206
+ "class": "ui-code-block__line-number"
207
+ },
208
+ {
209
+ "tag": "span",
210
+ "text": "const name = \"world\";"
211
+ }
212
+ ]
213
+ },
214
+ {
215
+ "tag": "span",
216
+ "class": "ui-code-block__line",
217
+ "children": [
218
+ {
219
+ "tag": "span",
220
+ "class": "ui-code-block__line-number"
221
+ },
222
+ {
223
+ "tag": "span",
224
+ "text": "console.log(`Hello, ${name}`);"
225
+ }
226
+ ]
227
+ }
228
+ ]
229
+ }
230
+ ]
231
+ }
232
+ ]
233
+ }
234
+ ]
235
+ }
236
+ ],
237
+ "customization": [
238
+ {
239
+ "token": "--ui-code-block-bg",
240
+ "default": "var(--ui-color-bg-muted)",
241
+ "description": "Background color"
242
+ },
243
+ {
244
+ "token": "--ui-code-block-color",
245
+ "default": "var(--ui-color-text)",
246
+ "description": "Text color"
247
+ },
248
+ {
249
+ "token": "--ui-code-block-border-color",
250
+ "default": "var(--ui-color-border)",
251
+ "description": "Border color"
252
+ },
253
+ {
254
+ "token": "--ui-code-block-padding",
255
+ "default": "var(--ui-space-3)",
256
+ "description": "Content padding"
257
+ },
258
+ {
259
+ "token": "--ui-code-block-font-size",
260
+ "default": "var(--ui-font-size-sm)",
261
+ "description": "Font size"
262
+ },
263
+ {
264
+ "token": "--ui-code-block-line-height",
265
+ "default": "var(--ui-leading-tight-sm)",
266
+ "description": "Line height"
267
+ },
268
+ {
269
+ "token": "--ui-code-block-radius",
270
+ "default": "var(--ui-radius-md)",
271
+ "description": "Border radius"
272
+ },
273
+ {
274
+ "token": "--ui-code-block-padding-compact",
275
+ "default": "var(--ui-space-1)",
276
+ "description": "Padding for compact variant"
277
+ },
278
+ {
279
+ "token": "--ui-code-block-line-number-color",
280
+ "default": "var(--ui-color-text-muted)",
281
+ "description": "Line number text color"
282
+ },
283
+ {
284
+ "token": "--ui-code-block-line-number-border-color",
285
+ "default": "var(--ui-color-border)",
286
+ "description": "Line number separator color"
287
+ }
288
+ ]
289
+ }
@@ -0,0 +1,14 @@
1
+ import { resolve } from 'node:path';
2
+ import { expect, test } from '@playwright/test';
3
+ import { saveForLostPixel, setupVisualTestFromDocs, validateGridRhythm } from '../../../testing';
4
+
5
+ const DOCS_PATH = resolve(__dirname, 'code-block.docs.json');
6
+
7
+ test.describe('code-block visual regression', () => {
8
+ test('all variations', async ({ page }) => {
9
+ await setupVisualTestFromDocs(page, DOCS_PATH);
10
+ await validateGridRhythm(page, 'code-block');
11
+ await saveForLostPixel(page, 'code-block');
12
+ await expect(page.locator('body')).toHaveScreenshot('code-block.visual.png');
13
+ });
14
+ });
@@ -0,0 +1,87 @@
1
+ @use '../../../00-config/tokens/variables' as t;
2
+
3
+ // Token definitions
4
+ @layer components.tokens {
5
+ .code-block {
6
+ --_bg: var(--ui-code-block-bg, var(--ui-color-bg-muted, #{t.$color-bg-muted}));
7
+ --_color: var(--ui-code-block-color, var(--ui-color-text, #{t.$color-text}));
8
+ --_border-color: var(--ui-code-block-border-color, var(--ui-color-border, #{t.$color-border}));
9
+ --_padding: var(--ui-code-block-padding, var(--ui-space-3, #{t.$space-3}));
10
+ --_font-size: var(--ui-code-block-font-size, var(--ui-font-size-sm, #{t.$font-size-sm}));
11
+ --_line-height: var(--ui-code-block-line-height, var(--ui-leading-tight-sm, #{t.$leading-tight-sm}));
12
+ --_radius: var(--ui-code-block-radius, var(--ui-radius-md, #{t.$radius-md}));
13
+ }
14
+
15
+ .code-block--compact {
16
+ --_padding: var(--ui-code-block-padding-compact, var(--ui-space-1, #{t.$space-1}));
17
+ }
18
+
19
+ .code-block--line-numbers {
20
+ --_line-number-color: var(--ui-code-block-line-number-color, var(--ui-color-text-muted, #{t.$color-text-muted}));
21
+ --_line-number-border-color: var(--ui-code-block-line-number-border-color, var(--ui-color-border, #{t.$color-border}));
22
+ }
23
+ }
24
+
25
+ // Implementation
26
+ @layer components.styles {
27
+ .code-block {
28
+ display: block;
29
+ // Subtract border from padding to keep total on grid
30
+ padding: calc(var(--_padding) - var(--ui-border-width-sm, #{t.$border-width-sm}));
31
+ overflow-x: auto;
32
+
33
+ font-family: var(--ui-font-mono, #{t.$font-mono});
34
+ font-size: var(--_font-size);
35
+ line-height: var(--_line-height);
36
+ white-space: pre;
37
+ color: var(--_color);
38
+
39
+ background: var(--_bg);
40
+ border: var(--ui-border-width-sm, #{t.$border-width-sm}) solid var(--_border-color);
41
+ border-radius: var(--_radius);
42
+ }
43
+
44
+ // Reset nested code element
45
+ .code-block__code {
46
+ padding: 0;
47
+
48
+ font: inherit;
49
+ color: inherit;
50
+
51
+ background: none;
52
+ border: none;
53
+ }
54
+
55
+ // Line numbers via CSS counters
56
+ .code-block--line-numbers {
57
+ counter-reset: line-number;
58
+
59
+ padding-inline-start: 0;
60
+
61
+ .code-block__line {
62
+ display: block;
63
+ }
64
+
65
+ .code-block__line-number {
66
+ display: inline-block;
67
+ counter-increment: line-number;
68
+
69
+ box-sizing: border-box;
70
+ min-inline-size: var(--ui-space-4, #{t.$space-4});
71
+ padding-inline-end: var(--ui-space-2, #{t.$space-2});
72
+ margin-inline-end: var(--ui-space-2, #{t.$space-2});
73
+
74
+ font-variant-numeric: tabular-nums;
75
+
76
+ text-align: end;
77
+ color: var(--_line-number-color);
78
+
79
+ border-inline-end: var(--ui-border-width-sm, #{t.$border-width-sm}) solid var(--_line-number-border-color);
80
+ user-select: none;
81
+
82
+ &::before {
83
+ content: counter(line-number);
84
+ }
85
+ }
86
+ }
87
+ }
@@ -0,0 +1,65 @@
1
+ @use '../../../00-config/tokens/variables' as t;
2
+
3
+ // Ordered and unordered lists with spacing and layout variants
4
+
5
+ @layer components.tokens {
6
+ .list {
7
+ --_spacing: var(--ui-list-spacing, #{t.$unit});
8
+ --_marker-color: var(--ui-list-marker-color, var(--ui-color-text-muted, #{t.$color-text-muted}));
9
+ --_indent: var(--ui-list-indent, var(--ui-space-3, #{t.$space-3}));
10
+ --_line-height: var(--ui-list-line-height, var(--ui-leading-md, #{t.$leading-md}));
11
+ }
12
+
13
+ // @modifier spacing
14
+ .list--compact {
15
+ --_spacing: 0;
16
+ }
17
+
18
+ .list--loose {
19
+ --_spacing: calc(#{t.$unit} * 2);
20
+ }
21
+ }
22
+
23
+ @layer components.styles {
24
+ .list {
25
+ display: flex;
26
+ flex-direction: column;
27
+ gap: var(--_spacing);
28
+
29
+ padding-inline-start: var(--_indent);
30
+ margin: 0;
31
+
32
+ line-height: var(--_line-height);
33
+ }
34
+
35
+ .list::marker,
36
+ .list li::marker {
37
+ color: var(--_marker-color);
38
+ }
39
+
40
+ // Removes markers and indent
41
+ .list--unstyled {
42
+ padding-inline-start: 0;
43
+
44
+ list-style: none;
45
+ }
46
+
47
+ // Horizontal flow with wrapping
48
+ .list--inline {
49
+ flex-direction: row;
50
+ flex-wrap: wrap;
51
+
52
+ padding-inline-start: 0;
53
+
54
+ list-style: none;
55
+ }
56
+
57
+ // Nested lists inherit spacing
58
+ .list .list {
59
+ margin-block-start: var(--_spacing);
60
+ }
61
+
62
+ .list__item {
63
+ line-height: var(--_line-height);
64
+ }
65
+ }
@@ -0,0 +1,33 @@
1
+ {
2
+ "name": "list",
3
+ "element": "ul",
4
+ "modifiers": {
5
+ "style": {
6
+ "values": ["unstyled", "inline"]
7
+ },
8
+ "spacing": {
9
+ "values": ["compact", "loose"]
10
+ }
11
+ },
12
+ "elements": {
13
+ "item": {}
14
+ },
15
+ "cssVars": [
16
+ {
17
+ "name": "--ui-list-spacing",
18
+ "default": "var(--unit)"
19
+ },
20
+ {
21
+ "name": "--ui-list-marker-color",
22
+ "default": "var(--ui-color-text-muted)"
23
+ },
24
+ {
25
+ "name": "--ui-list-indent",
26
+ "default": "var(--ui-space-3)"
27
+ },
28
+ {
29
+ "name": "--ui-list-line-height",
30
+ "default": "var(--ui-leading-md)"
31
+ }
32
+ ]
33
+ }