@teseor/css 1.4.0 → 1.6.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 (59) hide show
  1. package/dist/compiled.css +1 -1
  2. package/dist/index.css +22 -0
  3. package/package.json +1 -1
  4. package/src/04-components/actions/close-button/close-button-visual.png +0 -0
  5. package/src/04-components/actions/close-button/close-button.api.json +71 -0
  6. package/src/04-components/actions/close-button/close-button.docs.json +264 -0
  7. package/src/04-components/actions/close-button/close-button.visual.spec.ts +14 -0
  8. package/src/04-components/actions/close-button/index.scss +101 -0
  9. package/src/04-components/data-display/image/image-visual.png +0 -0
  10. package/src/04-components/data-display/image/image.api.json +76 -0
  11. package/src/04-components/data-display/image/image.docs.json +337 -0
  12. package/src/04-components/data-display/image/image.visual.spec.ts +14 -0
  13. package/src/04-components/data-display/image/index.scss +103 -0
  14. package/src/04-components/feedback/progress-circle/index.scss +92 -0
  15. package/src/04-components/feedback/progress-circle/progress-circle-visual.png +0 -0
  16. package/src/04-components/feedback/progress-circle/progress-circle.api.json +53 -0
  17. package/src/04-components/feedback/progress-circle/progress-circle.docs.json +377 -0
  18. package/src/04-components/feedback/progress-circle/progress-circle.visual.spec.ts +14 -0
  19. package/src/04-components/forms/checkbox-group/checkbox-group-visual.png +0 -0
  20. package/src/04-components/forms/checkbox-group/checkbox-group.api.json +54 -0
  21. package/src/04-components/forms/checkbox-group/checkbox-group.docs.json +338 -0
  22. package/src/04-components/forms/checkbox-group/checkbox-group.visual.spec.ts +14 -0
  23. package/src/04-components/forms/checkbox-group/index.scss +84 -0
  24. package/src/04-components/forms/fieldset/fieldset-visual.png +0 -0
  25. package/src/04-components/forms/fieldset/fieldset.api.json +49 -0
  26. package/src/04-components/forms/fieldset/fieldset.docs.json +520 -0
  27. package/src/04-components/forms/fieldset/fieldset.visual.spec.ts +14 -0
  28. package/src/04-components/forms/fieldset/index.scss +69 -0
  29. package/src/04-components/forms/form/form-visual.png +0 -0
  30. package/src/04-components/forms/form/form.api.json +38 -0
  31. package/src/04-components/forms/form/form.docs.json +482 -0
  32. package/src/04-components/forms/form/form.visual.spec.ts +14 -0
  33. package/src/04-components/forms/form/index.scss +62 -0
  34. package/src/04-components/forms/radio-group/index.scss +84 -0
  35. package/src/04-components/forms/radio-group/radio-group-visual.png +0 -0
  36. package/src/04-components/forms/radio-group/radio-group.api.json +54 -0
  37. package/src/04-components/forms/radio-group/radio-group.docs.json +350 -0
  38. package/src/04-components/forms/radio-group/radio-group.visual.spec.ts +14 -0
  39. package/src/04-components/forms/search-input/index.scss +172 -0
  40. package/src/04-components/forms/search-input/search-input-visual.png +0 -0
  41. package/src/04-components/forms/search-input/search-input.api.json +85 -0
  42. package/src/04-components/forms/search-input/search-input.docs.json +257 -0
  43. package/src/04-components/forms/search-input/search-input.visual.spec.ts +14 -0
  44. package/src/04-components/forms/slider/index.scss +153 -0
  45. package/src/04-components/forms/slider/slider-visual.png +0 -0
  46. package/src/04-components/forms/slider/slider.api.json +70 -0
  47. package/src/04-components/forms/slider/slider.docs.json +144 -0
  48. package/src/04-components/forms/slider/slider.visual.spec.ts +14 -0
  49. package/src/04-components/index.scss +11 -0
  50. package/src/04-components/typography/code-block/code-block-visual.png +0 -0
  51. package/src/04-components/typography/code-block/code-block.api.json +56 -0
  52. package/src/04-components/typography/code-block/code-block.docs.json +289 -0
  53. package/src/04-components/typography/code-block/code-block.visual.spec.ts +14 -0
  54. package/src/04-components/typography/code-block/index.scss +87 -0
  55. package/src/04-components/typography/list/index.scss +65 -0
  56. package/src/04-components/typography/list/list-visual.png +0 -0
  57. package/src/04-components/typography/list/list.api.json +33 -0
  58. package/src/04-components/typography/list/list.docs.json +293 -0
  59. package/src/04-components/typography/list/list.visual.spec.ts +14 -0
