@sentropic/design-system-svelte 0.10.0 → 0.10.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.
- package/dist/Button.svelte +11 -0
- package/dist/Card.svelte +7 -0
- package/dist/Checkbox.svelte +25 -6
- package/dist/Checkbox.svelte.d.ts.map +1 -1
- package/dist/Input.svelte +20 -4
- package/dist/Link.svelte +6 -0
- package/dist/Radio.svelte +28 -4
- package/dist/Select.svelte +40 -5
- package/dist/Tabs.svelte +20 -5
- package/dist/Textarea.svelte +14 -3
- package/package.json +4 -4
package/dist/Button.svelte
CHANGED
|
@@ -57,10 +57,17 @@
|
|
|
57
57
|
box-shadow var(--st-motion-fast, 120ms) var(--st-motion-easing, ease);
|
|
58
58
|
}
|
|
59
59
|
|
|
60
|
+
/* Padding is 4-value (top right bottom left): the trailing side reads
|
|
61
|
+
`paddingInlineEnd` so a theme can make the button asymmetric (Carbon's
|
|
62
|
+
label-left primary button has a large right gutter) without a per-component
|
|
63
|
+
escape. `paddingInlineEnd` falls back to `paddingInline` → symmetric for the
|
|
64
|
+
base / DSFR (unchanged). */
|
|
60
65
|
.st-button--sm {
|
|
61
66
|
min-height: var(--st-component-button-anatomy-density-sm-controlHeight, 2rem);
|
|
62
67
|
min-width: var(--st-component-button-anatomy-density-sm-minWidth, 2rem);
|
|
63
68
|
padding: var(--st-component-button-anatomy-density-sm-paddingBlock, 0)
|
|
69
|
+
var(--st-component-button-anatomy-density-sm-paddingInlineEnd, var(--st-component-button-anatomy-density-sm-paddingInline, 0.75rem))
|
|
70
|
+
var(--st-component-button-anatomy-density-sm-paddingBlock, 0)
|
|
64
71
|
var(--st-component-button-anatomy-density-sm-paddingInline, 0.75rem);
|
|
65
72
|
font-size: var(--st-component-button-anatomy-density-sm-fontSize, 0.875rem);
|
|
66
73
|
}
|
|
@@ -69,6 +76,8 @@
|
|
|
69
76
|
min-height: var(--st-component-button-anatomy-density-md-controlHeight, 2.5rem);
|
|
70
77
|
min-width: var(--st-component-button-anatomy-density-md-minWidth, 2.5rem);
|
|
71
78
|
padding: var(--st-component-button-anatomy-density-md-paddingBlock, 0)
|
|
79
|
+
var(--st-component-button-anatomy-density-md-paddingInlineEnd, var(--st-component-button-anatomy-density-md-paddingInline, 1rem))
|
|
80
|
+
var(--st-component-button-anatomy-density-md-paddingBlock, 0)
|
|
72
81
|
var(--st-component-button-anatomy-density-md-paddingInline, 1rem);
|
|
73
82
|
font-size: var(--st-component-button-anatomy-density-md-fontSize, var(--st-component-button-anatomy-typography-size, 0.9375rem));
|
|
74
83
|
}
|
|
@@ -77,6 +86,8 @@
|
|
|
77
86
|
min-height: var(--st-component-button-anatomy-density-lg-controlHeight, 3rem);
|
|
78
87
|
min-width: var(--st-component-button-anatomy-density-lg-minWidth, 3rem);
|
|
79
88
|
padding: var(--st-component-button-anatomy-density-lg-paddingBlock, 0)
|
|
89
|
+
var(--st-component-button-anatomy-density-lg-paddingInlineEnd, var(--st-component-button-anatomy-density-lg-paddingInline, 1.25rem))
|
|
90
|
+
var(--st-component-button-anatomy-density-lg-paddingBlock, 0)
|
|
80
91
|
var(--st-component-button-anatomy-density-lg-paddingInline, 1.25rem);
|
|
81
92
|
font-size: var(--st-component-button-anatomy-density-lg-fontSize, 1rem);
|
|
82
93
|
}
|
package/dist/Card.svelte
CHANGED
|
@@ -27,6 +27,13 @@
|
|
|
27
27
|
border-radius: var(--st-component-card-anatomy-shape-radius, 0.5rem);
|
|
28
28
|
box-shadow: var(--st-component-card-shadow, 0 1px 2px rgb(15 23 42 / 0.08));
|
|
29
29
|
color: var(--st-semantic-text-primary);
|
|
30
|
+
/* Card body typography (anatomy, F5). The base card carried no explicit
|
|
31
|
+
type — so the fallbacks reproduce that exact render (inherit / normal /
|
|
32
|
+
normal). DSFR pins line-height 24px (1.5); Carbon pins its real tile body
|
|
33
|
+
metrics (14px / 14px / 0.16px). Base Sent Tech unchanged. */
|
|
34
|
+
font-size: var(--st-component-card-anatomy-typography-size, inherit);
|
|
35
|
+
line-height: var(--st-component-card-anatomy-typography-lineHeight, normal);
|
|
36
|
+
letter-spacing: var(--st-component-card-anatomy-typography-letterSpacing, normal);
|
|
30
37
|
padding: var(--st-spacing-4, 1rem);
|
|
31
38
|
}
|
|
32
39
|
|
package/dist/Checkbox.svelte
CHANGED
|
@@ -14,7 +14,6 @@
|
|
|
14
14
|
|
|
15
15
|
<label class={classes()}>
|
|
16
16
|
<input {...rest} class="st-choice__input" type="checkbox" aria-invalid={invalid ? "true" : undefined} />
|
|
17
|
-
<span class="st-choice__box" aria-hidden="true"></span>
|
|
18
17
|
<span class="st-choice__content">
|
|
19
18
|
<span class="st-choice__label">{label}</span>
|
|
20
19
|
{#if helperText}<span class="st-choice__help">{helperText}</span>{/if}
|
|
@@ -25,23 +24,43 @@
|
|
|
25
24
|
.st-choice {
|
|
26
25
|
align-items: start;
|
|
27
26
|
color: var(--st-component-field-labelText, var(--st-semantic-text-primary));
|
|
27
|
+
cursor: var(--st-cursor-interactive, pointer);
|
|
28
28
|
display: inline-grid;
|
|
29
29
|
gap: 0.625rem;
|
|
30
30
|
grid-template-columns: auto 1fr;
|
|
31
31
|
}
|
|
32
32
|
|
|
33
33
|
.st-choice__input {
|
|
34
|
-
/*
|
|
35
|
-
|
|
36
|
-
un item dédié (cf. backlog). */
|
|
34
|
+
/* Natif stylé : couleur de coche thémée + taille + focus par stratégie
|
|
35
|
+
d'anatomie + états. Aucun widget custom, a11y native préservée. */
|
|
37
36
|
accent-color: var(--st-component-selection-checkedBackground, var(--st-semantic-action-primary));
|
|
37
|
+
cursor: inherit;
|
|
38
38
|
height: 1rem;
|
|
39
39
|
margin: 0.125rem 0 0;
|
|
40
40
|
width: 1rem;
|
|
41
41
|
}
|
|
42
42
|
|
|
43
|
-
.
|
|
44
|
-
|
|
43
|
+
/* Focus = stratégie d'anatomie partagée (outline DSFR / inset Carbon / ring base). */
|
|
44
|
+
.st-choice__input:focus-visible {
|
|
45
|
+
outline: var(--st-component-control-anatomy-focus-outline, none);
|
|
46
|
+
outline-offset: var(--st-component-control-anatomy-focus-offset, 0);
|
|
47
|
+
box-shadow: var(--st-component-control-anatomy-focus-boxShadow,
|
|
48
|
+
0 0 0 2px var(--st-component-control-focusRing, var(--st-semantic-border-interactive)));
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
.st-choice__input[aria-invalid="true"] {
|
|
52
|
+
accent-color: var(--st-component-control-invalidBorder, var(--st-semantic-feedback-error));
|
|
53
|
+
outline-color: var(--st-component-control-invalidBorder, var(--st-semantic-feedback-error));
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
.st-choice__input:disabled {
|
|
57
|
+
cursor: var(--st-cursor-disabled, not-allowed);
|
|
58
|
+
opacity: 0.55;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
.st-choice:has(.st-choice__input:disabled) {
|
|
62
|
+
color: var(--st-component-control-disabledText, var(--st-semantic-text-muted));
|
|
63
|
+
cursor: var(--st-cursor-disabled, not-allowed);
|
|
45
64
|
}
|
|
46
65
|
|
|
47
66
|
.st-choice__content {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Checkbox.svelte.d.ts","sourceRoot":"","sources":["../src/lib/Checkbox.svelte.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAGzD,KAAK,aAAa,GAAG,IAAI,CAAC,mBAAmB,EAAE,OAAO,GAAG,MAAM,CAAC,GAAG;IACjE,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;
|
|
1
|
+
{"version":3,"file":"Checkbox.svelte.d.ts","sourceRoot":"","sources":["../src/lib/Checkbox.svelte.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAGzD,KAAK,aAAa,GAAG,IAAI,CAAC,mBAAmB,EAAE,OAAO,GAAG,MAAM,CAAC,GAAG;IACjE,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAqBJ,QAAA,MAAM,QAAQ,mDAAwC,CAAC;AACvD,KAAK,QAAQ,GAAG,UAAU,CAAC,OAAO,QAAQ,CAAC,CAAC;AAC5C,eAAe,QAAQ,CAAC"}
|
package/dist/Input.svelte
CHANGED
|
@@ -90,12 +90,24 @@
|
|
|
90
90
|
border-right: var(--st-component-control-anatomy-field-borderRight, var(--st-component-control-anatomy-shape-borderWidth, 1px) var(--st-component-control-anatomy-shape-borderStyle, solid) var(--st-component-control-border, var(--st-semantic-border-subtle)));
|
|
91
91
|
border-bottom: var(--st-component-control-anatomy-field-borderBottom, var(--st-component-control-anatomy-shape-borderWidth, 1px) var(--st-component-control-anatomy-shape-borderStyle, solid) var(--st-component-control-border, var(--st-semantic-border-subtle)));
|
|
92
92
|
border-left: var(--st-component-control-anatomy-field-borderLeft, var(--st-component-control-anatomy-shape-borderWidth, 1px) var(--st-component-control-anatomy-shape-borderStyle, solid) var(--st-component-control-border, var(--st-semantic-border-subtle)));
|
|
93
|
-
|
|
93
|
+
/* Per-corner radius (anatomy v1.3.0): the TOP corners read the field's
|
|
94
|
+
`radiusTop` (DSFR « Champ de saisie » = 4px top, square bottom); the
|
|
95
|
+
BOTTOM corners keep `shape.radius`. Fallback = shape.radius on all four
|
|
96
|
+
corners → the base Sent Tech field stays a uniform rounded box. */
|
|
97
|
+
border-top-left-radius: var(--st-component-control-anatomy-field-radiusTop, var(--st-component-control-anatomy-shape-radius, 0.375rem));
|
|
98
|
+
border-top-right-radius: var(--st-component-control-anatomy-field-radiusTop, var(--st-component-control-anatomy-shape-radius, 0.375rem));
|
|
99
|
+
border-bottom-right-radius: var(--st-component-control-anatomy-shape-radius, 0.375rem);
|
|
100
|
+
border-bottom-left-radius: var(--st-component-control-anatomy-shape-radius, 0.375rem);
|
|
101
|
+
/* Bottom rule as a box-shadow inset (anatomy v1.3.0, real DSFR/Carbon
|
|
102
|
+
technique) instead of a border-bottom — keeps the box height honest.
|
|
103
|
+
Fallback = none → the base boxed field draws its rule via the 4 borders. */
|
|
104
|
+
box-shadow: var(--st-component-control-anatomy-field-underline, none);
|
|
94
105
|
color: var(--st-component-control-text, var(--st-semantic-text-primary));
|
|
95
106
|
font-family: var(--st-component-control-anatomy-typography-family, inherit);
|
|
96
107
|
font-size: var(--st-component-control-anatomy-typography-size, inherit);
|
|
97
108
|
font-weight: var(--st-component-control-anatomy-typography-weight, 400);
|
|
98
109
|
line-height: var(--st-component-control-anatomy-typography-lineHeight, 1.5);
|
|
110
|
+
letter-spacing: var(--st-component-control-anatomy-typography-letterSpacing, normal);
|
|
99
111
|
min-width: 0;
|
|
100
112
|
/* Inputs use the SM inline padding (denser than buttons) — base = 0.75rem. */
|
|
101
113
|
padding: var(--st-component-control-anatomy-density-md-paddingBlock, 0)
|
|
@@ -128,13 +140,17 @@
|
|
|
128
140
|
}
|
|
129
141
|
|
|
130
142
|
/* Focus = shared mixin. Base/DSFR use outline; Carbon uses inset box-shadow.
|
|
131
|
-
The border-color change is the field's own affordance and stays.
|
|
143
|
+
The border-color change is the field's own affordance and stays. The field
|
|
144
|
+
focus box-shadow (anatomy v1.3.0) is COMPOSED so the resting underline is
|
|
145
|
+
not dropped: DSFR (outline) keeps the underline, Carbon stacks ring +
|
|
146
|
+
underline. Fallback = the plain focus ring (base boxed field). */
|
|
132
147
|
.st-control:focus-visible {
|
|
133
148
|
border-color: var(--st-component-control-focusRing, var(--st-semantic-border-interactive));
|
|
134
149
|
outline: var(--st-component-control-anatomy-focus-outline, none);
|
|
135
150
|
outline-offset: var(--st-component-control-anatomy-focus-offset, 0);
|
|
136
|
-
box-shadow: var(--st-component-control-anatomy-
|
|
137
|
-
|
|
151
|
+
box-shadow: var(--st-component-control-anatomy-field-focusShadow,
|
|
152
|
+
var(--st-component-control-anatomy-focus-boxShadow,
|
|
153
|
+
0 0 0 2px var(--st-component-control-focusRing, var(--st-semantic-border-interactive))));
|
|
138
154
|
}
|
|
139
155
|
|
|
140
156
|
.st-control[aria-invalid="true"] {
|
package/dist/Link.svelte
CHANGED
|
@@ -58,6 +58,12 @@
|
|
|
58
58
|
.st-link {
|
|
59
59
|
color: var(--st-component-link-text, var(--st-semantic-text-link));
|
|
60
60
|
cursor: var(--st-cursor-interactive, pointer);
|
|
61
|
+
/* Anatomy typography (additive): size/line-height/letter-spacing follow the
|
|
62
|
+
link role per theme. Base/DSFR use `inherit`/`normal` fallbacks → no visible
|
|
63
|
+
change; Carbon poses 14px / 18px / 0.16px to match the real .bx--link. */
|
|
64
|
+
font-size: var(--st-component-link-anatomy-typography-size, inherit);
|
|
65
|
+
line-height: var(--st-component-link-anatomy-typography-lineHeight, normal);
|
|
66
|
+
letter-spacing: var(--st-component-link-anatomy-typography-letterSpacing, normal);
|
|
61
67
|
text-decoration: var(--st-component-link-anatomy-typography-textDecoration, underline);
|
|
62
68
|
text-decoration-thickness: var(--st-component-link-anatomy-typography-decorationThickness, auto);
|
|
63
69
|
text-underline-offset: var(--st-component-link-anatomy-typography-decorationOffset, 0.18em);
|
package/dist/Radio.svelte
CHANGED
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
</script>
|
|
14
14
|
|
|
15
15
|
<label class={classes()}>
|
|
16
|
-
<input {...rest} class="st-choice__input" type="radio"
|
|
16
|
+
<input {...rest} class="st-choice__input" type="radio" aria-invalid={invalid ? "true" : undefined} />
|
|
17
17
|
<span class="st-choice__content">
|
|
18
18
|
<span class="st-choice__label">{label}</span>
|
|
19
19
|
{#if helperText}<span class="st-choice__help">{helperText}</span>{/if}
|
|
@@ -24,21 +24,45 @@
|
|
|
24
24
|
.st-choice {
|
|
25
25
|
align-items: start;
|
|
26
26
|
color: var(--st-component-field-labelText, var(--st-semantic-text-primary));
|
|
27
|
+
cursor: var(--st-cursor-interactive, pointer);
|
|
27
28
|
display: inline-grid;
|
|
28
29
|
gap: 0.625rem;
|
|
29
30
|
grid-template-columns: auto 1fr;
|
|
30
31
|
}
|
|
31
32
|
|
|
32
33
|
.st-choice__input {
|
|
33
|
-
/*
|
|
34
|
-
|
|
35
|
-
un item dédié (cf. backlog). */
|
|
34
|
+
/* Natif stylé : couleur de sélection thémée + taille + focus par stratégie
|
|
35
|
+
d'anatomie + états. Aucun widget custom, a11y native préservée. */
|
|
36
36
|
accent-color: var(--st-component-selection-checkedBackground, var(--st-semantic-action-primary));
|
|
37
|
+
cursor: inherit;
|
|
37
38
|
height: 1rem;
|
|
38
39
|
margin: 0.125rem 0 0;
|
|
39
40
|
width: 1rem;
|
|
40
41
|
}
|
|
41
42
|
|
|
43
|
+
/* Focus = stratégie d'anatomie partagée (outline DSFR / inset Carbon / ring base). */
|
|
44
|
+
.st-choice__input:focus-visible {
|
|
45
|
+
outline: var(--st-component-control-anatomy-focus-outline, none);
|
|
46
|
+
outline-offset: var(--st-component-control-anatomy-focus-offset, 0);
|
|
47
|
+
box-shadow: var(--st-component-control-anatomy-focus-boxShadow,
|
|
48
|
+
0 0 0 2px var(--st-component-control-focusRing, var(--st-semantic-border-interactive)));
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
.st-choice__input[aria-invalid="true"] {
|
|
52
|
+
accent-color: var(--st-component-control-invalidBorder, var(--st-semantic-feedback-error));
|
|
53
|
+
outline-color: var(--st-component-control-invalidBorder, var(--st-semantic-feedback-error));
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
.st-choice__input:disabled {
|
|
57
|
+
cursor: var(--st-cursor-disabled, not-allowed);
|
|
58
|
+
opacity: 0.55;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
.st-choice:has(.st-choice__input:disabled) {
|
|
62
|
+
color: var(--st-component-control-disabledText, var(--st-semantic-text-muted));
|
|
63
|
+
cursor: var(--st-cursor-disabled, not-allowed);
|
|
64
|
+
}
|
|
65
|
+
|
|
42
66
|
.st-choice__content {
|
|
43
67
|
display: grid;
|
|
44
68
|
gap: 0.25rem;
|
package/dist/Select.svelte
CHANGED
|
@@ -87,19 +87,52 @@
|
|
|
87
87
|
|
|
88
88
|
/* Field box = resolved field anatomy (v1.2.0), same as Input. */
|
|
89
89
|
.st-select {
|
|
90
|
-
|
|
90
|
+
/* Native <select> rendering (anatomy v1.4.0, F5/F9). A native <select> with
|
|
91
|
+
`appearance: auto` has its `line-height` FORCED to `normal` by the browser
|
|
92
|
+
(the anatomy line-height below never lands); `appearance: none` lets it
|
|
93
|
+
take effect — the real DSFR/Carbon selects use `appearance: none` + a
|
|
94
|
+
drawn chevron, which is why they render 24px / 18px. Base = `auto` so the
|
|
95
|
+
Sent Tech select keeps its NATIVE arrow + render (unchanged). When a theme
|
|
96
|
+
opts into `none`, `selectChevron` redraws the arrow the UA dropped. */
|
|
97
|
+
appearance: var(--st-component-control-anatomy-field-selectAppearance, auto);
|
|
98
|
+
-webkit-appearance: var(--st-component-control-anatomy-field-selectAppearance, auto);
|
|
99
|
+
background:
|
|
100
|
+
var(--st-component-control-anatomy-field-selectChevron, none),
|
|
101
|
+
var(--st-component-control-anatomy-field-fillBg, var(--st-component-control-background, var(--st-semantic-surface-default)));
|
|
91
102
|
border-top: var(--st-component-control-anatomy-field-borderTop, var(--st-component-control-anatomy-shape-borderWidth, 1px) var(--st-component-control-anatomy-shape-borderStyle, solid) var(--st-component-control-border, var(--st-semantic-border-subtle)));
|
|
92
103
|
border-right: var(--st-component-control-anatomy-field-borderRight, var(--st-component-control-anatomy-shape-borderWidth, 1px) var(--st-component-control-anatomy-shape-borderStyle, solid) var(--st-component-control-border, var(--st-semantic-border-subtle)));
|
|
93
104
|
border-bottom: var(--st-component-control-anatomy-field-borderBottom, var(--st-component-control-anatomy-shape-borderWidth, 1px) var(--st-component-control-anatomy-shape-borderStyle, solid) var(--st-component-control-border, var(--st-semantic-border-subtle)));
|
|
94
105
|
border-left: var(--st-component-control-anatomy-field-borderLeft, var(--st-component-control-anatomy-shape-borderWidth, 1px) var(--st-component-control-anatomy-shape-borderStyle, solid) var(--st-component-control-border, var(--st-semantic-border-subtle)));
|
|
95
|
-
|
|
106
|
+
/* Per-corner radius + box-shadow underline (anatomy v1.3.0) — same field
|
|
107
|
+
anatomy as Input. TOP corners = radiusTop (DSFR 4px), bottom = shape.radius;
|
|
108
|
+
bottom rule via inset box-shadow. Fallbacks reproduce the prior uniform
|
|
109
|
+
rounded box with no underline shadow → base Sent Tech unchanged. */
|
|
110
|
+
border-top-left-radius: var(--st-component-control-anatomy-field-radiusTop, var(--st-component-control-anatomy-shape-radius, 0.375rem));
|
|
111
|
+
border-top-right-radius: var(--st-component-control-anatomy-field-radiusTop, var(--st-component-control-anatomy-shape-radius, 0.375rem));
|
|
112
|
+
border-bottom-right-radius: var(--st-component-control-anatomy-shape-radius, 0.375rem);
|
|
113
|
+
border-bottom-left-radius: var(--st-component-control-anatomy-shape-radius, 0.375rem);
|
|
114
|
+
box-shadow: var(--st-component-control-anatomy-field-underline, none);
|
|
96
115
|
color: var(--st-component-control-text, var(--st-semantic-text-primary));
|
|
97
116
|
font-family: var(--st-component-control-anatomy-typography-family, inherit);
|
|
98
117
|
font-size: var(--st-component-control-anatomy-typography-size, inherit);
|
|
99
118
|
font-weight: var(--st-component-control-anatomy-typography-weight, 400);
|
|
119
|
+
/* Native <select> renders `line-height: normal` unless one is set explicitly;
|
|
120
|
+
pose the anatomy line-height so DSFR/Carbon select matches the field roles
|
|
121
|
+
(cluster 4). letter-spacing likewise (Carbon 0.16px). Additive — base keeps
|
|
122
|
+
its 1.5 fallback so the Sent Tech select is unchanged. */
|
|
100
123
|
line-height: var(--st-component-control-anatomy-typography-lineHeight, 1.5);
|
|
124
|
+
letter-spacing: var(--st-component-control-anatomy-typography-letterSpacing, normal);
|
|
101
125
|
min-width: 0;
|
|
102
|
-
|
|
126
|
+
/* Padding follows the field density (additive; fallbacks reproduce the prior
|
|
127
|
+
`0 2rem 0 0.75rem` literal so the base Sent Tech select is unchanged):
|
|
128
|
+
vertical = md paddingBlock (base 0 → DSFR 8px), left = sm paddingInline
|
|
129
|
+
(base 0.75rem → DSFR/Carbon 16px). The right side reserves the chevron
|
|
130
|
+
gutter via selectPaddingRight (F9: base 2rem → DSFR 40px / Carbon 48px). */
|
|
131
|
+
padding:
|
|
132
|
+
var(--st-component-control-anatomy-density-md-paddingBlock, 0)
|
|
133
|
+
var(--st-component-control-anatomy-field-selectPaddingRight, 2rem)
|
|
134
|
+
var(--st-component-control-anatomy-density-md-paddingBlock, 0)
|
|
135
|
+
var(--st-component-control-anatomy-density-sm-paddingInline, 0.75rem);
|
|
103
136
|
width: 100%;
|
|
104
137
|
}
|
|
105
138
|
|
|
@@ -119,8 +152,10 @@
|
|
|
119
152
|
border-color: var(--st-component-control-focusRing, var(--st-semantic-border-interactive));
|
|
120
153
|
outline: var(--st-component-control-anatomy-focus-outline, none);
|
|
121
154
|
outline-offset: var(--st-component-control-anatomy-focus-offset, 0);
|
|
122
|
-
box-shadow:
|
|
123
|
-
|
|
155
|
+
/* Composed field focus box-shadow (v1.3.0): keeps the resting underline. */
|
|
156
|
+
box-shadow: var(--st-component-control-anatomy-field-focusShadow,
|
|
157
|
+
var(--st-component-control-anatomy-focus-boxShadow,
|
|
158
|
+
0 0 0 2px var(--st-component-control-focusRing, var(--st-semantic-border-interactive))));
|
|
124
159
|
}
|
|
125
160
|
|
|
126
161
|
.st-select[aria-invalid="true"] {
|
package/dist/Tabs.svelte
CHANGED
|
@@ -63,7 +63,9 @@
|
|
|
63
63
|
|
|
64
64
|
<style>
|
|
65
65
|
.st-tabs {
|
|
66
|
-
|
|
66
|
+
/* Wrapper/panel text = neutral primary (NOT the active-tab colour, which is
|
|
67
|
+
Bleu France in DSFR and must not bleed into the panel body). */
|
|
68
|
+
color: var(--st-semantic-text-primary);
|
|
67
69
|
display: grid;
|
|
68
70
|
gap: var(--st-spacing-4, 1rem);
|
|
69
71
|
}
|
|
@@ -77,22 +79,35 @@
|
|
|
77
79
|
.st-tabs__tab {
|
|
78
80
|
background: transparent;
|
|
79
81
|
border: 0;
|
|
80
|
-
|
|
82
|
+
/* Indicator edge (F7/F8): base/Carbon carry it on the BOTTOM, DSFR on the
|
|
83
|
+
TOP. The resting tab keeps the same-width transparent stroke on each edge
|
|
84
|
+
so the baseline does not shift when a tab becomes active. */
|
|
85
|
+
border-top-width: var(--st-component-tabs-activeBorderTopWidth, 0);
|
|
86
|
+
border-bottom-width: var(--st-component-tabs-activeBorderBottomWidth, var(--st-component-tabs-anatomy-shape-borderWidth, 2px));
|
|
87
|
+
border-top-style: var(--st-component-tabs-anatomy-shape-borderStyle, solid);
|
|
81
88
|
border-bottom-style: var(--st-component-tabs-anatomy-shape-borderStyle, solid);
|
|
89
|
+
border-top-color: transparent;
|
|
82
90
|
border-bottom-color: transparent;
|
|
83
91
|
color: var(--st-component-tabs-inactiveText, var(--st-semantic-text-secondary));
|
|
84
92
|
cursor: var(--st-cursor-interactive, pointer);
|
|
85
93
|
font-family: var(--st-component-tabs-anatomy-typography-family, inherit);
|
|
94
|
+
font-size: var(--st-component-tabs-tabFontSize, inherit);
|
|
86
95
|
font-weight: var(--st-component-tabs-anatomy-typography-weight, 600);
|
|
87
|
-
line-height: var(--st-component-tabs-anatomy-typography-lineHeight, 1.2);
|
|
96
|
+
line-height: var(--st-component-tabs-tabLineHeight, var(--st-component-tabs-anatomy-typography-lineHeight, 1.2));
|
|
88
97
|
letter-spacing: var(--st-component-tabs-anatomy-typography-letterSpacing, 0);
|
|
89
98
|
text-transform: var(--st-component-tabs-anatomy-typography-textTransform, none);
|
|
90
|
-
padding: 0.75rem 0.25rem;
|
|
99
|
+
padding: var(--st-component-tabs-tabPaddingBlock, 0.75rem) var(--st-component-tabs-tabPaddingInline, 0.25rem);
|
|
91
100
|
}
|
|
92
101
|
|
|
93
102
|
.st-tabs__tab--active {
|
|
103
|
+
background: var(--st-component-tabs-activeBackground, transparent);
|
|
104
|
+
border-top-color: var(--st-component-tabs-indicator, var(--st-semantic-action-primary));
|
|
94
105
|
border-bottom-color: var(--st-component-tabs-indicator, var(--st-semantic-action-primary));
|
|
95
|
-
|
|
106
|
+
/* Indicator accent when the theme draws it as a box-shadow (DSFR top filet)
|
|
107
|
+
rather than a real border — keeps both border sides at `0 none`. */
|
|
108
|
+
box-shadow: var(--st-component-tabs-activeShadow, none);
|
|
109
|
+
font-weight: var(--st-component-tabs-activeWeight, var(--st-component-tabs-anatomy-typography-weight, 600));
|
|
110
|
+
color: var(--st-component-tabs-activeText, var(--st-semantic-text-primary));
|
|
96
111
|
}
|
|
97
112
|
|
|
98
113
|
/* a11y (non-negotiable): tabs previously had NO visible focus ring. The
|
package/dist/Textarea.svelte
CHANGED
|
@@ -87,12 +87,21 @@
|
|
|
87
87
|
border-right: var(--st-component-control-anatomy-field-borderRight, var(--st-component-control-anatomy-shape-borderWidth, 1px) var(--st-component-control-anatomy-shape-borderStyle, solid) var(--st-component-control-border, var(--st-semantic-border-subtle)));
|
|
88
88
|
border-bottom: var(--st-component-control-anatomy-field-borderBottom, var(--st-component-control-anatomy-shape-borderWidth, 1px) var(--st-component-control-anatomy-shape-borderStyle, solid) var(--st-component-control-border, var(--st-semantic-border-subtle)));
|
|
89
89
|
border-left: var(--st-component-control-anatomy-field-borderLeft, var(--st-component-control-anatomy-shape-borderWidth, 1px) var(--st-component-control-anatomy-shape-borderStyle, solid) var(--st-component-control-border, var(--st-semantic-border-subtle)));
|
|
90
|
-
|
|
90
|
+
/* Per-corner radius + box-shadow underline (anatomy v1.3.0) — same field
|
|
91
|
+
anatomy as Input: TOP corners = radiusTop (DSFR 4px), bottom = shape.radius;
|
|
92
|
+
bottom rule via inset box-shadow. Fallbacks reproduce the prior uniform
|
|
93
|
+
rounded box with no underline shadow → base Sent Tech unchanged. */
|
|
94
|
+
border-top-left-radius: var(--st-component-control-anatomy-field-radiusTop, var(--st-component-control-anatomy-shape-radius, 0.375rem));
|
|
95
|
+
border-top-right-radius: var(--st-component-control-anatomy-field-radiusTop, var(--st-component-control-anatomy-shape-radius, 0.375rem));
|
|
96
|
+
border-bottom-right-radius: var(--st-component-control-anatomy-shape-radius, 0.375rem);
|
|
97
|
+
border-bottom-left-radius: var(--st-component-control-anatomy-shape-radius, 0.375rem);
|
|
98
|
+
box-shadow: var(--st-component-control-anatomy-field-underline, none);
|
|
91
99
|
color: var(--st-component-control-text, var(--st-semantic-text-primary));
|
|
92
100
|
font-family: var(--st-component-control-anatomy-typography-family, inherit);
|
|
93
101
|
font-size: var(--st-component-control-anatomy-typography-size, inherit);
|
|
94
102
|
font-weight: var(--st-component-control-anatomy-typography-weight, 400);
|
|
95
103
|
line-height: var(--st-component-control-anatomy-typography-lineHeight, 1.5);
|
|
104
|
+
letter-spacing: var(--st-component-control-anatomy-typography-letterSpacing, normal);
|
|
96
105
|
min-height: 6rem;
|
|
97
106
|
min-width: 0;
|
|
98
107
|
padding: 0.625rem var(--st-component-control-anatomy-density-sm-paddingInline, 0.75rem);
|
|
@@ -115,8 +124,10 @@
|
|
|
115
124
|
border-color: var(--st-component-control-focusRing, var(--st-semantic-border-interactive));
|
|
116
125
|
outline: var(--st-component-control-anatomy-focus-outline, none);
|
|
117
126
|
outline-offset: var(--st-component-control-anatomy-focus-offset, 0);
|
|
118
|
-
box-shadow:
|
|
119
|
-
|
|
127
|
+
/* Composed field focus box-shadow (v1.3.0): keeps the resting underline. */
|
|
128
|
+
box-shadow: var(--st-component-control-anatomy-field-focusShadow,
|
|
129
|
+
var(--st-component-control-anatomy-focus-boxShadow,
|
|
130
|
+
0 0 0 2px var(--st-component-control-focusRing, var(--st-semantic-border-interactive))));
|
|
120
131
|
}
|
|
121
132
|
|
|
122
133
|
.st-textarea[aria-invalid="true"] {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sentropic/design-system-svelte",
|
|
3
|
-
"version": "0.10.
|
|
3
|
+
"version": "0.10.1",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"access": "public"
|
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
],
|
|
28
28
|
"dependencies": {
|
|
29
29
|
"@lucide/svelte": "^0.562.0",
|
|
30
|
-
"@sentropic/design-system-themes": "0.10.
|
|
30
|
+
"@sentropic/design-system-themes": "0.10.1"
|
|
31
31
|
},
|
|
32
32
|
"peerDependencies": {
|
|
33
33
|
"svelte": "^5.53.2"
|
|
@@ -38,8 +38,8 @@
|
|
|
38
38
|
"test": "vitest run src"
|
|
39
39
|
},
|
|
40
40
|
"devDependencies": {
|
|
41
|
-
"@sentropic/design-system-theme-carbon": "0.2.
|
|
42
|
-
"@sentropic/design-system-theme-dsfr": "0.2.
|
|
41
|
+
"@sentropic/design-system-theme-carbon": "0.2.1",
|
|
42
|
+
"@sentropic/design-system-theme-dsfr": "0.2.1",
|
|
43
43
|
"@sveltejs/package": "^2.5.0",
|
|
44
44
|
"@sveltejs/vite-plugin-svelte": "^6.2.4",
|
|
45
45
|
"@testing-library/svelte": "^5.2.8",
|