@@ -0,0 +1,338 @@
1
+ {
2
+ "id": "checkbox-group",
3
+ "type": "component",
4
+ "title": "Checkbox Group",
5
+ "description": "Groups related checkboxes with a legend and consistent spacing. Built on native fieldset semantics.",
6
+ "api": "./checkbox-group.api.json",
7
+ "sections": [
8
+ {
9
+ "title": "Default",
10
+ "examples": [
11
+ {
12
+ "items": [
13
+ {
14
+ "tag": "fieldset",
15
+ "class": "ui-checkbox-group",
16
+ "children": [
17
+ {
18
+ "tag": "legend",
19
+ "class": "ui-checkbox-group__legend",
20
+ "text": "Notifications"
21
+ },
22
+ {
23
+ "tag": "div",
24
+ "class": "ui-checkbox-group__items",
25
+ "children": [
26
+ {
27
+ "tag": "label",
28
+ "class": "ui-checkbox-group__item",
29
+ "children": [
30
+ {
31
+ "tag": "input",
32
+ "class": "ui-checkbox",
33
+ "attrs": { "type": "checkbox", "checked": "" }
34
+ },
35
+ { "tag": "span", "text": "Email" }
36
+ ]
37
+ },
38
+ {
39
+ "tag": "label",
40
+ "class": "ui-checkbox-group__item",
41
+ "children": [
42
+ { "tag": "input", "class": "ui-checkbox", "attrs": { "type": "checkbox" } },
43
+ { "tag": "span", "text": "SMS" }
44
+ ]
45
+ },
46
+ {
47
+ "tag": "label",
48
+ "class": "ui-checkbox-group__item",
49
+ "children": [
50
+ { "tag": "input", "class": "ui-checkbox", "attrs": { "type": "checkbox" } },
51
+ { "tag": "span", "text": "Push" }
52
+ ]
53
+ }
54
+ ]
55
+ }
56
+ ]
57
+ }
58
+ ],
59
+ "code": "<fieldset class=\"ui-checkbox-group\">\n <legend class=\"ui-checkbox-group__legend\">Notifications</legend>\n <div class=\"ui-checkbox-group__items\">\n <label class=\"ui-checkbox-group__item\">\n <input type=\"checkbox\" class=\"ui-checkbox\" checked>\n <span>Email</span>\n </label>\n ...\n </div>\n</fieldset>"
60
+ }
61
+ ]
62
+ },
63
+ {
64
+ "title": "Horizontal",
65
+ "examples": [
66
+ {
67
+ "items": [
68
+ {
69
+ "tag": "fieldset",
70
+ "class": "ui-checkbox-group ui-checkbox-group--horizontal",
71
+ "children": [
72
+ {
73
+ "tag": "legend",
74
+ "class": "ui-checkbox-group__legend",
75
+ "text": "Interests"
76
+ },
77
+ {
78
+ "tag": "div",
79
+ "class": "ui-checkbox-group__items",
80
+ "children": [
81
+ {
82
+ "tag": "label",
83
+ "class": "ui-checkbox-group__item",
84
+ "children": [
85
+ {
86
+ "tag": "input",
87
+ "class": "ui-checkbox",
88
+ "attrs": { "type": "checkbox", "checked": "" }
89
+ },
90
+ { "tag": "span", "text": "Design" }
91
+ ]
92
+ },
93
+ {
94
+ "tag": "label",
95
+ "class": "ui-checkbox-group__item",
96
+ "children": [
97
+ { "tag": "input", "class": "ui-checkbox", "attrs": { "type": "checkbox" } },
98
+ { "tag": "span", "text": "Engineering" }
99
+ ]
100
+ },
101
+ {
102
+ "tag": "label",
103
+ "class": "ui-checkbox-group__item",
104
+ "children": [
105
+ {
106
+ "tag": "input",
107
+ "class": "ui-checkbox",
108
+ "attrs": { "type": "checkbox", "checked": "" }
109
+ },
110
+ { "tag": "span", "text": "Product" }
111
+ ]
112
+ },
113
+ {
114
+ "tag": "label",
115
+ "class": "ui-checkbox-group__item",
116
+ "children": [
117
+ { "tag": "input", "class": "ui-checkbox", "attrs": { "type": "checkbox" } },
118
+ { "tag": "span", "text": "Marketing" }
119
+ ]
120
+ }
121
+ ]
122
+ }
123
+ ]
124
+ }
125
+ ],
126
+ "code": "<fieldset class=\"ui-checkbox-group ui-checkbox-group--horizontal\">\n <legend class=\"ui-checkbox-group__legend\">Interests</legend>\n ...\n</fieldset>"
127
+ }
128
+ ]
129
+ },
130
+ {
131
+ "title": "Compact",
132
+ "examples": [
133
+ {
134
+ "items": [
135
+ {
136
+ "tag": "fieldset",
137
+ "class": "ui-checkbox-group ui-checkbox-group--compact",
138
+ "children": [
139
+ {
140
+ "tag": "legend",
141
+ "class": "ui-checkbox-group__legend",
142
+ "text": "Features"
143
+ },
144
+ {
145
+ "tag": "div",
146
+ "class": "ui-checkbox-group__items",
147
+ "children": [
148
+ {
149
+ "tag": "label",
150
+ "class": "ui-checkbox-group__item",
151
+ "children": [
152
+ {
153
+ "tag": "input",
154
+ "class": "ui-checkbox",
155
+ "attrs": { "type": "checkbox", "checked": "" }
156
+ },
157
+ { "tag": "span", "text": "Dark mode" }
158
+ ]
159
+ },
160
+ {
161
+ "tag": "label",
162
+ "class": "ui-checkbox-group__item",
163
+ "children": [
164
+ {
165
+ "tag": "input",
166
+ "class": "ui-checkbox",
167
+ "attrs": { "type": "checkbox", "checked": "" }
168
+ },
169
+ { "tag": "span", "text": "Notifications" }
170
+ ]
171
+ },
172
+ {
173
+ "tag": "label",
174
+ "class": "ui-checkbox-group__item",
175
+ "children": [
176
+ { "tag": "input", "class": "ui-checkbox", "attrs": { "type": "checkbox" } },
177
+ { "tag": "span", "text": "Analytics" }
178
+ ]
179
+ }
180
+ ]
181
+ }
182
+ ]
183
+ }
184
+ ],
185
+ "code": "<fieldset class=\"ui-checkbox-group ui-checkbox-group--compact\">\n ...\n</fieldset>"
186
+ }
187
+ ]
188
+ },
189
+ {
190
+ "title": "Error State",
191
+ "examples": [
192
+ {
193
+ "items": [
194
+ {
195
+ "tag": "fieldset",
196
+ "class": "ui-checkbox-group ui-checkbox-group--error",
197
+ "children": [
198
+ {
199
+ "tag": "legend",
200
+ "class": "ui-checkbox-group__legend",
201
+ "text": "Terms"
202
+ },
203
+ {
204
+ "tag": "div",
205
+ "class": "ui-checkbox-group__items",
206
+ "children": [
207
+ {
208
+ "tag": "label",
209
+ "class": "ui-checkbox-group__item",
210
+ "children": [
211
+ {
212
+ "tag": "input",
213
+ "class": "ui-checkbox ui-checkbox--error",
214
+ "attrs": { "type": "checkbox" }
215
+ },
216
+ { "tag": "span", "text": "I accept the terms of service" }
217
+ ]
218
+ },
219
+ {
220
+ "tag": "label",
221
+ "class": "ui-checkbox-group__item",
222
+ "children": [
223
+ {
224
+ "tag": "input",
225
+ "class": "ui-checkbox ui-checkbox--error",
226
+ "attrs": { "type": "checkbox" }
227
+ },
228
+ { "tag": "span", "text": "I accept the privacy policy" }
229
+ ]
230
+ }
231
+ ]
232
+ },
233
+ {
234
+ "tag": "span",
235
+ "class": "ui-form-error",
236
+ "text": "You must accept all terms to continue"
237
+ }
238
+ ]
239
+ }
240
+ ],
241
+ "code": "<fieldset class=\"ui-checkbox-group ui-checkbox-group--error\">\n <legend class=\"ui-checkbox-group__legend\">Terms</legend>\n <div class=\"ui-checkbox-group__items\">\n <label class=\"ui-checkbox-group__item\">\n <input type=\"checkbox\" class=\"ui-checkbox ui-checkbox--error\">\n <span>I accept the terms of service</span>\n </label>\n ...\n </div>\n <span class=\"ui-form-error\">You must accept all terms to continue</span>\n</fieldset>"
242
+ }
243
+ ]
244
+ },
245
+ {
246
+ "title": "Disabled",
247
+ "examples": [
248
+ {
249
+ "items": [
250
+ {
251
+ "tag": "fieldset",
252
+ "class": "ui-checkbox-group",
253
+ "attrs": { "disabled": "" },
254
+ "children": [
255
+ {
256
+ "tag": "legend",
257
+ "class": "ui-checkbox-group__legend",
258
+ "text": "Permissions (locked)"
259
+ },
260
+ {
261
+ "tag": "div",
262
+ "class": "ui-checkbox-group__items",
263
+ "children": [
264
+ {
265
+ "tag": "label",
266
+ "class": "ui-checkbox-group__item",
267
+ "children": [
268
+ {
269
+ "tag": "input",
270
+ "class": "ui-checkbox",
271
+ "attrs": { "type": "checkbox", "checked": "" }
272
+ },
273
+ { "tag": "span", "text": "Read" }
274
+ ]
275
+ },
276
+ {
277
+ "tag": "label",
278
+ "class": "ui-checkbox-group__item",
279
+ "children": [
280
+ {
281
+ "tag": "input",
282
+ "class": "ui-checkbox",
283
+ "attrs": { "type": "checkbox", "checked": "" }
284
+ },
285
+ { "tag": "span", "text": "Write" }
286
+ ]
287
+ },
288
+ {
289
+ "tag": "label",
290
+ "class": "ui-checkbox-group__item",
291
+ "children": [
292
+ { "tag": "input", "class": "ui-checkbox", "attrs": { "type": "checkbox" } },
293
+ { "tag": "span", "text": "Admin" }
294
+ ]
295
+ }
296
+ ]
297
+ }
298
+ ]
299
+ }
300
+ ],
301
+ "code": "<fieldset class=\"ui-checkbox-group\" disabled>\n ...\n</fieldset>"
302
+ }
303
+ ]
304
+ }
305
+ ],
306
+ "customization": [
307
+ {
308
+ "token": "--ui-checkbox-group-spacing",
309
+ "default": "var(--ui-space-1)",
310
+ "description": "Gap between checkbox items"
311
+ },
312
+ {
313
+ "token": "--ui-checkbox-group-legend-size",
314
+ "default": "var(--ui-font-size-sm)",
315
+ "description": "Legend font size"
316
+ },
317
+ {
318
+ "token": "--ui-checkbox-group-legend-weight",
319
+ "default": "var(--ui-weight-medium)",
320
+ "description": "Legend font weight"
321
+ },
322
+ {
323
+ "token": "--ui-checkbox-group-legend-color",
324
+ "default": "var(--ui-color-text)",
325
+ "description": "Legend text color"
326
+ },
327
+ {
328
+ "token": "--ui-checkbox-group-item-gap",
329
+ "default": "var(--ui-space-1)",
330
+ "description": "Gap between checkbox and label text"
331
+ },
332
+ {
333
+ "token": "--ui-checkbox-group-error-color",
334
+ "default": "var(--ui-color-danger)",
335
+ "description": "Legend color in error state"
336
+ }
337
+ ]
338
+ }
@@ -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, 'checkbox-group.docs.json');
6
+
7
+ test.describe('checkbox-group visual regression', () => {
8
+ test('all variations', async ({ page }) => {
9
+ await setupVisualTestFromDocs(page, DOCS_PATH);
10
+ await validateGridRhythm(page, 'checkbox-group');
11
+ await saveForLostPixel(page, 'checkbox-group');
12
+ await expect(page.locator('body')).toHaveScreenshot('checkbox-group.visual.png');
13
+ });
14
+ });
@@ -0,0 +1,84 @@
1
+ @use '../../../00-config/tokens/variables' as t;
2
+
3
+ // @component checkbox-group
4
+ // @element fieldset
5
+
6
+ @layer components.tokens {
7
+ .checkbox-group {
8
+ --_spacing: var(--ui-checkbox-group-spacing, var(--ui-space-1, #{t.$space-1}));
9
+ --_legend-size: var(--ui-checkbox-group-legend-size, var(--ui-font-size-sm, #{t.$font-size-sm}));
10
+ --_legend-weight: var(--ui-checkbox-group-legend-weight, var(--ui-weight-medium, #{t.$weight-medium}));
11
+ --_legend-color: var(--ui-checkbox-group-legend-color, var(--ui-color-text, #{t.$color-text}));
12
+ --_legend-spacing: var(--ui-checkbox-group-legend-spacing, var(--ui-space-1, #{t.$space-1}));
13
+ --_item-gap: var(--ui-checkbox-group-item-gap, var(--ui-space-1, #{t.$space-1}));
14
+ }
15
+
16
+ .checkbox-group--compact {
17
+ --_spacing: var(--ui-checkbox-group-spacing-compact, 0);
18
+ --_legend-spacing: var(--ui-checkbox-group-legend-spacing-compact, 0);
19
+ --_item-gap: var(--ui-checkbox-group-item-gap-compact, 0);
20
+ }
21
+
22
+ // @modifier state
23
+ .checkbox-group--error {
24
+ --_legend-color: var(--ui-checkbox-group-error-color, var(--ui-color-danger, #{t.$color-danger}));
25
+ }
26
+ }
27
+
28
+ @layer components.styles {
29
+ .checkbox-group {
30
+ display: flex;
31
+ flex-direction: column;
32
+ gap: var(--_legend-spacing);
33
+
34
+ min-inline-size: 0;
35
+ padding: 0;
36
+ margin: 0;
37
+
38
+ border: none;
39
+ }
40
+
41
+ .checkbox-group__legend {
42
+ padding: 0;
43
+
44
+ font-size: var(--_legend-size);
45
+ font-weight: var(--_legend-weight);
46
+ line-height: var(--ui-leading-tight-sm, var(--ui-row-1, #{t.$leading-tight-sm}));
47
+ color: var(--_legend-color);
48
+ }
49
+
50
+ .checkbox-group__items {
51
+ display: flex;
52
+ flex-direction: column;
53
+ gap: var(--_spacing);
54
+ }
55
+
56
+ .checkbox-group__item {
57
+ display: flex;
58
+ align-items: center;
59
+ gap: var(--_item-gap);
60
+
61
+ line-height: var(--ui-row-1, #{t.$row-1});
62
+
63
+ cursor: pointer;
64
+ }
65
+
66
+ .checkbox-group__item:has(:disabled) {
67
+ opacity: 0.5;
68
+ cursor: not-allowed;
69
+ }
70
+
71
+ // Horizontal layout
72
+ .checkbox-group--horizontal > .checkbox-group__items {
73
+ flex-direction: row;
74
+ flex-wrap: wrap;
75
+ gap: var(--ui-space-2, #{t.$space-2});
76
+ }
77
+
78
+ // Disabled group
79
+ .checkbox-group:disabled,
80
+ .checkbox-group[aria-disabled='true'] {
81
+ opacity: 0.5;
82
+ cursor: not-allowed;
83
+ }
84
+ }
@@ -0,0 +1,49 @@
1
+ {
2
+ "name": "fieldset",
3
+ "element": "fieldset",
4
+ "modifiers": {
5
+ "bordered": {
6
+ "type": "boolean"
7
+ },
8
+ "compact": {
9
+ "type": "boolean"
10
+ }
11
+ },
12
+ "elements": {
13
+ "legend": {}
14
+ },
15
+ "cssVars": [
16
+ {
17
+ "name": "--ui-fieldset-spacing",
18
+ "default": "var(--ui-space-2)"
19
+ },
20
+ {
21
+ "name": "--ui-fieldset-border-color",
22
+ "default": "var(--ui-color-border)"
23
+ },
24
+ {
25
+ "name": "--ui-fieldset-border-width",
26
+ "default": "var(--ui-border-width-sm)"
27
+ },
28
+ {
29
+ "name": "--ui-fieldset-border-radius",
30
+ "default": "var(--ui-radius-md)"
31
+ },
32
+ {
33
+ "name": "--ui-fieldset-padding",
34
+ "default": "var(--ui-space-2)"
35
+ },
36
+ {
37
+ "name": "--ui-fieldset-legend-size",
38
+ "default": "var(--ui-font-size-sm)"
39
+ },
40
+ {
41
+ "name": "--ui-fieldset-legend-weight",
42
+ "default": "var(--ui-weight-medium)"
43
+ },
44
+ {
45
+ "name": "--ui-fieldset-legend-color",
46
+ "default": "var(--ui-color-text)"
47
+ }
48
+ ]
49
+ }